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
package/helpers/dom/element.js
CHANGED
@@ -36,23 +36,30 @@ exports.isChildOf = isChildOf;
|
|
36
36
|
exports.isDetached = isDetached;
|
37
37
|
exports.isInput = isInput;
|
38
38
|
exports.isOutsideInput = isOutsideInput;
|
39
|
+
exports.isThisHotChild = isThisHotChild;
|
39
40
|
exports.isVisible = isVisible;
|
41
|
+
exports.makeElementContentEditableAndSelectItsContent = makeElementContentEditableAndSelectItsContent;
|
40
42
|
exports.matchesCSSRules = matchesCSSRules;
|
41
43
|
exports.observeVisibilityChangeOnce = observeVisibilityChangeOnce;
|
42
44
|
exports.offset = offset;
|
43
45
|
exports.outerHeight = outerHeight;
|
44
46
|
exports.outerWidth = outerWidth;
|
45
47
|
exports.overlayContainsElement = overlayContainsElement;
|
48
|
+
exports.removeAttribute = removeAttribute;
|
46
49
|
exports.removeClass = removeClass;
|
50
|
+
exports.removeContentEditableFromElementAndDeselect = removeContentEditableFromElementAndDeselect;
|
47
51
|
exports.removeEvent = removeEvent;
|
48
52
|
exports.removeTextNodes = removeTextNodes;
|
49
53
|
exports.resetCssTransform = resetCssTransform;
|
54
|
+
exports.runWithSelectedContendEditableElement = runWithSelectedContendEditableElement;
|
50
55
|
exports.selectElementIfAllowed = selectElementIfAllowed;
|
56
|
+
exports.setAttribute = setAttribute;
|
51
57
|
exports.setCaretPosition = setCaretPosition;
|
52
58
|
exports.setOverlayPosition = setOverlayPosition;
|
53
59
|
require("core-js/modules/es.array.push.js");
|
54
60
|
require("core-js/modules/es.error.cause.js");
|
55
61
|
var _string = require("../string");
|
62
|
+
var _a11y = require("../a11y");
|
56
63
|
/**
|
57
64
|
* Get the parent of the specified node in the DOM tree.
|
58
65
|
*
|
@@ -80,6 +87,18 @@ function getParent(element) {
|
|
80
87
|
return parent;
|
81
88
|
}
|
82
89
|
|
90
|
+
/**
|
91
|
+
* Check if the provided element is a child of the provided Handsontable container.
|
92
|
+
*
|
93
|
+
* @param {HTMLElement} element Element to be analyzed.
|
94
|
+
* @param {HTMLElement} thisHotContainer The Handsontable container.
|
95
|
+
* @returns {boolean}
|
96
|
+
*/
|
97
|
+
function isThisHotChild(element, thisHotContainer) {
|
98
|
+
const closestHandsontableContainer = element.closest('.handsontable');
|
99
|
+
return !!closestHandsontableContainer && (closestHandsontableContainer.parentNode === thisHotContainer || closestHandsontableContainer === thisHotContainer);
|
100
|
+
}
|
101
|
+
|
83
102
|
/**
|
84
103
|
* Gets `frameElement` of the specified frame. Returns null if it is a top frame or if script has no access to read property.
|
85
104
|
*
|
@@ -93,7 +112,7 @@ function getFrameElement(frame) {
|
|
93
112
|
/**
|
94
113
|
* Gets parent frame of the specified frame. Returns null if it is a top frame or if script has no access to read property.
|
95
114
|
*
|
96
|
-
* @param {Window} frame Frame from which should
|
115
|
+
* @param {Window} frame Frame from which should get frameElement in a safe way.
|
97
116
|
* @returns {Window|null}
|
98
117
|
*/
|
99
118
|
function getParentWindow(frame) {
|
@@ -103,7 +122,7 @@ function getParentWindow(frame) {
|
|
103
122
|
/**
|
104
123
|
* Checks if script has access to read from parent frame of specified frame.
|
105
124
|
*
|
106
|
-
* @param {Window} frame Frame from which should
|
125
|
+
* @param {Window} frame Frame from which should get frameElement in a safe way.
|
107
126
|
* @returns {boolean}
|
108
127
|
*/
|
109
128
|
function hasAccessToParentWindow(frame) {
|
@@ -238,7 +257,7 @@ function overlayContainsElement(overlayType, element, root) {
|
|
238
257
|
}
|
239
258
|
|
240
259
|
/**
|
241
|
-
* @param {string} classNames The element "class" attribute string.
|
260
|
+
* @param {string[]} classNames The element "class" attribute string.
|
242
261
|
* @returns {string[]}
|
243
262
|
*/
|
244
263
|
function filterEmptyClassNames(classNames) {
|
@@ -248,6 +267,35 @@ function filterEmptyClassNames(classNames) {
|
|
248
267
|
return classNames.filter(x => !!x);
|
249
268
|
}
|
250
269
|
|
270
|
+
/**
|
271
|
+
* Filter out the RegExp entries from an array.
|
272
|
+
*
|
273
|
+
* @param {(string|RegExp)[]} list Array of either strings, Regexes or a mix of both.
|
274
|
+
* @param {boolean} [returnBoth] If `true`, both the array without regexes and an array of regexes will be returned.
|
275
|
+
* @returns {string[]|{regexFree: string[], regexes: RegExp[]}}
|
276
|
+
*/
|
277
|
+
function filterRegexes(list, returnBoth) {
|
278
|
+
if (!list || !list.length) {
|
279
|
+
return returnBoth ? {
|
280
|
+
regexFree: [],
|
281
|
+
regexes: []
|
282
|
+
} : [];
|
283
|
+
}
|
284
|
+
const regexes = [];
|
285
|
+
const regexFree = [];
|
286
|
+
regexFree.push(...list.filter(entry => {
|
287
|
+
const isRegex = entry instanceof RegExp;
|
288
|
+
if (isRegex && returnBoth) {
|
289
|
+
regexes.push(entry);
|
290
|
+
}
|
291
|
+
return !isRegex;
|
292
|
+
}));
|
293
|
+
return returnBoth ? {
|
294
|
+
regexFree,
|
295
|
+
regexes
|
296
|
+
} : regexFree;
|
297
|
+
}
|
298
|
+
|
251
299
|
/**
|
252
300
|
* Checks if element has class name.
|
253
301
|
*
|
@@ -282,16 +330,86 @@ function addClass(element, className) {
|
|
282
330
|
* Remove class name from an element.
|
283
331
|
*
|
284
332
|
* @param {HTMLElement} element An element to process.
|
285
|
-
* @param {string|Array} className Class name as string or array of strings.
|
333
|
+
* @param {string|Array<string|RegExp>} className Class name as string or array of strings.
|
286
334
|
*/
|
287
335
|
function removeClass(element, className) {
|
288
336
|
if (typeof className === 'string') {
|
289
337
|
className = className.split(' ');
|
338
|
+
} else if (className instanceof RegExp) {
|
339
|
+
className = [className];
|
290
340
|
}
|
291
|
-
|
292
|
-
|
293
|
-
|
341
|
+
let {
|
342
|
+
regexFree: stringClasses,
|
343
|
+
// eslint-disable-next-line prefer-const
|
344
|
+
regexes: regexClasses
|
345
|
+
} = filterRegexes(className, true);
|
346
|
+
stringClasses = filterEmptyClassNames(stringClasses);
|
347
|
+
if (stringClasses.length > 0) {
|
348
|
+
element.classList.remove(...stringClasses);
|
349
|
+
}
|
350
|
+
regexClasses.forEach(regexClassName => {
|
351
|
+
element.classList.forEach(currentClassName => {
|
352
|
+
if (regexClassName.test(currentClassName)) {
|
353
|
+
element.classList.remove(currentClassName);
|
354
|
+
}
|
355
|
+
});
|
356
|
+
});
|
357
|
+
}
|
358
|
+
|
359
|
+
/**
|
360
|
+
* Set a single attribute or multiple attributes at once.
|
361
|
+
*
|
362
|
+
* @param {HTMLElement} domElement The HTML element to be modified.
|
363
|
+
* @param {Array[]|string} attributes If setting multiple attributes at once, `attributes` holds an array containing the
|
364
|
+
* attributes to be added. Each element of the array should be an array in a form of `[attributeName,
|
365
|
+
* attributeValue]`. If setting a single attribute, `attributes` holds the name of the attribute.
|
366
|
+
* @param {string|number|undefined} [attributeValue] If setting a single attribute, `attributeValue` holds the attribute
|
367
|
+
* value.
|
368
|
+
*/
|
369
|
+
function setAttribute(domElement) {
|
370
|
+
let attributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
371
|
+
let attributeValue = arguments.length > 2 ? arguments[2] : undefined;
|
372
|
+
if (!Array.isArray(attributes)) {
|
373
|
+
attributes = [[attributes, attributeValue]];
|
374
|
+
}
|
375
|
+
attributes.forEach(attributeInfo => {
|
376
|
+
if (Array.isArray(attributeInfo) && attributeInfo[0] !== '') {
|
377
|
+
domElement.setAttribute(...attributeInfo);
|
378
|
+
}
|
379
|
+
});
|
380
|
+
}
|
381
|
+
|
382
|
+
/**
|
383
|
+
* Remove a single attribute or multiple attributes from the provided element at once.
|
384
|
+
*
|
385
|
+
* @param {HTMLElement} domElement The HTML element to be processed.
|
386
|
+
* @param {Array<string|RegExp>|string} attributesToRemove If removing multiple attributes, `attributesToRemove`
|
387
|
+
* holds an array of attribute names to be removed from the provided element. If removing a single attribute, it
|
388
|
+
* holds the attribute name.
|
389
|
+
*/
|
390
|
+
function removeAttribute(domElement) {
|
391
|
+
let attributesToRemove = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
392
|
+
if (typeof attributesToRemove === 'string') {
|
393
|
+
attributesToRemove = attributesToRemove.split(' ');
|
394
|
+
} else if (attributesToRemove instanceof RegExp) {
|
395
|
+
attributesToRemove = [attributesToRemove];
|
294
396
|
}
|
397
|
+
const {
|
398
|
+
regexFree: stringAttributes,
|
399
|
+
regexes: regexAttributes
|
400
|
+
} = filterRegexes(attributesToRemove, true);
|
401
|
+
stringAttributes.forEach(attributeNameToRemove => {
|
402
|
+
if (attributeNameToRemove !== '') {
|
403
|
+
domElement.removeAttribute(attributeNameToRemove);
|
404
|
+
}
|
405
|
+
});
|
406
|
+
regexAttributes.forEach(attributeRegex => {
|
407
|
+
domElement.getAttributeNames().forEach(attributeName => {
|
408
|
+
if (attributeRegex.test(attributeName)) {
|
409
|
+
domElement.removeAttribute(attributeName);
|
410
|
+
}
|
411
|
+
});
|
412
|
+
});
|
295
413
|
}
|
296
414
|
|
297
415
|
/**
|
@@ -309,7 +427,7 @@ function removeTextNodes(element) {
|
|
309
427
|
}
|
310
428
|
|
311
429
|
/**
|
312
|
-
* Remove
|
430
|
+
* Remove children function
|
313
431
|
* WARNING - this doesn't unload events and data attached by jQuery
|
314
432
|
* http://jsperf.com/jquery-html-vs-empty-vs-innerhtml/9
|
315
433
|
* http://jsperf.com/jquery-html-vs-empty-vs-innerhtml/11 - no siginificant improvement with Chrome remove() method.
|
@@ -327,7 +445,7 @@ function empty(element) {
|
|
327
445
|
const HTML_CHARACTERS = /(<(.*)>|&(.*);)/;
|
328
446
|
|
329
447
|
/**
|
330
|
-
* Insert content into element trying avoid innerHTML method.
|
448
|
+
* Insert content into element trying to avoid innerHTML method.
|
331
449
|
*
|
332
450
|
* @param {HTMLElement} element An element to write into.
|
333
451
|
* @param {string} content The text to write.
|
@@ -957,4 +1075,65 @@ function observeVisibilityChangeOnce(elementToBeObserved, callback) {
|
|
957
1075
|
root: elementToBeObserved.ownerDocument.body
|
958
1076
|
});
|
959
1077
|
visibilityObserver.observe(elementToBeObserved);
|
1078
|
+
}
|
1079
|
+
|
1080
|
+
/**
|
1081
|
+
* Add a `contenteditable` attribute, select the contents and optionally add the `invisibleSelection`
|
1082
|
+
* class to the provided element.
|
1083
|
+
*
|
1084
|
+
* @param {HTMLElement} element Element to be processed.
|
1085
|
+
* @param {boolean} [invisibleSelection=true] `true` if the class should be added to the element.
|
1086
|
+
* @param {boolean} [ariaHidden=true] `true` if the `aria-hidden` attribute should be added to the processed element.
|
1087
|
+
*/
|
1088
|
+
function makeElementContentEditableAndSelectItsContent(element) {
|
1089
|
+
let invisibleSelection = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
1090
|
+
let ariaHidden = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
1091
|
+
const ownerDocument = element.ownerDocument;
|
1092
|
+
const range = ownerDocument.createRange();
|
1093
|
+
const sel = ownerDocument.defaultView.getSelection();
|
1094
|
+
setAttribute(element, 'contenteditable', true);
|
1095
|
+
if (ariaHidden) {
|
1096
|
+
setAttribute(element, ...(0, _a11y.A11Y_HIDDEN)());
|
1097
|
+
}
|
1098
|
+
if (invisibleSelection) {
|
1099
|
+
addClass(element, 'invisibleSelection');
|
1100
|
+
}
|
1101
|
+
range.selectNodeContents(element);
|
1102
|
+
sel.removeAllRanges();
|
1103
|
+
sel.addRange(range);
|
1104
|
+
}
|
1105
|
+
|
1106
|
+
/**
|
1107
|
+
* Remove the `contenteditable` attribute, deselect the contents and optionally remove the `invisibleSelection`
|
1108
|
+
* class from the provided element.
|
1109
|
+
*
|
1110
|
+
* @param {HTMLElement} selectedElement The element to be deselected.
|
1111
|
+
* @param {boolean} [removeInvisibleSelectionClass=true] `true` if the class should be removed from the element.
|
1112
|
+
*/
|
1113
|
+
function removeContentEditableFromElementAndDeselect(selectedElement) {
|
1114
|
+
let removeInvisibleSelectionClass = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
1115
|
+
const sel = selectedElement.ownerDocument.defaultView.getSelection();
|
1116
|
+
if (selectedElement.hasAttribute('aria-hidden')) {
|
1117
|
+
selectedElement.removeAttribute('aria-hidden');
|
1118
|
+
}
|
1119
|
+
sel.removeAllRanges();
|
1120
|
+
if (removeInvisibleSelectionClass) {
|
1121
|
+
removeClass(selectedElement, 'invisibleSelection');
|
1122
|
+
}
|
1123
|
+
selectedElement.removeAttribute('contenteditable');
|
1124
|
+
}
|
1125
|
+
|
1126
|
+
/**
|
1127
|
+
* Run the provided callback while the provided element is selected and modified to have the `contenteditable`
|
1128
|
+
* attribute added. Optionally, the selection can be configured to be invisible.
|
1129
|
+
*
|
1130
|
+
* @param {HTMLElement} element Element to be selected.
|
1131
|
+
* @param {Function} callback Callback to be called.
|
1132
|
+
* @param {boolean} [invisibleSelection=true] `true` if the selection should be invisible.
|
1133
|
+
*/
|
1134
|
+
function runWithSelectedContendEditableElement(element, callback) {
|
1135
|
+
let invisibleSelection = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
1136
|
+
makeElementContentEditableAndSelectItsContent(element, invisibleSelection);
|
1137
|
+
callback();
|
1138
|
+
removeContentEditableFromElementAndDeselect(element, invisibleSelection);
|
960
1139
|
}
|
package/helpers/dom/element.mjs
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
import "core-js/modules/es.array.push.js";
|
2
2
|
import "core-js/modules/es.error.cause.js";
|
3
3
|
import { sanitize } from "../string.mjs";
|
4
|
+
import { A11Y_HIDDEN } from "../a11y.mjs";
|
4
5
|
/**
|
5
6
|
* Get the parent of the specified node in the DOM tree.
|
6
7
|
*
|
@@ -28,6 +29,18 @@ export function getParent(element) {
|
|
28
29
|
return parent;
|
29
30
|
}
|
30
31
|
|
32
|
+
/**
|
33
|
+
* Check if the provided element is a child of the provided Handsontable container.
|
34
|
+
*
|
35
|
+
* @param {HTMLElement} element Element to be analyzed.
|
36
|
+
* @param {HTMLElement} thisHotContainer The Handsontable container.
|
37
|
+
* @returns {boolean}
|
38
|
+
*/
|
39
|
+
export function isThisHotChild(element, thisHotContainer) {
|
40
|
+
const closestHandsontableContainer = element.closest('.handsontable');
|
41
|
+
return !!closestHandsontableContainer && (closestHandsontableContainer.parentNode === thisHotContainer || closestHandsontableContainer === thisHotContainer);
|
42
|
+
}
|
43
|
+
|
31
44
|
/**
|
32
45
|
* Gets `frameElement` of the specified frame. Returns null if it is a top frame or if script has no access to read property.
|
33
46
|
*
|
@@ -41,7 +54,7 @@ export function getFrameElement(frame) {
|
|
41
54
|
/**
|
42
55
|
* Gets parent frame of the specified frame. Returns null if it is a top frame or if script has no access to read property.
|
43
56
|
*
|
44
|
-
* @param {Window} frame Frame from which should
|
57
|
+
* @param {Window} frame Frame from which should get frameElement in a safe way.
|
45
58
|
* @returns {Window|null}
|
46
59
|
*/
|
47
60
|
export function getParentWindow(frame) {
|
@@ -51,7 +64,7 @@ export function getParentWindow(frame) {
|
|
51
64
|
/**
|
52
65
|
* Checks if script has access to read from parent frame of specified frame.
|
53
66
|
*
|
54
|
-
* @param {Window} frame Frame from which should
|
67
|
+
* @param {Window} frame Frame from which should get frameElement in a safe way.
|
55
68
|
* @returns {boolean}
|
56
69
|
*/
|
57
70
|
export function hasAccessToParentWindow(frame) {
|
@@ -186,7 +199,7 @@ export function overlayContainsElement(overlayType, element, root) {
|
|
186
199
|
}
|
187
200
|
|
188
201
|
/**
|
189
|
-
* @param {string} classNames The element "class" attribute string.
|
202
|
+
* @param {string[]} classNames The element "class" attribute string.
|
190
203
|
* @returns {string[]}
|
191
204
|
*/
|
192
205
|
function filterEmptyClassNames(classNames) {
|
@@ -196,6 +209,35 @@ function filterEmptyClassNames(classNames) {
|
|
196
209
|
return classNames.filter(x => !!x);
|
197
210
|
}
|
198
211
|
|
212
|
+
/**
|
213
|
+
* Filter out the RegExp entries from an array.
|
214
|
+
*
|
215
|
+
* @param {(string|RegExp)[]} list Array of either strings, Regexes or a mix of both.
|
216
|
+
* @param {boolean} [returnBoth] If `true`, both the array without regexes and an array of regexes will be returned.
|
217
|
+
* @returns {string[]|{regexFree: string[], regexes: RegExp[]}}
|
218
|
+
*/
|
219
|
+
function filterRegexes(list, returnBoth) {
|
220
|
+
if (!list || !list.length) {
|
221
|
+
return returnBoth ? {
|
222
|
+
regexFree: [],
|
223
|
+
regexes: []
|
224
|
+
} : [];
|
225
|
+
}
|
226
|
+
const regexes = [];
|
227
|
+
const regexFree = [];
|
228
|
+
regexFree.push(...list.filter(entry => {
|
229
|
+
const isRegex = entry instanceof RegExp;
|
230
|
+
if (isRegex && returnBoth) {
|
231
|
+
regexes.push(entry);
|
232
|
+
}
|
233
|
+
return !isRegex;
|
234
|
+
}));
|
235
|
+
return returnBoth ? {
|
236
|
+
regexFree,
|
237
|
+
regexes
|
238
|
+
} : regexFree;
|
239
|
+
}
|
240
|
+
|
199
241
|
/**
|
200
242
|
* Checks if element has class name.
|
201
243
|
*
|
@@ -230,16 +272,86 @@ export function addClass(element, className) {
|
|
230
272
|
* Remove class name from an element.
|
231
273
|
*
|
232
274
|
* @param {HTMLElement} element An element to process.
|
233
|
-
* @param {string|Array} className Class name as string or array of strings.
|
275
|
+
* @param {string|Array<string|RegExp>} className Class name as string or array of strings.
|
234
276
|
*/
|
235
277
|
export function removeClass(element, className) {
|
236
278
|
if (typeof className === 'string') {
|
237
279
|
className = className.split(' ');
|
280
|
+
} else if (className instanceof RegExp) {
|
281
|
+
className = [className];
|
238
282
|
}
|
239
|
-
|
240
|
-
|
241
|
-
|
283
|
+
let {
|
284
|
+
regexFree: stringClasses,
|
285
|
+
// eslint-disable-next-line prefer-const
|
286
|
+
regexes: regexClasses
|
287
|
+
} = filterRegexes(className, true);
|
288
|
+
stringClasses = filterEmptyClassNames(stringClasses);
|
289
|
+
if (stringClasses.length > 0) {
|
290
|
+
element.classList.remove(...stringClasses);
|
291
|
+
}
|
292
|
+
regexClasses.forEach(regexClassName => {
|
293
|
+
element.classList.forEach(currentClassName => {
|
294
|
+
if (regexClassName.test(currentClassName)) {
|
295
|
+
element.classList.remove(currentClassName);
|
296
|
+
}
|
297
|
+
});
|
298
|
+
});
|
299
|
+
}
|
300
|
+
|
301
|
+
/**
|
302
|
+
* Set a single attribute or multiple attributes at once.
|
303
|
+
*
|
304
|
+
* @param {HTMLElement} domElement The HTML element to be modified.
|
305
|
+
* @param {Array[]|string} attributes If setting multiple attributes at once, `attributes` holds an array containing the
|
306
|
+
* attributes to be added. Each element of the array should be an array in a form of `[attributeName,
|
307
|
+
* attributeValue]`. If setting a single attribute, `attributes` holds the name of the attribute.
|
308
|
+
* @param {string|number|undefined} [attributeValue] If setting a single attribute, `attributeValue` holds the attribute
|
309
|
+
* value.
|
310
|
+
*/
|
311
|
+
export function setAttribute(domElement) {
|
312
|
+
let attributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
313
|
+
let attributeValue = arguments.length > 2 ? arguments[2] : undefined;
|
314
|
+
if (!Array.isArray(attributes)) {
|
315
|
+
attributes = [[attributes, attributeValue]];
|
316
|
+
}
|
317
|
+
attributes.forEach(attributeInfo => {
|
318
|
+
if (Array.isArray(attributeInfo) && attributeInfo[0] !== '') {
|
319
|
+
domElement.setAttribute(...attributeInfo);
|
320
|
+
}
|
321
|
+
});
|
322
|
+
}
|
323
|
+
|
324
|
+
/**
|
325
|
+
* Remove a single attribute or multiple attributes from the provided element at once.
|
326
|
+
*
|
327
|
+
* @param {HTMLElement} domElement The HTML element to be processed.
|
328
|
+
* @param {Array<string|RegExp>|string} attributesToRemove If removing multiple attributes, `attributesToRemove`
|
329
|
+
* holds an array of attribute names to be removed from the provided element. If removing a single attribute, it
|
330
|
+
* holds the attribute name.
|
331
|
+
*/
|
332
|
+
export function removeAttribute(domElement) {
|
333
|
+
let attributesToRemove = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
334
|
+
if (typeof attributesToRemove === 'string') {
|
335
|
+
attributesToRemove = attributesToRemove.split(' ');
|
336
|
+
} else if (attributesToRemove instanceof RegExp) {
|
337
|
+
attributesToRemove = [attributesToRemove];
|
242
338
|
}
|
339
|
+
const {
|
340
|
+
regexFree: stringAttributes,
|
341
|
+
regexes: regexAttributes
|
342
|
+
} = filterRegexes(attributesToRemove, true);
|
343
|
+
stringAttributes.forEach(attributeNameToRemove => {
|
344
|
+
if (attributeNameToRemove !== '') {
|
345
|
+
domElement.removeAttribute(attributeNameToRemove);
|
346
|
+
}
|
347
|
+
});
|
348
|
+
regexAttributes.forEach(attributeRegex => {
|
349
|
+
domElement.getAttributeNames().forEach(attributeName => {
|
350
|
+
if (attributeRegex.test(attributeName)) {
|
351
|
+
domElement.removeAttribute(attributeName);
|
352
|
+
}
|
353
|
+
});
|
354
|
+
});
|
243
355
|
}
|
244
356
|
|
245
357
|
/**
|
@@ -257,7 +369,7 @@ export function removeTextNodes(element) {
|
|
257
369
|
}
|
258
370
|
|
259
371
|
/**
|
260
|
-
* Remove
|
372
|
+
* Remove children function
|
261
373
|
* WARNING - this doesn't unload events and data attached by jQuery
|
262
374
|
* http://jsperf.com/jquery-html-vs-empty-vs-innerhtml/9
|
263
375
|
* http://jsperf.com/jquery-html-vs-empty-vs-innerhtml/11 - no siginificant improvement with Chrome remove() method.
|
@@ -275,7 +387,7 @@ export function empty(element) {
|
|
275
387
|
export const HTML_CHARACTERS = /(<(.*)>|&(.*);)/;
|
276
388
|
|
277
389
|
/**
|
278
|
-
* Insert content into element trying avoid innerHTML method.
|
390
|
+
* Insert content into element trying to avoid innerHTML method.
|
279
391
|
*
|
280
392
|
* @param {HTMLElement} element An element to write into.
|
281
393
|
* @param {string} content The text to write.
|
@@ -904,4 +1016,65 @@ export function observeVisibilityChangeOnce(elementToBeObserved, callback) {
|
|
904
1016
|
root: elementToBeObserved.ownerDocument.body
|
905
1017
|
});
|
906
1018
|
visibilityObserver.observe(elementToBeObserved);
|
1019
|
+
}
|
1020
|
+
|
1021
|
+
/**
|
1022
|
+
* Add a `contenteditable` attribute, select the contents and optionally add the `invisibleSelection`
|
1023
|
+
* class to the provided element.
|
1024
|
+
*
|
1025
|
+
* @param {HTMLElement} element Element to be processed.
|
1026
|
+
* @param {boolean} [invisibleSelection=true] `true` if the class should be added to the element.
|
1027
|
+
* @param {boolean} [ariaHidden=true] `true` if the `aria-hidden` attribute should be added to the processed element.
|
1028
|
+
*/
|
1029
|
+
export function makeElementContentEditableAndSelectItsContent(element) {
|
1030
|
+
let invisibleSelection = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
1031
|
+
let ariaHidden = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
1032
|
+
const ownerDocument = element.ownerDocument;
|
1033
|
+
const range = ownerDocument.createRange();
|
1034
|
+
const sel = ownerDocument.defaultView.getSelection();
|
1035
|
+
setAttribute(element, 'contenteditable', true);
|
1036
|
+
if (ariaHidden) {
|
1037
|
+
setAttribute(element, ...A11Y_HIDDEN());
|
1038
|
+
}
|
1039
|
+
if (invisibleSelection) {
|
1040
|
+
addClass(element, 'invisibleSelection');
|
1041
|
+
}
|
1042
|
+
range.selectNodeContents(element);
|
1043
|
+
sel.removeAllRanges();
|
1044
|
+
sel.addRange(range);
|
1045
|
+
}
|
1046
|
+
|
1047
|
+
/**
|
1048
|
+
* Remove the `contenteditable` attribute, deselect the contents and optionally remove the `invisibleSelection`
|
1049
|
+
* class from the provided element.
|
1050
|
+
*
|
1051
|
+
* @param {HTMLElement} selectedElement The element to be deselected.
|
1052
|
+
* @param {boolean} [removeInvisibleSelectionClass=true] `true` if the class should be removed from the element.
|
1053
|
+
*/
|
1054
|
+
export function removeContentEditableFromElementAndDeselect(selectedElement) {
|
1055
|
+
let removeInvisibleSelectionClass = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
1056
|
+
const sel = selectedElement.ownerDocument.defaultView.getSelection();
|
1057
|
+
if (selectedElement.hasAttribute('aria-hidden')) {
|
1058
|
+
selectedElement.removeAttribute('aria-hidden');
|
1059
|
+
}
|
1060
|
+
sel.removeAllRanges();
|
1061
|
+
if (removeInvisibleSelectionClass) {
|
1062
|
+
removeClass(selectedElement, 'invisibleSelection');
|
1063
|
+
}
|
1064
|
+
selectedElement.removeAttribute('contenteditable');
|
1065
|
+
}
|
1066
|
+
|
1067
|
+
/**
|
1068
|
+
* Run the provided callback while the provided element is selected and modified to have the `contenteditable`
|
1069
|
+
* attribute added. Optionally, the selection can be configured to be invisible.
|
1070
|
+
*
|
1071
|
+
* @param {HTMLElement} element Element to be selected.
|
1072
|
+
* @param {Function} callback Callback to be called.
|
1073
|
+
* @param {boolean} [invisibleSelection=true] `true` if the selection should be invisible.
|
1074
|
+
*/
|
1075
|
+
export function runWithSelectedContendEditableElement(element, callback) {
|
1076
|
+
let invisibleSelection = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
1077
|
+
makeElementContentEditableAndSelectItsContent(element, invisibleSelection);
|
1078
|
+
callback();
|
1079
|
+
removeContentEditableFromElementAndDeselect(element, invisibleSelection);
|
907
1080
|
}
|
package/helpers/mixed.js
CHANGED
@@ -134,7 +134,7 @@ const domMessages = {
|
|
134
134
|
function _injectProductInfo(key, element) {
|
135
135
|
const hasValidType = !isEmpty(key);
|
136
136
|
const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
|
137
|
-
const hotVersion = "0.0.0-next-
|
137
|
+
const hotVersion = "0.0.0-next-21d91d0-20231025";
|
138
138
|
let keyValidityDate;
|
139
139
|
let consoleMessageState = 'invalid';
|
140
140
|
let domMessageState = 'invalid';
|
package/helpers/mixed.mjs
CHANGED
@@ -124,7 +124,7 @@ const domMessages = {
|
|
124
124
|
export function _injectProductInfo(key, element) {
|
125
125
|
const hasValidType = !isEmpty(key);
|
126
126
|
const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
|
127
|
-
const hotVersion = "0.0.0-next-
|
127
|
+
const hotVersion = "0.0.0-next-21d91d0-20231025";
|
128
128
|
let keyValidityDate;
|
129
129
|
let consoleMessageState = 'invalid';
|
130
130
|
let domMessageState = 'invalid';
|
package/helpers/number.d.ts
CHANGED
@@ -3,3 +3,4 @@ export function isNumericLike(value: any): boolean;
|
|
3
3
|
export function rangeEach(rangeFrom: number, rangeTo: number, iteratee: (index: number) => void): void;
|
4
4
|
export function rangeEachReverse(rangeFrom: number, rangeTo: number, iteratee: (index: number) => void): void;
|
5
5
|
export function valueAccordingPercent(value: number, percent: string | number): number;
|
6
|
+
export function clamp(value: number, minValue: number, maxValue: number): number;
|
package/helpers/number.js
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
3
|
exports.__esModule = true;
|
4
|
+
exports.clamp = clamp;
|
4
5
|
exports.isNumeric = isNumeric;
|
5
6
|
exports.isNumericLike = isNumericLike;
|
6
7
|
exports.rangeEach = rangeEach;
|
@@ -111,4 +112,21 @@ function valueAccordingPercent(value, percent) {
|
|
111
112
|
percent = parseInt(percent.toString().replace('%', ''), 10);
|
112
113
|
percent = isNaN(percent) ? 0 : percent;
|
113
114
|
return parseInt(value * percent / 100, 10);
|
115
|
+
}
|
116
|
+
|
117
|
+
/**
|
118
|
+
* Clamps the value between min and max.
|
119
|
+
*
|
120
|
+
* @param {number} value The base number value.
|
121
|
+
* @param {number} minValue The max number value.
|
122
|
+
* @param {number} maxValue The min number value.
|
123
|
+
* @returns {number}
|
124
|
+
*/
|
125
|
+
function clamp(value, minValue, maxValue) {
|
126
|
+
if (Math.min(value, minValue) === value) {
|
127
|
+
return minValue;
|
128
|
+
} else if (Math.max(value, maxValue) === value) {
|
129
|
+
return maxValue;
|
130
|
+
}
|
131
|
+
return value;
|
114
132
|
}
|
package/helpers/number.mjs
CHANGED
@@ -103,4 +103,21 @@ export function valueAccordingPercent(value, percent) {
|
|
103
103
|
percent = parseInt(percent.toString().replace('%', ''), 10);
|
104
104
|
percent = isNaN(percent) ? 0 : percent;
|
105
105
|
return parseInt(value * percent / 100, 10);
|
106
|
+
}
|
107
|
+
|
108
|
+
/**
|
109
|
+
* Clamps the value between min and max.
|
110
|
+
*
|
111
|
+
* @param {number} value The base number value.
|
112
|
+
* @param {number} minValue The max number value.
|
113
|
+
* @param {number} maxValue The min number value.
|
114
|
+
* @returns {number}
|
115
|
+
*/
|
116
|
+
export function clamp(value, minValue, maxValue) {
|
117
|
+
if (Math.min(value, minValue) === value) {
|
118
|
+
return minValue;
|
119
|
+
} else if (Math.max(value, maxValue) === value) {
|
120
|
+
return maxValue;
|
121
|
+
}
|
122
|
+
return value;
|
106
123
|
}
|
package/i18n/constants.js
CHANGED
@@ -165,4 +165,10 @@ exports.FILTERS_BUTTONS_PLACEHOLDER_SEARCH = FILTERS_BUTTONS_PLACEHOLDER_SEARCH;
|
|
165
165
|
const FILTERS_BUTTONS_PLACEHOLDER_VALUE = `${FILTERS_NAMESPACE}buttons.placeholder.value`;
|
166
166
|
exports.FILTERS_BUTTONS_PLACEHOLDER_VALUE = FILTERS_BUTTONS_PLACEHOLDER_VALUE;
|
167
167
|
const FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE = `${FILTERS_NAMESPACE}buttons.placeholder.secondValue`;
|
168
|
-
exports.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE = FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE;
|
168
|
+
exports.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE = FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE;
|
169
|
+
const CHECKBOX_RENDERER_NAMESPACE = 'CheckboxRenderer:';
|
170
|
+
exports.CHECKBOX_RENDERER_NAMESPACE = CHECKBOX_RENDERER_NAMESPACE;
|
171
|
+
const CHECKBOX_CHECKED = `${CHECKBOX_RENDERER_NAMESPACE}checked`;
|
172
|
+
exports.CHECKBOX_CHECKED = CHECKBOX_CHECKED;
|
173
|
+
const CHECKBOX_UNCHECKED = `${CHECKBOX_RENDERER_NAMESPACE}unchecked`;
|
174
|
+
exports.CHECKBOX_UNCHECKED = CHECKBOX_UNCHECKED;
|
package/i18n/constants.mjs
CHANGED
@@ -83,4 +83,7 @@ export const FILTERS_BUTTONS_OK = `${FILTERS_NAMESPACE}buttons.ok`;
|
|
83
83
|
export const FILTERS_BUTTONS_CANCEL = `${FILTERS_NAMESPACE}buttons.cancel`;
|
84
84
|
export const FILTERS_BUTTONS_PLACEHOLDER_SEARCH = `${FILTERS_NAMESPACE}buttons.placeholder.search`;
|
85
85
|
export const FILTERS_BUTTONS_PLACEHOLDER_VALUE = `${FILTERS_NAMESPACE}buttons.placeholder.value`;
|
86
|
-
export const FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE = `${FILTERS_NAMESPACE}buttons.placeholder.secondValue`;
|
86
|
+
export const FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE = `${FILTERS_NAMESPACE}buttons.placeholder.secondValue`;
|
87
|
+
export const CHECKBOX_RENDERER_NAMESPACE = 'CheckboxRenderer:';
|
88
|
+
export const CHECKBOX_CHECKED = `${CHECKBOX_RENDERER_NAMESPACE}checked`;
|
89
|
+
export const CHECKBOX_UNCHECKED = `${CHECKBOX_RENDERER_NAMESPACE}unchecked`;
|
package/i18n/languages/en-US.js
CHANGED
@@ -89,7 +89,9 @@ const dictionary = {
|
|
89
89
|
[C.FILTERS_BUTTONS_CANCEL]: 'Cancel',
|
90
90
|
[C.FILTERS_BUTTONS_PLACEHOLDER_SEARCH]: 'Search',
|
91
91
|
[C.FILTERS_BUTTONS_PLACEHOLDER_VALUE]: 'Value',
|
92
|
-
[C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]: 'Second value'
|
92
|
+
[C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]: 'Second value',
|
93
|
+
[C.CHECKBOX_CHECKED]: 'Checked',
|
94
|
+
[C.CHECKBOX_UNCHECKED]: 'Unchecked'
|
93
95
|
};
|
94
96
|
var _default = dictionary;
|
95
97
|
exports.default = _default;
|
package/i18n/languages/en-US.mjs
CHANGED
@@ -83,6 +83,8 @@ const dictionary = {
|
|
83
83
|
[C.FILTERS_BUTTONS_CANCEL]: 'Cancel',
|
84
84
|
[C.FILTERS_BUTTONS_PLACEHOLDER_SEARCH]: 'Search',
|
85
85
|
[C.FILTERS_BUTTONS_PLACEHOLDER_VALUE]: 'Value',
|
86
|
-
[C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]: 'Second value'
|
86
|
+
[C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]: 'Second value',
|
87
|
+
[C.CHECKBOX_CHECKED]: 'Checked',
|
88
|
+
[C.CHECKBOX_UNCHECKED]: 'Unchecked'
|
87
89
|
};
|
88
90
|
export default dictionary;
|
package/i18n/languages/pl-PL.js
CHANGED
@@ -89,7 +89,9 @@ const dictionary = {
|
|
89
89
|
[C.FILTERS_BUTTONS_CANCEL]: 'Anuluj',
|
90
90
|
[C.FILTERS_BUTTONS_PLACEHOLDER_SEARCH]: 'Szukaj',
|
91
91
|
[C.FILTERS_BUTTONS_PLACEHOLDER_VALUE]: 'Wartość',
|
92
|
-
[C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]: 'Druga wartość'
|
92
|
+
[C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]: 'Druga wartość',
|
93
|
+
[C.CHECKBOX_CHECKED]: 'Zaznaczony',
|
94
|
+
[C.CHECKBOX_UNCHECKED]: 'Odznaczony'
|
93
95
|
};
|
94
96
|
var _default = dictionary;
|
95
97
|
exports.default = _default;
|