handsontable 0.0.0-next-9059914-20231025 → 0.0.0-next-cecf979-20231026
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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.d.ts +1 -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,20 +1,29 @@
|
|
1
1
|
import "core-js/modules/es.array.push.js";
|
2
|
-
import
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
import {
|
11
|
-
import {
|
12
|
-
import {
|
13
|
-
import {
|
14
|
-
import
|
2
|
+
import "core-js/modules/es.error.cause.js";
|
3
|
+
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
4
|
+
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
5
|
+
function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
|
6
|
+
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; } }
|
7
|
+
function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
|
8
|
+
function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
|
9
|
+
function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
|
10
|
+
import { Positioner } from "./positioner.mjs";
|
11
|
+
import { createMenuNavigator } from "./navigator.mjs";
|
12
|
+
import { createKeyboardShortcutsCtrl } from "./shortcuts.mjs";
|
13
|
+
import { SEPARATOR, NO_ITEMS, predefinedItems } from "./../predefinedItems/index.mjs";
|
14
|
+
import { filterSeparators, hasSubMenu, isItemHidden, normalizeSelection, isItemSubMenu, isItemDisabled, isItemSeparator } from "./utils.mjs";
|
15
|
+
import EventManager from "../../../eventManager.mjs";
|
16
|
+
import { arrayEach, arrayFilter, arrayReduce } from "../../../helpers/array.mjs";
|
17
|
+
import { isWindowsOS, isMobileBrowser, isIpadOS } from "../../../helpers/browser.mjs";
|
18
|
+
import { addClass, isChildOf, getParentWindow, hasClass, setAttribute } from "../../../helpers/dom/element.mjs";
|
19
|
+
import { isRightClick } from "../../../helpers/dom/event.mjs";
|
20
|
+
import { debounce, isFunction } from "../../../helpers/function.mjs";
|
21
|
+
import { isUndefined, isDefined } from "../../../helpers/mixed.mjs";
|
22
|
+
import { mixin } from "../../../helpers/object.mjs";
|
23
|
+
import localHooks from "../../../mixins/localHooks.mjs";
|
24
|
+
import { createMenuItemRenderer } from "./menuItemRenderer.mjs";
|
25
|
+
import { A11Y_EXPANDED, A11Y_MENU, A11Y_TABINDEX } from "../../../helpers/a11y.mjs";
|
15
26
|
const MIN_WIDTH = 215;
|
16
|
-
const SHORTCUTS_CONTEXT = 'menu';
|
17
|
-
const SHORTCUTS_GROUP = SHORTCUTS_CONTEXT;
|
18
27
|
|
19
28
|
/**
|
20
29
|
* @typedef MenuOptions
|
@@ -31,12 +40,33 @@ const SHORTCUTS_GROUP = SHORTCUTS_CONTEXT;
|
|
31
40
|
* @private
|
32
41
|
* @class Menu
|
33
42
|
*/
|
34
|
-
|
43
|
+
var _navigator = /*#__PURE__*/new WeakMap();
|
44
|
+
var _shortcutsCtrl = /*#__PURE__*/new WeakMap();
|
45
|
+
export class Menu {
|
35
46
|
/**
|
36
47
|
* @param {Core} hotInstance Handsontable instance.
|
37
48
|
* @param {MenuOptions} [options] Menu options.
|
38
49
|
*/
|
39
50
|
constructor(hotInstance, options) {
|
51
|
+
var _this = this;
|
52
|
+
/**
|
53
|
+
* The controller module that allows modifying the menu item selection positions.
|
54
|
+
*
|
55
|
+
* @type {Paginator}
|
56
|
+
*/
|
57
|
+
_classPrivateFieldInitSpec(this, _navigator, {
|
58
|
+
writable: true,
|
59
|
+
value: void 0
|
60
|
+
});
|
61
|
+
/**
|
62
|
+
* The controller module that allows extending the keyboard shortcuts for the menu.
|
63
|
+
*
|
64
|
+
* @type {KeyboardShortcutsMenuController}
|
65
|
+
*/
|
66
|
+
_classPrivateFieldInitSpec(this, _shortcutsCtrl, {
|
67
|
+
writable: true,
|
68
|
+
value: void 0
|
69
|
+
});
|
40
70
|
this.hot = hotInstance;
|
41
71
|
this.options = options || {
|
42
72
|
parent: null,
|
@@ -49,20 +79,21 @@ class Menu {
|
|
49
79
|
};
|
50
80
|
this.eventManager = new EventManager(this);
|
51
81
|
this.container = this.createContainer(this.options.name);
|
82
|
+
this.positioner = new Positioner(this.options.keepInViewport);
|
52
83
|
this.hotMenu = null;
|
53
84
|
this.hotSubMenus = {};
|
54
85
|
this.parentMenu = this.options.parent || null;
|
55
86
|
this.menuItems = null;
|
56
87
|
this.origOutsideClickDeselects = null;
|
57
|
-
this.keyEvent = false;
|
58
|
-
this.offset = {
|
59
|
-
above: 0,
|
60
|
-
below: 0,
|
61
|
-
left: 0,
|
62
|
-
right: 0
|
63
|
-
};
|
64
|
-
this._afterScrollCallback = null;
|
65
88
|
this.registerEvents();
|
89
|
+
if (this.isSubMenu()) {
|
90
|
+
this.addLocalHook('afterSelectionChange', function () {
|
91
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
92
|
+
args[_key] = arguments[_key];
|
93
|
+
}
|
94
|
+
return _this.parentMenu.runLocalHooks('afterSelectionChange', ...args);
|
95
|
+
});
|
96
|
+
}
|
66
97
|
}
|
67
98
|
|
68
99
|
/**
|
@@ -88,6 +119,24 @@ class Menu {
|
|
88
119
|
this.menuItems = menuItems;
|
89
120
|
}
|
90
121
|
|
122
|
+
/**
|
123
|
+
* Gets the controller object that allows modifying the the menu item selection.
|
124
|
+
*
|
125
|
+
* @returns {Paginator | undefined}
|
126
|
+
*/
|
127
|
+
getNavigator() {
|
128
|
+
return _classPrivateFieldGet(this, _navigator);
|
129
|
+
}
|
130
|
+
|
131
|
+
/**
|
132
|
+
* Gets the controller object that allows extending the keyboard shortcuts of the menu.
|
133
|
+
*
|
134
|
+
* @returns {KeyboardShortcutsMenuController | undefined}
|
135
|
+
*/
|
136
|
+
getKeyboardShortcutsCtrl() {
|
137
|
+
return _classPrivateFieldGet(this, _shortcutsCtrl);
|
138
|
+
}
|
139
|
+
|
91
140
|
/**
|
92
141
|
* Returns currently selected menu item. Returns `null` if no item was selected.
|
93
142
|
*
|
@@ -106,17 +155,6 @@ class Menu {
|
|
106
155
|
return Array.isArray(this.hotMenu.getSelectedLast());
|
107
156
|
}
|
108
157
|
|
109
|
-
/**
|
110
|
-
* Set offset menu position for specified area (`above`, `below`, `left` or `right`).
|
111
|
-
*
|
112
|
-
* @param {string} area Specified area name (`above`, `below`, `left` or `right`).
|
113
|
-
* @param {number} offset Offset value.
|
114
|
-
*/
|
115
|
-
setOffset(area) {
|
116
|
-
let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
117
|
-
this.offset[area] = offset;
|
118
|
-
}
|
119
|
-
|
120
158
|
/**
|
121
159
|
* Check if menu is using as sub-menu.
|
122
160
|
*
|
@@ -133,7 +171,6 @@ class Menu {
|
|
133
171
|
* @fires Hooks#afterContextMenuShow
|
134
172
|
*/
|
135
173
|
open() {
|
136
|
-
var _this = this;
|
137
174
|
this.runLocalHooks('beforeOpen');
|
138
175
|
this.container.removeAttribute('style');
|
139
176
|
this.container.style.display = 'block';
|
@@ -168,16 +205,21 @@ class Menu {
|
|
168
205
|
readOnly: true,
|
169
206
|
editor: false,
|
170
207
|
copyPaste: false,
|
208
|
+
hiddenRows: true,
|
171
209
|
maxCols: 1,
|
172
210
|
columns: [{
|
173
211
|
data: 'name',
|
174
|
-
renderer: (
|
212
|
+
renderer: createMenuItemRenderer(this.hot)
|
175
213
|
}],
|
176
214
|
renderAllRows: true,
|
177
215
|
fragmentSelection: false,
|
178
216
|
outsideClickDeselects: false,
|
179
217
|
disableVisualSelection: 'area',
|
180
218
|
layoutDirection: this.hot.isRtl() ? 'rtl' : 'ltr',
|
219
|
+
ariaTags: false,
|
220
|
+
beforeOnCellMouseOver: (event, coords) => {
|
221
|
+
_classPrivateFieldGet(this, _navigator).setCurrentPage(coords.row);
|
222
|
+
},
|
181
223
|
afterOnCellMouseOver: (event, coords) => {
|
182
224
|
if (this.isAllSubMenusClosed()) {
|
183
225
|
delayedOpenSubMenu(coords.row);
|
@@ -195,6 +237,13 @@ class Menu {
|
|
195
237
|
this.close(true);
|
196
238
|
}
|
197
239
|
},
|
240
|
+
afterSelection: (row, column, row2, column2, preventScrolling) => {
|
241
|
+
// do not scroll the viewport when mouse clicks on partially visible menu item
|
242
|
+
if (this.hotMenu.view.isMouseDown()) {
|
243
|
+
preventScrolling.value = true;
|
244
|
+
}
|
245
|
+
this.runLocalHooks('afterSelectionChange', this.getSelectedItem());
|
246
|
+
},
|
198
247
|
beforeOnCellMouseUp: event => {
|
199
248
|
if (this.hasSelectedItem()) {
|
200
249
|
shouldAutoCloseMenu = !this.isCommandPassive(this.getSelectedItem());
|
@@ -212,7 +261,7 @@ class Menu {
|
|
212
261
|
// event hides the tapped element, the click event grabs the element below. As a result, the filter
|
213
262
|
// by condition menu is closed and immediately open on tapping the "None" item.
|
214
263
|
if (isMobileBrowser() || isIpadOS()) {
|
215
|
-
|
264
|
+
this.hot._registerTimeout(() => this.close(true), 325);
|
216
265
|
} else {
|
217
266
|
this.close(true);
|
218
267
|
}
|
@@ -228,120 +277,17 @@ class Menu {
|
|
228
277
|
};
|
229
278
|
this.origOutsideClickDeselects = this.hot.getSettings().outsideClickDeselects;
|
230
279
|
this.hot.getSettings().outsideClickDeselects = false;
|
231
|
-
this.hotMenu = new
|
280
|
+
this.hotMenu = new this.hot.constructor(this.container, settings);
|
232
281
|
this.hotMenu.addHook('afterInit', () => this.onAfterInit());
|
233
|
-
this.hotMenu.addHook('afterSelection', function () {
|
234
|
-
return _this.onAfterSelection(...arguments);
|
235
|
-
});
|
236
282
|
this.hotMenu.init();
|
237
|
-
this.hotMenu
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
runOnlyIf: event => isInput(event.target) === false || this.container.contains(event.target) === false
|
246
|
-
};
|
247
|
-
|
248
|
-
// Default shortcuts for Handsontable should not be handled. Changing context will help with that.
|
249
|
-
shortcutManager.setActiveContextName('menu');
|
250
|
-
menuContext.addShortcuts([{
|
251
|
-
keys: [['Escape']],
|
252
|
-
callback: () => {
|
253
|
-
this.keyEvent = true;
|
254
|
-
this.close();
|
255
|
-
this.keyEvent = false;
|
256
|
-
}
|
257
|
-
}, {
|
258
|
-
keys: [['ArrowDown']],
|
259
|
-
callback: () => {
|
260
|
-
const selection = this.hotMenu.getSelectedLast();
|
261
|
-
this.keyEvent = true;
|
262
|
-
if (selection) {
|
263
|
-
this.selectNextCell(selection[0], selection[1]);
|
264
|
-
} else {
|
265
|
-
this.selectFirstCell();
|
266
|
-
}
|
267
|
-
this.keyEvent = false;
|
268
|
-
}
|
269
|
-
}, {
|
270
|
-
keys: [['ArrowUp']],
|
271
|
-
callback: () => {
|
272
|
-
const selection = this.hotMenu.getSelectedLast();
|
273
|
-
this.keyEvent = true;
|
274
|
-
if (selection) {
|
275
|
-
this.selectPrevCell(selection[0], selection[1]);
|
276
|
-
} else {
|
277
|
-
this.selectLastCell();
|
278
|
-
}
|
279
|
-
this.keyEvent = false;
|
280
|
-
}
|
281
|
-
}, {
|
282
|
-
keys: [['ArrowRight']],
|
283
|
-
callback: () => {
|
284
|
-
const selection = this.hotMenu.getSelectedLast();
|
285
|
-
this.keyEvent = true;
|
286
|
-
if (selection) {
|
287
|
-
const menu = this.openSubMenu(selection[0]);
|
288
|
-
if (menu) {
|
289
|
-
menu.selectFirstCell();
|
290
|
-
}
|
291
|
-
}
|
292
|
-
this.keyEvent = false;
|
293
|
-
}
|
294
|
-
}, {
|
295
|
-
keys: [['ArrowLeft']],
|
296
|
-
callback: () => {
|
297
|
-
const selection = this.hotMenu.getSelectedLast();
|
298
|
-
this.keyEvent = true;
|
299
|
-
if (selection && this.isSubMenu()) {
|
300
|
-
this.close();
|
301
|
-
if (this.parentMenu) {
|
302
|
-
this.parentMenu.hotMenu.listen();
|
303
|
-
}
|
304
|
-
}
|
305
|
-
this.keyEvent = false;
|
306
|
-
}
|
307
|
-
}, {
|
308
|
-
keys: [['Enter']],
|
309
|
-
callback: event => {
|
310
|
-
const selection = this.hotMenu.getSelectedLast();
|
311
|
-
this.keyEvent = true;
|
312
|
-
if (!this.hotMenu.getSourceDataAtRow(selection[0]).submenu) {
|
313
|
-
this.executeCommand(event);
|
314
|
-
this.close(true);
|
315
|
-
}
|
316
|
-
this.keyEvent = false;
|
317
|
-
}
|
318
|
-
}, {
|
319
|
-
keys: [['PageUp']],
|
320
|
-
callback: () => {
|
321
|
-
const selection = this.hotMenu.getSelectedLast();
|
322
|
-
this.keyEvent = true;
|
323
|
-
if (selection) {
|
324
|
-
this.hotMenu.selection.transformStart(-this.hotMenu.countVisibleRows(), 0);
|
325
|
-
} else {
|
326
|
-
this.selectFirstCell();
|
327
|
-
}
|
328
|
-
this.keyEvent = false;
|
329
|
-
}
|
330
|
-
}, {
|
331
|
-
keys: [['PageDown']],
|
332
|
-
callback: () => {
|
333
|
-
const selection = this.hotMenu.getSelectedLast();
|
334
|
-
this.keyEvent = true;
|
335
|
-
if (selection) {
|
336
|
-
this.hotMenu.selection.transformStart(this.hotMenu.countVisibleRows(), 0);
|
337
|
-
} else {
|
338
|
-
this.selectLastCell();
|
339
|
-
}
|
340
|
-
this.keyEvent = false;
|
341
|
-
}
|
342
|
-
}], menuContextConfig);
|
343
|
-
this.blockMainTableCallbacks();
|
344
|
-
this.runLocalHooks('afterOpen');
|
283
|
+
_classPrivateFieldSet(this, _navigator, createMenuNavigator(this.hotMenu));
|
284
|
+
_classPrivateFieldSet(this, _shortcutsCtrl, createKeyboardShortcutsCtrl(this));
|
285
|
+
_classPrivateFieldGet(this, _shortcutsCtrl).listen();
|
286
|
+
this.focus();
|
287
|
+
if (this.isSubMenu()) {
|
288
|
+
this.addLocalHook('afterOpen', () => this.parentMenu.runLocalHooks('afterSubmenuOpen', this));
|
289
|
+
}
|
290
|
+
this.runLocalHooks('afterOpen', this);
|
345
291
|
}
|
346
292
|
|
347
293
|
/**
|
@@ -354,17 +300,24 @@ class Menu {
|
|
354
300
|
if (!this.isOpened()) {
|
355
301
|
return;
|
356
302
|
}
|
357
|
-
if (closeParent && this.
|
303
|
+
if (closeParent && this.isSubMenu()) {
|
358
304
|
this.parentMenu.close();
|
359
305
|
} else {
|
306
|
+
_classPrivateFieldGet(this, _navigator).clear();
|
360
307
|
this.closeAllSubMenus();
|
361
308
|
this.container.style.display = 'none';
|
362
|
-
this.releaseMainTableCallbacks();
|
363
309
|
this.hotMenu.destroy();
|
364
310
|
this.hotMenu = null;
|
365
311
|
this.hot.getSettings().outsideClickDeselects = this.origOutsideClickDeselects;
|
366
312
|
this.runLocalHooks('afterClose');
|
367
|
-
if (this.
|
313
|
+
if (this.isSubMenu()) {
|
314
|
+
if (this.hot.getSettings().ariaTags) {
|
315
|
+
const selection = this.parentMenu.hotMenu.getSelectedLast();
|
316
|
+
if (selection) {
|
317
|
+
const cell = this.parentMenu.hotMenu.getCell(selection[0], 0);
|
318
|
+
setAttribute(cell, [A11Y_EXPANDED(false)]);
|
319
|
+
}
|
320
|
+
}
|
368
321
|
this.parentMenu.hotMenu.listen();
|
369
322
|
}
|
370
323
|
}
|
@@ -397,6 +350,11 @@ class Menu {
|
|
397
350
|
subMenu.open();
|
398
351
|
subMenu.setPosition(cell.getBoundingClientRect());
|
399
352
|
this.hotSubMenus[dataItem.key] = subMenu;
|
353
|
+
|
354
|
+
// Update the accessibility tags on the cell being the base for the submenu.
|
355
|
+
if (this.hot.getSettings().ariaTags) {
|
356
|
+
setAttribute(cell, [A11Y_EXPANDED(true)]);
|
357
|
+
}
|
400
358
|
return subMenu;
|
401
359
|
}
|
402
360
|
|
@@ -411,6 +369,12 @@ class Menu {
|
|
411
369
|
if (menus) {
|
412
370
|
menus.destroy();
|
413
371
|
delete this.hotSubMenus[dataItem.key];
|
372
|
+
const cell = this.hotMenu.getCell(row, 0);
|
373
|
+
|
374
|
+
// Update the accessibility tags on the cell being the base for the submenu.
|
375
|
+
if (this.hot.getSettings().ariaTags) {
|
376
|
+
setAttribute(cell, [A11Y_EXPANDED(false)]);
|
377
|
+
}
|
414
378
|
}
|
415
379
|
}
|
416
380
|
|
@@ -430,6 +394,19 @@ class Menu {
|
|
430
394
|
return Object.keys(this.hotSubMenus).length === 0;
|
431
395
|
}
|
432
396
|
|
397
|
+
/**
|
398
|
+
* Focus the menu so all keyboard shortcuts become active.
|
399
|
+
*/
|
400
|
+
focus() {
|
401
|
+
if (this.isOpened()) {
|
402
|
+
this.hotMenu.rootElement.focus({
|
403
|
+
preventScroll: true
|
404
|
+
});
|
405
|
+
this.getKeyboardShortcutsCtrl().listen();
|
406
|
+
this.hotMenu.listen();
|
407
|
+
}
|
408
|
+
}
|
409
|
+
|
433
410
|
/**
|
434
411
|
* Destroy instance.
|
435
412
|
*/
|
@@ -489,252 +466,30 @@ class Menu {
|
|
489
466
|
* @returns {boolean}
|
490
467
|
*/
|
491
468
|
isCommandPassive(commandDescriptor) {
|
492
|
-
|
493
|
-
isCommand,
|
494
|
-
name: commandName,
|
495
|
-
disabled,
|
496
|
-
submenu
|
497
|
-
} = commandDescriptor;
|
498
|
-
const isItemDisabled = disabled === true || typeof disabled === 'function' && disabled.call(this.hot) === true;
|
499
|
-
return isCommand === false || commandName === SEPARATOR || isItemDisabled === true || submenu;
|
469
|
+
return commandDescriptor.isCommand === false || isItemSeparator(commandDescriptor) || isItemDisabled(commandDescriptor, this.hot) || isItemSubMenu(commandDescriptor);
|
500
470
|
}
|
501
471
|
|
502
472
|
/**
|
503
|
-
* Set menu position
|
504
|
-
*
|
505
|
-
* @param {Event|object} coords Event or literal Object with coordinates.
|
506
|
-
*/
|
507
|
-
setPosition(coords) {
|
508
|
-
const cursor = new Cursor(coords, this.container.ownerDocument.defaultView);
|
509
|
-
if (this.options.keepInViewport) {
|
510
|
-
if (cursor.fitsBelow(this.container)) {
|
511
|
-
this.setPositionBelowCursor(cursor);
|
512
|
-
} else if (cursor.fitsAbove(this.container)) {
|
513
|
-
this.setPositionAboveCursor(cursor);
|
514
|
-
} else {
|
515
|
-
this.setPositionBelowCursor(cursor);
|
516
|
-
}
|
517
|
-
if (this.hot.isLtr()) {
|
518
|
-
this.setHorizontalPositionForLtr(cursor);
|
519
|
-
} else {
|
520
|
-
this.setHorizontalPositionForRtl(cursor);
|
521
|
-
}
|
522
|
-
} else {
|
523
|
-
this.setPositionBelowCursor(cursor);
|
524
|
-
this.setPositionOnRightOfCursor(cursor);
|
525
|
-
}
|
526
|
-
}
|
527
|
-
|
528
|
-
/**
|
529
|
-
* Set menu horizontal position for RTL mode.
|
530
|
-
*
|
531
|
-
* @param {Cursor} cursor `Cursor` object.
|
532
|
-
*/
|
533
|
-
setHorizontalPositionForRtl(cursor) {
|
534
|
-
if (cursor.fitsOnLeft(this.container)) {
|
535
|
-
this.setPositionOnLeftOfCursor(cursor);
|
536
|
-
} else {
|
537
|
-
this.setPositionOnRightOfCursor(cursor);
|
538
|
-
}
|
539
|
-
}
|
540
|
-
|
541
|
-
/**
|
542
|
-
* Set menu horizontal position for LTR mode.
|
543
|
-
*
|
544
|
-
* @param {Cursor} cursor `Cursor` object.
|
545
|
-
*/
|
546
|
-
setHorizontalPositionForLtr(cursor) {
|
547
|
-
if (cursor.fitsOnRight(this.container)) {
|
548
|
-
this.setPositionOnRightOfCursor(cursor);
|
549
|
-
} else {
|
550
|
-
this.setPositionOnLeftOfCursor(cursor);
|
551
|
-
}
|
552
|
-
}
|
553
|
-
|
554
|
-
/**
|
555
|
-
* Set menu position above cursor object.
|
556
|
-
*
|
557
|
-
* @param {Cursor} cursor `Cursor` object.
|
558
|
-
*/
|
559
|
-
setPositionAboveCursor(cursor) {
|
560
|
-
let top = this.offset.above + cursor.top - this.container.offsetHeight;
|
561
|
-
if (this.isSubMenu()) {
|
562
|
-
top = cursor.top + cursor.cellHeight - this.container.offsetHeight + 3;
|
563
|
-
}
|
564
|
-
this.container.style.top = `${top}px`;
|
565
|
-
}
|
566
|
-
|
567
|
-
/**
|
568
|
-
* Set menu position below cursor object.
|
569
|
-
*
|
570
|
-
* @param {Cursor} cursor `Cursor` object.
|
571
|
-
*/
|
572
|
-
setPositionBelowCursor(cursor) {
|
573
|
-
let top = this.offset.below + cursor.top + 1;
|
574
|
-
if (this.isSubMenu()) {
|
575
|
-
top = cursor.top - 1;
|
576
|
-
}
|
577
|
-
this.container.style.top = `${top}px`;
|
578
|
-
}
|
579
|
-
|
580
|
-
/**
|
581
|
-
* Set menu position on the right of cursor object.
|
473
|
+
* Set offset menu position for specified area (`above`, `below`, `left` or `right`).
|
582
474
|
*
|
583
|
-
* @param {
|
475
|
+
* @param {string} area Specified area name (`above`, `below`, `left` or `right`).
|
476
|
+
* @param {number} offset Offset value.
|
584
477
|
*/
|
585
|
-
|
586
|
-
let
|
587
|
-
|
588
|
-
const {
|
589
|
-
right: parentMenuRight
|
590
|
-
} = this.parentMenu.container.getBoundingClientRect();
|
591
|
-
|
592
|
-
// move the sub menu by the width of the parent's border (usually by 1-2 pixels)
|
593
|
-
left += cursor.cellWidth + parentMenuRight - (cursor.left + cursor.cellWidth);
|
594
|
-
} else {
|
595
|
-
left += this.offset.right;
|
596
|
-
}
|
597
|
-
this.container.style.left = `${left}px`;
|
478
|
+
setOffset(area) {
|
479
|
+
let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
480
|
+
this.positioner.setOffset(area, offset);
|
598
481
|
}
|
599
482
|
|
600
483
|
/**
|
601
|
-
* Set menu position on
|
484
|
+
* Set menu position based on dom event or based on literal object.
|
602
485
|
*
|
603
|
-
* @param {
|
486
|
+
* @param {Event|object} coords Event or literal Object with coordinates.
|
604
487
|
*/
|
605
|
-
|
606
|
-
let left = this.offset.left + cursor.left - this.container.offsetWidth;
|
488
|
+
setPosition(coords) {
|
607
489
|
if (this.isSubMenu()) {
|
608
|
-
|
609
|
-
left: parentMenuLeft
|
610
|
-
} = this.parentMenu.container.getBoundingClientRect();
|
611
|
-
|
612
|
-
// move the sub menu by the width of the parent's border (usually by 1-2 pixels)
|
613
|
-
left -= cursor.left - parentMenuLeft;
|
614
|
-
}
|
615
|
-
this.container.style.left = `${left}px`;
|
616
|
-
}
|
617
|
-
|
618
|
-
/**
|
619
|
-
* Select first cell in opened menu.
|
620
|
-
*/
|
621
|
-
selectFirstCell() {
|
622
|
-
const cell = this.hotMenu.getCell(0, 0);
|
623
|
-
if (isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) {
|
624
|
-
this.selectNextCell(0, 0);
|
625
|
-
} else {
|
626
|
-
this.hotMenu.selectCell(0, 0);
|
627
|
-
}
|
628
|
-
}
|
629
|
-
|
630
|
-
/**
|
631
|
-
* Select last cell in opened menu.
|
632
|
-
*/
|
633
|
-
selectLastCell() {
|
634
|
-
const lastRow = this.hotMenu.countRows() - 1;
|
635
|
-
const cell = this.hotMenu.getCell(lastRow, 0);
|
636
|
-
if (isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) {
|
637
|
-
this.selectPrevCell(lastRow, 0);
|
638
|
-
} else {
|
639
|
-
// disable default "scroll-to-cell" option and instead of that...
|
640
|
-
this.hotMenu.selectCell(lastRow, 0, undefined, undefined, false);
|
641
|
-
// ...scroll to the cell with "snap to the bottom" option
|
642
|
-
this.hotMenu.scrollViewportTo(lastRow, 0, true, false);
|
643
|
-
}
|
644
|
-
}
|
645
|
-
|
646
|
-
/**
|
647
|
-
* Select next cell in opened menu.
|
648
|
-
*
|
649
|
-
* @param {number} row Row index.
|
650
|
-
* @param {number} col Column index.
|
651
|
-
*/
|
652
|
-
selectNextCell(row, col) {
|
653
|
-
const nextRow = row + 1;
|
654
|
-
const cell = nextRow < this.hotMenu.countRows() ? this.hotMenu.getCell(nextRow, col) : null;
|
655
|
-
if (!cell) {
|
656
|
-
return;
|
657
|
-
}
|
658
|
-
if (isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) {
|
659
|
-
this.selectNextCell(nextRow, col);
|
660
|
-
} else {
|
661
|
-
this.hotMenu.selectCell(nextRow, col);
|
662
|
-
}
|
663
|
-
}
|
664
|
-
|
665
|
-
/**
|
666
|
-
* Select previous cell in opened menu.
|
667
|
-
*
|
668
|
-
* @param {number} row Row index.
|
669
|
-
* @param {number} col Column index.
|
670
|
-
*/
|
671
|
-
selectPrevCell(row, col) {
|
672
|
-
const prevRow = row - 1;
|
673
|
-
const cell = prevRow >= 0 ? this.hotMenu.getCell(prevRow, col) : null;
|
674
|
-
if (!cell) {
|
675
|
-
return;
|
676
|
-
}
|
677
|
-
if (isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) {
|
678
|
-
this.selectPrevCell(prevRow, col);
|
679
|
-
} else {
|
680
|
-
this.hotMenu.selectCell(prevRow, col);
|
681
|
-
}
|
682
|
-
}
|
683
|
-
|
684
|
-
/**
|
685
|
-
* Menu item renderer.
|
686
|
-
*
|
687
|
-
* @private
|
688
|
-
* @param {Core} hot The Handsontable instance.
|
689
|
-
* @param {HTMLCellElement} TD The rendered cell element.
|
690
|
-
* @param {number} row The visual index.
|
691
|
-
* @param {number} col The visual index.
|
692
|
-
* @param {string} prop The column property if used.
|
693
|
-
* @param {string} value The cell value.
|
694
|
-
*/
|
695
|
-
menuItemRenderer(hot, TD, row, col, prop, value) {
|
696
|
-
const item = hot.getSourceDataAtRow(row);
|
697
|
-
const wrapper = this.hot.rootDocument.createElement('div');
|
698
|
-
const isSubMenu = itemToTest => hasOwnProperty(itemToTest, 'submenu');
|
699
|
-
const itemIsSeparator = itemToTest => new RegExp(SEPARATOR, 'i').test(itemToTest.name);
|
700
|
-
const itemIsDisabled = itemToTest => itemToTest.disabled === true || typeof itemToTest.disabled === 'function' && itemToTest.disabled.call(this.hot) === true;
|
701
|
-
const itemIsSelectionDisabled = itemToTest => itemToTest.disableSelection;
|
702
|
-
let itemValue = value;
|
703
|
-
if (typeof itemValue === 'function') {
|
704
|
-
itemValue = itemValue.call(this.hot);
|
705
|
-
}
|
706
|
-
empty(TD);
|
707
|
-
addClass(wrapper, 'htItemWrapper');
|
708
|
-
TD.appendChild(wrapper);
|
709
|
-
if (itemIsSeparator(item)) {
|
710
|
-
addClass(TD, 'htSeparator');
|
711
|
-
} else if (typeof item.renderer === 'function') {
|
712
|
-
addClass(TD, 'htCustomMenuRenderer');
|
713
|
-
TD.appendChild(item.renderer(hot, wrapper, row, col, prop, itemValue));
|
714
|
-
} else {
|
715
|
-
fastInnerHTML(wrapper, itemValue);
|
716
|
-
}
|
717
|
-
if (itemIsDisabled(item)) {
|
718
|
-
addClass(TD, 'htDisabled');
|
719
|
-
this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
|
720
|
-
} else if (itemIsSelectionDisabled(item)) {
|
721
|
-
addClass(TD, 'htSelectionDisabled');
|
722
|
-
this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
|
723
|
-
} else if (isSubMenu(item)) {
|
724
|
-
addClass(TD, 'htSubmenu');
|
725
|
-
if (itemIsSelectionDisabled(item)) {
|
726
|
-
this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
|
727
|
-
} else {
|
728
|
-
this.eventManager.addEventListener(TD, 'mouseenter', () => hot.selectCell(row, col, void 0, void 0, false, false));
|
729
|
-
}
|
730
|
-
} else {
|
731
|
-
removeClass(TD, ['htSubmenu', 'htDisabled']);
|
732
|
-
if (itemIsSelectionDisabled(item)) {
|
733
|
-
this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
|
734
|
-
} else {
|
735
|
-
this.eventManager.addEventListener(TD, 'mouseenter', () => hot.selectCell(row, col, void 0, void 0, false, false));
|
736
|
-
}
|
490
|
+
this.positioner.setParentElement(this.parentMenu.container);
|
737
491
|
}
|
492
|
+
this.positioner.setElement(this.container).updatePosition(coords);
|
738
493
|
}
|
739
494
|
|
740
495
|
/**
|
@@ -773,26 +528,6 @@ class Menu {
|
|
773
528
|
return container;
|
774
529
|
}
|
775
530
|
|
776
|
-
/**
|
777
|
-
* @private
|
778
|
-
*/
|
779
|
-
blockMainTableCallbacks() {
|
780
|
-
this._afterScrollCallback = function () {};
|
781
|
-
this.hot.addHook('afterScrollVertically', this._afterScrollCallback);
|
782
|
-
this.hot.addHook('afterScrollHorizontally', this._afterScrollCallback);
|
783
|
-
}
|
784
|
-
|
785
|
-
/**
|
786
|
-
* @private
|
787
|
-
*/
|
788
|
-
releaseMainTableCallbacks() {
|
789
|
-
if (this._afterScrollCallback) {
|
790
|
-
this.hot.removeHook('afterScrollVertically', this._afterScrollCallback);
|
791
|
-
this.hot.removeHook('afterScrollHorizontally', this._afterScrollCallback);
|
792
|
-
this._afterScrollCallback = null;
|
793
|
-
}
|
794
|
-
}
|
795
|
-
|
796
531
|
/**
|
797
532
|
* On after init listener.
|
798
533
|
*
|
@@ -812,20 +547,10 @@ class Menu {
|
|
812
547
|
holderStyle.width = `${currentHiderWidth + 3}px`;
|
813
548
|
holderStyle.height = `${realHeight + 3}px`;
|
814
549
|
hiderStyle.height = holderStyle.height;
|
815
|
-
}
|
816
550
|
|
817
|
-
|
818
|
-
|
819
|
-
|
820
|
-
* @param {number} r Selection start row index.
|
821
|
-
* @param {number} c Selection start column index.
|
822
|
-
* @param {number} r2 Selection end row index.
|
823
|
-
* @param {number} c2 Selection end column index.
|
824
|
-
* @param {object} preventScrolling Object with `value` property where its value change will be observed.
|
825
|
-
*/
|
826
|
-
onAfterSelection(r, c, r2, c2, preventScrolling) {
|
827
|
-
if (this.keyEvent === false) {
|
828
|
-
preventScrolling.value = true;
|
551
|
+
// Replace the default accessibility tags with the context menu's
|
552
|
+
if (this.hot.getSettings().ariaTags) {
|
553
|
+
setAttribute(this.hotMenu.rootElement, [A11Y_MENU(), A11Y_TABINDEX(-1)]);
|
829
554
|
}
|
830
555
|
}
|
831
556
|
|
@@ -865,5 +590,4 @@ class Menu {
|
|
865
590
|
}
|
866
591
|
}
|
867
592
|
}
|
868
|
-
mixin(Menu, localHooks);
|
869
|
-
export default Menu;
|
593
|
+
mixin(Menu, localHooks);
|