handsontable 18.0.0 → 18.1.0-rc7
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 +147 -0
- package/3rdparty/walkontable/src/axisSizing/columnUtils.mjs +142 -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 +129 -0
- package/3rdparty/walkontable/src/axisSizing/defaultSizeSource.mjs +119 -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 +256 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/index.mjs +262 -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 +121 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/prefixSumStrategy.mjs +117 -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 +206 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/sparseStrategy.mjs +203 -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 +121 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/uniformStrategy.mjs +115 -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 +111 -0
- package/3rdparty/walkontable/src/axisSizing/rowUtils.mjs +106 -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/range.d.ts +10 -0
- package/3rdparty/walkontable/src/cell/range.js +14 -3
- package/3rdparty/walkontable/src/cell/range.mjs +11 -0
- package/3rdparty/walkontable/src/core/_base.d.ts +21 -21
- package/3rdparty/walkontable/src/core/_base.js +58 -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 +51 -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 +52 -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 +200 -0
- package/3rdparty/walkontable/src/domMeasure/liveGeometryReader.mjs +198 -0
- package/3rdparty/walkontable/src/event.d.ts +25 -12
- package/3rdparty/walkontable/src/event.js +91 -224
- package/3rdparty/walkontable/src/event.mjs +90 -224
- 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 +2 -2
- 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 +612 -0
- package/3rdparty/walkontable/src/overlay/overlays.mjs +601 -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} +160 -50
- package/3rdparty/walkontable/src/overlay/{_base.mjs → regions/_base.mjs} +163 -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} +113 -66
- package/3rdparty/walkontable/src/overlay/{bottom.mjs → regions/bottomOverlay.mjs} +113 -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} +122 -67
- package/3rdparty/walkontable/src/overlay/{inlineStart.mjs → regions/inlineStartOverlay.mjs} +122 -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} +163 -77
- package/3rdparty/walkontable/src/overlay/{top.mjs → regions/topOverlay.mjs} +163 -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 +154 -0
- package/3rdparty/walkontable/src/overlay/resizeMonitor.mjs +153 -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 +290 -0
- package/3rdparty/walkontable/src/overlay/scroll/nativeScrollInput.mjs +295 -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 +549 -0
- package/3rdparty/walkontable/src/overlay/scroll/scrollSync.mjs +557 -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 +178 -0
- package/3rdparty/walkontable/src/overlay/spreaderSize.mjs +179 -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} +60 -41
- package/3rdparty/walkontable/src/{stickyScrollStrategy.mjs → overlay/strategies/stickyScrollStrategy.mjs} +58 -38
- 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 +43 -1
- package/3rdparty/walkontable/src/{renderer → render}/columnHeaders.mjs +44 -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 +382 -0
- package/3rdparty/walkontable/src/{renderer/table.mjs → render/tableRenderer.mjs} +159 -6
- package/3rdparty/walkontable/src/{scroll.d.ts → scroll/scroll.d.ts} +27 -10
- package/3rdparty/walkontable/src/{scroll.js → scroll/scroll.js} +108 -32
- package/3rdparty/walkontable/src/{scroll.mjs → scroll/scroll.mjs} +106 -29
- 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 +237 -0
- package/3rdparty/walkontable/src/selection/manager.mjs +238 -1
- 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 +295 -0
- package/3rdparty/walkontable/src/table/baseTable.mjs +283 -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} +23 -48
- package/3rdparty/walkontable/src/table/{master.mjs → regions/masterTable.mjs} +22 -47
- 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 +368 -0
- package/3rdparty/walkontable/src/viewport/viewport.mjs +360 -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/CHANGELOG.md +114 -1
- package/LICENSE.txt +1 -1
- package/README.md +2 -2
- package/base.d.ts +13 -4
- 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/hooks/bucket.d.ts +40 -6
- package/core/hooks/bucket.js +108 -72
- package/core/hooks/bucket.mjs +113 -72
- package/core/hooks/constants.js +254 -16
- package/core/hooks/constants.mjs +254 -16
- package/core/hooks/index.js +27 -22
- package/core/hooks/index.mjs +27 -22
- 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 +16 -2
- package/core/layout/domSlot.mjs +16 -2
- 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 +21 -4
- package/core/layout/layoutManager.mjs +22 -2
- package/core/settings.d.ts +102 -6
- package/core/types.d.ts +15 -1
- package/core/types.mjs +9 -0
- package/core.js +534 -88
- package/core.mjs +537 -91
- package/dataMap/dataMap.d.ts +3 -13
- package/dataMap/dataMap.js +100 -41
- package/dataMap/dataMap.mjs +101 -42
- 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 +497 -110
- package/dataMap/metaManager/lazyFactoryMap.mjs +511 -111
- package/dataMap/metaManager/metaLayers/cellMeta.d.ts +55 -8
- package/dataMap/metaManager/metaLayers/cellMeta.js +108 -8
- package/dataMap/metaManager/metaLayers/cellMeta.mjs +108 -8
- 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 +759 -39
- package/dataMap/metaManager/metaSchema.mjs +759 -39
- package/dataMap/metaManager/mods/dynamicCellMeta.d.ts +24 -10
- package/dataMap/metaManager/mods/dynamicCellMeta.js +252 -28
- package/dataMap/metaManager/mods/dynamicCellMeta.mjs +253 -29
- package/dataMap/sourceDataValidator.d.ts +13 -21
- package/dataMap/sourceDataValidator.js +39 -29
- package/dataMap/sourceDataValidator.mjs +50 -33
- package/dist/handsontable.full.js +30027 -11261
- package/dist/handsontable.full.min.js +168 -112
- package/dist/handsontable.js +32468 -13762
- 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 +152 -3
- package/editorManager.mjs +152 -3
- package/editors/autocompleteEditor/autocompleteEditor.js +58 -11
- package/editors/autocompleteEditor/autocompleteEditor.mjs +59 -12
- package/editors/baseEditor/baseEditor.d.ts +15 -3
- package/editors/baseEditor/baseEditor.js +5 -3
- package/editors/baseEditor/baseEditor.mjs +15 -3
- 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/multiSelectEditor.js +11 -9
- package/editors/multiSelectEditor/multiSelectEditor.mjs +12 -10
- package/editors/selectEditor/selectEditor.js +2 -1
- package/editors/selectEditor/selectEditor.mjs +2 -1
- 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 +85 -2
- package/focusManager/grid.mjs +81 -3
- 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/console.d.ts +25 -3
- package/helpers/console.js +40 -7
- package/helpers/console.mjs +52 -7
- 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 +47 -8
- package/helpers/dom/element.js +104 -18
- package/helpers/dom/element.mjs +132 -23
- 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/helpers/string.d.ts +14 -10
- package/helpers/string.js +17 -9
- package/helpers/string.mjs +27 -17
- package/helpers/templateString.d.mts +1 -0
- package/helpers/templateString.d.ts +13 -0
- package/helpers/templateString.js +29 -0
- package/helpers/templateString.mjs +19 -0
- package/helpers/uiButton.d.mts +1 -0
- package/helpers/uiButton.d.ts +21 -0
- package/helpers/uiButton.js +37 -0
- package/helpers/uiButton.mjs +31 -0
- package/i18n/languages/fa-IR.d.ts +1 -0
- package/i18n/languages/fa-IR.js +1 -0
- package/i18n/languages/fa-IR.mjs +1 -0
- package/index.d.ts +3 -3
- 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 +501 -82
- package/plugins/autoColumnSize/autoColumnSize.mjs +508 -83
- package/plugins/autoRowSize/autoRowSize.d.ts +40 -5
- package/plugins/autoRowSize/autoRowSize.js +68 -24
- package/plugins/autoRowSize/autoRowSize.mjs +98 -29
- package/plugins/autofill/autofill.js +30 -12
- package/plugins/autofill/autofill.mjs +30 -12
- package/plugins/base/base.d.ts +10 -0
- package/plugins/collapsibleColumns/collapsibleColumns.d.ts +4 -0
- package/plugins/collapsibleColumns/collapsibleColumns.js +89 -8
- package/plugins/collapsibleColumns/collapsibleColumns.mjs +93 -8
- package/plugins/columnSorting/columnSorting.d.ts +31 -2
- package/plugins/columnSorting/columnSorting.js +151 -24
- package/plugins/columnSorting/columnSorting.mjs +153 -26
- 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 +9 -5
- package/plugins/columnSummary/columnSummary.mjs +9 -5
- package/plugins/columnSummary/endpoints.d.ts +69 -2
- package/plugins/columnSummary/endpoints.js +181 -29
- package/plugins/columnSummary/endpoints.mjs +181 -29
- package/plugins/comments/commentEditor.js +1 -1
- package/plugins/comments/commentEditor.mjs +2 -2
- package/plugins/contextMenu/contextMenu.d.ts +12 -1
- package/plugins/contextMenu/contextMenu.js +30 -6
- package/plugins/contextMenu/contextMenu.mjs +30 -6
- package/plugins/contextMenu/index.d.ts +1 -1
- package/plugins/contextMenu/menu/menu.d.ts +22 -1
- package/plugins/contextMenu/menu/menu.js +211 -3
- package/plugins/contextMenu/menu/menu.mjs +212 -4
- package/plugins/contextMenu/menu/menuItemRenderer.js +2 -2
- package/plugins/contextMenu/menu/menuItemRenderer.mjs +2 -2
- package/plugins/contextMenu/predefinedItems/alignment.js +14 -14
- package/plugins/contextMenu/predefinedItems/alignment.mjs +14 -14
- package/plugins/contextMenu/predefinedItems/clearColumn.js +1 -1
- package/plugins/contextMenu/predefinedItems/clearColumn.mjs +1 -1
- package/plugins/contextMenu/predefinedItems/readOnly.js +3 -3
- package/plugins/contextMenu/predefinedItems/readOnly.mjs +3 -3
- package/plugins/contextMenu/utils.js +1 -1
- package/plugins/contextMenu/utils.mjs +1 -1
- package/plugins/copyPaste/copyPaste.js +70 -16
- package/plugins/copyPaste/copyPaste.mjs +71 -17
- package/plugins/copyPaste/copyableRanges.js +6 -2
- package/plugins/copyPaste/copyableRanges.mjs +6 -2
- package/plugins/copyPaste/pasteEvent.d.ts +1 -1
- package/plugins/customBorders/customBorders.d.ts +21 -40
- package/plugins/customBorders/customBorders.js +1080 -201
- package/plugins/customBorders/customBorders.mjs +1082 -203
- 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.d.ts +2 -1
- package/plugins/dataProvider/dataProvider.js +22 -7
- package/plugins/dataProvider/dataProvider.mjs +22 -7
- package/plugins/dataProvider/query/crud.js +1 -1
- package/plugins/dataProvider/query/crud.mjs +1 -1
- package/plugins/dialog/dialog.js +14 -9
- package/plugins/dialog/dialog.mjs +14 -9
- package/plugins/dialog/templates/confirm.d.ts +1 -1
- package/plugins/dialog/templates/confirm.js +2 -1
- package/plugins/dialog/templates/confirm.mjs +2 -1
- package/plugins/dialog/ui.d.ts +5 -3
- package/plugins/dialog/ui.js +12 -4
- package/plugins/dialog/ui.mjs +12 -4
- package/plugins/dragToScroll/dragToScroll.d.ts +2 -2
- package/plugins/dragToScroll/dragToScroll.js +150 -14
- package/plugins/dragToScroll/dragToScroll.mjs +151 -15
- package/plugins/dropdownMenu/dropdownMenu.d.ts +5 -1
- package/plugins/dropdownMenu/dropdownMenu.js +45 -3
- package/plugins/dropdownMenu/dropdownMenu.mjs +46 -4
- package/plugins/dropdownMenu/index.d.ts +1 -0
- package/plugins/emptyDataState/emptyDataState.js +4 -6
- package/plugins/emptyDataState/emptyDataState.mjs +4 -6
- package/plugins/emptyDataState/ui.js +2 -1
- package/plugins/emptyDataState/ui.mjs +2 -1
- package/plugins/exportFile/dataProvider.js +7 -9
- package/plugins/exportFile/dataProvider.mjs +7 -9
- package/plugins/exportFile/exportFile.d.ts +10 -3
- package/plugins/exportFile/types/_base.js +4 -10
- package/plugins/exportFile/types/_base.mjs +4 -10
- 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 +13 -9
- package/plugins/exportFile/types/xlsx.mjs +14 -10
- package/plugins/exportFile/utils.d.ts +9 -1
- package/plugins/exportFile/utils.js +27 -4
- package/plugins/exportFile/utils.mjs +40 -2
- 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/condition.d.ts +1 -0
- package/plugins/filters/component/condition.js +2 -0
- package/plugins/filters/component/condition.mjs +2 -0
- package/plugins/filters/component/value.d.ts +5 -6
- package/plugins/filters/component/value.js +53 -34
- package/plugins/filters/component/value.mjs +54 -35
- package/plugins/filters/condition/date/after.js +2 -1
- package/plugins/filters/condition/date/after.mjs +2 -1
- package/plugins/filters/condition/date/afterOrEqual.js +2 -1
- package/plugins/filters/condition/date/afterOrEqual.mjs +2 -1
- package/plugins/filters/condition/date/before.js +2 -1
- package/plugins/filters/condition/date/before.mjs +2 -1
- package/plugins/filters/condition/date/beforeOrEqual.js +2 -1
- package/plugins/filters/condition/date/beforeOrEqual.mjs +2 -1
- package/plugins/filters/condition/equal.d.ts +7 -0
- package/plugins/filters/condition/equal.js +4 -0
- package/plugins/filters/condition/equal.mjs +10 -0
- 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 +77 -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 +77 -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 +77 -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 +77 -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 +78 -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 +76 -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 +77 -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 +77 -0
- package/plugins/filters/condition/intlDatetime/yesterday.mjs +21 -0
- 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 +148 -49
- package/plugins/filters/conditionUpdateObserver.mjs +148 -49
- 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 +91 -31
- package/plugins/filters/filters.mjs +92 -32
- 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/input.d.ts +4 -0
- package/plugins/filters/ui/input.js +18 -6
- package/plugins/filters/ui/input.mjs +18 -6
- package/plugins/filters/ui/multipleSelect.js +27 -4
- package/plugins/filters/ui/multipleSelect.mjs +27 -4
- package/plugins/filters/ui/select.js +1 -1
- package/plugins/filters/ui/select.mjs +1 -1
- 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 +789 -47
- package/plugins/formulas/formulas.mjs +793 -49
- 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 +72 -15
- package/plugins/formulas/indexSyncer/axisSyncer.mjs +72 -15
- 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/showColumn.js +6 -1
- package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +6 -1
- package/plugins/hiddenColumns/hiddenColumns.js +6 -3
- package/plugins/hiddenColumns/hiddenColumns.mjs +6 -3
- package/plugins/hiddenRows/contextMenuItem/showRow.js +6 -1
- package/plugins/hiddenRows/contextMenuItem/showRow.mjs +6 -1
- package/plugins/hiddenRows/hiddenRows.js +6 -3
- package/plugins/hiddenRows/hiddenRows.mjs +6 -3
- package/plugins/index.d.ts +5 -1
- package/plugins/index.js +10 -0
- package/plugins/index.mjs +5 -1
- package/plugins/loading/content.d.ts +5 -3
- package/plugins/loading/content.js +3 -2
- package/plugins/loading/content.mjs +8 -5
- package/plugins/loading/loading.d.ts +5 -2
- package/plugins/loading/loading.mjs +5 -2
- package/plugins/manualColumnMove/manualColumnMove.d.ts +10 -0
- package/plugins/manualColumnMove/manualColumnMove.js +122 -20
- package/plugins/manualColumnMove/manualColumnMove.mjs +123 -21
- package/plugins/manualColumnResize/manualColumnResize.d.ts +20 -7
- package/plugins/manualColumnResize/manualColumnResize.js +33 -13
- package/plugins/manualColumnResize/manualColumnResize.mjs +34 -14
- package/plugins/manualRowResize/manualRowResize.d.ts +21 -8
- package/plugins/manualRowResize/manualRowResize.js +34 -14
- package/plugins/manualRowResize/manualRowResize.mjs +35 -15
- package/plugins/mergeCells/cellCoords.d.ts +8 -0
- package/plugins/mergeCells/cellCoords.js +11 -0
- package/plugins/mergeCells/cellCoords.mjs +11 -0
- package/plugins/mergeCells/cellsCollection.d.ts +46 -2
- package/plugins/mergeCells/cellsCollection.js +189 -68
- package/plugins/mergeCells/cellsCollection.mjs +189 -68
- package/plugins/mergeCells/focusOrder.d.ts +26 -20
- package/plugins/mergeCells/focusOrder.js +358 -177
- package/plugins/mergeCells/focusOrder.mjs +363 -172
- package/plugins/mergeCells/mergeCells.d.ts +13 -8
- package/plugins/mergeCells/mergeCells.js +322 -64
- package/plugins/mergeCells/mergeCells.mjs +322 -64
- 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 +602 -0
- package/plugins/moveCells/moveCells.mjs +587 -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 +273 -58
- package/plugins/multipleSelectionHandles/multipleSelectionHandles.mjs +273 -58
- package/plugins/nestedHeaders/nestedHeaders.d.ts +10 -1
- package/plugins/nestedHeaders/nestedHeaders.js +222 -23
- package/plugins/nestedHeaders/nestedHeaders.mjs +222 -23
- 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/index.d.ts +76 -13
- package/plugins/nestedHeaders/stateManager/index.js +381 -38
- package/plugins/nestedHeaders/stateManager/index.mjs +382 -39
- 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 +20 -4
- package/plugins/nestedHeaders/stateManager/sourceSettings.mjs +20 -4
- 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 +21 -8
- package/plugins/nestedHeaders/utils/ghostTable.mjs +21 -8
- 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 +330 -8
- package/plugins/nestedRows/nestedRows.mjs +330 -8
- package/plugins/nestedRows/ui/collapsing.d.ts +58 -0
- package/plugins/nestedRows/ui/collapsing.js +236 -40
- package/plugins/nestedRows/ui/collapsing.mjs +236 -40
- package/plugins/notification/notification.d.ts +2 -1
- package/plugins/notification/notification.js +6 -3
- package/plugins/notification/notification.mjs +6 -3
- package/plugins/notification/ui.d.ts +8 -5
- package/plugins/notification/ui.js +18 -6
- package/plugins/notification/ui.mjs +18 -6
- package/plugins/pagination/pagination.js +2 -2
- package/plugins/pagination/pagination.mjs +2 -2
- package/plugins/search/search.js +23 -2
- package/plugins/search/search.mjs +23 -2
- 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 +342 -0
- package/plugins/selectionHandles/selectionHandles.mjs +323 -0
- package/plugins/trimRows/trimRows.d.ts +1 -1
- package/plugins/trimRows/trimRows.js +6 -2
- package/plugins/trimRows/trimRows.mjs +6 -2
- 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 +36 -2
- package/plugins/undoRedo/undoRedo.mjs +36 -2
- 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 +163 -0
- package/renderSizeProbe.mjs +176 -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/passwordRenderer/passwordRenderer.js +6 -1
- package/renderers/passwordRenderer/passwordRenderer.mjs +6 -1
- 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/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 +149 -5
- package/selection/selection.mjs +149 -5
- 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.d.mts +2 -0
- package/styles/handsontableStyles.d.ts +2 -0
- 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 +208 -42
- package/tableView.mjs +209 -43
- 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 +242 -6
- package/themes/engine/manager.mjs +249 -6
- 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/indexMapper.d.ts +14 -9
- package/translations/indexMapper.js +104 -43
- package/translations/indexMapper.mjs +104 -43
- 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 +300 -0
- package/translations/maps/booleanMap.mjs +308 -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 +78 -6
- package/translations/maps/indexMap.mjs +78 -6
- package/translations/maps/indexesSequence.d.ts +53 -2
- package/translations/maps/indexesSequence.js +225 -3
- package/translations/maps/indexesSequence.mjs +233 -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 +60 -11
- package/utils/ghostTable.mjs +60 -11
- 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 +16 -7
- package/utils/parseTable.mjs +16 -7
- package/utils/samplesGenerator.d.ts +41 -14
- package/utils/samplesGenerator.js +114 -42
- package/utils/samplesGenerator.mjs +114 -42
- package/utils/sanitizer.d.mts +1 -0
- package/utils/sanitizer.d.ts +47 -0
- package/utils/sanitizer.js +43 -0
- package/utils/sanitizer.mjs +55 -0
- package/utils/stylesHandler.d.ts +13 -0
- package/utils/stylesHandler.js +55 -2
- package/utils/stylesHandler.mjs +55 -2
- 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
|
@@ -30,12 +30,14 @@ const _object = require("../../helpers/object");
|
|
|
30
30
|
const _mixed = require("../../helpers/mixed");
|
|
31
31
|
const _register = require("./engine/register");
|
|
32
32
|
const _utils = require("./utils");
|
|
33
|
+
const _hyperlinkUrl = require("./hyperlinkUrl");
|
|
33
34
|
const _settings = require("./engine/settings");
|
|
34
35
|
const _data = require("../../helpers/data");
|
|
35
36
|
const _string = require("../../helpers/string");
|
|
36
37
|
const _valueAccessors = require("../../utils/valueAccessors");
|
|
37
38
|
const _hooks = require("../../core/hooks");
|
|
38
39
|
const _indexSyncer = /*#__PURE__*/ _interop_require_default(require("./indexSyncer"));
|
|
40
|
+
const _range = require("../../3rdparty/walkontable/src/cell/range");
|
|
39
41
|
function _check_private_redeclaration(obj, privateCollection) {
|
|
40
42
|
if (privateCollection.has(obj)) {
|
|
41
43
|
throw new TypeError("Cannot initialize the same private elements twice on an object");
|
|
@@ -133,17 +135,97 @@ _hooks.Hooks.getSingleton().register('afterFormulasValuesUpdate');
|
|
|
133
135
|
// HyperFormula's `undo` and `redo` methods will do it instead. Please keep in mind that undo/redo stacks inside
|
|
134
136
|
// instances of Handsontable and HyperFormula should be synced (number of actions should be the same).
|
|
135
137
|
const isBlockedSource = (source)=>source === 'UndoRedo.undo' || source === 'UndoRedo.redo' || source === 'auto';
|
|
138
|
+
// Maximum number of `[startIndex, amount]` spans passed to a single variadic engine
|
|
139
|
+
// `removeRows`/`removeColumns` call. An unbounded argument spread could overflow the call stack.
|
|
140
|
+
const REMOVAL_SPANS_CHUNK_SIZE = 1000;
|
|
141
|
+
// Group under which the plugin's grid shortcuts are registered, so `disablePlugin` can drop them all.
|
|
142
|
+
const SHORTCUTS_GROUP = PLUGIN_KEY;
|
|
143
|
+
// Class name of the anchor that wraps the content of a `HYPERLINK` cell. It is also the marker that
|
|
144
|
+
// keeps the wrapping idempotent when a renderer leaves the previous DOM in place.
|
|
145
|
+
const HYPERLINK_CLASS_NAME = 'ht-hyperlink';
|
|
146
|
+
// `warnOnce` key for a `HYPERLINK` URL refused by the protocol allowlist. Warning per cell would
|
|
147
|
+
// flood the console on every render pass.
|
|
148
|
+
const HYPERLINK_WARN_KEY = 'formulas-hyperlink-refused';
|
|
136
149
|
var /**
|
|
137
150
|
* Flag used to bypass hooks in internal operations.
|
|
138
151
|
*
|
|
139
152
|
* @private
|
|
140
153
|
* @type {boolean}
|
|
141
154
|
*/ _internalOperationPending = /*#__PURE__*/ new WeakMap(), /**
|
|
155
|
+
* Whether `HYPERLINK` cells are rendered as links. Mirrors the `hyperlinks` plugin setting, cached
|
|
156
|
+
* because it is read once per rendered cell.
|
|
157
|
+
*/ _hyperlinksEnabled = /*#__PURE__*/ new WeakMap(), /**
|
|
142
158
|
* Flag needed to mark if Handsontable was initialized with no data.
|
|
143
159
|
* (Required to work around the fact, that Handsontable auto-generates sample data, when no data is provided).
|
|
144
160
|
*
|
|
145
161
|
* @type {boolean}
|
|
146
162
|
*/ _hotWasInitializedWithEmptyData = /*#__PURE__*/ new WeakMap(), /**
|
|
163
|
+
* Stores the HyperFormula source range and destination address prepared in `beforeMoveCells` so that
|
|
164
|
+
* `commitPendingMoveCells` can execute the corresponding HF operation without recomputing
|
|
165
|
+
* visual-to-HF coordinates. `rect` carries the same operation in visual coordinates for the
|
|
166
|
+
* post-commit data sync.
|
|
167
|
+
*
|
|
168
|
+
* Set to `null` when no move is in flight.
|
|
169
|
+
*
|
|
170
|
+
* @private
|
|
171
|
+
* @type {{ source: object, dest: object, isCopy: boolean, rect: object }|null}
|
|
172
|
+
*/ _pendingMoveCells = /*#__PURE__*/ new WeakMap(), /**
|
|
173
|
+
* The visual rectangle of the operation `commitPendingMoveCells` committed to the engine (or
|
|
174
|
+
* intentionally skipped during undo/redo replay). Consumed by the `afterMoveCells` listener,
|
|
175
|
+
* which runs the HOT-data sync only for committed operations and only off this value — never
|
|
176
|
+
* off its own hook arguments, which a preceding listener's return value can replace.
|
|
177
|
+
*
|
|
178
|
+
* Set to `null` when no committed move is awaiting its sync.
|
|
179
|
+
*
|
|
180
|
+
* @private
|
|
181
|
+
* @type {object|null}
|
|
182
|
+
*/ _committedMoveCells = /*#__PURE__*/ new WeakMap(), /**
|
|
183
|
+
* `true` while a move-cells redo is replaying through the MoveCells plugin.
|
|
184
|
+
*
|
|
185
|
+
* Unlike other redo actions, it must validate the Handsontable move before advancing
|
|
186
|
+
* HyperFormula, so `commitPendingMoveCells` performs the engine operation itself.
|
|
187
|
+
*/ _isRedoingMoveCells = /*#__PURE__*/ new WeakMap(), /**
|
|
188
|
+
* The dependent-cell changes returned by the engine operation in `commitPendingMoveCells`,
|
|
189
|
+
* consumed by the `afterMoveCells` listener to re-render dependent sheets. `null` when the
|
|
190
|
+
* engine step was skipped (undo/redo replay re-renders everything anyway).
|
|
191
|
+
*
|
|
192
|
+
* @private
|
|
193
|
+
* @type {unknown[]|null}
|
|
194
|
+
*/ _moveCellsChanges = /*#__PURE__*/ new WeakMap(), /**
|
|
195
|
+
* Guard flag set while writing synced values back to HOT after a `moveCells` operation.
|
|
196
|
+
* Prevents the `afterSetDataAtCell` / `afterSetSourceDataAtCell` hooks from re-writing
|
|
197
|
+
* the same values into HyperFormula a second time.
|
|
198
|
+
*
|
|
199
|
+
* @private
|
|
200
|
+
* @type {boolean}
|
|
201
|
+
*/ _moveCellsSyncPending = /*#__PURE__*/ new WeakMap(), /**
|
|
202
|
+
* Guard flag set while `#getProcessedSourceDataArray` reads the source data on the engine's
|
|
203
|
+
* behalf. Read by `#onModifySourceData` alone, so the read reports what Handsontable stores
|
|
204
|
+
* without also suspending the value projection every other hook depends on.
|
|
205
|
+
*
|
|
206
|
+
* @private
|
|
207
|
+
* @type {boolean}
|
|
208
|
+
*/ _sourceDataProjectionSuspended = /*#__PURE__*/ new WeakMap(), /**
|
|
209
|
+
* The changes that the engine reported while undoing or redoing an action. They are collected in
|
|
210
|
+
* `beforeUndo`/`beforeRedo` and consumed in `afterUndo`/`afterRedo`, where the dependent cells get
|
|
211
|
+
* validated.
|
|
212
|
+
*
|
|
213
|
+
* @type {Array}
|
|
214
|
+
*/ _undoRedoDependentCells = /*#__PURE__*/ new WeakMap(), /**
|
|
215
|
+
* The addresses of the cells that the `UndoRedo` plugin writes through `setDataAtCell`. The Core
|
|
216
|
+
* validates those on its own, so they are excluded from the dependent-cell validation.
|
|
217
|
+
*
|
|
218
|
+
* Cells restored through `setSourceDataAtCell` are deliberately absent: that path runs
|
|
219
|
+
* `sourceDataValidator`, which never touches the `valid` flag, so excluding them would leave them
|
|
220
|
+
* unvalidated by anyone.
|
|
221
|
+
*
|
|
222
|
+
* @type {Array}
|
|
223
|
+
*/ _undoRedoChangedCells = /*#__PURE__*/ new WeakMap(), /**
|
|
224
|
+
* Whether the action being undone or redone wrote any cell data. Only then are the dependent cells
|
|
225
|
+
* worth validating.
|
|
226
|
+
*
|
|
227
|
+
* @type {boolean}
|
|
228
|
+
*/ _undoRedoWroteData = /*#__PURE__*/ new WeakMap(), /**
|
|
147
229
|
* Maps a HyperFormula `ExportedCellChange` to the same change with `newValue` translated to a
|
|
148
230
|
* Handsontable-formatted string when the target cell is of type `date` or `time`. For other cells
|
|
149
231
|
* (or non-numeric values, or named expressions, or trimmed cells, or cells on other sheets), the
|
|
@@ -194,6 +276,64 @@ var /**
|
|
|
194
276
|
*
|
|
195
277
|
* @param {string} [sheetName] The new sheet name.
|
|
196
278
|
*/ _updateSheetNameAndSheetId = /*#__PURE__*/ new WeakSet(), /**
|
|
279
|
+
* Reads the `hyperlinks` plugin setting into the cached flag.
|
|
280
|
+
*/ _refreshHyperlinksSetting = /*#__PURE__*/ new WeakSet(), /**
|
|
281
|
+
* Unwraps every `HYPERLINK` anchor currently in the grid, including the overlay clones.
|
|
282
|
+
*
|
|
283
|
+
* Disabling the plugin removes the `afterRenderer` hook, so a renderer that leaves its previous
|
|
284
|
+
* DOM in place would keep its cells clickable with nothing left to clean them up. The anchors are
|
|
285
|
+
* matched by the plugin's own class, so no knowledge of the rendering internals is needed.
|
|
286
|
+
*/ _unwrapRenderedHyperlinks = /*#__PURE__*/ new WeakSet(), /**
|
|
287
|
+
* Moves an anchor's content up into the anchor's own parent and drops the anchor.
|
|
288
|
+
*
|
|
289
|
+
* The insertion goes through `link.parentNode` rather than the cell: a renderer that leaves the
|
|
290
|
+
* previous DOM in place can wrap an existing anchor, leaving it as `TD > div > a` instead of a
|
|
291
|
+
* direct child. Inserting relative to the cell would then throw `NotFoundError` and, because this
|
|
292
|
+
* runs inside `afterRenderer`, take the whole draw down with it.
|
|
293
|
+
*
|
|
294
|
+
* @param {Element} link The anchor to unwrap.
|
|
295
|
+
*/ _unwrapLink = /*#__PURE__*/ new WeakSet(), /**
|
|
296
|
+
* Moves the content of a cell's `HYPERLINK` anchor back into the cell and drops the anchor. Loops
|
|
297
|
+
* so that anchors nested by an older render pass are unwrapped as well.
|
|
298
|
+
*
|
|
299
|
+
* @param {HTMLTableCellElement} TD The rendered cell element.
|
|
300
|
+
*/ _unwrapHyperlink = /*#__PURE__*/ new WeakSet(), /**
|
|
301
|
+
* Returns the URL that a cell should link to, or `null` when the cell must not become a link.
|
|
302
|
+
*
|
|
303
|
+
* The engine reports a hyperlink only for a cell whose root expression is `HYPERLINK()`, so a
|
|
304
|
+
* nested call such as `=CONCATENATE("see ", HYPERLINK(...))` resolves to `null` here.
|
|
305
|
+
*
|
|
306
|
+
* @param {number} row Visual row index.
|
|
307
|
+
* @param {number} column Visual column index.
|
|
308
|
+
* @returns {string|null} The resolved absolute URL, or `null`.
|
|
309
|
+
*/ _getHyperlinkHref = /*#__PURE__*/ new WeakSet(), /**
|
|
310
|
+
* Records that the action being undone or redone wrote cell data, and - when the Core validates
|
|
311
|
+
* that write itself - which cells it wrote, so that `#validateUndoRedoDependentCells` can skip
|
|
312
|
+
* them.
|
|
313
|
+
*
|
|
314
|
+
* `coreValidatesWrite` separates the two write paths. `setDataAtCell` ends in the Core's own
|
|
315
|
+
* `validateCell`, so those cells must be excluded to avoid validating them twice.
|
|
316
|
+
* `setSourceDataAtCell` does not - it runs `sourceDataValidator`, which never touches the `valid`
|
|
317
|
+
* flag - so its cells must stay in the validation pass. Skipping them is also why their row index
|
|
318
|
+
* is never translated here: that hook reports physical rows, unlike `afterSetDataAtCell`.
|
|
319
|
+
*
|
|
320
|
+
* @param {Array[]} changes An array of changes in format [[row, prop, oldValue, value], ...].
|
|
321
|
+
* @param {string} source String that identifies the source of the hook call.
|
|
322
|
+
* @param {boolean} coreValidatesWrite `true` when the Core validates the written cells itself.
|
|
323
|
+
*/ _registerUndoRedoWrite = /*#__PURE__*/ new WeakSet(), /**
|
|
324
|
+
* Validates the cells that the engine recalculated while an action was undone or redone.
|
|
325
|
+
*
|
|
326
|
+
* The `afterSetDataAtCell` and `afterSetSourceDataAtCell` listeners ignore changes coming from the
|
|
327
|
+
* `UndoRedo` plugin, because the engine reverts them through its own undo stack. Without this step
|
|
328
|
+
* the dependent formula cells would keep the `valid` flag they were given before the action was
|
|
329
|
+
* reverted - a formula cell that turned into an error, and is a correct value again after the undo,
|
|
330
|
+
* would stay marked as invalid.
|
|
331
|
+
*
|
|
332
|
+
* Runs only when the action wrote cell data. That covers undoing an edit (`setDataAtCell`) and
|
|
333
|
+
* undoing a row or column removal, which restores the data with `setSourceDataAtCell`. Actions
|
|
334
|
+
* that only reorder or hide - moving, sorting, filtering, merging - write no data, do not validate
|
|
335
|
+
* dependent cells outside of undo either, and are skipped.
|
|
336
|
+
*/ _validateUndoRedoDependentCells = /*#__PURE__*/ new WeakSet(), /**
|
|
197
337
|
* Get the value to be passed to the formula engine.
|
|
198
338
|
* If the value is an object, utilize the valueGetter for that cell, otherwise return the value as is.
|
|
199
339
|
*
|
|
@@ -249,6 +389,14 @@ var /**
|
|
|
249
389
|
* property.
|
|
250
390
|
* @param {string} ioMode String which indicates for what operation hook is fired (`get` or `set`).
|
|
251
391
|
*/ _onModifyData = /*#__PURE__*/ new WeakMap(), /**
|
|
392
|
+
* `afterRenderer` hook callback. Wraps the already rendered content of a `HYPERLINK` cell in an
|
|
393
|
+
* anchor. The cell keeps its own renderer and its cell meta is left untouched, so disabling the
|
|
394
|
+
* plugin or clearing the formula needs no cleanup.
|
|
395
|
+
*
|
|
396
|
+
* @param {HTMLTableCellElement} TD The rendered cell element.
|
|
397
|
+
* @param {number} row Visual row index.
|
|
398
|
+
* @param {number} column Visual column index.
|
|
399
|
+
*/ _onAfterRenderer = /*#__PURE__*/ new WeakMap(), /**
|
|
252
400
|
* `modifySourceData` hook callback.
|
|
253
401
|
*
|
|
254
402
|
* @param {number} row Physical row index.
|
|
@@ -261,13 +409,13 @@ var /**
|
|
|
261
409
|
*
|
|
262
410
|
* @param {Array[]} changes An array of changes in format [[row, prop, oldValue, value], ...].
|
|
263
411
|
* @param {string} [source] String that identifies source of hook call
|
|
264
|
-
* ([list of all available sources]
|
|
412
|
+
* ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).
|
|
265
413
|
*/ _onAfterSetDataAtCell = /*#__PURE__*/ new WeakMap(), /**
|
|
266
414
|
* `onAfterSetSourceDataAtCell` hook callback.
|
|
267
415
|
*
|
|
268
416
|
* @param {Array[]} changes An array of changes in format [[row, column, oldValue, value], ...].
|
|
269
417
|
* @param {string} [source] String that identifies source of hook call
|
|
270
|
-
* ([list of all available sources]
|
|
418
|
+
* ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).
|
|
271
419
|
*/ _onAfterSetSourceDataAtCell = /*#__PURE__*/ new WeakMap(), /**
|
|
272
420
|
* `beforeCreateRow` hook callback.
|
|
273
421
|
*
|
|
@@ -300,14 +448,14 @@ var /**
|
|
|
300
448
|
* @param {number} visualRow Represents the visual index of first newly created row in the data source array.
|
|
301
449
|
* @param {number} amount Number of newly created rows in the data source array.
|
|
302
450
|
* @param {string} [source] String that identifies source of hook call
|
|
303
|
-
* ([list of all available sources]
|
|
451
|
+
* ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).
|
|
304
452
|
*/ _onAfterCreateRow = /*#__PURE__*/ new WeakMap(), /**
|
|
305
453
|
* `afterCreateCol` hook callback.
|
|
306
454
|
*
|
|
307
455
|
* @param {number} visualColumn Represents the visual index of first newly created column in the data source.
|
|
308
456
|
* @param {number} amount Number of newly created columns in the data source.
|
|
309
457
|
* @param {string} [source] String that identifies source of hook call
|
|
310
|
-
* ([list of all available sources]
|
|
458
|
+
* ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).
|
|
311
459
|
*/ _onAfterCreateCol = /*#__PURE__*/ new WeakMap(), /**
|
|
312
460
|
* `afterRemoveRow` hook callback.
|
|
313
461
|
*
|
|
@@ -315,7 +463,7 @@ var /**
|
|
|
315
463
|
* @param {number} amount An amount of removed rows.
|
|
316
464
|
* @param {number[]} physicalRows An array of physical rows removed from the data source.
|
|
317
465
|
* @param {string} [source] String that identifies source of hook call
|
|
318
|
-
* ([list of all available sources]
|
|
466
|
+
* ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).
|
|
319
467
|
*/ _onAfterRemoveRow = /*#__PURE__*/ new WeakMap(), /**
|
|
320
468
|
* `afterRemoveCol` hook callback.
|
|
321
469
|
*
|
|
@@ -323,8 +471,73 @@ var /**
|
|
|
323
471
|
* @param {number} amount An amount of removed columns.
|
|
324
472
|
* @param {number[]} physicalColumns An array of physical columns removed from the data source.
|
|
325
473
|
* @param {string} [source] String that identifies source of hook call
|
|
326
|
-
* ([list of all available sources]
|
|
474
|
+
* ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).
|
|
327
475
|
*/ _onAfterRemoveCol = /*#__PURE__*/ new WeakMap(), /**
|
|
476
|
+
* Checks whether every visual index in the `[visualFrom, visualTo]` span maps to consecutive
|
|
477
|
+
* HyperFormula indexes on the given axis. Only then is a visual rectangle equivalent to the
|
|
478
|
+
* single HF rectangle the `moveCells` engine operation works on.
|
|
479
|
+
*
|
|
480
|
+
* @param {AxisSyncer} syncer The row or column axis syncer.
|
|
481
|
+
* @param {number} visualFrom The first visual index of the span.
|
|
482
|
+
* @param {number} visualTo The last visual index of the span.
|
|
483
|
+
* @returns {boolean}
|
|
484
|
+
*/ _mapsToContiguousHfBlock = /*#__PURE__*/ new WeakSet(), /**
|
|
485
|
+
* `beforeMoveCells` hook callback.
|
|
486
|
+
*
|
|
487
|
+
* Converts the visual source range and target top-left corner to HyperFormula
|
|
488
|
+
* (physical) coordinates, validates feasibility for a MOVE operation, and stores
|
|
489
|
+
* the converted addresses for use in the `afterMoveCells` handler.
|
|
490
|
+
*
|
|
491
|
+
* Returns `false` to veto the whole operation when the source range is not a valid range
|
|
492
|
+
* (the documented `false` veto value, or garbage folded into the argument by a preceding
|
|
493
|
+
* listener's truthy return value), when HyperFormula reports the move is not possible
|
|
494
|
+
* (e.g. the source or target contains an array formula), or when the visual ranges do not map
|
|
495
|
+
* to contiguous HF blocks (trimmed/filtered/reordered indexes), because the engine rectangle
|
|
496
|
+
* would then cover cells outside the visual operation.
|
|
497
|
+
*
|
|
498
|
+
* @param {CellRange|boolean} sourceRange The visual source range, or `false` after an earlier veto.
|
|
499
|
+
* @param {CellCoords} targetTopLeft The visual top-left of the destination.
|
|
500
|
+
* @param {boolean} isCopy `true` when copying (not moving) cells.
|
|
501
|
+
* @returns {boolean|undefined} `false` to cancel the operation; `undefined` otherwise.
|
|
502
|
+
*/ _onBeforeMoveCells = /*#__PURE__*/ new WeakMap(), /**
|
|
503
|
+
* `afterMoveCells` hook callback.
|
|
504
|
+
*
|
|
505
|
+
* Runs after the engine operation already executed in `commitPendingMoveCells` (the core
|
|
506
|
+
* calls it before mutating the grid, so a failed engine operation never reaches this hook).
|
|
507
|
+
* Synchronises HOT's source data array with HF's state so that `getDataAtCell` returns
|
|
508
|
+
* correct values for plain VALUE / EMPTY cells (formula cells are already served from HF
|
|
509
|
+
* via the `modifyData` hook), then re-renders the dependent sheets. The sync is guarded by
|
|
510
|
+
* `#moveCellsSyncPending` so that `afterSetDataAtCell` does not re-write the same values
|
|
511
|
+
* back into HyperFormula.
|
|
512
|
+
*
|
|
513
|
+
* Takes no arguments on purpose. The engine has already moved the cells by the time this runs, so
|
|
514
|
+
* there is nothing left to veto and bailing out would strand the data source out of sync with the
|
|
515
|
+
* engine — which is what reading the replaceable `sourceRange` argument used to cause. The
|
|
516
|
+
* operation is read from `#committedMoveCells` instead, captured before any listener could run.
|
|
517
|
+
*/ _onAfterMoveCells = /*#__PURE__*/ new WeakMap(), /**
|
|
518
|
+
* Synchronises HOT's raw data source array with HyperFormula's state after a
|
|
519
|
+
* `moveCells` or copy operation.
|
|
520
|
+
*
|
|
521
|
+
* Formula cells are already served correctly through `modifyData` via `getCellValue`.
|
|
522
|
+
* Plain VALUE / EMPTY cells, however, fall back to the raw HOT data, so after HF
|
|
523
|
+
* moves the data the old raw values must be cleared from the source cells and the
|
|
524
|
+
* serialised HF content must be written to the target cells.
|
|
525
|
+
*
|
|
526
|
+
* The write is fenced with `#moveCellsSyncPending` to prevent the `afterSetDataAtCell`
|
|
527
|
+
* hook from re-syncing the same data back into HyperFormula.
|
|
528
|
+
*
|
|
529
|
+
* @private
|
|
530
|
+
* @param {object} rect The committed operation in visual coordinates.
|
|
531
|
+
*/ _syncHotDataAfterMoveCells = /*#__PURE__*/ new WeakSet(), /**
|
|
532
|
+
* Removes the provided `[startIndex, amount]` spans from the engine in as few calls as possible.
|
|
533
|
+
* One call handles many spans, so the engine pays its dependency-graph remap once per call instead
|
|
534
|
+
* of once per removed row or column. The engine methods are variadic, so the spans are chunked to
|
|
535
|
+
* keep the argument spread within call-stack limits; chunks run from the highest spans down, which
|
|
536
|
+
* keeps the original coordinates of the not-yet-removed lower spans valid.
|
|
537
|
+
*
|
|
538
|
+
* @param {Array<Array<number>>} spans Ascending list of `[startIndex, amount]` spans to remove.
|
|
539
|
+
* @param {'removeRows'|'removeColumns'} engineMethodName The engine removal method to call.
|
|
540
|
+
*/ _removeSpansFromEngine = /*#__PURE__*/ new WeakSet(), /**
|
|
328
541
|
* `afterDetachChild` hook callback.
|
|
329
542
|
* Used to sync the data of the rows detached in the Nested Rows plugin with the engine's dataset.
|
|
330
543
|
*
|
|
@@ -444,27 +657,61 @@ class Formulas extends _base.BasePlugin {
|
|
|
444
657
|
// Handling undo actions on data just using HyperFormula's UndoRedo mechanism
|
|
445
658
|
this.addHook('beforeUndo', ()=>{
|
|
446
659
|
this.indexSyncer.setPerformUndo(true);
|
|
447
|
-
this
|
|
660
|
+
_class_private_field_set(this, _undoRedoChangedCells, []);
|
|
661
|
+
_class_private_field_set(this, _undoRedoWroteData, false);
|
|
662
|
+
_class_private_field_set(this, _undoRedoDependentCells, this.engine.undo() ?? []);
|
|
448
663
|
});
|
|
449
|
-
// Handling redo actions on data just using HyperFormula's UndoRedo mechanism
|
|
450
|
-
this.addHook('beforeRedo', ()=>{
|
|
664
|
+
// Handling redo actions on data just using HyperFormula's UndoRedo mechanism.
|
|
665
|
+
this.addHook('beforeRedo', (action)=>{
|
|
666
|
+
// Defensive: `Hooks.run` threads a preceding listener's non-`undefined` return value into
|
|
667
|
+
// this argument, and the global bucket runs before this one. Without a trustworthy
|
|
668
|
+
// `actionType` the engine step cannot be dispatched safely (`engine.redo()` vs the
|
|
669
|
+
// `move_cells` replay path — the wrong branch runs the engine operation twice), so cancel
|
|
670
|
+
// the redo instead of desyncing HyperFormula. The guard runs BEFORE `setPerformRedo(true)`
|
|
671
|
+
// — a cancelled redo never fires `afterRedo`, so a flag set here would leak.
|
|
672
|
+
if (typeof action !== 'object' || action === null || !('actionType' in action)) {
|
|
673
|
+
return false;
|
|
674
|
+
}
|
|
451
675
|
this.indexSyncer.setPerformRedo(true);
|
|
452
|
-
this.
|
|
676
|
+
_class_private_field_set(this, _isRedoingMoveCells, action.actionType === 'move_cells');
|
|
677
|
+
_class_private_field_set(this, _undoRedoChangedCells, []);
|
|
678
|
+
_class_private_field_set(this, _undoRedoWroteData, false);
|
|
679
|
+
// For a `move_cells` redo the engine operation runs in `commitPendingMoveCells` (the
|
|
680
|
+
// Handsontable move must be validated first), so `engine.redo()` is not called here and
|
|
681
|
+
// there are no engine-reported dependent cells to collect.
|
|
682
|
+
_class_private_field_set(this, _undoRedoDependentCells, _class_private_field_get(this, _isRedoingMoveCells) ? [] : this.engine.redo() ?? []);
|
|
453
683
|
});
|
|
454
684
|
this.addHook('afterUndo', ()=>{
|
|
455
685
|
this.indexSyncer.setPerformUndo(false);
|
|
686
|
+
// Also clears the redo flags: a redo cancelled by a `beforeRedo` listener never fires
|
|
687
|
+
// `afterRedo`, so without these resets the flags set in `beforeRedo` would leak until the
|
|
688
|
+
// next successful redo.
|
|
689
|
+
this.indexSyncer.setPerformRedo(false);
|
|
690
|
+
_class_private_field_set(this, _isRedoingMoveCells, false);
|
|
691
|
+
_class_private_method_get(this, _validateUndoRedoDependentCells, validateUndoRedoDependentCells).call(this);
|
|
456
692
|
});
|
|
457
|
-
this.addHook('
|
|
693
|
+
this.addHook('afterRedo', ()=>{
|
|
458
694
|
this.indexSyncer.setPerformRedo(false);
|
|
695
|
+
_class_private_method_get(this, _validateUndoRedoDependentCells, validateUndoRedoDependentCells).call(this);
|
|
696
|
+
});
|
|
697
|
+
this.addHook('afterRedo', ()=>{
|
|
698
|
+
_class_private_field_set(this, _isRedoingMoveCells, false);
|
|
459
699
|
});
|
|
460
700
|
this.addHook('afterDetachChild', _class_private_field_get(this, _onAfterDetachChild));
|
|
461
701
|
this.addHook('beforeAutofill', _class_private_field_get(this, _onBeforeAutofill));
|
|
702
|
+
this.addHook('beforeMoveCells', _class_private_field_get(this, _onBeforeMoveCells));
|
|
703
|
+
this.addHook('afterMoveCells', _class_private_field_get(this, _onAfterMoveCells));
|
|
704
|
+
this.addHook('afterRenderer', _class_private_field_get(this, _onAfterRenderer));
|
|
462
705
|
_class_private_field_get(this, _engineListeners)?.forEach(([eventName, listener])=>this.engine.on(eventName, listener));
|
|
706
|
+
_class_private_method_get(this, _refreshHyperlinksSetting, refreshHyperlinksSetting).call(this);
|
|
707
|
+
this.registerShortcuts();
|
|
463
708
|
super.enablePlugin();
|
|
464
709
|
}
|
|
465
710
|
/**
|
|
466
711
|
* Disables the plugin functionality for this Handsontable instance.
|
|
467
712
|
*/ disablePlugin() {
|
|
713
|
+
_class_private_method_get(this, _unwrapRenderedHyperlinks, unwrapRenderedHyperlinks).call(this);
|
|
714
|
+
this.unregisterShortcuts();
|
|
468
715
|
_class_private_field_get(this, _engineListeners)?.forEach(([eventName, listener])=>this.engine?.off(eventName, listener));
|
|
469
716
|
if (this.engine) {
|
|
470
717
|
(0, _register.unregisterEngine)(this.engine, this.hot);
|
|
@@ -483,7 +730,10 @@ class Formulas extends _base.BasePlugin {
|
|
|
483
730
|
this.engine.updateConfig(newEngineSettings);
|
|
484
731
|
}
|
|
485
732
|
const pluginSettings = this.hot.getSettings()[PLUGIN_KEY];
|
|
486
|
-
if (pluginSettings !== undefined && typeof pluginSettings !== 'boolean' && pluginSettings.sheetName !== undefined &&
|
|
733
|
+
if (pluginSettings !== undefined && typeof pluginSettings !== 'boolean' && pluginSettings.sheetName !== undefined && // Sheet ids are compared rather than names, because `sheetName` holds the engine's casing
|
|
734
|
+
// while the setting keeps the one it was written with. An unknown name has no id, which
|
|
735
|
+
// still differs from the current one and lets `switchSheet` report it.
|
|
736
|
+
this.engine?.getSheetId(pluginSettings.sheetName) !== this.sheetId) {
|
|
487
737
|
this.switchSheet(pluginSettings.sheetName);
|
|
488
738
|
}
|
|
489
739
|
// If no data was passed to the `updateSettings` method and no sheet is connected to the instance -> create a
|
|
@@ -500,6 +750,7 @@ class Formulas extends _base.BasePlugin {
|
|
|
500
750
|
}
|
|
501
751
|
}
|
|
502
752
|
}
|
|
753
|
+
_class_private_method_get(this, _refreshHyperlinksSetting, refreshHyperlinksSetting).call(this);
|
|
503
754
|
super.updatePlugin(newSettings);
|
|
504
755
|
}
|
|
505
756
|
/**
|
|
@@ -594,6 +845,48 @@ class Formulas extends _base.BasePlugin {
|
|
|
594
845
|
});
|
|
595
846
|
}
|
|
596
847
|
/**
|
|
848
|
+
* Registers the shortcut that opens the link of the selected `HYPERLINK` cell. The anchor is kept
|
|
849
|
+
* out of the tab order, so this is the only keyboard path to the link.
|
|
850
|
+
*
|
|
851
|
+
* @private
|
|
852
|
+
*/ registerShortcuts() {
|
|
853
|
+
this.hot.getShortcutManager().getContext('grid')?.addShortcut({
|
|
854
|
+
keys: [
|
|
855
|
+
[
|
|
856
|
+
'Alt',
|
|
857
|
+
'Enter'
|
|
858
|
+
]
|
|
859
|
+
],
|
|
860
|
+
callback: ()=>{
|
|
861
|
+
const highlight = this.hot.getSelectedRangeActive()?.highlight;
|
|
862
|
+
if (!highlight || highlight.row === null || highlight.col === null) {
|
|
863
|
+
return;
|
|
864
|
+
}
|
|
865
|
+
const href = _class_private_method_get(this, _getHyperlinkHref, getHyperlinkHref).call(this, highlight.row, highlight.col);
|
|
866
|
+
if (href !== null) {
|
|
867
|
+
this.hot.rootWindow.open(href, '_blank', 'noopener,noreferrer');
|
|
868
|
+
}
|
|
869
|
+
},
|
|
870
|
+
stopPropagation: true,
|
|
871
|
+
// The shortcut prevents the default action and stops propagation whenever `runOnlyIf`
|
|
872
|
+
// passes, so it must claim the chord only for a cell that actually resolves to a link.
|
|
873
|
+
// Testing just `isCell()` would swallow `Alt`+`Enter` grid-wide and break a host
|
|
874
|
+
// application's own handler for it.
|
|
875
|
+
runOnlyIf: ()=>{
|
|
876
|
+
const highlight = this.hot.getSelectedRangeActive()?.highlight;
|
|
877
|
+
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;
|
|
878
|
+
},
|
|
879
|
+
group: SHORTCUTS_GROUP
|
|
880
|
+
});
|
|
881
|
+
}
|
|
882
|
+
/**
|
|
883
|
+
* Removes the shortcuts registered by the plugin.
|
|
884
|
+
*
|
|
885
|
+
* @private
|
|
886
|
+
*/ unregisterShortcuts() {
|
|
887
|
+
this.hot.getShortcutManager().getContext('grid')?.removeShortcutsByGroup(SHORTCUTS_GROUP);
|
|
888
|
+
}
|
|
889
|
+
/**
|
|
597
890
|
* Renders dependent sheets (handsontable instances) based on the changes - list of the
|
|
598
891
|
* recalculated dependent cells.
|
|
599
892
|
*
|
|
@@ -671,7 +964,7 @@ class Formulas extends _base.BasePlugin {
|
|
|
671
964
|
(0, _console.warn)(`Not possible to set cell data at ${JSON.stringify(address)}`);
|
|
672
965
|
return;
|
|
673
966
|
}
|
|
674
|
-
const cellMeta = this.hot.
|
|
967
|
+
const cellMeta = this.hot.getCellMetaTransient(row, column);
|
|
675
968
|
if ((0, _utils.isDate)(newValue, cellMeta.type)) {
|
|
676
969
|
if ((0, _utils.isDateValid)(newValue)) {
|
|
677
970
|
// Rewriting date in HOT format to HF format.
|
|
@@ -683,13 +976,100 @@ class Formulas extends _base.BasePlugin {
|
|
|
683
976
|
}
|
|
684
977
|
return this.engine?.setCellContents(address, newValue);
|
|
685
978
|
}
|
|
979
|
+
/**
|
|
980
|
+
* Executes the HyperFormula move or copy operation prepared in `beforeMoveCells`. Called by
|
|
981
|
+
* the MoveCells plugin BEFORE any grid mutation (cell meta, selection, undo history),
|
|
982
|
+
* so a failed engine operation aborts the whole `moveCells` operation atomically instead of
|
|
983
|
+
* leaving the grid state recording a move whose data write never happened.
|
|
984
|
+
*
|
|
985
|
+
* For a MOVE, calls `engine.moveCells`, which physically relocates cell content and adjusts
|
|
986
|
+
* all dependent formula references (Excel-style). For a COPY, calls `engine.copy` followed
|
|
987
|
+
* by `engine.paste`, which duplicates the content with adjusted relative references. Note:
|
|
988
|
+
* `engine.copy` reads cell values and must NOT be wrapped in `engine.batch` because batch
|
|
989
|
+
* suspends evaluation, causing `copy` to throw `EvaluationSuspendedError`.
|
|
990
|
+
*
|
|
991
|
+
* During undo and non-move redo operations, the engine has already been advanced in the
|
|
992
|
+
* `beforeUndo`/`beforeRedo` hook, so this method only enables the HOT-data sync in the
|
|
993
|
+
* `afterMoveCells` listener. A move redo is validated first, then executed here to keep a
|
|
994
|
+
* rejected move from advancing HyperFormula.
|
|
995
|
+
*
|
|
996
|
+
* This is the second half of a two-phase protocol with the MoveCells plugin: `beforeMoveCells`
|
|
997
|
+
* prepares `#pendingMoveCells`, and this method commits it. It is internal despite being reachable
|
|
998
|
+
* through `getPlugin('formulas')` — not part of the public API.
|
|
999
|
+
*
|
|
1000
|
+
* @private
|
|
1001
|
+
* @returns {boolean} `true` when the engine operation succeeded (or was intentionally
|
|
1002
|
+
* skipped); `false` when there is no prepared operation or the engine rejected it.
|
|
1003
|
+
*/ commitPendingMoveCells() {
|
|
1004
|
+
if (!this.engine || !_class_private_field_get(this, _pendingMoveCells)) {
|
|
1005
|
+
return false;
|
|
1006
|
+
}
|
|
1007
|
+
const { source, dest, isCopy, rect } = _class_private_field_get(this, _pendingMoveCells);
|
|
1008
|
+
_class_private_field_set(this, _pendingMoveCells, null);
|
|
1009
|
+
_class_private_field_set(this, _moveCellsChanges, null);
|
|
1010
|
+
if (this.indexSyncer?.isPerformingUndoRedo() && !_class_private_field_get(this, _isRedoingMoveCells)) {
|
|
1011
|
+
_class_private_field_set(this, _committedMoveCells, rect);
|
|
1012
|
+
return true;
|
|
1013
|
+
}
|
|
1014
|
+
// HyperFormula can still throw for cases the isItPossibleTo* pre-checks in
|
|
1015
|
+
// `beforeMoveCells` do not cover. Failing here is safe: the core has not mutated
|
|
1016
|
+
// anything yet and aborts the whole operation when `false` is returned.
|
|
1017
|
+
try {
|
|
1018
|
+
if (isCopy) {
|
|
1019
|
+
// copy() reads cell values and cannot run inside batch() (evaluation must not be suspended).
|
|
1020
|
+
this.engine.copy(source);
|
|
1021
|
+
_class_private_field_set(this, _moveCellsChanges, this.engine.paste(dest));
|
|
1022
|
+
} else {
|
|
1023
|
+
_class_private_field_set(this, _moveCellsChanges, this.engine.batch(()=>{
|
|
1024
|
+
this.engine.moveCells(source, dest);
|
|
1025
|
+
}));
|
|
1026
|
+
}
|
|
1027
|
+
} catch (e) {
|
|
1028
|
+
const operation = isCopy ? 'copy/paste' : 'moveCells';
|
|
1029
|
+
const reason = e instanceof Error ? e.message : String(e);
|
|
1030
|
+
(0, _console.warn)(`Formulas: HyperFormula operation failed during ${operation}: ${reason}`);
|
|
1031
|
+
return false;
|
|
1032
|
+
}
|
|
1033
|
+
_class_private_field_set(this, _committedMoveCells, rect);
|
|
1034
|
+
return true;
|
|
1035
|
+
}
|
|
686
1036
|
constructor(...args){
|
|
687
|
-
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, {
|
|
1037
|
+
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, {
|
|
1038
|
+
writable: true,
|
|
1039
|
+
value: void 0
|
|
1040
|
+
}), _class_private_field_init(this, _hyperlinksEnabled, {
|
|
688
1041
|
writable: true,
|
|
689
1042
|
value: void 0
|
|
690
1043
|
}), _class_private_field_init(this, _hotWasInitializedWithEmptyData, {
|
|
691
1044
|
writable: true,
|
|
692
1045
|
value: void 0
|
|
1046
|
+
}), _class_private_field_init(this, _pendingMoveCells, {
|
|
1047
|
+
writable: true,
|
|
1048
|
+
value: void 0
|
|
1049
|
+
}), _class_private_field_init(this, _committedMoveCells, {
|
|
1050
|
+
writable: true,
|
|
1051
|
+
value: void 0
|
|
1052
|
+
}), _class_private_field_init(this, _isRedoingMoveCells, {
|
|
1053
|
+
writable: true,
|
|
1054
|
+
value: void 0
|
|
1055
|
+
}), _class_private_field_init(this, _moveCellsChanges, {
|
|
1056
|
+
writable: true,
|
|
1057
|
+
value: void 0
|
|
1058
|
+
}), _class_private_field_init(this, _moveCellsSyncPending, {
|
|
1059
|
+
writable: true,
|
|
1060
|
+
value: void 0
|
|
1061
|
+
}), _class_private_field_init(this, _sourceDataProjectionSuspended, {
|
|
1062
|
+
writable: true,
|
|
1063
|
+
value: void 0
|
|
1064
|
+
}), _class_private_field_init(this, _undoRedoDependentCells, {
|
|
1065
|
+
writable: true,
|
|
1066
|
+
value: void 0
|
|
1067
|
+
}), _class_private_field_init(this, _undoRedoChangedCells, {
|
|
1068
|
+
writable: true,
|
|
1069
|
+
value: void 0
|
|
1070
|
+
}), _class_private_field_init(this, _undoRedoWroteData, {
|
|
1071
|
+
writable: true,
|
|
1072
|
+
value: void 0
|
|
693
1073
|
}), _class_private_field_init(this, _onEngineValuesUpdated, {
|
|
694
1074
|
writable: true,
|
|
695
1075
|
value: void 0
|
|
@@ -729,6 +1109,9 @@ class Formulas extends _base.BasePlugin {
|
|
|
729
1109
|
}), _class_private_field_init(this, _onModifyData, {
|
|
730
1110
|
writable: true,
|
|
731
1111
|
value: void 0
|
|
1112
|
+
}), _class_private_field_init(this, _onAfterRenderer, {
|
|
1113
|
+
writable: true,
|
|
1114
|
+
value: void 0
|
|
732
1115
|
}), _class_private_field_init(this, _onModifySourceData, {
|
|
733
1116
|
writable: true,
|
|
734
1117
|
value: void 0
|
|
@@ -762,10 +1145,16 @@ class Formulas extends _base.BasePlugin {
|
|
|
762
1145
|
}), _class_private_field_init(this, _onAfterRemoveCol, {
|
|
763
1146
|
writable: true,
|
|
764
1147
|
value: void 0
|
|
1148
|
+
}), _class_private_field_init(this, _onBeforeMoveCells, {
|
|
1149
|
+
writable: true,
|
|
1150
|
+
value: void 0
|
|
1151
|
+
}), _class_private_field_init(this, _onAfterMoveCells, {
|
|
1152
|
+
writable: true,
|
|
1153
|
+
value: void 0
|
|
765
1154
|
}), _class_private_field_init(this, _onAfterDetachChild, {
|
|
766
1155
|
writable: true,
|
|
767
1156
|
value: void 0
|
|
768
|
-
}), _class_private_field_set(this, _internalOperationPending, false), _class_private_field_set(this, _hotWasInitializedWithEmptyData, false), _class_private_field_set(this, _onEngineValuesUpdated, (changes)=>{
|
|
1157
|
+
}), _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, _sourceDataProjectionSuspended, 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)=>{
|
|
769
1158
|
const exportedChanges = changes.map((change)=>_class_private_method_get(this, _exportChangeValue, exportChangeValue).call(this, change));
|
|
770
1159
|
this.hot.runHooks('afterFormulasValuesUpdate', exportedChanges);
|
|
771
1160
|
}), _class_private_field_set(this, _onEngineNamedExpressionsAdded, (namedExpressionName, changes)=>{
|
|
@@ -775,7 +1164,14 @@ class Formulas extends _base.BasePlugin {
|
|
|
775
1164
|
}), _class_private_field_set(this, _onEngineSheetAdded, (addedSheetDisplayName)=>{
|
|
776
1165
|
this.hot.runHooks('afterSheetAdded', addedSheetDisplayName);
|
|
777
1166
|
}), _class_private_field_set(this, _onEngineSheetRenamed, (oldDisplayName, newDisplayName)=>{
|
|
778
|
-
|
|
1167
|
+
// The event is engine-wide, so it also reaches instances that do not own the renamed sheet.
|
|
1168
|
+
// Repointing those would make them operate on a sheet belonging to another instance.
|
|
1169
|
+
// Sheet ids are compared rather than names: the engine matches names without looking at the
|
|
1170
|
+
// case but keeps the casing it was given, so `sheetName` may differ in case from the event's
|
|
1171
|
+
// display names. The rename is already applied here, so the new name resolves to the same id.
|
|
1172
|
+
if (this.engine?.getSheetId(newDisplayName) === this.sheetId) {
|
|
1173
|
+
_class_private_method_get(this, _updateSheetNameAndSheetId, updateSheetNameAndSheetId).call(this, newDisplayName);
|
|
1174
|
+
}
|
|
779
1175
|
this.hot.runHooks('afterSheetRenamed', oldDisplayName, newDisplayName);
|
|
780
1176
|
}), _class_private_field_set(this, _onEngineSheetRemoved, (removedSheetDisplayName, changes)=>{
|
|
781
1177
|
this.hot.runHooks('afterSheetRemoved', removedSheetDisplayName, changes);
|
|
@@ -842,7 +1238,7 @@ class Formulas extends _base.BasePlugin {
|
|
|
842
1238
|
col: this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),
|
|
843
1239
|
sheet: this.sheetId
|
|
844
1240
|
};
|
|
845
|
-
const cellMeta = this.hot.
|
|
1241
|
+
const cellMeta = this.hot.getCellMetaTransient(visualRow, visualColumn);
|
|
846
1242
|
let cellValue = this.engine.getCellValue(address); // Date as an integer (Excel-like date).
|
|
847
1243
|
if (cellMeta.type === 'date' && (0, _number.isNumeric)(cellValue)) {
|
|
848
1244
|
cellValue = (0, _utils.getDateFromExcelDate)(cellValue);
|
|
@@ -941,8 +1337,11 @@ class Formulas extends _base.BasePlugin {
|
|
|
941
1337
|
const sourceDataArray = _class_private_method_get(this, _getProcessedSourceDataArray, getProcessedSourceDataArray).call(this);
|
|
942
1338
|
sourceDataArray.forEach((rowData, rowIndex)=>{
|
|
943
1339
|
rowData.forEach((cellValue, columnIndex)=>{
|
|
944
|
-
|
|
945
|
-
|
|
1340
|
+
// The uncached read keeps this full source-data scan from permanently materializing
|
|
1341
|
+
// one meta object per cell (same no-extension semantics as `skipMetaExtension`).
|
|
1342
|
+
const cellMeta = this.hot._getMetaManager().getCellMetaUncached(this.hot.toPhysicalRow(rowIndex) ?? rowIndex, this.hot.toPhysicalColumn(columnIndex) ?? columnIndex, {
|
|
1343
|
+
visualRow: rowIndex,
|
|
1344
|
+
visualColumn: columnIndex
|
|
946
1345
|
});
|
|
947
1346
|
if ((0, _utils.isDate)(cellValue, cellMeta.type)) {
|
|
948
1347
|
if ((0, _utils.isDateValid)(cellValue)) {
|
|
@@ -969,7 +1368,10 @@ class Formulas extends _base.BasePlugin {
|
|
|
969
1368
|
}
|
|
970
1369
|
const formulasSettings = this.hot.getSettings()[PLUGIN_KEY];
|
|
971
1370
|
const settingsSheetName = isFormulasSettingsObject(formulasSettings) ? formulasSettings.sheetName : undefined;
|
|
972
|
-
|
|
1371
|
+
// Fall back to the sheet this instance already owns. Without it every `loadData`/`updateData`
|
|
1372
|
+
// call adds a sheet and abandons the previous one - with its whole dependency graph - inside
|
|
1373
|
+
// the engine, which the engine then recalculates on every subsequent call.
|
|
1374
|
+
const sheetName = (0, _register.setupSheet)(this.engine, settingsSheetName ?? this.sheetName);
|
|
973
1375
|
_class_private_method_get(this, _updateSheetNameAndSheetId, updateSheetNameAndSheetId).call(this, sheetName);
|
|
974
1376
|
if (source === 'updateSettings') {
|
|
975
1377
|
// For performance reasons, the initialization will be done in afterCellMetaReset hook
|
|
@@ -983,6 +1385,17 @@ class Formulas extends _base.BasePlugin {
|
|
|
983
1385
|
this.indexSyncer.setupSyncEndpoint(this.engine, this.sheetId);
|
|
984
1386
|
this.renderDependentSheets(dependentCells);
|
|
985
1387
|
_class_private_field_set(this, _internalOperationPending, false);
|
|
1388
|
+
} else {
|
|
1389
|
+
// The sheet is reused, so leaving it untouched would keep the previous data in the engine
|
|
1390
|
+
// while the grid already shows the new one. Empty it instead of serving stale values.
|
|
1391
|
+
_class_private_field_set(this, _internalOperationPending, true);
|
|
1392
|
+
const dependentCells = this.engine.setSheetContent(this.sheetId, [
|
|
1393
|
+
[]
|
|
1394
|
+
]);
|
|
1395
|
+
// Emptying the sheet changes what the grids reading it compute, so they need a redraw.
|
|
1396
|
+
this.renderDependentSheets(dependentCells);
|
|
1397
|
+
_class_private_field_set(this, _internalOperationPending, false);
|
|
1398
|
+
(0, _console.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.');
|
|
986
1399
|
}
|
|
987
1400
|
} else if (this.sheetName !== null) {
|
|
988
1401
|
this.switchSheet(this.sheetName);
|
|
@@ -1005,8 +1418,11 @@ class Formulas extends _base.BasePlugin {
|
|
|
1005
1418
|
sheet: this.sheetId
|
|
1006
1419
|
};
|
|
1007
1420
|
let cellValue = this.engine.getCellValue(address); // Date as an integer (Excel like date).
|
|
1008
|
-
|
|
1009
|
-
|
|
1421
|
+
// The uncached read matters here: this hook fires inside bulk data reads (for example, the
|
|
1422
|
+
// filters column scan), so an eager read would materialize one meta per scanned cell.
|
|
1423
|
+
const cellMeta = this.hot._getMetaManager().getCellMetaUncached(this.hot.toPhysicalRow(visualRow) ?? visualRow, this.hot.toPhysicalColumn(visualColumn) ?? visualColumn, {
|
|
1424
|
+
visualRow,
|
|
1425
|
+
visualColumn
|
|
1010
1426
|
});
|
|
1011
1427
|
if (cellMeta.type === 'date' && (0, _number.isNumeric)(cellValue)) {
|
|
1012
1428
|
cellValue = (0, _utils.getDateFromExcelDate)(cellValue);
|
|
@@ -1015,8 +1431,36 @@ class Formulas extends _base.BasePlugin {
|
|
|
1015
1431
|
}
|
|
1016
1432
|
// If `cellValue` is an object it is expected to be an error
|
|
1017
1433
|
valueHolder.value = hasValueProperty(cellValue) ? cellValue.value : cellValue;
|
|
1434
|
+
}), _class_private_field_set(this, _onAfterRenderer, (TD, row, column)=>{
|
|
1435
|
+
if (!_class_private_field_get(this, _hyperlinksEnabled) || _class_private_field_get(this, _internalOperationPending)) {
|
|
1436
|
+
return;
|
|
1437
|
+
}
|
|
1438
|
+
// Walkontable recycles TD elements, and a renderer is free to leave its previous DOM in place.
|
|
1439
|
+
// Unwrapping first keeps this idempotent by construction: no anchor nests inside another one
|
|
1440
|
+
// across render passes, and the `href` is always rebuilt from the current formula instead of
|
|
1441
|
+
// inherited from whatever the previous pass resolved. Cleanup for the option being turned off
|
|
1442
|
+
// happens once, in `#refreshHyperlinksSetting`, so this path never runs for a disabled grid.
|
|
1443
|
+
_class_private_method_get(this, _unwrapHyperlink, unwrapHyperlink).call(this, TD);
|
|
1444
|
+
const href = _class_private_method_get(this, _getHyperlinkHref, getHyperlinkHref).call(this, row, column);
|
|
1445
|
+
if (href === null) {
|
|
1446
|
+
return;
|
|
1447
|
+
}
|
|
1448
|
+
const link = this.hot.rootDocument.createElement('a');
|
|
1449
|
+
link.className = HYPERLINK_CLASS_NAME;
|
|
1450
|
+
link.href = href;
|
|
1451
|
+
link.target = '_blank';
|
|
1452
|
+
link.rel = 'noopener noreferrer';
|
|
1453
|
+
// Cell content stays out of the grid's tab order; `Alt`+`Enter` is the keyboard path instead.
|
|
1454
|
+
link.tabIndex = -1;
|
|
1455
|
+
// The nodes are moved, never re-serialized, so a label containing markup stays text.
|
|
1456
|
+
while(TD.firstChild){
|
|
1457
|
+
link.appendChild(TD.firstChild);
|
|
1458
|
+
}
|
|
1459
|
+
TD.appendChild(link);
|
|
1018
1460
|
}), _class_private_field_set(this, _onModifySourceData, (row, columnOrProp, valueHolder, ioMode)=>{
|
|
1019
|
-
if (ioMode !== 'get' || _class_private_field_get(this, _internalOperationPending) ||
|
|
1461
|
+
if (ioMode !== 'get' || _class_private_field_get(this, _internalOperationPending) || _class_private_field_get(// The read that feeds the engine must report what is really stored: see
|
|
1462
|
+
// `#getProcessedSourceDataArray`.
|
|
1463
|
+
this, _sourceDataProjectionSuspended) || this.sheetName === null || !this.engine?.doesSheetExist(this.sheetName)) {
|
|
1020
1464
|
return;
|
|
1021
1465
|
}
|
|
1022
1466
|
const visualRow = this.hot.toVisualRow(row);
|
|
@@ -1044,6 +1488,11 @@ class Formulas extends _base.BasePlugin {
|
|
|
1044
1488
|
valueHolder.value = this.engine.getCellSerialized(address);
|
|
1045
1489
|
}), _class_private_field_set(this, _onAfterSetDataAtCell, (changes, source)=>{
|
|
1046
1490
|
if (isBlockedSource(source)) {
|
|
1491
|
+
_class_private_method_get(this, _registerUndoRedoWrite, registerUndoRedoWrite).call(this, changes, source, true);
|
|
1492
|
+
return;
|
|
1493
|
+
}
|
|
1494
|
+
// Skip HF re-sync when we are writing back to HOT after a moveCells HF operation.
|
|
1495
|
+
if (_class_private_field_get(this, _moveCellsSyncPending)) {
|
|
1047
1496
|
return;
|
|
1048
1497
|
}
|
|
1049
1498
|
// Skip engine sync when there are no changes (e.g. populateFromArray on readOnly cells).
|
|
@@ -1097,6 +1546,11 @@ class Formulas extends _base.BasePlugin {
|
|
|
1097
1546
|
this.validateDependentCells(dependentCells, changedCells);
|
|
1098
1547
|
}), _class_private_field_set(this, _onAfterSetSourceDataAtCell, (changes, source)=>{
|
|
1099
1548
|
if (isBlockedSource(source)) {
|
|
1549
|
+
_class_private_method_get(this, _registerUndoRedoWrite, registerUndoRedoWrite).call(this, changes, source, false);
|
|
1550
|
+
return;
|
|
1551
|
+
}
|
|
1552
|
+
// Skip HF re-sync when we are writing back to HOT after a moveCells HF operation.
|
|
1553
|
+
if (_class_private_field_get(this, _moveCellsSyncPending)) {
|
|
1100
1554
|
return;
|
|
1101
1555
|
}
|
|
1102
1556
|
const dependentCells = [];
|
|
@@ -1188,30 +1642,121 @@ class Formulas extends _base.BasePlugin {
|
|
|
1188
1642
|
if (isBlockedSource(source)) {
|
|
1189
1643
|
return;
|
|
1190
1644
|
}
|
|
1191
|
-
const
|
|
1645
|
+
const removedSpans = (0, _utils.coalesceIndexesToSpans)(this.rowAxisSyncer.getRemovedHfIndexes());
|
|
1192
1646
|
const changes = this.engine.batch(()=>{
|
|
1193
|
-
|
|
1194
|
-
this.engine.removeRows(this.sheetId, [
|
|
1195
|
-
hfRow,
|
|
1196
|
-
1
|
|
1197
|
-
]);
|
|
1198
|
-
});
|
|
1647
|
+
_class_private_method_get(this, _removeSpansFromEngine, removeSpansFromEngine).call(this, removedSpans, 'removeRows');
|
|
1199
1648
|
});
|
|
1200
1649
|
this.renderDependentSheets(changes);
|
|
1201
1650
|
}), _class_private_field_set(this, _onAfterRemoveCol, (col, amount, physicalColumns, source)=>{
|
|
1202
1651
|
if (isBlockedSource(source)) {
|
|
1203
1652
|
return;
|
|
1204
1653
|
}
|
|
1205
|
-
const
|
|
1654
|
+
const removedSpans = (0, _utils.coalesceIndexesToSpans)(this.columnAxisSyncer.getRemovedHfIndexes());
|
|
1206
1655
|
const changes = this.engine.batch(()=>{
|
|
1207
|
-
|
|
1208
|
-
this.engine.removeColumns(this.sheetId, [
|
|
1209
|
-
hfColumn,
|
|
1210
|
-
1
|
|
1211
|
-
]);
|
|
1212
|
-
});
|
|
1656
|
+
_class_private_method_get(this, _removeSpansFromEngine, removeSpansFromEngine).call(this, removedSpans, 'removeColumns');
|
|
1213
1657
|
});
|
|
1214
1658
|
this.renderDependentSheets(changes);
|
|
1659
|
+
}), _class_private_field_set(this, _onBeforeMoveCells, (sourceRange, targetTopLeft, isCopy)=>{
|
|
1660
|
+
if (!(0, _range.isCellRangeLike)(sourceRange)) {
|
|
1661
|
+
_class_private_field_set(this, _pendingMoveCells, null);
|
|
1662
|
+
return false;
|
|
1663
|
+
}
|
|
1664
|
+
if (!this.engine || this.sheetId === null) {
|
|
1665
|
+
return;
|
|
1666
|
+
}
|
|
1667
|
+
const topStart = sourceRange.getTopStartCorner();
|
|
1668
|
+
const bottomEnd = sourceRange.getBottomEndCorner();
|
|
1669
|
+
const fromRow = topStart.row;
|
|
1670
|
+
const fromCol = topStart.col;
|
|
1671
|
+
const toRow = bottomEnd.row;
|
|
1672
|
+
const toCol = bottomEnd.col;
|
|
1673
|
+
const targetRow = targetTopLeft.row;
|
|
1674
|
+
const targetCol = targetTopLeft.col;
|
|
1675
|
+
// The engine operates on a single HF rectangle built from the mapped corners below. That is
|
|
1676
|
+
// only equivalent to the visual operation when every visual index in all four spans maps to
|
|
1677
|
+
// consecutive HF indexes. With Filters/TrimRows the HF sheet still contains the trimmed rows,
|
|
1678
|
+
// and sorting or manual move permutes the order — a rectangle would then move cells the grid
|
|
1679
|
+
// never touches, desyncing the engine from the data source. Veto instead.
|
|
1680
|
+
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))) {
|
|
1681
|
+
_class_private_field_set(this, _pendingMoveCells, null);
|
|
1682
|
+
return false;
|
|
1683
|
+
}
|
|
1684
|
+
const hfFromRow = this.rowAxisSyncer.getHfIndexFromVisualIndex(fromRow);
|
|
1685
|
+
const hfFromCol = this.columnAxisSyncer.getHfIndexFromVisualIndex(fromCol);
|
|
1686
|
+
const hfToRow = this.rowAxisSyncer.getHfIndexFromVisualIndex(toRow);
|
|
1687
|
+
const hfToCol = this.columnAxisSyncer.getHfIndexFromVisualIndex(toCol);
|
|
1688
|
+
const hfTargetRow = this.rowAxisSyncer.getHfIndexFromVisualIndex(targetRow);
|
|
1689
|
+
const hfTargetCol = this.columnAxisSyncer.getHfIndexFromVisualIndex(targetCol);
|
|
1690
|
+
const source = {
|
|
1691
|
+
start: {
|
|
1692
|
+
sheet: this.sheetId,
|
|
1693
|
+
row: hfFromRow,
|
|
1694
|
+
col: hfFromCol
|
|
1695
|
+
},
|
|
1696
|
+
end: {
|
|
1697
|
+
sheet: this.sheetId,
|
|
1698
|
+
row: hfToRow,
|
|
1699
|
+
col: hfToCol
|
|
1700
|
+
}
|
|
1701
|
+
};
|
|
1702
|
+
const dest = {
|
|
1703
|
+
sheet: this.sheetId,
|
|
1704
|
+
row: hfTargetRow,
|
|
1705
|
+
col: hfTargetCol
|
|
1706
|
+
};
|
|
1707
|
+
if (!isCopy && !this.engine.isItPossibleToMoveCells(source, dest)) {
|
|
1708
|
+
_class_private_field_set(this, _pendingMoveCells, null);
|
|
1709
|
+
return false;
|
|
1710
|
+
}
|
|
1711
|
+
if (isCopy) {
|
|
1712
|
+
// Pre-check the paste target for a COPY the same way isItPossibleToMoveCells guards a
|
|
1713
|
+
// MOVE (e.g. pasting over part of an array formula throws in `engine.paste`), so the
|
|
1714
|
+
// operation vetoes cleanly before the grid mutates instead of failing halfway through.
|
|
1715
|
+
const targetRegion = {
|
|
1716
|
+
start: dest,
|
|
1717
|
+
end: {
|
|
1718
|
+
sheet: this.sheetId,
|
|
1719
|
+
row: hfTargetRow + (hfToRow - hfFromRow),
|
|
1720
|
+
col: hfTargetCol + (hfToCol - hfFromCol)
|
|
1721
|
+
}
|
|
1722
|
+
};
|
|
1723
|
+
if (!this.engine.isItPossibleToSetCellContents(targetRegion)) {
|
|
1724
|
+
_class_private_field_set(this, _pendingMoveCells, null);
|
|
1725
|
+
return false;
|
|
1726
|
+
}
|
|
1727
|
+
}
|
|
1728
|
+
_class_private_field_set(this, _pendingMoveCells, {
|
|
1729
|
+
source,
|
|
1730
|
+
dest,
|
|
1731
|
+
isCopy,
|
|
1732
|
+
rect: {
|
|
1733
|
+
fromRow,
|
|
1734
|
+
fromCol,
|
|
1735
|
+
toRow,
|
|
1736
|
+
toCol,
|
|
1737
|
+
targetRow,
|
|
1738
|
+
targetCol,
|
|
1739
|
+
isCopy
|
|
1740
|
+
}
|
|
1741
|
+
});
|
|
1742
|
+
}), _class_private_field_set(this, _onAfterMoveCells, ()=>{
|
|
1743
|
+
const committed = _class_private_field_get(this, _committedMoveCells);
|
|
1744
|
+
const dependentCells = _class_private_field_get(this, _moveCellsChanges);
|
|
1745
|
+
// Consume the state on every run, including the ones that return early below, so a run without
|
|
1746
|
+
// a committed move behind it cannot pick up the previous operation's leftovers.
|
|
1747
|
+
_class_private_field_set(this, _committedMoveCells, null);
|
|
1748
|
+
_class_private_field_set(this, _moveCellsChanges, null);
|
|
1749
|
+
if (!this.engine || committed === null) {
|
|
1750
|
+
return;
|
|
1751
|
+
}
|
|
1752
|
+
// Sync HOT's source data with HF's updated state so that getDataAtCell returns
|
|
1753
|
+
// correct values for VALUE/EMPTY cells (formula cells are already served via modifyData).
|
|
1754
|
+
_class_private_method_get(this, _syncHotDataAfterMoveCells, syncHotDataAfterMoveCells).call(this, committed);
|
|
1755
|
+
// During undo/redo replay the engine step was skipped (dependentCells is null) and the
|
|
1756
|
+
// HOT re-render after undo/redo refreshes all dependent cells anyway.
|
|
1757
|
+
if (dependentCells !== null) {
|
|
1758
|
+
this.renderDependentSheets(dependentCells, true);
|
|
1759
|
+
}
|
|
1215
1760
|
}), _class_private_field_set(this, _onAfterDetachChild, (parent, element, finalElementRowIndex)=>{
|
|
1216
1761
|
_class_private_field_set(this, _internalOperationPending, true);
|
|
1217
1762
|
const children = element.__children;
|
|
@@ -1243,8 +1788,11 @@ function exportChangeValue(change) {
|
|
|
1243
1788
|
if (visualRow < 0 || visualColumn < 0) {
|
|
1244
1789
|
return change;
|
|
1245
1790
|
}
|
|
1246
|
-
|
|
1247
|
-
|
|
1791
|
+
// The uncached read keeps the same no-extension semantics as the previous
|
|
1792
|
+
// `skipMetaExtension` read, without permanently materializing the cell meta.
|
|
1793
|
+
const cellMeta = this.hot._getMetaManager().getCellMetaUncached(this.hot.toPhysicalRow(visualRow) ?? visualRow, this.hot.toPhysicalColumn(visualColumn) ?? visualColumn, {
|
|
1794
|
+
visualRow,
|
|
1795
|
+
visualColumn
|
|
1248
1796
|
});
|
|
1249
1797
|
let newValue;
|
|
1250
1798
|
if (cellMeta.type === 'date') {
|
|
@@ -1259,16 +1807,116 @@ function exportChangeValue(change) {
|
|
|
1259
1807
|
return clone;
|
|
1260
1808
|
}
|
|
1261
1809
|
function updateSheetNameAndSheetId(sheetName) {
|
|
1262
|
-
this.sheetName
|
|
1263
|
-
|
|
1810
|
+
const sheetId = this.engine?.getSheetId(sheetName) ?? null;
|
|
1811
|
+
// Store the name the engine itself reports. The engine matches names without regard to case
|
|
1812
|
+
// but keeps the casing it was given, so the name passed here may differ from the engine's own.
|
|
1813
|
+
// Keeping them in step makes every exact-string reader of `sheetName` safe by construction.
|
|
1814
|
+
this.sheetName = (sheetId === null ? null : this.engine?.getSheetName(sheetId)) ?? sheetName;
|
|
1815
|
+
this.sheetId = sheetId;
|
|
1816
|
+
}
|
|
1817
|
+
function refreshHyperlinksSetting() {
|
|
1818
|
+
const pluginSettings = this.hot.getSettings()[PLUGIN_KEY];
|
|
1819
|
+
const wasEnabled = _class_private_field_get(this, _hyperlinksEnabled);
|
|
1820
|
+
_class_private_field_set(this, _hyperlinksEnabled, isFormulasSettingsObject(pluginSettings) && pluginSettings.hyperlinks === true);
|
|
1821
|
+
// Turning the option off is the moment to clean up, not every subsequent draw: a renderer that
|
|
1822
|
+
// leaves its previous DOM in place would keep an anchor that no later render pass rewrites.
|
|
1823
|
+
// Doing it here keeps the per-cell path free for the default, disabled case.
|
|
1824
|
+
if (wasEnabled && !_class_private_field_get(this, _hyperlinksEnabled)) {
|
|
1825
|
+
_class_private_method_get(this, _unwrapRenderedHyperlinks, unwrapRenderedHyperlinks).call(this);
|
|
1826
|
+
}
|
|
1827
|
+
}
|
|
1828
|
+
function unwrapRenderedHyperlinks() {
|
|
1829
|
+
this.hot.rootElement?.querySelectorAll(`a.${HYPERLINK_CLASS_NAME}`).forEach((link)=>_class_private_method_get(this, _unwrapLink, unwrapLink).call(this, link));
|
|
1830
|
+
}
|
|
1831
|
+
function unwrapLink(link) {
|
|
1832
|
+
const { parentNode } = link;
|
|
1833
|
+
while(link.firstChild){
|
|
1834
|
+
parentNode?.insertBefore(link.firstChild, link);
|
|
1835
|
+
}
|
|
1836
|
+
link.remove();
|
|
1837
|
+
}
|
|
1838
|
+
function unwrapHyperlink(TD) {
|
|
1839
|
+
// A cell rendered as plain text has no element children at all, which is the overwhelmingly
|
|
1840
|
+
// common case and the one that must not pay for a selector query on every render pass.
|
|
1841
|
+
if (TD.firstElementChild === null) {
|
|
1842
|
+
return;
|
|
1843
|
+
}
|
|
1844
|
+
let link = TD.querySelector(`a.${HYPERLINK_CLASS_NAME}`);
|
|
1845
|
+
while(link !== null){
|
|
1846
|
+
_class_private_method_get(this, _unwrapLink, unwrapLink).call(this, link);
|
|
1847
|
+
link = TD.querySelector(`a.${HYPERLINK_CLASS_NAME}`);
|
|
1848
|
+
}
|
|
1849
|
+
}
|
|
1850
|
+
function getHyperlinkHref(row, column) {
|
|
1851
|
+
if (this.sheetName === null || !this.engine?.doesSheetExist(this.sheetName) || !this.rowAxisSyncer || !this.columnAxisSyncer || !this.isFormulaCellType(row, column)) {
|
|
1852
|
+
return null;
|
|
1853
|
+
}
|
|
1854
|
+
const url = this.engine.getCellHyperlink({
|
|
1855
|
+
sheet: this.sheetId,
|
|
1856
|
+
row: this.rowAxisSyncer.getHfIndexFromVisualIndex(row),
|
|
1857
|
+
col: this.columnAxisSyncer.getHfIndexFromVisualIndex(column)
|
|
1858
|
+
});
|
|
1859
|
+
if (url === undefined) {
|
|
1860
|
+
return null;
|
|
1861
|
+
}
|
|
1862
|
+
const href = (0, _hyperlinkUrl.resolveHyperlinkUrl)(url, this.hot.rootDocument.baseURI);
|
|
1863
|
+
if (href === null) {
|
|
1864
|
+
(0, _console.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.');
|
|
1865
|
+
}
|
|
1866
|
+
return href;
|
|
1867
|
+
}
|
|
1868
|
+
function registerUndoRedoWrite(changes, source, coreValidatesWrite) {
|
|
1869
|
+
if (source !== 'UndoRedo.undo' && source !== 'UndoRedo.redo') {
|
|
1870
|
+
return;
|
|
1871
|
+
}
|
|
1872
|
+
if (!changes?.length) {
|
|
1873
|
+
return;
|
|
1874
|
+
}
|
|
1875
|
+
_class_private_field_set(this, _undoRedoWroteData, true);
|
|
1876
|
+
if (!coreValidatesWrite) {
|
|
1877
|
+
return;
|
|
1878
|
+
}
|
|
1879
|
+
changes.forEach(([visualRow, prop])=>{
|
|
1880
|
+
if (typeof prop !== 'string' && typeof prop !== 'number') {
|
|
1881
|
+
return;
|
|
1882
|
+
}
|
|
1883
|
+
const visualColumn = this.hot.propToCol(prop);
|
|
1884
|
+
if (!(0, _number.isNumeric)(visualRow) || !(0, _number.isNumeric)(visualColumn)) {
|
|
1885
|
+
return;
|
|
1886
|
+
}
|
|
1887
|
+
const hfRow = this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow);
|
|
1888
|
+
const hfColumn = this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn);
|
|
1889
|
+
// `-1` marks an index that is out of range or trimmed. Such an address matches no real engine
|
|
1890
|
+
// address, so keeping it would only risk colliding with a genuine dependent cell.
|
|
1891
|
+
if (hfRow === -1 || hfColumn === -1) {
|
|
1892
|
+
return;
|
|
1893
|
+
}
|
|
1894
|
+
_class_private_field_get(this, _undoRedoChangedCells).push({
|
|
1895
|
+
address: {
|
|
1896
|
+
row: hfRow,
|
|
1897
|
+
col: hfColumn,
|
|
1898
|
+
sheet: this.sheetId
|
|
1899
|
+
}
|
|
1900
|
+
});
|
|
1901
|
+
});
|
|
1902
|
+
}
|
|
1903
|
+
function validateUndoRedoDependentCells() {
|
|
1904
|
+
const dependentCells = _class_private_field_get(this, _undoRedoDependentCells);
|
|
1905
|
+
const changedCells = _class_private_field_get(this, _undoRedoChangedCells);
|
|
1906
|
+
const wroteData = _class_private_field_get(this, _undoRedoWroteData);
|
|
1907
|
+
_class_private_field_set(this, _undoRedoDependentCells, []);
|
|
1908
|
+
_class_private_field_set(this, _undoRedoChangedCells, []);
|
|
1909
|
+
_class_private_field_set(this, _undoRedoWroteData, false);
|
|
1910
|
+
if (wroteData && dependentCells.length) {
|
|
1911
|
+
this.validateDependentCells(dependentCells, changedCells);
|
|
1912
|
+
}
|
|
1264
1913
|
}
|
|
1265
1914
|
function getValueGetterValue(row, column, value) {
|
|
1266
1915
|
if ((0, _object.isObject)(value) && value !== null) {
|
|
1267
1916
|
const visualRow = this.hot.toVisualRow(row);
|
|
1268
1917
|
const visualColumn = this.hot.toVisualColumn(column);
|
|
1269
|
-
const cellMeta = this.hot.
|
|
1270
|
-
|
|
1271
|
-
value = (0, _valueAccessors.getValueGetterValue)(value, this.hot.getCellMeta(visualRow, visualColumn));
|
|
1918
|
+
const cellMeta = this.hot.getCellMetaTransient(visualRow, visualColumn);
|
|
1919
|
+
value = (0, _valueAccessors.getValueGetterValue)(value, cellMeta);
|
|
1272
1920
|
if (value !== null && value !== undefined) {
|
|
1273
1921
|
value = Object(value).toString();
|
|
1274
1922
|
}
|
|
@@ -1276,10 +1924,36 @@ function getValueGetterValue(row, column, value) {
|
|
|
1276
1924
|
return (0, _utils.normalizeValueForFormulaEngine)(value);
|
|
1277
1925
|
}
|
|
1278
1926
|
function getProcessedSourceDataArray(row, column, row2, column2) {
|
|
1279
|
-
|
|
1927
|
+
// Every caller feeds the result to the engine, so this read has to report what Handsontable
|
|
1928
|
+
// actually stores – not what it reports. Left unguarded, `#onModifySourceData` answers every
|
|
1929
|
+
// formula cell with the formula the engine already holds, so a `loadData()`/`updateData()` call
|
|
1930
|
+
// that changes a formula's text reads the engine's PREVIOUS formula back and writes it straight
|
|
1931
|
+
// into the engine again, silently discarding the newly loaded one.
|
|
1932
|
+
//
|
|
1933
|
+
// The projection is suspended through a dedicated flag rather than `#internalOperationPending`,
|
|
1934
|
+
// which also gates `#onModifyData` and `#onAfterRenderer`. This read runs the `modifyRowData`
|
|
1935
|
+
// and `modifySourceData` hooks for every row and cell, so third-party handlers execute inside
|
|
1936
|
+
// the guarded window - and one that calls `getDataAtCell()` on a formula cell has to keep
|
|
1937
|
+
// receiving the calculated value, not the raw formula.
|
|
1938
|
+
//
|
|
1939
|
+
// No other site sets the flag, so the previous value is saved and restored rather than cleared
|
|
1940
|
+
// for one reason only: those same third-party handlers run inside the window, and one that
|
|
1941
|
+
// reaches this method again - synchronously, through `updateSettings()` or `loadData()` - would
|
|
1942
|
+
// otherwise leave the rest of the outer read unguarded, which is the very defect above.
|
|
1943
|
+
const wasProjectionSuspended = _class_private_field_get(this, _sourceDataProjectionSuspended);
|
|
1944
|
+
_class_private_field_set(this, _sourceDataProjectionSuspended, true);
|
|
1945
|
+
let dataArray;
|
|
1946
|
+
try {
|
|
1947
|
+
dataArray = this.hot.getSourceDataArray(row, column, row2, column2);
|
|
1948
|
+
} finally{
|
|
1949
|
+
_class_private_field_set(this, _sourceDataProjectionSuspended, wasProjectionSuspended);
|
|
1950
|
+
}
|
|
1280
1951
|
const visibleColumnCount = this.hot.countCols();
|
|
1281
1952
|
const physicalColumnCount = this.hot.countSourceCols();
|
|
1282
|
-
|
|
1953
|
+
// Only the shape of the data matters, and it is the same for every row, so one row answers it.
|
|
1954
|
+
// `getSourceData()` would rebuild the whole dataset - through the per-cell `modifySourceData`
|
|
1955
|
+
// hook, and outside the guard above - just to run `isArrayOfArrays` over it.
|
|
1956
|
+
const isAoAWithSkippedColumns = visibleColumnCount < physicalColumnCount && Array.isArray(this.hot.getSourceDataAtRow(0));
|
|
1283
1957
|
if (!isAoAWithSkippedColumns) {
|
|
1284
1958
|
return dataArray.map((rowObject, rowIndex)=>{
|
|
1285
1959
|
const rowArray = Array.isArray(rowObject) ? rowObject : [];
|
|
@@ -1294,7 +1968,11 @@ function getProcessedSourceDataArray(row, column, row2, column2) {
|
|
|
1294
1968
|
// with the axis-syncer's visual->HF mapping (issue #10021). Build a row
|
|
1295
1969
|
// containing only visible columns so HF cell coordinates stay in sync.
|
|
1296
1970
|
const columnOffset = column ?? 0;
|
|
1297
|
-
return dataArray.map((
|
|
1971
|
+
return dataArray.map((row, rowIndex)=>{
|
|
1972
|
+
// `getSourceDataArray` hands back a falsy row as-is for a hole or a `null` entry, and the
|
|
1973
|
+
// shape check above only reads row 0, so such a row can reach this branch. Treated as empty,
|
|
1974
|
+
// exactly as the pass-through branch above treats it.
|
|
1975
|
+
const rowArray = Array.isArray(row) ? row : [];
|
|
1298
1976
|
const projected = [];
|
|
1299
1977
|
for(let visualCol = 0; visualCol < visibleColumnCount; visualCol++){
|
|
1300
1978
|
const physicalCol = this.hot.colToProp(visualCol);
|
|
@@ -1310,3 +1988,67 @@ function getProcessedSourceDataArray(row, column, row2, column2) {
|
|
|
1310
1988
|
return projected;
|
|
1311
1989
|
});
|
|
1312
1990
|
}
|
|
1991
|
+
function mapsToContiguousHfBlock(syncer, visualFrom, visualTo) {
|
|
1992
|
+
const hfBase = syncer.getHfIndexFromVisualIndex(visualFrom);
|
|
1993
|
+
if (hfBase < 0) {
|
|
1994
|
+
return false;
|
|
1995
|
+
}
|
|
1996
|
+
for(let offset = 1; offset <= visualTo - visualFrom; offset++){
|
|
1997
|
+
if (syncer.getHfIndexFromVisualIndex(visualFrom + offset) !== hfBase + offset) {
|
|
1998
|
+
return false;
|
|
1999
|
+
}
|
|
2000
|
+
}
|
|
2001
|
+
return true;
|
|
2002
|
+
}
|
|
2003
|
+
function syncHotDataAfterMoveCells(rect) {
|
|
2004
|
+
const { fromRow: srcFromRow, fromCol: srcFromCol, toRow: srcToRow, toCol: srcToCol, targetRow: tgtFromRow, targetCol: tgtFromCol, isCopy } = rect;
|
|
2005
|
+
const height = srcToRow - srcFromRow + 1;
|
|
2006
|
+
const width = srcToCol - srcFromCol + 1;
|
|
2007
|
+
// Build target values from HF serialized content (formula strings or raw values).
|
|
2008
|
+
const targetData = [];
|
|
2009
|
+
for(let r = 0; r < height; r++){
|
|
2010
|
+
const row = [];
|
|
2011
|
+
for(let c = 0; c < width; c++){
|
|
2012
|
+
const hfRow = this.rowAxisSyncer.getHfIndexFromVisualIndex(tgtFromRow + r);
|
|
2013
|
+
const hfCol = this.columnAxisSyncer.getHfIndexFromVisualIndex(tgtFromCol + c);
|
|
2014
|
+
const serialized = this.engine.getCellSerialized({
|
|
2015
|
+
sheet: this.sheetId,
|
|
2016
|
+
row: hfRow,
|
|
2017
|
+
col: hfCol
|
|
2018
|
+
});
|
|
2019
|
+
row.push(serialized ?? null);
|
|
2020
|
+
}
|
|
2021
|
+
targetData.push(row);
|
|
2022
|
+
}
|
|
2023
|
+
_class_private_field_set(this, _moveCellsSyncPending, true);
|
|
2024
|
+
try {
|
|
2025
|
+
if (!isCopy) {
|
|
2026
|
+
// Clear source cells in HOT's data first (HF already moved them out), so that an
|
|
2027
|
+
// overlapping source/target range does not null out cells the target write is about
|
|
2028
|
+
// to fill — the target data was already snapshotted from HF above.
|
|
2029
|
+
const nullRow = Array.from({
|
|
2030
|
+
length: width
|
|
2031
|
+
}).fill(null);
|
|
2032
|
+
const nullGrid = Array.from({
|
|
2033
|
+
length: height
|
|
2034
|
+
}, ()=>nullRow.slice());
|
|
2035
|
+
this.hot.populateFromArray(srcFromRow, srcFromCol, nullGrid, srcToRow, srcToCol, 'auto');
|
|
2036
|
+
}
|
|
2037
|
+
// Write target cells with HF-serialised content (formula strings preserved).
|
|
2038
|
+
// Use 'auto' source so UndoRedo does not record these writes as separate DataChangeActions
|
|
2039
|
+
// — they are part of the move and are covered by the MoveCellsAction in the undo stack.
|
|
2040
|
+
this.hot.populateFromArray(tgtFromRow, tgtFromCol, targetData, tgtFromRow + height - 1, tgtFromCol + width - 1, 'auto');
|
|
2041
|
+
} finally{
|
|
2042
|
+
_class_private_field_set(this, _moveCellsSyncPending, false);
|
|
2043
|
+
}
|
|
2044
|
+
}
|
|
2045
|
+
function removeSpansFromEngine(spans, engineMethodName) {
|
|
2046
|
+
for(let end = spans.length; end > 0; end -= REMOVAL_SPANS_CHUNK_SIZE){
|
|
2047
|
+
const chunk = spans.slice(Math.max(0, end - REMOVAL_SPANS_CHUNK_SIZE), end);
|
|
2048
|
+
if (engineMethodName === 'removeRows') {
|
|
2049
|
+
this.engine.removeRows(this.sheetId, ...chunk);
|
|
2050
|
+
} else {
|
|
2051
|
+
this.engine.removeColumns(this.sheetId, ...chunk);
|
|
2052
|
+
}
|
|
2053
|
+
}
|
|
2054
|
+
}
|