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
@@ -0,0 +1,58 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
exports.__esModule = true;
|
4
|
+
exports.createMenuItemRenderer = createMenuItemRenderer;
|
5
|
+
var _utils = require("./utils");
|
6
|
+
var _element = require("../../../helpers/dom/element");
|
7
|
+
var _a11y = require("../../../helpers/a11y");
|
8
|
+
/**
|
9
|
+
* Creates the menu renderer function.
|
10
|
+
*
|
11
|
+
* @private
|
12
|
+
* @param {Core} mainTableHot The main table Handsontable instance.
|
13
|
+
* @returns {Function}
|
14
|
+
*/
|
15
|
+
function createMenuItemRenderer(mainTableHot) {
|
16
|
+
/**
|
17
|
+
* Menu item renderer.
|
18
|
+
*
|
19
|
+
* @private
|
20
|
+
* @param {Core} menuHot The Handsontable instance.
|
21
|
+
* @param {HTMLCellElement} TD The rendered cell element.
|
22
|
+
* @param {number} row The visual index.
|
23
|
+
* @param {number} col The visual index.
|
24
|
+
* @param {string} prop The column property if used.
|
25
|
+
* @param {string} value The cell value.
|
26
|
+
*/
|
27
|
+
return (menuHot, TD, row, col, prop, value) => {
|
28
|
+
if (TD.hasAttribute('ghost-table')) {
|
29
|
+
return;
|
30
|
+
}
|
31
|
+
const item = menuHot.getSourceDataAtRow(row);
|
32
|
+
const wrapper = mainTableHot.rootDocument.createElement('div');
|
33
|
+
const itemValue = typeof value === 'function' ? value.call(mainTableHot) : value;
|
34
|
+
(0, _element.empty)(TD);
|
35
|
+
(0, _element.addClass)(wrapper, 'htItemWrapper');
|
36
|
+
if (mainTableHot.getSettings().ariaTags) {
|
37
|
+
const isFocusable = !(0, _utils.isItemDisabled)(item, mainTableHot) && !(0, _utils.isItemSelectionDisabled)(item) && !(0, _utils.isItemSeparator)(item);
|
38
|
+
(0, _element.setAttribute)(TD, [(0, _a11y.A11Y_MENU_ITEM)(), (0, _a11y.A11Y_LABEL)(itemValue), ...(isFocusable ? [(0, _a11y.A11Y_TABINDEX)(-1)] : []), ...((0, _utils.isItemDisabled)(item, mainTableHot) ? [(0, _a11y.A11Y_DISABLED)()] : []), ...((0, _utils.isItemSubMenu)(item) ? [(0, _a11y.A11Y_EXPANDED)(false)] : [])]);
|
39
|
+
}
|
40
|
+
TD.className = '';
|
41
|
+
TD.appendChild(wrapper);
|
42
|
+
if ((0, _utils.isItemSeparator)(item)) {
|
43
|
+
(0, _element.addClass)(TD, 'htSeparator');
|
44
|
+
} else if (typeof item.renderer === 'function') {
|
45
|
+
(0, _element.addClass)(TD, 'htCustomMenuRenderer');
|
46
|
+
TD.appendChild(item.renderer(menuHot, wrapper, row, col, prop, itemValue));
|
47
|
+
} else {
|
48
|
+
(0, _element.fastInnerHTML)(wrapper, itemValue);
|
49
|
+
}
|
50
|
+
if ((0, _utils.isItemDisabled)(item, mainTableHot)) {
|
51
|
+
(0, _element.addClass)(TD, 'htDisabled');
|
52
|
+
} else if ((0, _utils.isItemSelectionDisabled)(item)) {
|
53
|
+
(0, _element.addClass)(TD, 'htSelectionDisabled');
|
54
|
+
} else if ((0, _utils.isItemSubMenu)(item)) {
|
55
|
+
(0, _element.addClass)(TD, 'htSubmenu');
|
56
|
+
}
|
57
|
+
};
|
58
|
+
}
|
@@ -0,0 +1,54 @@
|
|
1
|
+
import { isItemSubMenu, isItemDisabled, isItemSelectionDisabled, isItemSeparator } from "./utils.mjs";
|
2
|
+
import { addClass, empty, fastInnerHTML, setAttribute } from "../../../helpers/dom/element.mjs";
|
3
|
+
import { A11Y_DISABLED, A11Y_EXPANDED, A11Y_LABEL, A11Y_MENU_ITEM, A11Y_TABINDEX } from "../../../helpers/a11y.mjs";
|
4
|
+
/**
|
5
|
+
* Creates the menu renderer function.
|
6
|
+
*
|
7
|
+
* @private
|
8
|
+
* @param {Core} mainTableHot The main table Handsontable instance.
|
9
|
+
* @returns {Function}
|
10
|
+
*/
|
11
|
+
export function createMenuItemRenderer(mainTableHot) {
|
12
|
+
/**
|
13
|
+
* Menu item renderer.
|
14
|
+
*
|
15
|
+
* @private
|
16
|
+
* @param {Core} menuHot The Handsontable instance.
|
17
|
+
* @param {HTMLCellElement} TD The rendered cell element.
|
18
|
+
* @param {number} row The visual index.
|
19
|
+
* @param {number} col The visual index.
|
20
|
+
* @param {string} prop The column property if used.
|
21
|
+
* @param {string} value The cell value.
|
22
|
+
*/
|
23
|
+
return (menuHot, TD, row, col, prop, value) => {
|
24
|
+
if (TD.hasAttribute('ghost-table')) {
|
25
|
+
return;
|
26
|
+
}
|
27
|
+
const item = menuHot.getSourceDataAtRow(row);
|
28
|
+
const wrapper = mainTableHot.rootDocument.createElement('div');
|
29
|
+
const itemValue = typeof value === 'function' ? value.call(mainTableHot) : value;
|
30
|
+
empty(TD);
|
31
|
+
addClass(wrapper, 'htItemWrapper');
|
32
|
+
if (mainTableHot.getSettings().ariaTags) {
|
33
|
+
const isFocusable = !isItemDisabled(item, mainTableHot) && !isItemSelectionDisabled(item) && !isItemSeparator(item);
|
34
|
+
setAttribute(TD, [A11Y_MENU_ITEM(), A11Y_LABEL(itemValue), ...(isFocusable ? [A11Y_TABINDEX(-1)] : []), ...(isItemDisabled(item, mainTableHot) ? [A11Y_DISABLED()] : []), ...(isItemSubMenu(item) ? [A11Y_EXPANDED(false)] : [])]);
|
35
|
+
}
|
36
|
+
TD.className = '';
|
37
|
+
TD.appendChild(wrapper);
|
38
|
+
if (isItemSeparator(item)) {
|
39
|
+
addClass(TD, 'htSeparator');
|
40
|
+
} else if (typeof item.renderer === 'function') {
|
41
|
+
addClass(TD, 'htCustomMenuRenderer');
|
42
|
+
TD.appendChild(item.renderer(menuHot, wrapper, row, col, prop, itemValue));
|
43
|
+
} else {
|
44
|
+
fastInnerHTML(wrapper, itemValue);
|
45
|
+
}
|
46
|
+
if (isItemDisabled(item, mainTableHot)) {
|
47
|
+
addClass(TD, 'htDisabled');
|
48
|
+
} else if (isItemSelectionDisabled(item)) {
|
49
|
+
addClass(TD, 'htSelectionDisabled');
|
50
|
+
} else if (isItemSubMenu(item)) {
|
51
|
+
addClass(TD, 'htSubmenu');
|
52
|
+
}
|
53
|
+
};
|
54
|
+
}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
exports.__esModule = true;
|
4
|
+
exports.createMenuNavigator = createMenuNavigator;
|
5
|
+
var _paginator = require("../../../utils/paginator");
|
6
|
+
var _utils = require("./utils");
|
7
|
+
/**
|
8
|
+
* Creates navigator for menus and submenus.
|
9
|
+
*
|
10
|
+
* @param {Handsontable} hotMenu The Handsontable instance of the menu.
|
11
|
+
* @returns {Paginator}
|
12
|
+
*/
|
13
|
+
function createMenuNavigator(hotMenu) {
|
14
|
+
return (0, _paginator.createPaginator)({
|
15
|
+
size: () => hotMenu.countRows(),
|
16
|
+
onItemSelect(currentItem, directItemChange) {
|
17
|
+
const cell = hotMenu.getCell(currentItem, 0);
|
18
|
+
if (!cell || (0, _utils.isSeparator)(cell) || (0, _utils.isDisabled)(cell) || (0, _utils.isSelectionDisabled)(cell)) {
|
19
|
+
return false;
|
20
|
+
}
|
21
|
+
hotMenu.selectCell(currentItem, 0, ...(directItemChange ? [currentItem, 0, false, false] : []));
|
22
|
+
},
|
23
|
+
onClear() {
|
24
|
+
hotMenu.deselectCell();
|
25
|
+
}
|
26
|
+
});
|
27
|
+
}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import { createPaginator } from "../../../utils/paginator.mjs";
|
2
|
+
import { isSeparator, isDisabled, isSelectionDisabled } from "./utils.mjs";
|
3
|
+
/**
|
4
|
+
* Creates navigator for menus and submenus.
|
5
|
+
*
|
6
|
+
* @param {Handsontable} hotMenu The Handsontable instance of the menu.
|
7
|
+
* @returns {Paginator}
|
8
|
+
*/
|
9
|
+
export function createMenuNavigator(hotMenu) {
|
10
|
+
return createPaginator({
|
11
|
+
size: () => hotMenu.countRows(),
|
12
|
+
onItemSelect(currentItem, directItemChange) {
|
13
|
+
const cell = hotMenu.getCell(currentItem, 0);
|
14
|
+
if (!cell || isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) {
|
15
|
+
return false;
|
16
|
+
}
|
17
|
+
hotMenu.selectCell(currentItem, 0, ...(directItemChange ? [currentItem, 0, false, false] : []));
|
18
|
+
},
|
19
|
+
onClear() {
|
20
|
+
hotMenu.deselectCell();
|
21
|
+
}
|
22
|
+
});
|
23
|
+
}
|
@@ -0,0 +1,213 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
exports.__esModule = true;
|
4
|
+
require("core-js/modules/es.error.cause.js");
|
5
|
+
var _cursor2 = require("./cursor");
|
6
|
+
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
7
|
+
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
8
|
+
function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
|
9
|
+
function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
|
10
|
+
function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
|
11
|
+
function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
|
12
|
+
function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
|
13
|
+
/**
|
14
|
+
* Helper class for positioning the menu and submenus in the correct place relative to the
|
15
|
+
* cursor position (DOM element or mouse coordinates).
|
16
|
+
*
|
17
|
+
* @private
|
18
|
+
* @class Positioner
|
19
|
+
*/
|
20
|
+
var _container = /*#__PURE__*/new WeakMap();
|
21
|
+
var _parentContainer = /*#__PURE__*/new WeakMap();
|
22
|
+
var _cursor = /*#__PURE__*/new WeakMap();
|
23
|
+
var _keepInViewport = /*#__PURE__*/new WeakMap();
|
24
|
+
var _offset = /*#__PURE__*/new WeakMap();
|
25
|
+
class Positioner {
|
26
|
+
constructor(keepInViewport) {
|
27
|
+
/**
|
28
|
+
* The menu container element the positioning will be applied to.
|
29
|
+
*
|
30
|
+
* @type {HTMLElement}
|
31
|
+
*/
|
32
|
+
_classPrivateFieldInitSpec(this, _container, {
|
33
|
+
writable: true,
|
34
|
+
value: void 0
|
35
|
+
});
|
36
|
+
/**
|
37
|
+
* For positioning the submenu, the parent element is used to calculate offsets to ensure that submenu
|
38
|
+
* is positioned right next to the parent menu.
|
39
|
+
*
|
40
|
+
* @type {HTMLElement}
|
41
|
+
*/
|
42
|
+
_classPrivateFieldInitSpec(this, _parentContainer, {
|
43
|
+
writable: true,
|
44
|
+
value: void 0
|
45
|
+
});
|
46
|
+
/**
|
47
|
+
* The instance of the Cursor class.
|
48
|
+
*
|
49
|
+
* @type {Cursor}
|
50
|
+
*/
|
51
|
+
_classPrivateFieldInitSpec(this, _cursor, {
|
52
|
+
writable: true,
|
53
|
+
value: void 0
|
54
|
+
});
|
55
|
+
/**
|
56
|
+
* Enabling the option allows changing the position calculation so that the menus (or submenus)
|
57
|
+
* are always placed within the visible viewport of the browser.
|
58
|
+
*
|
59
|
+
* @type {boolean}
|
60
|
+
*/
|
61
|
+
_classPrivateFieldInitSpec(this, _keepInViewport, {
|
62
|
+
writable: true,
|
63
|
+
value: false
|
64
|
+
});
|
65
|
+
/**
|
66
|
+
* Allows apply the position offset for directions.
|
67
|
+
*
|
68
|
+
* @type {{above: number, below: number, left: number, right: number}}
|
69
|
+
*/
|
70
|
+
_classPrivateFieldInitSpec(this, _offset, {
|
71
|
+
writable: true,
|
72
|
+
value: {
|
73
|
+
above: 0,
|
74
|
+
below: 0,
|
75
|
+
left: 0,
|
76
|
+
right: 0
|
77
|
+
}
|
78
|
+
});
|
79
|
+
_classPrivateFieldSet(this, _keepInViewport, keepInViewport);
|
80
|
+
}
|
81
|
+
|
82
|
+
/**
|
83
|
+
* Sets offset position for specified directions (`above`, `below`, `left` or `right`).
|
84
|
+
*
|
85
|
+
* @param {'above' | 'below' | 'left' | 'right'} direction A direction name.
|
86
|
+
* @param {number} [offset=0] Offset value.
|
87
|
+
* @returns {Positioner}
|
88
|
+
*/
|
89
|
+
setOffset(direction) {
|
90
|
+
let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
91
|
+
_classPrivateFieldGet(this, _offset)[direction] = offset;
|
92
|
+
return this;
|
93
|
+
}
|
94
|
+
|
95
|
+
/**
|
96
|
+
* Sets the menu element to work with. The element can be owned by the main menu or the submenu.
|
97
|
+
*
|
98
|
+
* @param {HTMLElement} container The menu container element.
|
99
|
+
* @returns {Positioner}
|
100
|
+
*/
|
101
|
+
setElement(container) {
|
102
|
+
_classPrivateFieldSet(this, _container, container);
|
103
|
+
return this;
|
104
|
+
}
|
105
|
+
|
106
|
+
/**
|
107
|
+
* Sets the parent menu element to work with.
|
108
|
+
*
|
109
|
+
* @param {HTMLElement} container The parent menu container element.
|
110
|
+
* @returns {Positioner}
|
111
|
+
*/
|
112
|
+
setParentElement(container) {
|
113
|
+
_classPrivateFieldSet(this, _parentContainer, container);
|
114
|
+
return this;
|
115
|
+
}
|
116
|
+
|
117
|
+
/**
|
118
|
+
* Updates the menu position.
|
119
|
+
*
|
120
|
+
* @param {object|MouseEvent} coords The literal object with `top`, `left`, `width` and `height` props or a
|
121
|
+
* mouse event object.
|
122
|
+
*/
|
123
|
+
updatePosition(coords) {
|
124
|
+
_classPrivateFieldSet(this, _cursor, new _cursor2.Cursor(coords, _classPrivateFieldGet(this, _container).ownerDocument.defaultView));
|
125
|
+
if (_classPrivateFieldGet(this, _keepInViewport)) {
|
126
|
+
if (_classPrivateFieldGet(this, _cursor).fitsBelow(_classPrivateFieldGet(this, _container))) {
|
127
|
+
this.setPositionBelowCursor();
|
128
|
+
} else if (_classPrivateFieldGet(this, _cursor).fitsAbove(_classPrivateFieldGet(this, _container))) {
|
129
|
+
this.setPositionAboveCursor();
|
130
|
+
} else {
|
131
|
+
this.setPositionBelowCursor();
|
132
|
+
}
|
133
|
+
this.updateHorizontalPosition();
|
134
|
+
} else {
|
135
|
+
this.setPositionBelowCursor();
|
136
|
+
this.setPositionOnRightOfCursor();
|
137
|
+
}
|
138
|
+
}
|
139
|
+
|
140
|
+
/**
|
141
|
+
* Updates the menu horizontal position.
|
142
|
+
*/
|
143
|
+
updateHorizontalPosition() {
|
144
|
+
if (_classPrivateFieldGet(this, _container).dir === 'rtl') {
|
145
|
+
if (_classPrivateFieldGet(this, _cursor).fitsOnLeft(_classPrivateFieldGet(this, _container))) {
|
146
|
+
this.setPositionOnLeftOfCursor();
|
147
|
+
} else {
|
148
|
+
this.setPositionOnRightOfCursor();
|
149
|
+
}
|
150
|
+
} else if (_classPrivateFieldGet(this, _cursor).fitsOnRight(_classPrivateFieldGet(this, _container))) {
|
151
|
+
this.setPositionOnRightOfCursor();
|
152
|
+
} else {
|
153
|
+
this.setPositionOnLeftOfCursor();
|
154
|
+
}
|
155
|
+
}
|
156
|
+
|
157
|
+
/**
|
158
|
+
* Sets the menu position above the cursor object.
|
159
|
+
*/
|
160
|
+
setPositionAboveCursor() {
|
161
|
+
let top = _classPrivateFieldGet(this, _offset).above + _classPrivateFieldGet(this, _cursor).top - _classPrivateFieldGet(this, _container).offsetHeight;
|
162
|
+
if (_classPrivateFieldGet(this, _parentContainer)) {
|
163
|
+
top = _classPrivateFieldGet(this, _cursor).top + _classPrivateFieldGet(this, _cursor).cellHeight - _classPrivateFieldGet(this, _container).offsetHeight + 3;
|
164
|
+
}
|
165
|
+
_classPrivateFieldGet(this, _container).style.top = `${top}px`;
|
166
|
+
}
|
167
|
+
|
168
|
+
/**
|
169
|
+
* Sets the menu position below the cursor object.
|
170
|
+
*/
|
171
|
+
setPositionBelowCursor() {
|
172
|
+
let top = _classPrivateFieldGet(this, _offset).below + _classPrivateFieldGet(this, _cursor).top + 1;
|
173
|
+
if (_classPrivateFieldGet(this, _parentContainer)) {
|
174
|
+
top = _classPrivateFieldGet(this, _cursor).top - 1;
|
175
|
+
}
|
176
|
+
_classPrivateFieldGet(this, _container).style.top = `${top}px`;
|
177
|
+
}
|
178
|
+
|
179
|
+
/**
|
180
|
+
* Sets the menu position on the right of the cursor object.
|
181
|
+
*/
|
182
|
+
setPositionOnRightOfCursor() {
|
183
|
+
let left = _classPrivateFieldGet(this, _cursor).left;
|
184
|
+
if (_classPrivateFieldGet(this, _parentContainer)) {
|
185
|
+
const {
|
186
|
+
right: parentMenuRight
|
187
|
+
} = _classPrivateFieldGet(this, _parentContainer).getBoundingClientRect();
|
188
|
+
|
189
|
+
// move the sub menu by the width of the parent's border (usually by 1-2 pixels)
|
190
|
+
left += _classPrivateFieldGet(this, _cursor).cellWidth + parentMenuRight - (_classPrivateFieldGet(this, _cursor).left + _classPrivateFieldGet(this, _cursor).cellWidth);
|
191
|
+
} else {
|
192
|
+
left += _classPrivateFieldGet(this, _offset).right;
|
193
|
+
}
|
194
|
+
_classPrivateFieldGet(this, _container).style.left = `${left}px`;
|
195
|
+
}
|
196
|
+
|
197
|
+
/**
|
198
|
+
* Sets the menu position on the left of the cursor object.
|
199
|
+
*/
|
200
|
+
setPositionOnLeftOfCursor() {
|
201
|
+
let left = _classPrivateFieldGet(this, _offset).left + _classPrivateFieldGet(this, _cursor).left - _classPrivateFieldGet(this, _container).offsetWidth;
|
202
|
+
if (_classPrivateFieldGet(this, _parentContainer)) {
|
203
|
+
const {
|
204
|
+
left: parentMenuLeft
|
205
|
+
} = _classPrivateFieldGet(this, _parentContainer).getBoundingClientRect();
|
206
|
+
|
207
|
+
// move the sub menu by the width of the parent's border (usually by 1-2 pixels)
|
208
|
+
left -= _classPrivateFieldGet(this, _cursor).left - parentMenuLeft;
|
209
|
+
}
|
210
|
+
_classPrivateFieldGet(this, _container).style.left = `${left}px`;
|
211
|
+
}
|
212
|
+
}
|
213
|
+
exports.Positioner = Positioner;
|
@@ -0,0 +1,209 @@
|
|
1
|
+
import "core-js/modules/es.error.cause.js";
|
2
|
+
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
3
|
+
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
4
|
+
function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
|
5
|
+
function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
|
6
|
+
function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
|
7
|
+
function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
|
8
|
+
function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
|
9
|
+
import { Cursor } from "./cursor.mjs";
|
10
|
+
/**
|
11
|
+
* Helper class for positioning the menu and submenus in the correct place relative to the
|
12
|
+
* cursor position (DOM element or mouse coordinates).
|
13
|
+
*
|
14
|
+
* @private
|
15
|
+
* @class Positioner
|
16
|
+
*/
|
17
|
+
var _container = /*#__PURE__*/new WeakMap();
|
18
|
+
var _parentContainer = /*#__PURE__*/new WeakMap();
|
19
|
+
var _cursor = /*#__PURE__*/new WeakMap();
|
20
|
+
var _keepInViewport = /*#__PURE__*/new WeakMap();
|
21
|
+
var _offset = /*#__PURE__*/new WeakMap();
|
22
|
+
export class Positioner {
|
23
|
+
constructor(keepInViewport) {
|
24
|
+
/**
|
25
|
+
* The menu container element the positioning will be applied to.
|
26
|
+
*
|
27
|
+
* @type {HTMLElement}
|
28
|
+
*/
|
29
|
+
_classPrivateFieldInitSpec(this, _container, {
|
30
|
+
writable: true,
|
31
|
+
value: void 0
|
32
|
+
});
|
33
|
+
/**
|
34
|
+
* For positioning the submenu, the parent element is used to calculate offsets to ensure that submenu
|
35
|
+
* is positioned right next to the parent menu.
|
36
|
+
*
|
37
|
+
* @type {HTMLElement}
|
38
|
+
*/
|
39
|
+
_classPrivateFieldInitSpec(this, _parentContainer, {
|
40
|
+
writable: true,
|
41
|
+
value: void 0
|
42
|
+
});
|
43
|
+
/**
|
44
|
+
* The instance of the Cursor class.
|
45
|
+
*
|
46
|
+
* @type {Cursor}
|
47
|
+
*/
|
48
|
+
_classPrivateFieldInitSpec(this, _cursor, {
|
49
|
+
writable: true,
|
50
|
+
value: void 0
|
51
|
+
});
|
52
|
+
/**
|
53
|
+
* Enabling the option allows changing the position calculation so that the menus (or submenus)
|
54
|
+
* are always placed within the visible viewport of the browser.
|
55
|
+
*
|
56
|
+
* @type {boolean}
|
57
|
+
*/
|
58
|
+
_classPrivateFieldInitSpec(this, _keepInViewport, {
|
59
|
+
writable: true,
|
60
|
+
value: false
|
61
|
+
});
|
62
|
+
/**
|
63
|
+
* Allows apply the position offset for directions.
|
64
|
+
*
|
65
|
+
* @type {{above: number, below: number, left: number, right: number}}
|
66
|
+
*/
|
67
|
+
_classPrivateFieldInitSpec(this, _offset, {
|
68
|
+
writable: true,
|
69
|
+
value: {
|
70
|
+
above: 0,
|
71
|
+
below: 0,
|
72
|
+
left: 0,
|
73
|
+
right: 0
|
74
|
+
}
|
75
|
+
});
|
76
|
+
_classPrivateFieldSet(this, _keepInViewport, keepInViewport);
|
77
|
+
}
|
78
|
+
|
79
|
+
/**
|
80
|
+
* Sets offset position for specified directions (`above`, `below`, `left` or `right`).
|
81
|
+
*
|
82
|
+
* @param {'above' | 'below' | 'left' | 'right'} direction A direction name.
|
83
|
+
* @param {number} [offset=0] Offset value.
|
84
|
+
* @returns {Positioner}
|
85
|
+
*/
|
86
|
+
setOffset(direction) {
|
87
|
+
let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
88
|
+
_classPrivateFieldGet(this, _offset)[direction] = offset;
|
89
|
+
return this;
|
90
|
+
}
|
91
|
+
|
92
|
+
/**
|
93
|
+
* Sets the menu element to work with. The element can be owned by the main menu or the submenu.
|
94
|
+
*
|
95
|
+
* @param {HTMLElement} container The menu container element.
|
96
|
+
* @returns {Positioner}
|
97
|
+
*/
|
98
|
+
setElement(container) {
|
99
|
+
_classPrivateFieldSet(this, _container, container);
|
100
|
+
return this;
|
101
|
+
}
|
102
|
+
|
103
|
+
/**
|
104
|
+
* Sets the parent menu element to work with.
|
105
|
+
*
|
106
|
+
* @param {HTMLElement} container The parent menu container element.
|
107
|
+
* @returns {Positioner}
|
108
|
+
*/
|
109
|
+
setParentElement(container) {
|
110
|
+
_classPrivateFieldSet(this, _parentContainer, container);
|
111
|
+
return this;
|
112
|
+
}
|
113
|
+
|
114
|
+
/**
|
115
|
+
* Updates the menu position.
|
116
|
+
*
|
117
|
+
* @param {object|MouseEvent} coords The literal object with `top`, `left`, `width` and `height` props or a
|
118
|
+
* mouse event object.
|
119
|
+
*/
|
120
|
+
updatePosition(coords) {
|
121
|
+
_classPrivateFieldSet(this, _cursor, new Cursor(coords, _classPrivateFieldGet(this, _container).ownerDocument.defaultView));
|
122
|
+
if (_classPrivateFieldGet(this, _keepInViewport)) {
|
123
|
+
if (_classPrivateFieldGet(this, _cursor).fitsBelow(_classPrivateFieldGet(this, _container))) {
|
124
|
+
this.setPositionBelowCursor();
|
125
|
+
} else if (_classPrivateFieldGet(this, _cursor).fitsAbove(_classPrivateFieldGet(this, _container))) {
|
126
|
+
this.setPositionAboveCursor();
|
127
|
+
} else {
|
128
|
+
this.setPositionBelowCursor();
|
129
|
+
}
|
130
|
+
this.updateHorizontalPosition();
|
131
|
+
} else {
|
132
|
+
this.setPositionBelowCursor();
|
133
|
+
this.setPositionOnRightOfCursor();
|
134
|
+
}
|
135
|
+
}
|
136
|
+
|
137
|
+
/**
|
138
|
+
* Updates the menu horizontal position.
|
139
|
+
*/
|
140
|
+
updateHorizontalPosition() {
|
141
|
+
if (_classPrivateFieldGet(this, _container).dir === 'rtl') {
|
142
|
+
if (_classPrivateFieldGet(this, _cursor).fitsOnLeft(_classPrivateFieldGet(this, _container))) {
|
143
|
+
this.setPositionOnLeftOfCursor();
|
144
|
+
} else {
|
145
|
+
this.setPositionOnRightOfCursor();
|
146
|
+
}
|
147
|
+
} else if (_classPrivateFieldGet(this, _cursor).fitsOnRight(_classPrivateFieldGet(this, _container))) {
|
148
|
+
this.setPositionOnRightOfCursor();
|
149
|
+
} else {
|
150
|
+
this.setPositionOnLeftOfCursor();
|
151
|
+
}
|
152
|
+
}
|
153
|
+
|
154
|
+
/**
|
155
|
+
* Sets the menu position above the cursor object.
|
156
|
+
*/
|
157
|
+
setPositionAboveCursor() {
|
158
|
+
let top = _classPrivateFieldGet(this, _offset).above + _classPrivateFieldGet(this, _cursor).top - _classPrivateFieldGet(this, _container).offsetHeight;
|
159
|
+
if (_classPrivateFieldGet(this, _parentContainer)) {
|
160
|
+
top = _classPrivateFieldGet(this, _cursor).top + _classPrivateFieldGet(this, _cursor).cellHeight - _classPrivateFieldGet(this, _container).offsetHeight + 3;
|
161
|
+
}
|
162
|
+
_classPrivateFieldGet(this, _container).style.top = `${top}px`;
|
163
|
+
}
|
164
|
+
|
165
|
+
/**
|
166
|
+
* Sets the menu position below the cursor object.
|
167
|
+
*/
|
168
|
+
setPositionBelowCursor() {
|
169
|
+
let top = _classPrivateFieldGet(this, _offset).below + _classPrivateFieldGet(this, _cursor).top + 1;
|
170
|
+
if (_classPrivateFieldGet(this, _parentContainer)) {
|
171
|
+
top = _classPrivateFieldGet(this, _cursor).top - 1;
|
172
|
+
}
|
173
|
+
_classPrivateFieldGet(this, _container).style.top = `${top}px`;
|
174
|
+
}
|
175
|
+
|
176
|
+
/**
|
177
|
+
* Sets the menu position on the right of the cursor object.
|
178
|
+
*/
|
179
|
+
setPositionOnRightOfCursor() {
|
180
|
+
let left = _classPrivateFieldGet(this, _cursor).left;
|
181
|
+
if (_classPrivateFieldGet(this, _parentContainer)) {
|
182
|
+
const {
|
183
|
+
right: parentMenuRight
|
184
|
+
} = _classPrivateFieldGet(this, _parentContainer).getBoundingClientRect();
|
185
|
+
|
186
|
+
// move the sub menu by the width of the parent's border (usually by 1-2 pixels)
|
187
|
+
left += _classPrivateFieldGet(this, _cursor).cellWidth + parentMenuRight - (_classPrivateFieldGet(this, _cursor).left + _classPrivateFieldGet(this, _cursor).cellWidth);
|
188
|
+
} else {
|
189
|
+
left += _classPrivateFieldGet(this, _offset).right;
|
190
|
+
}
|
191
|
+
_classPrivateFieldGet(this, _container).style.left = `${left}px`;
|
192
|
+
}
|
193
|
+
|
194
|
+
/**
|
195
|
+
* Sets the menu position on the left of the cursor object.
|
196
|
+
*/
|
197
|
+
setPositionOnLeftOfCursor() {
|
198
|
+
let left = _classPrivateFieldGet(this, _offset).left + _classPrivateFieldGet(this, _cursor).left - _classPrivateFieldGet(this, _container).offsetWidth;
|
199
|
+
if (_classPrivateFieldGet(this, _parentContainer)) {
|
200
|
+
const {
|
201
|
+
left: parentMenuLeft
|
202
|
+
} = _classPrivateFieldGet(this, _parentContainer).getBoundingClientRect();
|
203
|
+
|
204
|
+
// move the sub menu by the width of the parent's border (usually by 1-2 pixels)
|
205
|
+
left -= _classPrivateFieldGet(this, _cursor).left - parentMenuLeft;
|
206
|
+
}
|
207
|
+
_classPrivateFieldGet(this, _container).style.left = `${left}px`;
|
208
|
+
}
|
209
|
+
}
|