handsontable 0.0.0-next-9059914-20231025 → 0.0.0-next-21d91d0-20231025
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.
- package/3rdparty/walkontable/src/cell/coords.d.ts +6 -1
- package/3rdparty/walkontable/src/cell/coords.js +50 -11
- package/3rdparty/walkontable/src/cell/coords.mjs +50 -11
- package/3rdparty/walkontable/src/cell/range.d.ts +9 -2
- package/3rdparty/walkontable/src/cell/range.js +38 -7
- package/3rdparty/walkontable/src/cell/range.mjs +38 -7
- package/3rdparty/walkontable/src/core/_base.js +9 -3
- package/3rdparty/walkontable/src/core/_base.mjs +9 -3
- package/3rdparty/walkontable/src/core/clone.js +2 -2
- package/3rdparty/walkontable/src/core/clone.mjs +2 -2
- package/3rdparty/walkontable/src/core/core.js +3 -2
- package/3rdparty/walkontable/src/core/core.mjs +3 -2
- package/3rdparty/walkontable/src/event.js +12 -10
- package/3rdparty/walkontable/src/event.mjs +12 -10
- package/3rdparty/walkontable/src/facade/core.js +2 -2
- package/3rdparty/walkontable/src/facade/core.mjs +2 -2
- package/3rdparty/walkontable/src/index.js +10 -2
- package/3rdparty/walkontable/src/index.mjs +2 -2
- package/3rdparty/walkontable/src/overlay/_base.js +13 -2
- package/3rdparty/walkontable/src/overlay/_base.mjs +14 -3
- package/3rdparty/walkontable/src/overlay/inlineStart.js +2 -6
- package/3rdparty/walkontable/src/overlay/inlineStart.mjs +2 -6
- package/3rdparty/walkontable/src/overlay/top.js +2 -6
- package/3rdparty/walkontable/src/overlay/top.mjs +2 -6
- package/3rdparty/walkontable/src/renderer/cells.js +10 -0
- package/3rdparty/walkontable/src/renderer/cells.mjs +11 -1
- package/3rdparty/walkontable/src/renderer/columnHeaders.js +10 -0
- package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +11 -1
- package/3rdparty/walkontable/src/renderer/rowHeaders.js +5 -0
- package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +5 -0
- package/3rdparty/walkontable/src/renderer/rows.js +13 -0
- package/3rdparty/walkontable/src/renderer/rows.mjs +13 -0
- package/3rdparty/walkontable/src/renderer/table.js +9 -0
- package/3rdparty/walkontable/src/renderer/table.mjs +9 -0
- package/3rdparty/walkontable/src/scroll.js +2 -0
- package/3rdparty/walkontable/src/scroll.mjs +2 -0
- package/3rdparty/walkontable/src/{border.js → selection/border/border.js} +7 -12
- package/3rdparty/walkontable/src/{border.mjs → selection/border/border.mjs} +7 -12
- package/3rdparty/walkontable/src/selection/border/constants.js +16 -0
- package/3rdparty/walkontable/src/selection/border/constants.mjs +12 -0
- package/3rdparty/walkontable/src/selection/constants.js +62 -0
- package/3rdparty/walkontable/src/selection/constants.mjs +51 -0
- package/3rdparty/walkontable/src/selection/index.js +26 -0
- package/3rdparty/walkontable/src/selection/index.mjs +5 -0
- package/3rdparty/walkontable/src/selection/manager.js +274 -0
- package/3rdparty/walkontable/src/selection/manager.mjs +269 -0
- package/3rdparty/walkontable/src/selection/scanner.js +270 -0
- package/3rdparty/walkontable/src/selection/scanner.mjs +267 -0
- package/3rdparty/walkontable/src/selection/selection.js +101 -0
- package/3rdparty/walkontable/src/selection/selection.mjs +96 -0
- package/3rdparty/walkontable/src/settings.js +13 -4
- package/3rdparty/walkontable/src/settings.mjs +13 -4
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +9 -0
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +9 -0
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -0
- package/3rdparty/walkontable/src/table.js +19 -78
- package/3rdparty/walkontable/src/table.mjs +20 -79
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/cellTypes/dateType/dateType.d.ts +3 -3
- package/cellTypes/dateType/dateType.js +2 -2
- package/cellTypes/dateType/dateType.mjs +2 -2
- package/cellTypes/handsontableType/handsontableType.d.ts +3 -3
- package/cellTypes/handsontableType/handsontableType.js +2 -2
- package/cellTypes/handsontableType/handsontableType.mjs +2 -2
- package/cellTypes/index.d.ts +3 -0
- package/cellTypes/index.js +4 -0
- package/cellTypes/index.mjs +3 -1
- package/cellTypes/selectType/index.d.ts +1 -0
- package/cellTypes/selectType/index.js +6 -0
- package/cellTypes/selectType/index.mjs +1 -0
- package/cellTypes/selectType/selectType.d.ts +14 -0
- package/cellTypes/selectType/selectType.js +13 -0
- package/cellTypes/selectType/selectType.mjs +8 -0
- package/core/focusCatcher/focusDetector.js +63 -0
- package/core/focusCatcher/focusDetector.mjs +59 -0
- package/core/focusCatcher/index.js +142 -0
- package/core/focusCatcher/index.mjs +138 -0
- package/core/index.js +9 -0
- package/core/index.mjs +1 -0
- package/core.d.ts +9 -4
- package/core.js +285 -327
- package/core.mjs +285 -327
- package/dataMap/metaManager/metaSchema.js +65 -0
- package/dataMap/metaManager/metaSchema.mjs +65 -0
- package/dataMap/metaManager/mods/extendMetaProperties.js +7 -1
- package/dataMap/metaManager/mods/extendMetaProperties.mjs +7 -1
- package/dataMap/replaceData.js +5 -0
- package/dataMap/replaceData.mjs +5 -0
- package/dist/handsontable.css +51 -15
- package/dist/handsontable.full.css +51 -15
- package/dist/handsontable.full.js +13360 -7840
- package/dist/handsontable.full.min.css +7 -7
- package/dist/handsontable.full.min.js +136 -136
- package/dist/handsontable.js +20955 -15435
- package/dist/handsontable.min.css +6 -6
- package/dist/handsontable.min.js +24 -24
- package/dist/languages/all.js +6 -2
- package/dist/languages/all.min.js +1 -1
- package/dist/languages/en-US.js +3 -1
- package/dist/languages/en-US.min.js +1 -1
- package/dist/languages/pl-PL.js +3 -1
- package/dist/languages/pl-PL.min.js +1 -1
- package/editorManager.js +15 -87
- package/editorManager.mjs +16 -87
- package/editors/autocompleteEditor/autocompleteEditor.js +53 -2
- package/editors/autocompleteEditor/autocompleteEditor.mjs +54 -3
- package/editors/dateEditor/dateEditor.js +26 -7
- package/editors/dateEditor/dateEditor.mjs +27 -8
- package/editors/handsontableEditor/handsontableEditor.js +9 -1
- package/editors/handsontableEditor/handsontableEditor.mjs +10 -2
- package/editors/textEditor/textEditor.js +19 -27
- package/editors/textEditor/textEditor.mjs +22 -30
- package/focusManager.d.ts +12 -0
- package/focusManager.js +265 -0
- package/focusManager.mjs +261 -0
- package/helpers/a11y.js +79 -0
- package/helpers/a11y.mjs +38 -0
- package/helpers/dom/element.js +188 -9
- package/helpers/dom/element.mjs +182 -9
- package/helpers/mixed.js +1 -1
- package/helpers/mixed.mjs +1 -1
- package/helpers/number.d.ts +1 -0
- package/helpers/number.js +18 -0
- package/helpers/number.mjs +17 -0
- package/i18n/constants.js +7 -1
- package/i18n/constants.mjs +4 -1
- package/i18n/languages/en-US.js +3 -1
- package/i18n/languages/en-US.mjs +3 -1
- package/i18n/languages/pl-PL.js +3 -1
- package/i18n/languages/pl-PL.mjs +3 -1
- package/languages/all.js +6 -2
- package/languages/en-US.js +3 -1
- package/languages/en-US.mjs +3 -1
- package/languages/index.js +6 -2
- package/languages/pl-PL.js +3 -1
- package/languages/pl-PL.mjs +3 -1
- package/package.json +21 -1
- package/pluginHooks.d.ts +12 -1
- package/pluginHooks.js +152 -1
- package/pluginHooks.mjs +152 -1
- package/plugins/collapsibleColumns/collapsibleColumns.js +74 -4
- package/plugins/collapsibleColumns/collapsibleColumns.mjs +75 -5
- package/plugins/columnSorting/columnSorting.js +43 -0
- package/plugins/columnSorting/columnSorting.mjs +44 -3
- package/plugins/columnSorting/index.js +3 -1
- package/plugins/columnSorting/index.mjs +1 -1
- package/plugins/comments/commentEditor.js +1 -0
- package/plugins/comments/commentEditor.mjs +1 -0
- package/plugins/comments/comments.js +252 -189
- package/plugins/comments/comments.mjs +251 -190
- package/plugins/comments/contextMenuItem/addEditComment.js +41 -0
- package/plugins/comments/contextMenuItem/addEditComment.mjs +35 -0
- package/plugins/comments/contextMenuItem/readOnlyComment.js +49 -0
- package/plugins/comments/contextMenuItem/readOnlyComment.mjs +43 -0
- package/plugins/comments/contextMenuItem/removeComment.js +38 -0
- package/plugins/comments/contextMenuItem/removeComment.mjs +32 -0
- package/plugins/contextMenu/commandExecutor.js +2 -3
- package/plugins/contextMenu/commandExecutor.mjs +2 -3
- package/plugins/contextMenu/contextMenu.d.ts +1 -1
- package/plugins/contextMenu/contextMenu.js +75 -36
- package/plugins/contextMenu/contextMenu.mjs +74 -35
- package/plugins/contextMenu/itemsFactory.js +2 -3
- package/plugins/contextMenu/itemsFactory.mjs +3 -4
- package/plugins/contextMenu/{cursor.mjs → menu/cursor.js} +6 -4
- package/plugins/contextMenu/{cursor.js → menu/cursor.mjs} +4 -10
- package/plugins/contextMenu/menu/defaultShortcutsList.js +88 -0
- package/plugins/contextMenu/menu/defaultShortcutsList.mjs +84 -0
- package/plugins/contextMenu/menu/index.js +9 -0
- package/plugins/contextMenu/menu/index.mjs +1 -0
- package/plugins/contextMenu/{menu.js → menu/menu.js} +145 -421
- package/plugins/contextMenu/{menu.mjs → menu/menu.mjs} +146 -422
- package/plugins/contextMenu/menu/menuItemRenderer.js +58 -0
- package/plugins/contextMenu/menu/menuItemRenderer.mjs +54 -0
- package/plugins/contextMenu/menu/navigator.js +27 -0
- package/plugins/contextMenu/menu/navigator.mjs +23 -0
- package/plugins/contextMenu/menu/positioner.js +213 -0
- package/plugins/contextMenu/menu/positioner.mjs +209 -0
- package/plugins/contextMenu/menu/shortcuts.js +114 -0
- package/plugins/contextMenu/menu/shortcuts.mjs +110 -0
- package/plugins/contextMenu/menu/utils.js +177 -0
- package/plugins/contextMenu/menu/utils.mjs +163 -0
- package/plugins/contextMenu/predefinedItems/alignment.js +7 -0
- package/plugins/contextMenu/predefinedItems/alignment.mjs +7 -0
- package/plugins/contextMenu/predefinedItems/clearColumn.js +5 -3
- package/plugins/contextMenu/predefinedItems/clearColumn.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/columnLeft.js +5 -3
- package/plugins/contextMenu/predefinedItems/columnLeft.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/columnRight.js +5 -3
- package/plugins/contextMenu/predefinedItems/columnRight.mjs +5 -3
- package/plugins/contextMenu/{predefinedItems.js → predefinedItems/index.js} +14 -14
- package/plugins/contextMenu/predefinedItems/index.mjs +68 -0
- package/plugins/contextMenu/predefinedItems/readOnly.js +7 -0
- package/plugins/contextMenu/predefinedItems/readOnly.mjs +7 -0
- package/plugins/contextMenu/predefinedItems/removeColumn.js +7 -5
- package/plugins/contextMenu/predefinedItems/removeColumn.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/removeRow.js +7 -5
- package/plugins/contextMenu/predefinedItems/removeRow.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/rowAbove.js +5 -3
- package/plugins/contextMenu/predefinedItems/rowAbove.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/rowBelow.js +5 -3
- package/plugins/contextMenu/predefinedItems/rowBelow.mjs +5 -3
- package/plugins/contextMenu/utils.js +35 -151
- package/plugins/contextMenu/utils.mjs +35 -144
- package/plugins/copyPaste/contextMenuItem/copy.js +7 -0
- package/plugins/copyPaste/contextMenuItem/copy.mjs +7 -0
- package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +9 -1
- package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +9 -1
- package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +9 -1
- package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +9 -1
- package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +9 -1
- package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +9 -1
- package/plugins/copyPaste/contextMenuItem/cut.js +7 -0
- package/plugins/copyPaste/contextMenuItem/cut.mjs +7 -0
- package/plugins/copyPaste/copyPaste.js +127 -78
- package/plugins/copyPaste/copyPaste.mjs +128 -79
- package/plugins/customBorders/customBorders.js +23 -20
- package/plugins/customBorders/customBorders.mjs +24 -21
- package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
- package/plugins/dropdownMenu/dropdownMenu.js +127 -40
- package/plugins/dropdownMenu/dropdownMenu.mjs +126 -39
- package/plugins/filters/component/_base.js +23 -8
- package/plugins/filters/component/_base.mjs +23 -8
- package/plugins/filters/component/actionBar.js +29 -27
- package/plugins/filters/component/actionBar.mjs +26 -23
- package/plugins/filters/component/condition.js +46 -59
- package/plugins/filters/component/condition.mjs +40 -52
- package/plugins/filters/component/operators.js +21 -22
- package/plugins/filters/component/operators.mjs +18 -18
- package/plugins/filters/component/value.js +35 -26
- package/plugins/filters/component/value.mjs +32 -22
- package/plugins/filters/constants.mjs +1 -1
- package/plugins/filters/filters.js +106 -62
- package/plugins/filters/filters.mjs +99 -55
- package/plugins/filters/menu/focusController.js +123 -0
- package/plugins/filters/menu/focusController.mjs +119 -0
- package/plugins/filters/menu/focusNavigator.js +30 -0
- package/plugins/filters/menu/focusNavigator.mjs +26 -0
- package/plugins/filters/ui/_base.js +35 -13
- package/plugins/filters/ui/_base.mjs +35 -13
- package/plugins/filters/ui/input.js +43 -32
- package/plugins/filters/ui/input.mjs +42 -30
- package/plugins/filters/ui/link.js +44 -12
- package/plugins/filters/ui/link.mjs +44 -11
- package/plugins/filters/ui/multipleSelect.js +234 -129
- package/plugins/filters/ui/multipleSelect.mjs +232 -127
- package/plugins/filters/ui/radioInput.js +42 -18
- package/plugins/filters/ui/radioInput.mjs +42 -17
- package/plugins/filters/ui/select.js +144 -75
- package/plugins/filters/ui/select.mjs +142 -72
- package/plugins/hiddenColumns/hiddenColumns.mjs +1 -1
- package/plugins/hiddenRows/hiddenRows.mjs +1 -1
- package/plugins/manualColumnMove/manualColumnMove.js +3 -1
- package/plugins/manualColumnMove/manualColumnMove.mjs +3 -1
- package/plugins/mergeCells/mergeCells.js +5 -16
- package/plugins/mergeCells/mergeCells.mjs +5 -16
- package/plugins/multiColumnSorting/multiColumnSorting.js +37 -2
- package/plugins/multiColumnSorting/multiColumnSorting.mjs +37 -2
- package/plugins/nestedHeaders/nestedHeaders.js +240 -10
- package/plugins/nestedHeaders/nestedHeaders.mjs +241 -11
- package/plugins/nestedHeaders/stateManager/index.js +102 -3
- package/plugins/nestedHeaders/stateManager/index.mjs +102 -3
- package/plugins/nestedRows/nestedRows.js +41 -0
- package/plugins/nestedRows/nestedRows.mjs +41 -0
- package/plugins/nestedRows/ui/headers.js +11 -0
- package/plugins/nestedRows/ui/headers.mjs +12 -1
- package/renderers/autocompleteRenderer/autocompleteRenderer.js +8 -0
- package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +8 -0
- package/renderers/baseRenderer/baseRenderer.js +17 -0
- package/renderers/baseRenderer/baseRenderer.mjs +18 -1
- package/renderers/checkboxRenderer/checkboxRenderer.js +9 -4
- package/renderers/checkboxRenderer/checkboxRenderer.mjs +9 -4
- package/renderers/dateRenderer/dateRenderer.d.ts +5 -0
- package/renderers/dateRenderer/dateRenderer.js +29 -0
- package/renderers/dateRenderer/dateRenderer.mjs +24 -0
- package/renderers/dateRenderer/index.d.ts +1 -0
- package/renderers/dateRenderer/index.js +6 -0
- package/renderers/dateRenderer/index.mjs +1 -0
- package/renderers/handsontableRenderer/handsontableRenderer.d.ts +5 -0
- package/renderers/handsontableRenderer/handsontableRenderer.js +29 -0
- package/renderers/handsontableRenderer/handsontableRenderer.mjs +24 -0
- package/renderers/handsontableRenderer/index.d.ts +1 -0
- package/renderers/handsontableRenderer/index.js +6 -0
- package/renderers/handsontableRenderer/index.mjs +1 -0
- package/renderers/index.d.ts +9 -0
- package/renderers/selectRenderer/index.d.ts +1 -0
- package/renderers/selectRenderer/index.js +6 -0
- package/renderers/selectRenderer/index.mjs +1 -0
- package/renderers/selectRenderer/selectRenderer.d.ts +5 -0
- package/renderers/selectRenderer/selectRenderer.js +27 -0
- package/renderers/selectRenderer/selectRenderer.mjs +22 -0
- package/selection/highlight/highlight.js +256 -71
- package/selection/highlight/highlight.mjs +250 -71
- package/selection/highlight/types/activeHeader.js +10 -8
- package/selection/highlight/types/activeHeader.mjs +10 -8
- package/selection/highlight/types/area.js +6 -18
- package/selection/highlight/types/area.mjs +6 -18
- package/selection/highlight/types/areaLayered.js +31 -0
- package/selection/highlight/types/areaLayered.mjs +26 -0
- package/selection/highlight/types/column.js +27 -0
- package/selection/highlight/types/column.mjs +22 -0
- package/selection/highlight/types/customSelection.js +7 -9
- package/selection/highlight/types/customSelection.mjs +7 -9
- package/selection/highlight/types/fill.js +5 -7
- package/selection/highlight/types/fill.mjs +5 -7
- package/selection/highlight/types/{cell.js → focus.js} +5 -7
- package/selection/highlight/types/{cell.mjs → focus.mjs} +5 -7
- package/selection/highlight/types/header.js +9 -18
- package/selection/highlight/types/header.mjs +9 -18
- package/selection/highlight/types/row.js +27 -0
- package/selection/highlight/types/row.mjs +22 -0
- package/selection/highlight/visualSelection.js +31 -27
- package/selection/highlight/visualSelection.mjs +31 -27
- package/selection/index.js +4 -7
- package/selection/index.mjs +2 -3
- package/selection/mouseEventHandler.js +7 -1
- package/selection/mouseEventHandler.mjs +7 -1
- package/selection/range.js +8 -8
- package/selection/range.mjs +8 -8
- package/selection/selection.js +321 -152
- package/selection/selection.mjs +318 -151
- package/selection/transformation.js +232 -90
- package/selection/transformation.mjs +232 -90
- package/selection/utils.js +15 -21
- package/selection/utils.mjs +16 -21
- package/settings.d.ts +4 -0
- package/shortcutContexts/commands/editor/closeAndSave.js +12 -0
- package/shortcutContexts/commands/editor/closeAndSave.mjs +8 -0
- package/shortcutContexts/commands/editor/closeWithoutSaving.js +12 -0
- package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
- package/shortcutContexts/commands/editor/fastOpen.js +16 -0
- package/shortcutContexts/commands/editor/fastOpen.mjs +12 -0
- package/shortcutContexts/commands/editor/index.js +16 -0
- package/shortcutContexts/commands/editor/index.mjs +12 -0
- package/shortcutContexts/commands/editor/open.js +27 -0
- package/shortcutContexts/commands/editor/open.mjs +23 -0
- package/shortcutContexts/commands/emptySelectedCells.js +11 -0
- package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
- package/shortcutContexts/commands/extendCellsSelection/down.js +15 -0
- package/shortcutContexts/commands/extendCellsSelection/down.mjs +11 -0
- package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +25 -0
- package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +21 -0
- package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
- package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
- package/shortcutContexts/commands/extendCellsSelection/left.js +15 -0
- package/shortcutContexts/commands/extendCellsSelection/left.mjs +11 -0
- package/shortcutContexts/commands/extendCellsSelection/right.js +15 -0
- package/shortcutContexts/commands/extendCellsSelection/right.mjs +11 -0
- package/shortcutContexts/commands/extendCellsSelection/toColumns.js +19 -0
- package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +15 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +29 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +25 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +19 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +15 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +19 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +15 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +29 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +25 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +29 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +25 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +29 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +25 -0
- package/shortcutContexts/commands/extendCellsSelection/toRows.js +19 -0
- package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +15 -0
- package/shortcutContexts/commands/extendCellsSelection/up.js +15 -0
- package/shortcutContexts/commands/extendCellsSelection/up.mjs +11 -0
- package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +25 -0
- package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +21 -0
- package/shortcutContexts/commands/index.js +35 -0
- package/shortcutContexts/commands/index.mjs +31 -0
- package/shortcutContexts/commands/moveCellSelection/down.js +13 -0
- package/shortcutContexts/commands/moveCellSelection/down.mjs +9 -0
- package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +33 -0
- package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +29 -0
- package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
- package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
- package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +12 -0
- package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
- package/shortcutContexts/commands/moveCellSelection/inlineStart.js +12 -0
- package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
- package/shortcutContexts/commands/moveCellSelection/left.js +10 -0
- package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
- package/shortcutContexts/commands/moveCellSelection/right.js +10 -0
- package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +17 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +13 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +18 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +14 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +14 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +10 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +17 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +13 -0
- package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +19 -0
- package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +15 -0
- package/shortcutContexts/commands/moveCellSelection/toMostRight.js +21 -0
- package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +17 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTop.js +17 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +13 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +19 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +15 -0
- package/shortcutContexts/commands/moveCellSelection/up.js +13 -0
- package/shortcutContexts/commands/moveCellSelection/up.mjs +9 -0
- package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +33 -0
- package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +29 -0
- package/shortcutContexts/commands/populateSelectedCellsData.js +29 -0
- package/shortcutContexts/commands/populateSelectedCellsData.mjs +25 -0
- package/shortcutContexts/commands/scrollToFocusedCell.js +35 -0
- package/shortcutContexts/commands/scrollToFocusedCell.mjs +31 -0
- package/shortcutContexts/commands/selectAll.js +12 -0
- package/shortcutContexts/commands/selectAll.mjs +8 -0
- package/shortcutContexts/constants.js +13 -0
- package/shortcutContexts/constants.mjs +8 -0
- package/shortcutContexts/editor.js +25 -0
- package/shortcutContexts/editor.mjs +21 -0
- package/shortcutContexts/grid.js +163 -0
- package/shortcutContexts/grid.mjs +159 -0
- package/shortcutContexts/index.js +24 -0
- package/shortcutContexts/index.mjs +11 -0
- package/shortcuts/context.js +23 -4
- package/shortcuts/context.mjs +23 -5
- package/shortcuts/manager.js +25 -7
- package/shortcuts/manager.mjs +26 -7
- package/shortcuts/recorder.js +3 -3
- package/shortcuts/recorder.mjs +3 -3
- package/shortcuts/utils.js +19 -5
- package/shortcuts/utils.mjs +18 -4
- package/tableView.js +111 -13
- package/tableView.mjs +112 -14
- package/utils/paginator.js +151 -0
- package/utils/paginator.mjs +147 -0
- package/3rdparty/walkontable/src/selection.js +0 -295
- package/3rdparty/walkontable/src/selection.mjs +0 -290
- package/plugins/contextMenu/predefinedItems.mjs +0 -68
- package/plugins/copyPaste/focusableElement.js +0 -186
- package/plugins/copyPaste/focusableElement.mjs +0 -180
- package/selection/highlight/constants.js +0 -15
- package/selection/highlight/constants.mjs +0 -6
- package/selection/highlight/types/index.js +0 -35
- package/selection/highlight/types/index.mjs +0 -31
@@ -1,24 +1,33 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
|
+
require("core-js/modules/es.error.cause.js");
|
3
4
|
exports.__esModule = true;
|
4
5
|
require("core-js/modules/es.array.push.js");
|
5
|
-
var
|
6
|
-
var
|
6
|
+
var _positioner = require("./positioner");
|
7
|
+
var _navigator2 = require("./navigator");
|
8
|
+
var _shortcuts = require("./shortcuts");
|
9
|
+
var _predefinedItems = require("./../predefinedItems");
|
7
10
|
var _utils = require("./utils");
|
8
|
-
var
|
9
|
-
var
|
10
|
-
var
|
11
|
-
var
|
12
|
-
var
|
13
|
-
var
|
14
|
-
var
|
15
|
-
var
|
16
|
-
var
|
17
|
-
var
|
11
|
+
var _eventManager = _interopRequireDefault(require("../../../eventManager"));
|
12
|
+
var _array = require("../../../helpers/array");
|
13
|
+
var _browser = require("../../../helpers/browser");
|
14
|
+
var _element = require("../../../helpers/dom/element");
|
15
|
+
var _event = require("../../../helpers/dom/event");
|
16
|
+
var _function = require("../../../helpers/function");
|
17
|
+
var _mixed = require("../../../helpers/mixed");
|
18
|
+
var _object = require("../../../helpers/object");
|
19
|
+
var _localHooks = _interopRequireDefault(require("../../../mixins/localHooks"));
|
20
|
+
var _menuItemRenderer = require("./menuItemRenderer");
|
21
|
+
var _a11y = require("../../../helpers/a11y");
|
18
22
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
23
|
+
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
24
|
+
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
25
|
+
function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
|
26
|
+
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; } }
|
27
|
+
function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
|
28
|
+
function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
|
29
|
+
function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
|
19
30
|
const MIN_WIDTH = 215;
|
20
|
-
const SHORTCUTS_CONTEXT = 'menu';
|
21
|
-
const SHORTCUTS_GROUP = SHORTCUTS_CONTEXT;
|
22
31
|
|
23
32
|
/**
|
24
33
|
* @typedef MenuOptions
|
@@ -35,12 +44,33 @@ const SHORTCUTS_GROUP = SHORTCUTS_CONTEXT;
|
|
35
44
|
* @private
|
36
45
|
* @class Menu
|
37
46
|
*/
|
47
|
+
var _navigator = /*#__PURE__*/new WeakMap();
|
48
|
+
var _shortcutsCtrl = /*#__PURE__*/new WeakMap();
|
38
49
|
class Menu {
|
39
50
|
/**
|
40
51
|
* @param {Core} hotInstance Handsontable instance.
|
41
52
|
* @param {MenuOptions} [options] Menu options.
|
42
53
|
*/
|
43
54
|
constructor(hotInstance, options) {
|
55
|
+
var _this = this;
|
56
|
+
/**
|
57
|
+
* The controller module that allows modifying the menu item selection positions.
|
58
|
+
*
|
59
|
+
* @type {Paginator}
|
60
|
+
*/
|
61
|
+
_classPrivateFieldInitSpec(this, _navigator, {
|
62
|
+
writable: true,
|
63
|
+
value: void 0
|
64
|
+
});
|
65
|
+
/**
|
66
|
+
* The controller module that allows extending the keyboard shortcuts for the menu.
|
67
|
+
*
|
68
|
+
* @type {KeyboardShortcutsMenuController}
|
69
|
+
*/
|
70
|
+
_classPrivateFieldInitSpec(this, _shortcutsCtrl, {
|
71
|
+
writable: true,
|
72
|
+
value: void 0
|
73
|
+
});
|
44
74
|
this.hot = hotInstance;
|
45
75
|
this.options = options || {
|
46
76
|
parent: null,
|
@@ -53,20 +83,21 @@ class Menu {
|
|
53
83
|
};
|
54
84
|
this.eventManager = new _eventManager.default(this);
|
55
85
|
this.container = this.createContainer(this.options.name);
|
86
|
+
this.positioner = new _positioner.Positioner(this.options.keepInViewport);
|
56
87
|
this.hotMenu = null;
|
57
88
|
this.hotSubMenus = {};
|
58
89
|
this.parentMenu = this.options.parent || null;
|
59
90
|
this.menuItems = null;
|
60
91
|
this.origOutsideClickDeselects = null;
|
61
|
-
this.keyEvent = false;
|
62
|
-
this.offset = {
|
63
|
-
above: 0,
|
64
|
-
below: 0,
|
65
|
-
left: 0,
|
66
|
-
right: 0
|
67
|
-
};
|
68
|
-
this._afterScrollCallback = null;
|
69
92
|
this.registerEvents();
|
93
|
+
if (this.isSubMenu()) {
|
94
|
+
this.addLocalHook('afterSelectionChange', function () {
|
95
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
96
|
+
args[_key] = arguments[_key];
|
97
|
+
}
|
98
|
+
return _this.parentMenu.runLocalHooks('afterSelectionChange', ...args);
|
99
|
+
});
|
100
|
+
}
|
70
101
|
}
|
71
102
|
|
72
103
|
/**
|
@@ -92,6 +123,24 @@ class Menu {
|
|
92
123
|
this.menuItems = menuItems;
|
93
124
|
}
|
94
125
|
|
126
|
+
/**
|
127
|
+
* Gets the controller object that allows modifying the the menu item selection.
|
128
|
+
*
|
129
|
+
* @returns {Paginator | undefined}
|
130
|
+
*/
|
131
|
+
getNavigator() {
|
132
|
+
return _classPrivateFieldGet(this, _navigator);
|
133
|
+
}
|
134
|
+
|
135
|
+
/**
|
136
|
+
* Gets the controller object that allows extending the keyboard shortcuts of the menu.
|
137
|
+
*
|
138
|
+
* @returns {KeyboardShortcutsMenuController | undefined}
|
139
|
+
*/
|
140
|
+
getKeyboardShortcutsCtrl() {
|
141
|
+
return _classPrivateFieldGet(this, _shortcutsCtrl);
|
142
|
+
}
|
143
|
+
|
95
144
|
/**
|
96
145
|
* Returns currently selected menu item. Returns `null` if no item was selected.
|
97
146
|
*
|
@@ -110,17 +159,6 @@ class Menu {
|
|
110
159
|
return Array.isArray(this.hotMenu.getSelectedLast());
|
111
160
|
}
|
112
161
|
|
113
|
-
/**
|
114
|
-
* Set offset menu position for specified area (`above`, `below`, `left` or `right`).
|
115
|
-
*
|
116
|
-
* @param {string} area Specified area name (`above`, `below`, `left` or `right`).
|
117
|
-
* @param {number} offset Offset value.
|
118
|
-
*/
|
119
|
-
setOffset(area) {
|
120
|
-
let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
121
|
-
this.offset[area] = offset;
|
122
|
-
}
|
123
|
-
|
124
162
|
/**
|
125
163
|
* Check if menu is using as sub-menu.
|
126
164
|
*
|
@@ -137,7 +175,6 @@ class Menu {
|
|
137
175
|
* @fires Hooks#afterContextMenuShow
|
138
176
|
*/
|
139
177
|
open() {
|
140
|
-
var _this = this;
|
141
178
|
this.runLocalHooks('beforeOpen');
|
142
179
|
this.container.removeAttribute('style');
|
143
180
|
this.container.style.display = 'block';
|
@@ -172,16 +209,21 @@ class Menu {
|
|
172
209
|
readOnly: true,
|
173
210
|
editor: false,
|
174
211
|
copyPaste: false,
|
212
|
+
hiddenRows: true,
|
175
213
|
maxCols: 1,
|
176
214
|
columns: [{
|
177
215
|
data: 'name',
|
178
|
-
renderer: (
|
216
|
+
renderer: (0, _menuItemRenderer.createMenuItemRenderer)(this.hot)
|
179
217
|
}],
|
180
218
|
renderAllRows: true,
|
181
219
|
fragmentSelection: false,
|
182
220
|
outsideClickDeselects: false,
|
183
221
|
disableVisualSelection: 'area',
|
184
222
|
layoutDirection: this.hot.isRtl() ? 'rtl' : 'ltr',
|
223
|
+
ariaTags: false,
|
224
|
+
beforeOnCellMouseOver: (event, coords) => {
|
225
|
+
_classPrivateFieldGet(this, _navigator).setCurrentPage(coords.row);
|
226
|
+
},
|
185
227
|
afterOnCellMouseOver: (event, coords) => {
|
186
228
|
if (this.isAllSubMenusClosed()) {
|
187
229
|
delayedOpenSubMenu(coords.row);
|
@@ -199,6 +241,13 @@ class Menu {
|
|
199
241
|
this.close(true);
|
200
242
|
}
|
201
243
|
},
|
244
|
+
afterSelection: (row, column, row2, column2, preventScrolling) => {
|
245
|
+
// do not scroll the viewport when mouse clicks on partially visible menu item
|
246
|
+
if (this.hotMenu.view.isMouseDown()) {
|
247
|
+
preventScrolling.value = true;
|
248
|
+
}
|
249
|
+
this.runLocalHooks('afterSelectionChange', this.getSelectedItem());
|
250
|
+
},
|
202
251
|
beforeOnCellMouseUp: event => {
|
203
252
|
if (this.hasSelectedItem()) {
|
204
253
|
shouldAutoCloseMenu = !this.isCommandPassive(this.getSelectedItem());
|
@@ -216,7 +265,7 @@ class Menu {
|
|
216
265
|
// event hides the tapped element, the click event grabs the element below. As a result, the filter
|
217
266
|
// by condition menu is closed and immediately open on tapping the "None" item.
|
218
267
|
if ((0, _browser.isMobileBrowser)() || (0, _browser.isIpadOS)()) {
|
219
|
-
|
268
|
+
this.hot._registerTimeout(() => this.close(true), 325);
|
220
269
|
} else {
|
221
270
|
this.close(true);
|
222
271
|
}
|
@@ -232,120 +281,17 @@ class Menu {
|
|
232
281
|
};
|
233
282
|
this.origOutsideClickDeselects = this.hot.getSettings().outsideClickDeselects;
|
234
283
|
this.hot.getSettings().outsideClickDeselects = false;
|
235
|
-
this.hotMenu = new
|
284
|
+
this.hotMenu = new this.hot.constructor(this.container, settings);
|
236
285
|
this.hotMenu.addHook('afterInit', () => this.onAfterInit());
|
237
|
-
this.hotMenu.addHook('afterSelection', function () {
|
238
|
-
return _this.onAfterSelection(...arguments);
|
239
|
-
});
|
240
286
|
this.hotMenu.init();
|
241
|
-
this.hotMenu
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
runOnlyIf: event => (0, _element.isInput)(event.target) === false || this.container.contains(event.target) === false
|
250
|
-
};
|
251
|
-
|
252
|
-
// Default shortcuts for Handsontable should not be handled. Changing context will help with that.
|
253
|
-
shortcutManager.setActiveContextName('menu');
|
254
|
-
menuContext.addShortcuts([{
|
255
|
-
keys: [['Escape']],
|
256
|
-
callback: () => {
|
257
|
-
this.keyEvent = true;
|
258
|
-
this.close();
|
259
|
-
this.keyEvent = false;
|
260
|
-
}
|
261
|
-
}, {
|
262
|
-
keys: [['ArrowDown']],
|
263
|
-
callback: () => {
|
264
|
-
const selection = this.hotMenu.getSelectedLast();
|
265
|
-
this.keyEvent = true;
|
266
|
-
if (selection) {
|
267
|
-
this.selectNextCell(selection[0], selection[1]);
|
268
|
-
} else {
|
269
|
-
this.selectFirstCell();
|
270
|
-
}
|
271
|
-
this.keyEvent = false;
|
272
|
-
}
|
273
|
-
}, {
|
274
|
-
keys: [['ArrowUp']],
|
275
|
-
callback: () => {
|
276
|
-
const selection = this.hotMenu.getSelectedLast();
|
277
|
-
this.keyEvent = true;
|
278
|
-
if (selection) {
|
279
|
-
this.selectPrevCell(selection[0], selection[1]);
|
280
|
-
} else {
|
281
|
-
this.selectLastCell();
|
282
|
-
}
|
283
|
-
this.keyEvent = false;
|
284
|
-
}
|
285
|
-
}, {
|
286
|
-
keys: [['ArrowRight']],
|
287
|
-
callback: () => {
|
288
|
-
const selection = this.hotMenu.getSelectedLast();
|
289
|
-
this.keyEvent = true;
|
290
|
-
if (selection) {
|
291
|
-
const menu = this.openSubMenu(selection[0]);
|
292
|
-
if (menu) {
|
293
|
-
menu.selectFirstCell();
|
294
|
-
}
|
295
|
-
}
|
296
|
-
this.keyEvent = false;
|
297
|
-
}
|
298
|
-
}, {
|
299
|
-
keys: [['ArrowLeft']],
|
300
|
-
callback: () => {
|
301
|
-
const selection = this.hotMenu.getSelectedLast();
|
302
|
-
this.keyEvent = true;
|
303
|
-
if (selection && this.isSubMenu()) {
|
304
|
-
this.close();
|
305
|
-
if (this.parentMenu) {
|
306
|
-
this.parentMenu.hotMenu.listen();
|
307
|
-
}
|
308
|
-
}
|
309
|
-
this.keyEvent = false;
|
310
|
-
}
|
311
|
-
}, {
|
312
|
-
keys: [['Enter']],
|
313
|
-
callback: event => {
|
314
|
-
const selection = this.hotMenu.getSelectedLast();
|
315
|
-
this.keyEvent = true;
|
316
|
-
if (!this.hotMenu.getSourceDataAtRow(selection[0]).submenu) {
|
317
|
-
this.executeCommand(event);
|
318
|
-
this.close(true);
|
319
|
-
}
|
320
|
-
this.keyEvent = false;
|
321
|
-
}
|
322
|
-
}, {
|
323
|
-
keys: [['PageUp']],
|
324
|
-
callback: () => {
|
325
|
-
const selection = this.hotMenu.getSelectedLast();
|
326
|
-
this.keyEvent = true;
|
327
|
-
if (selection) {
|
328
|
-
this.hotMenu.selection.transformStart(-this.hotMenu.countVisibleRows(), 0);
|
329
|
-
} else {
|
330
|
-
this.selectFirstCell();
|
331
|
-
}
|
332
|
-
this.keyEvent = false;
|
333
|
-
}
|
334
|
-
}, {
|
335
|
-
keys: [['PageDown']],
|
336
|
-
callback: () => {
|
337
|
-
const selection = this.hotMenu.getSelectedLast();
|
338
|
-
this.keyEvent = true;
|
339
|
-
if (selection) {
|
340
|
-
this.hotMenu.selection.transformStart(this.hotMenu.countVisibleRows(), 0);
|
341
|
-
} else {
|
342
|
-
this.selectLastCell();
|
343
|
-
}
|
344
|
-
this.keyEvent = false;
|
345
|
-
}
|
346
|
-
}], menuContextConfig);
|
347
|
-
this.blockMainTableCallbacks();
|
348
|
-
this.runLocalHooks('afterOpen');
|
287
|
+
_classPrivateFieldSet(this, _navigator, (0, _navigator2.createMenuNavigator)(this.hotMenu));
|
288
|
+
_classPrivateFieldSet(this, _shortcutsCtrl, (0, _shortcuts.createKeyboardShortcutsCtrl)(this));
|
289
|
+
_classPrivateFieldGet(this, _shortcutsCtrl).listen();
|
290
|
+
this.focus();
|
291
|
+
if (this.isSubMenu()) {
|
292
|
+
this.addLocalHook('afterOpen', () => this.parentMenu.runLocalHooks('afterSubmenuOpen', this));
|
293
|
+
}
|
294
|
+
this.runLocalHooks('afterOpen', this);
|
349
295
|
}
|
350
296
|
|
351
297
|
/**
|
@@ -358,17 +304,24 @@ class Menu {
|
|
358
304
|
if (!this.isOpened()) {
|
359
305
|
return;
|
360
306
|
}
|
361
|
-
if (closeParent && this.
|
307
|
+
if (closeParent && this.isSubMenu()) {
|
362
308
|
this.parentMenu.close();
|
363
309
|
} else {
|
310
|
+
_classPrivateFieldGet(this, _navigator).clear();
|
364
311
|
this.closeAllSubMenus();
|
365
312
|
this.container.style.display = 'none';
|
366
|
-
this.releaseMainTableCallbacks();
|
367
313
|
this.hotMenu.destroy();
|
368
314
|
this.hotMenu = null;
|
369
315
|
this.hot.getSettings().outsideClickDeselects = this.origOutsideClickDeselects;
|
370
316
|
this.runLocalHooks('afterClose');
|
371
|
-
if (this.
|
317
|
+
if (this.isSubMenu()) {
|
318
|
+
if (this.hot.getSettings().ariaTags) {
|
319
|
+
const selection = this.parentMenu.hotMenu.getSelectedLast();
|
320
|
+
if (selection) {
|
321
|
+
const cell = this.parentMenu.hotMenu.getCell(selection[0], 0);
|
322
|
+
(0, _element.setAttribute)(cell, [(0, _a11y.A11Y_EXPANDED)(false)]);
|
323
|
+
}
|
324
|
+
}
|
372
325
|
this.parentMenu.hotMenu.listen();
|
373
326
|
}
|
374
327
|
}
|
@@ -401,6 +354,11 @@ class Menu {
|
|
401
354
|
subMenu.open();
|
402
355
|
subMenu.setPosition(cell.getBoundingClientRect());
|
403
356
|
this.hotSubMenus[dataItem.key] = subMenu;
|
357
|
+
|
358
|
+
// Update the accessibility tags on the cell being the base for the submenu.
|
359
|
+
if (this.hot.getSettings().ariaTags) {
|
360
|
+
(0, _element.setAttribute)(cell, [(0, _a11y.A11Y_EXPANDED)(true)]);
|
361
|
+
}
|
404
362
|
return subMenu;
|
405
363
|
}
|
406
364
|
|
@@ -415,6 +373,12 @@ class Menu {
|
|
415
373
|
if (menus) {
|
416
374
|
menus.destroy();
|
417
375
|
delete this.hotSubMenus[dataItem.key];
|
376
|
+
const cell = this.hotMenu.getCell(row, 0);
|
377
|
+
|
378
|
+
// Update the accessibility tags on the cell being the base for the submenu.
|
379
|
+
if (this.hot.getSettings().ariaTags) {
|
380
|
+
(0, _element.setAttribute)(cell, [(0, _a11y.A11Y_EXPANDED)(false)]);
|
381
|
+
}
|
418
382
|
}
|
419
383
|
}
|
420
384
|
|
@@ -434,6 +398,19 @@ class Menu {
|
|
434
398
|
return Object.keys(this.hotSubMenus).length === 0;
|
435
399
|
}
|
436
400
|
|
401
|
+
/**
|
402
|
+
* Focus the menu so all keyboard shortcuts become active.
|
403
|
+
*/
|
404
|
+
focus() {
|
405
|
+
if (this.isOpened()) {
|
406
|
+
this.hotMenu.rootElement.focus({
|
407
|
+
preventScroll: true
|
408
|
+
});
|
409
|
+
this.getKeyboardShortcutsCtrl().listen();
|
410
|
+
this.hotMenu.listen();
|
411
|
+
}
|
412
|
+
}
|
413
|
+
|
437
414
|
/**
|
438
415
|
* Destroy instance.
|
439
416
|
*/
|
@@ -493,252 +470,30 @@ class Menu {
|
|
493
470
|
* @returns {boolean}
|
494
471
|
*/
|
495
472
|
isCommandPassive(commandDescriptor) {
|
496
|
-
|
497
|
-
isCommand,
|
498
|
-
name: commandName,
|
499
|
-
disabled,
|
500
|
-
submenu
|
501
|
-
} = commandDescriptor;
|
502
|
-
const isItemDisabled = disabled === true || typeof disabled === 'function' && disabled.call(this.hot) === true;
|
503
|
-
return isCommand === false || commandName === _predefinedItems.SEPARATOR || isItemDisabled === true || submenu;
|
473
|
+
return commandDescriptor.isCommand === false || (0, _utils.isItemSeparator)(commandDescriptor) || (0, _utils.isItemDisabled)(commandDescriptor, this.hot) || (0, _utils.isItemSubMenu)(commandDescriptor);
|
504
474
|
}
|
505
475
|
|
506
476
|
/**
|
507
|
-
* Set menu position
|
508
|
-
*
|
509
|
-
* @param {Event|object} coords Event or literal Object with coordinates.
|
510
|
-
*/
|
511
|
-
setPosition(coords) {
|
512
|
-
const cursor = new _cursor.default(coords, this.container.ownerDocument.defaultView);
|
513
|
-
if (this.options.keepInViewport) {
|
514
|
-
if (cursor.fitsBelow(this.container)) {
|
515
|
-
this.setPositionBelowCursor(cursor);
|
516
|
-
} else if (cursor.fitsAbove(this.container)) {
|
517
|
-
this.setPositionAboveCursor(cursor);
|
518
|
-
} else {
|
519
|
-
this.setPositionBelowCursor(cursor);
|
520
|
-
}
|
521
|
-
if (this.hot.isLtr()) {
|
522
|
-
this.setHorizontalPositionForLtr(cursor);
|
523
|
-
} else {
|
524
|
-
this.setHorizontalPositionForRtl(cursor);
|
525
|
-
}
|
526
|
-
} else {
|
527
|
-
this.setPositionBelowCursor(cursor);
|
528
|
-
this.setPositionOnRightOfCursor(cursor);
|
529
|
-
}
|
530
|
-
}
|
531
|
-
|
532
|
-
/**
|
533
|
-
* Set menu horizontal position for RTL mode.
|
534
|
-
*
|
535
|
-
* @param {Cursor} cursor `Cursor` object.
|
536
|
-
*/
|
537
|
-
setHorizontalPositionForRtl(cursor) {
|
538
|
-
if (cursor.fitsOnLeft(this.container)) {
|
539
|
-
this.setPositionOnLeftOfCursor(cursor);
|
540
|
-
} else {
|
541
|
-
this.setPositionOnRightOfCursor(cursor);
|
542
|
-
}
|
543
|
-
}
|
544
|
-
|
545
|
-
/**
|
546
|
-
* Set menu horizontal position for LTR mode.
|
547
|
-
*
|
548
|
-
* @param {Cursor} cursor `Cursor` object.
|
549
|
-
*/
|
550
|
-
setHorizontalPositionForLtr(cursor) {
|
551
|
-
if (cursor.fitsOnRight(this.container)) {
|
552
|
-
this.setPositionOnRightOfCursor(cursor);
|
553
|
-
} else {
|
554
|
-
this.setPositionOnLeftOfCursor(cursor);
|
555
|
-
}
|
556
|
-
}
|
557
|
-
|
558
|
-
/**
|
559
|
-
* Set menu position above cursor object.
|
560
|
-
*
|
561
|
-
* @param {Cursor} cursor `Cursor` object.
|
562
|
-
*/
|
563
|
-
setPositionAboveCursor(cursor) {
|
564
|
-
let top = this.offset.above + cursor.top - this.container.offsetHeight;
|
565
|
-
if (this.isSubMenu()) {
|
566
|
-
top = cursor.top + cursor.cellHeight - this.container.offsetHeight + 3;
|
567
|
-
}
|
568
|
-
this.container.style.top = `${top}px`;
|
569
|
-
}
|
570
|
-
|
571
|
-
/**
|
572
|
-
* Set menu position below cursor object.
|
573
|
-
*
|
574
|
-
* @param {Cursor} cursor `Cursor` object.
|
575
|
-
*/
|
576
|
-
setPositionBelowCursor(cursor) {
|
577
|
-
let top = this.offset.below + cursor.top + 1;
|
578
|
-
if (this.isSubMenu()) {
|
579
|
-
top = cursor.top - 1;
|
580
|
-
}
|
581
|
-
this.container.style.top = `${top}px`;
|
582
|
-
}
|
583
|
-
|
584
|
-
/**
|
585
|
-
* Set menu position on the right of cursor object.
|
477
|
+
* Set offset menu position for specified area (`above`, `below`, `left` or `right`).
|
586
478
|
*
|
587
|
-
* @param {
|
479
|
+
* @param {string} area Specified area name (`above`, `below`, `left` or `right`).
|
480
|
+
* @param {number} offset Offset value.
|
588
481
|
*/
|
589
|
-
|
590
|
-
let
|
591
|
-
|
592
|
-
const {
|
593
|
-
right: parentMenuRight
|
594
|
-
} = this.parentMenu.container.getBoundingClientRect();
|
595
|
-
|
596
|
-
// move the sub menu by the width of the parent's border (usually by 1-2 pixels)
|
597
|
-
left += cursor.cellWidth + parentMenuRight - (cursor.left + cursor.cellWidth);
|
598
|
-
} else {
|
599
|
-
left += this.offset.right;
|
600
|
-
}
|
601
|
-
this.container.style.left = `${left}px`;
|
482
|
+
setOffset(area) {
|
483
|
+
let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
484
|
+
this.positioner.setOffset(area, offset);
|
602
485
|
}
|
603
486
|
|
604
487
|
/**
|
605
|
-
* Set menu position on
|
488
|
+
* Set menu position based on dom event or based on literal object.
|
606
489
|
*
|
607
|
-
* @param {
|
490
|
+
* @param {Event|object} coords Event or literal Object with coordinates.
|
608
491
|
*/
|
609
|
-
|
610
|
-
let left = this.offset.left + cursor.left - this.container.offsetWidth;
|
492
|
+
setPosition(coords) {
|
611
493
|
if (this.isSubMenu()) {
|
612
|
-
|
613
|
-
left: parentMenuLeft
|
614
|
-
} = this.parentMenu.container.getBoundingClientRect();
|
615
|
-
|
616
|
-
// move the sub menu by the width of the parent's border (usually by 1-2 pixels)
|
617
|
-
left -= cursor.left - parentMenuLeft;
|
618
|
-
}
|
619
|
-
this.container.style.left = `${left}px`;
|
620
|
-
}
|
621
|
-
|
622
|
-
/**
|
623
|
-
* Select first cell in opened menu.
|
624
|
-
*/
|
625
|
-
selectFirstCell() {
|
626
|
-
const cell = this.hotMenu.getCell(0, 0);
|
627
|
-
if ((0, _utils.isSeparator)(cell) || (0, _utils.isDisabled)(cell) || (0, _utils.isSelectionDisabled)(cell)) {
|
628
|
-
this.selectNextCell(0, 0);
|
629
|
-
} else {
|
630
|
-
this.hotMenu.selectCell(0, 0);
|
631
|
-
}
|
632
|
-
}
|
633
|
-
|
634
|
-
/**
|
635
|
-
* Select last cell in opened menu.
|
636
|
-
*/
|
637
|
-
selectLastCell() {
|
638
|
-
const lastRow = this.hotMenu.countRows() - 1;
|
639
|
-
const cell = this.hotMenu.getCell(lastRow, 0);
|
640
|
-
if ((0, _utils.isSeparator)(cell) || (0, _utils.isDisabled)(cell) || (0, _utils.isSelectionDisabled)(cell)) {
|
641
|
-
this.selectPrevCell(lastRow, 0);
|
642
|
-
} else {
|
643
|
-
// disable default "scroll-to-cell" option and instead of that...
|
644
|
-
this.hotMenu.selectCell(lastRow, 0, undefined, undefined, false);
|
645
|
-
// ...scroll to the cell with "snap to the bottom" option
|
646
|
-
this.hotMenu.scrollViewportTo(lastRow, 0, true, false);
|
647
|
-
}
|
648
|
-
}
|
649
|
-
|
650
|
-
/**
|
651
|
-
* Select next cell in opened menu.
|
652
|
-
*
|
653
|
-
* @param {number} row Row index.
|
654
|
-
* @param {number} col Column index.
|
655
|
-
*/
|
656
|
-
selectNextCell(row, col) {
|
657
|
-
const nextRow = row + 1;
|
658
|
-
const cell = nextRow < this.hotMenu.countRows() ? this.hotMenu.getCell(nextRow, col) : null;
|
659
|
-
if (!cell) {
|
660
|
-
return;
|
661
|
-
}
|
662
|
-
if ((0, _utils.isSeparator)(cell) || (0, _utils.isDisabled)(cell) || (0, _utils.isSelectionDisabled)(cell)) {
|
663
|
-
this.selectNextCell(nextRow, col);
|
664
|
-
} else {
|
665
|
-
this.hotMenu.selectCell(nextRow, col);
|
666
|
-
}
|
667
|
-
}
|
668
|
-
|
669
|
-
/**
|
670
|
-
* Select previous cell in opened menu.
|
671
|
-
*
|
672
|
-
* @param {number} row Row index.
|
673
|
-
* @param {number} col Column index.
|
674
|
-
*/
|
675
|
-
selectPrevCell(row, col) {
|
676
|
-
const prevRow = row - 1;
|
677
|
-
const cell = prevRow >= 0 ? this.hotMenu.getCell(prevRow, col) : null;
|
678
|
-
if (!cell) {
|
679
|
-
return;
|
680
|
-
}
|
681
|
-
if ((0, _utils.isSeparator)(cell) || (0, _utils.isDisabled)(cell) || (0, _utils.isSelectionDisabled)(cell)) {
|
682
|
-
this.selectPrevCell(prevRow, col);
|
683
|
-
} else {
|
684
|
-
this.hotMenu.selectCell(prevRow, col);
|
685
|
-
}
|
686
|
-
}
|
687
|
-
|
688
|
-
/**
|
689
|
-
* Menu item renderer.
|
690
|
-
*
|
691
|
-
* @private
|
692
|
-
* @param {Core} hot The Handsontable instance.
|
693
|
-
* @param {HTMLCellElement} TD The rendered cell element.
|
694
|
-
* @param {number} row The visual index.
|
695
|
-
* @param {number} col The visual index.
|
696
|
-
* @param {string} prop The column property if used.
|
697
|
-
* @param {string} value The cell value.
|
698
|
-
*/
|
699
|
-
menuItemRenderer(hot, TD, row, col, prop, value) {
|
700
|
-
const item = hot.getSourceDataAtRow(row);
|
701
|
-
const wrapper = this.hot.rootDocument.createElement('div');
|
702
|
-
const isSubMenu = itemToTest => (0, _object.hasOwnProperty)(itemToTest, 'submenu');
|
703
|
-
const itemIsSeparator = itemToTest => new RegExp(_predefinedItems.SEPARATOR, 'i').test(itemToTest.name);
|
704
|
-
const itemIsDisabled = itemToTest => itemToTest.disabled === true || typeof itemToTest.disabled === 'function' && itemToTest.disabled.call(this.hot) === true;
|
705
|
-
const itemIsSelectionDisabled = itemToTest => itemToTest.disableSelection;
|
706
|
-
let itemValue = value;
|
707
|
-
if (typeof itemValue === 'function') {
|
708
|
-
itemValue = itemValue.call(this.hot);
|
709
|
-
}
|
710
|
-
(0, _element.empty)(TD);
|
711
|
-
(0, _element.addClass)(wrapper, 'htItemWrapper');
|
712
|
-
TD.appendChild(wrapper);
|
713
|
-
if (itemIsSeparator(item)) {
|
714
|
-
(0, _element.addClass)(TD, 'htSeparator');
|
715
|
-
} else if (typeof item.renderer === 'function') {
|
716
|
-
(0, _element.addClass)(TD, 'htCustomMenuRenderer');
|
717
|
-
TD.appendChild(item.renderer(hot, wrapper, row, col, prop, itemValue));
|
718
|
-
} else {
|
719
|
-
(0, _element.fastInnerHTML)(wrapper, itemValue);
|
720
|
-
}
|
721
|
-
if (itemIsDisabled(item)) {
|
722
|
-
(0, _element.addClass)(TD, 'htDisabled');
|
723
|
-
this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
|
724
|
-
} else if (itemIsSelectionDisabled(item)) {
|
725
|
-
(0, _element.addClass)(TD, 'htSelectionDisabled');
|
726
|
-
this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
|
727
|
-
} else if (isSubMenu(item)) {
|
728
|
-
(0, _element.addClass)(TD, 'htSubmenu');
|
729
|
-
if (itemIsSelectionDisabled(item)) {
|
730
|
-
this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
|
731
|
-
} else {
|
732
|
-
this.eventManager.addEventListener(TD, 'mouseenter', () => hot.selectCell(row, col, void 0, void 0, false, false));
|
733
|
-
}
|
734
|
-
} else {
|
735
|
-
(0, _element.removeClass)(TD, ['htSubmenu', 'htDisabled']);
|
736
|
-
if (itemIsSelectionDisabled(item)) {
|
737
|
-
this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
|
738
|
-
} else {
|
739
|
-
this.eventManager.addEventListener(TD, 'mouseenter', () => hot.selectCell(row, col, void 0, void 0, false, false));
|
740
|
-
}
|
494
|
+
this.positioner.setParentElement(this.parentMenu.container);
|
741
495
|
}
|
496
|
+
this.positioner.setElement(this.container).updatePosition(coords);
|
742
497
|
}
|
743
498
|
|
744
499
|
/**
|
@@ -777,26 +532,6 @@ class Menu {
|
|
777
532
|
return container;
|
778
533
|
}
|
779
534
|
|
780
|
-
/**
|
781
|
-
* @private
|
782
|
-
*/
|
783
|
-
blockMainTableCallbacks() {
|
784
|
-
this._afterScrollCallback = function () {};
|
785
|
-
this.hot.addHook('afterScrollVertically', this._afterScrollCallback);
|
786
|
-
this.hot.addHook('afterScrollHorizontally', this._afterScrollCallback);
|
787
|
-
}
|
788
|
-
|
789
|
-
/**
|
790
|
-
* @private
|
791
|
-
*/
|
792
|
-
releaseMainTableCallbacks() {
|
793
|
-
if (this._afterScrollCallback) {
|
794
|
-
this.hot.removeHook('afterScrollVertically', this._afterScrollCallback);
|
795
|
-
this.hot.removeHook('afterScrollHorizontally', this._afterScrollCallback);
|
796
|
-
this._afterScrollCallback = null;
|
797
|
-
}
|
798
|
-
}
|
799
|
-
|
800
535
|
/**
|
801
536
|
* On after init listener.
|
802
537
|
*
|
@@ -816,20 +551,10 @@ class Menu {
|
|
816
551
|
holderStyle.width = `${currentHiderWidth + 3}px`;
|
817
552
|
holderStyle.height = `${realHeight + 3}px`;
|
818
553
|
hiderStyle.height = holderStyle.height;
|
819
|
-
}
|
820
554
|
|
821
|
-
|
822
|
-
|
823
|
-
|
824
|
-
* @param {number} r Selection start row index.
|
825
|
-
* @param {number} c Selection start column index.
|
826
|
-
* @param {number} r2 Selection end row index.
|
827
|
-
* @param {number} c2 Selection end column index.
|
828
|
-
* @param {object} preventScrolling Object with `value` property where its value change will be observed.
|
829
|
-
*/
|
830
|
-
onAfterSelection(r, c, r2, c2, preventScrolling) {
|
831
|
-
if (this.keyEvent === false) {
|
832
|
-
preventScrolling.value = true;
|
555
|
+
// Replace the default accessibility tags with the context menu's
|
556
|
+
if (this.hot.getSettings().ariaTags) {
|
557
|
+
(0, _element.setAttribute)(this.hotMenu.rootElement, [(0, _a11y.A11Y_MENU)(), (0, _a11y.A11Y_TABINDEX)(-1)]);
|
833
558
|
}
|
834
559
|
}
|
835
560
|
|
@@ -869,6 +594,5 @@ class Menu {
|
|
869
594
|
}
|
870
595
|
}
|
871
596
|
}
|
872
|
-
|
873
|
-
|
874
|
-
exports.default = _default;
|
597
|
+
exports.Menu = Menu;
|
598
|
+
(0, _object.mixin)(Menu, _localHooks.default);
|