handsontable 0.0.0-next-9059914-20231025 → 0.0.0-next-cecf979-20231026

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of handsontable might be problematic. Click here for more details.

Files changed (447) hide show
  1. package/3rdparty/walkontable/src/cell/coords.d.ts +6 -1
  2. package/3rdparty/walkontable/src/cell/coords.js +50 -11
  3. package/3rdparty/walkontable/src/cell/coords.mjs +50 -11
  4. package/3rdparty/walkontable/src/cell/range.d.ts +9 -2
  5. package/3rdparty/walkontable/src/cell/range.js +38 -7
  6. package/3rdparty/walkontable/src/cell/range.mjs +38 -7
  7. package/3rdparty/walkontable/src/core/_base.js +9 -3
  8. package/3rdparty/walkontable/src/core/_base.mjs +9 -3
  9. package/3rdparty/walkontable/src/core/clone.js +2 -2
  10. package/3rdparty/walkontable/src/core/clone.mjs +2 -2
  11. package/3rdparty/walkontable/src/core/core.js +3 -2
  12. package/3rdparty/walkontable/src/core/core.mjs +3 -2
  13. package/3rdparty/walkontable/src/event.js +12 -10
  14. package/3rdparty/walkontable/src/event.mjs +12 -10
  15. package/3rdparty/walkontable/src/facade/core.js +2 -2
  16. package/3rdparty/walkontable/src/facade/core.mjs +2 -2
  17. package/3rdparty/walkontable/src/index.js +10 -2
  18. package/3rdparty/walkontable/src/index.mjs +2 -2
  19. package/3rdparty/walkontable/src/overlay/_base.js +13 -2
  20. package/3rdparty/walkontable/src/overlay/_base.mjs +14 -3
  21. package/3rdparty/walkontable/src/overlay/inlineStart.js +2 -6
  22. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +2 -6
  23. package/3rdparty/walkontable/src/overlay/top.js +2 -6
  24. package/3rdparty/walkontable/src/overlay/top.mjs +2 -6
  25. package/3rdparty/walkontable/src/renderer/cells.js +10 -0
  26. package/3rdparty/walkontable/src/renderer/cells.mjs +11 -1
  27. package/3rdparty/walkontable/src/renderer/columnHeaders.js +10 -0
  28. package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +11 -1
  29. package/3rdparty/walkontable/src/renderer/rowHeaders.js +5 -0
  30. package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +5 -0
  31. package/3rdparty/walkontable/src/renderer/rows.js +13 -0
  32. package/3rdparty/walkontable/src/renderer/rows.mjs +13 -0
  33. package/3rdparty/walkontable/src/renderer/table.js +9 -0
  34. package/3rdparty/walkontable/src/renderer/table.mjs +9 -0
  35. package/3rdparty/walkontable/src/scroll.js +2 -0
  36. package/3rdparty/walkontable/src/scroll.mjs +2 -0
  37. package/3rdparty/walkontable/src/{border.js → selection/border/border.js} +7 -12
  38. package/3rdparty/walkontable/src/{border.mjs → selection/border/border.mjs} +7 -12
  39. package/3rdparty/walkontable/src/selection/border/constants.js +16 -0
  40. package/3rdparty/walkontable/src/selection/border/constants.mjs +12 -0
  41. package/3rdparty/walkontable/src/selection/constants.js +62 -0
  42. package/3rdparty/walkontable/src/selection/constants.mjs +51 -0
  43. package/3rdparty/walkontable/src/selection/index.js +26 -0
  44. package/3rdparty/walkontable/src/selection/index.mjs +5 -0
  45. package/3rdparty/walkontable/src/selection/manager.js +274 -0
  46. package/3rdparty/walkontable/src/selection/manager.mjs +269 -0
  47. package/3rdparty/walkontable/src/selection/scanner.js +270 -0
  48. package/3rdparty/walkontable/src/selection/scanner.mjs +267 -0
  49. package/3rdparty/walkontable/src/selection/selection.js +101 -0
  50. package/3rdparty/walkontable/src/selection/selection.mjs +96 -0
  51. package/3rdparty/walkontable/src/settings.js +13 -4
  52. package/3rdparty/walkontable/src/settings.mjs +13 -4
  53. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +9 -0
  54. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +9 -0
  55. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +9 -0
  56. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +9 -0
  57. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +9 -0
  58. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +9 -0
  59. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +9 -0
  60. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +9 -0
  61. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +9 -0
  62. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -0
  63. package/3rdparty/walkontable/src/table.js +19 -78
  64. package/3rdparty/walkontable/src/table.mjs +20 -79
  65. package/base.js +2 -2
  66. package/base.mjs +2 -2
  67. package/cellTypes/dateType/dateType.d.ts +3 -3
  68. package/cellTypes/dateType/dateType.js +2 -2
  69. package/cellTypes/dateType/dateType.mjs +2 -2
  70. package/cellTypes/handsontableType/handsontableType.d.ts +3 -3
  71. package/cellTypes/handsontableType/handsontableType.js +2 -2
  72. package/cellTypes/handsontableType/handsontableType.mjs +2 -2
  73. package/cellTypes/index.d.ts +3 -0
  74. package/cellTypes/index.js +4 -0
  75. package/cellTypes/index.mjs +3 -1
  76. package/cellTypes/selectType/index.d.ts +1 -0
  77. package/cellTypes/selectType/index.js +6 -0
  78. package/cellTypes/selectType/index.mjs +1 -0
  79. package/cellTypes/selectType/selectType.d.ts +14 -0
  80. package/cellTypes/selectType/selectType.js +13 -0
  81. package/cellTypes/selectType/selectType.mjs +8 -0
  82. package/core/focusCatcher/focusDetector.js +63 -0
  83. package/core/focusCatcher/focusDetector.mjs +59 -0
  84. package/core/focusCatcher/index.js +142 -0
  85. package/core/focusCatcher/index.mjs +138 -0
  86. package/core/index.js +9 -0
  87. package/core/index.mjs +1 -0
  88. package/core.d.ts +9 -4
  89. package/core.js +285 -327
  90. package/core.mjs +285 -327
  91. package/dataMap/metaManager/metaSchema.js +65 -0
  92. package/dataMap/metaManager/metaSchema.mjs +65 -0
  93. package/dataMap/metaManager/mods/extendMetaProperties.js +7 -1
  94. package/dataMap/metaManager/mods/extendMetaProperties.mjs +7 -1
  95. package/dataMap/replaceData.js +5 -0
  96. package/dataMap/replaceData.mjs +5 -0
  97. package/dist/handsontable.css +51 -15
  98. package/dist/handsontable.full.css +51 -15
  99. package/dist/handsontable.full.js +13360 -7840
  100. package/dist/handsontable.full.min.css +7 -7
  101. package/dist/handsontable.full.min.js +136 -136
  102. package/dist/handsontable.js +20955 -15435
  103. package/dist/handsontable.min.css +6 -6
  104. package/dist/handsontable.min.js +24 -24
  105. package/dist/languages/all.js +6 -2
  106. package/dist/languages/all.min.js +1 -1
  107. package/dist/languages/en-US.js +3 -1
  108. package/dist/languages/en-US.min.js +1 -1
  109. package/dist/languages/pl-PL.js +3 -1
  110. package/dist/languages/pl-PL.min.js +1 -1
  111. package/editorManager.js +15 -87
  112. package/editorManager.mjs +16 -87
  113. package/editors/autocompleteEditor/autocompleteEditor.js +53 -2
  114. package/editors/autocompleteEditor/autocompleteEditor.mjs +54 -3
  115. package/editors/dateEditor/dateEditor.js +26 -7
  116. package/editors/dateEditor/dateEditor.mjs +27 -8
  117. package/editors/handsontableEditor/handsontableEditor.js +9 -1
  118. package/editors/handsontableEditor/handsontableEditor.mjs +10 -2
  119. package/editors/textEditor/textEditor.js +19 -27
  120. package/editors/textEditor/textEditor.mjs +22 -30
  121. package/focusManager.d.ts +12 -0
  122. package/focusManager.js +265 -0
  123. package/focusManager.mjs +261 -0
  124. package/helpers/a11y.js +79 -0
  125. package/helpers/a11y.mjs +38 -0
  126. package/helpers/dom/element.js +188 -9
  127. package/helpers/dom/element.mjs +182 -9
  128. package/helpers/mixed.js +1 -1
  129. package/helpers/mixed.mjs +1 -1
  130. package/helpers/number.d.ts +1 -0
  131. package/helpers/number.js +18 -0
  132. package/helpers/number.mjs +17 -0
  133. package/i18n/constants.js +7 -1
  134. package/i18n/constants.mjs +4 -1
  135. package/i18n/languages/en-US.js +3 -1
  136. package/i18n/languages/en-US.mjs +3 -1
  137. package/i18n/languages/pl-PL.js +3 -1
  138. package/i18n/languages/pl-PL.mjs +3 -1
  139. package/languages/all.js +6 -2
  140. package/languages/en-US.js +3 -1
  141. package/languages/en-US.mjs +3 -1
  142. package/languages/index.js +6 -2
  143. package/languages/pl-PL.js +3 -1
  144. package/languages/pl-PL.mjs +3 -1
  145. package/package.json +21 -1
  146. package/pluginHooks.d.ts +12 -1
  147. package/pluginHooks.js +152 -1
  148. package/pluginHooks.mjs +152 -1
  149. package/plugins/collapsibleColumns/collapsibleColumns.js +74 -4
  150. package/plugins/collapsibleColumns/collapsibleColumns.mjs +75 -5
  151. package/plugins/columnSorting/columnSorting.js +43 -0
  152. package/plugins/columnSorting/columnSorting.mjs +44 -3
  153. package/plugins/columnSorting/index.js +3 -1
  154. package/plugins/columnSorting/index.mjs +1 -1
  155. package/plugins/comments/commentEditor.js +1 -0
  156. package/plugins/comments/commentEditor.mjs +1 -0
  157. package/plugins/comments/comments.js +252 -189
  158. package/plugins/comments/comments.mjs +251 -190
  159. package/plugins/comments/contextMenuItem/addEditComment.js +41 -0
  160. package/plugins/comments/contextMenuItem/addEditComment.mjs +35 -0
  161. package/plugins/comments/contextMenuItem/readOnlyComment.js +49 -0
  162. package/plugins/comments/contextMenuItem/readOnlyComment.mjs +43 -0
  163. package/plugins/comments/contextMenuItem/removeComment.js +38 -0
  164. package/plugins/comments/contextMenuItem/removeComment.mjs +32 -0
  165. package/plugins/contextMenu/commandExecutor.js +2 -3
  166. package/plugins/contextMenu/commandExecutor.mjs +2 -3
  167. package/plugins/contextMenu/contextMenu.d.ts +1 -1
  168. package/plugins/contextMenu/contextMenu.js +75 -36
  169. package/plugins/contextMenu/contextMenu.mjs +74 -35
  170. package/plugins/contextMenu/itemsFactory.js +2 -3
  171. package/plugins/contextMenu/itemsFactory.mjs +3 -4
  172. package/plugins/contextMenu/{cursor.mjs → menu/cursor.js} +6 -4
  173. package/plugins/contextMenu/{cursor.js → menu/cursor.mjs} +4 -10
  174. package/plugins/contextMenu/menu/defaultShortcutsList.js +88 -0
  175. package/plugins/contextMenu/menu/defaultShortcutsList.mjs +84 -0
  176. package/plugins/contextMenu/menu/index.js +9 -0
  177. package/plugins/contextMenu/menu/index.mjs +1 -0
  178. package/plugins/contextMenu/{menu.js → menu/menu.js} +145 -421
  179. package/plugins/contextMenu/{menu.mjs → menu/menu.mjs} +146 -422
  180. package/plugins/contextMenu/menu/menuItemRenderer.js +58 -0
  181. package/plugins/contextMenu/menu/menuItemRenderer.mjs +54 -0
  182. package/plugins/contextMenu/menu/navigator.js +27 -0
  183. package/plugins/contextMenu/menu/navigator.mjs +23 -0
  184. package/plugins/contextMenu/menu/positioner.js +213 -0
  185. package/plugins/contextMenu/menu/positioner.mjs +209 -0
  186. package/plugins/contextMenu/menu/shortcuts.js +114 -0
  187. package/plugins/contextMenu/menu/shortcuts.mjs +110 -0
  188. package/plugins/contextMenu/menu/utils.js +177 -0
  189. package/plugins/contextMenu/menu/utils.mjs +163 -0
  190. package/plugins/contextMenu/predefinedItems/alignment.js +7 -0
  191. package/plugins/contextMenu/predefinedItems/alignment.mjs +7 -0
  192. package/plugins/contextMenu/predefinedItems/clearColumn.js +5 -3
  193. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +5 -3
  194. package/plugins/contextMenu/predefinedItems/columnLeft.js +5 -3
  195. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +5 -3
  196. package/plugins/contextMenu/predefinedItems/columnRight.js +5 -3
  197. package/plugins/contextMenu/predefinedItems/columnRight.mjs +5 -3
  198. package/plugins/contextMenu/{predefinedItems.js → predefinedItems/index.js} +14 -14
  199. package/plugins/contextMenu/predefinedItems/index.mjs +68 -0
  200. package/plugins/contextMenu/predefinedItems/readOnly.js +7 -0
  201. package/plugins/contextMenu/predefinedItems/readOnly.mjs +7 -0
  202. package/plugins/contextMenu/predefinedItems/removeColumn.js +7 -5
  203. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +5 -3
  204. package/plugins/contextMenu/predefinedItems/removeRow.js +7 -5
  205. package/plugins/contextMenu/predefinedItems/removeRow.mjs +5 -3
  206. package/plugins/contextMenu/predefinedItems/rowAbove.js +5 -3
  207. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +5 -3
  208. package/plugins/contextMenu/predefinedItems/rowBelow.js +5 -3
  209. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +5 -3
  210. package/plugins/contextMenu/utils.js +35 -151
  211. package/plugins/contextMenu/utils.mjs +35 -144
  212. package/plugins/copyPaste/contextMenuItem/copy.js +7 -0
  213. package/plugins/copyPaste/contextMenuItem/copy.mjs +7 -0
  214. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +9 -1
  215. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +9 -1
  216. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +9 -1
  217. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +9 -1
  218. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +9 -1
  219. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +9 -1
  220. package/plugins/copyPaste/contextMenuItem/cut.js +7 -0
  221. package/plugins/copyPaste/contextMenuItem/cut.mjs +7 -0
  222. package/plugins/copyPaste/copyPaste.js +127 -78
  223. package/plugins/copyPaste/copyPaste.mjs +128 -79
  224. package/plugins/customBorders/customBorders.js +23 -20
  225. package/plugins/customBorders/customBorders.mjs +24 -21
  226. package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
  227. package/plugins/dropdownMenu/dropdownMenu.js +127 -40
  228. package/plugins/dropdownMenu/dropdownMenu.mjs +126 -39
  229. package/plugins/filters/component/_base.js +23 -8
  230. package/plugins/filters/component/_base.mjs +23 -8
  231. package/plugins/filters/component/actionBar.js +29 -27
  232. package/plugins/filters/component/actionBar.mjs +26 -23
  233. package/plugins/filters/component/condition.js +46 -59
  234. package/plugins/filters/component/condition.mjs +40 -52
  235. package/plugins/filters/component/operators.js +21 -22
  236. package/plugins/filters/component/operators.mjs +18 -18
  237. package/plugins/filters/component/value.js +35 -26
  238. package/plugins/filters/component/value.mjs +32 -22
  239. package/plugins/filters/constants.mjs +1 -1
  240. package/plugins/filters/filters.js +106 -62
  241. package/plugins/filters/filters.mjs +99 -55
  242. package/plugins/filters/menu/focusController.js +123 -0
  243. package/plugins/filters/menu/focusController.mjs +119 -0
  244. package/plugins/filters/menu/focusNavigator.js +30 -0
  245. package/plugins/filters/menu/focusNavigator.mjs +26 -0
  246. package/plugins/filters/ui/_base.js +35 -13
  247. package/plugins/filters/ui/_base.mjs +35 -13
  248. package/plugins/filters/ui/input.js +43 -32
  249. package/plugins/filters/ui/input.mjs +42 -30
  250. package/plugins/filters/ui/link.js +44 -12
  251. package/plugins/filters/ui/link.mjs +44 -11
  252. package/plugins/filters/ui/multipleSelect.js +234 -129
  253. package/plugins/filters/ui/multipleSelect.mjs +232 -127
  254. package/plugins/filters/ui/radioInput.js +42 -18
  255. package/plugins/filters/ui/radioInput.mjs +42 -17
  256. package/plugins/filters/ui/select.js +144 -75
  257. package/plugins/filters/ui/select.mjs +142 -72
  258. package/plugins/hiddenColumns/hiddenColumns.mjs +1 -1
  259. package/plugins/hiddenRows/hiddenRows.mjs +1 -1
  260. package/plugins/manualColumnMove/manualColumnMove.js +3 -1
  261. package/plugins/manualColumnMove/manualColumnMove.mjs +3 -1
  262. package/plugins/mergeCells/mergeCells.js +5 -16
  263. package/plugins/mergeCells/mergeCells.mjs +5 -16
  264. package/plugins/multiColumnSorting/multiColumnSorting.js +37 -2
  265. package/plugins/multiColumnSorting/multiColumnSorting.mjs +37 -2
  266. package/plugins/nestedHeaders/nestedHeaders.js +240 -10
  267. package/plugins/nestedHeaders/nestedHeaders.mjs +241 -11
  268. package/plugins/nestedHeaders/stateManager/index.js +102 -3
  269. package/plugins/nestedHeaders/stateManager/index.mjs +102 -3
  270. package/plugins/nestedRows/nestedRows.js +41 -0
  271. package/plugins/nestedRows/nestedRows.mjs +41 -0
  272. package/plugins/nestedRows/ui/headers.js +11 -0
  273. package/plugins/nestedRows/ui/headers.mjs +12 -1
  274. package/renderers/autocompleteRenderer/autocompleteRenderer.js +8 -0
  275. package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +8 -0
  276. package/renderers/baseRenderer/baseRenderer.js +17 -0
  277. package/renderers/baseRenderer/baseRenderer.mjs +18 -1
  278. package/renderers/checkboxRenderer/checkboxRenderer.js +9 -4
  279. package/renderers/checkboxRenderer/checkboxRenderer.mjs +9 -4
  280. package/renderers/dateRenderer/dateRenderer.d.ts +5 -0
  281. package/renderers/dateRenderer/dateRenderer.js +29 -0
  282. package/renderers/dateRenderer/dateRenderer.mjs +24 -0
  283. package/renderers/dateRenderer/index.d.ts +1 -0
  284. package/renderers/dateRenderer/index.js +6 -0
  285. package/renderers/dateRenderer/index.mjs +1 -0
  286. package/renderers/handsontableRenderer/handsontableRenderer.d.ts +5 -0
  287. package/renderers/handsontableRenderer/handsontableRenderer.js +29 -0
  288. package/renderers/handsontableRenderer/handsontableRenderer.mjs +24 -0
  289. package/renderers/handsontableRenderer/index.d.ts +1 -0
  290. package/renderers/handsontableRenderer/index.js +6 -0
  291. package/renderers/handsontableRenderer/index.mjs +1 -0
  292. package/renderers/index.d.ts +9 -0
  293. package/renderers/selectRenderer/index.d.ts +1 -0
  294. package/renderers/selectRenderer/index.js +6 -0
  295. package/renderers/selectRenderer/index.mjs +1 -0
  296. package/renderers/selectRenderer/selectRenderer.d.ts +5 -0
  297. package/renderers/selectRenderer/selectRenderer.js +27 -0
  298. package/renderers/selectRenderer/selectRenderer.mjs +22 -0
  299. package/selection/highlight/highlight.js +256 -71
  300. package/selection/highlight/highlight.mjs +250 -71
  301. package/selection/highlight/types/activeHeader.js +10 -8
  302. package/selection/highlight/types/activeHeader.mjs +10 -8
  303. package/selection/highlight/types/area.js +6 -18
  304. package/selection/highlight/types/area.mjs +6 -18
  305. package/selection/highlight/types/areaLayered.js +31 -0
  306. package/selection/highlight/types/areaLayered.mjs +26 -0
  307. package/selection/highlight/types/column.js +27 -0
  308. package/selection/highlight/types/column.mjs +22 -0
  309. package/selection/highlight/types/customSelection.js +7 -9
  310. package/selection/highlight/types/customSelection.mjs +7 -9
  311. package/selection/highlight/types/fill.js +5 -7
  312. package/selection/highlight/types/fill.mjs +5 -7
  313. package/selection/highlight/types/{cell.js → focus.js} +5 -7
  314. package/selection/highlight/types/{cell.mjs → focus.mjs} +5 -7
  315. package/selection/highlight/types/header.js +9 -18
  316. package/selection/highlight/types/header.mjs +9 -18
  317. package/selection/highlight/types/row.js +27 -0
  318. package/selection/highlight/types/row.mjs +22 -0
  319. package/selection/highlight/visualSelection.js +31 -27
  320. package/selection/highlight/visualSelection.mjs +31 -27
  321. package/selection/index.js +4 -7
  322. package/selection/index.mjs +2 -3
  323. package/selection/mouseEventHandler.js +7 -1
  324. package/selection/mouseEventHandler.mjs +7 -1
  325. package/selection/range.js +8 -8
  326. package/selection/range.mjs +8 -8
  327. package/selection/selection.js +321 -152
  328. package/selection/selection.mjs +318 -151
  329. package/selection/transformation.js +232 -90
  330. package/selection/transformation.mjs +232 -90
  331. package/selection/utils.js +15 -21
  332. package/selection/utils.mjs +16 -21
  333. package/settings.d.ts +4 -0
  334. package/shortcutContexts/commands/editor/closeAndSave.js +12 -0
  335. package/shortcutContexts/commands/editor/closeAndSave.mjs +8 -0
  336. package/shortcutContexts/commands/editor/closeWithoutSaving.js +12 -0
  337. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
  338. package/shortcutContexts/commands/editor/fastOpen.js +16 -0
  339. package/shortcutContexts/commands/editor/fastOpen.mjs +12 -0
  340. package/shortcutContexts/commands/editor/index.js +16 -0
  341. package/shortcutContexts/commands/editor/index.mjs +12 -0
  342. package/shortcutContexts/commands/editor/open.js +27 -0
  343. package/shortcutContexts/commands/editor/open.mjs +23 -0
  344. package/shortcutContexts/commands/emptySelectedCells.js +11 -0
  345. package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
  346. package/shortcutContexts/commands/extendCellsSelection/down.js +15 -0
  347. package/shortcutContexts/commands/extendCellsSelection/down.mjs +11 -0
  348. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +25 -0
  349. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +21 -0
  350. package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
  351. package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
  352. package/shortcutContexts/commands/extendCellsSelection/left.js +15 -0
  353. package/shortcutContexts/commands/extendCellsSelection/left.mjs +11 -0
  354. package/shortcutContexts/commands/extendCellsSelection/right.js +15 -0
  355. package/shortcutContexts/commands/extendCellsSelection/right.mjs +11 -0
  356. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +19 -0
  357. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +15 -0
  358. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +29 -0
  359. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +25 -0
  360. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +19 -0
  361. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +15 -0
  362. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +19 -0
  363. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +15 -0
  364. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +29 -0
  365. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +25 -0
  366. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +29 -0
  367. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +25 -0
  368. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +29 -0
  369. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +25 -0
  370. package/shortcutContexts/commands/extendCellsSelection/toRows.js +19 -0
  371. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +15 -0
  372. package/shortcutContexts/commands/extendCellsSelection/up.js +15 -0
  373. package/shortcutContexts/commands/extendCellsSelection/up.mjs +11 -0
  374. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +25 -0
  375. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +21 -0
  376. package/shortcutContexts/commands/index.js +35 -0
  377. package/shortcutContexts/commands/index.mjs +31 -0
  378. package/shortcutContexts/commands/moveCellSelection/down.js +13 -0
  379. package/shortcutContexts/commands/moveCellSelection/down.mjs +9 -0
  380. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +33 -0
  381. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +29 -0
  382. package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
  383. package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
  384. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +12 -0
  385. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
  386. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +12 -0
  387. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
  388. package/shortcutContexts/commands/moveCellSelection/left.js +10 -0
  389. package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
  390. package/shortcutContexts/commands/moveCellSelection/right.js +10 -0
  391. package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
  392. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +17 -0
  393. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +13 -0
  394. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +18 -0
  395. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +14 -0
  396. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +14 -0
  397. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +10 -0
  398. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +17 -0
  399. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +13 -0
  400. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +19 -0
  401. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +15 -0
  402. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +21 -0
  403. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +17 -0
  404. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +17 -0
  405. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +13 -0
  406. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +19 -0
  407. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +15 -0
  408. package/shortcutContexts/commands/moveCellSelection/up.js +13 -0
  409. package/shortcutContexts/commands/moveCellSelection/up.mjs +9 -0
  410. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +33 -0
  411. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +29 -0
  412. package/shortcutContexts/commands/populateSelectedCellsData.js +29 -0
  413. package/shortcutContexts/commands/populateSelectedCellsData.mjs +25 -0
  414. package/shortcutContexts/commands/scrollToFocusedCell.js +35 -0
  415. package/shortcutContexts/commands/scrollToFocusedCell.mjs +31 -0
  416. package/shortcutContexts/commands/selectAll.js +12 -0
  417. package/shortcutContexts/commands/selectAll.mjs +8 -0
  418. package/shortcutContexts/constants.js +13 -0
  419. package/shortcutContexts/constants.mjs +8 -0
  420. package/shortcutContexts/editor.js +25 -0
  421. package/shortcutContexts/editor.mjs +21 -0
  422. package/shortcutContexts/grid.js +163 -0
  423. package/shortcutContexts/grid.mjs +159 -0
  424. package/shortcutContexts/index.js +24 -0
  425. package/shortcutContexts/index.mjs +11 -0
  426. package/shortcuts/context.d.ts +1 -0
  427. package/shortcuts/context.js +23 -4
  428. package/shortcuts/context.mjs +23 -5
  429. package/shortcuts/manager.js +25 -7
  430. package/shortcuts/manager.mjs +26 -7
  431. package/shortcuts/recorder.js +3 -3
  432. package/shortcuts/recorder.mjs +3 -3
  433. package/shortcuts/utils.js +19 -5
  434. package/shortcuts/utils.mjs +18 -4
  435. package/tableView.js +111 -13
  436. package/tableView.mjs +112 -14
  437. package/utils/paginator.js +151 -0
  438. package/utils/paginator.mjs +147 -0
  439. package/3rdparty/walkontable/src/selection.js +0 -295
  440. package/3rdparty/walkontable/src/selection.mjs +0 -290
  441. package/plugins/contextMenu/predefinedItems.mjs +0 -68
  442. package/plugins/copyPaste/focusableElement.js +0 -186
  443. package/plugins/copyPaste/focusableElement.mjs +0 -180
  444. package/selection/highlight/constants.js +0 -15
  445. package/selection/highlight/constants.mjs +0 -6
  446. package/selection/highlight/types/index.js +0 -35
  447. package/selection/highlight/types/index.mjs +0 -31
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.createMenuItemRenderer = createMenuItemRenderer;
5
+ var _utils = require("./utils");
6
+ var _element = require("../../../helpers/dom/element");
7
+ var _a11y = require("../../../helpers/a11y");
8
+ /**
9
+ * Creates the menu renderer function.
10
+ *
11
+ * @private
12
+ * @param {Core} mainTableHot The main table Handsontable instance.
13
+ * @returns {Function}
14
+ */
15
+ function createMenuItemRenderer(mainTableHot) {
16
+ /**
17
+ * Menu item renderer.
18
+ *
19
+ * @private
20
+ * @param {Core} menuHot The Handsontable instance.
21
+ * @param {HTMLCellElement} TD The rendered cell element.
22
+ * @param {number} row The visual index.
23
+ * @param {number} col The visual index.
24
+ * @param {string} prop The column property if used.
25
+ * @param {string} value The cell value.
26
+ */
27
+ return (menuHot, TD, row, col, prop, value) => {
28
+ if (TD.hasAttribute('ghost-table')) {
29
+ return;
30
+ }
31
+ const item = menuHot.getSourceDataAtRow(row);
32
+ const wrapper = mainTableHot.rootDocument.createElement('div');
33
+ const itemValue = typeof value === 'function' ? value.call(mainTableHot) : value;
34
+ (0, _element.empty)(TD);
35
+ (0, _element.addClass)(wrapper, 'htItemWrapper');
36
+ if (mainTableHot.getSettings().ariaTags) {
37
+ const isFocusable = !(0, _utils.isItemDisabled)(item, mainTableHot) && !(0, _utils.isItemSelectionDisabled)(item) && !(0, _utils.isItemSeparator)(item);
38
+ (0, _element.setAttribute)(TD, [(0, _a11y.A11Y_MENU_ITEM)(), (0, _a11y.A11Y_LABEL)(itemValue), ...(isFocusable ? [(0, _a11y.A11Y_TABINDEX)(-1)] : []), ...((0, _utils.isItemDisabled)(item, mainTableHot) ? [(0, _a11y.A11Y_DISABLED)()] : []), ...((0, _utils.isItemSubMenu)(item) ? [(0, _a11y.A11Y_EXPANDED)(false)] : [])]);
39
+ }
40
+ TD.className = '';
41
+ TD.appendChild(wrapper);
42
+ if ((0, _utils.isItemSeparator)(item)) {
43
+ (0, _element.addClass)(TD, 'htSeparator');
44
+ } else if (typeof item.renderer === 'function') {
45
+ (0, _element.addClass)(TD, 'htCustomMenuRenderer');
46
+ TD.appendChild(item.renderer(menuHot, wrapper, row, col, prop, itemValue));
47
+ } else {
48
+ (0, _element.fastInnerHTML)(wrapper, itemValue);
49
+ }
50
+ if ((0, _utils.isItemDisabled)(item, mainTableHot)) {
51
+ (0, _element.addClass)(TD, 'htDisabled');
52
+ } else if ((0, _utils.isItemSelectionDisabled)(item)) {
53
+ (0, _element.addClass)(TD, 'htSelectionDisabled');
54
+ } else if ((0, _utils.isItemSubMenu)(item)) {
55
+ (0, _element.addClass)(TD, 'htSubmenu');
56
+ }
57
+ };
58
+ }
@@ -0,0 +1,54 @@
1
+ import { isItemSubMenu, isItemDisabled, isItemSelectionDisabled, isItemSeparator } from "./utils.mjs";
2
+ import { addClass, empty, fastInnerHTML, setAttribute } from "../../../helpers/dom/element.mjs";
3
+ import { A11Y_DISABLED, A11Y_EXPANDED, A11Y_LABEL, A11Y_MENU_ITEM, A11Y_TABINDEX } from "../../../helpers/a11y.mjs";
4
+ /**
5
+ * Creates the menu renderer function.
6
+ *
7
+ * @private
8
+ * @param {Core} mainTableHot The main table Handsontable instance.
9
+ * @returns {Function}
10
+ */
11
+ export function createMenuItemRenderer(mainTableHot) {
12
+ /**
13
+ * Menu item renderer.
14
+ *
15
+ * @private
16
+ * @param {Core} menuHot The Handsontable instance.
17
+ * @param {HTMLCellElement} TD The rendered cell element.
18
+ * @param {number} row The visual index.
19
+ * @param {number} col The visual index.
20
+ * @param {string} prop The column property if used.
21
+ * @param {string} value The cell value.
22
+ */
23
+ return (menuHot, TD, row, col, prop, value) => {
24
+ if (TD.hasAttribute('ghost-table')) {
25
+ return;
26
+ }
27
+ const item = menuHot.getSourceDataAtRow(row);
28
+ const wrapper = mainTableHot.rootDocument.createElement('div');
29
+ const itemValue = typeof value === 'function' ? value.call(mainTableHot) : value;
30
+ empty(TD);
31
+ addClass(wrapper, 'htItemWrapper');
32
+ if (mainTableHot.getSettings().ariaTags) {
33
+ const isFocusable = !isItemDisabled(item, mainTableHot) && !isItemSelectionDisabled(item) && !isItemSeparator(item);
34
+ setAttribute(TD, [A11Y_MENU_ITEM(), A11Y_LABEL(itemValue), ...(isFocusable ? [A11Y_TABINDEX(-1)] : []), ...(isItemDisabled(item, mainTableHot) ? [A11Y_DISABLED()] : []), ...(isItemSubMenu(item) ? [A11Y_EXPANDED(false)] : [])]);
35
+ }
36
+ TD.className = '';
37
+ TD.appendChild(wrapper);
38
+ if (isItemSeparator(item)) {
39
+ addClass(TD, 'htSeparator');
40
+ } else if (typeof item.renderer === 'function') {
41
+ addClass(TD, 'htCustomMenuRenderer');
42
+ TD.appendChild(item.renderer(menuHot, wrapper, row, col, prop, itemValue));
43
+ } else {
44
+ fastInnerHTML(wrapper, itemValue);
45
+ }
46
+ if (isItemDisabled(item, mainTableHot)) {
47
+ addClass(TD, 'htDisabled');
48
+ } else if (isItemSelectionDisabled(item)) {
49
+ addClass(TD, 'htSelectionDisabled');
50
+ } else if (isItemSubMenu(item)) {
51
+ addClass(TD, 'htSubmenu');
52
+ }
53
+ };
54
+ }
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.createMenuNavigator = createMenuNavigator;
5
+ var _paginator = require("../../../utils/paginator");
6
+ var _utils = require("./utils");
7
+ /**
8
+ * Creates navigator for menus and submenus.
9
+ *
10
+ * @param {Handsontable} hotMenu The Handsontable instance of the menu.
11
+ * @returns {Paginator}
12
+ */
13
+ function createMenuNavigator(hotMenu) {
14
+ return (0, _paginator.createPaginator)({
15
+ size: () => hotMenu.countRows(),
16
+ onItemSelect(currentItem, directItemChange) {
17
+ const cell = hotMenu.getCell(currentItem, 0);
18
+ if (!cell || (0, _utils.isSeparator)(cell) || (0, _utils.isDisabled)(cell) || (0, _utils.isSelectionDisabled)(cell)) {
19
+ return false;
20
+ }
21
+ hotMenu.selectCell(currentItem, 0, ...(directItemChange ? [currentItem, 0, false, false] : []));
22
+ },
23
+ onClear() {
24
+ hotMenu.deselectCell();
25
+ }
26
+ });
27
+ }
@@ -0,0 +1,23 @@
1
+ import { createPaginator } from "../../../utils/paginator.mjs";
2
+ import { isSeparator, isDisabled, isSelectionDisabled } from "./utils.mjs";
3
+ /**
4
+ * Creates navigator for menus and submenus.
5
+ *
6
+ * @param {Handsontable} hotMenu The Handsontable instance of the menu.
7
+ * @returns {Paginator}
8
+ */
9
+ export function createMenuNavigator(hotMenu) {
10
+ return createPaginator({
11
+ size: () => hotMenu.countRows(),
12
+ onItemSelect(currentItem, directItemChange) {
13
+ const cell = hotMenu.getCell(currentItem, 0);
14
+ if (!cell || isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) {
15
+ return false;
16
+ }
17
+ hotMenu.selectCell(currentItem, 0, ...(directItemChange ? [currentItem, 0, false, false] : []));
18
+ },
19
+ onClear() {
20
+ hotMenu.deselectCell();
21
+ }
22
+ });
23
+ }
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ require("core-js/modules/es.error.cause.js");
5
+ var _cursor2 = require("./cursor");
6
+ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
7
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
8
+ function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
9
+ function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
10
+ function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
11
+ function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
12
+ function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
13
+ /**
14
+ * Helper class for positioning the menu and submenus in the correct place relative to the
15
+ * cursor position (DOM element or mouse coordinates).
16
+ *
17
+ * @private
18
+ * @class Positioner
19
+ */
20
+ var _container = /*#__PURE__*/new WeakMap();
21
+ var _parentContainer = /*#__PURE__*/new WeakMap();
22
+ var _cursor = /*#__PURE__*/new WeakMap();
23
+ var _keepInViewport = /*#__PURE__*/new WeakMap();
24
+ var _offset = /*#__PURE__*/new WeakMap();
25
+ class Positioner {
26
+ constructor(keepInViewport) {
27
+ /**
28
+ * The menu container element the positioning will be applied to.
29
+ *
30
+ * @type {HTMLElement}
31
+ */
32
+ _classPrivateFieldInitSpec(this, _container, {
33
+ writable: true,
34
+ value: void 0
35
+ });
36
+ /**
37
+ * For positioning the submenu, the parent element is used to calculate offsets to ensure that submenu
38
+ * is positioned right next to the parent menu.
39
+ *
40
+ * @type {HTMLElement}
41
+ */
42
+ _classPrivateFieldInitSpec(this, _parentContainer, {
43
+ writable: true,
44
+ value: void 0
45
+ });
46
+ /**
47
+ * The instance of the Cursor class.
48
+ *
49
+ * @type {Cursor}
50
+ */
51
+ _classPrivateFieldInitSpec(this, _cursor, {
52
+ writable: true,
53
+ value: void 0
54
+ });
55
+ /**
56
+ * Enabling the option allows changing the position calculation so that the menus (or submenus)
57
+ * are always placed within the visible viewport of the browser.
58
+ *
59
+ * @type {boolean}
60
+ */
61
+ _classPrivateFieldInitSpec(this, _keepInViewport, {
62
+ writable: true,
63
+ value: false
64
+ });
65
+ /**
66
+ * Allows apply the position offset for directions.
67
+ *
68
+ * @type {{above: number, below: number, left: number, right: number}}
69
+ */
70
+ _classPrivateFieldInitSpec(this, _offset, {
71
+ writable: true,
72
+ value: {
73
+ above: 0,
74
+ below: 0,
75
+ left: 0,
76
+ right: 0
77
+ }
78
+ });
79
+ _classPrivateFieldSet(this, _keepInViewport, keepInViewport);
80
+ }
81
+
82
+ /**
83
+ * Sets offset position for specified directions (`above`, `below`, `left` or `right`).
84
+ *
85
+ * @param {'above' | 'below' | 'left' | 'right'} direction A direction name.
86
+ * @param {number} [offset=0] Offset value.
87
+ * @returns {Positioner}
88
+ */
89
+ setOffset(direction) {
90
+ let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
91
+ _classPrivateFieldGet(this, _offset)[direction] = offset;
92
+ return this;
93
+ }
94
+
95
+ /**
96
+ * Sets the menu element to work with. The element can be owned by the main menu or the submenu.
97
+ *
98
+ * @param {HTMLElement} container The menu container element.
99
+ * @returns {Positioner}
100
+ */
101
+ setElement(container) {
102
+ _classPrivateFieldSet(this, _container, container);
103
+ return this;
104
+ }
105
+
106
+ /**
107
+ * Sets the parent menu element to work with.
108
+ *
109
+ * @param {HTMLElement} container The parent menu container element.
110
+ * @returns {Positioner}
111
+ */
112
+ setParentElement(container) {
113
+ _classPrivateFieldSet(this, _parentContainer, container);
114
+ return this;
115
+ }
116
+
117
+ /**
118
+ * Updates the menu position.
119
+ *
120
+ * @param {object|MouseEvent} coords The literal object with `top`, `left`, `width` and `height` props or a
121
+ * mouse event object.
122
+ */
123
+ updatePosition(coords) {
124
+ _classPrivateFieldSet(this, _cursor, new _cursor2.Cursor(coords, _classPrivateFieldGet(this, _container).ownerDocument.defaultView));
125
+ if (_classPrivateFieldGet(this, _keepInViewport)) {
126
+ if (_classPrivateFieldGet(this, _cursor).fitsBelow(_classPrivateFieldGet(this, _container))) {
127
+ this.setPositionBelowCursor();
128
+ } else if (_classPrivateFieldGet(this, _cursor).fitsAbove(_classPrivateFieldGet(this, _container))) {
129
+ this.setPositionAboveCursor();
130
+ } else {
131
+ this.setPositionBelowCursor();
132
+ }
133
+ this.updateHorizontalPosition();
134
+ } else {
135
+ this.setPositionBelowCursor();
136
+ this.setPositionOnRightOfCursor();
137
+ }
138
+ }
139
+
140
+ /**
141
+ * Updates the menu horizontal position.
142
+ */
143
+ updateHorizontalPosition() {
144
+ if (_classPrivateFieldGet(this, _container).dir === 'rtl') {
145
+ if (_classPrivateFieldGet(this, _cursor).fitsOnLeft(_classPrivateFieldGet(this, _container))) {
146
+ this.setPositionOnLeftOfCursor();
147
+ } else {
148
+ this.setPositionOnRightOfCursor();
149
+ }
150
+ } else if (_classPrivateFieldGet(this, _cursor).fitsOnRight(_classPrivateFieldGet(this, _container))) {
151
+ this.setPositionOnRightOfCursor();
152
+ } else {
153
+ this.setPositionOnLeftOfCursor();
154
+ }
155
+ }
156
+
157
+ /**
158
+ * Sets the menu position above the cursor object.
159
+ */
160
+ setPositionAboveCursor() {
161
+ let top = _classPrivateFieldGet(this, _offset).above + _classPrivateFieldGet(this, _cursor).top - _classPrivateFieldGet(this, _container).offsetHeight;
162
+ if (_classPrivateFieldGet(this, _parentContainer)) {
163
+ top = _classPrivateFieldGet(this, _cursor).top + _classPrivateFieldGet(this, _cursor).cellHeight - _classPrivateFieldGet(this, _container).offsetHeight + 3;
164
+ }
165
+ _classPrivateFieldGet(this, _container).style.top = `${top}px`;
166
+ }
167
+
168
+ /**
169
+ * Sets the menu position below the cursor object.
170
+ */
171
+ setPositionBelowCursor() {
172
+ let top = _classPrivateFieldGet(this, _offset).below + _classPrivateFieldGet(this, _cursor).top + 1;
173
+ if (_classPrivateFieldGet(this, _parentContainer)) {
174
+ top = _classPrivateFieldGet(this, _cursor).top - 1;
175
+ }
176
+ _classPrivateFieldGet(this, _container).style.top = `${top}px`;
177
+ }
178
+
179
+ /**
180
+ * Sets the menu position on the right of the cursor object.
181
+ */
182
+ setPositionOnRightOfCursor() {
183
+ let left = _classPrivateFieldGet(this, _cursor).left;
184
+ if (_classPrivateFieldGet(this, _parentContainer)) {
185
+ const {
186
+ right: parentMenuRight
187
+ } = _classPrivateFieldGet(this, _parentContainer).getBoundingClientRect();
188
+
189
+ // move the sub menu by the width of the parent's border (usually by 1-2 pixels)
190
+ left += _classPrivateFieldGet(this, _cursor).cellWidth + parentMenuRight - (_classPrivateFieldGet(this, _cursor).left + _classPrivateFieldGet(this, _cursor).cellWidth);
191
+ } else {
192
+ left += _classPrivateFieldGet(this, _offset).right;
193
+ }
194
+ _classPrivateFieldGet(this, _container).style.left = `${left}px`;
195
+ }
196
+
197
+ /**
198
+ * Sets the menu position on the left of the cursor object.
199
+ */
200
+ setPositionOnLeftOfCursor() {
201
+ let left = _classPrivateFieldGet(this, _offset).left + _classPrivateFieldGet(this, _cursor).left - _classPrivateFieldGet(this, _container).offsetWidth;
202
+ if (_classPrivateFieldGet(this, _parentContainer)) {
203
+ const {
204
+ left: parentMenuLeft
205
+ } = _classPrivateFieldGet(this, _parentContainer).getBoundingClientRect();
206
+
207
+ // move the sub menu by the width of the parent's border (usually by 1-2 pixels)
208
+ left -= _classPrivateFieldGet(this, _cursor).left - parentMenuLeft;
209
+ }
210
+ _classPrivateFieldGet(this, _container).style.left = `${left}px`;
211
+ }
212
+ }
213
+ exports.Positioner = Positioner;
@@ -0,0 +1,209 @@
1
+ import "core-js/modules/es.error.cause.js";
2
+ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
3
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
4
+ function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
5
+ function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
6
+ function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
7
+ function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
8
+ function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
9
+ import { Cursor } from "./cursor.mjs";
10
+ /**
11
+ * Helper class for positioning the menu and submenus in the correct place relative to the
12
+ * cursor position (DOM element or mouse coordinates).
13
+ *
14
+ * @private
15
+ * @class Positioner
16
+ */
17
+ var _container = /*#__PURE__*/new WeakMap();
18
+ var _parentContainer = /*#__PURE__*/new WeakMap();
19
+ var _cursor = /*#__PURE__*/new WeakMap();
20
+ var _keepInViewport = /*#__PURE__*/new WeakMap();
21
+ var _offset = /*#__PURE__*/new WeakMap();
22
+ export class Positioner {
23
+ constructor(keepInViewport) {
24
+ /**
25
+ * The menu container element the positioning will be applied to.
26
+ *
27
+ * @type {HTMLElement}
28
+ */
29
+ _classPrivateFieldInitSpec(this, _container, {
30
+ writable: true,
31
+ value: void 0
32
+ });
33
+ /**
34
+ * For positioning the submenu, the parent element is used to calculate offsets to ensure that submenu
35
+ * is positioned right next to the parent menu.
36
+ *
37
+ * @type {HTMLElement}
38
+ */
39
+ _classPrivateFieldInitSpec(this, _parentContainer, {
40
+ writable: true,
41
+ value: void 0
42
+ });
43
+ /**
44
+ * The instance of the Cursor class.
45
+ *
46
+ * @type {Cursor}
47
+ */
48
+ _classPrivateFieldInitSpec(this, _cursor, {
49
+ writable: true,
50
+ value: void 0
51
+ });
52
+ /**
53
+ * Enabling the option allows changing the position calculation so that the menus (or submenus)
54
+ * are always placed within the visible viewport of the browser.
55
+ *
56
+ * @type {boolean}
57
+ */
58
+ _classPrivateFieldInitSpec(this, _keepInViewport, {
59
+ writable: true,
60
+ value: false
61
+ });
62
+ /**
63
+ * Allows apply the position offset for directions.
64
+ *
65
+ * @type {{above: number, below: number, left: number, right: number}}
66
+ */
67
+ _classPrivateFieldInitSpec(this, _offset, {
68
+ writable: true,
69
+ value: {
70
+ above: 0,
71
+ below: 0,
72
+ left: 0,
73
+ right: 0
74
+ }
75
+ });
76
+ _classPrivateFieldSet(this, _keepInViewport, keepInViewport);
77
+ }
78
+
79
+ /**
80
+ * Sets offset position for specified directions (`above`, `below`, `left` or `right`).
81
+ *
82
+ * @param {'above' | 'below' | 'left' | 'right'} direction A direction name.
83
+ * @param {number} [offset=0] Offset value.
84
+ * @returns {Positioner}
85
+ */
86
+ setOffset(direction) {
87
+ let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
88
+ _classPrivateFieldGet(this, _offset)[direction] = offset;
89
+ return this;
90
+ }
91
+
92
+ /**
93
+ * Sets the menu element to work with. The element can be owned by the main menu or the submenu.
94
+ *
95
+ * @param {HTMLElement} container The menu container element.
96
+ * @returns {Positioner}
97
+ */
98
+ setElement(container) {
99
+ _classPrivateFieldSet(this, _container, container);
100
+ return this;
101
+ }
102
+
103
+ /**
104
+ * Sets the parent menu element to work with.
105
+ *
106
+ * @param {HTMLElement} container The parent menu container element.
107
+ * @returns {Positioner}
108
+ */
109
+ setParentElement(container) {
110
+ _classPrivateFieldSet(this, _parentContainer, container);
111
+ return this;
112
+ }
113
+
114
+ /**
115
+ * Updates the menu position.
116
+ *
117
+ * @param {object|MouseEvent} coords The literal object with `top`, `left`, `width` and `height` props or a
118
+ * mouse event object.
119
+ */
120
+ updatePosition(coords) {
121
+ _classPrivateFieldSet(this, _cursor, new Cursor(coords, _classPrivateFieldGet(this, _container).ownerDocument.defaultView));
122
+ if (_classPrivateFieldGet(this, _keepInViewport)) {
123
+ if (_classPrivateFieldGet(this, _cursor).fitsBelow(_classPrivateFieldGet(this, _container))) {
124
+ this.setPositionBelowCursor();
125
+ } else if (_classPrivateFieldGet(this, _cursor).fitsAbove(_classPrivateFieldGet(this, _container))) {
126
+ this.setPositionAboveCursor();
127
+ } else {
128
+ this.setPositionBelowCursor();
129
+ }
130
+ this.updateHorizontalPosition();
131
+ } else {
132
+ this.setPositionBelowCursor();
133
+ this.setPositionOnRightOfCursor();
134
+ }
135
+ }
136
+
137
+ /**
138
+ * Updates the menu horizontal position.
139
+ */
140
+ updateHorizontalPosition() {
141
+ if (_classPrivateFieldGet(this, _container).dir === 'rtl') {
142
+ if (_classPrivateFieldGet(this, _cursor).fitsOnLeft(_classPrivateFieldGet(this, _container))) {
143
+ this.setPositionOnLeftOfCursor();
144
+ } else {
145
+ this.setPositionOnRightOfCursor();
146
+ }
147
+ } else if (_classPrivateFieldGet(this, _cursor).fitsOnRight(_classPrivateFieldGet(this, _container))) {
148
+ this.setPositionOnRightOfCursor();
149
+ } else {
150
+ this.setPositionOnLeftOfCursor();
151
+ }
152
+ }
153
+
154
+ /**
155
+ * Sets the menu position above the cursor object.
156
+ */
157
+ setPositionAboveCursor() {
158
+ let top = _classPrivateFieldGet(this, _offset).above + _classPrivateFieldGet(this, _cursor).top - _classPrivateFieldGet(this, _container).offsetHeight;
159
+ if (_classPrivateFieldGet(this, _parentContainer)) {
160
+ top = _classPrivateFieldGet(this, _cursor).top + _classPrivateFieldGet(this, _cursor).cellHeight - _classPrivateFieldGet(this, _container).offsetHeight + 3;
161
+ }
162
+ _classPrivateFieldGet(this, _container).style.top = `${top}px`;
163
+ }
164
+
165
+ /**
166
+ * Sets the menu position below the cursor object.
167
+ */
168
+ setPositionBelowCursor() {
169
+ let top = _classPrivateFieldGet(this, _offset).below + _classPrivateFieldGet(this, _cursor).top + 1;
170
+ if (_classPrivateFieldGet(this, _parentContainer)) {
171
+ top = _classPrivateFieldGet(this, _cursor).top - 1;
172
+ }
173
+ _classPrivateFieldGet(this, _container).style.top = `${top}px`;
174
+ }
175
+
176
+ /**
177
+ * Sets the menu position on the right of the cursor object.
178
+ */
179
+ setPositionOnRightOfCursor() {
180
+ let left = _classPrivateFieldGet(this, _cursor).left;
181
+ if (_classPrivateFieldGet(this, _parentContainer)) {
182
+ const {
183
+ right: parentMenuRight
184
+ } = _classPrivateFieldGet(this, _parentContainer).getBoundingClientRect();
185
+
186
+ // move the sub menu by the width of the parent's border (usually by 1-2 pixels)
187
+ left += _classPrivateFieldGet(this, _cursor).cellWidth + parentMenuRight - (_classPrivateFieldGet(this, _cursor).left + _classPrivateFieldGet(this, _cursor).cellWidth);
188
+ } else {
189
+ left += _classPrivateFieldGet(this, _offset).right;
190
+ }
191
+ _classPrivateFieldGet(this, _container).style.left = `${left}px`;
192
+ }
193
+
194
+ /**
195
+ * Sets the menu position on the left of the cursor object.
196
+ */
197
+ setPositionOnLeftOfCursor() {
198
+ let left = _classPrivateFieldGet(this, _offset).left + _classPrivateFieldGet(this, _cursor).left - _classPrivateFieldGet(this, _container).offsetWidth;
199
+ if (_classPrivateFieldGet(this, _parentContainer)) {
200
+ const {
201
+ left: parentMenuLeft
202
+ } = _classPrivateFieldGet(this, _parentContainer).getBoundingClientRect();
203
+
204
+ // move the sub menu by the width of the parent's border (usually by 1-2 pixels)
205
+ left -= _classPrivateFieldGet(this, _cursor).left - parentMenuLeft;
206
+ }
207
+ _classPrivateFieldGet(this, _container).style.left = `${left}px`;
208
+ }
209
+ }