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
@@ -8,6 +8,7 @@ var _sourceSettings2 = _interopRequireDefault(require("./sourceSettings"));
|
|
8
8
|
var _headersTree2 = _interopRequireDefault(require("./headersTree"));
|
9
9
|
var _nodeModifiers = require("./nodeModifiers");
|
10
10
|
var _matrixGenerator = require("./matrixGenerator");
|
11
|
+
var _tree = require("../../../utils/dataStructures/tree");
|
11
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
12
13
|
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
13
14
|
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
@@ -317,6 +318,23 @@ class StateManager {
|
|
317
318
|
* @returns {object|null}
|
318
319
|
*/
|
319
320
|
getHeaderTreeNodeData(headerLevel, columnIndex) {
|
321
|
+
const node = this.getHeaderTreeNode(headerLevel, columnIndex);
|
322
|
+
if (!node) {
|
323
|
+
return null;
|
324
|
+
}
|
325
|
+
return {
|
326
|
+
...node.data
|
327
|
+
};
|
328
|
+
}
|
329
|
+
|
330
|
+
/**
|
331
|
+
* Gets tree node that is connected to the column header.
|
332
|
+
*
|
333
|
+
* @param {number} headerLevel Header level (there is support for negative and positive values).
|
334
|
+
* @param {number} columnIndex A visual column index.
|
335
|
+
* @returns {TreeNode|null}
|
336
|
+
*/
|
337
|
+
getHeaderTreeNode(headerLevel, columnIndex) {
|
320
338
|
if (headerLevel < 0) {
|
321
339
|
headerLevel = this.rowCoordsToLevel(headerLevel);
|
322
340
|
}
|
@@ -327,9 +345,53 @@ class StateManager {
|
|
327
345
|
if (!node) {
|
328
346
|
return null;
|
329
347
|
}
|
330
|
-
return
|
331
|
-
|
332
|
-
|
348
|
+
return node;
|
349
|
+
}
|
350
|
+
|
351
|
+
/**
|
352
|
+
* Finds the most top header level of the column header that is rendered entirely within
|
353
|
+
* the passed visual columns range. If multiple columns headers are found within the range the
|
354
|
+
* most top header level value will be returned.
|
355
|
+
*
|
356
|
+
* @param {number} columnIndexFrom A visual column index.
|
357
|
+
* @param {number} [columnIndexTo] A visual column index.
|
358
|
+
* @returns {number} Returns a header level in format -1 to -N.
|
359
|
+
*/
|
360
|
+
findTopMostEntireHeaderLevel(columnIndexFrom) {
|
361
|
+
var _headerLevel;
|
362
|
+
let columnIndexTo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : columnIndexFrom;
|
363
|
+
const columnsWidth = columnIndexTo - columnIndexFrom + 1;
|
364
|
+
let atLeastOneRootFound = false;
|
365
|
+
let headerLevel = null;
|
366
|
+
for (let columnIndex = columnIndexFrom; columnIndex <= columnIndexTo; columnIndex++) {
|
367
|
+
const rootNode = _classPrivateFieldGet(this, _headersTree).getRootByColumn(columnIndex);
|
368
|
+
if (!rootNode) {
|
369
|
+
break;
|
370
|
+
}
|
371
|
+
atLeastOneRootFound = true;
|
372
|
+
|
373
|
+
// eslint-disable-next-line
|
374
|
+
rootNode.walkDown(node => {
|
375
|
+
const {
|
376
|
+
columnIndex: nodeColumnIndex,
|
377
|
+
headerLevel: nodeHeaderLevel,
|
378
|
+
origColspan,
|
379
|
+
isHidden
|
380
|
+
} = node.data;
|
381
|
+
if (isHidden) {
|
382
|
+
return;
|
383
|
+
}
|
384
|
+
|
385
|
+
// if the header fits entirely within the columns range get and save the node header level
|
386
|
+
if (origColspan <= columnsWidth && nodeColumnIndex >= columnIndexFrom && nodeColumnIndex + origColspan - 1 <= columnIndexTo && (headerLevel === null || nodeHeaderLevel < headerLevel)) {
|
387
|
+
headerLevel = nodeHeaderLevel;
|
388
|
+
}
|
389
|
+
}, _tree.TRAVERSAL_DF_PRE);
|
390
|
+
}
|
391
|
+
if (atLeastOneRootFound && headerLevel === null) {
|
392
|
+
return -1;
|
393
|
+
}
|
394
|
+
return this.levelToRowCoords((_headerLevel = headerLevel) !== null && _headerLevel !== void 0 ? _headerLevel : 0);
|
333
395
|
}
|
334
396
|
|
335
397
|
/**
|
@@ -367,6 +429,43 @@ class StateManager {
|
|
367
429
|
return stepBackColumn;
|
368
430
|
}
|
369
431
|
|
432
|
+
/**
|
433
|
+
* The method is helpful in cases where the column index targets in-between currently
|
434
|
+
* collapsed column. In that case, the method returns the right-most column index
|
435
|
+
* where the nested header ends.
|
436
|
+
*
|
437
|
+
* @param {number} headerLevel Header level (there is support for negative and positive values).
|
438
|
+
* @param {number} columnIndex A visual column index.
|
439
|
+
* @returns {number}
|
440
|
+
*/
|
441
|
+
findRightMostColumnIndex(headerLevel, columnIndex) {
|
442
|
+
var _this$getHeaderSettin3;
|
443
|
+
const {
|
444
|
+
isRoot,
|
445
|
+
origColspan
|
446
|
+
} = (_this$getHeaderSettin3 = this.getHeaderSettings(headerLevel, columnIndex)) !== null && _this$getHeaderSettin3 !== void 0 ? _this$getHeaderSettin3 : {
|
447
|
+
isRoot: true,
|
448
|
+
origColspan: 1
|
449
|
+
};
|
450
|
+
if (isRoot) {
|
451
|
+
return columnIndex + origColspan - 1;
|
452
|
+
}
|
453
|
+
let stepForthColumn = columnIndex + 1;
|
454
|
+
while (stepForthColumn < this.getColumnsCount()) {
|
455
|
+
var _this$getHeaderSettin4;
|
456
|
+
const {
|
457
|
+
isRoot: isRootNode
|
458
|
+
} = (_this$getHeaderSettin4 = this.getHeaderSettings(headerLevel, stepForthColumn)) !== null && _this$getHeaderSettin4 !== void 0 ? _this$getHeaderSettin4 : {
|
459
|
+
isRoot: true
|
460
|
+
};
|
461
|
+
if (isRootNode) {
|
462
|
+
break;
|
463
|
+
}
|
464
|
+
stepForthColumn += 1;
|
465
|
+
}
|
466
|
+
return stepForthColumn - 1;
|
467
|
+
}
|
468
|
+
|
370
469
|
/**
|
371
470
|
* Gets a total number of headers levels.
|
372
471
|
*
|
@@ -12,6 +12,7 @@ import SourceSettings from "./sourceSettings.mjs";
|
|
12
12
|
import HeadersTree from "./headersTree.mjs";
|
13
13
|
import { triggerNodeModification } from "./nodeModifiers/index.mjs";
|
14
14
|
import { generateMatrix } from "./matrixGenerator.mjs";
|
15
|
+
import { TRAVERSAL_DF_PRE } from "../../../utils/dataStructures/tree.mjs";
|
15
16
|
/**
|
16
17
|
* The state manager is a source of truth for nested headers configuration.
|
17
18
|
* The state generation process is divided into three stages.
|
@@ -313,6 +314,23 @@ export default class StateManager {
|
|
313
314
|
* @returns {object|null}
|
314
315
|
*/
|
315
316
|
getHeaderTreeNodeData(headerLevel, columnIndex) {
|
317
|
+
const node = this.getHeaderTreeNode(headerLevel, columnIndex);
|
318
|
+
if (!node) {
|
319
|
+
return null;
|
320
|
+
}
|
321
|
+
return {
|
322
|
+
...node.data
|
323
|
+
};
|
324
|
+
}
|
325
|
+
|
326
|
+
/**
|
327
|
+
* Gets tree node that is connected to the column header.
|
328
|
+
*
|
329
|
+
* @param {number} headerLevel Header level (there is support for negative and positive values).
|
330
|
+
* @param {number} columnIndex A visual column index.
|
331
|
+
* @returns {TreeNode|null}
|
332
|
+
*/
|
333
|
+
getHeaderTreeNode(headerLevel, columnIndex) {
|
316
334
|
if (headerLevel < 0) {
|
317
335
|
headerLevel = this.rowCoordsToLevel(headerLevel);
|
318
336
|
}
|
@@ -323,9 +341,53 @@ export default class StateManager {
|
|
323
341
|
if (!node) {
|
324
342
|
return null;
|
325
343
|
}
|
326
|
-
return
|
327
|
-
|
328
|
-
|
344
|
+
return node;
|
345
|
+
}
|
346
|
+
|
347
|
+
/**
|
348
|
+
* Finds the most top header level of the column header that is rendered entirely within
|
349
|
+
* the passed visual columns range. If multiple columns headers are found within the range the
|
350
|
+
* most top header level value will be returned.
|
351
|
+
*
|
352
|
+
* @param {number} columnIndexFrom A visual column index.
|
353
|
+
* @param {number} [columnIndexTo] A visual column index.
|
354
|
+
* @returns {number} Returns a header level in format -1 to -N.
|
355
|
+
*/
|
356
|
+
findTopMostEntireHeaderLevel(columnIndexFrom) {
|
357
|
+
var _headerLevel;
|
358
|
+
let columnIndexTo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : columnIndexFrom;
|
359
|
+
const columnsWidth = columnIndexTo - columnIndexFrom + 1;
|
360
|
+
let atLeastOneRootFound = false;
|
361
|
+
let headerLevel = null;
|
362
|
+
for (let columnIndex = columnIndexFrom; columnIndex <= columnIndexTo; columnIndex++) {
|
363
|
+
const rootNode = _classPrivateFieldGet(this, _headersTree).getRootByColumn(columnIndex);
|
364
|
+
if (!rootNode) {
|
365
|
+
break;
|
366
|
+
}
|
367
|
+
atLeastOneRootFound = true;
|
368
|
+
|
369
|
+
// eslint-disable-next-line
|
370
|
+
rootNode.walkDown(node => {
|
371
|
+
const {
|
372
|
+
columnIndex: nodeColumnIndex,
|
373
|
+
headerLevel: nodeHeaderLevel,
|
374
|
+
origColspan,
|
375
|
+
isHidden
|
376
|
+
} = node.data;
|
377
|
+
if (isHidden) {
|
378
|
+
return;
|
379
|
+
}
|
380
|
+
|
381
|
+
// if the header fits entirely within the columns range get and save the node header level
|
382
|
+
if (origColspan <= columnsWidth && nodeColumnIndex >= columnIndexFrom && nodeColumnIndex + origColspan - 1 <= columnIndexTo && (headerLevel === null || nodeHeaderLevel < headerLevel)) {
|
383
|
+
headerLevel = nodeHeaderLevel;
|
384
|
+
}
|
385
|
+
}, TRAVERSAL_DF_PRE);
|
386
|
+
}
|
387
|
+
if (atLeastOneRootFound && headerLevel === null) {
|
388
|
+
return -1;
|
389
|
+
}
|
390
|
+
return this.levelToRowCoords((_headerLevel = headerLevel) !== null && _headerLevel !== void 0 ? _headerLevel : 0);
|
329
391
|
}
|
330
392
|
|
331
393
|
/**
|
@@ -363,6 +425,43 @@ export default class StateManager {
|
|
363
425
|
return stepBackColumn;
|
364
426
|
}
|
365
427
|
|
428
|
+
/**
|
429
|
+
* The method is helpful in cases where the column index targets in-between currently
|
430
|
+
* collapsed column. In that case, the method returns the right-most column index
|
431
|
+
* where the nested header ends.
|
432
|
+
*
|
433
|
+
* @param {number} headerLevel Header level (there is support for negative and positive values).
|
434
|
+
* @param {number} columnIndex A visual column index.
|
435
|
+
* @returns {number}
|
436
|
+
*/
|
437
|
+
findRightMostColumnIndex(headerLevel, columnIndex) {
|
438
|
+
var _this$getHeaderSettin3;
|
439
|
+
const {
|
440
|
+
isRoot,
|
441
|
+
origColspan
|
442
|
+
} = (_this$getHeaderSettin3 = this.getHeaderSettings(headerLevel, columnIndex)) !== null && _this$getHeaderSettin3 !== void 0 ? _this$getHeaderSettin3 : {
|
443
|
+
isRoot: true,
|
444
|
+
origColspan: 1
|
445
|
+
};
|
446
|
+
if (isRoot) {
|
447
|
+
return columnIndex + origColspan - 1;
|
448
|
+
}
|
449
|
+
let stepForthColumn = columnIndex + 1;
|
450
|
+
while (stepForthColumn < this.getColumnsCount()) {
|
451
|
+
var _this$getHeaderSettin4;
|
452
|
+
const {
|
453
|
+
isRoot: isRootNode
|
454
|
+
} = (_this$getHeaderSettin4 = this.getHeaderSettings(headerLevel, stepForthColumn)) !== null && _this$getHeaderSettin4 !== void 0 ? _this$getHeaderSettin4 : {
|
455
|
+
isRoot: true
|
456
|
+
};
|
457
|
+
if (isRootNode) {
|
458
|
+
break;
|
459
|
+
}
|
460
|
+
stepForthColumn += 1;
|
461
|
+
}
|
462
|
+
return stepForthColumn - 1;
|
463
|
+
}
|
464
|
+
|
366
465
|
/**
|
367
466
|
* Gets a total number of headers levels.
|
368
467
|
*
|
@@ -16,6 +16,7 @@ const PLUGIN_KEY = 'nestedRows';
|
|
16
16
|
exports.PLUGIN_KEY = PLUGIN_KEY;
|
17
17
|
const PLUGIN_PRIORITY = 300;
|
18
18
|
exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
|
19
|
+
const SHORTCUTS_GROUP = PLUGIN_KEY;
|
19
20
|
const privatePool = new WeakMap();
|
20
21
|
|
21
22
|
/* eslint-disable jsdoc/require-description-complete-sentence */
|
@@ -150,6 +151,7 @@ class NestedRows extends _base.BasePlugin {
|
|
150
151
|
});
|
151
152
|
this.addHook('beforeLoadData', data => this.onBeforeLoadData(data));
|
152
153
|
this.addHook('beforeUpdateData', data => this.onBeforeLoadData(data));
|
154
|
+
this.registerShortcuts();
|
153
155
|
super.enablePlugin();
|
154
156
|
}
|
155
157
|
|
@@ -158,6 +160,7 @@ class NestedRows extends _base.BasePlugin {
|
|
158
160
|
*/
|
159
161
|
disablePlugin() {
|
160
162
|
this.hot.rowIndexMapper.unregisterMap('nestedRows');
|
163
|
+
this.unregisterShortcuts();
|
161
164
|
super.disablePlugin();
|
162
165
|
}
|
163
166
|
|
@@ -179,6 +182,44 @@ class NestedRows extends _base.BasePlugin {
|
|
179
182
|
super.updatePlugin();
|
180
183
|
}
|
181
184
|
|
185
|
+
/**
|
186
|
+
* Register shortcuts responsible for toggling collapsible columns.
|
187
|
+
*
|
188
|
+
* @private
|
189
|
+
*/
|
190
|
+
registerShortcuts() {
|
191
|
+
this.hot.getShortcutManager().getContext('grid').addShortcut({
|
192
|
+
keys: [['Enter']],
|
193
|
+
callback: () => {
|
194
|
+
const {
|
195
|
+
highlight
|
196
|
+
} = this.hot.getSelectedRangeLast();
|
197
|
+
if (highlight.col === -1 && highlight.row >= 0) {
|
198
|
+
const row = this.collapsingUI.translateTrimmedRow(highlight.row);
|
199
|
+
if (this.collapsingUI.areChildrenCollapsed(row)) {
|
200
|
+
this.collapsingUI.expandChildren(row);
|
201
|
+
} else {
|
202
|
+
this.collapsingUI.collapseChildren(row);
|
203
|
+
}
|
204
|
+
}
|
205
|
+
},
|
206
|
+
runOnlyIf: () => {
|
207
|
+
var _this$hot$getSelected;
|
208
|
+
return (_this$hot$getSelected = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected === void 0 ? void 0 : _this$hot$getSelected.highlight.isHeader();
|
209
|
+
},
|
210
|
+
group: SHORTCUTS_GROUP
|
211
|
+
});
|
212
|
+
}
|
213
|
+
|
214
|
+
/**
|
215
|
+
* Unregister shortcuts responsible for toggling collapsible columns.
|
216
|
+
*
|
217
|
+
* @private
|
218
|
+
*/
|
219
|
+
unregisterShortcuts() {
|
220
|
+
this.hot.getShortcutManager().getContext('grid').removeShortcutsByGroup(SHORTCUTS_GROUP);
|
221
|
+
}
|
222
|
+
|
182
223
|
/**
|
183
224
|
* `beforeRowMove` hook callback.
|
184
225
|
*
|
@@ -10,6 +10,7 @@ import { TrimmingMap } from "../../translations/index.mjs";
|
|
10
10
|
import RowMoveController from "./utils/rowMoveController.mjs";
|
11
11
|
export const PLUGIN_KEY = 'nestedRows';
|
12
12
|
export const PLUGIN_PRIORITY = 300;
|
13
|
+
const SHORTCUTS_GROUP = PLUGIN_KEY;
|
13
14
|
const privatePool = new WeakMap();
|
14
15
|
|
15
16
|
/* eslint-disable jsdoc/require-description-complete-sentence */
|
@@ -144,6 +145,7 @@ export class NestedRows extends BasePlugin {
|
|
144
145
|
});
|
145
146
|
this.addHook('beforeLoadData', data => this.onBeforeLoadData(data));
|
146
147
|
this.addHook('beforeUpdateData', data => this.onBeforeLoadData(data));
|
148
|
+
this.registerShortcuts();
|
147
149
|
super.enablePlugin();
|
148
150
|
}
|
149
151
|
|
@@ -152,6 +154,7 @@ export class NestedRows extends BasePlugin {
|
|
152
154
|
*/
|
153
155
|
disablePlugin() {
|
154
156
|
this.hot.rowIndexMapper.unregisterMap('nestedRows');
|
157
|
+
this.unregisterShortcuts();
|
155
158
|
super.disablePlugin();
|
156
159
|
}
|
157
160
|
|
@@ -173,6 +176,44 @@ export class NestedRows extends BasePlugin {
|
|
173
176
|
super.updatePlugin();
|
174
177
|
}
|
175
178
|
|
179
|
+
/**
|
180
|
+
* Register shortcuts responsible for toggling collapsible columns.
|
181
|
+
*
|
182
|
+
* @private
|
183
|
+
*/
|
184
|
+
registerShortcuts() {
|
185
|
+
this.hot.getShortcutManager().getContext('grid').addShortcut({
|
186
|
+
keys: [['Enter']],
|
187
|
+
callback: () => {
|
188
|
+
const {
|
189
|
+
highlight
|
190
|
+
} = this.hot.getSelectedRangeLast();
|
191
|
+
if (highlight.col === -1 && highlight.row >= 0) {
|
192
|
+
const row = this.collapsingUI.translateTrimmedRow(highlight.row);
|
193
|
+
if (this.collapsingUI.areChildrenCollapsed(row)) {
|
194
|
+
this.collapsingUI.expandChildren(row);
|
195
|
+
} else {
|
196
|
+
this.collapsingUI.collapseChildren(row);
|
197
|
+
}
|
198
|
+
}
|
199
|
+
},
|
200
|
+
runOnlyIf: () => {
|
201
|
+
var _this$hot$getSelected;
|
202
|
+
return (_this$hot$getSelected = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected === void 0 ? void 0 : _this$hot$getSelected.highlight.isHeader();
|
203
|
+
},
|
204
|
+
group: SHORTCUTS_GROUP
|
205
|
+
});
|
206
|
+
}
|
207
|
+
|
208
|
+
/**
|
209
|
+
* Unregister shortcuts responsible for toggling collapsible columns.
|
210
|
+
*
|
211
|
+
* @private
|
212
|
+
*/
|
213
|
+
unregisterShortcuts() {
|
214
|
+
this.hot.getShortcutManager().getContext('grid').removeShortcutsByGroup(SHORTCUTS_GROUP);
|
215
|
+
}
|
216
|
+
|
176
217
|
/**
|
177
218
|
* `beforeRowMove` hook callback.
|
178
219
|
*
|
@@ -5,6 +5,7 @@ var _array = require("../../../helpers/array");
|
|
5
5
|
var _number = require("../../../helpers/number");
|
6
6
|
var _element = require("../../../helpers/dom/element");
|
7
7
|
var _base = _interopRequireDefault(require("./_base"));
|
8
|
+
var _a11y = require("../../../helpers/a11y");
|
8
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
9
10
|
/**
|
10
11
|
* Class responsible for the UI in the Nested Rows' row headers.
|
@@ -72,6 +73,7 @@ class HeadersUI extends _base.default {
|
|
72
73
|
const innerDiv = TH.getElementsByTagName('DIV')[0];
|
73
74
|
const innerSpan = innerDiv.querySelector('span.rowHeader');
|
74
75
|
const previousIndicators = innerDiv.querySelectorAll('[class^="ht_nesting"]');
|
76
|
+
const ariaEnabled = this.hot.getSettings().ariaTags;
|
75
77
|
(0, _array.arrayEach)(previousIndicators, elem => {
|
76
78
|
if (elem) {
|
77
79
|
innerDiv.removeChild(elem);
|
@@ -93,11 +95,20 @@ class HeadersUI extends _base.default {
|
|
93
95
|
}
|
94
96
|
if (this.dataManager.hasChildren(rowObject)) {
|
95
97
|
const buttonsContainer = this.hot.rootDocument.createElement('DIV');
|
98
|
+
if (ariaEnabled) {
|
99
|
+
(0, _element.setAttribute)(buttonsContainer, [(0, _a11y.A11Y_HIDDEN)()]);
|
100
|
+
}
|
96
101
|
(0, _element.addClass)(TH, HeadersUI.CSS_CLASSES.parent);
|
97
102
|
if (this.collapsingUI.areChildrenCollapsed(rowIndex)) {
|
98
103
|
(0, _element.addClass)(buttonsContainer, `${HeadersUI.CSS_CLASSES.button} ${HeadersUI.CSS_CLASSES.expandButton}`);
|
104
|
+
if (ariaEnabled) {
|
105
|
+
(0, _element.setAttribute)(TH, [(0, _a11y.A11Y_EXPANDED)(false)]);
|
106
|
+
}
|
99
107
|
} else {
|
100
108
|
(0, _element.addClass)(buttonsContainer, `${HeadersUI.CSS_CLASSES.button} ${HeadersUI.CSS_CLASSES.collapseButton}`);
|
109
|
+
if (ariaEnabled) {
|
110
|
+
(0, _element.setAttribute)(TH, [(0, _a11y.A11Y_EXPANDED)(true)]);
|
111
|
+
}
|
101
112
|
}
|
102
113
|
innerDiv.appendChild(buttonsContainer);
|
103
114
|
}
|
@@ -1,7 +1,8 @@
|
|
1
1
|
import { arrayEach } from "../../../helpers/array.mjs";
|
2
2
|
import { rangeEach } from "../../../helpers/number.mjs";
|
3
|
-
import { addClass } from "../../../helpers/dom/element.mjs";
|
3
|
+
import { addClass, setAttribute } from "../../../helpers/dom/element.mjs";
|
4
4
|
import BaseUI from "./_base.mjs";
|
5
|
+
import { A11Y_EXPANDED, A11Y_HIDDEN } from "../../../helpers/a11y.mjs";
|
5
6
|
/**
|
6
7
|
* Class responsible for the UI in the Nested Rows' row headers.
|
7
8
|
*
|
@@ -68,6 +69,7 @@ class HeadersUI extends BaseUI {
|
|
68
69
|
const innerDiv = TH.getElementsByTagName('DIV')[0];
|
69
70
|
const innerSpan = innerDiv.querySelector('span.rowHeader');
|
70
71
|
const previousIndicators = innerDiv.querySelectorAll('[class^="ht_nesting"]');
|
72
|
+
const ariaEnabled = this.hot.getSettings().ariaTags;
|
71
73
|
arrayEach(previousIndicators, elem => {
|
72
74
|
if (elem) {
|
73
75
|
innerDiv.removeChild(elem);
|
@@ -89,11 +91,20 @@ class HeadersUI extends BaseUI {
|
|
89
91
|
}
|
90
92
|
if (this.dataManager.hasChildren(rowObject)) {
|
91
93
|
const buttonsContainer = this.hot.rootDocument.createElement('DIV');
|
94
|
+
if (ariaEnabled) {
|
95
|
+
setAttribute(buttonsContainer, [A11Y_HIDDEN()]);
|
96
|
+
}
|
92
97
|
addClass(TH, HeadersUI.CSS_CLASSES.parent);
|
93
98
|
if (this.collapsingUI.areChildrenCollapsed(rowIndex)) {
|
94
99
|
addClass(buttonsContainer, `${HeadersUI.CSS_CLASSES.button} ${HeadersUI.CSS_CLASSES.expandButton}`);
|
100
|
+
if (ariaEnabled) {
|
101
|
+
setAttribute(TH, [A11Y_EXPANDED(false)]);
|
102
|
+
}
|
95
103
|
} else {
|
96
104
|
addClass(buttonsContainer, `${HeadersUI.CSS_CLASSES.button} ${HeadersUI.CSS_CLASSES.collapseButton}`);
|
105
|
+
if (ariaEnabled) {
|
106
|
+
setAttribute(TH, [A11Y_EXPANDED(true)]);
|
107
|
+
}
|
97
108
|
}
|
98
109
|
innerDiv.appendChild(buttonsContainer);
|
99
110
|
}
|
@@ -6,6 +6,7 @@ var _htmlRenderer = require("../htmlRenderer");
|
|
6
6
|
var _textRenderer = require("../textRenderer");
|
7
7
|
var _eventManager = _interopRequireDefault(require("../../eventManager"));
|
8
8
|
var _element = require("../../helpers/dom/element");
|
9
|
+
var _a11y = require("../../helpers/a11y");
|
9
10
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
10
11
|
const RENDERER_TYPE = 'autocomplete';
|
11
12
|
|
@@ -28,7 +29,11 @@ function autocompleteRenderer(instance, TD, row, col, prop, value, cellPropertie
|
|
28
29
|
} = instance;
|
29
30
|
const rendererFunc = cellProperties.allowHtml ? _htmlRenderer.htmlRenderer : _textRenderer.textRenderer;
|
30
31
|
const ARROW = rootDocument.createElement('DIV');
|
32
|
+
const isAriaEnabled = instance.getSettings().ariaTags;
|
31
33
|
ARROW.className = 'htAutocompleteArrow';
|
34
|
+
if (isAriaEnabled) {
|
35
|
+
ARROW.setAttribute(...(0, _a11y.A11Y_HIDDEN)());
|
36
|
+
}
|
32
37
|
ARROW.appendChild(rootDocument.createTextNode(String.fromCharCode(9660)));
|
33
38
|
rendererFunc.apply(this, [instance, TD, row, col, prop, value, cellProperties]);
|
34
39
|
if (!TD.firstChild) {
|
@@ -40,6 +45,9 @@ function autocompleteRenderer(instance, TD, row, col, prop, value, cellPropertie
|
|
40
45
|
|
41
46
|
TD.insertBefore(ARROW, TD.firstChild);
|
42
47
|
(0, _element.addClass)(TD, 'htAutocomplete');
|
48
|
+
if (isAriaEnabled) {
|
49
|
+
TD.setAttribute(...(0, _a11y.A11Y_HASPOPUP)('listbox'));
|
50
|
+
}
|
43
51
|
if (!instance.acArrowListener) {
|
44
52
|
const eventManager = new _eventManager.default(instance);
|
45
53
|
|
@@ -2,6 +2,7 @@ import { htmlRenderer } from "../htmlRenderer/index.mjs";
|
|
2
2
|
import { textRenderer } from "../textRenderer/index.mjs";
|
3
3
|
import EventManager from "../../eventManager.mjs";
|
4
4
|
import { addClass, hasClass } from "../../helpers/dom/element.mjs";
|
5
|
+
import { A11Y_HASPOPUP, A11Y_HIDDEN } from "../../helpers/a11y.mjs";
|
5
6
|
export const RENDERER_TYPE = 'autocomplete';
|
6
7
|
|
7
8
|
/**
|
@@ -22,7 +23,11 @@ export function autocompleteRenderer(instance, TD, row, col, prop, value, cellPr
|
|
22
23
|
} = instance;
|
23
24
|
const rendererFunc = cellProperties.allowHtml ? htmlRenderer : textRenderer;
|
24
25
|
const ARROW = rootDocument.createElement('DIV');
|
26
|
+
const isAriaEnabled = instance.getSettings().ariaTags;
|
25
27
|
ARROW.className = 'htAutocompleteArrow';
|
28
|
+
if (isAriaEnabled) {
|
29
|
+
ARROW.setAttribute(...A11Y_HIDDEN());
|
30
|
+
}
|
26
31
|
ARROW.appendChild(rootDocument.createTextNode(String.fromCharCode(9660)));
|
27
32
|
rendererFunc.apply(this, [instance, TD, row, col, prop, value, cellProperties]);
|
28
33
|
if (!TD.firstChild) {
|
@@ -34,6 +39,9 @@ export function autocompleteRenderer(instance, TD, row, col, prop, value, cellPr
|
|
34
39
|
|
35
40
|
TD.insertBefore(ARROW, TD.firstChild);
|
36
41
|
addClass(TD, 'htAutocomplete');
|
42
|
+
if (isAriaEnabled) {
|
43
|
+
TD.setAttribute(...A11Y_HASPOPUP('listbox'));
|
44
|
+
}
|
37
45
|
if (!instance.acArrowListener) {
|
38
46
|
const eventManager = new EventManager(instance);
|
39
47
|
|
@@ -4,6 +4,7 @@ exports.__esModule = true;
|
|
4
4
|
exports.baseRenderer = baseRenderer;
|
5
5
|
require("core-js/modules/es.array.push.js");
|
6
6
|
var _element = require("../../helpers/dom/element");
|
7
|
+
var _a11y = require("../../helpers/a11y");
|
7
8
|
/**
|
8
9
|
* Adds appropriate CSS class to table cell, based on cellProperties.
|
9
10
|
*/
|
@@ -21,18 +22,32 @@ const RENDERER_TYPE = 'base';
|
|
21
22
|
*/
|
22
23
|
exports.RENDERER_TYPE = RENDERER_TYPE;
|
23
24
|
function baseRenderer(instance, TD, row, col, prop, value, cellProperties) {
|
25
|
+
const ariaEnabled = cellProperties.ariaTags;
|
24
26
|
const classesToAdd = [];
|
25
27
|
const classesToRemove = [];
|
28
|
+
const attributesToRemove = [];
|
29
|
+
const attributesToAdd = [];
|
26
30
|
if (cellProperties.className) {
|
27
31
|
(0, _element.addClass)(TD, cellProperties.className);
|
28
32
|
}
|
29
33
|
if (cellProperties.readOnly) {
|
30
34
|
classesToAdd.push(cellProperties.readOnlyCellClassName);
|
35
|
+
if (ariaEnabled) {
|
36
|
+
attributesToAdd.push((0, _a11y.A11Y_READONLY)());
|
37
|
+
}
|
38
|
+
} else if (ariaEnabled) {
|
39
|
+
attributesToRemove.push((0, _a11y.A11Y_READONLY)()[0]);
|
31
40
|
}
|
32
41
|
if (cellProperties.valid === false && cellProperties.invalidCellClassName) {
|
33
42
|
classesToAdd.push(cellProperties.invalidCellClassName);
|
43
|
+
if (ariaEnabled) {
|
44
|
+
attributesToAdd.push((0, _a11y.A11Y_INVALID)());
|
45
|
+
}
|
34
46
|
} else {
|
35
47
|
classesToRemove.push(cellProperties.invalidCellClassName);
|
48
|
+
if (ariaEnabled) {
|
49
|
+
attributesToRemove.push((0, _a11y.A11Y_INVALID)()[0]);
|
50
|
+
}
|
36
51
|
}
|
37
52
|
if (cellProperties.wordWrap === false && cellProperties.noWordWrapClassName) {
|
38
53
|
classesToAdd.push(cellProperties.noWordWrapClassName);
|
@@ -42,5 +57,7 @@ function baseRenderer(instance, TD, row, col, prop, value, cellProperties) {
|
|
42
57
|
}
|
43
58
|
(0, _element.removeClass)(TD, classesToRemove);
|
44
59
|
(0, _element.addClass)(TD, classesToAdd);
|
60
|
+
(0, _element.removeAttribute)(TD, attributesToRemove);
|
61
|
+
(0, _element.setAttribute)(TD, attributesToAdd);
|
45
62
|
}
|
46
63
|
baseRenderer.RENDERER_TYPE = RENDERER_TYPE;
|
@@ -2,7 +2,8 @@ import "core-js/modules/es.array.push.js";
|
|
2
2
|
/**
|
3
3
|
* Adds appropriate CSS class to table cell, based on cellProperties.
|
4
4
|
*/
|
5
|
-
import { addClass, removeClass } from "../../helpers/dom/element.mjs";
|
5
|
+
import { addClass, removeAttribute, removeClass, setAttribute } from "../../helpers/dom/element.mjs";
|
6
|
+
import { A11Y_INVALID, A11Y_READONLY } from "../../helpers/a11y.mjs";
|
6
7
|
export const RENDERER_TYPE = 'base';
|
7
8
|
|
8
9
|
/**
|
@@ -15,18 +16,32 @@ export const RENDERER_TYPE = 'base';
|
|
15
16
|
* @param {object} cellProperties The cell meta object ({@see Core#getCellMeta}).
|
16
17
|
*/
|
17
18
|
export function baseRenderer(instance, TD, row, col, prop, value, cellProperties) {
|
19
|
+
const ariaEnabled = cellProperties.ariaTags;
|
18
20
|
const classesToAdd = [];
|
19
21
|
const classesToRemove = [];
|
22
|
+
const attributesToRemove = [];
|
23
|
+
const attributesToAdd = [];
|
20
24
|
if (cellProperties.className) {
|
21
25
|
addClass(TD, cellProperties.className);
|
22
26
|
}
|
23
27
|
if (cellProperties.readOnly) {
|
24
28
|
classesToAdd.push(cellProperties.readOnlyCellClassName);
|
29
|
+
if (ariaEnabled) {
|
30
|
+
attributesToAdd.push(A11Y_READONLY());
|
31
|
+
}
|
32
|
+
} else if (ariaEnabled) {
|
33
|
+
attributesToRemove.push(A11Y_READONLY()[0]);
|
25
34
|
}
|
26
35
|
if (cellProperties.valid === false && cellProperties.invalidCellClassName) {
|
27
36
|
classesToAdd.push(cellProperties.invalidCellClassName);
|
37
|
+
if (ariaEnabled) {
|
38
|
+
attributesToAdd.push(A11Y_INVALID());
|
39
|
+
}
|
28
40
|
} else {
|
29
41
|
classesToRemove.push(cellProperties.invalidCellClassName);
|
42
|
+
if (ariaEnabled) {
|
43
|
+
attributesToRemove.push(A11Y_INVALID()[0]);
|
44
|
+
}
|
30
45
|
}
|
31
46
|
if (cellProperties.wordWrap === false && cellProperties.noWordWrapClassName) {
|
32
47
|
classesToAdd.push(cellProperties.noWordWrapClassName);
|
@@ -36,5 +51,7 @@ export function baseRenderer(instance, TD, row, col, prop, value, cellProperties
|
|
36
51
|
}
|
37
52
|
removeClass(TD, classesToRemove);
|
38
53
|
addClass(TD, classesToAdd);
|
54
|
+
removeAttribute(TD, attributesToRemove);
|
55
|
+
setAttribute(TD, attributesToAdd);
|
39
56
|
}
|
40
57
|
baseRenderer.RENDERER_TYPE = RENDERER_TYPE;
|
@@ -7,8 +7,10 @@ var _baseRenderer = require("../baseRenderer");
|
|
7
7
|
var _eventManager = _interopRequireDefault(require("../../eventManager"));
|
8
8
|
var _element = require("../../helpers/dom/element");
|
9
9
|
var _mixed = require("../../helpers/mixed");
|
10
|
-
var
|
10
|
+
var _shortcutContexts = require("../../shortcutContexts");
|
11
11
|
var _pluginHooks = _interopRequireDefault(require("../../pluginHooks"));
|
12
|
+
var _a11y = require("../../helpers/a11y");
|
13
|
+
var _constants = require("../../i18n/constants");
|
12
14
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
13
15
|
const isListeningKeyDownEvent = new WeakMap();
|
14
16
|
const isCheckboxListenerAdded = new WeakMap();
|
@@ -61,6 +63,7 @@ function checkboxRenderer(instance, TD, row, col, prop, value, cellProperties) {
|
|
61
63
|
const {
|
62
64
|
rootDocument
|
63
65
|
} = instance;
|
66
|
+
const ariaEnabled = instance.getSettings().ariaTags;
|
64
67
|
_baseRenderer.baseRenderer.apply(this, [instance, TD, row, col, prop, value, cellProperties]);
|
65
68
|
registerEvents(instance);
|
66
69
|
let input = createInput(rootDocument);
|
@@ -86,8 +89,10 @@ function checkboxRenderer(instance, TD, row, col, prop, value, cellProperties) {
|
|
86
89
|
(0, _element.addClass)(input, BAD_VALUE_CLASS);
|
87
90
|
badValue = true;
|
88
91
|
}
|
89
|
-
|
90
|
-
|
92
|
+
(0, _element.setAttribute)(input, [[ATTR_ROW, row], [ATTR_COLUMN, col]]);
|
93
|
+
if (ariaEnabled) {
|
94
|
+
(0, _element.setAttribute)(input, [(0, _a11y.A11Y_LABEL)(input.checked ? instance.getTranslatedPhrase(_constants.CHECKBOX_CHECKED) : instance.getTranslatedPhrase(_constants.CHECKBOX_UNCHECKED)), (0, _a11y.A11Y_CHECKED)(input.checked), (0, _a11y.A11Y_CHECKBOX)()]);
|
95
|
+
}
|
91
96
|
if (!badValue && labelOptions) {
|
92
97
|
let labelText = '';
|
93
98
|
if (labelOptions.value) {
|
@@ -158,7 +163,7 @@ function checkboxRenderer(instance, TD, row, col, prop, value, cellProperties) {
|
|
158
163
|
return !areSelectedCheckboxCells(); // False blocks next action associated with the keyboard shortcut.
|
159
164
|
},
|
160
165
|
|
161
|
-
relativeToGroup:
|
166
|
+
relativeToGroup: _shortcutContexts.EDITOR_EDIT_GROUP,
|
162
167
|
position: 'before'
|
163
168
|
}], config);
|
164
169
|
}
|