handsontable 16.0.1-next-eee5f08-20250710 → 16.1.0-next-abd8f2e-20250904
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/3rdparty/walkontable/src/overlays.js +12 -2
- package/3rdparty/walkontable/src/overlays.mjs +12 -2
- package/3rdparty/walkontable/src/viewport.js +2 -6
- package/3rdparty/walkontable/src/viewport.mjs +2 -6
- package/CHANGELOG.md +32 -0
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/cellTypes/autocompleteType/accessors/index.js +7 -0
- package/cellTypes/autocompleteType/accessors/index.mjs +2 -0
- package/cellTypes/autocompleteType/accessors/valueGetter.js +14 -0
- package/cellTypes/autocompleteType/accessors/valueGetter.mjs +10 -0
- package/cellTypes/autocompleteType/accessors/valueSetter.js +25 -0
- package/cellTypes/autocompleteType/accessors/valueSetter.mjs +21 -0
- package/cellTypes/autocompleteType/autocompleteType.js +4 -1
- package/cellTypes/autocompleteType/autocompleteType.mjs +4 -1
- package/cellTypes/checkboxType/accessors/index.js +5 -0
- package/cellTypes/checkboxType/accessors/index.mjs +1 -0
- package/cellTypes/checkboxType/accessors/valueSetter.js +26 -0
- package/cellTypes/checkboxType/accessors/valueSetter.mjs +22 -0
- package/cellTypes/checkboxType/checkboxType.js +3 -1
- package/cellTypes/checkboxType/checkboxType.mjs +3 -1
- package/cellTypes/dropdownType/accessors/index.js +7 -0
- package/cellTypes/dropdownType/accessors/index.mjs +2 -0
- package/cellTypes/dropdownType/accessors/valueGetter.js +14 -0
- package/cellTypes/dropdownType/accessors/valueGetter.mjs +10 -0
- package/cellTypes/dropdownType/accessors/valueSetter.js +17 -0
- package/cellTypes/dropdownType/accessors/valueSetter.mjs +13 -0
- package/cellTypes/dropdownType/dropdownType.js +4 -1
- package/cellTypes/dropdownType/dropdownType.mjs +4 -1
- package/cellTypes/numericType/accessors/index.js +5 -0
- package/cellTypes/numericType/accessors/index.mjs +1 -0
- package/cellTypes/numericType/accessors/valueSetter.js +19 -0
- package/cellTypes/numericType/accessors/valueSetter.mjs +15 -0
- package/cellTypes/numericType/numericType.js +3 -1
- package/cellTypes/numericType/numericType.mjs +3 -1
- package/core/focusCatcher/index.js +37 -112
- package/core/focusCatcher/index.mjs +35 -110
- package/core/focusCatcher/utils.js +31 -0
- package/core/focusCatcher/utils.mjs +27 -0
- package/core/hooks/constants.js +242 -0
- package/core/hooks/constants.mjs +242 -0
- package/core/hooks/index.d.ts +22 -0
- package/core/viewportScroll/scrollStrategies/focusScroll.js +5 -1
- package/core/viewportScroll/scrollStrategies/focusScroll.mjs +5 -1
- package/core/viewportScroll/utils.js +1 -1
- package/core/viewportScroll/utils.mjs +1 -1
- package/core.d.ts +4 -0
- package/core.js +237 -139
- package/core.mjs +240 -142
- package/dataMap/dataMap.js +13 -3
- package/dataMap/dataMap.mjs +14 -4
- package/dataMap/dataSource.js +16 -0
- package/dataMap/dataSource.mjs +16 -0
- package/dataMap/metaManager/lazyFactoryMap.js +4 -3
- package/dataMap/metaManager/lazyFactoryMap.mjs +2 -1
- package/dataMap/metaManager/metaLayers/cellMeta.js +3 -2
- package/dataMap/metaManager/metaLayers/cellMeta.mjs +3 -2
- package/dataMap/metaManager/metaSchema.js +289 -4
- package/dataMap/metaManager/metaSchema.mjs +289 -4
- package/dataMap/metaManager/utils.js +0 -11
- package/dataMap/metaManager/utils.mjs +0 -10
- package/dataMap/replaceData.js +1 -0
- package/dataMap/replaceData.mjs +1 -0
- package/dist/handsontable.css +281 -4
- package/dist/handsontable.full.css +281 -4
- package/dist/handsontable.full.js +7844 -2990
- package/dist/handsontable.full.min.css +4 -5
- package/dist/handsontable.full.min.js +167 -165
- package/dist/handsontable.js +9639 -4806
- package/dist/handsontable.min.css +4 -4
- package/dist/handsontable.min.js +52 -50
- package/dist/languages/all.js +231 -21
- package/dist/languages/all.min.js +1 -1
- package/dist/languages/ar-AR.js +11 -1
- package/dist/languages/ar-AR.min.js +1 -1
- package/dist/languages/cs-CZ.js +11 -1
- package/dist/languages/cs-CZ.min.js +1 -1
- package/dist/languages/de-CH.js +11 -1
- package/dist/languages/de-CH.min.js +1 -1
- package/dist/languages/de-DE.js +11 -1
- package/dist/languages/de-DE.min.js +1 -1
- package/dist/languages/en-US.js +11 -1
- package/dist/languages/en-US.min.js +1 -1
- package/dist/languages/es-MX.js +11 -1
- package/dist/languages/es-MX.min.js +1 -1
- package/dist/languages/fa-IR.js +11 -1
- package/dist/languages/fa-IR.min.js +1 -1
- package/dist/languages/fr-FR.js +11 -1
- package/dist/languages/fr-FR.min.js +1 -1
- package/dist/languages/hr-HR.js +11 -1
- package/dist/languages/hr-HR.min.js +1 -1
- package/dist/languages/it-IT.js +11 -1
- package/dist/languages/it-IT.min.js +1 -1
- package/dist/languages/ja-JP.js +11 -1
- package/dist/languages/ja-JP.min.js +1 -1
- package/dist/languages/ko-KR.js +11 -1
- package/dist/languages/ko-KR.min.js +1 -1
- package/dist/languages/lv-LV.js +11 -1
- package/dist/languages/lv-LV.min.js +1 -1
- package/dist/languages/nb-NO.js +11 -1
- package/dist/languages/nb-NO.min.js +1 -1
- package/dist/languages/nl-NL.js +11 -1
- package/dist/languages/nl-NL.min.js +1 -1
- package/dist/languages/pl-PL.js +11 -1
- package/dist/languages/pl-PL.min.js +1 -1
- package/dist/languages/pt-BR.js +11 -1
- package/dist/languages/pt-BR.min.js +1 -1
- package/dist/languages/ru-RU.js +11 -1
- package/dist/languages/ru-RU.min.js +1 -1
- package/dist/languages/sr-SP.js +11 -1
- package/dist/languages/sr-SP.min.js +1 -1
- package/dist/languages/zh-CN.js +11 -1
- package/dist/languages/zh-CN.min.js +1 -1
- package/dist/languages/zh-TW.js +11 -1
- package/dist/languages/zh-TW.min.js +1 -1
- package/editorManager.js +4 -4
- package/editorManager.mjs +4 -4
- package/editors/autocompleteEditor/autocompleteEditor.js +50 -112
- package/editors/autocompleteEditor/autocompleteEditor.mjs +51 -113
- package/editors/baseEditor/baseEditor.js +10 -6
- package/editors/baseEditor/baseEditor.mjs +10 -6
- package/editors/handsontableEditor/handsontableEditor.js +9 -9
- package/editors/handsontableEditor/handsontableEditor.mjs +9 -9
- package/editors/textEditor/textEditor.js +0 -7
- package/editors/textEditor/textEditor.mjs +0 -7
- package/focusManager.js +2 -2
- package/focusManager.mjs +2 -2
- package/helpers/a11y.js +15 -2
- package/helpers/a11y.mjs +10 -2
- package/helpers/console.js +12 -0
- package/helpers/console.mjs +11 -0
- package/helpers/dom/element.js +4 -4
- package/helpers/dom/element.mjs +4 -4
- package/helpers/mixed.js +65 -2
- package/helpers/mixed.mjs +63 -2
- package/helpers/number.js +28 -0
- package/helpers/number.mjs +26 -0
- package/helpers/object.js +35 -0
- package/helpers/object.mjs +34 -0
- package/helpers/string.js +19 -0
- package/helpers/string.mjs +18 -0
- package/helpers/templateLiteralTag.js +57 -1
- package/helpers/templateLiteralTag.mjs +56 -1
- package/i18n/constants.js +13 -1
- package/i18n/constants.mjs +13 -1
- package/i18n/languages/ar-AR.js +11 -1
- package/i18n/languages/ar-AR.mjs +11 -1
- package/i18n/languages/cs-CZ.js +11 -1
- package/i18n/languages/cs-CZ.mjs +11 -1
- package/i18n/languages/de-CH.js +11 -1
- package/i18n/languages/de-CH.mjs +11 -1
- package/i18n/languages/de-DE.js +11 -1
- package/i18n/languages/de-DE.mjs +11 -1
- package/i18n/languages/en-US.js +11 -1
- package/i18n/languages/en-US.mjs +11 -1
- package/i18n/languages/es-MX.js +11 -1
- package/i18n/languages/es-MX.mjs +11 -1
- package/i18n/languages/fa-IR.js +11 -1
- package/i18n/languages/fa-IR.mjs +11 -1
- package/i18n/languages/fr-FR.js +11 -1
- package/i18n/languages/fr-FR.mjs +11 -1
- package/i18n/languages/hr-HR.js +11 -1
- package/i18n/languages/hr-HR.mjs +11 -1
- package/i18n/languages/it-IT.js +11 -1
- package/i18n/languages/it-IT.mjs +11 -1
- package/i18n/languages/ja-JP.js +11 -1
- package/i18n/languages/ja-JP.mjs +11 -1
- package/i18n/languages/ko-KR.js +11 -1
- package/i18n/languages/ko-KR.mjs +11 -1
- package/i18n/languages/lv-LV.js +11 -1
- package/i18n/languages/lv-LV.mjs +11 -1
- package/i18n/languages/nb-NO.js +11 -1
- package/i18n/languages/nb-NO.mjs +11 -1
- package/i18n/languages/nl-NL.js +11 -1
- package/i18n/languages/nl-NL.mjs +11 -1
- package/i18n/languages/pl-PL.js +11 -1
- package/i18n/languages/pl-PL.mjs +11 -1
- package/i18n/languages/pt-BR.js +11 -1
- package/i18n/languages/pt-BR.mjs +11 -1
- package/i18n/languages/ru-RU.js +11 -1
- package/i18n/languages/ru-RU.mjs +11 -1
- package/i18n/languages/sr-SP.js +11 -1
- package/i18n/languages/sr-SP.mjs +11 -1
- package/i18n/languages/zh-CN.js +11 -1
- package/i18n/languages/zh-CN.mjs +11 -1
- package/i18n/languages/zh-TW.js +11 -1
- package/i18n/languages/zh-TW.mjs +11 -1
- package/i18n/phraseFormatters/index.js +3 -1
- package/i18n/phraseFormatters/index.mjs +3 -1
- package/i18n/registry.js +5 -6
- package/i18n/registry.mjs +5 -6
- package/index.d.ts +27 -0
- package/languages/all.js +231 -21
- package/languages/ar-AR.js +11 -1
- package/languages/ar-AR.mjs +11 -1
- package/languages/cs-CZ.js +11 -1
- package/languages/cs-CZ.mjs +11 -1
- package/languages/de-CH.js +11 -1
- package/languages/de-CH.mjs +11 -1
- package/languages/de-DE.js +11 -1
- package/languages/de-DE.mjs +11 -1
- package/languages/en-US.js +11 -1
- package/languages/en-US.mjs +11 -1
- package/languages/es-MX.js +11 -1
- package/languages/es-MX.mjs +11 -1
- package/languages/fa-IR.js +11 -1
- package/languages/fa-IR.mjs +11 -1
- package/languages/fr-FR.js +11 -1
- package/languages/fr-FR.mjs +11 -1
- package/languages/hr-HR.js +11 -1
- package/languages/hr-HR.mjs +11 -1
- package/languages/index.js +231 -21
- package/languages/it-IT.js +11 -1
- package/languages/it-IT.mjs +11 -1
- package/languages/ja-JP.js +11 -1
- package/languages/ja-JP.mjs +11 -1
- package/languages/ko-KR.js +11 -1
- package/languages/ko-KR.mjs +11 -1
- package/languages/lv-LV.js +11 -1
- package/languages/lv-LV.mjs +11 -1
- package/languages/nb-NO.js +11 -1
- package/languages/nb-NO.mjs +11 -1
- package/languages/nl-NL.js +11 -1
- package/languages/nl-NL.mjs +11 -1
- package/languages/pl-PL.js +11 -1
- package/languages/pl-PL.mjs +11 -1
- package/languages/pt-BR.js +11 -1
- package/languages/pt-BR.mjs +11 -1
- package/languages/ru-RU.js +11 -1
- package/languages/ru-RU.mjs +11 -1
- package/languages/sr-SP.js +11 -1
- package/languages/sr-SP.mjs +11 -1
- package/languages/zh-CN.js +11 -1
- package/languages/zh-CN.mjs +11 -1
- package/languages/zh-TW.js +11 -1
- package/languages/zh-TW.mjs +11 -1
- package/mixins/localHooks.js +16 -0
- package/mixins/localHooks.mjs +16 -0
- package/package.json +19 -1
- package/plugins/autoRowSize/autoRowSize.js +43 -6
- package/plugins/autoRowSize/autoRowSize.mjs +43 -6
- package/plugins/autofill/autofill.js +50 -3
- package/plugins/autofill/autofill.mjs +50 -3
- package/plugins/base/base.js +86 -15
- package/plugins/base/base.mjs +87 -16
- package/plugins/collapsibleColumns/collapsibleColumns.js +4 -4
- package/plugins/collapsibleColumns/collapsibleColumns.mjs +4 -4
- package/plugins/columnSorting/columnSorting.js +3 -3
- package/plugins/columnSorting/columnSorting.mjs +3 -3
- package/plugins/comments/comments.js +52 -22
- package/plugins/comments/comments.mjs +52 -22
- package/plugins/comments/contextMenuItem/addEditComment.js +3 -3
- package/plugins/comments/contextMenuItem/addEditComment.mjs +3 -3
- package/plugins/comments/contextMenuItem/readOnlyComment.js +2 -2
- package/plugins/comments/contextMenuItem/readOnlyComment.mjs +2 -2
- package/plugins/comments/contextMenuItem/removeComment.js +2 -2
- package/plugins/comments/contextMenuItem/removeComment.mjs +2 -2
- package/plugins/contextMenu/contextMenu.js +4 -5
- package/plugins/contextMenu/contextMenu.mjs +4 -5
- package/plugins/contextMenu/menu/cursor.js +1 -1
- package/plugins/contextMenu/menu/cursor.mjs +1 -1
- package/plugins/contextMenu/menu/defaultShortcutsList.js +5 -5
- package/plugins/contextMenu/menu/defaultShortcutsList.mjs +5 -5
- package/plugins/contextMenu/menu/menu.js +3 -3
- package/plugins/contextMenu/menu/menu.mjs +3 -3
- package/plugins/contextMenu/menu/positioner.js +1 -1
- package/plugins/contextMenu/menu/positioner.mjs +1 -1
- package/plugins/contextMenu/predefinedItems/alignment.js +1 -1
- package/plugins/contextMenu/predefinedItems/alignment.mjs +1 -1
- package/plugins/contextMenu/predefinedItems/clearColumn.js +1 -1
- package/plugins/contextMenu/predefinedItems/clearColumn.mjs +1 -1
- package/plugins/contextMenu/predefinedItems/columnLeft.js +3 -3
- package/plugins/contextMenu/predefinedItems/columnLeft.mjs +3 -3
- package/plugins/contextMenu/predefinedItems/columnRight.js +3 -3
- package/plugins/contextMenu/predefinedItems/columnRight.mjs +3 -3
- package/plugins/contextMenu/predefinedItems/readOnly.js +1 -1
- package/plugins/contextMenu/predefinedItems/readOnly.mjs +1 -1
- package/plugins/contextMenu/predefinedItems/removeColumn.js +1 -1
- package/plugins/contextMenu/predefinedItems/removeColumn.mjs +1 -1
- package/plugins/contextMenu/predefinedItems/removeRow.js +1 -1
- package/plugins/contextMenu/predefinedItems/removeRow.mjs +1 -1
- package/plugins/contextMenu/predefinedItems/rowAbove.js +3 -3
- package/plugins/contextMenu/predefinedItems/rowAbove.mjs +3 -3
- package/plugins/contextMenu/predefinedItems/rowBelow.js +3 -3
- package/plugins/contextMenu/predefinedItems/rowBelow.mjs +3 -3
- package/plugins/copyPaste/contextMenuItem/copy.js +1 -1
- package/plugins/copyPaste/contextMenuItem/copy.mjs +1 -1
- package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +3 -3
- package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +3 -3
- package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +3 -3
- package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +3 -3
- package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +3 -3
- package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +3 -3
- package/plugins/copyPaste/contextMenuItem/cut.js +1 -1
- package/plugins/copyPaste/contextMenuItem/cut.mjs +1 -1
- package/plugins/copyPaste/copyPaste.js +75 -40
- package/plugins/copyPaste/copyPaste.mjs +76 -41
- package/plugins/customBorders/customBorders.js +1 -1
- package/plugins/customBorders/customBorders.mjs +1 -1
- package/plugins/dialog/dialog.d.ts +23 -0
- package/plugins/dialog/dialog.js +489 -0
- package/plugins/dialog/dialog.mjs +485 -0
- package/plugins/dialog/index.d.ts +1 -0
- package/plugins/dialog/index.js +7 -0
- package/plugins/dialog/index.mjs +1 -0
- package/plugins/dialog/ui.js +264 -0
- package/plugins/dialog/ui.mjs +259 -0
- package/plugins/dropdownMenu/dropdownMenu.js +5 -4
- package/plugins/dropdownMenu/dropdownMenu.mjs +5 -4
- package/plugins/filters/filters.js +2 -2
- package/plugins/filters/filters.mjs +2 -2
- package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +3 -3
- package/plugins/hiddenColumns/contextMenuItem/hideColumn.mjs +3 -3
- package/plugins/hiddenColumns/contextMenuItem/showColumn.js +4 -4
- package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +4 -4
- package/plugins/hiddenRows/contextMenuItem/hideRow.js +3 -3
- package/plugins/hiddenRows/contextMenuItem/hideRow.mjs +3 -3
- package/plugins/hiddenRows/contextMenuItem/showRow.js +4 -4
- package/plugins/hiddenRows/contextMenuItem/showRow.mjs +4 -4
- package/plugins/index.d.ts +9 -0
- package/plugins/index.js +9 -0
- package/plugins/index.mjs +7 -1
- package/plugins/loading/content.js +36 -0
- package/plugins/loading/content.mjs +31 -0
- package/plugins/loading/index.d.ts +1 -0
- package/plugins/loading/index.js +7 -0
- package/plugins/loading/index.mjs +1 -0
- package/plugins/loading/loading.d.ts +19 -0
- package/plugins/loading/loading.js +292 -0
- package/plugins/loading/loading.mjs +287 -0
- package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +1 -1
- package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.mjs +1 -1
- package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +1 -1
- package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.mjs +1 -1
- package/plugins/manualColumnMove/manualColumnMove.js +3 -3
- package/plugins/manualColumnMove/manualColumnMove.mjs +3 -3
- package/plugins/manualColumnResize/manualColumnResize.js +3 -3
- package/plugins/manualColumnResize/manualColumnResize.mjs +3 -3
- package/plugins/manualRowMove/manualRowMove.js +4 -4
- package/plugins/manualRowMove/manualRowMove.mjs +4 -4
- package/plugins/manualRowResize/manualRowResize.js +5 -2
- package/plugins/manualRowResize/manualRowResize.mjs +5 -2
- package/plugins/mergeCells/contextMenuItem/toggleMerge.js +15 -15
- package/plugins/mergeCells/contextMenuItem/toggleMerge.mjs +15 -15
- package/plugins/mergeCells/focusOrder.js +75 -39
- package/plugins/mergeCells/focusOrder.mjs +75 -39
- package/plugins/mergeCells/mergeCells.js +26 -19
- package/plugins/mergeCells/mergeCells.mjs +26 -19
- package/plugins/mergeCells/renderer.js +14 -8
- package/plugins/mergeCells/renderer.mjs +14 -8
- package/plugins/multiColumnSorting/multiColumnSorting.js +3 -3
- package/plugins/multiColumnSorting/multiColumnSorting.mjs +3 -3
- package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +3 -3
- package/plugins/multipleSelectionHandles/multipleSelectionHandles.mjs +3 -3
- package/plugins/nestedHeaders/nestedHeaders.js +47 -41
- package/plugins/nestedHeaders/nestedHeaders.mjs +47 -41
- package/plugins/nestedRows/nestedRows.js +3 -3
- package/plugins/nestedRows/nestedRows.mjs +3 -3
- package/plugins/nestedRows/ui/collapsing.js +1 -2
- package/plugins/nestedRows/ui/collapsing.mjs +1 -2
- package/plugins/nestedRows/ui/contextMenu.js +4 -4
- package/plugins/nestedRows/ui/contextMenu.mjs +4 -4
- package/plugins/nestedRows/ui/headers.js +4 -1
- package/plugins/nestedRows/ui/headers.mjs +4 -1
- package/plugins/pagination/focusController.js +27 -0
- package/plugins/pagination/focusController.mjs +23 -0
- package/plugins/pagination/index.d.ts +1 -0
- package/plugins/pagination/index.js +7 -0
- package/plugins/pagination/index.mjs +1 -0
- package/plugins/pagination/pagination.d.ts +52 -0
- package/plugins/pagination/pagination.js +1034 -0
- package/plugins/pagination/pagination.mjs +1030 -0
- package/plugins/pagination/strategies/autoPageSize.js +96 -0
- package/plugins/pagination/strategies/autoPageSize.mjs +92 -0
- package/plugins/pagination/strategies/fixedPageSize.js +88 -0
- package/plugins/pagination/strategies/fixedPageSize.mjs +84 -0
- package/plugins/pagination/strategies/index.js +22 -0
- package/plugins/pagination/strategies/index.mjs +18 -0
- package/plugins/pagination/ui.js +449 -0
- package/plugins/pagination/ui.mjs +443 -0
- package/plugins/pagination/utils.js +28 -0
- package/plugins/pagination/utils.mjs +24 -0
- package/plugins/stretchColumns/calculator.js +4 -0
- package/plugins/stretchColumns/calculator.mjs +4 -0
- package/plugins/stretchColumns/stretchColumns.js +1 -1
- package/plugins/stretchColumns/stretchColumns.mjs +1 -1
- package/plugins/undoRedo/actions/dataChange.js +17 -15
- package/plugins/undoRedo/actions/dataChange.mjs +17 -15
- package/renderers/checkboxRenderer/checkboxRenderer.js +3 -3
- package/renderers/checkboxRenderer/checkboxRenderer.mjs +3 -3
- package/selection/range.js +11 -0
- package/selection/range.mjs +11 -0
- package/selection/selection.js +163 -124
- package/selection/selection.mjs +163 -124
- package/selection/transformation/_base.js +448 -0
- package/selection/transformation/_base.mjs +443 -0
- package/selection/transformation/extender.js +55 -0
- package/selection/transformation/extender.mjs +51 -0
- package/selection/transformation/focus.js +77 -0
- package/selection/transformation/focus.mjs +73 -0
- package/selection/transformation/index.js +7 -0
- package/selection/transformation/index.mjs +2 -0
- package/selection/utils.js +2 -1
- package/selection/utils.mjs +2 -1
- package/settings.d.ts +10 -1
- package/shortcutContexts/commands/editor/fastOpen.js +1 -1
- package/shortcutContexts/commands/editor/fastOpen.mjs +1 -1
- package/shortcutContexts/commands/editor/open.js +10 -4
- package/shortcutContexts/commands/editor/open.mjs +10 -4
- package/shortcutContexts/commands/extendCellsSelection/down.js +1 -1
- package/shortcutContexts/commands/extendCellsSelection/down.mjs +1 -1
- package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +2 -2
- package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +2 -2
- package/shortcutContexts/commands/extendCellsSelection/left.js +1 -1
- package/shortcutContexts/commands/extendCellsSelection/left.mjs +1 -1
- package/shortcutContexts/commands/extendCellsSelection/right.js +1 -1
- package/shortcutContexts/commands/extendCellsSelection/right.mjs +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toColumns.js +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toRows.js +1 -1
- package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +1 -1
- package/shortcutContexts/commands/extendCellsSelection/up.js +1 -1
- package/shortcutContexts/commands/extendCellsSelection/up.mjs +1 -1
- package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +2 -2
- package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +2 -2
- package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +2 -2
- package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +2 -2
- package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +5 -2
- package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +5 -2
- package/shortcutContexts/commands/moveCellSelection/inlineStart.js +5 -2
- package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +5 -2
- package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +1 -1
- package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +1 -1
- package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +1 -1
- package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +1 -1
- package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +1 -1
- package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +1 -1
- package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +1 -1
- package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +1 -1
- package/shortcutContexts/commands/moveCellSelection/toMostRight.js +1 -1
- package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +1 -1
- package/shortcutContexts/commands/moveCellSelection/toMostTop.js +1 -1
- package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +1 -1
- package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +2 -2
- package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +2 -2
- package/shortcutContexts/commands/scrollToFocusedCell.js +1 -1
- package/shortcutContexts/commands/scrollToFocusedCell.mjs +1 -1
- package/shortcutContexts/grid.js +3 -3
- package/shortcutContexts/grid.mjs +3 -3
- package/shortcuts/context.js +4 -1
- package/shortcuts/context.mjs +4 -1
- package/shortcuts/manager.js +17 -3
- package/shortcuts/manager.mjs +17 -3
- package/styles/handsontable.css +288 -22
- package/styles/handsontable.min.css +3 -3
- package/styles/ht-theme-classic.css +828 -0
- package/styles/ht-theme-classic.min.css +30 -0
- package/styles/ht-theme-horizon.css +122 -26
- package/styles/ht-theme-horizon.min.css +3 -3
- package/styles/ht-theme-main.css +124 -28
- package/styles/ht-theme-main.min.css +3 -3
- package/tableView.js +61 -25
- package/tableView.mjs +61 -25
- package/utils/a11yAnnouncer.js +70 -0
- package/utils/a11yAnnouncer.mjs +64 -0
- package/{core/focusCatcher → utils}/focusDetector.js +30 -12
- package/{core/focusCatcher → utils}/focusDetector.mjs +30 -12
- package/utils/samplesGenerator.js +17 -1
- package/utils/samplesGenerator.mjs +17 -1
- package/utils/stylesHandler.js +23 -8
- package/utils/stylesHandler.mjs +23 -8
- package/utils/valueAccessors.js +45 -0
- package/utils/valueAccessors.mjs +40 -0
- package/validators/autocompleteValidator/autocompleteValidator.js +2 -1
- package/validators/autocompleteValidator/autocompleteValidator.mjs +2 -1
- package/selection/transformation.js +0 -335
- package/selection/transformation.mjs +0 -331
@@ -342,13 +342,6 @@ export class TextEditor extends BaseEditor {
|
|
342
342
|
});
|
343
343
|
}
|
344
344
|
|
345
|
-
/**
|
346
|
-
* Ugly hack for autocompleteEditor.
|
347
|
-
*
|
348
|
-
* @private
|
349
|
-
*/
|
350
|
-
allowKeyEventPropagation() {}
|
351
|
-
|
352
345
|
/**
|
353
346
|
* Destroys the internal event manager and clears attached hooks.
|
354
347
|
*
|
package/focusManager.js
CHANGED
@@ -178,7 +178,7 @@ class FocusManager {
|
|
178
178
|
focusOnHighlightedCell(selectedCell) {
|
179
179
|
const focusElement = element => {
|
180
180
|
var _classPrivateFieldGet3, _classPrivateFieldGet4;
|
181
|
-
const currentHighlightCoords = (_classPrivateFieldGet3 = _classPrivateFieldGet(_hot, this).
|
181
|
+
const currentHighlightCoords = (_classPrivateFieldGet3 = _classPrivateFieldGet(_hot, this).getSelectedRangeActive()) === null || _classPrivateFieldGet3 === void 0 ? void 0 : _classPrivateFieldGet3.highlight;
|
182
182
|
if (!currentHighlightCoords) {
|
183
183
|
return;
|
184
184
|
}
|
@@ -227,7 +227,7 @@ class FocusManager {
|
|
227
227
|
exports.FocusManager = FocusManager;
|
228
228
|
function _getSelectedCell(callback) {
|
229
229
|
var _classPrivateFieldGet8;
|
230
|
-
const highlight = (_classPrivateFieldGet8 = _classPrivateFieldGet(_hot, this).
|
230
|
+
const highlight = (_classPrivateFieldGet8 = _classPrivateFieldGet(_hot, this).getSelectedRangeActive()) === null || _classPrivateFieldGet8 === void 0 ? void 0 : _classPrivateFieldGet8.highlight;
|
231
231
|
if (!highlight || !_classPrivateFieldGet(_hot, this).selection.isCellVisible(highlight)) {
|
232
232
|
callback(null);
|
233
233
|
return;
|
package/focusManager.mjs
CHANGED
@@ -175,7 +175,7 @@ export class FocusManager {
|
|
175
175
|
focusOnHighlightedCell(selectedCell) {
|
176
176
|
const focusElement = element => {
|
177
177
|
var _classPrivateFieldGet3, _classPrivateFieldGet4;
|
178
|
-
const currentHighlightCoords = (_classPrivateFieldGet3 = _classPrivateFieldGet(_hot, this).
|
178
|
+
const currentHighlightCoords = (_classPrivateFieldGet3 = _classPrivateFieldGet(_hot, this).getSelectedRangeActive()) === null || _classPrivateFieldGet3 === void 0 ? void 0 : _classPrivateFieldGet3.highlight;
|
179
179
|
if (!currentHighlightCoords) {
|
180
180
|
return;
|
181
181
|
}
|
@@ -223,7 +223,7 @@ export class FocusManager {
|
|
223
223
|
}
|
224
224
|
function _getSelectedCell(callback) {
|
225
225
|
var _classPrivateFieldGet8;
|
226
|
-
const highlight = (_classPrivateFieldGet8 = _classPrivateFieldGet(_hot, this).
|
226
|
+
const highlight = (_classPrivateFieldGet8 = _classPrivateFieldGet(_hot, this).getSelectedRangeActive()) === null || _classPrivateFieldGet8 === void 0 ? void 0 : _classPrivateFieldGet8.highlight;
|
227
227
|
if (!highlight || !_classPrivateFieldGet(_hot, this).selection.isCellVisible(highlight)) {
|
228
228
|
callback(null);
|
229
229
|
return;
|
package/helpers/a11y.js
CHANGED
@@ -33,6 +33,10 @@ const A11Y_OPTION = () => ['role', 'option'];
|
|
33
33
|
exports.A11Y_OPTION = A11Y_OPTION;
|
34
34
|
const A11Y_CHECKBOX = () => ['role', 'checkbox'];
|
35
35
|
exports.A11Y_CHECKBOX = A11Y_CHECKBOX;
|
36
|
+
const A11Y_DIALOG = () => ['role', 'dialog'];
|
37
|
+
exports.A11Y_DIALOG = A11Y_DIALOG;
|
38
|
+
const A11Y_ALERTDIALOG = () => ['role', 'alertdialog'];
|
39
|
+
exports.A11Y_ALERTDIALOG = A11Y_ALERTDIALOG;
|
36
40
|
const A11Y_SCOPE_COL = () => ['scope', 'col'];
|
37
41
|
exports.A11Y_SCOPE_COL = A11Y_SCOPE_COL;
|
38
42
|
const A11Y_SCOPE_ROW = () => ['scope', 'row'];
|
@@ -41,9 +45,16 @@ const A11Y_TEXT = () => ['type', 'text'];
|
|
41
45
|
exports.A11Y_TEXT = A11Y_TEXT;
|
42
46
|
const A11Y_LABEL = val => ['aria-label', val];
|
43
47
|
exports.A11Y_LABEL = A11Y_LABEL;
|
48
|
+
const A11Y_LABELED_BY = val => ['aria-labelledby', val];
|
49
|
+
exports.A11Y_LABELED_BY = A11Y_LABELED_BY;
|
50
|
+
const A11Y_DESCRIBED_BY = val => ['aria-describedby', val];
|
51
|
+
exports.A11Y_DESCRIBED_BY = A11Y_DESCRIBED_BY;
|
44
52
|
const A11Y_HIDDEN = () => ['aria-hidden', 'true'];
|
45
53
|
exports.A11Y_HIDDEN = A11Y_HIDDEN;
|
46
|
-
const A11Y_DISABLED = ()
|
54
|
+
const A11Y_DISABLED = function () {
|
55
|
+
let val = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
56
|
+
return ['aria-disabled', val];
|
57
|
+
};
|
47
58
|
exports.A11Y_DISABLED = A11Y_DISABLED;
|
48
59
|
const A11Y_MULTISELECTABLE = () => ['aria-multiselectable', 'true'];
|
49
60
|
exports.A11Y_MULTISELECTABLE = A11Y_MULTISELECTABLE;
|
@@ -82,4 +93,6 @@ exports.A11Y_RELEVANT = A11Y_RELEVANT;
|
|
82
93
|
const A11Y_SETSIZE = val => ['aria-setsize', val];
|
83
94
|
exports.A11Y_SETSIZE = A11Y_SETSIZE;
|
84
95
|
const A11Y_POSINSET = val => ['aria-posinset', val];
|
85
|
-
exports.A11Y_POSINSET = A11Y_POSINSET;
|
96
|
+
exports.A11Y_POSINSET = A11Y_POSINSET;
|
97
|
+
const A11Y_MODAL = () => ['aria-modal', 'true'];
|
98
|
+
exports.A11Y_MODAL = A11Y_MODAL;
|
package/helpers/a11y.mjs
CHANGED
@@ -14,12 +14,19 @@ export const A11Y_COMBOBOX = () => ['role', 'combobox'];
|
|
14
14
|
export const A11Y_LISTBOX = () => ['role', 'listbox'];
|
15
15
|
export const A11Y_OPTION = () => ['role', 'option'];
|
16
16
|
export const A11Y_CHECKBOX = () => ['role', 'checkbox'];
|
17
|
+
export const A11Y_DIALOG = () => ['role', 'dialog'];
|
18
|
+
export const A11Y_ALERTDIALOG = () => ['role', 'alertdialog'];
|
17
19
|
export const A11Y_SCOPE_COL = () => ['scope', 'col'];
|
18
20
|
export const A11Y_SCOPE_ROW = () => ['scope', 'row'];
|
19
21
|
export const A11Y_TEXT = () => ['type', 'text'];
|
20
22
|
export const A11Y_LABEL = val => ['aria-label', val];
|
23
|
+
export const A11Y_LABELED_BY = val => ['aria-labelledby', val];
|
24
|
+
export const A11Y_DESCRIBED_BY = val => ['aria-describedby', val];
|
21
25
|
export const A11Y_HIDDEN = () => ['aria-hidden', 'true'];
|
22
|
-
export const A11Y_DISABLED = ()
|
26
|
+
export const A11Y_DISABLED = function () {
|
27
|
+
let val = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
28
|
+
return ['aria-disabled', val];
|
29
|
+
};
|
23
30
|
export const A11Y_MULTISELECTABLE = () => ['aria-multiselectable', 'true'];
|
24
31
|
export const A11Y_HASPOPUP = val => ['aria-haspopup', val];
|
25
32
|
export const A11Y_ROWCOUNT = val => ['aria-rowcount', val];
|
@@ -38,4 +45,5 @@ export const A11Y_ACTIVEDESCENDANT = val => ['aria-activedescendant', val];
|
|
38
45
|
export const A11Y_LIVE = val => ['aria-live', val];
|
39
46
|
export const A11Y_RELEVANT = val => ['aria-relevant', val];
|
40
47
|
export const A11Y_SETSIZE = val => ['aria-setsize', val];
|
41
|
-
export const A11Y_POSINSET = val => ['aria-posinset', val];
|
48
|
+
export const A11Y_POSINSET = val => ['aria-posinset', val];
|
49
|
+
export const A11Y_MODAL = () => ['aria-modal', 'true'];
|
package/helpers/console.js
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
3
|
exports.__esModule = true;
|
4
|
+
exports.deprecatedWarn = deprecatedWarn;
|
4
5
|
exports.error = error;
|
5
6
|
exports.info = info;
|
6
7
|
exports.log = log;
|
@@ -38,6 +39,17 @@ function warn() {
|
|
38
39
|
}
|
39
40
|
}
|
40
41
|
|
42
|
+
/**
|
43
|
+
* Logs deprecated warn to the console if the `console` object is exposed.
|
44
|
+
*
|
45
|
+
* @param {string} message The message to log.
|
46
|
+
*/
|
47
|
+
function deprecatedWarn(message) {
|
48
|
+
if ((0, _mixed.isDefined)(console)) {
|
49
|
+
console.warn(`Deprecated: ${message}`);
|
50
|
+
}
|
51
|
+
}
|
52
|
+
|
41
53
|
/**
|
42
54
|
* Logs info to the console if the `console` object is exposed.
|
43
55
|
*
|
package/helpers/console.mjs
CHANGED
@@ -29,6 +29,17 @@ export function warn() {
|
|
29
29
|
}
|
30
30
|
}
|
31
31
|
|
32
|
+
/**
|
33
|
+
* Logs deprecated warn to the console if the `console` object is exposed.
|
34
|
+
*
|
35
|
+
* @param {string} message The message to log.
|
36
|
+
*/
|
37
|
+
export function deprecatedWarn(message) {
|
38
|
+
if (isDefined(console)) {
|
39
|
+
console.warn(`Deprecated: ${message}`);
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
32
43
|
/**
|
33
44
|
* Logs info to the console if the `console` object is exposed.
|
34
45
|
*
|
package/helpers/dom/element.js
CHANGED
@@ -840,7 +840,7 @@ function outerWidth(element) {
|
|
840
840
|
* @returns {number} Element's outer height.
|
841
841
|
*/
|
842
842
|
function outerHeight(element) {
|
843
|
-
return element.
|
843
|
+
return element.getBoundingClientRect().height;
|
844
844
|
}
|
845
845
|
|
846
846
|
/**
|
@@ -1022,14 +1022,14 @@ function walkontableCalculateScrollbarWidth() {
|
|
1022
1022
|
outer.style.visibility = 'hidden';
|
1023
1023
|
outer.appendChild(inner);
|
1024
1024
|
(rootDocument.body || rootDocument.documentElement).appendChild(outer);
|
1025
|
-
const w1 = inner.
|
1025
|
+
const w1 = inner.getBoundingClientRect().width;
|
1026
1026
|
outer.style.overflow = 'scroll';
|
1027
|
-
let w2 = inner.
|
1027
|
+
let w2 = inner.getBoundingClientRect().width;
|
1028
1028
|
if (w1 === w2) {
|
1029
1029
|
w2 = outer.clientWidth;
|
1030
1030
|
}
|
1031
1031
|
(rootDocument.body || rootDocument.documentElement).removeChild(outer);
|
1032
|
-
return w1 - w2
|
1032
|
+
return parseFloat((w1 - w2).toFixed(3));
|
1033
1033
|
}
|
1034
1034
|
|
1035
1035
|
/**
|
package/helpers/dom/element.mjs
CHANGED
@@ -777,7 +777,7 @@ export function outerWidth(element) {
|
|
777
777
|
* @returns {number} Element's outer height.
|
778
778
|
*/
|
779
779
|
export function outerHeight(element) {
|
780
|
-
return element.
|
780
|
+
return element.getBoundingClientRect().height;
|
781
781
|
}
|
782
782
|
|
783
783
|
/**
|
@@ -959,14 +959,14 @@ function walkontableCalculateScrollbarWidth() {
|
|
959
959
|
outer.style.visibility = 'hidden';
|
960
960
|
outer.appendChild(inner);
|
961
961
|
(rootDocument.body || rootDocument.documentElement).appendChild(outer);
|
962
|
-
const w1 = inner.
|
962
|
+
const w1 = inner.getBoundingClientRect().width;
|
963
963
|
outer.style.overflow = 'scroll';
|
964
|
-
let w2 = inner.
|
964
|
+
let w2 = inner.getBoundingClientRect().width;
|
965
965
|
if (w1 === w2) {
|
966
966
|
w2 = outer.clientWidth;
|
967
967
|
}
|
968
968
|
(rootDocument.body || rootDocument.documentElement).removeChild(outer);
|
969
|
-
return w1 - w2
|
969
|
+
return parseFloat((w1 - w2).toFixed(3));
|
970
970
|
}
|
971
971
|
|
972
972
|
/**
|
package/helpers/mixed.js
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
exports.__esModule = true;
|
4
4
|
exports._injectProductInfo = _injectProductInfo;
|
5
|
+
exports.getMostBottomEndPosition = getMostBottomEndPosition;
|
6
|
+
exports.getMostTopStartPosition = getMostTopStartPosition;
|
5
7
|
exports.isDefined = isDefined;
|
6
8
|
exports.isEmpty = isEmpty;
|
7
9
|
exports.isRegExp = isRegExp;
|
@@ -134,7 +136,7 @@ const domMessages = {
|
|
134
136
|
function _injectProductInfo(key, element) {
|
135
137
|
const hasValidType = !isEmpty(key);
|
136
138
|
const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
|
137
|
-
const hotVersion = "16.0
|
139
|
+
const hotVersion = "16.1.0-next-abd8f2e-20250904";
|
138
140
|
let keyValidityDate;
|
139
141
|
let consoleMessageState = 'invalid';
|
140
142
|
let domMessageState = 'invalid';
|
@@ -142,7 +144,7 @@ function _injectProductInfo(key, element) {
|
|
142
144
|
const schemaValidity = _checkKeySchema(key);
|
143
145
|
if (hasValidType || isNonCommercial || schemaValidity) {
|
144
146
|
if (schemaValidity) {
|
145
|
-
const releaseDate = (0, _moment.default)("
|
147
|
+
const releaseDate = (0, _moment.default)("11/09/2025", 'DD/MM/YYYY');
|
146
148
|
const releaseDays = Math.floor(releaseDate.toDate().getTime() / 8.64e7);
|
147
149
|
const keyValidityDays = _extractTime(key);
|
148
150
|
keyValidityDate = (0, _moment.default)((keyValidityDays + 1) * 8.64e7, 'x').format('MMMM DD, YYYY');
|
@@ -208,4 +210,65 @@ function _checkKeySchema(v) {
|
|
208
210
|
}
|
209
211
|
return p === z;
|
210
212
|
}
|
213
|
+
|
214
|
+
/**
|
215
|
+
* Gets the coordinates of the most top-start cell or header (depends on the table settings and its size).
|
216
|
+
*
|
217
|
+
* @param {Core} hot The Handsontable instance.
|
218
|
+
* @returns {CellCoords|null}
|
219
|
+
*/
|
220
|
+
function getMostTopStartPosition(hot) {
|
221
|
+
const {
|
222
|
+
rowIndexMapper,
|
223
|
+
columnIndexMapper
|
224
|
+
} = hot;
|
225
|
+
const {
|
226
|
+
navigableHeaders
|
227
|
+
} = hot.getSettings();
|
228
|
+
let topRow = navigableHeaders && hot.countColHeaders() > 0 ? -hot.countColHeaders() : 0;
|
229
|
+
let startColumn = navigableHeaders && hot.countRowHeaders() > 0 ? -hot.countRowHeaders() : 0;
|
230
|
+
if (topRow === 0) {
|
231
|
+
topRow = rowIndexMapper.getVisualFromRenderableIndex(topRow);
|
232
|
+
}
|
233
|
+
if (startColumn === 0) {
|
234
|
+
startColumn = columnIndexMapper.getVisualFromRenderableIndex(startColumn);
|
235
|
+
}
|
236
|
+
if (topRow === null || startColumn === null) {
|
237
|
+
return null;
|
238
|
+
}
|
239
|
+
return hot._createCellCoords(topRow, startColumn);
|
240
|
+
}
|
241
|
+
|
242
|
+
/**
|
243
|
+
* Gets the coordinates of the most bottom-end cell or header (depends on the table settings and its size).
|
244
|
+
*
|
245
|
+
* @param {Core} hot The Handsontable instance.
|
246
|
+
* @returns {CellCoords|null}
|
247
|
+
*/
|
248
|
+
function getMostBottomEndPosition(hot) {
|
249
|
+
var _rowIndexMapper$getVi, _columnIndexMapper$ge;
|
250
|
+
const {
|
251
|
+
rowIndexMapper,
|
252
|
+
columnIndexMapper
|
253
|
+
} = hot;
|
254
|
+
const {
|
255
|
+
navigableHeaders
|
256
|
+
} = hot.getSettings();
|
257
|
+
let bottomRow = rowIndexMapper.getRenderableIndexesLength() - 1;
|
258
|
+
let endColumn = columnIndexMapper.getRenderableIndexesLength() - 1;
|
259
|
+
if (bottomRow < 0) {
|
260
|
+
if (!navigableHeaders || hot.countColHeaders() === 0) {
|
261
|
+
return null;
|
262
|
+
}
|
263
|
+
bottomRow = -1;
|
264
|
+
}
|
265
|
+
if (endColumn < 0) {
|
266
|
+
if (!navigableHeaders || hot.countColHeaders() === 0) {
|
267
|
+
return null;
|
268
|
+
}
|
269
|
+
endColumn = -1;
|
270
|
+
}
|
271
|
+
return hot._createCellCoords((_rowIndexMapper$getVi = rowIndexMapper.getVisualFromRenderableIndex(bottomRow)) !== null && _rowIndexMapper$getVi !== void 0 ? _rowIndexMapper$getVi : bottomRow, (_columnIndexMapper$ge = columnIndexMapper.getVisualFromRenderableIndex(endColumn)) !== null && _columnIndexMapper$ge !== void 0 ? _columnIndexMapper$ge : endColumn);
|
272
|
+
}
|
273
|
+
|
211
274
|
/* eslint-enable */
|
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 = "16.0
|
127
|
+
const hotVersion = "16.1.0-next-abd8f2e-20250904";
|
128
128
|
let keyValidityDate;
|
129
129
|
let consoleMessageState = 'invalid';
|
130
130
|
let domMessageState = 'invalid';
|
@@ -132,7 +132,7 @@ export function _injectProductInfo(key, element) {
|
|
132
132
|
const schemaValidity = _checkKeySchema(key);
|
133
133
|
if (hasValidType || isNonCommercial || schemaValidity) {
|
134
134
|
if (schemaValidity) {
|
135
|
-
const releaseDate = moment("
|
135
|
+
const releaseDate = moment("11/09/2025", 'DD/MM/YYYY');
|
136
136
|
const releaseDays = Math.floor(releaseDate.toDate().getTime() / 8.64e7);
|
137
137
|
const keyValidityDays = _extractTime(key);
|
138
138
|
keyValidityDate = moment((keyValidityDays + 1) * 8.64e7, 'x').format('MMMM DD, YYYY');
|
@@ -198,4 +198,65 @@ function _checkKeySchema(v) {
|
|
198
198
|
}
|
199
199
|
return p === z;
|
200
200
|
}
|
201
|
+
|
202
|
+
/**
|
203
|
+
* Gets the coordinates of the most top-start cell or header (depends on the table settings and its size).
|
204
|
+
*
|
205
|
+
* @param {Core} hot The Handsontable instance.
|
206
|
+
* @returns {CellCoords|null}
|
207
|
+
*/
|
208
|
+
export function getMostTopStartPosition(hot) {
|
209
|
+
const {
|
210
|
+
rowIndexMapper,
|
211
|
+
columnIndexMapper
|
212
|
+
} = hot;
|
213
|
+
const {
|
214
|
+
navigableHeaders
|
215
|
+
} = hot.getSettings();
|
216
|
+
let topRow = navigableHeaders && hot.countColHeaders() > 0 ? -hot.countColHeaders() : 0;
|
217
|
+
let startColumn = navigableHeaders && hot.countRowHeaders() > 0 ? -hot.countRowHeaders() : 0;
|
218
|
+
if (topRow === 0) {
|
219
|
+
topRow = rowIndexMapper.getVisualFromRenderableIndex(topRow);
|
220
|
+
}
|
221
|
+
if (startColumn === 0) {
|
222
|
+
startColumn = columnIndexMapper.getVisualFromRenderableIndex(startColumn);
|
223
|
+
}
|
224
|
+
if (topRow === null || startColumn === null) {
|
225
|
+
return null;
|
226
|
+
}
|
227
|
+
return hot._createCellCoords(topRow, startColumn);
|
228
|
+
}
|
229
|
+
|
230
|
+
/**
|
231
|
+
* Gets the coordinates of the most bottom-end cell or header (depends on the table settings and its size).
|
232
|
+
*
|
233
|
+
* @param {Core} hot The Handsontable instance.
|
234
|
+
* @returns {CellCoords|null}
|
235
|
+
*/
|
236
|
+
export function getMostBottomEndPosition(hot) {
|
237
|
+
var _rowIndexMapper$getVi, _columnIndexMapper$ge;
|
238
|
+
const {
|
239
|
+
rowIndexMapper,
|
240
|
+
columnIndexMapper
|
241
|
+
} = hot;
|
242
|
+
const {
|
243
|
+
navigableHeaders
|
244
|
+
} = hot.getSettings();
|
245
|
+
let bottomRow = rowIndexMapper.getRenderableIndexesLength() - 1;
|
246
|
+
let endColumn = columnIndexMapper.getRenderableIndexesLength() - 1;
|
247
|
+
if (bottomRow < 0) {
|
248
|
+
if (!navigableHeaders || hot.countColHeaders() === 0) {
|
249
|
+
return null;
|
250
|
+
}
|
251
|
+
bottomRow = -1;
|
252
|
+
}
|
253
|
+
if (endColumn < 0) {
|
254
|
+
if (!navigableHeaders || hot.countColHeaders() === 0) {
|
255
|
+
return null;
|
256
|
+
}
|
257
|
+
endColumn = -1;
|
258
|
+
}
|
259
|
+
return hot._createCellCoords((_rowIndexMapper$getVi = rowIndexMapper.getVisualFromRenderableIndex(bottomRow)) !== null && _rowIndexMapper$getVi !== void 0 ? _rowIndexMapper$getVi : bottomRow, (_columnIndexMapper$ge = columnIndexMapper.getVisualFromRenderableIndex(endColumn)) !== null && _columnIndexMapper$ge !== void 0 ? _columnIndexMapper$ge : endColumn);
|
260
|
+
}
|
261
|
+
|
201
262
|
/* eslint-enable */
|
package/helpers/number.js
CHANGED
@@ -2,8 +2,10 @@
|
|
2
2
|
|
3
3
|
exports.__esModule = true;
|
4
4
|
exports.clamp = clamp;
|
5
|
+
exports.getParsedNumber = getParsedNumber;
|
5
6
|
exports.isNumeric = isNumeric;
|
6
7
|
exports.isNumericLike = isNumericLike;
|
8
|
+
exports.isUnsignedNumber = isUnsignedNumber;
|
7
9
|
exports.rangeEach = rangeEach;
|
8
10
|
exports.rangeEachReverse = rangeEachReverse;
|
9
11
|
exports.valueAccordingPercent = valueAccordingPercent;
|
@@ -141,4 +143,30 @@ function clamp(value, minValue, maxValue) {
|
|
141
143
|
return maxValue;
|
142
144
|
}
|
143
145
|
return value;
|
146
|
+
}
|
147
|
+
|
148
|
+
/**
|
149
|
+
* Get parsed number from numeric string.
|
150
|
+
*
|
151
|
+
* @param {string} numericData Float (separated by a dot or a comma) or integer.
|
152
|
+
* @returns {number|null} Number if we get data in parsable format, not changed value otherwise.
|
153
|
+
*/
|
154
|
+
function getParsedNumber(numericData) {
|
155
|
+
// Unifying "float like" string. Change from value with comma determiner to value with dot determiner,
|
156
|
+
// for example from `450,65` to `450.65`.
|
157
|
+
const unifiedNumericData = numericData.replace(',', '.');
|
158
|
+
if (isNaN(parseFloat(unifiedNumericData)) === false) {
|
159
|
+
return parseFloat(unifiedNumericData);
|
160
|
+
}
|
161
|
+
return null;
|
162
|
+
}
|
163
|
+
|
164
|
+
/**
|
165
|
+
* Check if the provided argument is an unsigned number.
|
166
|
+
*
|
167
|
+
* @param {*} value Value to check.
|
168
|
+
* @returns {boolean}
|
169
|
+
*/
|
170
|
+
function isUnsignedNumber(value) {
|
171
|
+
return Number.isInteger(value) && value >= 0;
|
144
172
|
}
|
package/helpers/number.mjs
CHANGED
@@ -132,4 +132,30 @@ export function clamp(value, minValue, maxValue) {
|
|
132
132
|
return maxValue;
|
133
133
|
}
|
134
134
|
return value;
|
135
|
+
}
|
136
|
+
|
137
|
+
/**
|
138
|
+
* Get parsed number from numeric string.
|
139
|
+
*
|
140
|
+
* @param {string} numericData Float (separated by a dot or a comma) or integer.
|
141
|
+
* @returns {number|null} Number if we get data in parsable format, not changed value otherwise.
|
142
|
+
*/
|
143
|
+
export function getParsedNumber(numericData) {
|
144
|
+
// Unifying "float like" string. Change from value with comma determiner to value with dot determiner,
|
145
|
+
// for example from `450,65` to `450.65`.
|
146
|
+
const unifiedNumericData = numericData.replace(',', '.');
|
147
|
+
if (isNaN(parseFloat(unifiedNumericData)) === false) {
|
148
|
+
return parseFloat(unifiedNumericData);
|
149
|
+
}
|
150
|
+
return null;
|
151
|
+
}
|
152
|
+
|
153
|
+
/**
|
154
|
+
* Check if the provided argument is an unsigned number.
|
155
|
+
*
|
156
|
+
* @param {*} value Value to check.
|
157
|
+
* @returns {boolean}
|
158
|
+
*/
|
159
|
+
export function isUnsignedNumber(value) {
|
160
|
+
return Number.isInteger(value) && value >= 0;
|
135
161
|
}
|
package/helpers/object.js
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
3
|
exports.__esModule = true;
|
4
|
+
exports.assignObjectDefaults = assignObjectDefaults;
|
4
5
|
exports.clone = clone;
|
5
6
|
exports.createObjectPropListener = createObjectPropListener;
|
6
7
|
exports.deepClone = deepClone;
|
@@ -369,4 +370,38 @@ function createObjectPropListener(defaultValue) {
|
|
369
370
|
*/
|
370
371
|
function hasOwnProperty(object, key) {
|
371
372
|
return Object.prototype.hasOwnProperty.call(object, key);
|
373
|
+
}
|
374
|
+
|
375
|
+
/**
|
376
|
+
* Assign default values to an object.
|
377
|
+
*
|
378
|
+
* @param {object} target The object to assign defaults to.
|
379
|
+
* @param {object} defaults The default values to assign.
|
380
|
+
* @returns {object} The object with defaults assigned.
|
381
|
+
*/
|
382
|
+
function assignObjectDefaults(target, defaults) {
|
383
|
+
if (typeof target !== 'object' || target === null) {
|
384
|
+
return defaults;
|
385
|
+
}
|
386
|
+
if (typeof defaults !== 'object' || defaults === null) {
|
387
|
+
return target;
|
388
|
+
}
|
389
|
+
const result = {};
|
390
|
+
|
391
|
+
// Assign defaults
|
392
|
+
Object.keys(defaults).forEach(key => {
|
393
|
+
if (typeof defaults[key] === 'object' && defaults[key] !== null && !Array.isArray(defaults[key])) {
|
394
|
+
result[key] = assignObjectDefaults(target[key], defaults[key]);
|
395
|
+
} else {
|
396
|
+
result[key] = hasOwnProperty(target, key) && target[key] !== undefined ? target[key] : defaults[key];
|
397
|
+
}
|
398
|
+
});
|
399
|
+
|
400
|
+
// Copy extra keys from target that aren't in defaults
|
401
|
+
Object.keys(target).forEach(key => {
|
402
|
+
if (!hasOwnProperty(result, key)) {
|
403
|
+
result[key] = target[key];
|
404
|
+
}
|
405
|
+
});
|
406
|
+
return result;
|
372
407
|
}
|
package/helpers/object.mjs
CHANGED
@@ -350,4 +350,38 @@ export function createObjectPropListener(defaultValue) {
|
|
350
350
|
*/
|
351
351
|
export function hasOwnProperty(object, key) {
|
352
352
|
return Object.prototype.hasOwnProperty.call(object, key);
|
353
|
+
}
|
354
|
+
|
355
|
+
/**
|
356
|
+
* Assign default values to an object.
|
357
|
+
*
|
358
|
+
* @param {object} target The object to assign defaults to.
|
359
|
+
* @param {object} defaults The default values to assign.
|
360
|
+
* @returns {object} The object with defaults assigned.
|
361
|
+
*/
|
362
|
+
export function assignObjectDefaults(target, defaults) {
|
363
|
+
if (typeof target !== 'object' || target === null) {
|
364
|
+
return defaults;
|
365
|
+
}
|
366
|
+
if (typeof defaults !== 'object' || defaults === null) {
|
367
|
+
return target;
|
368
|
+
}
|
369
|
+
const result = {};
|
370
|
+
|
371
|
+
// Assign defaults
|
372
|
+
Object.keys(defaults).forEach(key => {
|
373
|
+
if (typeof defaults[key] === 'object' && defaults[key] !== null && !Array.isArray(defaults[key])) {
|
374
|
+
result[key] = assignObjectDefaults(target[key], defaults[key]);
|
375
|
+
} else {
|
376
|
+
result[key] = hasOwnProperty(target, key) && target[key] !== undefined ? target[key] : defaults[key];
|
377
|
+
}
|
378
|
+
});
|
379
|
+
|
380
|
+
// Copy extra keys from target that aren't in defaults
|
381
|
+
Object.keys(target).forEach(key => {
|
382
|
+
if (!hasOwnProperty(result, key)) {
|
383
|
+
result[key] = target[key];
|
384
|
+
}
|
385
|
+
});
|
386
|
+
return result;
|
353
387
|
}
|
package/helpers/string.js
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
exports.__esModule = true;
|
4
4
|
exports.equalsIgnoreCase = equalsIgnoreCase;
|
5
|
+
exports.isJSON = isJSON;
|
5
6
|
exports.isPercentValue = isPercentValue;
|
6
7
|
exports.randomString = randomString;
|
7
8
|
exports.sanitize = sanitize;
|
@@ -59,6 +60,24 @@ function randomString() {
|
|
59
60
|
return s4() + s4() + s4() + s4();
|
60
61
|
}
|
61
62
|
|
63
|
+
/**
|
64
|
+
* Checks if a string is a valid JSON object.
|
65
|
+
*
|
66
|
+
* @param {string} string The string to check.
|
67
|
+
* @returns {boolean}
|
68
|
+
*/
|
69
|
+
function isJSON(string) {
|
70
|
+
if (typeof string !== 'string') {
|
71
|
+
return false;
|
72
|
+
}
|
73
|
+
try {
|
74
|
+
const parsed = JSON.parse(string);
|
75
|
+
return typeof parsed === 'object' && parsed !== null;
|
76
|
+
} catch {
|
77
|
+
return false;
|
78
|
+
}
|
79
|
+
}
|
80
|
+
|
62
81
|
/**
|
63
82
|
* Checks if value is valid percent.
|
64
83
|
*
|
package/helpers/string.mjs
CHANGED
@@ -48,6 +48,24 @@ export function randomString() {
|
|
48
48
|
return s4() + s4() + s4() + s4();
|
49
49
|
}
|
50
50
|
|
51
|
+
/**
|
52
|
+
* Checks if a string is a valid JSON object.
|
53
|
+
*
|
54
|
+
* @param {string} string The string to check.
|
55
|
+
* @returns {boolean}
|
56
|
+
*/
|
57
|
+
export function isJSON(string) {
|
58
|
+
if (typeof string !== 'string') {
|
59
|
+
return false;
|
60
|
+
}
|
61
|
+
try {
|
62
|
+
const parsed = JSON.parse(string);
|
63
|
+
return typeof parsed === 'object' && parsed !== null;
|
64
|
+
} catch {
|
65
|
+
return false;
|
66
|
+
}
|
67
|
+
}
|
68
|
+
|
51
69
|
/**
|
52
70
|
* Checks if value is valid percent.
|
53
71
|
*
|