handsontable 16.1.1-next-895fbb8-20250923 → 16.2.0-next-216dbd0-20251112

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 (301) hide show
  1. package/3rdparty/walkontable/src/overlays.js +1 -1
  2. package/3rdparty/walkontable/src/overlays.mjs +1 -1
  3. package/3rdparty/walkontable/src/selection/border/border.js +19 -3
  4. package/3rdparty/walkontable/src/selection/border/border.mjs +19 -3
  5. package/CHANGELOG.md +40 -0
  6. package/base.js +2 -2
  7. package/base.mjs +2 -2
  8. package/core/coordsMapper/index.js +11 -0
  9. package/core/coordsMapper/index.mjs +1 -0
  10. package/core/hooks/bucket.js +7 -1
  11. package/core/hooks/bucket.mjs +7 -1
  12. package/core/hooks/constants.js +54 -0
  13. package/core/hooks/constants.mjs +54 -0
  14. package/core/hooks/index.d.ts +6 -0
  15. package/core/index.js +10 -4
  16. package/core/index.mjs +2 -1
  17. package/core.d.ts +3 -2
  18. package/core.js +67 -26
  19. package/core.mjs +56 -15
  20. package/dataMap/metaManager/metaSchema.js +197 -20
  21. package/dataMap/metaManager/metaSchema.mjs +197 -20
  22. package/dist/handsontable.css +175 -3
  23. package/dist/handsontable.full.css +175 -3
  24. package/dist/handsontable.full.js +10940 -8445
  25. package/dist/handsontable.full.min.css +5 -4
  26. package/dist/handsontable.full.min.js +193 -192
  27. package/dist/handsontable.js +6472 -4116
  28. package/dist/handsontable.min.css +4 -4
  29. package/dist/handsontable.min.js +43 -42
  30. package/dist/languages/all.js +168 -21
  31. package/dist/languages/all.min.js +1 -1
  32. package/dist/languages/ar-AR.js +8 -1
  33. package/dist/languages/ar-AR.min.js +1 -1
  34. package/dist/languages/cs-CZ.js +8 -1
  35. package/dist/languages/cs-CZ.min.js +1 -1
  36. package/dist/languages/de-CH.js +8 -1
  37. package/dist/languages/de-CH.min.js +1 -1
  38. package/dist/languages/de-DE.js +8 -1
  39. package/dist/languages/de-DE.min.js +1 -1
  40. package/dist/languages/en-US.js +8 -1
  41. package/dist/languages/en-US.min.js +1 -1
  42. package/dist/languages/es-MX.js +8 -1
  43. package/dist/languages/es-MX.min.js +1 -1
  44. package/dist/languages/fa-IR.js +8 -1
  45. package/dist/languages/fa-IR.min.js +1 -1
  46. package/dist/languages/fr-FR.js +8 -1
  47. package/dist/languages/fr-FR.min.js +1 -1
  48. package/dist/languages/hr-HR.js +8 -1
  49. package/dist/languages/hr-HR.min.js +1 -1
  50. package/dist/languages/it-IT.js +8 -1
  51. package/dist/languages/it-IT.min.js +1 -1
  52. package/dist/languages/ja-JP.js +8 -1
  53. package/dist/languages/ja-JP.min.js +1 -1
  54. package/dist/languages/ko-KR.js +8 -1
  55. package/dist/languages/ko-KR.min.js +1 -1
  56. package/dist/languages/lv-LV.js +8 -1
  57. package/dist/languages/lv-LV.min.js +1 -1
  58. package/dist/languages/nb-NO.js +8 -1
  59. package/dist/languages/nb-NO.min.js +1 -1
  60. package/dist/languages/nl-NL.js +8 -1
  61. package/dist/languages/nl-NL.min.js +1 -1
  62. package/dist/languages/pl-PL.js +8 -1
  63. package/dist/languages/pl-PL.min.js +1 -1
  64. package/dist/languages/pt-BR.js +8 -1
  65. package/dist/languages/pt-BR.min.js +1 -1
  66. package/dist/languages/ru-RU.js +8 -1
  67. package/dist/languages/ru-RU.min.js +1 -1
  68. package/dist/languages/sr-SP.js +8 -1
  69. package/dist/languages/sr-SP.min.js +1 -1
  70. package/dist/languages/zh-CN.js +8 -1
  71. package/dist/languages/zh-CN.min.js +1 -1
  72. package/dist/languages/zh-TW.js +8 -1
  73. package/dist/languages/zh-TW.min.js +1 -1
  74. package/editors/autocompleteEditor/autocompleteEditor.js +21 -1
  75. package/editors/autocompleteEditor/autocompleteEditor.mjs +22 -2
  76. package/focusManager/constants.js +25 -0
  77. package/focusManager/constants.mjs +22 -0
  78. package/focusManager/eventListener.js +107 -0
  79. package/focusManager/eventListener.mjs +103 -0
  80. package/{focusManager.d.ts → focusManager/grid.d.ts} +1 -1
  81. package/{focusManager.js → focusManager/grid.js} +48 -17
  82. package/{focusManager.mjs → focusManager/grid.mjs} +47 -16
  83. package/focusManager/index.d.ts +2 -0
  84. package/focusManager/index.js +20 -0
  85. package/focusManager/index.mjs +20 -0
  86. package/focusManager/scope.js +133 -0
  87. package/focusManager/scope.mjs +129 -0
  88. package/focusManager/scopeManager.d.ts +19 -0
  89. package/focusManager/scopeManager.js +268 -0
  90. package/focusManager/scopeManager.mjs +263 -0
  91. package/focusManager/scopes/grid.js +120 -0
  92. package/focusManager/scopes/grid.mjs +116 -0
  93. package/focusManager/scopes/index.js +13 -0
  94. package/focusManager/scopes/index.mjs +9 -0
  95. package/{utils → focusManager/utils}/focusDetector.js +21 -31
  96. package/{utils → focusManager/utils}/focusDetector.mjs +21 -31
  97. package/focusManager/utils/utils.js +95 -0
  98. package/focusManager/utils/utils.mjs +89 -0
  99. package/helpers/dom/element.js +1 -1
  100. package/helpers/dom/element.mjs +2 -2
  101. package/helpers/dom/event.js +1 -1
  102. package/helpers/dom/event.mjs +1 -1
  103. package/helpers/mixed.js +2 -65
  104. package/helpers/mixed.mjs +2 -63
  105. package/i18n/constants.js +10 -1
  106. package/i18n/constants.mjs +10 -1
  107. package/i18n/languages/ar-AR.js +8 -1
  108. package/i18n/languages/ar-AR.mjs +8 -1
  109. package/i18n/languages/cs-CZ.js +8 -1
  110. package/i18n/languages/cs-CZ.mjs +8 -1
  111. package/i18n/languages/de-CH.js +8 -1
  112. package/i18n/languages/de-CH.mjs +8 -1
  113. package/i18n/languages/de-DE.js +8 -1
  114. package/i18n/languages/de-DE.mjs +8 -1
  115. package/i18n/languages/en-US.js +8 -1
  116. package/i18n/languages/en-US.mjs +8 -1
  117. package/i18n/languages/es-MX.js +8 -1
  118. package/i18n/languages/es-MX.mjs +8 -1
  119. package/i18n/languages/fa-IR.js +8 -1
  120. package/i18n/languages/fa-IR.mjs +8 -1
  121. package/i18n/languages/fr-FR.js +8 -1
  122. package/i18n/languages/fr-FR.mjs +8 -1
  123. package/i18n/languages/hr-HR.js +8 -1
  124. package/i18n/languages/hr-HR.mjs +8 -1
  125. package/i18n/languages/it-IT.js +8 -1
  126. package/i18n/languages/it-IT.mjs +8 -1
  127. package/i18n/languages/ja-JP.js +8 -1
  128. package/i18n/languages/ja-JP.mjs +8 -1
  129. package/i18n/languages/ko-KR.js +8 -1
  130. package/i18n/languages/ko-KR.mjs +8 -1
  131. package/i18n/languages/lv-LV.js +8 -1
  132. package/i18n/languages/lv-LV.mjs +8 -1
  133. package/i18n/languages/nb-NO.js +8 -1
  134. package/i18n/languages/nb-NO.mjs +8 -1
  135. package/i18n/languages/nl-NL.js +8 -1
  136. package/i18n/languages/nl-NL.mjs +8 -1
  137. package/i18n/languages/pl-PL.js +8 -1
  138. package/i18n/languages/pl-PL.mjs +8 -1
  139. package/i18n/languages/pt-BR.js +8 -1
  140. package/i18n/languages/pt-BR.mjs +8 -1
  141. package/i18n/languages/ru-RU.js +8 -1
  142. package/i18n/languages/ru-RU.mjs +8 -1
  143. package/i18n/languages/sr-SP.js +8 -1
  144. package/i18n/languages/sr-SP.mjs +8 -1
  145. package/i18n/languages/zh-CN.js +8 -1
  146. package/i18n/languages/zh-CN.mjs +8 -1
  147. package/i18n/languages/zh-TW.js +8 -1
  148. package/i18n/languages/zh-TW.mjs +8 -1
  149. package/index.d.ts +9 -0
  150. package/languages/all.js +168 -21
  151. package/languages/ar-AR.js +8 -1
  152. package/languages/ar-AR.mjs +8 -1
  153. package/languages/cs-CZ.js +8 -1
  154. package/languages/cs-CZ.mjs +8 -1
  155. package/languages/de-CH.js +8 -1
  156. package/languages/de-CH.mjs +8 -1
  157. package/languages/de-DE.js +8 -1
  158. package/languages/de-DE.mjs +8 -1
  159. package/languages/en-US.js +8 -1
  160. package/languages/en-US.mjs +8 -1
  161. package/languages/es-MX.js +8 -1
  162. package/languages/es-MX.mjs +8 -1
  163. package/languages/fa-IR.js +8 -1
  164. package/languages/fa-IR.mjs +8 -1
  165. package/languages/fr-FR.js +8 -1
  166. package/languages/fr-FR.mjs +8 -1
  167. package/languages/hr-HR.js +8 -1
  168. package/languages/hr-HR.mjs +8 -1
  169. package/languages/index.js +168 -21
  170. package/languages/it-IT.js +8 -1
  171. package/languages/it-IT.mjs +8 -1
  172. package/languages/ja-JP.js +8 -1
  173. package/languages/ja-JP.mjs +8 -1
  174. package/languages/ko-KR.js +8 -1
  175. package/languages/ko-KR.mjs +8 -1
  176. package/languages/lv-LV.js +8 -1
  177. package/languages/lv-LV.mjs +8 -1
  178. package/languages/nb-NO.js +8 -1
  179. package/languages/nb-NO.mjs +8 -1
  180. package/languages/nl-NL.js +8 -1
  181. package/languages/nl-NL.mjs +8 -1
  182. package/languages/pl-PL.js +8 -1
  183. package/languages/pl-PL.mjs +8 -1
  184. package/languages/pt-BR.js +8 -1
  185. package/languages/pt-BR.mjs +8 -1
  186. package/languages/ru-RU.js +8 -1
  187. package/languages/ru-RU.mjs +8 -1
  188. package/languages/sr-SP.js +8 -1
  189. package/languages/sr-SP.mjs +8 -1
  190. package/languages/zh-CN.js +8 -1
  191. package/languages/zh-CN.mjs +8 -1
  192. package/languages/zh-TW.js +8 -1
  193. package/languages/zh-TW.mjs +8 -1
  194. package/package.json +25 -7
  195. package/plugins/autoRowSize/autoRowSize.js +8 -1
  196. package/plugins/autoRowSize/autoRowSize.mjs +8 -1
  197. package/plugins/base/base.js +36 -10
  198. package/plugins/base/base.mjs +36 -10
  199. package/plugins/columnSummary/columnSummary.d.ts +2 -2
  200. package/plugins/columnSummary/columnSummary.js +44 -10
  201. package/plugins/columnSummary/columnSummary.mjs +44 -10
  202. package/plugins/columnSummary/endpoints.js +15 -13
  203. package/plugins/columnSummary/endpoints.mjs +15 -13
  204. package/plugins/columnSummary/utils.js +31 -0
  205. package/plugins/columnSummary/utils.mjs +30 -0
  206. package/plugins/customBorders/customBorders.d.ts +1 -0
  207. package/plugins/customBorders/customBorders.js +32 -2
  208. package/plugins/customBorders/customBorders.mjs +32 -2
  209. package/plugins/dialog/constants.js +7 -0
  210. package/plugins/dialog/constants.mjs +4 -0
  211. package/plugins/dialog/dialog.d.ts +22 -2
  212. package/plugins/dialog/dialog.js +197 -81
  213. package/plugins/dialog/dialog.mjs +196 -81
  214. package/plugins/dialog/templates/base.js +60 -0
  215. package/plugins/dialog/templates/base.mjs +56 -0
  216. package/plugins/dialog/templates/confirm.js +106 -0
  217. package/plugins/dialog/templates/confirm.mjs +102 -0
  218. package/plugins/dialog/templates/index.js +6 -0
  219. package/plugins/dialog/templates/index.mjs +4 -0
  220. package/plugins/dialog/ui.js +125 -41
  221. package/plugins/dialog/ui.mjs +119 -35
  222. package/plugins/emptyDataState/emptyDataState.d.ts +24 -0
  223. package/plugins/emptyDataState/emptyDataState.js +526 -0
  224. package/plugins/emptyDataState/emptyDataState.mjs +521 -0
  225. package/plugins/emptyDataState/index.d.ts +1 -0
  226. package/plugins/emptyDataState/index.js +7 -0
  227. package/plugins/emptyDataState/index.mjs +1 -0
  228. package/plugins/emptyDataState/ui.js +282 -0
  229. package/plugins/emptyDataState/ui.mjs +278 -0
  230. package/plugins/filters/component/value.js +16 -1
  231. package/plugins/filters/component/value.mjs +16 -1
  232. package/plugins/filters/filters.d.ts +5 -1
  233. package/plugins/filters/filters.js +22 -1
  234. package/plugins/filters/filters.mjs +22 -1
  235. package/plugins/filters/ui/multipleSelect.js +90 -79
  236. package/plugins/filters/ui/multipleSelect.mjs +90 -79
  237. package/plugins/index.d.ts +3 -0
  238. package/plugins/index.js +3 -0
  239. package/plugins/index.mjs +3 -1
  240. package/plugins/mergeCells/utils.js +1 -5
  241. package/plugins/mergeCells/utils.mjs +1 -5
  242. package/plugins/pagination/pagination.js +37 -175
  243. package/plugins/pagination/pagination.mjs +37 -175
  244. package/plugins/pagination/strategies/autoPageSize.js +2 -2
  245. package/plugins/pagination/strategies/autoPageSize.mjs +2 -2
  246. package/plugins/pagination/ui.js +6 -10
  247. package/plugins/pagination/ui.mjs +7 -11
  248. package/plugins/stretchColumns/calculator.js +3 -1
  249. package/plugins/stretchColumns/calculator.mjs +3 -1
  250. package/plugins/undoRedo/undoRedo.js +16 -6
  251. package/plugins/undoRedo/undoRedo.mjs +16 -5
  252. package/renderers/checkboxRenderer/checkboxRenderer.js +12 -15
  253. package/renderers/checkboxRenderer/checkboxRenderer.mjs +12 -15
  254. package/selection/selection.js +1 -1
  255. package/selection/selection.mjs +1 -1
  256. package/settings.d.ts +3 -0
  257. package/shortcutContexts/commands/index.js +2 -1
  258. package/shortcutContexts/commands/index.mjs +2 -1
  259. package/shortcutContexts/commands/tabNavigation.js +51 -0
  260. package/shortcutContexts/commands/tabNavigation.mjs +48 -0
  261. package/shortcutContexts/constants.js +16 -1
  262. package/shortcutContexts/constants.mjs +16 -1
  263. package/shortcutContexts/editor.js +2 -2
  264. package/shortcutContexts/editor.mjs +3 -3
  265. package/shortcutContexts/grid.js +19 -3
  266. package/shortcutContexts/grid.mjs +20 -4
  267. package/shortcuts/manager.d.ts +1 -0
  268. package/shortcuts/manager.js +17 -2
  269. package/shortcuts/manager.mjs +17 -2
  270. package/styles/handsontable.css +192 -35
  271. package/styles/handsontable.min.css +3 -3
  272. package/styles/ht-icons-horizon.css +233 -0
  273. package/styles/ht-icons-horizon.min.css +30 -0
  274. package/styles/ht-icons-main.css +233 -0
  275. package/styles/ht-icons-main.min.css +30 -0
  276. package/styles/ht-theme-classic-no-icons.css +399 -0
  277. package/styles/ht-theme-classic-no-icons.min.css +30 -0
  278. package/styles/ht-theme-classic.css +308 -556
  279. package/styles/ht-theme-classic.min.css +3 -3
  280. package/styles/ht-theme-horizon-no-icons.css +405 -0
  281. package/styles/ht-theme-horizon-no-icons.min.css +30 -0
  282. package/styles/ht-theme-horizon.css +312 -556
  283. package/styles/ht-theme-horizon.min.css +3 -3
  284. package/styles/ht-theme-main-no-icons.css +396 -0
  285. package/styles/ht-theme-main-no-icons.min.css +30 -0
  286. package/styles/ht-theme-main.css +303 -556
  287. package/styles/ht-theme-main.min.css +3 -3
  288. package/tableView.js +23 -5
  289. package/tableView.mjs +23 -5
  290. package/utils/dataStructures/uniqueMap.js +10 -0
  291. package/utils/dataStructures/uniqueMap.mjs +10 -0
  292. package/utils/ghostTable.js +0 -3
  293. package/utils/ghostTable.mjs +0 -3
  294. package/utils/stylesHandler.js +19 -4
  295. package/utils/stylesHandler.mjs +19 -4
  296. package/core/focusCatcher/index.js +0 -131
  297. package/core/focusCatcher/index.mjs +0 -127
  298. package/core/focusCatcher/utils.js +0 -31
  299. package/core/focusCatcher/utils.mjs +0 -27
  300. package/plugins/pagination/focusController.js +0 -27
  301. package/plugins/pagination/focusController.mjs +0 -23
@@ -1 +1 @@
1
- !function(E,T){if("object"==typeof exports&&"object"==typeof module)module.exports=T(require("handsontable"));else if("function"==typeof define&&define.amd)define(["handsontable"],T);else{var _="object"==typeof exports?T(require("handsontable")):T(E.Handsontable);for(var N in _)("object"==typeof exports?exports:E)[N]=_[N]}}("undefined"!=typeof self?self:this,E=>(()=>{var T={238:E=>{E.exports=function(E){return E&&E.__esModule?E:{default:E}},E.exports.__esModule=!0,E.exports.default=E.exports},330:T=>{"use strict";T.exports=E}},_={};function N(E){var I=_[E];if(void 0!==I)return I.exports;var O=_[E]={exports:{}};return T[E](O,O.exports,N),O.exports}var I={};return(()=>{"use strict";var E=N(238)(N(330));const T=E.default.languages.dictionaryKeys,_={languageCode:"zh-TW",[T.CONTEXTMENU_ITEMS_ROW_ABOVE]:"上方插入列",[T.CONTEXTMENU_ITEMS_ROW_BELOW]:"下方插入列",[T.CONTEXTMENU_ITEMS_INSERT_LEFT]:"左方插入欄",[T.CONTEXTMENU_ITEMS_INSERT_RIGHT]:"右方插入欄",[T.CONTEXTMENU_ITEMS_REMOVE_ROW]:["移除該列","移除多列"],[T.CONTEXTMENU_ITEMS_REMOVE_COLUMN]:["移除該欄","移除多欄"],[T.CONTEXTMENU_ITEMS_UNDO]:"復原",[T.CONTEXTMENU_ITEMS_REDO]:"取消復原",[T.CONTEXTMENU_ITEMS_READ_ONLY]:"唯讀",[T.CONTEXTMENU_ITEMS_CLEAR_COLUMN]:"清空該欄",[T.CONTEXTMENU_ITEMS_ALIGNMENT]:"對齊",[T.CONTEXTMENU_ITEMS_ALIGNMENT_LEFT]:"靠左",[T.CONTEXTMENU_ITEMS_ALIGNMENT_CENTER]:"水平置中",[T.CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT]:"靠右",[T.CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY]:"左右對齊",[T.CONTEXTMENU_ITEMS_ALIGNMENT_TOP]:"靠上",[T.CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE]:"垂直置中",[T.CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM]:"靠下",[T.CONTEXTMENU_ITEMS_FREEZE_COLUMN]:"凍結欄位",[T.CONTEXTMENU_ITEMS_UNFREEZE_COLUMN]:"取消凍結欄位",[T.CONTEXTMENU_ITEMS_BORDERS]:"邊界",[T.CONTEXTMENU_ITEMS_BORDERS_TOP]:"上",[T.CONTEXTMENU_ITEMS_BORDERS_RIGHT]:"右",[T.CONTEXTMENU_ITEMS_BORDERS_BOTTOM]:"下",[T.CONTEXTMENU_ITEMS_BORDERS_LEFT]:"左",[T.CONTEXTMENU_ITEMS_REMOVE_BORDERS]:"移除邊界",[T.CONTEXTMENU_ITEMS_ADD_COMMENT]:"加入評論",[T.CONTEXTMENU_ITEMS_EDIT_COMMENT]:"編輯評論",[T.CONTEXTMENU_ITEMS_REMOVE_COMMENT]:"刪除評論",[T.CONTEXTMENU_ITEMS_READ_ONLY_COMMENT]:"唯讀評論",[T.CONTEXTMENU_ITEMS_MERGE_CELLS]:"合併欄位",[T.CONTEXTMENU_ITEMS_UNMERGE_CELLS]:"取消合併欄位",[T.CONTEXTMENU_ITEMS_COPY]:"複製",[T.CONTEXTMENU_ITEMS_CUT]:"剪下",[T.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD]:"插入子列",[T.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD]:"與母列分離",[T.CONTEXTMENU_ITEMS_HIDE_COLUMN]:["隱藏該欄","隱藏多欄"],[T.CONTEXTMENU_ITEMS_SHOW_COLUMN]:["顯示該欄","顯示多欄"],[T.CONTEXTMENU_ITEMS_HIDE_ROW]:["隱藏該列","隱藏多列"],[T.CONTEXTMENU_ITEMS_SHOW_ROW]:["顯示該列","顯示多列"],[T.FILTERS_CONDITIONS_NONE]:"無",[T.FILTERS_CONDITIONS_EMPTY]:"為空",[T.FILTERS_CONDITIONS_NOT_EMPTY]:"不為空",[T.FILTERS_CONDITIONS_EQUAL]:"等於",[T.FILTERS_CONDITIONS_NOT_EQUAL]:"不等於",[T.FILTERS_CONDITIONS_BEGINS_WITH]:"開頭是",[T.FILTERS_CONDITIONS_ENDS_WITH]:"結尾是",[T.FILTERS_CONDITIONS_CONTAINS]:"包含",[T.FILTERS_CONDITIONS_NOT_CONTAIN]:"不包含",[T.FILTERS_CONDITIONS_GREATER_THAN]:"大於",[T.FILTERS_CONDITIONS_GREATER_THAN_OR_EQUAL]:"大於或等於",[T.FILTERS_CONDITIONS_LESS_THAN]:"小於",[T.FILTERS_CONDITIONS_LESS_THAN_OR_EQUAL]:"小於或等於",[T.FILTERS_CONDITIONS_BETWEEN]:"在此範圍",[T.FILTERS_CONDITIONS_NOT_BETWEEN]:"不在此範圍",[T.FILTERS_CONDITIONS_AFTER]:"之後",[T.FILTERS_CONDITIONS_BEFORE]:"之前",[T.FILTERS_CONDITIONS_TODAY]:"今天",[T.FILTERS_CONDITIONS_TOMORROW]:"明天",[T.FILTERS_CONDITIONS_YESTERDAY]:"昨天",[T.FILTERS_VALUES_BLANK_CELLS]:"空白格",[T.FILTERS_DIVS_FILTER_BY_CONDITION]:"依條件過濾",[T.FILTERS_DIVS_FILTER_BY_VALUE]:"依值過濾",[T.FILTERS_LABELS_CONJUNCTION]:"且",[T.FILTERS_LABELS_DISJUNCTION]:"或",[T.FILTERS_BUTTONS_SELECT_ALL]:"全選",[T.FILTERS_BUTTONS_CLEAR]:"清除",[T.FILTERS_BUTTONS_OK]:"確認",[T.FILTERS_BUTTONS_CANCEL]:"取消",[T.FILTERS_BUTTONS_PLACEHOLDER_SEARCH]:"搜尋",[T.FILTERS_BUTTONS_PLACEHOLDER_VALUE]:"值",[T.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]:"第二值",[T.PAGINATION_SECTION]:"分頁",[T.PAGINATION_PAGE_SIZE_SECTION]:"每頁行數",[T.PAGINATION_PAGE_SIZE_AUTO]:"自動",[T.PAGINATION_COUNTER_SECTION]:"[start] - [end] 共 [total]",[T.PAGINATION_NAV_SECTION]:"第 [currentPage] 頁,共 [totalPages] 頁",[T.PAGINATION_FIRST_PAGE]:"轉到第一頁",[T.PAGINATION_PREV_PAGE]:"轉到上一頁",[T.PAGINATION_NEXT_PAGE]:"轉到下一頁",[T.PAGINATION_LAST_PAGE]:"轉到最後一頁",[T.LOADING_TITLE]:"載入中..."};E.default.languages.registerLanguageDictionary(_)})(),I=I.___})());
1
+ !function(T,E){if("object"==typeof exports&&"object"==typeof module)module.exports=E(require("handsontable"));else if("function"==typeof define&&define.amd)define(["handsontable"],E);else{var _="object"==typeof exports?E(require("handsontable")):E(T.Handsontable);for(var N in _)("object"==typeof exports?exports:T)[N]=_[N]}}("undefined"!=typeof self?self:this,T=>(()=>{var E={238:T=>{T.exports=function(T){return T&&T.__esModule?T:{default:T}},T.exports.__esModule=!0,T.exports.default=T.exports},330:E=>{"use strict";E.exports=T}},_={};function N(T){var I=_[T];if(void 0!==I)return I.exports;var O=_[T]={exports:{}};return E[T](O,O.exports,N),O.exports}var I={};return(()=>{"use strict";var T=N(238)(N(330));const E=T.default.languages.dictionaryKeys,_={languageCode:"zh-TW",[E.OK]:"確認",[E.CANCEL]:"取消",[E.CONTEXTMENU_ITEMS_ROW_ABOVE]:"上方插入列",[E.CONTEXTMENU_ITEMS_ROW_BELOW]:"下方插入列",[E.CONTEXTMENU_ITEMS_INSERT_LEFT]:"左方插入欄",[E.CONTEXTMENU_ITEMS_INSERT_RIGHT]:"右方插入欄",[E.CONTEXTMENU_ITEMS_REMOVE_ROW]:["移除該列","移除多列"],[E.CONTEXTMENU_ITEMS_REMOVE_COLUMN]:["移除該欄","移除多欄"],[E.CONTEXTMENU_ITEMS_UNDO]:"復原",[E.CONTEXTMENU_ITEMS_REDO]:"取消復原",[E.CONTEXTMENU_ITEMS_READ_ONLY]:"唯讀",[E.CONTEXTMENU_ITEMS_CLEAR_COLUMN]:"清空該欄",[E.CONTEXTMENU_ITEMS_ALIGNMENT]:"對齊",[E.CONTEXTMENU_ITEMS_ALIGNMENT_LEFT]:"靠左",[E.CONTEXTMENU_ITEMS_ALIGNMENT_CENTER]:"水平置中",[E.CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT]:"靠右",[E.CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY]:"左右對齊",[E.CONTEXTMENU_ITEMS_ALIGNMENT_TOP]:"靠上",[E.CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE]:"垂直置中",[E.CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM]:"靠下",[E.CONTEXTMENU_ITEMS_FREEZE_COLUMN]:"凍結欄位",[E.CONTEXTMENU_ITEMS_UNFREEZE_COLUMN]:"取消凍結欄位",[E.CONTEXTMENU_ITEMS_BORDERS]:"邊界",[E.CONTEXTMENU_ITEMS_BORDERS_TOP]:"上",[E.CONTEXTMENU_ITEMS_BORDERS_RIGHT]:"右",[E.CONTEXTMENU_ITEMS_BORDERS_BOTTOM]:"下",[E.CONTEXTMENU_ITEMS_BORDERS_LEFT]:"左",[E.CONTEXTMENU_ITEMS_REMOVE_BORDERS]:"移除邊界",[E.CONTEXTMENU_ITEMS_ADD_COMMENT]:"加入評論",[E.CONTEXTMENU_ITEMS_EDIT_COMMENT]:"編輯評論",[E.CONTEXTMENU_ITEMS_REMOVE_COMMENT]:"刪除評論",[E.CONTEXTMENU_ITEMS_READ_ONLY_COMMENT]:"唯讀評論",[E.CONTEXTMENU_ITEMS_MERGE_CELLS]:"合併欄位",[E.CONTEXTMENU_ITEMS_UNMERGE_CELLS]:"取消合併欄位",[E.CONTEXTMENU_ITEMS_COPY]:"複製",[E.CONTEXTMENU_ITEMS_CUT]:"剪下",[E.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD]:"插入子列",[E.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD]:"與母列分離",[E.CONTEXTMENU_ITEMS_HIDE_COLUMN]:["隱藏該欄","隱藏多欄"],[E.CONTEXTMENU_ITEMS_SHOW_COLUMN]:["顯示該欄","顯示多欄"],[E.CONTEXTMENU_ITEMS_HIDE_ROW]:["隱藏該列","隱藏多列"],[E.CONTEXTMENU_ITEMS_SHOW_ROW]:["顯示該列","顯示多列"],[E.FILTERS_CONDITIONS_NONE]:"無",[E.FILTERS_CONDITIONS_EMPTY]:"為空",[E.FILTERS_CONDITIONS_NOT_EMPTY]:"不為空",[E.FILTERS_CONDITIONS_EQUAL]:"等於",[E.FILTERS_CONDITIONS_NOT_EQUAL]:"不等於",[E.FILTERS_CONDITIONS_BEGINS_WITH]:"開頭是",[E.FILTERS_CONDITIONS_ENDS_WITH]:"結尾是",[E.FILTERS_CONDITIONS_CONTAINS]:"包含",[E.FILTERS_CONDITIONS_NOT_CONTAIN]:"不包含",[E.FILTERS_CONDITIONS_GREATER_THAN]:"大於",[E.FILTERS_CONDITIONS_GREATER_THAN_OR_EQUAL]:"大於或等於",[E.FILTERS_CONDITIONS_LESS_THAN]:"小於",[E.FILTERS_CONDITIONS_LESS_THAN_OR_EQUAL]:"小於或等於",[E.FILTERS_CONDITIONS_BETWEEN]:"在此範圍",[E.FILTERS_CONDITIONS_NOT_BETWEEN]:"不在此範圍",[E.FILTERS_CONDITIONS_AFTER]:"之後",[E.FILTERS_CONDITIONS_BEFORE]:"之前",[E.FILTERS_CONDITIONS_TODAY]:"今天",[E.FILTERS_CONDITIONS_TOMORROW]:"明天",[E.FILTERS_CONDITIONS_YESTERDAY]:"昨天",[E.FILTERS_VALUES_BLANK_CELLS]:"空白格",[E.FILTERS_DIVS_FILTER_BY_CONDITION]:"依條件過濾",[E.FILTERS_DIVS_FILTER_BY_VALUE]:"依值過濾",[E.FILTERS_LABELS_CONJUNCTION]:"且",[E.FILTERS_LABELS_DISJUNCTION]:"或",[E.FILTERS_BUTTONS_SELECT_ALL]:"全選",[E.FILTERS_BUTTONS_CLEAR]:"清除",[E.FILTERS_BUTTONS_OK]:"確認",[E.FILTERS_BUTTONS_CANCEL]:"取消",[E.FILTERS_BUTTONS_PLACEHOLDER_SEARCH]:"搜尋",[E.FILTERS_BUTTONS_PLACEHOLDER_VALUE]:"值",[E.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]:"第二值",[E.PAGINATION_SECTION]:"分頁",[E.PAGINATION_PAGE_SIZE_SECTION]:"每頁行數",[E.PAGINATION_PAGE_SIZE_AUTO]:"自動",[E.PAGINATION_COUNTER_SECTION]:"[start] - [end] 共 [total]",[E.PAGINATION_NAV_SECTION]:"第 [currentPage] 頁,共 [totalPages] 頁",[E.PAGINATION_FIRST_PAGE]:"轉到第一頁",[E.PAGINATION_PREV_PAGE]:"轉到上一頁",[E.PAGINATION_NEXT_PAGE]:"轉到下一頁",[E.PAGINATION_LAST_PAGE]:"轉到最後一頁",[E.LOADING_TITLE]:"載入中...",[E.EMPTY_DATA_STATE_TITLE]:"暫無資料",[E.EMPTY_DATA_STATE_DESCRIPTION]:"暫無內容可顯示。",[E.EMPTY_DATA_STATE_TITLE_FILTERS]:"未找到結果",[E.EMPTY_DATA_STATE_DESCRIPTION_FILTERS]:"看起來您目前的過濾器隱藏了所有結果。",[E.EMPTY_DATA_STATE_BUTTONS_FILTERS_RESET]:"重設過濾器"};T.default.languages.registerLanguageDictionary(_)})(),I=I.___})());
@@ -225,6 +225,24 @@ class AutocompleteEditor extends _handsontableEditor.HandsontableEditor {
225
225
  this.hot.view.render();
226
226
  }
227
227
 
228
+ /**
229
+ * Finishes editing and start saving or restoring process for editing cell.
230
+ *
231
+ * @param {boolean} restoreOriginalValue If true, then closes editor without saving value from the editor into a cell.
232
+ * @param {boolean} ctrlDown If true, then saveValue will save editor's value to each cell in the last selected range.
233
+ * @param {Function} callback The callback function, fired after editor closing.
234
+ */
235
+ finishEditing(restoreOriginalValue, ctrlDown, callback) {
236
+ if (this.isOpened()) {
237
+ const lastSelectedRange = this.hot.getSelectedRangeActive();
238
+ if ((0, _mixed.isUndefined)(lastSelectedRange) || (0, _mixed.isDefined)(lastSelectedRange) && !lastSelectedRange.includes(this.hot._createCellCoords(this.row, this.col))) {
239
+ // Method was triggered by selecting a different cell or deselecting cells.
240
+ restoreOriginalValue = true;
241
+ }
242
+ }
243
+ super.finishEditing(restoreOriginalValue, ctrlDown, callback);
244
+ }
245
+
228
246
  /**
229
247
  * Prepares choices list based on applied argument.
230
248
  *
@@ -279,7 +297,9 @@ class AutocompleteEditor extends _handsontableEditor.HandsontableEditor {
279
297
  }
280
298
  }
281
299
  if (filterSetting === false) {
282
- highlightIndex = filteredChoiceIndexes[0];
300
+ if (value.length > 0) {
301
+ highlightIndex = filteredChoiceIndexes[0];
302
+ }
283
303
  } else {
284
304
  choices = filteredChoiceIndexes.map(index => choices[index]);
285
305
  highlightIndex = choices.indexOf(valueToMatch) > -1 ? choices.indexOf(valueToMatch) : 0;
@@ -19,7 +19,7 @@ import { HandsontableEditor } from "../handsontableEditor/index.mjs";
19
19
  import { pivot } from "../../helpers/array.mjs";
20
20
  import { isObject } from "../../helpers/object.mjs";
21
21
  import { addClass, getCaretPosition, getFractionalScalingCompensation, getScrollbarWidth, getSelectionEndPosition, outerWidth, setAttribute, setCaretPosition } from "../../helpers/dom/element.mjs";
22
- import { isDefined, stringify } from "../../helpers/mixed.mjs";
22
+ import { isUndefined, isDefined, stringify } from "../../helpers/mixed.mjs";
23
23
  import { stripTags } from "../../helpers/string.mjs";
24
24
  import { KEY_CODES, isPrintableChar } from "../../helpers/unicode.mjs";
25
25
  import { textRenderer } from "../../renderers/textRenderer/index.mjs";
@@ -222,6 +222,24 @@ export class AutocompleteEditor extends HandsontableEditor {
222
222
  this.hot.view.render();
223
223
  }
224
224
 
225
+ /**
226
+ * Finishes editing and start saving or restoring process for editing cell.
227
+ *
228
+ * @param {boolean} restoreOriginalValue If true, then closes editor without saving value from the editor into a cell.
229
+ * @param {boolean} ctrlDown If true, then saveValue will save editor's value to each cell in the last selected range.
230
+ * @param {Function} callback The callback function, fired after editor closing.
231
+ */
232
+ finishEditing(restoreOriginalValue, ctrlDown, callback) {
233
+ if (this.isOpened()) {
234
+ const lastSelectedRange = this.hot.getSelectedRangeActive();
235
+ if (isUndefined(lastSelectedRange) || isDefined(lastSelectedRange) && !lastSelectedRange.includes(this.hot._createCellCoords(this.row, this.col))) {
236
+ // Method was triggered by selecting a different cell or deselecting cells.
237
+ restoreOriginalValue = true;
238
+ }
239
+ }
240
+ super.finishEditing(restoreOriginalValue, ctrlDown, callback);
241
+ }
242
+
225
243
  /**
226
244
  * Prepares choices list based on applied argument.
227
245
  *
@@ -276,7 +294,9 @@ export class AutocompleteEditor extends HandsontableEditor {
276
294
  }
277
295
  }
278
296
  if (filterSetting === false) {
279
- highlightIndex = filteredChoiceIndexes[0];
297
+ if (value.length > 0) {
298
+ highlightIndex = filteredChoiceIndexes[0];
299
+ }
280
300
  } else {
281
301
  choices = filteredChoiceIndexes.map(index => choices[index]);
282
302
  highlightIndex = choices.indexOf(valueToMatch) > -1 ? choices.indexOf(valueToMatch) : 0;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ /**
5
+ * Focus scope types.
6
+ */
7
+ const SCOPE_TYPES = exports.SCOPE_TYPES = Object.freeze({
8
+ INLINE: 'inline',
9
+ MODAL: 'modal'
10
+ });
11
+
12
+ /**
13
+ * Focus activation sources.
14
+ */
15
+ const FOCUS_SOURCES = exports.FOCUS_SOURCES = Object.freeze({
16
+ UNKNOWN: 'unknown',
17
+ CLICK: 'click',
18
+ TAB_FROM_ABOVE: 'tab_from_above',
19
+ TAB_FROM_BELOW: 'tab_from_below'
20
+ });
21
+
22
+ /**
23
+ * Default shortcuts context name.
24
+ */
25
+ const DEFAULT_SHORTCUTS_CONTEXT = exports.DEFAULT_SHORTCUTS_CONTEXT = 'grid';
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Focus scope types.
3
+ */
4
+ export const SCOPE_TYPES = Object.freeze({
5
+ INLINE: 'inline',
6
+ MODAL: 'modal'
7
+ });
8
+
9
+ /**
10
+ * Focus activation sources.
11
+ */
12
+ export const FOCUS_SOURCES = Object.freeze({
13
+ UNKNOWN: 'unknown',
14
+ CLICK: 'click',
15
+ TAB_FROM_ABOVE: 'tab_from_above',
16
+ TAB_FROM_BELOW: 'tab_from_below'
17
+ });
18
+
19
+ /**
20
+ * Default shortcuts context name.
21
+ */
22
+ export const DEFAULT_SHORTCUTS_CONTEXT = 'grid';
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.useEventListener = useEventListener;
5
+ var _element = require("../helpers/dom/element");
6
+ /**
7
+ * An event listener, used for tracking focus-related and click events necessary for focus management.
8
+ *
9
+ * @param {Window} ownerWindow Current window object.
10
+ * @param {object} hooks A callback functions.
11
+ * @param {function(Event)} hooks.onFocus A callback function for focusin events.
12
+ * @param {function(Event)} hooks.onClick A callback function for click events.
13
+ * @param {function(Event)} hooks.onTabKeyDown A callback function for tab key down events.
14
+ * @returns {{mount: function(), unmount: function()}}
15
+ */
16
+ function useEventListener(ownerWindow) {
17
+ let hooks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
18
+ let mouseDown = false;
19
+
20
+ /**
21
+ * A callback function for focusin events.
22
+ *
23
+ * @param {Event} event The event object.
24
+ */
25
+ function handleFocus(event) {
26
+ if (!mouseDown) {
27
+ var _hooks$onFocus;
28
+ (_hooks$onFocus = hooks.onFocus) === null || _hooks$onFocus === void 0 || _hooks$onFocus.call(hooks, event);
29
+ }
30
+ }
31
+
32
+ /**
33
+ * A callback function for click events.
34
+ *
35
+ * @param {Event} event The event object.
36
+ */
37
+ function handleClick(event) {
38
+ var _hooks$onClick;
39
+ (_hooks$onClick = hooks.onClick) === null || _hooks$onClick === void 0 || _hooks$onClick.call(hooks, event);
40
+ }
41
+
42
+ /**
43
+ * A callback function for tab key down events.
44
+ *
45
+ * @param {Event} event The event object.
46
+ */
47
+ function handleKeyDown(event) {
48
+ if (event.key === 'Tab') {
49
+ var _hooks$onTabKeyDown;
50
+ (_hooks$onTabKeyDown = hooks.onTabKeyDown) === null || _hooks$onTabKeyDown === void 0 || _hooks$onTabKeyDown.call(hooks, event);
51
+ }
52
+ }
53
+
54
+ /**
55
+ * A callback function for mouse down events.
56
+ */
57
+ function handleMouseDown() {
58
+ mouseDown = true;
59
+ }
60
+
61
+ /**
62
+ * A callback function for mouse up events.
63
+ */
64
+ function handleMouseUp() {
65
+ mouseDown = false;
66
+ }
67
+
68
+ /**
69
+ * Adds event listeners to the starting window and its parents' windows.
70
+ */
71
+ const mount = () => {
72
+ let frameWindow = ownerWindow;
73
+ while (frameWindow) {
74
+ const {
75
+ documentElement
76
+ } = frameWindow.document;
77
+ documentElement.addEventListener('focusin', handleFocus);
78
+ documentElement.addEventListener('click', handleClick);
79
+ documentElement.addEventListener('keydown', handleKeyDown);
80
+ documentElement.addEventListener('mousedown', handleMouseDown);
81
+ documentElement.addEventListener('mouseup', handleMouseUp);
82
+ frameWindow = (0, _element.getParentWindow)(frameWindow);
83
+ }
84
+ };
85
+
86
+ /**
87
+ * Removes event listeners from the starting window and its parents' windows.
88
+ */
89
+ const unmount = () => {
90
+ let frameWindow = ownerWindow;
91
+ while (frameWindow) {
92
+ const {
93
+ documentElement
94
+ } = frameWindow.document;
95
+ documentElement.removeEventListener('focusin', handleFocus);
96
+ documentElement.removeEventListener('click', handleClick);
97
+ documentElement.removeEventListener('keydown', handleKeyDown);
98
+ documentElement.removeEventListener('mousedown', handleMouseDown);
99
+ documentElement.removeEventListener('mouseup', handleMouseUp);
100
+ frameWindow = (0, _element.getParentWindow)(frameWindow);
101
+ }
102
+ };
103
+ return {
104
+ mount,
105
+ unmount
106
+ };
107
+ }
@@ -0,0 +1,103 @@
1
+ import { getParentWindow } from "../helpers/dom/element.mjs";
2
+ /**
3
+ * An event listener, used for tracking focus-related and click events necessary for focus management.
4
+ *
5
+ * @param {Window} ownerWindow Current window object.
6
+ * @param {object} hooks A callback functions.
7
+ * @param {function(Event)} hooks.onFocus A callback function for focusin events.
8
+ * @param {function(Event)} hooks.onClick A callback function for click events.
9
+ * @param {function(Event)} hooks.onTabKeyDown A callback function for tab key down events.
10
+ * @returns {{mount: function(), unmount: function()}}
11
+ */
12
+ export function useEventListener(ownerWindow) {
13
+ let hooks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
14
+ let mouseDown = false;
15
+
16
+ /**
17
+ * A callback function for focusin events.
18
+ *
19
+ * @param {Event} event The event object.
20
+ */
21
+ function handleFocus(event) {
22
+ if (!mouseDown) {
23
+ var _hooks$onFocus;
24
+ (_hooks$onFocus = hooks.onFocus) === null || _hooks$onFocus === void 0 || _hooks$onFocus.call(hooks, event);
25
+ }
26
+ }
27
+
28
+ /**
29
+ * A callback function for click events.
30
+ *
31
+ * @param {Event} event The event object.
32
+ */
33
+ function handleClick(event) {
34
+ var _hooks$onClick;
35
+ (_hooks$onClick = hooks.onClick) === null || _hooks$onClick === void 0 || _hooks$onClick.call(hooks, event);
36
+ }
37
+
38
+ /**
39
+ * A callback function for tab key down events.
40
+ *
41
+ * @param {Event} event The event object.
42
+ */
43
+ function handleKeyDown(event) {
44
+ if (event.key === 'Tab') {
45
+ var _hooks$onTabKeyDown;
46
+ (_hooks$onTabKeyDown = hooks.onTabKeyDown) === null || _hooks$onTabKeyDown === void 0 || _hooks$onTabKeyDown.call(hooks, event);
47
+ }
48
+ }
49
+
50
+ /**
51
+ * A callback function for mouse down events.
52
+ */
53
+ function handleMouseDown() {
54
+ mouseDown = true;
55
+ }
56
+
57
+ /**
58
+ * A callback function for mouse up events.
59
+ */
60
+ function handleMouseUp() {
61
+ mouseDown = false;
62
+ }
63
+
64
+ /**
65
+ * Adds event listeners to the starting window and its parents' windows.
66
+ */
67
+ const mount = () => {
68
+ let frameWindow = ownerWindow;
69
+ while (frameWindow) {
70
+ const {
71
+ documentElement
72
+ } = frameWindow.document;
73
+ documentElement.addEventListener('focusin', handleFocus);
74
+ documentElement.addEventListener('click', handleClick);
75
+ documentElement.addEventListener('keydown', handleKeyDown);
76
+ documentElement.addEventListener('mousedown', handleMouseDown);
77
+ documentElement.addEventListener('mouseup', handleMouseUp);
78
+ frameWindow = getParentWindow(frameWindow);
79
+ }
80
+ };
81
+
82
+ /**
83
+ * Removes event listeners from the starting window and its parents' windows.
84
+ */
85
+ const unmount = () => {
86
+ let frameWindow = ownerWindow;
87
+ while (frameWindow) {
88
+ const {
89
+ documentElement
90
+ } = frameWindow.document;
91
+ documentElement.removeEventListener('focusin', handleFocus);
92
+ documentElement.removeEventListener('click', handleClick);
93
+ documentElement.removeEventListener('keydown', handleKeyDown);
94
+ documentElement.removeEventListener('mousedown', handleMouseDown);
95
+ documentElement.removeEventListener('mouseup', handleMouseUp);
96
+ frameWindow = getParentWindow(frameWindow);
97
+ }
98
+ };
99
+ return {
100
+ mount,
101
+ unmount
102
+ };
103
+ }
@@ -1,6 +1,6 @@
1
1
  type FocusMode = 'cell' | 'mixed';
2
2
 
3
- export interface FocusManager {
3
+ export interface GridFocusManager {
4
4
  getFocusMode(): FocusMode;
5
5
  setFocusMode(focusMode: FocusMode): void;
6
6
  getRefocusDelay(): number;
@@ -2,9 +2,9 @@
2
2
 
3
3
  exports.__esModule = true;
4
4
  require("core-js/modules/es.error.cause.js");
5
- var _console = require("./helpers/console");
6
- var _element = require("./helpers/dom/element");
7
- var _function = require("./helpers/function");
5
+ var _console = require("../helpers/console");
6
+ var _element = require("../helpers/dom/element");
7
+ var _function = require("../helpers/function");
8
8
  function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
9
9
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
10
10
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
@@ -25,23 +25,24 @@ const FOCUS_MODES = Object.freeze({
25
25
  });
26
26
 
27
27
  /**
28
- * Manages the browser's focus in the table.
28
+ * Manages the browser's focus in the table to achieve correct behavior for screen readers and
29
+ * IME editors.
29
30
  */
30
31
  var _hot = /*#__PURE__*/new WeakMap();
31
32
  var _focusMode = /*#__PURE__*/new WeakMap();
32
33
  var _refocusDelay = /*#__PURE__*/new WeakMap();
33
34
  var _refocusElementGetter = /*#__PURE__*/new WeakMap();
34
35
  var _debouncedSelect = /*#__PURE__*/new WeakMap();
35
- var _FocusManager_brand = /*#__PURE__*/new WeakSet();
36
- class FocusManager {
36
+ var _hasSelectionChange = /*#__PURE__*/new WeakMap();
37
+ var _FocusGridManager_brand = /*#__PURE__*/new WeakSet();
38
+ class FocusGridManager {
37
39
  constructor(hotInstance) {
38
- var _this = this;
39
40
  /**
40
41
  * Get and return the currently selected and highlighted cell/header element.
41
42
  *
42
43
  * @param {Function} callback Callback function to be called after the cell element is retrieved.
43
44
  */
44
- _classPrivateMethodInitSpec(this, _FocusManager_brand);
45
+ _classPrivateMethodInitSpec(this, _FocusGridManager_brand);
45
46
  /**
46
47
  * The Handsontable instance.
47
48
  */
@@ -77,32 +78,47 @@ class FocusManager {
77
78
  * @type {Map<number, Function>}
78
79
  */
79
80
  _classPrivateFieldInitSpec(this, _debouncedSelect, new Map());
80
- const hotSettings = hotInstance.getSettings();
81
+ /**
82
+ * Flag to indicate if the selection has changed.
83
+ *
84
+ * @type {boolean}
85
+ */
86
+ _classPrivateFieldInitSpec(this, _hasSelectionChange, false);
81
87
  _classPrivateFieldSet(_hot, this, hotInstance);
88
+ }
89
+ init() {
90
+ var _this = this;
91
+ const hotSettings = _classPrivateFieldGet(_hot, this).getSettings();
82
92
  _classPrivateFieldSet(_focusMode, this, hotSettings.imeFastEdit ? FOCUS_MODES.MIXED : FOCUS_MODES.CELL);
83
93
  _classPrivateFieldGet(_hot, this).addHook('afterUpdateSettings', function () {
84
94
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
85
95
  args[_key] = arguments[_key];
86
96
  }
87
- return _assertClassBrand(_FocusManager_brand, _this, _onUpdateSettings).call(_this, ...args);
97
+ return _assertClassBrand(_FocusGridManager_brand, _this, _onUpdateSettings).call(_this, ...args);
88
98
  });
89
99
  _classPrivateFieldGet(_hot, this).addHook('afterSelection', function () {
90
100
  for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
91
101
  args[_key2] = arguments[_key2];
92
102
  }
93
- return _assertClassBrand(_FocusManager_brand, _this, _focusCell).call(_this, ...args);
103
+ return _assertClassBrand(_FocusGridManager_brand, _this, _onAfterSelectionChange).call(_this, ...args);
94
104
  });
95
105
  _classPrivateFieldGet(_hot, this).addHook('afterSelectionFocusSet', function () {
96
106
  for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
97
107
  args[_key3] = arguments[_key3];
98
108
  }
99
- return _assertClassBrand(_FocusManager_brand, _this, _focusCell).call(_this, ...args);
109
+ return _assertClassBrand(_FocusGridManager_brand, _this, _onAfterSelectionChange).call(_this, ...args);
100
110
  });
101
111
  _classPrivateFieldGet(_hot, this).addHook('afterSelectionEnd', function () {
102
112
  for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
103
113
  args[_key4] = arguments[_key4];
104
114
  }
105
- return _assertClassBrand(_FocusManager_brand, _this, _focusEditorElement).call(_this, ...args);
115
+ return _assertClassBrand(_FocusGridManager_brand, _this, _focusEditorElement).call(_this, ...args);
116
+ });
117
+ _classPrivateFieldGet(_hot, this).addHook('afterRender', function () {
118
+ for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
119
+ args[_key5] = arguments[_key5];
120
+ }
121
+ return _assertClassBrand(_FocusGridManager_brand, _this, _onAfterRender).call(_this, ...args);
106
122
  });
107
123
  }
108
124
 
@@ -195,7 +211,7 @@ class FocusManager {
195
211
  if (selectedCell) {
196
212
  focusElement(selectedCell);
197
213
  } else {
198
- _assertClassBrand(_FocusManager_brand, this, _getSelectedCell).call(this, element => focusElement(element));
214
+ _assertClassBrand(_FocusGridManager_brand, this, _getSelectedCell).call(this, element => focusElement(element));
199
215
  }
200
216
  }
201
217
 
@@ -224,7 +240,7 @@ class FocusManager {
224
240
  }
225
241
  }
226
242
  }
227
- exports.FocusManager = FocusManager;
243
+ exports.FocusGridManager = FocusGridManager;
228
244
  function _getSelectedCell(callback) {
229
245
  var _classPrivateFieldGet8;
230
246
  const highlight = (_classPrivateFieldGet8 = _classPrivateFieldGet(_hot, this).getSelectedRangeActive()) === null || _classPrivateFieldGet8 === void 0 ? void 0 : _classPrivateFieldGet8.highlight;
@@ -245,7 +261,7 @@ function _getSelectedCell(callback) {
245
261
  * Manage the browser's focus after each cell selection change.
246
262
  */
247
263
  function _focusCell() {
248
- _assertClassBrand(_FocusManager_brand, this, _getSelectedCell).call(this, selectedCell => {
264
+ _assertClassBrand(_FocusGridManager_brand, this, _getSelectedCell).call(this, selectedCell => {
249
265
  const {
250
266
  activeElement
251
267
  } = _classPrivateFieldGet(_hot, this).rootDocument;
@@ -264,12 +280,27 @@ function _focusCell() {
264
280
  * Manage the browser's focus after cell selection end.
265
281
  */
266
282
  function _focusEditorElement() {
267
- _assertClassBrand(_FocusManager_brand, this, _getSelectedCell).call(this, selectedCell => {
283
+ _assertClassBrand(_FocusGridManager_brand, this, _getSelectedCell).call(this, selectedCell => {
268
284
  if (this.getFocusMode() === FOCUS_MODES.MIXED && (selectedCell === null || selectedCell === void 0 ? void 0 : selectedCell.nodeName) === 'TD') {
269
285
  this.refocusToEditorTextarea();
270
286
  }
271
287
  });
272
288
  }
289
+ /**
290
+ * Handle the after selection change event.
291
+ */
292
+ function _onAfterSelectionChange() {
293
+ _classPrivateFieldSet(_hasSelectionChange, this, true);
294
+ }
295
+ /**
296
+ * Focuses the cell after the render event when the selection has changed.
297
+ */
298
+ function _onAfterRender() {
299
+ if (_classPrivateFieldGet(_hasSelectionChange, this)) {
300
+ _classPrivateFieldSet(_hasSelectionChange, this, false);
301
+ _assertClassBrand(_FocusGridManager_brand, this, _focusCell).call(this);
302
+ }
303
+ }
273
304
  /**
274
305
  * Update the manager configuration after calling `updateSettings`.
275
306
  *