handsontable 18.0.0 → 18.1.0-rc1
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/axisSizing/axisSizeSource.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/axisSizeSource.d.ts +55 -0
- package/3rdparty/walkontable/src/axisSizing/axisSizeSource.js +15 -0
- package/3rdparty/walkontable/src/axisSizing/axisSizeSource.mjs +14 -0
- package/3rdparty/walkontable/src/axisSizing/boxModel.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/boxModel.d.ts +32 -0
- package/3rdparty/walkontable/src/axisSizing/boxModel.js +45 -0
- package/3rdparty/walkontable/src/axisSizing/boxModel.mjs +33 -0
- package/3rdparty/walkontable/src/axisSizing/columnUtils.d.mts +2 -0
- package/3rdparty/walkontable/src/{utils/column.d.ts → axisSizing/columnUtils.d.ts} +12 -10
- package/3rdparty/walkontable/src/axisSizing/columnUtils.js +142 -0
- package/3rdparty/walkontable/src/axisSizing/columnUtils.mjs +137 -0
- package/3rdparty/walkontable/src/axisSizing/defaultSizeSource.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/defaultSizeSource.d.ts +58 -0
- package/3rdparty/walkontable/src/axisSizing/defaultSizeSource.js +124 -0
- package/3rdparty/walkontable/src/axisSizing/defaultSizeSource.mjs +114 -0
- package/3rdparty/walkontable/src/axisSizing/oversizedRows.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/oversizedRows.d.ts +162 -0
- package/3rdparty/walkontable/src/axisSizing/oversizedRows.js +424 -0
- package/3rdparty/walkontable/src/axisSizing/oversizedRows.mjs +522 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/index.d.ts +130 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/index.js +251 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/index.mjs +257 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/prefixSumStrategy.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/prefixSumStrategy.d.ts +51 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/prefixSumStrategy.js +116 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/prefixSumStrategy.mjs +112 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/sparseStrategy.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/sparseStrategy.d.ts +53 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/sparseStrategy.js +199 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/sparseStrategy.mjs +196 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/strategy.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/strategy.d.ts +53 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/strategy.js +40 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/strategy.mjs +41 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/uniformStrategy.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/uniformStrategy.d.ts +47 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/uniformStrategy.js +116 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/uniformStrategy.mjs +110 -0
- package/3rdparty/walkontable/src/axisSizing/rowUtils.d.mts +2 -0
- package/3rdparty/walkontable/src/{utils/row.d.ts → axisSizing/rowUtils.d.ts} +11 -9
- package/3rdparty/walkontable/src/axisSizing/rowUtils.js +106 -0
- package/3rdparty/walkontable/src/axisSizing/rowUtils.mjs +101 -0
- package/3rdparty/walkontable/src/axisSizing/sizeGetters.d.mts +2 -0
- package/3rdparty/walkontable/src/axisSizing/sizeGetters.d.ts +84 -0
- package/3rdparty/walkontable/src/axisSizing/sizeGetters.js +102 -0
- package/3rdparty/walkontable/src/axisSizing/sizeGetters.mjs +92 -0
- package/3rdparty/walkontable/src/calculator/axisCalculation.d.ts +1 -1
- package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.d.ts +10 -0
- package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.js +10 -1
- package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.mjs +10 -1
- package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.d.ts +9 -0
- package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.js +9 -1
- package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.mjs +9 -1
- package/3rdparty/walkontable/src/calculator/viewportColumns.d.ts +1 -1
- package/3rdparty/walkontable/src/calculator/viewportRows.d.ts +1 -1
- package/3rdparty/walkontable/src/cell/coords.js +4 -9
- package/3rdparty/walkontable/src/cell/coords.mjs +4 -9
- package/3rdparty/walkontable/src/cell/range.d.ts +10 -0
- package/3rdparty/walkontable/src/cell/range.js +19 -15
- package/3rdparty/walkontable/src/cell/range.mjs +16 -12
- package/3rdparty/walkontable/src/core/_base.d.ts +21 -21
- package/3rdparty/walkontable/src/core/_base.js +47 -147
- package/3rdparty/walkontable/src/core/_base.mjs +17 -147
- package/3rdparty/walkontable/src/core/clone.d.ts +4 -14
- package/3rdparty/walkontable/src/core/clone.js +40 -5
- package/3rdparty/walkontable/src/core/clone.mjs +10 -5
- package/3rdparty/walkontable/src/core/core.d.ts +1 -5
- package/3rdparty/walkontable/src/core/core.js +41 -47
- package/3rdparty/walkontable/src/core/core.mjs +12 -48
- package/3rdparty/walkontable/src/domMeasure/geometryReader.d.mts +1 -0
- package/3rdparty/walkontable/src/domMeasure/geometryReader.d.ts +172 -0
- package/3rdparty/walkontable/src/domMeasure/geometryReader.js +19 -0
- package/3rdparty/walkontable/src/domMeasure/geometryReader.mjs +16 -0
- package/3rdparty/walkontable/src/domMeasure/liveGeometryReader.d.mts +1 -0
- package/3rdparty/walkontable/src/domMeasure/liveGeometryReader.d.ts +134 -0
- package/3rdparty/walkontable/src/domMeasure/liveGeometryReader.js +195 -0
- package/3rdparty/walkontable/src/domMeasure/liveGeometryReader.mjs +193 -0
- package/3rdparty/walkontable/src/event.d.ts +25 -12
- package/3rdparty/walkontable/src/event.js +96 -236
- package/3rdparty/walkontable/src/event.mjs +95 -236
- package/3rdparty/walkontable/src/facade/core.d.ts +6 -6
- package/3rdparty/walkontable/src/index.d.ts +1 -1
- package/3rdparty/walkontable/src/index.js +10 -21
- package/3rdparty/walkontable/src/index.mjs +1 -1
- package/3rdparty/walkontable/src/overlay/index.d.ts +6 -6
- package/3rdparty/walkontable/src/overlay/index.js +11 -11
- package/3rdparty/walkontable/src/overlay/index.mjs +6 -6
- package/3rdparty/walkontable/src/overlay/overlays.d.ts +375 -0
- package/3rdparty/walkontable/src/overlay/overlays.js +605 -0
- package/3rdparty/walkontable/src/overlay/overlays.mjs +594 -0
- package/3rdparty/walkontable/src/overlay/{_base.d.ts → regions/_base.d.ts} +65 -16
- package/3rdparty/walkontable/src/overlay/{_base.js → regions/_base.js} +155 -50
- package/3rdparty/walkontable/src/overlay/{_base.mjs → regions/_base.mjs} +158 -47
- package/3rdparty/walkontable/src/overlay/regions/bottomInlineStartCornerOverlay.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/{bottomInlineStartCorner.d.ts → regions/bottomInlineStartCornerOverlay.d.ts} +5 -10
- package/3rdparty/walkontable/src/overlay/{bottomInlineStartCorner.js → regions/bottomInlineStartCornerOverlay.js} +18 -20
- package/3rdparty/walkontable/src/overlay/{bottomInlineStartCorner.mjs → regions/bottomInlineStartCornerOverlay.mjs} +18 -20
- package/3rdparty/walkontable/src/overlay/regions/bottomOverlay.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/{bottom.d.ts → regions/bottomOverlay.d.ts} +16 -11
- package/3rdparty/walkontable/src/overlay/{bottom.js → regions/bottomOverlay.js} +111 -66
- package/3rdparty/walkontable/src/overlay/{bottom.mjs → regions/bottomOverlay.mjs} +111 -66
- package/3rdparty/walkontable/src/overlay/regions/inlineStartOverlay.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/{inlineStart.d.ts → regions/inlineStartOverlay.d.ts} +17 -11
- package/3rdparty/walkontable/src/overlay/{inlineStart.js → regions/inlineStartOverlay.js} +120 -67
- package/3rdparty/walkontable/src/overlay/{inlineStart.mjs → regions/inlineStartOverlay.mjs} +120 -67
- package/3rdparty/walkontable/src/overlay/regions/topInlineStartCornerOverlay.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/{topInlineStartCorner.d.ts → regions/topInlineStartCornerOverlay.d.ts} +5 -10
- package/3rdparty/walkontable/src/overlay/{topInlineStartCorner.js → regions/topInlineStartCornerOverlay.js} +13 -16
- package/3rdparty/walkontable/src/overlay/{topInlineStartCorner.mjs → regions/topInlineStartCornerOverlay.mjs} +13 -16
- package/3rdparty/walkontable/src/overlay/regions/topOverlay.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/{top.d.ts → regions/topOverlay.d.ts} +32 -11
- package/3rdparty/walkontable/src/overlay/{top.js → regions/topOverlay.js} +161 -77
- package/3rdparty/walkontable/src/overlay/{top.mjs → regions/topOverlay.mjs} +161 -77
- package/3rdparty/walkontable/src/overlay/resizeMonitor.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/resizeMonitor.d.ts +49 -0
- package/3rdparty/walkontable/src/overlay/resizeMonitor.js +149 -0
- package/3rdparty/walkontable/src/overlay/resizeMonitor.mjs +148 -0
- package/3rdparty/walkontable/src/overlay/scroll/nativeScrollInput.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/scroll/nativeScrollInput.d.ts +62 -0
- package/3rdparty/walkontable/src/overlay/scroll/nativeScrollInput.js +283 -0
- package/3rdparty/walkontable/src/overlay/scroll/nativeScrollInput.mjs +288 -0
- package/3rdparty/walkontable/src/overlay/scroll/scrollSync.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/scroll/scrollSync.d.ts +176 -0
- package/3rdparty/walkontable/src/overlay/scroll/scrollSync.js +542 -0
- package/3rdparty/walkontable/src/overlay/scroll/scrollSync.mjs +550 -0
- package/3rdparty/walkontable/src/overlay/spreaderSize.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/spreaderSize.d.ts +67 -0
- package/3rdparty/walkontable/src/overlay/spreaderSize.js +173 -0
- package/3rdparty/walkontable/src/overlay/spreaderSize.mjs +174 -0
- package/3rdparty/walkontable/src/{stickyScrollStrategy.d.ts → overlay/strategies/stickyScrollStrategy.d.ts} +33 -21
- package/3rdparty/walkontable/src/{stickyScrollStrategy.js → overlay/strategies/stickyScrollStrategy.js} +65 -53
- package/3rdparty/walkontable/src/{stickyScrollStrategy.mjs → overlay/strategies/stickyScrollStrategy.mjs} +63 -50
- package/3rdparty/walkontable/src/ports.d.mts +1 -0
- package/3rdparty/walkontable/src/ports.d.ts +54 -0
- package/3rdparty/walkontable/src/ports.js +23 -0
- package/3rdparty/walkontable/src/ports.mjs +24 -0
- package/3rdparty/walkontable/src/{renderer → render}/_base.d.ts +1 -1
- package/3rdparty/walkontable/src/{renderer → render}/cells.js +1 -1
- package/3rdparty/walkontable/src/{renderer → render}/cells.mjs +1 -1
- package/3rdparty/walkontable/src/{renderer → render}/columnHeaders.d.ts +1 -0
- package/3rdparty/walkontable/src/{renderer → render}/columnHeaders.js +41 -1
- package/3rdparty/walkontable/src/{renderer → render}/columnHeaders.mjs +42 -2
- package/3rdparty/walkontable/src/render/index.d.mts +1 -0
- package/3rdparty/walkontable/src/{renderer → render}/index.d.ts +11 -3
- package/3rdparty/walkontable/src/{renderer → render}/index.js +13 -3
- package/3rdparty/walkontable/src/{renderer → render}/index.mjs +11 -1
- package/3rdparty/walkontable/src/{renderer → render}/rows.js +1 -1
- package/3rdparty/walkontable/src/{renderer → render}/rows.mjs +1 -1
- package/3rdparty/walkontable/src/render/tableRenderer.d.mts +1 -0
- package/3rdparty/walkontable/src/{renderer/table.d.ts → render/tableRenderer.d.ts} +12 -2
- package/3rdparty/walkontable/src/render/tableRenderer.js +375 -0
- package/3rdparty/walkontable/src/{renderer/table.mjs → render/tableRenderer.mjs} +152 -6
- package/3rdparty/walkontable/src/{scroll.d.ts → scroll/scroll.d.ts} +27 -10
- package/3rdparty/walkontable/src/{scroll.js → scroll/scroll.js} +104 -35
- package/3rdparty/walkontable/src/{scroll.mjs → scroll/scroll.mjs} +102 -32
- package/3rdparty/walkontable/src/selection/border/border.d.ts +313 -5
- package/3rdparty/walkontable/src/selection/border/border.js +861 -51
- package/3rdparty/walkontable/src/selection/border/border.mjs +863 -53
- package/3rdparty/walkontable/src/selection/border/types.d.ts +30 -0
- package/3rdparty/walkontable/src/selection/manager.js +242 -12
- package/3rdparty/walkontable/src/selection/manager.mjs +243 -13
- package/3rdparty/walkontable/src/selection/scanner.js +5 -12
- package/3rdparty/walkontable/src/selection/scanner.mjs +5 -12
- package/3rdparty/walkontable/src/settings/accessor.d.mts +2 -0
- package/3rdparty/walkontable/src/settings/accessor.d.ts +74 -0
- package/3rdparty/walkontable/src/settings/accessor.js +78 -0
- package/3rdparty/walkontable/src/settings/accessor.mjs +71 -0
- package/3rdparty/walkontable/src/settings/defaults.d.mts +1 -0
- package/3rdparty/walkontable/src/{settings.d.ts → settings/defaults.d.ts} +16 -77
- package/3rdparty/walkontable/src/settings/defaults.js +146 -0
- package/3rdparty/walkontable/src/settings/defaults.mjs +225 -0
- package/3rdparty/walkontable/src/settings/index.d.mts +1 -0
- package/3rdparty/walkontable/src/settings/index.d.ts +6 -0
- package/3rdparty/walkontable/src/settings/index.js +20 -0
- package/3rdparty/walkontable/src/settings/index.mjs +5 -0
- package/3rdparty/walkontable/src/table/baseTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/baseTable.d.ts +284 -0
- package/3rdparty/walkontable/src/table/baseTable.js +290 -0
- package/3rdparty/walkontable/src/table/baseTable.mjs +278 -0
- package/3rdparty/walkontable/src/table/cellAccess.d.mts +1 -0
- package/3rdparty/walkontable/src/table/cellAccess.d.ts +101 -0
- package/3rdparty/walkontable/src/table/cellAccess.js +238 -0
- package/3rdparty/walkontable/src/table/cellAccess.mjs +229 -0
- package/3rdparty/walkontable/src/table/domScaffold.d.mts +1 -0
- package/3rdparty/walkontable/src/table/domScaffold.d.ts +37 -0
- package/3rdparty/walkontable/src/table/domScaffold.js +145 -0
- package/3rdparty/walkontable/src/table/domScaffold.mjs +136 -0
- package/3rdparty/walkontable/src/table/drawCycle.d.mts +1 -0
- package/3rdparty/walkontable/src/table/drawCycle.d.ts +16 -0
- package/3rdparty/walkontable/src/table/drawCycle.js +405 -0
- package/3rdparty/walkontable/src/table/drawCycle.mjs +403 -0
- package/3rdparty/walkontable/src/table/rangeQuery/renderedRange.d.mts +1 -0
- package/3rdparty/walkontable/src/table/rangeQuery/renderedRange.d.ts +38 -0
- package/3rdparty/walkontable/src/table/rangeQuery/renderedRange.js +15 -0
- package/3rdparty/walkontable/src/table/rangeQuery/renderedRange.mjs +14 -0
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyColumnsStart.d.ts +1 -1
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyColumnsStart.js +1 -1
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyColumnsStart.mjs +1 -1
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsBottom.d.ts +1 -1
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsTop.d.ts +1 -1
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsTop.js +1 -1
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsTop.mjs +1 -1
- package/3rdparty/walkontable/src/table/rangeQuery/viewportPredicates.d.mts +2 -0
- package/3rdparty/walkontable/src/table/rangeQuery/viewportPredicates.d.ts +226 -0
- package/3rdparty/walkontable/src/table/rangeQuery/viewportPredicates.js +251 -0
- package/3rdparty/walkontable/src/table/rangeQuery/viewportPredicates.mjs +241 -0
- package/3rdparty/walkontable/src/table/rangeQuery/virtualRange.d.mts +1 -0
- package/3rdparty/walkontable/src/table/rangeQuery/virtualRange.d.ts +14 -0
- package/3rdparty/walkontable/src/table/rangeQuery/virtualRange.js +196 -0
- package/3rdparty/walkontable/src/table/rangeQuery/virtualRange.mjs +179 -0
- package/3rdparty/walkontable/src/table/regions/bottomInlineStartCornerTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/regions/bottomInlineStartCornerTable.d.ts +16 -0
- package/3rdparty/walkontable/src/table/{bottomInlineStartCorner.js → regions/bottomInlineStartCornerTable.js} +9 -12
- package/3rdparty/walkontable/src/table/regions/bottomInlineStartCornerTable.mjs +21 -0
- package/3rdparty/walkontable/src/table/regions/bottomTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/regions/bottomTable.d.ts +15 -0
- package/3rdparty/walkontable/src/table/regions/bottomTable.js +35 -0
- package/3rdparty/walkontable/src/table/regions/bottomTable.mjs +20 -0
- package/3rdparty/walkontable/src/table/regions/inlineStartTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/regions/inlineStartTable.d.ts +12 -0
- package/3rdparty/walkontable/src/table/regions/inlineStartTable.js +32 -0
- package/3rdparty/walkontable/src/table/regions/inlineStartTable.mjs +17 -0
- package/3rdparty/walkontable/src/table/regions/masterTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/{master.d.ts → regions/masterTable.d.ts} +4 -13
- package/3rdparty/walkontable/src/table/{master.js → regions/masterTable.js} +27 -57
- package/3rdparty/walkontable/src/table/{master.mjs → regions/masterTable.mjs} +26 -56
- package/3rdparty/walkontable/src/table/regions/topInlineStartCornerTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/regions/topInlineStartCornerTable.d.ts +16 -0
- package/3rdparty/walkontable/src/table/{topInlineStartCorner.js → regions/topInlineStartCornerTable.js} +9 -12
- package/3rdparty/walkontable/src/table/regions/topInlineStartCornerTable.mjs +21 -0
- package/3rdparty/walkontable/src/table/regions/topTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/regions/topTable.d.ts +15 -0
- package/3rdparty/walkontable/src/table/regions/topTable.js +35 -0
- package/3rdparty/walkontable/src/table/regions/topTable.mjs +20 -0
- package/3rdparty/walkontable/src/types.d.ts +7 -69
- package/3rdparty/walkontable/src/types.mjs +2 -1
- package/3rdparty/walkontable/src/utils/pointerToCoords.d.mts +1 -0
- package/3rdparty/walkontable/src/utils/{cellCoords.d.ts → pointerToCoords.d.ts} +24 -0
- package/3rdparty/walkontable/src/utils/pointerToCoords.js +181 -0
- package/3rdparty/walkontable/src/utils/pointerToCoords.mjs +186 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/gatherLayoutInput.d.mts +1 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/gatherLayoutInput.d.ts +40 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/gatherLayoutInput.js +139 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/gatherLayoutInput.mjs +131 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/layoutSnapshot.d.mts +1 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/layoutSnapshot.d.ts +133 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/layoutSnapshot.js +18 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/layoutSnapshot.mjs +18 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/resolveLayout.d.mts +1 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/resolveLayout.d.ts +17 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/resolveLayout.js +104 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/resolveLayout.mjs +99 -0
- package/3rdparty/walkontable/src/viewport/calculatorFactory.d.mts +1 -0
- package/3rdparty/walkontable/src/viewport/calculatorFactory.d.ts +84 -0
- package/3rdparty/walkontable/src/viewport/calculatorFactory.js +588 -0
- package/3rdparty/walkontable/src/viewport/calculatorFactory.mjs +601 -0
- package/3rdparty/walkontable/src/viewport/viewport.d.ts +267 -0
- package/3rdparty/walkontable/src/viewport/viewport.js +363 -0
- package/3rdparty/walkontable/src/viewport/viewport.mjs +355 -0
- package/3rdparty/walkontable/src/viewport/workspaceSize.d.mts +1 -0
- package/3rdparty/walkontable/src/viewport/workspaceSize.d.ts +59 -0
- package/3rdparty/walkontable/src/viewport/workspaceSize.js +284 -0
- package/3rdparty/walkontable/src/viewport/workspaceSize.mjs +282 -0
- package/3rdparty/walkontable/src/wire.d.mts +1 -0
- package/3rdparty/walkontable/src/wire.d.ts +81 -0
- package/3rdparty/walkontable/src/wire.js +56 -0
- package/3rdparty/walkontable/src/wire.mjs +56 -0
- package/LICENSE.txt +1 -1
- package/README.md +2 -2
- package/base.d.ts +10 -2
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/cellTypes/checkboxType/accessors/valueSetter.d.ts +1 -1
- package/cellTypes/checkboxType/accessors/valueSetter.js +3 -1
- package/cellTypes/checkboxType/accessors/valueSetter.mjs +3 -1
- package/cellTypes/index.d.ts +3 -2
- package/cellTypes/index.js +9 -0
- package/cellTypes/index.mjs +5 -2
- package/cellTypes/intlDatetimeType/index.d.mts +1 -0
- package/cellTypes/intlDatetimeType/index.d.ts +1 -0
- package/cellTypes/intlDatetimeType/index.js +19 -0
- package/cellTypes/intlDatetimeType/index.mjs +1 -0
- package/cellTypes/intlDatetimeType/intlDatetimeType.d.mts +1 -0
- package/cellTypes/intlDatetimeType/intlDatetimeType.d.ts +16 -0
- package/cellTypes/intlDatetimeType/intlDatetimeType.js +31 -0
- package/cellTypes/intlDatetimeType/intlDatetimeType.mjs +15 -0
- package/cellTypes/multiSelectType/index.d.ts +1 -1
- package/cellTypes/multiSelectType/index.js +3 -0
- package/cellTypes/multiSelectType/index.mjs +1 -1
- package/cellTypes/multiSelectType/multiSelectType.d.ts +1 -0
- package/cellTypes/multiSelectType/multiSelectType.js +4 -0
- package/cellTypes/multiSelectType/multiSelectType.mjs +1 -0
- package/cellTypes/numericType/accessors/valueSetter.js +30 -2
- package/cellTypes/numericType/accessors/valueSetter.mjs +31 -3
- package/core/coordsMapper/rangeToRenderableMapper.js +5 -12
- package/core/coordsMapper/rangeToRenderableMapper.mjs +5 -12
- package/core/hooks/bucket.d.ts +40 -6
- package/core/hooks/bucket.js +113 -84
- package/core/hooks/bucket.mjs +118 -84
- package/core/hooks/constants.js +254 -16
- package/core/hooks/constants.mjs +254 -16
- package/core/hooks/index.js +28 -25
- package/core/hooks/index.mjs +28 -25
- package/core/layout/constants.d.ts +11 -0
- package/core/layout/constants.js +6 -0
- package/core/layout/constants.mjs +12 -0
- package/core/layout/domSlot.d.ts +3 -1
- package/core/layout/domSlot.js +21 -14
- package/core/layout/domSlot.mjs +21 -14
- package/core/layout/index.d.ts +2 -2
- package/core/layout/index.js +6 -0
- package/core/layout/index.mjs +2 -2
- package/core/layout/layoutManager.d.ts +13 -0
- package/core/layout/layoutManager.js +25 -13
- package/core/layout/layoutManager.mjs +26 -11
- package/core/settings.d.ts +59 -6
- package/core/types.d.ts +15 -1
- package/core/types.mjs +9 -0
- package/core.js +481 -85
- package/core.mjs +483 -87
- package/dataMap/dataMap.d.ts +3 -13
- package/dataMap/dataMap.js +101 -44
- package/dataMap/dataMap.mjs +102 -45
- package/dataMap/dataSource.js +4 -1
- package/dataMap/dataSource.mjs +4 -1
- package/dataMap/metaManager/index.d.ts +62 -8
- package/dataMap/metaManager/index.js +66 -0
- package/dataMap/metaManager/index.mjs +66 -0
- package/dataMap/metaManager/lazyFactoryMap.d.ts +68 -43
- package/dataMap/metaManager/lazyFactoryMap.js +490 -110
- package/dataMap/metaManager/lazyFactoryMap.mjs +504 -111
- package/dataMap/metaManager/metaLayers/cellMeta.d.ts +55 -8
- package/dataMap/metaManager/metaLayers/cellMeta.js +112 -17
- package/dataMap/metaManager/metaLayers/cellMeta.mjs +112 -17
- package/dataMap/metaManager/metaLayers/columnMeta.d.ts +2 -1
- package/dataMap/metaManager/metaLayers/columnMeta.js +1 -0
- package/dataMap/metaManager/metaLayers/columnMeta.mjs +1 -0
- package/dataMap/metaManager/metaSchema.js +712 -31
- package/dataMap/metaManager/metaSchema.mjs +712 -31
- package/dataMap/metaManager/mods/dynamicCellMeta.d.ts +24 -10
- package/dataMap/metaManager/mods/dynamicCellMeta.js +245 -28
- package/dataMap/metaManager/mods/dynamicCellMeta.mjs +246 -29
- package/dataMap/metaManager/mods/extendMetaProperties.js +4 -9
- package/dataMap/metaManager/mods/extendMetaProperties.mjs +4 -9
- package/dataMap/sourceDataValidator.d.ts +13 -21
- package/dataMap/sourceDataValidator.js +39 -29
- package/dataMap/sourceDataValidator.mjs +50 -33
- package/dist/handsontable.full.js +34553 -9903
- package/dist/handsontable.full.min.js +168 -112
- package/dist/handsontable.js +31541 -13409
- package/dist/handsontable.min.js +172 -116
- package/dist/languages/all.js +2 -1
- package/dist/languages/all.min.js +1 -1
- package/dist/languages/fa-IR.js +2 -1
- package/dist/languages/fa-IR.min.js +1 -1
- package/dist/themes/classic.js +9 -3
- package/dist/themes/classic.min.js +4 -4
- package/dist/themes/horizon.js +9 -3
- package/dist/themes/horizon.min.js +4 -4
- package/dist/themes/main.js +9 -3
- package/dist/themes/main.min.js +4 -4
- package/dist/themes/static/variables/colors/ant.js +3 -3
- package/dist/themes/static/variables/colors/ant.min.js +3 -3
- package/dist/themes/static/variables/colors/classic.js +3 -3
- package/dist/themes/static/variables/colors/classic.min.js +3 -3
- package/dist/themes/static/variables/colors/horizon.js +3 -3
- package/dist/themes/static/variables/colors/horizon.min.js +3 -3
- package/dist/themes/static/variables/colors/main.js +3 -3
- package/dist/themes/static/variables/colors/main.min.js +3 -3
- package/dist/themes/static/variables/colors/material.js +3 -3
- package/dist/themes/static/variables/colors/material.min.js +3 -3
- package/dist/themes/static/variables/colors/shadcn.js +3 -3
- package/dist/themes/static/variables/colors/shadcn.min.js +3 -3
- package/dist/themes/static/variables/density.js +3 -3
- package/dist/themes/static/variables/density.min.js +3 -3
- package/dist/themes/static/variables/helpers/iconsMap.js +4 -9
- package/dist/themes/static/variables/helpers/iconsMap.min.js +4 -9
- package/dist/themes/static/variables/icons/horizon.js +3 -3
- package/dist/themes/static/variables/icons/horizon.min.js +3 -3
- package/dist/themes/static/variables/icons/main.js +3 -3
- package/dist/themes/static/variables/icons/main.min.js +3 -3
- package/dist/themes/static/variables/sizing.js +3 -3
- package/dist/themes/static/variables/sizing.min.js +3 -3
- package/dist/themes/static/variables/tokens/classic.js +9 -3
- package/dist/themes/static/variables/tokens/classic.min.js +4 -4
- package/dist/themes/static/variables/tokens/horizon.js +9 -3
- package/dist/themes/static/variables/tokens/horizon.min.js +4 -4
- package/dist/themes/static/variables/tokens/main.js +9 -3
- package/dist/themes/static/variables/tokens/main.min.js +4 -4
- package/editorManager.js +1 -3
- package/editorManager.mjs +1 -3
- package/editors/autocompleteEditor/autocompleteEditor.js +48 -22
- package/editors/autocompleteEditor/autocompleteEditor.mjs +48 -22
- package/editors/baseEditor/baseEditor.d.ts +15 -3
- package/editors/baseEditor/baseEditor.js +6 -6
- package/editors/baseEditor/baseEditor.mjs +16 -6
- package/editors/factory.js +5 -2
- package/editors/factory.mjs +5 -2
- package/editors/index.d.ts +3 -2
- package/editors/index.js +8 -0
- package/editors/index.mjs +3 -1
- package/editors/intlDatetimeEditor/index.d.mts +1 -0
- package/editors/intlDatetimeEditor/index.d.ts +1 -0
- package/editors/intlDatetimeEditor/index.js +19 -0
- package/editors/intlDatetimeEditor/index.mjs +1 -0
- package/editors/intlDatetimeEditor/intlDatetimeEditor.d.mts +1 -0
- package/editors/intlDatetimeEditor/intlDatetimeEditor.d.ts +42 -0
- package/editors/intlDatetimeEditor/intlDatetimeEditor.js +108 -0
- package/editors/intlDatetimeEditor/intlDatetimeEditor.mjs +93 -0
- package/editors/multiSelectEditor/controllers/dropdownController.js +5 -12
- package/editors/multiSelectEditor/controllers/dropdownController.mjs +5 -12
- package/editors/multiSelectEditor/controllers/inputController.js +1 -3
- package/editors/multiSelectEditor/controllers/inputController.mjs +1 -3
- package/editors/multiSelectEditor/multiSelectEditor.js +16 -21
- package/editors/multiSelectEditor/multiSelectEditor.mjs +17 -22
- package/editors/passwordEditor/passwordEditor.js +5 -12
- package/editors/passwordEditor/passwordEditor.mjs +5 -12
- package/editors/registry.js +4 -9
- package/editors/registry.mjs +4 -9
- package/editors/textEditor/textEditor.js +1 -1
- package/editors/textEditor/textEditor.mjs +2 -2
- package/eventManager.d.ts +3 -3
- package/focusManager/grid.d.ts +28 -0
- package/focusManager/grid.js +84 -14
- package/focusManager/grid.mjs +80 -15
- package/focusManager/scopeManager.js +1 -1
- package/focusManager/scopeManager.mjs +2 -2
- package/handsontable-non-commercial-license.pdf +0 -0
- package/helpers/array.d.ts +25 -0
- package/helpers/array.js +41 -4
- package/helpers/array.mjs +56 -4
- package/helpers/dateTime.d.ts +14 -0
- package/helpers/dateTime.js +74 -2
- package/helpers/dateTime.mjs +73 -2
- package/helpers/dom/cellCoords.js +156 -13
- package/helpers/dom/cellCoords.mjs +156 -13
- package/helpers/dom/element.d.ts +27 -3
- package/helpers/dom/element.js +92 -16
- package/helpers/dom/element.mjs +107 -17
- package/helpers/dom/event.d.ts +58 -0
- package/helpers/dom/event.js +39 -0
- package/helpers/dom/event.mjs +63 -0
- package/helpers/errors.d.ts +5 -0
- package/helpers/errors.js +10 -6
- package/helpers/errors.mjs +10 -6
- package/helpers/feature.d.ts +19 -0
- package/helpers/feature.js +21 -0
- package/helpers/feature.mjs +30 -0
- package/helpers/function.d.ts +1 -1
- package/helpers/function.js +4 -1
- package/helpers/function.mjs +4 -1
- package/helpers/mixed.d.ts +103 -0
- package/helpers/mixed.js +373 -4
- package/helpers/mixed.mjs +413 -4
- package/helpers/moves.js +2 -1
- package/helpers/moves.mjs +2 -1
- package/helpers/number.d.ts +22 -0
- package/helpers/number.js +49 -0
- package/helpers/number.mjs +66 -0
- package/i18n/languages/ar-AR.js +8 -19
- package/i18n/languages/cs-CZ.js +8 -19
- package/i18n/languages/de-CH.js +8 -19
- package/i18n/languages/de-DE.js +8 -19
- package/i18n/languages/en-US.js +8 -19
- package/i18n/languages/es-MX.js +8 -19
- package/i18n/languages/fa-IR.d.ts +1 -0
- package/i18n/languages/fa-IR.js +9 -19
- package/i18n/languages/fa-IR.mjs +1 -0
- package/i18n/languages/fr-FR.js +8 -19
- package/i18n/languages/hr-HR.js +8 -19
- package/i18n/languages/it-IT.js +8 -19
- package/i18n/languages/ja-JP.js +8 -19
- package/i18n/languages/ko-KR.js +8 -19
- package/i18n/languages/lv-LV.js +8 -19
- package/i18n/languages/nb-NO.js +8 -19
- package/i18n/languages/nl-NL.js +8 -19
- package/i18n/languages/pl-PL.js +8 -19
- package/i18n/languages/pt-BR.js +8 -19
- package/i18n/languages/ru-RU.js +8 -19
- package/i18n/languages/sr-SP.js +8 -19
- package/i18n/languages/zh-CN.js +8 -19
- package/i18n/languages/zh-TW.js +8 -19
- package/i18n/registry.js +8 -19
- package/index.d.ts +2 -2
- package/index.js +8 -19
- package/languages/all.js +2 -1
- package/languages/fa-IR.js +2 -1
- package/languages/fa-IR.mjs +1 -0
- package/languages/index.js +2 -1
- package/package.json +61 -1
- package/plugins/autoColumnSize/autoColumnSize.d.ts +24 -1
- package/plugins/autoColumnSize/autoColumnSize.js +506 -94
- package/plugins/autoColumnSize/autoColumnSize.mjs +513 -95
- package/plugins/autoRowSize/autoRowSize.d.ts +40 -5
- package/plugins/autoRowSize/autoRowSize.js +73 -36
- package/plugins/autoRowSize/autoRowSize.mjs +103 -41
- package/plugins/autofill/autofill.js +35 -24
- package/plugins/autofill/autofill.mjs +35 -24
- package/plugins/base/base.d.ts +10 -0
- package/plugins/base/base.js +5 -12
- package/plugins/base/base.mjs +5 -12
- package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +4 -9
- package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +4 -9
- package/plugins/collapsibleColumns/collapsibleColumns.d.ts +4 -0
- package/plugins/collapsibleColumns/collapsibleColumns.js +94 -20
- package/plugins/collapsibleColumns/collapsibleColumns.mjs +98 -20
- package/plugins/columnSorting/columnSorting.d.ts +31 -2
- package/plugins/columnSorting/columnSorting.js +153 -33
- package/plugins/columnSorting/columnSorting.mjs +155 -35
- package/plugins/columnSorting/columnStatesManager.d.ts +1 -1
- package/plugins/columnSorting/columnStatesManager.js +1 -7
- package/plugins/columnSorting/columnStatesManager.mjs +1 -7
- package/plugins/columnSorting/domHelpers.d.ts +3 -0
- package/plugins/columnSorting/domHelpers.js +9 -0
- package/plugins/columnSorting/domHelpers.mjs +3 -3
- package/plugins/columnSorting/rootComparator.js +21 -16
- package/plugins/columnSorting/rootComparator.mjs +21 -16
- package/plugins/columnSorting/sortFunction/checkbox.js +7 -5
- package/plugins/columnSorting/sortFunction/checkbox.mjs +7 -5
- package/plugins/columnSorting/sortFunction/default.js +15 -4
- package/plugins/columnSorting/sortFunction/default.mjs +15 -4
- package/plugins/columnSorting/sortFunction/intlDatetime.d.mts +1 -0
- package/plugins/columnSorting/sortFunction/intlDatetime.d.ts +10 -0
- package/plugins/columnSorting/sortFunction/intlDatetime.js +23 -0
- package/plugins/columnSorting/sortFunction/intlDatetime.mjs +12 -0
- package/plugins/columnSorting/sortService/registry.js +2 -0
- package/plugins/columnSorting/sortService/registry.mjs +2 -0
- package/plugins/columnSorting/utils.d.ts +8 -0
- package/plugins/columnSorting/utils.js +37 -45
- package/plugins/columnSorting/utils.mjs +42 -47
- package/plugins/columnSummary/columnSummary.js +13 -14
- package/plugins/columnSummary/columnSummary.mjs +13 -14
- package/plugins/columnSummary/endpoints.d.ts +69 -2
- package/plugins/columnSummary/endpoints.js +176 -29
- package/plugins/columnSummary/endpoints.mjs +176 -29
- package/plugins/comments/commentEditor.js +5 -10
- package/plugins/comments/commentEditor.mjs +6 -11
- package/plugins/comments/comments.js +5 -12
- package/plugins/comments/comments.mjs +5 -12
- package/plugins/comments/contextMenuItem/addEditComment.js +8 -19
- package/plugins/comments/contextMenuItem/readOnlyComment.js +8 -19
- package/plugins/comments/contextMenuItem/removeComment.js +8 -19
- package/plugins/comments/editorResizeObserver.js +5 -12
- package/plugins/comments/editorResizeObserver.mjs +5 -12
- package/plugins/contextMenu/contextMenu.d.ts +12 -1
- package/plugins/contextMenu/contextMenu.js +34 -15
- package/plugins/contextMenu/contextMenu.mjs +34 -15
- package/plugins/contextMenu/index.d.ts +1 -1
- package/plugins/contextMenu/menu/menu.d.ts +22 -1
- package/plugins/contextMenu/menu/menu.js +216 -15
- package/plugins/contextMenu/menu/menu.mjs +217 -16
- package/plugins/contextMenu/menu/positioner.js +4 -9
- package/plugins/contextMenu/menu/positioner.mjs +4 -9
- package/plugins/contextMenu/predefinedItems/alignment.js +22 -33
- package/plugins/contextMenu/predefinedItems/alignment.mjs +14 -14
- package/plugins/contextMenu/predefinedItems/clearColumn.js +9 -20
- package/plugins/contextMenu/predefinedItems/clearColumn.mjs +1 -1
- package/plugins/contextMenu/predefinedItems/columnLeft.js +8 -19
- package/plugins/contextMenu/predefinedItems/columnRight.js +8 -19
- package/plugins/contextMenu/predefinedItems/index.js +8 -19
- package/plugins/contextMenu/predefinedItems/readOnly.js +11 -22
- package/plugins/contextMenu/predefinedItems/readOnly.mjs +3 -3
- package/plugins/contextMenu/predefinedItems/redo.js +8 -19
- package/plugins/contextMenu/predefinedItems/removeColumn.js +8 -19
- package/plugins/contextMenu/predefinedItems/removeRow.js +8 -19
- package/plugins/contextMenu/predefinedItems/rowAbove.js +8 -19
- package/plugins/contextMenu/predefinedItems/rowBelow.js +8 -19
- package/plugins/contextMenu/predefinedItems/undo.js +8 -19
- package/plugins/contextMenu/utils.js +1 -1
- package/plugins/contextMenu/utils.mjs +1 -1
- package/plugins/copyPaste/contextMenuItem/cut.js +8 -19
- package/plugins/copyPaste/copyPaste.js +62 -20
- package/plugins/copyPaste/copyPaste.mjs +63 -21
- package/plugins/copyPaste/copyableRanges.js +11 -14
- package/plugins/copyPaste/copyableRanges.mjs +11 -14
- package/plugins/copyPaste/pasteEvent.d.ts +1 -1
- package/plugins/customBorders/contextMenuItem/bottom.js +8 -19
- package/plugins/customBorders/contextMenuItem/left.js +8 -19
- package/plugins/customBorders/contextMenuItem/noBorders.js +8 -19
- package/plugins/customBorders/contextMenuItem/right.js +8 -19
- package/plugins/customBorders/contextMenuItem/top.js +8 -19
- package/plugins/customBorders/customBorders.d.ts +21 -40
- package/plugins/customBorders/customBorders.js +1084 -223
- package/plugins/customBorders/customBorders.mjs +1078 -206
- package/plugins/customBorders/utils.d.ts +71 -0
- package/plugins/customBorders/utils.js +63 -0
- package/plugins/customBorders/utils.mjs +101 -0
- package/plugins/dataProvider/dataProvider.js +35 -38
- package/plugins/dataProvider/dataProvider.mjs +27 -19
- package/plugins/dataProvider/query/crud.js +1 -1
- package/plugins/dataProvider/query/crud.mjs +1 -1
- package/plugins/dialog/dialog.js +15 -33
- package/plugins/dialog/dialog.mjs +7 -14
- package/plugins/dialog/ui.js +5 -12
- package/plugins/dialog/ui.mjs +5 -12
- package/plugins/dragToScroll/autoScroller.js +4 -9
- package/plugins/dragToScroll/autoScroller.mjs +4 -9
- package/plugins/dragToScroll/dragToScroll.d.ts +2 -2
- package/plugins/dragToScroll/dragToScroll.js +155 -26
- package/plugins/dragToScroll/dragToScroll.mjs +156 -27
- package/plugins/dragToScroll/scrollTimer.js +4 -9
- package/plugins/dragToScroll/scrollTimer.mjs +4 -9
- package/plugins/dropdownMenu/dropdownMenu.d.ts +5 -1
- package/plugins/dropdownMenu/dropdownMenu.js +50 -15
- package/plugins/dropdownMenu/dropdownMenu.mjs +51 -16
- package/plugins/dropdownMenu/index.d.ts +1 -0
- package/plugins/emptyDataState/emptyDataState.js +15 -33
- package/plugins/emptyDataState/emptyDataState.mjs +7 -14
- package/plugins/emptyDataState/ui.js +4 -9
- package/plugins/emptyDataState/ui.mjs +4 -9
- package/plugins/exportFile/dataProvider.js +5 -1
- package/plugins/exportFile/dataProvider.mjs +5 -1
- package/plugins/exportFile/exportFile.js +13 -31
- package/plugins/exportFile/exportFile.mjs +5 -12
- package/plugins/exportFile/types/csv.js +1 -3
- package/plugins/exportFile/types/csv.mjs +1 -3
- package/plugins/exportFile/types/xlsx/cell-style.js +4 -2
- package/plugins/exportFile/types/xlsx/cell-style.mjs +4 -2
- package/plugins/exportFile/types/xlsx/date-utils.d.ts +15 -0
- package/plugins/exportFile/types/xlsx/date-utils.js +31 -0
- package/plugins/exportFile/types/xlsx/date-utils.mjs +36 -0
- package/plugins/exportFile/types/xlsx.js +10 -3
- package/plugins/exportFile/types/xlsx.mjs +11 -4
- package/plugins/filters/component/_base.d.ts +1 -2
- package/plugins/filters/component/_base.js +1 -2
- package/plugins/filters/component/_base.mjs +1 -2
- package/plugins/filters/component/actionBar.js +9 -22
- package/plugins/filters/component/actionBar.mjs +1 -3
- package/plugins/filters/component/condition.d.ts +1 -0
- package/plugins/filters/component/condition.js +11 -22
- package/plugins/filters/component/condition.mjs +3 -3
- package/plugins/filters/component/operators.js +1 -3
- package/plugins/filters/component/operators.mjs +1 -3
- package/plugins/filters/component/value.d.ts +5 -6
- package/plugins/filters/component/value.js +62 -56
- package/plugins/filters/component/value.mjs +55 -38
- package/plugins/filters/condition/beginsWith.js +8 -19
- package/plugins/filters/condition/between.js +8 -19
- package/plugins/filters/condition/contains.js +8 -19
- package/plugins/filters/condition/date/after.js +10 -20
- package/plugins/filters/condition/date/after.mjs +2 -1
- package/plugins/filters/condition/date/afterOrEqual.js +10 -20
- package/plugins/filters/condition/date/afterOrEqual.mjs +2 -1
- package/plugins/filters/condition/date/before.js +10 -20
- package/plugins/filters/condition/date/before.mjs +2 -1
- package/plugins/filters/condition/date/beforeOrEqual.js +10 -20
- package/plugins/filters/condition/date/beforeOrEqual.mjs +2 -1
- package/plugins/filters/condition/date/today.js +8 -19
- package/plugins/filters/condition/date/tomorrow.js +8 -19
- package/plugins/filters/condition/date/yesterday.js +8 -19
- package/plugins/filters/condition/empty.js +8 -19
- package/plugins/filters/condition/endsWith.js +8 -19
- package/plugins/filters/condition/equal.d.ts +7 -0
- package/plugins/filters/condition/equal.js +12 -19
- package/plugins/filters/condition/equal.mjs +10 -0
- package/plugins/filters/condition/greaterThan.js +8 -19
- package/plugins/filters/condition/greaterThanOrEqual.js +8 -19
- package/plugins/filters/condition/intlDate/after.js +8 -19
- package/plugins/filters/condition/intlDate/afterOrEqual.js +8 -19
- package/plugins/filters/condition/intlDate/before.js +8 -19
- package/plugins/filters/condition/intlDate/beforeOrEqual.js +8 -19
- package/plugins/filters/condition/intlDate/between.js +8 -19
- package/plugins/filters/condition/intlDate/today.js +8 -19
- package/plugins/filters/condition/intlDate/tomorrow.js +8 -19
- package/plugins/filters/condition/intlDate/yesterday.js +8 -19
- package/plugins/filters/condition/intlDatetime/after.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/after.d.ts +18 -0
- package/plugins/filters/condition/intlDatetime/after.js +66 -0
- package/plugins/filters/condition/intlDatetime/after.mjs +22 -0
- package/plugins/filters/condition/intlDatetime/afterOrEqual.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/afterOrEqual.d.ts +18 -0
- package/plugins/filters/condition/intlDatetime/afterOrEqual.js +66 -0
- package/plugins/filters/condition/intlDatetime/afterOrEqual.mjs +22 -0
- package/plugins/filters/condition/intlDatetime/before.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/before.d.ts +18 -0
- package/plugins/filters/condition/intlDatetime/before.js +66 -0
- package/plugins/filters/condition/intlDatetime/before.mjs +22 -0
- package/plugins/filters/condition/intlDatetime/beforeOrEqual.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/beforeOrEqual.d.ts +18 -0
- package/plugins/filters/condition/intlDatetime/beforeOrEqual.js +66 -0
- package/plugins/filters/condition/intlDatetime/beforeOrEqual.mjs +22 -0
- package/plugins/filters/condition/intlDatetime/between.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/between.d.ts +18 -0
- package/plugins/filters/condition/intlDatetime/between.js +67 -0
- package/plugins/filters/condition/intlDatetime/between.mjs +23 -0
- package/plugins/filters/condition/intlDatetime/today.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/today.d.ts +17 -0
- package/plugins/filters/condition/intlDatetime/today.js +65 -0
- package/plugins/filters/condition/intlDatetime/today.mjs +20 -0
- package/plugins/filters/condition/intlDatetime/tomorrow.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/tomorrow.d.ts +17 -0
- package/plugins/filters/condition/intlDatetime/tomorrow.js +66 -0
- package/plugins/filters/condition/intlDatetime/tomorrow.mjs +21 -0
- package/plugins/filters/condition/intlDatetime/yesterday.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/yesterday.d.ts +17 -0
- package/plugins/filters/condition/intlDatetime/yesterday.js +66 -0
- package/plugins/filters/condition/intlDatetime/yesterday.mjs +21 -0
- package/plugins/filters/condition/intlTime/after.js +8 -19
- package/plugins/filters/condition/intlTime/afterOrEqual.js +8 -19
- package/plugins/filters/condition/intlTime/before.js +8 -19
- package/plugins/filters/condition/intlTime/beforeOrEqual.js +8 -19
- package/plugins/filters/condition/intlTime/between.js +8 -19
- package/plugins/filters/condition/lessThan.js +8 -19
- package/plugins/filters/condition/lessThanOrEqual.js +8 -19
- package/plugins/filters/condition/none.js +8 -19
- package/plugins/filters/condition/notBetween.js +8 -19
- package/plugins/filters/condition/notContains.js +8 -19
- package/plugins/filters/condition/notEmpty.js +8 -19
- package/plugins/filters/condition/notEqual.js +8 -19
- package/plugins/filters/conditionCollection.js +4 -7
- package/plugins/filters/conditionCollection.mjs +4 -7
- package/plugins/filters/conditionUpdateObserver.d.ts +2 -2
- package/plugins/filters/conditionUpdateObserver.js +144 -52
- package/plugins/filters/conditionUpdateObserver.mjs +144 -52
- package/plugins/filters/constants.d.ts +1 -0
- package/plugins/filters/constants.js +31 -0
- package/plugins/filters/constants.mjs +28 -0
- package/plugins/filters/dataFilter.d.ts +4 -12
- package/plugins/filters/dataFilter.js +7 -19
- package/plugins/filters/dataFilter.mjs +8 -20
- package/plugins/filters/filters.d.ts +33 -9
- package/plugins/filters/filters.js +104 -62
- package/plugins/filters/filters.mjs +97 -44
- package/plugins/filters/logicalOperations/conjunction.js +8 -19
- package/plugins/filters/logicalOperations/disjunction.js +8 -19
- package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +8 -19
- package/plugins/filters/sortComparators.d.ts +9 -2
- package/plugins/filters/sortComparators.js +34 -1
- package/plugins/filters/sortComparators.mjs +38 -3
- package/plugins/filters/ui/_base.js +8 -19
- package/plugins/filters/ui/input.d.ts +4 -0
- package/plugins/filters/ui/input.js +23 -18
- package/plugins/filters/ui/input.mjs +23 -18
- package/plugins/filters/ui/link.js +4 -9
- package/plugins/filters/ui/link.mjs +4 -9
- package/plugins/filters/ui/multipleSelect.js +40 -35
- package/plugins/filters/ui/multipleSelect.mjs +32 -16
- package/plugins/filters/ui/radioInput.js +4 -9
- package/plugins/filters/ui/radioInput.mjs +4 -9
- package/plugins/filters/ui/select.js +14 -32
- package/plugins/filters/ui/select.mjs +6 -13
- package/plugins/formulas/engine/register.d.ts +5 -4
- package/plugins/formulas/engine/register.js +5 -2
- package/plugins/formulas/engine/register.mjs +9 -5
- package/plugins/formulas/engine/settings.d.ts +2 -6
- package/plugins/formulas/engine/settings.js +29 -4
- package/plugins/formulas/engine/settings.mjs +29 -4
- package/plugins/formulas/engine/types.d.ts +12 -2
- package/plugins/formulas/formulas.d.ts +39 -0
- package/plugins/formulas/formulas.js +748 -55
- package/plugins/formulas/formulas.mjs +752 -57
- package/plugins/formulas/hyperlinkUrl.d.mts +1 -0
- package/plugins/formulas/hyperlinkUrl.d.ts +12 -0
- package/plugins/formulas/hyperlinkUrl.js +32 -0
- package/plugins/formulas/hyperlinkUrl.mjs +32 -0
- package/plugins/formulas/indexSyncer/axisSyncer.d.ts +1 -0
- package/plugins/formulas/indexSyncer/axisSyncer.js +77 -27
- package/plugins/formulas/indexSyncer/axisSyncer.mjs +77 -27
- package/plugins/formulas/indexSyncer/index.js +4 -9
- package/plugins/formulas/indexSyncer/index.mjs +4 -9
- package/plugins/formulas/utils.d.ts +9 -0
- package/plugins/formulas/utils.js +21 -0
- package/plugins/formulas/utils.mjs +25 -0
- package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +8 -19
- package/plugins/hiddenColumns/contextMenuItem/showColumn.js +14 -20
- package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +6 -1
- package/plugins/hiddenColumns/hiddenColumns.js +11 -15
- package/plugins/hiddenColumns/hiddenColumns.mjs +11 -15
- package/plugins/hiddenRows/contextMenuItem/hideRow.js +8 -19
- package/plugins/hiddenRows/contextMenuItem/showRow.js +14 -20
- package/plugins/hiddenRows/contextMenuItem/showRow.mjs +6 -1
- package/plugins/hiddenRows/hiddenRows.js +11 -15
- package/plugins/hiddenRows/hiddenRows.mjs +11 -15
- package/plugins/index.d.ts +5 -1
- package/plugins/index.js +10 -0
- package/plugins/index.mjs +5 -1
- package/plugins/loading/loading.js +13 -31
- package/plugins/loading/loading.mjs +5 -12
- package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +8 -19
- package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +8 -19
- package/plugins/manualColumnFreeze/manualColumnFreeze.js +5 -12
- package/plugins/manualColumnFreeze/manualColumnFreeze.mjs +5 -12
- package/plugins/manualColumnMove/manualColumnMove.d.ts +10 -0
- package/plugins/manualColumnMove/manualColumnMove.js +128 -33
- package/plugins/manualColumnMove/manualColumnMove.mjs +129 -34
- package/plugins/manualColumnResize/manualColumnResize.d.ts +12 -1
- package/plugins/manualColumnResize/manualColumnResize.js +28 -17
- package/plugins/manualColumnResize/manualColumnResize.mjs +28 -17
- package/plugins/manualRowMove/manualRowMove.js +5 -12
- package/plugins/manualRowMove/manualRowMove.mjs +5 -12
- package/plugins/manualRowResize/manualRowResize.d.ts +13 -2
- package/plugins/manualRowResize/manualRowResize.js +29 -18
- package/plugins/manualRowResize/manualRowResize.mjs +29 -18
- package/plugins/mergeCells/cellCoords.d.ts +8 -0
- package/plugins/mergeCells/cellCoords.js +15 -9
- package/plugins/mergeCells/cellCoords.mjs +15 -9
- package/plugins/mergeCells/cellsCollection.d.ts +46 -2
- package/plugins/mergeCells/cellsCollection.js +190 -71
- package/plugins/mergeCells/cellsCollection.mjs +190 -71
- package/plugins/mergeCells/contextMenuItem/toggleMerge.js +8 -19
- package/plugins/mergeCells/focusOrder.d.ts +26 -20
- package/plugins/mergeCells/focusOrder.js +363 -189
- package/plugins/mergeCells/focusOrder.mjs +368 -184
- package/plugins/mergeCells/mergeCells.d.ts +13 -8
- package/plugins/mergeCells/mergeCells.js +327 -76
- package/plugins/mergeCells/mergeCells.mjs +327 -76
- package/plugins/moveCells/helpers.d.mts +1 -0
- package/plugins/moveCells/helpers.d.ts +21 -0
- package/plugins/moveCells/helpers.js +20 -0
- package/plugins/moveCells/helpers.mjs +15 -0
- package/plugins/moveCells/index.d.mts +1 -0
- package/plugins/moveCells/index.d.ts +1 -0
- package/plugins/moveCells/index.js +22 -0
- package/plugins/moveCells/index.mjs +1 -0
- package/plugins/moveCells/moveCells.d.mts +1 -0
- package/plugins/moveCells/moveCells.d.ts +80 -0
- package/plugins/moveCells/moveCells.js +595 -0
- package/plugins/moveCells/moveCells.mjs +580 -0
- package/plugins/multiColumnSorting/multiColumnSorting.d.ts +8 -8
- package/plugins/multiColumnSorting/multiColumnSorting.js +11 -16
- package/plugins/multiColumnSorting/multiColumnSorting.mjs +11 -16
- package/plugins/multiColumnSorting/rootComparator.js +26 -19
- package/plugins/multiColumnSorting/rootComparator.mjs +26 -19
- package/plugins/multipleSelectionHandles/multipleSelectionHandles.d.ts +19 -4
- package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +266 -58
- package/plugins/multipleSelectionHandles/multipleSelectionHandles.mjs +266 -58
- package/plugins/nestedHeaders/nestedHeaders.d.ts +10 -1
- package/plugins/nestedHeaders/nestedHeaders.js +227 -35
- package/plugins/nestedHeaders/nestedHeaders.mjs +227 -35
- package/plugins/nestedHeaders/stateManager/columnArrangement.d.mts +1 -0
- package/plugins/nestedHeaders/stateManager/columnArrangement.d.ts +37 -0
- package/plugins/nestedHeaders/stateManager/columnArrangement.js +35 -0
- package/plugins/nestedHeaders/stateManager/columnArrangement.mjs +30 -0
- package/plugins/nestedHeaders/stateManager/deriveSettings.d.mts +1 -0
- package/plugins/nestedHeaders/stateManager/deriveSettings.d.ts +57 -0
- package/plugins/nestedHeaders/stateManager/deriveSettings.js +115 -0
- package/plugins/nestedHeaders/stateManager/deriveSettings.mjs +135 -0
- package/plugins/nestedHeaders/stateManager/headersTree.d.ts +14 -1
- package/plugins/nestedHeaders/stateManager/headersTree.js +4 -9
- package/plugins/nestedHeaders/stateManager/headersTree.mjs +4 -9
- package/plugins/nestedHeaders/stateManager/index.d.ts +76 -13
- package/plugins/nestedHeaders/stateManager/index.js +386 -50
- package/plugins/nestedHeaders/stateManager/index.mjs +387 -51
- package/plugins/nestedHeaders/stateManager/matrixGenerator.js +3 -2
- package/plugins/nestedHeaders/stateManager/matrixGenerator.mjs +3 -2
- package/plugins/nestedHeaders/stateManager/settingsNormalizer.js +5 -1
- package/plugins/nestedHeaders/stateManager/settingsNormalizer.mjs +5 -1
- package/plugins/nestedHeaders/stateManager/sourceSettings.d.ts +23 -6
- package/plugins/nestedHeaders/stateManager/sourceSettings.js +24 -13
- package/plugins/nestedHeaders/stateManager/sourceSettings.mjs +24 -13
- package/plugins/nestedHeaders/stateManager/utils.d.ts +17 -1
- package/plugins/nestedHeaders/stateManager/utils.js +6 -1
- package/plugins/nestedHeaders/stateManager/utils.mjs +6 -1
- package/plugins/nestedHeaders/utils/ghostTable.js +1 -3
- package/plugins/nestedHeaders/utils/ghostTable.mjs +1 -3
- package/plugins/nestedRows/data/dataManager.d.ts +4 -1
- package/plugins/nestedRows/data/dataManager.js +10 -4
- package/plugins/nestedRows/data/dataManager.mjs +10 -4
- package/plugins/nestedRows/nestedRows.d.ts +127 -1
- package/plugins/nestedRows/nestedRows.js +332 -17
- package/plugins/nestedRows/nestedRows.mjs +332 -17
- package/plugins/nestedRows/ui/collapsing.d.ts +58 -0
- package/plugins/nestedRows/ui/collapsing.js +234 -40
- package/plugins/nestedRows/ui/collapsing.mjs +234 -40
- package/plugins/nestedRows/ui/contextMenu.js +12 -28
- package/plugins/nestedRows/ui/contextMenu.mjs +4 -9
- package/plugins/notification/notification.js +13 -31
- package/plugins/notification/notification.mjs +5 -12
- package/plugins/notification/ui.js +4 -9
- package/plugins/notification/ui.mjs +4 -9
- package/plugins/pagination/pagination.js +7 -14
- package/plugins/pagination/pagination.mjs +7 -14
- package/plugins/pagination/ui.js +13 -31
- package/plugins/pagination/ui.mjs +5 -12
- package/plugins/search/search.js +27 -11
- package/plugins/search/search.mjs +27 -11
- package/plugins/selectionHandles/helpers.d.mts +1 -0
- package/plugins/selectionHandles/helpers.d.ts +17 -0
- package/plugins/selectionHandles/helpers.js +16 -0
- package/plugins/selectionHandles/helpers.mjs +11 -0
- package/plugins/selectionHandles/index.d.mts +1 -0
- package/plugins/selectionHandles/index.d.ts +1 -0
- package/plugins/selectionHandles/index.js +22 -0
- package/plugins/selectionHandles/index.mjs +1 -0
- package/plugins/selectionHandles/selectionHandles.d.mts +1 -0
- package/plugins/selectionHandles/selectionHandles.d.ts +52 -0
- package/plugins/selectionHandles/selectionHandles.js +335 -0
- package/plugins/selectionHandles/selectionHandles.mjs +316 -0
- package/plugins/stretchColumns/calculator.js +5 -12
- package/plugins/stretchColumns/calculator.mjs +5 -12
- package/plugins/stretchColumns/strategies/last.js +4 -9
- package/plugins/stretchColumns/strategies/last.mjs +4 -9
- package/plugins/stretchColumns/stretchColumns.js +4 -9
- package/plugins/stretchColumns/stretchColumns.mjs +4 -9
- package/plugins/touchScroll/touchScroll.js +4 -9
- package/plugins/touchScroll/touchScroll.mjs +4 -9
- package/plugins/trimRows/trimRows.d.ts +1 -1
- package/plugins/trimRows/trimRows.js +10 -11
- package/plugins/trimRows/trimRows.mjs +10 -11
- package/plugins/types.d.ts +4 -0
- package/plugins/undoRedo/actions/cellAlignment.js +1 -1
- package/plugins/undoRedo/actions/cellAlignment.mjs +1 -1
- package/plugins/undoRedo/actions/createColumn.js +4 -1
- package/plugins/undoRedo/actions/createColumn.mjs +4 -1
- package/plugins/undoRedo/actions/createRow.js +4 -1
- package/plugins/undoRedo/actions/createRow.mjs +4 -1
- package/plugins/undoRedo/actions/fixedCounts.d.mts +1 -0
- package/plugins/undoRedo/actions/fixedCounts.d.ts +36 -0
- package/plugins/undoRedo/actions/fixedCounts.js +63 -0
- package/plugins/undoRedo/actions/fixedCounts.mjs +62 -0
- package/plugins/undoRedo/actions/index.js +2 -0
- package/plugins/undoRedo/actions/index.mjs +2 -0
- package/plugins/undoRedo/actions/moveCells.d.mts +1 -0
- package/plugins/undoRedo/actions/moveCells.d.ts +104 -0
- package/plugins/undoRedo/actions/moveCells.js +225 -0
- package/plugins/undoRedo/actions/moveCells.mjs +227 -0
- package/plugins/undoRedo/actions/removeColumn.d.ts +18 -2
- package/plugins/undoRedo/actions/removeColumn.js +11 -4
- package/plugins/undoRedo/actions/removeColumn.mjs +12 -5
- package/plugins/undoRedo/actions/removeRow.js +2 -57
- package/plugins/undoRedo/actions/removeRow.mjs +2 -57
- package/plugins/undoRedo/undoRedo.d.ts +26 -0
- package/plugins/undoRedo/undoRedo.js +40 -11
- package/plugins/undoRedo/undoRedo.mjs +40 -11
- package/plugins/undoRedo/utils.d.ts +29 -0
- package/plugins/undoRedo/utils.js +55 -3
- package/plugins/undoRedo/utils.mjs +59 -0
- package/renderSizeProbe.d.mts +1 -0
- package/renderSizeProbe.d.ts +60 -0
- package/renderSizeProbe.js +161 -0
- package/renderSizeProbe.mjs +174 -0
- package/renderers/checkboxRenderer/checkboxRenderer.js +9 -4
- package/renderers/checkboxRenderer/checkboxRenderer.mjs +9 -4
- package/renderers/index.d.ts +3 -2
- package/renderers/index.js +8 -0
- package/renderers/index.mjs +3 -1
- package/renderers/intlDatetimeRenderer/index.d.mts +1 -0
- package/renderers/intlDatetimeRenderer/index.d.ts +1 -0
- package/renderers/intlDatetimeRenderer/index.js +22 -0
- package/renderers/intlDatetimeRenderer/index.mjs +1 -0
- package/renderers/intlDatetimeRenderer/intlDatetimeRenderer.d.mts +1 -0
- package/renderers/intlDatetimeRenderer/intlDatetimeRenderer.d.ts +26 -0
- package/renderers/intlDatetimeRenderer/intlDatetimeRenderer.js +82 -0
- package/renderers/intlDatetimeRenderer/intlDatetimeRenderer.mjs +67 -0
- package/renderers/multiSelectRenderer/multiSelectRenderer.js +2 -3
- package/renderers/multiSelectRenderer/multiSelectRenderer.mjs +2 -3
- package/renderers/multiSelectRenderer/utils/utils.d.ts +1 -1
- package/renderers/multiSelectRenderer/utils/utils.js +11 -8
- package/renderers/multiSelectRenderer/utils/utils.mjs +11 -8
- package/renderers/renderCell.d.mts +1 -0
- package/renderers/renderCell.d.ts +37 -0
- package/renderers/renderCell.js +43 -0
- package/renderers/renderCell.mjs +48 -0
- package/selection/highlight/highlight.js +1 -3
- package/selection/highlight/highlight.mjs +1 -3
- package/selection/highlight/types/areaLayered.d.ts +3 -1
- package/selection/highlight/types/areaLayered.js +4 -2
- package/selection/highlight/types/areaLayered.mjs +6 -2
- package/selection/highlight/types/focus.d.ts +3 -1
- package/selection/highlight/types/focus.js +3 -2
- package/selection/highlight/types/focus.mjs +5 -2
- package/selection/mouseEventHandler.js +29 -26
- package/selection/mouseEventHandler.mjs +29 -26
- package/selection/moveCells.d.mts +1 -0
- package/selection/moveCells.d.ts +15 -0
- package/selection/moveCells.js +13 -0
- package/selection/moveCells.mjs +9 -0
- package/selection/selection.d.ts +56 -2
- package/selection/selection.js +162 -36
- package/selection/selection.mjs +154 -17
- package/selection/transformation/_base.js +5 -12
- package/selection/transformation/_base.mjs +5 -12
- package/selection/types.d.ts +3 -0
- package/settings.d.ts +24 -3
- package/shortcuts/context.d.ts +4 -0
- package/shortcuts/context.js +16 -8
- package/shortcuts/context.mjs +20 -8
- package/shortcuts/contexts/commands/populateSelectedCellsData.js +1 -1
- package/shortcuts/contexts/commands/populateSelectedCellsData.mjs +1 -1
- package/styles/handsontable.css +504 -158
- package/styles/handsontable.min.css +4 -4
- package/styles/handsontableStyles.js +1 -1
- package/styles/handsontableStyles.mjs +1 -1
- package/styles/ht-icons-horizon.css +1 -10
- package/styles/ht-icons-horizon.min.css +4 -4
- package/styles/ht-icons-main.css +1 -10
- package/styles/ht-icons-main.min.css +4 -4
- package/styles/ht-theme-classic-no-icons.css +6 -0
- package/styles/ht-theme-classic-no-icons.min.css +4 -4
- package/styles/ht-theme-classic.css +7 -10
- package/styles/ht-theme-classic.min.css +4 -4
- package/styles/ht-theme-horizon-no-icons.css +6 -0
- package/styles/ht-theme-horizon-no-icons.min.css +4 -4
- package/styles/ht-theme-horizon.css +7 -10
- package/styles/ht-theme-horizon.min.css +4 -4
- package/styles/ht-theme-main-no-icons.css +6 -0
- package/styles/ht-theme-main-no-icons.min.css +4 -4
- package/styles/ht-theme-main.css +7 -10
- package/styles/ht-theme-main.min.css +4 -4
- package/tableView.d.ts +17 -4
- package/tableView.js +211 -53
- package/tableView.mjs +212 -54
- package/themes/engine/builder.js +5 -12
- package/themes/engine/builder.mjs +5 -12
- package/themes/engine/index.d.ts +2 -1
- package/themes/engine/index.js +3 -0
- package/themes/engine/index.mjs +1 -1
- package/themes/engine/manager.d.ts +75 -3
- package/themes/engine/manager.js +247 -18
- package/themes/engine/manager.mjs +254 -18
- package/themes/engine/utils/cssVariables.d.ts +18 -1
- package/themes/engine/utils/cssVariables.js +27 -11
- package/themes/engine/utils/cssVariables.mjs +28 -11
- package/themes/engine/utils/validation.js +7 -0
- package/themes/engine/utils/validation.mjs +7 -0
- package/themes/static/variables/helpers/iconsMap.js +1 -6
- package/themes/static/variables/helpers/iconsMap.mjs +1 -6
- package/themes/static/variables/tokens/classic.js +6 -0
- package/themes/static/variables/tokens/classic.mjs +6 -0
- package/themes/static/variables/tokens/horizon.js +6 -0
- package/themes/static/variables/tokens/horizon.mjs +6 -0
- package/themes/static/variables/tokens/main.js +6 -0
- package/themes/static/variables/tokens/main.mjs +6 -0
- package/themes/types.d.ts +1 -1
- package/translations/changesObservable/observable.js +4 -9
- package/translations/changesObservable/observable.mjs +4 -9
- package/translations/changesObservable/observer.js +4 -9
- package/translations/changesObservable/observer.mjs +4 -9
- package/translations/indexMapper.d.ts +14 -9
- package/translations/indexMapper.js +109 -49
- package/translations/indexMapper.mjs +109 -49
- package/translations/mapCollections/aggregatedCollection.js +20 -35
- package/translations/mapCollections/aggregatedCollection.mjs +20 -35
- package/translations/mapCollections/mapCollection.d.ts +10 -4
- package/translations/mapCollections/mapCollection.js +2 -2
- package/translations/mapCollections/mapCollection.mjs +2 -2
- package/translations/maps/booleanMap.d.mts +1 -0
- package/translations/maps/booleanMap.d.ts +86 -0
- package/translations/maps/booleanMap.js +293 -0
- package/translations/maps/booleanMap.mjs +301 -0
- package/translations/maps/hidingMap.d.ts +5 -2
- package/translations/maps/hidingMap.js +8 -3
- package/translations/maps/hidingMap.mjs +8 -3
- package/translations/maps/index.d.ts +5 -2
- package/translations/maps/index.js +7 -3
- package/translations/maps/index.mjs +10 -2
- package/translations/maps/indexMap.d.ts +26 -2
- package/translations/maps/indexMap.js +73 -6
- package/translations/maps/indexMap.mjs +73 -6
- package/translations/maps/indexesSequence.d.ts +53 -2
- package/translations/maps/indexesSequence.js +218 -3
- package/translations/maps/indexesSequence.mjs +226 -3
- package/translations/maps/trimmingMap.d.ts +5 -2
- package/translations/maps/trimmingMap.js +8 -3
- package/translations/maps/trimmingMap.mjs +8 -3
- package/translations/maps/utils/actionsOnIndexes.js +20 -1
- package/translations/maps/utils/actionsOnIndexes.mjs +20 -1
- package/translations/maps/utils/indexesSequence.js +12 -3
- package/translations/maps/utils/indexesSequence.mjs +12 -3
- package/translations/maps/utils/physicallyIndexed.js +12 -1
- package/translations/maps/utils/physicallyIndexed.mjs +12 -1
- package/utils/entitlementLicenseKey/classify.d.mts +1 -0
- package/utils/entitlementLicenseKey/classify.d.ts +34 -0
- package/utils/entitlementLicenseKey/classify.js +97 -0
- package/utils/entitlementLicenseKey/classify.mjs +96 -0
- package/utils/entitlementLicenseKey/constants.d.mts +1 -0
- package/utils/entitlementLicenseKey/constants.d.ts +69 -0
- package/utils/entitlementLicenseKey/constants.js +54 -0
- package/utils/entitlementLicenseKey/constants.mjs +66 -0
- package/utils/entitlementLicenseKey/detectFormat.d.mts +1 -0
- package/utils/entitlementLicenseKey/detectFormat.d.ts +23 -0
- package/utils/entitlementLicenseKey/detectFormat.js +60 -0
- package/utils/entitlementLicenseKey/detectFormat.mjs +60 -0
- package/utils/entitlementLicenseKey/encoding.d.mts +1 -0
- package/utils/entitlementLicenseKey/encoding.d.ts +58 -0
- package/utils/entitlementLicenseKey/encoding.js +161 -0
- package/utils/entitlementLicenseKey/encoding.mjs +172 -0
- package/utils/entitlementLicenseKey/extractKeyData.d.mts +1 -0
- package/utils/entitlementLicenseKey/extractKeyData.d.ts +47 -0
- package/utils/entitlementLicenseKey/extractKeyData.js +213 -0
- package/utils/entitlementLicenseKey/extractKeyData.mjs +232 -0
- package/utils/entitlementLicenseKey/grants.d.mts +1 -0
- package/utils/entitlementLicenseKey/grants.d.ts +54 -0
- package/utils/entitlementLicenseKey/grants.js +68 -0
- package/utils/entitlementLicenseKey/grants.mjs +84 -0
- package/utils/entitlementLicenseKey/index.d.mts +1 -0
- package/utils/entitlementLicenseKey/index.d.ts +8 -0
- package/utils/entitlementLicenseKey/index.js +53 -0
- package/utils/entitlementLicenseKey/index.mjs +6 -0
- package/utils/entitlementLicenseKey/sha512.d.mts +1 -0
- package/utils/entitlementLicenseKey/sha512.d.ts +11 -0
- package/utils/entitlementLicenseKey/sha512.js +328 -0
- package/utils/entitlementLicenseKey/sha512.mjs +327 -0
- package/utils/entitlementLicenseKey/types.d.mts +1 -0
- package/utils/entitlementLicenseKey/types.d.ts +84 -0
- package/utils/entitlementLicenseKey/types.js +8 -0
- package/utils/entitlementLicenseKey/types.mjs +10 -0
- package/utils/ghostTable.d.ts +1 -0
- package/utils/ghostTable.js +58 -11
- package/utils/ghostTable.mjs +58 -11
- package/utils/interval.js +5 -12
- package/utils/interval.mjs +5 -12
- package/utils/licenseBranding/badge.d.mts +1 -0
- package/utils/licenseBranding/badge.d.ts +21 -0
- package/utils/licenseBranding/badge.js +237 -0
- package/utils/licenseBranding/badge.mjs +244 -0
- package/utils/licenseBranding/content.d.mts +1 -0
- package/utils/licenseBranding/content.d.ts +54 -0
- package/utils/licenseBranding/content.js +93 -0
- package/utils/licenseBranding/content.mjs +79 -0
- package/utils/licenseBranding/index.d.mts +1 -0
- package/utils/licenseBranding/index.d.ts +14 -0
- package/utils/licenseBranding/index.js +55 -0
- package/utils/licenseBranding/index.mjs +56 -0
- package/utils/licenseBranding/lockScreen.d.mts +1 -0
- package/utils/licenseBranding/lockScreen.d.ts +23 -0
- package/utils/licenseBranding/lockScreen.js +150 -0
- package/utils/licenseBranding/lockScreen.mjs +159 -0
- package/utils/licenseNotification.d.ts +19 -0
- package/utils/licenseNotification.js +56 -29
- package/utils/licenseNotification.mjs +61 -29
- package/utils/movableMeta.d.mts +1 -0
- package/utils/movableMeta.d.ts +40 -0
- package/utils/movableMeta.js +47 -0
- package/utils/movableMeta.mjs +46 -0
- package/utils/parseTable.js +1 -1
- package/utils/parseTable.mjs +1 -1
- package/utils/samplesGenerator.d.ts +41 -14
- package/utils/samplesGenerator.js +112 -42
- package/utils/samplesGenerator.mjs +112 -42
- package/utils/stylesHandler.d.ts +13 -0
- package/utils/stylesHandler.js +60 -14
- package/utils/stylesHandler.mjs +60 -14
- package/validators/autocompleteValidator/autocompleteValidator.js +3 -0
- package/validators/autocompleteValidator/autocompleteValidator.mjs +3 -0
- package/validators/index.d.ts +3 -2
- package/validators/index.js +8 -0
- package/validators/index.mjs +3 -1
- package/validators/intlDatetimeValidator/index.d.mts +1 -0
- package/validators/intlDatetimeValidator/index.d.ts +1 -0
- package/validators/intlDatetimeValidator/index.js +25 -0
- package/validators/intlDatetimeValidator/index.mjs +1 -0
- package/validators/intlDatetimeValidator/intlDatetimeValidator.d.mts +1 -0
- package/validators/intlDatetimeValidator/intlDatetimeValidator.d.ts +28 -0
- package/validators/intlDatetimeValidator/intlDatetimeValidator.js +49 -0
- package/validators/intlDatetimeValidator/intlDatetimeValidator.mjs +37 -0
- package/3rdparty/walkontable/src/overlay/bottom.d.mts +0 -1
- package/3rdparty/walkontable/src/overlay/bottomInlineStartCorner.d.mts +0 -1
- package/3rdparty/walkontable/src/overlay/inlineStart.d.mts +0 -1
- package/3rdparty/walkontable/src/overlay/top.d.mts +0 -1
- package/3rdparty/walkontable/src/overlay/topInlineStartCorner.d.mts +0 -1
- package/3rdparty/walkontable/src/overlays.d.ts +0 -329
- package/3rdparty/walkontable/src/overlays.js +0 -870
- package/3rdparty/walkontable/src/overlays.mjs +0 -860
- package/3rdparty/walkontable/src/renderer/table.d.mts +0 -1
- package/3rdparty/walkontable/src/renderer/table.js +0 -229
- package/3rdparty/walkontable/src/settings.d.mts +0 -2
- package/3rdparty/walkontable/src/settings.js +0 -196
- package/3rdparty/walkontable/src/settings.mjs +0 -263
- package/3rdparty/walkontable/src/table/bottom.d.mts +0 -2
- package/3rdparty/walkontable/src/table/bottom.d.ts +0 -19
- package/3rdparty/walkontable/src/table/bottom.js +0 -38
- package/3rdparty/walkontable/src/table/bottom.mjs +0 -23
- package/3rdparty/walkontable/src/table/bottomInlineStartCorner.d.mts +0 -2
- package/3rdparty/walkontable/src/table/bottomInlineStartCorner.d.ts +0 -20
- package/3rdparty/walkontable/src/table/bottomInlineStartCorner.mjs +0 -24
- package/3rdparty/walkontable/src/table/inlineStart.d.mts +0 -2
- package/3rdparty/walkontable/src/table/inlineStart.d.ts +0 -16
- package/3rdparty/walkontable/src/table/inlineStart.js +0 -35
- package/3rdparty/walkontable/src/table/inlineStart.mjs +0 -20
- package/3rdparty/walkontable/src/table/master.d.mts +0 -2
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.d.mts +0 -2
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.d.ts +0 -75
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +0 -122
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +0 -112
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.d.mts +0 -2
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.d.ts +0 -75
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +0 -122
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +0 -112
- package/3rdparty/walkontable/src/table/top.d.mts +0 -2
- package/3rdparty/walkontable/src/table/top.d.ts +0 -19
- package/3rdparty/walkontable/src/table/top.js +0 -38
- package/3rdparty/walkontable/src/table/top.mjs +0 -23
- package/3rdparty/walkontable/src/table/topInlineStartCorner.d.mts +0 -2
- package/3rdparty/walkontable/src/table/topInlineStartCorner.d.ts +0 -20
- package/3rdparty/walkontable/src/table/topInlineStartCorner.mjs +0 -24
- package/3rdparty/walkontable/src/table.d.mts +0 -2
- package/3rdparty/walkontable/src/table.d.ts +0 -741
- package/3rdparty/walkontable/src/table.js +0 -1120
- package/3rdparty/walkontable/src/table.mjs +0 -1105
- package/3rdparty/walkontable/src/utils/cellCoords.d.mts +0 -1
- package/3rdparty/walkontable/src/utils/cellCoords.js +0 -54
- package/3rdparty/walkontable/src/utils/cellCoords.mjs +0 -54
- package/3rdparty/walkontable/src/utils/column.d.mts +0 -2
- package/3rdparty/walkontable/src/utils/column.js +0 -75
- package/3rdparty/walkontable/src/utils/column.mjs +0 -70
- package/3rdparty/walkontable/src/utils/positionCache.d.mts +0 -1
- package/3rdparty/walkontable/src/utils/positionCache.d.ts +0 -91
- package/3rdparty/walkontable/src/utils/positionCache.js +0 -193
- package/3rdparty/walkontable/src/utils/positionCache.mjs +0 -194
- package/3rdparty/walkontable/src/utils/row.d.mts +0 -2
- package/3rdparty/walkontable/src/utils/row.js +0 -46
- package/3rdparty/walkontable/src/utils/row.mjs +0 -41
- package/3rdparty/walkontable/src/viewport.d.ts +0 -254
- package/3rdparty/walkontable/src/viewport.js +0 -533
- package/3rdparty/walkontable/src/viewport.mjs +0 -523
- /package/3rdparty/walkontable/src/{renderer → axisSizing/positionCache}/index.d.mts +0 -0
- /package/3rdparty/walkontable/src/{overlays.d.mts → overlay/overlays.d.mts} +0 -0
- /package/3rdparty/walkontable/src/overlay/{_base.d.mts → regions/_base.d.mts} +0 -0
- /package/3rdparty/walkontable/src/{stickyScrollStrategy.d.mts → overlay/strategies/stickyScrollStrategy.d.mts} +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/_base.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/_base.js +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/_base.mjs +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/cells.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/cells.d.ts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/colGroup.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/colGroup.d.ts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/colGroup.js +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/colGroup.mjs +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/columnHeaderRows.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/columnHeaderRows.d.ts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/columnHeaderRows.js +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/columnHeaderRows.mjs +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/columnHeaders.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/rowHeaders.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/rowHeaders.d.ts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/rowHeaders.js +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/rowHeaders.mjs +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/rows.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/rows.d.ts +0 -0
- /package/3rdparty/walkontable/src/{scroll.d.mts → scroll/scroll.d.mts} +0 -0
- /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyColumnsStart.d.mts +0 -0
- /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsBottom.d.mts +0 -0
- /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsBottom.js +0 -0
- /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsBottom.mjs +0 -0
- /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsTop.d.mts +0 -0
- /package/3rdparty/walkontable/src/{viewport.d.mts → viewport/viewport.d.mts} +0 -0
|
@@ -4,15 +4,12 @@ function _check_private_redeclaration(obj, privateCollection) {
|
|
|
4
4
|
}
|
|
5
5
|
}
|
|
6
6
|
function _class_apply_descriptor_get(receiver, descriptor) {
|
|
7
|
-
if (descriptor.get)
|
|
8
|
-
return descriptor.get.call(receiver);
|
|
9
|
-
}
|
|
7
|
+
if (descriptor.get) return descriptor.get.call(receiver);
|
|
10
8
|
return descriptor.value;
|
|
11
9
|
}
|
|
12
10
|
function _class_apply_descriptor_set(receiver, descriptor, value) {
|
|
13
|
-
if (descriptor.set)
|
|
14
|
-
|
|
15
|
-
} else {
|
|
11
|
+
if (descriptor.set) descriptor.set.call(receiver, value);
|
|
12
|
+
else {
|
|
16
13
|
if (!descriptor.writable) {
|
|
17
14
|
throw new TypeError("attempted to set read only private field");
|
|
18
15
|
}
|
|
@@ -20,9 +17,7 @@ function _class_apply_descriptor_set(receiver, descriptor, value) {
|
|
|
20
17
|
}
|
|
21
18
|
}
|
|
22
19
|
function _class_extract_field_descriptor(receiver, privateMap, action) {
|
|
23
|
-
if (!privateMap.has(receiver))
|
|
24
|
-
throw new TypeError("attempted to " + action + " private field on non-instance");
|
|
25
|
-
}
|
|
20
|
+
if (!privateMap.has(receiver)) throw new TypeError("attempted to " + action + " private field on non-instance");
|
|
26
21
|
return privateMap.get(receiver);
|
|
27
22
|
}
|
|
28
23
|
function _class_private_field_get(receiver, privateMap) {
|
|
@@ -39,9 +34,7 @@ function _class_private_field_set(receiver, privateMap, value) {
|
|
|
39
34
|
return value;
|
|
40
35
|
}
|
|
41
36
|
function _class_private_method_get(receiver, privateSet, fn) {
|
|
42
|
-
if (!privateSet.has(receiver))
|
|
43
|
-
throw new TypeError("attempted to get private field on non-instance");
|
|
44
|
-
}
|
|
37
|
+
if (!privateSet.has(receiver)) throw new TypeError("attempted to get private field on non-instance");
|
|
45
38
|
return fn;
|
|
46
39
|
}
|
|
47
40
|
function _class_private_method_init(obj, privateSet) {
|
|
@@ -50,18 +43,20 @@ function _class_private_method_init(obj, privateSet) {
|
|
|
50
43
|
}
|
|
51
44
|
import { BasePlugin } from '../base/index.mjs';
|
|
52
45
|
import { staticRegister } from '../../utils/staticRegister.mjs';
|
|
53
|
-
import { error, warn } from '../../helpers/console.mjs';
|
|
46
|
+
import { error, warn, warnOnce } from '../../helpers/console.mjs';
|
|
54
47
|
import { isNumeric } from '../../helpers/number.mjs';
|
|
55
48
|
import { isObject } from '../../helpers/object.mjs';
|
|
56
49
|
import { isDefined, isUndefined } from '../../helpers/mixed.mjs';
|
|
57
50
|
import { getRegisteredHotInstances, setupEngine, setupSheet, unregisterEngine } from './engine/register.mjs';
|
|
58
|
-
import { getDateFromExcelDate, getDateInHfFormat, getDateInHotFormat, getTimeFromHfTimeFraction, isDate, isDateValid, isFormula, normalizeValueForFormulaEngine, unescapeFormulaExpression } from './utils.mjs';
|
|
51
|
+
import { coalesceIndexesToSpans, getDateFromExcelDate, getDateInHfFormat, getDateInHotFormat, getTimeFromHfTimeFraction, isDate, isDateValid, isFormula, normalizeValueForFormulaEngine, unescapeFormulaExpression } from './utils.mjs';
|
|
52
|
+
import { resolveHyperlinkUrl } from './hyperlinkUrl.mjs';
|
|
59
53
|
import { getEngineSettingsWithOverrides, haveEngineSettingsChanged } from './engine/settings.mjs';
|
|
60
54
|
import { isArrayOfArrays } from '../../helpers/data.mjs';
|
|
61
55
|
import { toUpperCaseFirst } from '../../helpers/string.mjs';
|
|
62
56
|
import { getValueGetterValue } from '../../utils/valueAccessors.mjs';
|
|
63
57
|
import { Hooks } from '../../core/hooks/index.mjs';
|
|
64
58
|
import IndexSyncer from './indexSyncer/index.mjs';
|
|
59
|
+
import { isCellRangeLike } from '../../3rdparty/walkontable/src/cell/range.mjs';
|
|
65
60
|
/**
|
|
66
61
|
* Narrow an arbitrary value to a HyperFormula cell change shape.
|
|
67
62
|
*
|
|
@@ -87,6 +82,8 @@ import IndexSyncer from './indexSyncer/index.mjs';
|
|
|
87
82
|
return typeof candidate === 'object' && candidate !== null && 'value' in candidate;
|
|
88
83
|
}
|
|
89
84
|
export const PLUGIN_KEY = 'formulas';
|
|
85
|
+
// `maxRows` and `maxColumns` no longer reach the engine at all (GH #10672), but they stay here:
|
|
86
|
+
// `updatePlugin` also creates or switches the sheet, and dropping them would skip that.
|
|
90
87
|
export const SETTING_KEYS = [
|
|
91
88
|
'maxRows',
|
|
92
89
|
'maxColumns',
|
|
@@ -104,17 +101,90 @@ Hooks.getSingleton().register('afterFormulasValuesUpdate');
|
|
|
104
101
|
// HyperFormula's `undo` and `redo` methods will do it instead. Please keep in mind that undo/redo stacks inside
|
|
105
102
|
// instances of Handsontable and HyperFormula should be synced (number of actions should be the same).
|
|
106
103
|
const isBlockedSource = (source)=>source === 'UndoRedo.undo' || source === 'UndoRedo.redo' || source === 'auto';
|
|
104
|
+
// Maximum number of `[startIndex, amount]` spans passed to a single variadic engine
|
|
105
|
+
// `removeRows`/`removeColumns` call. An unbounded argument spread could overflow the call stack.
|
|
106
|
+
const REMOVAL_SPANS_CHUNK_SIZE = 1000;
|
|
107
|
+
// Group under which the plugin's grid shortcuts are registered, so `disablePlugin` can drop them all.
|
|
108
|
+
const SHORTCUTS_GROUP = PLUGIN_KEY;
|
|
109
|
+
// Class name of the anchor that wraps the content of a `HYPERLINK` cell. It is also the marker that
|
|
110
|
+
// keeps the wrapping idempotent when a renderer leaves the previous DOM in place.
|
|
111
|
+
const HYPERLINK_CLASS_NAME = 'ht-hyperlink';
|
|
112
|
+
// `warnOnce` key for a `HYPERLINK` URL refused by the protocol allowlist. Warning per cell would
|
|
113
|
+
// flood the console on every render pass.
|
|
114
|
+
const HYPERLINK_WARN_KEY = 'formulas-hyperlink-refused';
|
|
107
115
|
var /**
|
|
108
116
|
* Flag used to bypass hooks in internal operations.
|
|
109
117
|
*
|
|
110
118
|
* @private
|
|
111
119
|
* @type {boolean}
|
|
112
120
|
*/ _internalOperationPending = /*#__PURE__*/ new WeakMap(), /**
|
|
121
|
+
* Whether `HYPERLINK` cells are rendered as links. Mirrors the `hyperlinks` plugin setting, cached
|
|
122
|
+
* because it is read once per rendered cell.
|
|
123
|
+
*/ _hyperlinksEnabled = /*#__PURE__*/ new WeakMap(), /**
|
|
113
124
|
* Flag needed to mark if Handsontable was initialized with no data.
|
|
114
125
|
* (Required to work around the fact, that Handsontable auto-generates sample data, when no data is provided).
|
|
115
126
|
*
|
|
116
127
|
* @type {boolean}
|
|
117
128
|
*/ _hotWasInitializedWithEmptyData = /*#__PURE__*/ new WeakMap(), /**
|
|
129
|
+
* Stores the HyperFormula source range and destination address prepared in `beforeMoveCells` so that
|
|
130
|
+
* `commitPendingMoveCells` can execute the corresponding HF operation without recomputing
|
|
131
|
+
* visual-to-HF coordinates. `rect` carries the same operation in visual coordinates for the
|
|
132
|
+
* post-commit data sync.
|
|
133
|
+
*
|
|
134
|
+
* Set to `null` when no move is in flight.
|
|
135
|
+
*
|
|
136
|
+
* @private
|
|
137
|
+
* @type {{ source: object, dest: object, isCopy: boolean, rect: object }|null}
|
|
138
|
+
*/ _pendingMoveCells = /*#__PURE__*/ new WeakMap(), /**
|
|
139
|
+
* The visual rectangle of the operation `commitPendingMoveCells` committed to the engine (or
|
|
140
|
+
* intentionally skipped during undo/redo replay). Consumed by the `afterMoveCells` listener,
|
|
141
|
+
* which runs the HOT-data sync only for committed operations and only off this value — never
|
|
142
|
+
* off its own hook arguments, which a preceding listener's return value can replace.
|
|
143
|
+
*
|
|
144
|
+
* Set to `null` when no committed move is awaiting its sync.
|
|
145
|
+
*
|
|
146
|
+
* @private
|
|
147
|
+
* @type {object|null}
|
|
148
|
+
*/ _committedMoveCells = /*#__PURE__*/ new WeakMap(), /**
|
|
149
|
+
* `true` while a move-cells redo is replaying through the MoveCells plugin.
|
|
150
|
+
*
|
|
151
|
+
* Unlike other redo actions, it must validate the Handsontable move before advancing
|
|
152
|
+
* HyperFormula, so `commitPendingMoveCells` performs the engine operation itself.
|
|
153
|
+
*/ _isRedoingMoveCells = /*#__PURE__*/ new WeakMap(), /**
|
|
154
|
+
* The dependent-cell changes returned by the engine operation in `commitPendingMoveCells`,
|
|
155
|
+
* consumed by the `afterMoveCells` listener to re-render dependent sheets. `null` when the
|
|
156
|
+
* engine step was skipped (undo/redo replay re-renders everything anyway).
|
|
157
|
+
*
|
|
158
|
+
* @private
|
|
159
|
+
* @type {unknown[]|null}
|
|
160
|
+
*/ _moveCellsChanges = /*#__PURE__*/ new WeakMap(), /**
|
|
161
|
+
* Guard flag set while writing synced values back to HOT after a `moveCells` operation.
|
|
162
|
+
* Prevents the `afterSetDataAtCell` / `afterSetSourceDataAtCell` hooks from re-writing
|
|
163
|
+
* the same values into HyperFormula a second time.
|
|
164
|
+
*
|
|
165
|
+
* @private
|
|
166
|
+
* @type {boolean}
|
|
167
|
+
*/ _moveCellsSyncPending = /*#__PURE__*/ new WeakMap(), /**
|
|
168
|
+
* The changes that the engine reported while undoing or redoing an action. They are collected in
|
|
169
|
+
* `beforeUndo`/`beforeRedo` and consumed in `afterUndo`/`afterRedo`, where the dependent cells get
|
|
170
|
+
* validated.
|
|
171
|
+
*
|
|
172
|
+
* @type {Array}
|
|
173
|
+
*/ _undoRedoDependentCells = /*#__PURE__*/ new WeakMap(), /**
|
|
174
|
+
* The addresses of the cells that the `UndoRedo` plugin writes through `setDataAtCell`. The Core
|
|
175
|
+
* validates those on its own, so they are excluded from the dependent-cell validation.
|
|
176
|
+
*
|
|
177
|
+
* Cells restored through `setSourceDataAtCell` are deliberately absent: that path runs
|
|
178
|
+
* `sourceDataValidator`, which never touches the `valid` flag, so excluding them would leave them
|
|
179
|
+
* unvalidated by anyone.
|
|
180
|
+
*
|
|
181
|
+
* @type {Array}
|
|
182
|
+
*/ _undoRedoChangedCells = /*#__PURE__*/ new WeakMap(), /**
|
|
183
|
+
* Whether the action being undone or redone wrote any cell data. Only then are the dependent cells
|
|
184
|
+
* worth validating.
|
|
185
|
+
*
|
|
186
|
+
* @type {boolean}
|
|
187
|
+
*/ _undoRedoWroteData = /*#__PURE__*/ new WeakMap(), /**
|
|
118
188
|
* Maps a HyperFormula `ExportedCellChange` to the same change with `newValue` translated to a
|
|
119
189
|
* Handsontable-formatted string when the target cell is of type `date` or `time`. For other cells
|
|
120
190
|
* (or non-numeric values, or named expressions, or trimmed cells, or cells on other sheets), the
|
|
@@ -165,6 +235,64 @@ var /**
|
|
|
165
235
|
*
|
|
166
236
|
* @param {string} [sheetName] The new sheet name.
|
|
167
237
|
*/ _updateSheetNameAndSheetId = /*#__PURE__*/ new WeakSet(), /**
|
|
238
|
+
* Reads the `hyperlinks` plugin setting into the cached flag.
|
|
239
|
+
*/ _refreshHyperlinksSetting = /*#__PURE__*/ new WeakSet(), /**
|
|
240
|
+
* Unwraps every `HYPERLINK` anchor currently in the grid, including the overlay clones.
|
|
241
|
+
*
|
|
242
|
+
* Disabling the plugin removes the `afterRenderer` hook, so a renderer that leaves its previous
|
|
243
|
+
* DOM in place would keep its cells clickable with nothing left to clean them up. The anchors are
|
|
244
|
+
* matched by the plugin's own class, so no knowledge of the rendering internals is needed.
|
|
245
|
+
*/ _unwrapRenderedHyperlinks = /*#__PURE__*/ new WeakSet(), /**
|
|
246
|
+
* Moves an anchor's content up into the anchor's own parent and drops the anchor.
|
|
247
|
+
*
|
|
248
|
+
* The insertion goes through `link.parentNode` rather than the cell: a renderer that leaves the
|
|
249
|
+
* previous DOM in place can wrap an existing anchor, leaving it as `TD > div > a` instead of a
|
|
250
|
+
* direct child. Inserting relative to the cell would then throw `NotFoundError` and, because this
|
|
251
|
+
* runs inside `afterRenderer`, take the whole draw down with it.
|
|
252
|
+
*
|
|
253
|
+
* @param {Element} link The anchor to unwrap.
|
|
254
|
+
*/ _unwrapLink = /*#__PURE__*/ new WeakSet(), /**
|
|
255
|
+
* Moves the content of a cell's `HYPERLINK` anchor back into the cell and drops the anchor. Loops
|
|
256
|
+
* so that anchors nested by an older render pass are unwrapped as well.
|
|
257
|
+
*
|
|
258
|
+
* @param {HTMLTableCellElement} TD The rendered cell element.
|
|
259
|
+
*/ _unwrapHyperlink = /*#__PURE__*/ new WeakSet(), /**
|
|
260
|
+
* Returns the URL that a cell should link to, or `null` when the cell must not become a link.
|
|
261
|
+
*
|
|
262
|
+
* The engine reports a hyperlink only for a cell whose root expression is `HYPERLINK()`, so a
|
|
263
|
+
* nested call such as `=CONCATENATE("see ", HYPERLINK(...))` resolves to `null` here.
|
|
264
|
+
*
|
|
265
|
+
* @param {number} row Visual row index.
|
|
266
|
+
* @param {number} column Visual column index.
|
|
267
|
+
* @returns {string|null} The resolved absolute URL, or `null`.
|
|
268
|
+
*/ _getHyperlinkHref = /*#__PURE__*/ new WeakSet(), /**
|
|
269
|
+
* Records that the action being undone or redone wrote cell data, and - when the Core validates
|
|
270
|
+
* that write itself - which cells it wrote, so that `#validateUndoRedoDependentCells` can skip
|
|
271
|
+
* them.
|
|
272
|
+
*
|
|
273
|
+
* `coreValidatesWrite` separates the two write paths. `setDataAtCell` ends in the Core's own
|
|
274
|
+
* `validateCell`, so those cells must be excluded to avoid validating them twice.
|
|
275
|
+
* `setSourceDataAtCell` does not - it runs `sourceDataValidator`, which never touches the `valid`
|
|
276
|
+
* flag - so its cells must stay in the validation pass. Skipping them is also why their row index
|
|
277
|
+
* is never translated here: that hook reports physical rows, unlike `afterSetDataAtCell`.
|
|
278
|
+
*
|
|
279
|
+
* @param {Array[]} changes An array of changes in format [[row, prop, oldValue, value], ...].
|
|
280
|
+
* @param {string} source String that identifies the source of the hook call.
|
|
281
|
+
* @param {boolean} coreValidatesWrite `true` when the Core validates the written cells itself.
|
|
282
|
+
*/ _registerUndoRedoWrite = /*#__PURE__*/ new WeakSet(), /**
|
|
283
|
+
* Validates the cells that the engine recalculated while an action was undone or redone.
|
|
284
|
+
*
|
|
285
|
+
* The `afterSetDataAtCell` and `afterSetSourceDataAtCell` listeners ignore changes coming from the
|
|
286
|
+
* `UndoRedo` plugin, because the engine reverts them through its own undo stack. Without this step
|
|
287
|
+
* the dependent formula cells would keep the `valid` flag they were given before the action was
|
|
288
|
+
* reverted - a formula cell that turned into an error, and is a correct value again after the undo,
|
|
289
|
+
* would stay marked as invalid.
|
|
290
|
+
*
|
|
291
|
+
* Runs only when the action wrote cell data. That covers undoing an edit (`setDataAtCell`) and
|
|
292
|
+
* undoing a row or column removal, which restores the data with `setSourceDataAtCell`. Actions
|
|
293
|
+
* that only reorder or hide - moving, sorting, filtering, merging - write no data, do not validate
|
|
294
|
+
* dependent cells outside of undo either, and are skipped.
|
|
295
|
+
*/ _validateUndoRedoDependentCells = /*#__PURE__*/ new WeakSet(), /**
|
|
168
296
|
* Get the value to be passed to the formula engine.
|
|
169
297
|
* If the value is an object, utilize the valueGetter for that cell, otherwise return the value as is.
|
|
170
298
|
*
|
|
@@ -220,6 +348,14 @@ var /**
|
|
|
220
348
|
* property.
|
|
221
349
|
* @param {string} ioMode String which indicates for what operation hook is fired (`get` or `set`).
|
|
222
350
|
*/ _onModifyData = /*#__PURE__*/ new WeakMap(), /**
|
|
351
|
+
* `afterRenderer` hook callback. Wraps the already rendered content of a `HYPERLINK` cell in an
|
|
352
|
+
* anchor. The cell keeps its own renderer and its cell meta is left untouched, so disabling the
|
|
353
|
+
* plugin or clearing the formula needs no cleanup.
|
|
354
|
+
*
|
|
355
|
+
* @param {HTMLTableCellElement} TD The rendered cell element.
|
|
356
|
+
* @param {number} row Visual row index.
|
|
357
|
+
* @param {number} column Visual column index.
|
|
358
|
+
*/ _onAfterRenderer = /*#__PURE__*/ new WeakMap(), /**
|
|
223
359
|
* `modifySourceData` hook callback.
|
|
224
360
|
*
|
|
225
361
|
* @param {number} row Physical row index.
|
|
@@ -232,13 +368,13 @@ var /**
|
|
|
232
368
|
*
|
|
233
369
|
* @param {Array[]} changes An array of changes in format [[row, prop, oldValue, value], ...].
|
|
234
370
|
* @param {string} [source] String that identifies source of hook call
|
|
235
|
-
* ([list of all available sources]
|
|
371
|
+
* ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).
|
|
236
372
|
*/ _onAfterSetDataAtCell = /*#__PURE__*/ new WeakMap(), /**
|
|
237
373
|
* `onAfterSetSourceDataAtCell` hook callback.
|
|
238
374
|
*
|
|
239
375
|
* @param {Array[]} changes An array of changes in format [[row, column, oldValue, value], ...].
|
|
240
376
|
* @param {string} [source] String that identifies source of hook call
|
|
241
|
-
* ([list of all available sources]
|
|
377
|
+
* ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).
|
|
242
378
|
*/ _onAfterSetSourceDataAtCell = /*#__PURE__*/ new WeakMap(), /**
|
|
243
379
|
* `beforeCreateRow` hook callback.
|
|
244
380
|
*
|
|
@@ -271,14 +407,14 @@ var /**
|
|
|
271
407
|
* @param {number} visualRow Represents the visual index of first newly created row in the data source array.
|
|
272
408
|
* @param {number} amount Number of newly created rows in the data source array.
|
|
273
409
|
* @param {string} [source] String that identifies source of hook call
|
|
274
|
-
* ([list of all available sources]
|
|
410
|
+
* ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).
|
|
275
411
|
*/ _onAfterCreateRow = /*#__PURE__*/ new WeakMap(), /**
|
|
276
412
|
* `afterCreateCol` hook callback.
|
|
277
413
|
*
|
|
278
414
|
* @param {number} visualColumn Represents the visual index of first newly created column in the data source.
|
|
279
415
|
* @param {number} amount Number of newly created columns in the data source.
|
|
280
416
|
* @param {string} [source] String that identifies source of hook call
|
|
281
|
-
* ([list of all available sources]
|
|
417
|
+
* ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).
|
|
282
418
|
*/ _onAfterCreateCol = /*#__PURE__*/ new WeakMap(), /**
|
|
283
419
|
* `afterRemoveRow` hook callback.
|
|
284
420
|
*
|
|
@@ -286,7 +422,7 @@ var /**
|
|
|
286
422
|
* @param {number} amount An amount of removed rows.
|
|
287
423
|
* @param {number[]} physicalRows An array of physical rows removed from the data source.
|
|
288
424
|
* @param {string} [source] String that identifies source of hook call
|
|
289
|
-
* ([list of all available sources]
|
|
425
|
+
* ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).
|
|
290
426
|
*/ _onAfterRemoveRow = /*#__PURE__*/ new WeakMap(), /**
|
|
291
427
|
* `afterRemoveCol` hook callback.
|
|
292
428
|
*
|
|
@@ -294,8 +430,73 @@ var /**
|
|
|
294
430
|
* @param {number} amount An amount of removed columns.
|
|
295
431
|
* @param {number[]} physicalColumns An array of physical columns removed from the data source.
|
|
296
432
|
* @param {string} [source] String that identifies source of hook call
|
|
297
|
-
* ([list of all available sources]
|
|
433
|
+
* ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).
|
|
298
434
|
*/ _onAfterRemoveCol = /*#__PURE__*/ new WeakMap(), /**
|
|
435
|
+
* Checks whether every visual index in the `[visualFrom, visualTo]` span maps to consecutive
|
|
436
|
+
* HyperFormula indexes on the given axis. Only then is a visual rectangle equivalent to the
|
|
437
|
+
* single HF rectangle the `moveCells` engine operation works on.
|
|
438
|
+
*
|
|
439
|
+
* @param {AxisSyncer} syncer The row or column axis syncer.
|
|
440
|
+
* @param {number} visualFrom The first visual index of the span.
|
|
441
|
+
* @param {number} visualTo The last visual index of the span.
|
|
442
|
+
* @returns {boolean}
|
|
443
|
+
*/ _mapsToContiguousHfBlock = /*#__PURE__*/ new WeakSet(), /**
|
|
444
|
+
* `beforeMoveCells` hook callback.
|
|
445
|
+
*
|
|
446
|
+
* Converts the visual source range and target top-left corner to HyperFormula
|
|
447
|
+
* (physical) coordinates, validates feasibility for a MOVE operation, and stores
|
|
448
|
+
* the converted addresses for use in the `afterMoveCells` handler.
|
|
449
|
+
*
|
|
450
|
+
* Returns `false` to veto the whole operation when the source range is not a valid range
|
|
451
|
+
* (the documented `false` veto value, or garbage folded into the argument by a preceding
|
|
452
|
+
* listener's truthy return value), when HyperFormula reports the move is not possible
|
|
453
|
+
* (e.g. the source or target contains an array formula), or when the visual ranges do not map
|
|
454
|
+
* to contiguous HF blocks (trimmed/filtered/reordered indexes), because the engine rectangle
|
|
455
|
+
* would then cover cells outside the visual operation.
|
|
456
|
+
*
|
|
457
|
+
* @param {CellRange|boolean} sourceRange The visual source range, or `false` after an earlier veto.
|
|
458
|
+
* @param {CellCoords} targetTopLeft The visual top-left of the destination.
|
|
459
|
+
* @param {boolean} isCopy `true` when copying (not moving) cells.
|
|
460
|
+
* @returns {boolean|undefined} `false` to cancel the operation; `undefined` otherwise.
|
|
461
|
+
*/ _onBeforeMoveCells = /*#__PURE__*/ new WeakMap(), /**
|
|
462
|
+
* `afterMoveCells` hook callback.
|
|
463
|
+
*
|
|
464
|
+
* Runs after the engine operation already executed in `commitPendingMoveCells` (the core
|
|
465
|
+
* calls it before mutating the grid, so a failed engine operation never reaches this hook).
|
|
466
|
+
* Synchronises HOT's source data array with HF's state so that `getDataAtCell` returns
|
|
467
|
+
* correct values for plain VALUE / EMPTY cells (formula cells are already served from HF
|
|
468
|
+
* via the `modifyData` hook), then re-renders the dependent sheets. The sync is guarded by
|
|
469
|
+
* `#moveCellsSyncPending` so that `afterSetDataAtCell` does not re-write the same values
|
|
470
|
+
* back into HyperFormula.
|
|
471
|
+
*
|
|
472
|
+
* Takes no arguments on purpose. The engine has already moved the cells by the time this runs, so
|
|
473
|
+
* there is nothing left to veto and bailing out would strand the data source out of sync with the
|
|
474
|
+
* engine — which is what reading the replaceable `sourceRange` argument used to cause. The
|
|
475
|
+
* operation is read from `#committedMoveCells` instead, captured before any listener could run.
|
|
476
|
+
*/ _onAfterMoveCells = /*#__PURE__*/ new WeakMap(), /**
|
|
477
|
+
* Synchronises HOT's raw data source array with HyperFormula's state after a
|
|
478
|
+
* `moveCells` or copy operation.
|
|
479
|
+
*
|
|
480
|
+
* Formula cells are already served correctly through `modifyData` via `getCellValue`.
|
|
481
|
+
* Plain VALUE / EMPTY cells, however, fall back to the raw HOT data, so after HF
|
|
482
|
+
* moves the data the old raw values must be cleared from the source cells and the
|
|
483
|
+
* serialised HF content must be written to the target cells.
|
|
484
|
+
*
|
|
485
|
+
* The write is fenced with `#moveCellsSyncPending` to prevent the `afterSetDataAtCell`
|
|
486
|
+
* hook from re-syncing the same data back into HyperFormula.
|
|
487
|
+
*
|
|
488
|
+
* @private
|
|
489
|
+
* @param {object} rect The committed operation in visual coordinates.
|
|
490
|
+
*/ _syncHotDataAfterMoveCells = /*#__PURE__*/ new WeakSet(), /**
|
|
491
|
+
* Removes the provided `[startIndex, amount]` spans from the engine in as few calls as possible.
|
|
492
|
+
* One call handles many spans, so the engine pays its dependency-graph remap once per call instead
|
|
493
|
+
* of once per removed row or column. The engine methods are variadic, so the spans are chunked to
|
|
494
|
+
* keep the argument spread within call-stack limits; chunks run from the highest spans down, which
|
|
495
|
+
* keeps the original coordinates of the not-yet-removed lower spans valid.
|
|
496
|
+
*
|
|
497
|
+
* @param {Array<Array<number>>} spans Ascending list of `[startIndex, amount]` spans to remove.
|
|
498
|
+
* @param {'removeRows'|'removeColumns'} engineMethodName The engine removal method to call.
|
|
499
|
+
*/ _removeSpansFromEngine = /*#__PURE__*/ new WeakSet(), /**
|
|
299
500
|
* `afterDetachChild` hook callback.
|
|
300
501
|
* Used to sync the data of the rows detached in the Nested Rows plugin with the engine's dataset.
|
|
301
502
|
*
|
|
@@ -424,27 +625,61 @@ var /**
|
|
|
424
625
|
// Handling undo actions on data just using HyperFormula's UndoRedo mechanism
|
|
425
626
|
this.addHook('beforeUndo', ()=>{
|
|
426
627
|
this.indexSyncer.setPerformUndo(true);
|
|
427
|
-
this
|
|
628
|
+
_class_private_field_set(this, _undoRedoChangedCells, []);
|
|
629
|
+
_class_private_field_set(this, _undoRedoWroteData, false);
|
|
630
|
+
_class_private_field_set(this, _undoRedoDependentCells, this.engine.undo() ?? []);
|
|
428
631
|
});
|
|
429
|
-
// Handling redo actions on data just using HyperFormula's UndoRedo mechanism
|
|
430
|
-
this.addHook('beforeRedo', ()=>{
|
|
632
|
+
// Handling redo actions on data just using HyperFormula's UndoRedo mechanism.
|
|
633
|
+
this.addHook('beforeRedo', (action)=>{
|
|
634
|
+
// Defensive: `Hooks.run` threads a preceding listener's non-`undefined` return value into
|
|
635
|
+
// this argument, and the global bucket runs before this one. Without a trustworthy
|
|
636
|
+
// `actionType` the engine step cannot be dispatched safely (`engine.redo()` vs the
|
|
637
|
+
// `move_cells` replay path — the wrong branch runs the engine operation twice), so cancel
|
|
638
|
+
// the redo instead of desyncing HyperFormula. The guard runs BEFORE `setPerformRedo(true)`
|
|
639
|
+
// — a cancelled redo never fires `afterRedo`, so a flag set here would leak.
|
|
640
|
+
if (typeof action !== 'object' || action === null || !('actionType' in action)) {
|
|
641
|
+
return false;
|
|
642
|
+
}
|
|
431
643
|
this.indexSyncer.setPerformRedo(true);
|
|
432
|
-
this.
|
|
644
|
+
_class_private_field_set(this, _isRedoingMoveCells, action.actionType === 'move_cells');
|
|
645
|
+
_class_private_field_set(this, _undoRedoChangedCells, []);
|
|
646
|
+
_class_private_field_set(this, _undoRedoWroteData, false);
|
|
647
|
+
// For a `move_cells` redo the engine operation runs in `commitPendingMoveCells` (the
|
|
648
|
+
// Handsontable move must be validated first), so `engine.redo()` is not called here and
|
|
649
|
+
// there are no engine-reported dependent cells to collect.
|
|
650
|
+
_class_private_field_set(this, _undoRedoDependentCells, _class_private_field_get(this, _isRedoingMoveCells) ? [] : this.engine.redo() ?? []);
|
|
433
651
|
});
|
|
434
652
|
this.addHook('afterUndo', ()=>{
|
|
435
653
|
this.indexSyncer.setPerformUndo(false);
|
|
654
|
+
// Also clears the redo flags: a redo cancelled by a `beforeRedo` listener never fires
|
|
655
|
+
// `afterRedo`, so without these resets the flags set in `beforeRedo` would leak until the
|
|
656
|
+
// next successful redo.
|
|
657
|
+
this.indexSyncer.setPerformRedo(false);
|
|
658
|
+
_class_private_field_set(this, _isRedoingMoveCells, false);
|
|
659
|
+
_class_private_method_get(this, _validateUndoRedoDependentCells, validateUndoRedoDependentCells).call(this);
|
|
436
660
|
});
|
|
437
|
-
this.addHook('
|
|
661
|
+
this.addHook('afterRedo', ()=>{
|
|
438
662
|
this.indexSyncer.setPerformRedo(false);
|
|
663
|
+
_class_private_method_get(this, _validateUndoRedoDependentCells, validateUndoRedoDependentCells).call(this);
|
|
664
|
+
});
|
|
665
|
+
this.addHook('afterRedo', ()=>{
|
|
666
|
+
_class_private_field_set(this, _isRedoingMoveCells, false);
|
|
439
667
|
});
|
|
440
668
|
this.addHook('afterDetachChild', _class_private_field_get(this, _onAfterDetachChild));
|
|
441
669
|
this.addHook('beforeAutofill', _class_private_field_get(this, _onBeforeAutofill));
|
|
670
|
+
this.addHook('beforeMoveCells', _class_private_field_get(this, _onBeforeMoveCells));
|
|
671
|
+
this.addHook('afterMoveCells', _class_private_field_get(this, _onAfterMoveCells));
|
|
672
|
+
this.addHook('afterRenderer', _class_private_field_get(this, _onAfterRenderer));
|
|
442
673
|
_class_private_field_get(this, _engineListeners)?.forEach(([eventName, listener])=>this.engine.on(eventName, listener));
|
|
674
|
+
_class_private_method_get(this, _refreshHyperlinksSetting, refreshHyperlinksSetting).call(this);
|
|
675
|
+
this.registerShortcuts();
|
|
443
676
|
super.enablePlugin();
|
|
444
677
|
}
|
|
445
678
|
/**
|
|
446
679
|
* Disables the plugin functionality for this Handsontable instance.
|
|
447
680
|
*/ disablePlugin() {
|
|
681
|
+
_class_private_method_get(this, _unwrapRenderedHyperlinks, unwrapRenderedHyperlinks).call(this);
|
|
682
|
+
this.unregisterShortcuts();
|
|
448
683
|
_class_private_field_get(this, _engineListeners)?.forEach(([eventName, listener])=>this.engine?.off(eventName, listener));
|
|
449
684
|
if (this.engine) {
|
|
450
685
|
unregisterEngine(this.engine, this.hot);
|
|
@@ -463,7 +698,10 @@ var /**
|
|
|
463
698
|
this.engine.updateConfig(newEngineSettings);
|
|
464
699
|
}
|
|
465
700
|
const pluginSettings = this.hot.getSettings()[PLUGIN_KEY];
|
|
466
|
-
if (pluginSettings !== undefined && typeof pluginSettings !== 'boolean' && pluginSettings.sheetName !== undefined &&
|
|
701
|
+
if (pluginSettings !== undefined && typeof pluginSettings !== 'boolean' && pluginSettings.sheetName !== undefined && // Sheet ids are compared rather than names, because `sheetName` holds the engine's casing
|
|
702
|
+
// while the setting keeps the one it was written with. An unknown name has no id, which
|
|
703
|
+
// still differs from the current one and lets `switchSheet` report it.
|
|
704
|
+
this.engine?.getSheetId(pluginSettings.sheetName) !== this.sheetId) {
|
|
467
705
|
this.switchSheet(pluginSettings.sheetName);
|
|
468
706
|
}
|
|
469
707
|
// If no data was passed to the `updateSettings` method and no sheet is connected to the instance -> create a
|
|
@@ -480,6 +718,7 @@ var /**
|
|
|
480
718
|
}
|
|
481
719
|
}
|
|
482
720
|
}
|
|
721
|
+
_class_private_method_get(this, _refreshHyperlinksSetting, refreshHyperlinksSetting).call(this);
|
|
483
722
|
super.updatePlugin(newSettings);
|
|
484
723
|
}
|
|
485
724
|
/**
|
|
@@ -574,6 +813,48 @@ var /**
|
|
|
574
813
|
});
|
|
575
814
|
}
|
|
576
815
|
/**
|
|
816
|
+
* Registers the shortcut that opens the link of the selected `HYPERLINK` cell. The anchor is kept
|
|
817
|
+
* out of the tab order, so this is the only keyboard path to the link.
|
|
818
|
+
*
|
|
819
|
+
* @private
|
|
820
|
+
*/ registerShortcuts() {
|
|
821
|
+
this.hot.getShortcutManager().getContext('grid')?.addShortcut({
|
|
822
|
+
keys: [
|
|
823
|
+
[
|
|
824
|
+
'Alt',
|
|
825
|
+
'Enter'
|
|
826
|
+
]
|
|
827
|
+
],
|
|
828
|
+
callback: ()=>{
|
|
829
|
+
const highlight = this.hot.getSelectedRangeActive()?.highlight;
|
|
830
|
+
if (!highlight || highlight.row === null || highlight.col === null) {
|
|
831
|
+
return;
|
|
832
|
+
}
|
|
833
|
+
const href = _class_private_method_get(this, _getHyperlinkHref, getHyperlinkHref).call(this, highlight.row, highlight.col);
|
|
834
|
+
if (href !== null) {
|
|
835
|
+
this.hot.rootWindow.open(href, '_blank', 'noopener,noreferrer');
|
|
836
|
+
}
|
|
837
|
+
},
|
|
838
|
+
stopPropagation: true,
|
|
839
|
+
// The shortcut prevents the default action and stops propagation whenever `runOnlyIf`
|
|
840
|
+
// passes, so it must claim the chord only for a cell that actually resolves to a link.
|
|
841
|
+
// Testing just `isCell()` would swallow `Alt`+`Enter` grid-wide and break a host
|
|
842
|
+
// application's own handler for it.
|
|
843
|
+
runOnlyIf: ()=>{
|
|
844
|
+
const highlight = this.hot.getSelectedRangeActive()?.highlight;
|
|
845
|
+
return _class_private_field_get(this, _hyperlinksEnabled) && !!highlight?.isCell() && highlight.row !== null && highlight.col !== null && _class_private_method_get(this, _getHyperlinkHref, getHyperlinkHref).call(this, highlight.row, highlight.col) !== null;
|
|
846
|
+
},
|
|
847
|
+
group: SHORTCUTS_GROUP
|
|
848
|
+
});
|
|
849
|
+
}
|
|
850
|
+
/**
|
|
851
|
+
* Removes the shortcuts registered by the plugin.
|
|
852
|
+
*
|
|
853
|
+
* @private
|
|
854
|
+
*/ unregisterShortcuts() {
|
|
855
|
+
this.hot.getShortcutManager().getContext('grid')?.removeShortcutsByGroup(SHORTCUTS_GROUP);
|
|
856
|
+
}
|
|
857
|
+
/**
|
|
577
858
|
* Renders dependent sheets (handsontable instances) based on the changes - list of the
|
|
578
859
|
* recalculated dependent cells.
|
|
579
860
|
*
|
|
@@ -651,7 +932,7 @@ var /**
|
|
|
651
932
|
warn(`Not possible to set cell data at ${JSON.stringify(address)}`);
|
|
652
933
|
return;
|
|
653
934
|
}
|
|
654
|
-
const cellMeta = this.hot.
|
|
935
|
+
const cellMeta = this.hot.getCellMetaTransient(row, column);
|
|
655
936
|
if (isDate(newValue, cellMeta.type)) {
|
|
656
937
|
if (isDateValid(newValue)) {
|
|
657
938
|
// Rewriting date in HOT format to HF format.
|
|
@@ -663,13 +944,97 @@ var /**
|
|
|
663
944
|
}
|
|
664
945
|
return this.engine?.setCellContents(address, newValue);
|
|
665
946
|
}
|
|
947
|
+
/**
|
|
948
|
+
* Executes the HyperFormula move or copy operation prepared in `beforeMoveCells`. Called by
|
|
949
|
+
* the MoveCells plugin BEFORE any grid mutation (cell meta, selection, undo history),
|
|
950
|
+
* so a failed engine operation aborts the whole `moveCells` operation atomically instead of
|
|
951
|
+
* leaving the grid state recording a move whose data write never happened.
|
|
952
|
+
*
|
|
953
|
+
* For a MOVE, calls `engine.moveCells`, which physically relocates cell content and adjusts
|
|
954
|
+
* all dependent formula references (Excel-style). For a COPY, calls `engine.copy` followed
|
|
955
|
+
* by `engine.paste`, which duplicates the content with adjusted relative references. Note:
|
|
956
|
+
* `engine.copy` reads cell values and must NOT be wrapped in `engine.batch` because batch
|
|
957
|
+
* suspends evaluation, causing `copy` to throw `EvaluationSuspendedError`.
|
|
958
|
+
*
|
|
959
|
+
* During undo and non-move redo operations, the engine has already been advanced in the
|
|
960
|
+
* `beforeUndo`/`beforeRedo` hook, so this method only enables the HOT-data sync in the
|
|
961
|
+
* `afterMoveCells` listener. A move redo is validated first, then executed here to keep a
|
|
962
|
+
* rejected move from advancing HyperFormula.
|
|
963
|
+
*
|
|
964
|
+
* This is the second half of a two-phase protocol with the MoveCells plugin: `beforeMoveCells`
|
|
965
|
+
* prepares `#pendingMoveCells`, and this method commits it. It is internal despite being reachable
|
|
966
|
+
* through `getPlugin('formulas')` — not part of the public API.
|
|
967
|
+
*
|
|
968
|
+
* @private
|
|
969
|
+
* @returns {boolean} `true` when the engine operation succeeded (or was intentionally
|
|
970
|
+
* skipped); `false` when there is no prepared operation or the engine rejected it.
|
|
971
|
+
*/ commitPendingMoveCells() {
|
|
972
|
+
if (!this.engine || !_class_private_field_get(this, _pendingMoveCells)) {
|
|
973
|
+
return false;
|
|
974
|
+
}
|
|
975
|
+
const { source, dest, isCopy, rect } = _class_private_field_get(this, _pendingMoveCells);
|
|
976
|
+
_class_private_field_set(this, _pendingMoveCells, null);
|
|
977
|
+
_class_private_field_set(this, _moveCellsChanges, null);
|
|
978
|
+
if (this.indexSyncer?.isPerformingUndoRedo() && !_class_private_field_get(this, _isRedoingMoveCells)) {
|
|
979
|
+
_class_private_field_set(this, _committedMoveCells, rect);
|
|
980
|
+
return true;
|
|
981
|
+
}
|
|
982
|
+
// HyperFormula can still throw for cases the isItPossibleTo* pre-checks in
|
|
983
|
+
// `beforeMoveCells` do not cover. Failing here is safe: the core has not mutated
|
|
984
|
+
// anything yet and aborts the whole operation when `false` is returned.
|
|
985
|
+
try {
|
|
986
|
+
if (isCopy) {
|
|
987
|
+
// copy() reads cell values and cannot run inside batch() (evaluation must not be suspended).
|
|
988
|
+
this.engine.copy(source);
|
|
989
|
+
_class_private_field_set(this, _moveCellsChanges, this.engine.paste(dest));
|
|
990
|
+
} else {
|
|
991
|
+
_class_private_field_set(this, _moveCellsChanges, this.engine.batch(()=>{
|
|
992
|
+
this.engine.moveCells(source, dest);
|
|
993
|
+
}));
|
|
994
|
+
}
|
|
995
|
+
} catch (e) {
|
|
996
|
+
const operation = isCopy ? 'copy/paste' : 'moveCells';
|
|
997
|
+
const reason = e instanceof Error ? e.message : String(e);
|
|
998
|
+
warn(`Formulas: HyperFormula operation failed during ${operation}: ${reason}`);
|
|
999
|
+
return false;
|
|
1000
|
+
}
|
|
1001
|
+
_class_private_field_set(this, _committedMoveCells, rect);
|
|
1002
|
+
return true;
|
|
1003
|
+
}
|
|
666
1004
|
constructor(...args){
|
|
667
|
-
super(...args), _class_private_method_init(this, _exportChangeValue), _class_private_method_init(this, _updateSheetNameAndSheetId), _class_private_method_init(this, _getValueGetterValue), _class_private_method_init(this, _getProcessedSourceDataArray), _class_private_field_init(this, _internalOperationPending, {
|
|
1005
|
+
super(...args), _class_private_method_init(this, _exportChangeValue), _class_private_method_init(this, _updateSheetNameAndSheetId), _class_private_method_init(this, _refreshHyperlinksSetting), _class_private_method_init(this, _unwrapRenderedHyperlinks), _class_private_method_init(this, _unwrapLink), _class_private_method_init(this, _unwrapHyperlink), _class_private_method_init(this, _getHyperlinkHref), _class_private_method_init(this, _registerUndoRedoWrite), _class_private_method_init(this, _validateUndoRedoDependentCells), _class_private_method_init(this, _getValueGetterValue), _class_private_method_init(this, _getProcessedSourceDataArray), _class_private_method_init(this, _mapsToContiguousHfBlock), _class_private_method_init(this, _syncHotDataAfterMoveCells), _class_private_method_init(this, _removeSpansFromEngine), _class_private_field_init(this, _internalOperationPending, {
|
|
1006
|
+
writable: true,
|
|
1007
|
+
value: void 0
|
|
1008
|
+
}), _class_private_field_init(this, _hyperlinksEnabled, {
|
|
668
1009
|
writable: true,
|
|
669
1010
|
value: void 0
|
|
670
1011
|
}), _class_private_field_init(this, _hotWasInitializedWithEmptyData, {
|
|
671
1012
|
writable: true,
|
|
672
1013
|
value: void 0
|
|
1014
|
+
}), _class_private_field_init(this, _pendingMoveCells, {
|
|
1015
|
+
writable: true,
|
|
1016
|
+
value: void 0
|
|
1017
|
+
}), _class_private_field_init(this, _committedMoveCells, {
|
|
1018
|
+
writable: true,
|
|
1019
|
+
value: void 0
|
|
1020
|
+
}), _class_private_field_init(this, _isRedoingMoveCells, {
|
|
1021
|
+
writable: true,
|
|
1022
|
+
value: void 0
|
|
1023
|
+
}), _class_private_field_init(this, _moveCellsChanges, {
|
|
1024
|
+
writable: true,
|
|
1025
|
+
value: void 0
|
|
1026
|
+
}), _class_private_field_init(this, _moveCellsSyncPending, {
|
|
1027
|
+
writable: true,
|
|
1028
|
+
value: void 0
|
|
1029
|
+
}), _class_private_field_init(this, _undoRedoDependentCells, {
|
|
1030
|
+
writable: true,
|
|
1031
|
+
value: void 0
|
|
1032
|
+
}), _class_private_field_init(this, _undoRedoChangedCells, {
|
|
1033
|
+
writable: true,
|
|
1034
|
+
value: void 0
|
|
1035
|
+
}), _class_private_field_init(this, _undoRedoWroteData, {
|
|
1036
|
+
writable: true,
|
|
1037
|
+
value: void 0
|
|
673
1038
|
}), _class_private_field_init(this, _onEngineValuesUpdated, {
|
|
674
1039
|
writable: true,
|
|
675
1040
|
value: void 0
|
|
@@ -709,6 +1074,9 @@ var /**
|
|
|
709
1074
|
}), _class_private_field_init(this, _onModifyData, {
|
|
710
1075
|
writable: true,
|
|
711
1076
|
value: void 0
|
|
1077
|
+
}), _class_private_field_init(this, _onAfterRenderer, {
|
|
1078
|
+
writable: true,
|
|
1079
|
+
value: void 0
|
|
712
1080
|
}), _class_private_field_init(this, _onModifySourceData, {
|
|
713
1081
|
writable: true,
|
|
714
1082
|
value: void 0
|
|
@@ -742,10 +1110,16 @@ var /**
|
|
|
742
1110
|
}), _class_private_field_init(this, _onAfterRemoveCol, {
|
|
743
1111
|
writable: true,
|
|
744
1112
|
value: void 0
|
|
1113
|
+
}), _class_private_field_init(this, _onBeforeMoveCells, {
|
|
1114
|
+
writable: true,
|
|
1115
|
+
value: void 0
|
|
1116
|
+
}), _class_private_field_init(this, _onAfterMoveCells, {
|
|
1117
|
+
writable: true,
|
|
1118
|
+
value: void 0
|
|
745
1119
|
}), _class_private_field_init(this, _onAfterDetachChild, {
|
|
746
1120
|
writable: true,
|
|
747
1121
|
value: void 0
|
|
748
|
-
}), _class_private_field_set(this, _internalOperationPending, false), _class_private_field_set(this, _hotWasInitializedWithEmptyData, false), _class_private_field_set(this, _onEngineValuesUpdated, (changes)=>{
|
|
1122
|
+
}), _class_private_field_set(this, _internalOperationPending, false), _class_private_field_set(this, _hyperlinksEnabled, false), _class_private_field_set(this, _hotWasInitializedWithEmptyData, false), _class_private_field_set(this, _pendingMoveCells, null), _class_private_field_set(this, _committedMoveCells, null), _class_private_field_set(this, _isRedoingMoveCells, false), _class_private_field_set(this, _moveCellsChanges, null), _class_private_field_set(this, _moveCellsSyncPending, false), _class_private_field_set(this, _undoRedoDependentCells, []), _class_private_field_set(this, _undoRedoChangedCells, []), _class_private_field_set(this, _undoRedoWroteData, false), _class_private_field_set(this, _onEngineValuesUpdated, (changes)=>{
|
|
749
1123
|
const exportedChanges = changes.map((change)=>_class_private_method_get(this, _exportChangeValue, exportChangeValue).call(this, change));
|
|
750
1124
|
this.hot.runHooks('afterFormulasValuesUpdate', exportedChanges);
|
|
751
1125
|
}), _class_private_field_set(this, _onEngineNamedExpressionsAdded, (namedExpressionName, changes)=>{
|
|
@@ -755,7 +1129,14 @@ var /**
|
|
|
755
1129
|
}), _class_private_field_set(this, _onEngineSheetAdded, (addedSheetDisplayName)=>{
|
|
756
1130
|
this.hot.runHooks('afterSheetAdded', addedSheetDisplayName);
|
|
757
1131
|
}), _class_private_field_set(this, _onEngineSheetRenamed, (oldDisplayName, newDisplayName)=>{
|
|
758
|
-
|
|
1132
|
+
// The event is engine-wide, so it also reaches instances that do not own the renamed sheet.
|
|
1133
|
+
// Repointing those would make them operate on a sheet belonging to another instance.
|
|
1134
|
+
// Sheet ids are compared rather than names: the engine matches names without looking at the
|
|
1135
|
+
// case but keeps the casing it was given, so `sheetName` may differ in case from the event's
|
|
1136
|
+
// display names. The rename is already applied here, so the new name resolves to the same id.
|
|
1137
|
+
if (this.engine?.getSheetId(newDisplayName) === this.sheetId) {
|
|
1138
|
+
_class_private_method_get(this, _updateSheetNameAndSheetId, updateSheetNameAndSheetId).call(this, newDisplayName);
|
|
1139
|
+
}
|
|
759
1140
|
this.hot.runHooks('afterSheetRenamed', oldDisplayName, newDisplayName);
|
|
760
1141
|
}), _class_private_field_set(this, _onEngineSheetRemoved, (removedSheetDisplayName, changes)=>{
|
|
761
1142
|
this.hot.runHooks('afterSheetRemoved', removedSheetDisplayName, changes);
|
|
@@ -822,7 +1203,7 @@ var /**
|
|
|
822
1203
|
col: this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),
|
|
823
1204
|
sheet: this.sheetId
|
|
824
1205
|
};
|
|
825
|
-
const cellMeta = this.hot.
|
|
1206
|
+
const cellMeta = this.hot.getCellMetaTransient(visualRow, visualColumn);
|
|
826
1207
|
let cellValue = this.engine.getCellValue(address); // Date as an integer (Excel-like date).
|
|
827
1208
|
if (cellMeta.type === 'date' && isNumeric(cellValue)) {
|
|
828
1209
|
cellValue = getDateFromExcelDate(cellValue);
|
|
@@ -921,8 +1302,11 @@ var /**
|
|
|
921
1302
|
const sourceDataArray = _class_private_method_get(this, _getProcessedSourceDataArray, getProcessedSourceDataArray).call(this);
|
|
922
1303
|
sourceDataArray.forEach((rowData, rowIndex)=>{
|
|
923
1304
|
rowData.forEach((cellValue, columnIndex)=>{
|
|
924
|
-
|
|
925
|
-
|
|
1305
|
+
// The uncached read keeps this full source-data scan from permanently materializing
|
|
1306
|
+
// one meta object per cell (same no-extension semantics as `skipMetaExtension`).
|
|
1307
|
+
const cellMeta = this.hot._getMetaManager().getCellMetaUncached(this.hot.toPhysicalRow(rowIndex) ?? rowIndex, this.hot.toPhysicalColumn(columnIndex) ?? columnIndex, {
|
|
1308
|
+
visualRow: rowIndex,
|
|
1309
|
+
visualColumn: columnIndex
|
|
926
1310
|
});
|
|
927
1311
|
if (isDate(cellValue, cellMeta.type)) {
|
|
928
1312
|
if (isDateValid(cellValue)) {
|
|
@@ -949,7 +1333,10 @@ var /**
|
|
|
949
1333
|
}
|
|
950
1334
|
const formulasSettings = this.hot.getSettings()[PLUGIN_KEY];
|
|
951
1335
|
const settingsSheetName = isFormulasSettingsObject(formulasSettings) ? formulasSettings.sheetName : undefined;
|
|
952
|
-
|
|
1336
|
+
// Fall back to the sheet this instance already owns. Without it every `loadData`/`updateData`
|
|
1337
|
+
// call adds a sheet and abandons the previous one - with its whole dependency graph - inside
|
|
1338
|
+
// the engine, which the engine then recalculates on every subsequent call.
|
|
1339
|
+
const sheetName = setupSheet(this.engine, settingsSheetName ?? this.sheetName);
|
|
953
1340
|
_class_private_method_get(this, _updateSheetNameAndSheetId, updateSheetNameAndSheetId).call(this, sheetName);
|
|
954
1341
|
if (source === 'updateSettings') {
|
|
955
1342
|
// For performance reasons, the initialization will be done in afterCellMetaReset hook
|
|
@@ -963,6 +1350,17 @@ var /**
|
|
|
963
1350
|
this.indexSyncer.setupSyncEndpoint(this.engine, this.sheetId);
|
|
964
1351
|
this.renderDependentSheets(dependentCells);
|
|
965
1352
|
_class_private_field_set(this, _internalOperationPending, false);
|
|
1353
|
+
} else {
|
|
1354
|
+
// The sheet is reused, so leaving it untouched would keep the previous data in the engine
|
|
1355
|
+
// while the grid already shows the new one. Empty it instead of serving stale values.
|
|
1356
|
+
_class_private_field_set(this, _internalOperationPending, true);
|
|
1357
|
+
const dependentCells = this.engine.setSheetContent(this.sheetId, [
|
|
1358
|
+
[]
|
|
1359
|
+
]);
|
|
1360
|
+
// Emptying the sheet changes what the grids reading it compute, so they need a redraw.
|
|
1361
|
+
this.renderDependentSheets(dependentCells);
|
|
1362
|
+
_class_private_field_set(this, _internalOperationPending, false);
|
|
1363
|
+
warn('The loaded data could not be passed to the formula engine, so the formulas were ' + 'cleared. It most likely exceeds the engine\'s `maxRows` or `maxColumns` limit.');
|
|
966
1364
|
}
|
|
967
1365
|
} else if (this.sheetName !== null) {
|
|
968
1366
|
this.switchSheet(this.sheetName);
|
|
@@ -985,8 +1383,11 @@ var /**
|
|
|
985
1383
|
sheet: this.sheetId
|
|
986
1384
|
};
|
|
987
1385
|
let cellValue = this.engine.getCellValue(address); // Date as an integer (Excel like date).
|
|
988
|
-
|
|
989
|
-
|
|
1386
|
+
// The uncached read matters here: this hook fires inside bulk data reads (for example, the
|
|
1387
|
+
// filters column scan), so an eager read would materialize one meta per scanned cell.
|
|
1388
|
+
const cellMeta = this.hot._getMetaManager().getCellMetaUncached(this.hot.toPhysicalRow(visualRow) ?? visualRow, this.hot.toPhysicalColumn(visualColumn) ?? visualColumn, {
|
|
1389
|
+
visualRow,
|
|
1390
|
+
visualColumn
|
|
990
1391
|
});
|
|
991
1392
|
if (cellMeta.type === 'date' && isNumeric(cellValue)) {
|
|
992
1393
|
cellValue = getDateFromExcelDate(cellValue);
|
|
@@ -995,6 +1396,32 @@ var /**
|
|
|
995
1396
|
}
|
|
996
1397
|
// If `cellValue` is an object it is expected to be an error
|
|
997
1398
|
valueHolder.value = hasValueProperty(cellValue) ? cellValue.value : cellValue;
|
|
1399
|
+
}), _class_private_field_set(this, _onAfterRenderer, (TD, row, column)=>{
|
|
1400
|
+
if (!_class_private_field_get(this, _hyperlinksEnabled) || _class_private_field_get(this, _internalOperationPending)) {
|
|
1401
|
+
return;
|
|
1402
|
+
}
|
|
1403
|
+
// Walkontable recycles TD elements, and a renderer is free to leave its previous DOM in place.
|
|
1404
|
+
// Unwrapping first keeps this idempotent by construction: no anchor nests inside another one
|
|
1405
|
+
// across render passes, and the `href` is always rebuilt from the current formula instead of
|
|
1406
|
+
// inherited from whatever the previous pass resolved. Cleanup for the option being turned off
|
|
1407
|
+
// happens once, in `#refreshHyperlinksSetting`, so this path never runs for a disabled grid.
|
|
1408
|
+
_class_private_method_get(this, _unwrapHyperlink, unwrapHyperlink).call(this, TD);
|
|
1409
|
+
const href = _class_private_method_get(this, _getHyperlinkHref, getHyperlinkHref).call(this, row, column);
|
|
1410
|
+
if (href === null) {
|
|
1411
|
+
return;
|
|
1412
|
+
}
|
|
1413
|
+
const link = this.hot.rootDocument.createElement('a');
|
|
1414
|
+
link.className = HYPERLINK_CLASS_NAME;
|
|
1415
|
+
link.href = href;
|
|
1416
|
+
link.target = '_blank';
|
|
1417
|
+
link.rel = 'noopener noreferrer';
|
|
1418
|
+
// Cell content stays out of the grid's tab order; `Alt`+`Enter` is the keyboard path instead.
|
|
1419
|
+
link.tabIndex = -1;
|
|
1420
|
+
// The nodes are moved, never re-serialized, so a label containing markup stays text.
|
|
1421
|
+
while(TD.firstChild){
|
|
1422
|
+
link.appendChild(TD.firstChild);
|
|
1423
|
+
}
|
|
1424
|
+
TD.appendChild(link);
|
|
998
1425
|
}), _class_private_field_set(this, _onModifySourceData, (row, columnOrProp, valueHolder, ioMode)=>{
|
|
999
1426
|
if (ioMode !== 'get' || _class_private_field_get(this, _internalOperationPending) || this.sheetName === null || !this.engine?.doesSheetExist(this.sheetName)) {
|
|
1000
1427
|
return;
|
|
@@ -1024,6 +1451,11 @@ var /**
|
|
|
1024
1451
|
valueHolder.value = this.engine.getCellSerialized(address);
|
|
1025
1452
|
}), _class_private_field_set(this, _onAfterSetDataAtCell, (changes, source)=>{
|
|
1026
1453
|
if (isBlockedSource(source)) {
|
|
1454
|
+
_class_private_method_get(this, _registerUndoRedoWrite, registerUndoRedoWrite).call(this, changes, source, true);
|
|
1455
|
+
return;
|
|
1456
|
+
}
|
|
1457
|
+
// Skip HF re-sync when we are writing back to HOT after a moveCells HF operation.
|
|
1458
|
+
if (_class_private_field_get(this, _moveCellsSyncPending)) {
|
|
1027
1459
|
return;
|
|
1028
1460
|
}
|
|
1029
1461
|
// Skip engine sync when there are no changes (e.g. populateFromArray on readOnly cells).
|
|
@@ -1077,6 +1509,11 @@ var /**
|
|
|
1077
1509
|
this.validateDependentCells(dependentCells, changedCells);
|
|
1078
1510
|
}), _class_private_field_set(this, _onAfterSetSourceDataAtCell, (changes, source)=>{
|
|
1079
1511
|
if (isBlockedSource(source)) {
|
|
1512
|
+
_class_private_method_get(this, _registerUndoRedoWrite, registerUndoRedoWrite).call(this, changes, source, false);
|
|
1513
|
+
return;
|
|
1514
|
+
}
|
|
1515
|
+
// Skip HF re-sync when we are writing back to HOT after a moveCells HF operation.
|
|
1516
|
+
if (_class_private_field_get(this, _moveCellsSyncPending)) {
|
|
1080
1517
|
return;
|
|
1081
1518
|
}
|
|
1082
1519
|
const dependentCells = [];
|
|
@@ -1168,30 +1605,121 @@ var /**
|
|
|
1168
1605
|
if (isBlockedSource(source)) {
|
|
1169
1606
|
return;
|
|
1170
1607
|
}
|
|
1171
|
-
const
|
|
1608
|
+
const removedSpans = coalesceIndexesToSpans(this.rowAxisSyncer.getRemovedHfIndexes());
|
|
1172
1609
|
const changes = this.engine.batch(()=>{
|
|
1173
|
-
|
|
1174
|
-
this.engine.removeRows(this.sheetId, [
|
|
1175
|
-
hfRow,
|
|
1176
|
-
1
|
|
1177
|
-
]);
|
|
1178
|
-
});
|
|
1610
|
+
_class_private_method_get(this, _removeSpansFromEngine, removeSpansFromEngine).call(this, removedSpans, 'removeRows');
|
|
1179
1611
|
});
|
|
1180
1612
|
this.renderDependentSheets(changes);
|
|
1181
1613
|
}), _class_private_field_set(this, _onAfterRemoveCol, (col, amount, physicalColumns, source)=>{
|
|
1182
1614
|
if (isBlockedSource(source)) {
|
|
1183
1615
|
return;
|
|
1184
1616
|
}
|
|
1185
|
-
const
|
|
1617
|
+
const removedSpans = coalesceIndexesToSpans(this.columnAxisSyncer.getRemovedHfIndexes());
|
|
1186
1618
|
const changes = this.engine.batch(()=>{
|
|
1187
|
-
|
|
1188
|
-
this.engine.removeColumns(this.sheetId, [
|
|
1189
|
-
hfColumn,
|
|
1190
|
-
1
|
|
1191
|
-
]);
|
|
1192
|
-
});
|
|
1619
|
+
_class_private_method_get(this, _removeSpansFromEngine, removeSpansFromEngine).call(this, removedSpans, 'removeColumns');
|
|
1193
1620
|
});
|
|
1194
1621
|
this.renderDependentSheets(changes);
|
|
1622
|
+
}), _class_private_field_set(this, _onBeforeMoveCells, (sourceRange, targetTopLeft, isCopy)=>{
|
|
1623
|
+
if (!isCellRangeLike(sourceRange)) {
|
|
1624
|
+
_class_private_field_set(this, _pendingMoveCells, null);
|
|
1625
|
+
return false;
|
|
1626
|
+
}
|
|
1627
|
+
if (!this.engine || this.sheetId === null) {
|
|
1628
|
+
return;
|
|
1629
|
+
}
|
|
1630
|
+
const topStart = sourceRange.getTopStartCorner();
|
|
1631
|
+
const bottomEnd = sourceRange.getBottomEndCorner();
|
|
1632
|
+
const fromRow = topStart.row;
|
|
1633
|
+
const fromCol = topStart.col;
|
|
1634
|
+
const toRow = bottomEnd.row;
|
|
1635
|
+
const toCol = bottomEnd.col;
|
|
1636
|
+
const targetRow = targetTopLeft.row;
|
|
1637
|
+
const targetCol = targetTopLeft.col;
|
|
1638
|
+
// The engine operates on a single HF rectangle built from the mapped corners below. That is
|
|
1639
|
+
// only equivalent to the visual operation when every visual index in all four spans maps to
|
|
1640
|
+
// consecutive HF indexes. With Filters/TrimRows the HF sheet still contains the trimmed rows,
|
|
1641
|
+
// and sorting or manual move permutes the order — a rectangle would then move cells the grid
|
|
1642
|
+
// never touches, desyncing the engine from the data source. Veto instead.
|
|
1643
|
+
if (!_class_private_method_get(this, _mapsToContiguousHfBlock, mapsToContiguousHfBlock).call(this, this.rowAxisSyncer, fromRow, toRow) || !_class_private_method_get(this, _mapsToContiguousHfBlock, mapsToContiguousHfBlock).call(this, this.columnAxisSyncer, fromCol, toCol) || !_class_private_method_get(this, _mapsToContiguousHfBlock, mapsToContiguousHfBlock).call(this, this.rowAxisSyncer, targetRow, targetRow + (toRow - fromRow)) || !_class_private_method_get(this, _mapsToContiguousHfBlock, mapsToContiguousHfBlock).call(this, this.columnAxisSyncer, targetCol, targetCol + (toCol - fromCol))) {
|
|
1644
|
+
_class_private_field_set(this, _pendingMoveCells, null);
|
|
1645
|
+
return false;
|
|
1646
|
+
}
|
|
1647
|
+
const hfFromRow = this.rowAxisSyncer.getHfIndexFromVisualIndex(fromRow);
|
|
1648
|
+
const hfFromCol = this.columnAxisSyncer.getHfIndexFromVisualIndex(fromCol);
|
|
1649
|
+
const hfToRow = this.rowAxisSyncer.getHfIndexFromVisualIndex(toRow);
|
|
1650
|
+
const hfToCol = this.columnAxisSyncer.getHfIndexFromVisualIndex(toCol);
|
|
1651
|
+
const hfTargetRow = this.rowAxisSyncer.getHfIndexFromVisualIndex(targetRow);
|
|
1652
|
+
const hfTargetCol = this.columnAxisSyncer.getHfIndexFromVisualIndex(targetCol);
|
|
1653
|
+
const source = {
|
|
1654
|
+
start: {
|
|
1655
|
+
sheet: this.sheetId,
|
|
1656
|
+
row: hfFromRow,
|
|
1657
|
+
col: hfFromCol
|
|
1658
|
+
},
|
|
1659
|
+
end: {
|
|
1660
|
+
sheet: this.sheetId,
|
|
1661
|
+
row: hfToRow,
|
|
1662
|
+
col: hfToCol
|
|
1663
|
+
}
|
|
1664
|
+
};
|
|
1665
|
+
const dest = {
|
|
1666
|
+
sheet: this.sheetId,
|
|
1667
|
+
row: hfTargetRow,
|
|
1668
|
+
col: hfTargetCol
|
|
1669
|
+
};
|
|
1670
|
+
if (!isCopy && !this.engine.isItPossibleToMoveCells(source, dest)) {
|
|
1671
|
+
_class_private_field_set(this, _pendingMoveCells, null);
|
|
1672
|
+
return false;
|
|
1673
|
+
}
|
|
1674
|
+
if (isCopy) {
|
|
1675
|
+
// Pre-check the paste target for a COPY the same way isItPossibleToMoveCells guards a
|
|
1676
|
+
// MOVE (e.g. pasting over part of an array formula throws in `engine.paste`), so the
|
|
1677
|
+
// operation vetoes cleanly before the grid mutates instead of failing halfway through.
|
|
1678
|
+
const targetRegion = {
|
|
1679
|
+
start: dest,
|
|
1680
|
+
end: {
|
|
1681
|
+
sheet: this.sheetId,
|
|
1682
|
+
row: hfTargetRow + (hfToRow - hfFromRow),
|
|
1683
|
+
col: hfTargetCol + (hfToCol - hfFromCol)
|
|
1684
|
+
}
|
|
1685
|
+
};
|
|
1686
|
+
if (!this.engine.isItPossibleToSetCellContents(targetRegion)) {
|
|
1687
|
+
_class_private_field_set(this, _pendingMoveCells, null);
|
|
1688
|
+
return false;
|
|
1689
|
+
}
|
|
1690
|
+
}
|
|
1691
|
+
_class_private_field_set(this, _pendingMoveCells, {
|
|
1692
|
+
source,
|
|
1693
|
+
dest,
|
|
1694
|
+
isCopy,
|
|
1695
|
+
rect: {
|
|
1696
|
+
fromRow,
|
|
1697
|
+
fromCol,
|
|
1698
|
+
toRow,
|
|
1699
|
+
toCol,
|
|
1700
|
+
targetRow,
|
|
1701
|
+
targetCol,
|
|
1702
|
+
isCopy
|
|
1703
|
+
}
|
|
1704
|
+
});
|
|
1705
|
+
}), _class_private_field_set(this, _onAfterMoveCells, ()=>{
|
|
1706
|
+
const committed = _class_private_field_get(this, _committedMoveCells);
|
|
1707
|
+
const dependentCells = _class_private_field_get(this, _moveCellsChanges);
|
|
1708
|
+
// Consume the state on every run, including the ones that return early below, so a run without
|
|
1709
|
+
// a committed move behind it cannot pick up the previous operation's leftovers.
|
|
1710
|
+
_class_private_field_set(this, _committedMoveCells, null);
|
|
1711
|
+
_class_private_field_set(this, _moveCellsChanges, null);
|
|
1712
|
+
if (!this.engine || committed === null) {
|
|
1713
|
+
return;
|
|
1714
|
+
}
|
|
1715
|
+
// Sync HOT's source data with HF's updated state so that getDataAtCell returns
|
|
1716
|
+
// correct values for VALUE/EMPTY cells (formula cells are already served via modifyData).
|
|
1717
|
+
_class_private_method_get(this, _syncHotDataAfterMoveCells, syncHotDataAfterMoveCells).call(this, committed);
|
|
1718
|
+
// During undo/redo replay the engine step was skipped (dependentCells is null) and the
|
|
1719
|
+
// HOT re-render after undo/redo refreshes all dependent cells anyway.
|
|
1720
|
+
if (dependentCells !== null) {
|
|
1721
|
+
this.renderDependentSheets(dependentCells, true);
|
|
1722
|
+
}
|
|
1195
1723
|
}), _class_private_field_set(this, _onAfterDetachChild, (parent, element, finalElementRowIndex)=>{
|
|
1196
1724
|
_class_private_field_set(this, _internalOperationPending, true);
|
|
1197
1725
|
const children = element.__children;
|
|
@@ -1223,8 +1751,11 @@ function exportChangeValue(change) {
|
|
|
1223
1751
|
if (visualRow < 0 || visualColumn < 0) {
|
|
1224
1752
|
return change;
|
|
1225
1753
|
}
|
|
1226
|
-
|
|
1227
|
-
|
|
1754
|
+
// The uncached read keeps the same no-extension semantics as the previous
|
|
1755
|
+
// `skipMetaExtension` read, without permanently materializing the cell meta.
|
|
1756
|
+
const cellMeta = this.hot._getMetaManager().getCellMetaUncached(this.hot.toPhysicalRow(visualRow) ?? visualRow, this.hot.toPhysicalColumn(visualColumn) ?? visualColumn, {
|
|
1757
|
+
visualRow,
|
|
1758
|
+
visualColumn
|
|
1228
1759
|
});
|
|
1229
1760
|
let newValue;
|
|
1230
1761
|
if (cellMeta.type === 'date') {
|
|
@@ -1239,16 +1770,116 @@ function exportChangeValue(change) {
|
|
|
1239
1770
|
return clone;
|
|
1240
1771
|
}
|
|
1241
1772
|
function updateSheetNameAndSheetId(sheetName) {
|
|
1242
|
-
this.sheetName
|
|
1243
|
-
|
|
1773
|
+
const sheetId = this.engine?.getSheetId(sheetName) ?? null;
|
|
1774
|
+
// Store the name the engine itself reports. The engine matches names without regard to case
|
|
1775
|
+
// but keeps the casing it was given, so the name passed here may differ from the engine's own.
|
|
1776
|
+
// Keeping them in step makes every exact-string reader of `sheetName` safe by construction.
|
|
1777
|
+
this.sheetName = (sheetId === null ? null : this.engine?.getSheetName(sheetId)) ?? sheetName;
|
|
1778
|
+
this.sheetId = sheetId;
|
|
1779
|
+
}
|
|
1780
|
+
function refreshHyperlinksSetting() {
|
|
1781
|
+
const pluginSettings = this.hot.getSettings()[PLUGIN_KEY];
|
|
1782
|
+
const wasEnabled = _class_private_field_get(this, _hyperlinksEnabled);
|
|
1783
|
+
_class_private_field_set(this, _hyperlinksEnabled, isFormulasSettingsObject(pluginSettings) && pluginSettings.hyperlinks === true);
|
|
1784
|
+
// Turning the option off is the moment to clean up, not every subsequent draw: a renderer that
|
|
1785
|
+
// leaves its previous DOM in place would keep an anchor that no later render pass rewrites.
|
|
1786
|
+
// Doing it here keeps the per-cell path free for the default, disabled case.
|
|
1787
|
+
if (wasEnabled && !_class_private_field_get(this, _hyperlinksEnabled)) {
|
|
1788
|
+
_class_private_method_get(this, _unwrapRenderedHyperlinks, unwrapRenderedHyperlinks).call(this);
|
|
1789
|
+
}
|
|
1790
|
+
}
|
|
1791
|
+
function unwrapRenderedHyperlinks() {
|
|
1792
|
+
this.hot.rootElement?.querySelectorAll(`a.${HYPERLINK_CLASS_NAME}`).forEach((link)=>_class_private_method_get(this, _unwrapLink, unwrapLink).call(this, link));
|
|
1793
|
+
}
|
|
1794
|
+
function unwrapLink(link) {
|
|
1795
|
+
const { parentNode } = link;
|
|
1796
|
+
while(link.firstChild){
|
|
1797
|
+
parentNode?.insertBefore(link.firstChild, link);
|
|
1798
|
+
}
|
|
1799
|
+
link.remove();
|
|
1800
|
+
}
|
|
1801
|
+
function unwrapHyperlink(TD) {
|
|
1802
|
+
// A cell rendered as plain text has no element children at all, which is the overwhelmingly
|
|
1803
|
+
// common case and the one that must not pay for a selector query on every render pass.
|
|
1804
|
+
if (TD.firstElementChild === null) {
|
|
1805
|
+
return;
|
|
1806
|
+
}
|
|
1807
|
+
let link = TD.querySelector(`a.${HYPERLINK_CLASS_NAME}`);
|
|
1808
|
+
while(link !== null){
|
|
1809
|
+
_class_private_method_get(this, _unwrapLink, unwrapLink).call(this, link);
|
|
1810
|
+
link = TD.querySelector(`a.${HYPERLINK_CLASS_NAME}`);
|
|
1811
|
+
}
|
|
1812
|
+
}
|
|
1813
|
+
function getHyperlinkHref(row, column) {
|
|
1814
|
+
if (this.sheetName === null || !this.engine?.doesSheetExist(this.sheetName) || !this.rowAxisSyncer || !this.columnAxisSyncer || !this.isFormulaCellType(row, column)) {
|
|
1815
|
+
return null;
|
|
1816
|
+
}
|
|
1817
|
+
const url = this.engine.getCellHyperlink({
|
|
1818
|
+
sheet: this.sheetId,
|
|
1819
|
+
row: this.rowAxisSyncer.getHfIndexFromVisualIndex(row),
|
|
1820
|
+
col: this.columnAxisSyncer.getHfIndexFromVisualIndex(column)
|
|
1821
|
+
});
|
|
1822
|
+
if (url === undefined) {
|
|
1823
|
+
return null;
|
|
1824
|
+
}
|
|
1825
|
+
const href = resolveHyperlinkUrl(url, this.hot.rootDocument.baseURI);
|
|
1826
|
+
if (href === null) {
|
|
1827
|
+
warnOnce(this, HYPERLINK_WARN_KEY, `A "HYPERLINK" formula points at a URL that Handsontable refuses to link to ("${url}"). ` + 'Only the "http", "https", "mailto" and "tel" schemes can be linked.');
|
|
1828
|
+
}
|
|
1829
|
+
return href;
|
|
1830
|
+
}
|
|
1831
|
+
function registerUndoRedoWrite(changes, source, coreValidatesWrite) {
|
|
1832
|
+
if (source !== 'UndoRedo.undo' && source !== 'UndoRedo.redo') {
|
|
1833
|
+
return;
|
|
1834
|
+
}
|
|
1835
|
+
if (!changes?.length) {
|
|
1836
|
+
return;
|
|
1837
|
+
}
|
|
1838
|
+
_class_private_field_set(this, _undoRedoWroteData, true);
|
|
1839
|
+
if (!coreValidatesWrite) {
|
|
1840
|
+
return;
|
|
1841
|
+
}
|
|
1842
|
+
changes.forEach(([visualRow, prop])=>{
|
|
1843
|
+
if (typeof prop !== 'string' && typeof prop !== 'number') {
|
|
1844
|
+
return;
|
|
1845
|
+
}
|
|
1846
|
+
const visualColumn = this.hot.propToCol(prop);
|
|
1847
|
+
if (!isNumeric(visualRow) || !isNumeric(visualColumn)) {
|
|
1848
|
+
return;
|
|
1849
|
+
}
|
|
1850
|
+
const hfRow = this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow);
|
|
1851
|
+
const hfColumn = this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn);
|
|
1852
|
+
// `-1` marks an index that is out of range or trimmed. Such an address matches no real engine
|
|
1853
|
+
// address, so keeping it would only risk colliding with a genuine dependent cell.
|
|
1854
|
+
if (hfRow === -1 || hfColumn === -1) {
|
|
1855
|
+
return;
|
|
1856
|
+
}
|
|
1857
|
+
_class_private_field_get(this, _undoRedoChangedCells).push({
|
|
1858
|
+
address: {
|
|
1859
|
+
row: hfRow,
|
|
1860
|
+
col: hfColumn,
|
|
1861
|
+
sheet: this.sheetId
|
|
1862
|
+
}
|
|
1863
|
+
});
|
|
1864
|
+
});
|
|
1865
|
+
}
|
|
1866
|
+
function validateUndoRedoDependentCells() {
|
|
1867
|
+
const dependentCells = _class_private_field_get(this, _undoRedoDependentCells);
|
|
1868
|
+
const changedCells = _class_private_field_get(this, _undoRedoChangedCells);
|
|
1869
|
+
const wroteData = _class_private_field_get(this, _undoRedoWroteData);
|
|
1870
|
+
_class_private_field_set(this, _undoRedoDependentCells, []);
|
|
1871
|
+
_class_private_field_set(this, _undoRedoChangedCells, []);
|
|
1872
|
+
_class_private_field_set(this, _undoRedoWroteData, false);
|
|
1873
|
+
if (wroteData && dependentCells.length) {
|
|
1874
|
+
this.validateDependentCells(dependentCells, changedCells);
|
|
1875
|
+
}
|
|
1244
1876
|
}
|
|
1245
1877
|
function getValueGetterValue1(row, column, value) {
|
|
1246
1878
|
if (isObject(value) && value !== null) {
|
|
1247
1879
|
const visualRow = this.hot.toVisualRow(row);
|
|
1248
1880
|
const visualColumn = this.hot.toVisualColumn(column);
|
|
1249
|
-
const cellMeta = this.hot.
|
|
1250
|
-
|
|
1251
|
-
value = getValueGetterValue(value, this.hot.getCellMeta(visualRow, visualColumn));
|
|
1881
|
+
const cellMeta = this.hot.getCellMetaTransient(visualRow, visualColumn);
|
|
1882
|
+
value = getValueGetterValue(value, cellMeta);
|
|
1252
1883
|
if (value !== null && value !== undefined) {
|
|
1253
1884
|
value = Object(value).toString();
|
|
1254
1885
|
}
|
|
@@ -1290,3 +1921,67 @@ function getProcessedSourceDataArray(row, column, row2, column2) {
|
|
|
1290
1921
|
return projected;
|
|
1291
1922
|
});
|
|
1292
1923
|
}
|
|
1924
|
+
function mapsToContiguousHfBlock(syncer, visualFrom, visualTo) {
|
|
1925
|
+
const hfBase = syncer.getHfIndexFromVisualIndex(visualFrom);
|
|
1926
|
+
if (hfBase < 0) {
|
|
1927
|
+
return false;
|
|
1928
|
+
}
|
|
1929
|
+
for(let offset = 1; offset <= visualTo - visualFrom; offset++){
|
|
1930
|
+
if (syncer.getHfIndexFromVisualIndex(visualFrom + offset) !== hfBase + offset) {
|
|
1931
|
+
return false;
|
|
1932
|
+
}
|
|
1933
|
+
}
|
|
1934
|
+
return true;
|
|
1935
|
+
}
|
|
1936
|
+
function syncHotDataAfterMoveCells(rect) {
|
|
1937
|
+
const { fromRow: srcFromRow, fromCol: srcFromCol, toRow: srcToRow, toCol: srcToCol, targetRow: tgtFromRow, targetCol: tgtFromCol, isCopy } = rect;
|
|
1938
|
+
const height = srcToRow - srcFromRow + 1;
|
|
1939
|
+
const width = srcToCol - srcFromCol + 1;
|
|
1940
|
+
// Build target values from HF serialized content (formula strings or raw values).
|
|
1941
|
+
const targetData = [];
|
|
1942
|
+
for(let r = 0; r < height; r++){
|
|
1943
|
+
const row = [];
|
|
1944
|
+
for(let c = 0; c < width; c++){
|
|
1945
|
+
const hfRow = this.rowAxisSyncer.getHfIndexFromVisualIndex(tgtFromRow + r);
|
|
1946
|
+
const hfCol = this.columnAxisSyncer.getHfIndexFromVisualIndex(tgtFromCol + c);
|
|
1947
|
+
const serialized = this.engine.getCellSerialized({
|
|
1948
|
+
sheet: this.sheetId,
|
|
1949
|
+
row: hfRow,
|
|
1950
|
+
col: hfCol
|
|
1951
|
+
});
|
|
1952
|
+
row.push(serialized ?? null);
|
|
1953
|
+
}
|
|
1954
|
+
targetData.push(row);
|
|
1955
|
+
}
|
|
1956
|
+
_class_private_field_set(this, _moveCellsSyncPending, true);
|
|
1957
|
+
try {
|
|
1958
|
+
if (!isCopy) {
|
|
1959
|
+
// Clear source cells in HOT's data first (HF already moved them out), so that an
|
|
1960
|
+
// overlapping source/target range does not null out cells the target write is about
|
|
1961
|
+
// to fill — the target data was already snapshotted from HF above.
|
|
1962
|
+
const nullRow = Array.from({
|
|
1963
|
+
length: width
|
|
1964
|
+
}).fill(null);
|
|
1965
|
+
const nullGrid = Array.from({
|
|
1966
|
+
length: height
|
|
1967
|
+
}, ()=>nullRow.slice());
|
|
1968
|
+
this.hot.populateFromArray(srcFromRow, srcFromCol, nullGrid, srcToRow, srcToCol, 'auto');
|
|
1969
|
+
}
|
|
1970
|
+
// Write target cells with HF-serialised content (formula strings preserved).
|
|
1971
|
+
// Use 'auto' source so UndoRedo does not record these writes as separate DataChangeActions
|
|
1972
|
+
// — they are part of the move and are covered by the MoveCellsAction in the undo stack.
|
|
1973
|
+
this.hot.populateFromArray(tgtFromRow, tgtFromCol, targetData, tgtFromRow + height - 1, tgtFromCol + width - 1, 'auto');
|
|
1974
|
+
} finally{
|
|
1975
|
+
_class_private_field_set(this, _moveCellsSyncPending, false);
|
|
1976
|
+
}
|
|
1977
|
+
}
|
|
1978
|
+
function removeSpansFromEngine(spans, engineMethodName) {
|
|
1979
|
+
for(let end = spans.length; end > 0; end -= REMOVAL_SPANS_CHUNK_SIZE){
|
|
1980
|
+
const chunk = spans.slice(Math.max(0, end - REMOVAL_SPANS_CHUNK_SIZE), end);
|
|
1981
|
+
if (engineMethodName === 'removeRows') {
|
|
1982
|
+
this.engine.removeRows(this.sheetId, ...chunk);
|
|
1983
|
+
} else {
|
|
1984
|
+
this.engine.removeColumns(this.sheetId, ...chunk);
|
|
1985
|
+
}
|
|
1986
|
+
}
|
|
1987
|
+
}
|