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
|
@@ -35,6 +35,41 @@ function _check_private_redeclaration(obj, privateCollection) {
|
|
|
35
35
|
throw new TypeError("Cannot initialize the same private elements twice on an object");
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
+
function _class_apply_descriptor_get(receiver, descriptor) {
|
|
39
|
+
if (descriptor.get) {
|
|
40
|
+
return descriptor.get.call(receiver);
|
|
41
|
+
}
|
|
42
|
+
return descriptor.value;
|
|
43
|
+
}
|
|
44
|
+
function _class_apply_descriptor_set(receiver, descriptor, value) {
|
|
45
|
+
if (descriptor.set) {
|
|
46
|
+
descriptor.set.call(receiver, value);
|
|
47
|
+
} else {
|
|
48
|
+
if (!descriptor.writable) {
|
|
49
|
+
throw new TypeError("attempted to set read only private field");
|
|
50
|
+
}
|
|
51
|
+
descriptor.value = value;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function _class_extract_field_descriptor(receiver, privateMap, action) {
|
|
55
|
+
if (!privateMap.has(receiver)) {
|
|
56
|
+
throw new TypeError("attempted to " + action + " private field on non-instance");
|
|
57
|
+
}
|
|
58
|
+
return privateMap.get(receiver);
|
|
59
|
+
}
|
|
60
|
+
function _class_private_field_get(receiver, privateMap) {
|
|
61
|
+
var descriptor = _class_extract_field_descriptor(receiver, privateMap, "get");
|
|
62
|
+
return _class_apply_descriptor_get(receiver, descriptor);
|
|
63
|
+
}
|
|
64
|
+
function _class_private_field_init(obj, privateMap, value) {
|
|
65
|
+
_check_private_redeclaration(obj, privateMap);
|
|
66
|
+
privateMap.set(obj, value);
|
|
67
|
+
}
|
|
68
|
+
function _class_private_field_set(receiver, privateMap, value) {
|
|
69
|
+
var descriptor = _class_extract_field_descriptor(receiver, privateMap, "set");
|
|
70
|
+
_class_apply_descriptor_set(receiver, descriptor, value);
|
|
71
|
+
return value;
|
|
72
|
+
}
|
|
38
73
|
function _class_private_method_get(receiver, privateSet, fn) {
|
|
39
74
|
if (!privateSet.has(receiver)) {
|
|
40
75
|
throw new TypeError("attempted to get private field on non-instance");
|
|
@@ -112,31 +147,373 @@ const PLUGIN_PRIORITY = 90;
|
|
|
112
147
|
*/ function isCellCoord(value) {
|
|
113
148
|
return isRecord(value) && typeof value.row === 'number' && typeof value.col === 'number';
|
|
114
149
|
}
|
|
115
|
-
/**
|
|
116
|
-
* Type guard returning true when the string is a valid border side name.
|
|
117
|
-
*
|
|
118
|
-
* @param {string} value The string to test.
|
|
119
|
-
* @returns {boolean}
|
|
120
|
-
*/ function isBorderSide(value) {
|
|
121
|
-
return value === 'top' || value === 'bottom' || value === 'start' || value === 'end';
|
|
122
|
-
}
|
|
123
150
|
const SUPPORTED_STYLES = [
|
|
124
151
|
'dashed',
|
|
125
152
|
'dotted',
|
|
126
153
|
'solid'
|
|
127
154
|
];
|
|
155
|
+
/**
|
|
156
|
+
* Default number of border configuration entries applied per background batch when
|
|
157
|
+
* `customBordersProgressive` is enabled. Sized so a batch stays within a frame budget.
|
|
158
|
+
*/ const DEFAULT_PROGRESSIVE_CHUNK_SIZE = 5000;
|
|
128
159
|
var /**
|
|
160
|
+
* Positions of the saved borders in the `savedBorders` array, keyed by the border id.
|
|
161
|
+
* Lets bulk border operations locate an existing border in O(1) instead of scanning the array.
|
|
162
|
+
*/ _savedBordersIndex = /*#__PURE__*/ new WeakMap(), /**
|
|
163
|
+
* Cache of the plugin-created custom selections keyed by the border id. Under viewport
|
|
164
|
+
* virtualization this holds only the selections currently in the rendered range.
|
|
165
|
+
*/ _customSelectionsCache = /*#__PURE__*/ new WeakMap(), /**
|
|
166
|
+
* Visual-row index of the saved borders: maps a visual row to the borders on that row. Lets the
|
|
167
|
+
* viewport sync collect only the borders inside the rendered range in O(viewport) instead of
|
|
168
|
+
* scanning every saved border each render. Rebuilt lazily from `savedBorders` when marked stale.
|
|
169
|
+
*/ _bordersByRow = /*#__PURE__*/ new WeakMap(), /**
|
|
170
|
+
* When `true`, `#bordersByRow` is stale and rebuilt on the next viewport sync. Set whenever the
|
|
171
|
+
* `savedBorders` model changes; keeps the per-frame sync cost bounded by the viewport, not the
|
|
172
|
+
* total border count.
|
|
173
|
+
*/ _bordersByRowDirty = /*#__PURE__*/ new WeakMap(), /**
|
|
174
|
+
* During a `createCustomBorders` pass, holds the `row,col` keys already written in this pass, so a
|
|
175
|
+
* cell touched for the first time can skip the existing-meta merge read (there is nothing to merge
|
|
176
|
+
* on a fresh cell - the pass starts after the previous borders' meta is cleared). Only cells hit by
|
|
177
|
+
* an overlapping range are re-read. Outside a config pass this is `null`, so every other code path
|
|
178
|
+
* (e.g. `setBorders`) keeps reading existing meta and merges as before. Cuts a full O(N)
|
|
179
|
+
* `getCellMeta` pass out of applying a large, non-overlapping `customBorders` config.
|
|
180
|
+
*
|
|
181
|
+
* A progressive load keeps the Set alive across its batches (see {@link #inConfigPass} for why
|
|
182
|
+
* that does not leak the skip into the gaps between them).
|
|
183
|
+
*/ _configPassTouched = /*#__PURE__*/ new WeakMap(), /**
|
|
184
|
+
* `true` only while `createCustomBorders` is running. A progressive load must keep
|
|
185
|
+
* {@link #configPassTouched} alive across all of its batches, so that ranges overlapping across a
|
|
186
|
+
* batch boundary still merge - but the Set alone cannot gate the first-touch skip, because the
|
|
187
|
+
* batches are separated by timeouts during which application code can call the public API. Without
|
|
188
|
+
* this flag a `setBorders` call landing in such a gap would treat the cell as a first touch, skip
|
|
189
|
+
* the existing-meta read, and silently drop the sides already on that cell.
|
|
190
|
+
*/ _inConfigPass = /*#__PURE__*/ new WeakMap(), /**
|
|
191
|
+
* Guards the plugin's own `borders` cell-meta writes so the `afterSetCellMeta` /
|
|
192
|
+
* `afterRemoveCellMeta` listeners react only to external writes (UndoRedo restoring meta, user
|
|
193
|
+
* code calling `setCellMeta` directly). Without it every internal write would re-enter the model
|
|
194
|
+
* upsert it originated from.
|
|
195
|
+
*/ _isInternalMetaWrite = /*#__PURE__*/ new WeakMap(), /**
|
|
196
|
+
* Whether a render following external `borders` cell-meta writes is already scheduled. External
|
|
197
|
+
* writes arrive one cell at a time (UndoRedo restores the meta of an undone row/column removal
|
|
198
|
+
* cell by cell), so the render is coalesced into a single pass for the whole synchronous batch
|
|
199
|
+
* instead of one full render per cell.
|
|
200
|
+
*/ _isMetaSyncRenderScheduled = /*#__PURE__*/ new WeakMap(), /**
|
|
201
|
+
* Pending border configuration entries for a progressive (background-batched) application, or
|
|
202
|
+
* `null` when no progressive load is in flight. Set when `customBordersProgressive` is enabled.
|
|
203
|
+
*/ _progressiveQueue = /*#__PURE__*/ new WeakMap(), /**
|
|
204
|
+
* Index of the next entry in `#progressiveQueue` to apply.
|
|
205
|
+
*/ _progressiveIndex = /*#__PURE__*/ new WeakMap(), /**
|
|
206
|
+
* Number of entries applied per progressive batch.
|
|
207
|
+
*/ _progressiveChunkSize = /*#__PURE__*/ new WeakMap(), /**
|
|
208
|
+
* Monotonic generation token for the active progressive load. Bumped on start, finish, flush, and
|
|
209
|
+
* cancel; a scheduled batch aborts if its captured token no longer matches, so stale timers become
|
|
210
|
+
* no-ops without needing to track and clear individual timeout handles.
|
|
211
|
+
*/ _progressiveToken = /*#__PURE__*/ new WeakMap(), /**
|
|
212
|
+
* Physical row index of each saved border captured before a row move, parallel to `savedBorders`.
|
|
213
|
+
* Used to re-derive each border's visual row after the move reorders the visual index mapping.
|
|
214
|
+
* `null` when no move is in progress.
|
|
215
|
+
*/ _rowMoveSnapshot = /*#__PURE__*/ new WeakMap(), /**
|
|
216
|
+
* Physical column index of each saved border captured before a column move, parallel to
|
|
217
|
+
* `savedBorders`. Used to re-derive each border's visual column after the move reorders the
|
|
218
|
+
* visual index mapping. `null` when no move is in progress.
|
|
219
|
+
*/ _columnMoveSnapshot = /*#__PURE__*/ new WeakMap(), /**
|
|
220
|
+
* Reads the cell's existing borders for a merge, unless this is the first time the cell is touched
|
|
221
|
+
* within a `createCustomBorders` pass - in which case the cell is known to be border-free (the pass
|
|
222
|
+
* runs after the previous borders' meta is cleared), so the read is skipped and `undefined` is
|
|
223
|
+
* returned. Outside a config pass (`#configPassTouched` is `null`) it always reads, preserving the
|
|
224
|
+
* merge behavior of `setBorders` and other callers. Skipping the first-touch read removes a full
|
|
225
|
+
* O(N) `getCellMeta` pass from applying a large, non-overlapping config.
|
|
226
|
+
*
|
|
227
|
+
* @param {number} row Visual row index.
|
|
228
|
+
* @param {number} column Visual column index.
|
|
229
|
+
* @returns {unknown} The existing `borders` meta value, or `undefined` when the read is skipped.
|
|
230
|
+
*/ _readExistingBordersForMerge = /*#__PURE__*/ new WeakSet(), /**
|
|
231
|
+
* Writes or removes the plugin-owned `borders` cell meta with the re-entrancy guard raised, so
|
|
232
|
+
* the external-write listeners ignore it. Pass `null` to remove the meta.
|
|
233
|
+
*
|
|
234
|
+
* Both `setCellMeta` and `removeCellMeta` are vetoable - a `beforeSetCellMeta` /
|
|
235
|
+
* `beforeRemoveCellMeta` listener returning `false` makes them a no-op (an app blocking border
|
|
236
|
+
* edits on locked cells, for example). The write is therefore verified against the resulting meta
|
|
237
|
+
* and reported back, so callers can leave the border model untouched instead of recording a border
|
|
238
|
+
* that has no cell meta behind it. The verification only runs when a matching `before*` listener
|
|
239
|
+
* is registered - without one no veto is possible, and skipping the read keeps the
|
|
240
|
+
* config-application path free of a per-border `getCellMeta` resolution.
|
|
241
|
+
*
|
|
242
|
+
* The removal is verified against the own property, not the resolved value: a `borders` key
|
|
243
|
+
* cascading from the grid or column level survives `removeCellMeta` (which deletes the own key
|
|
244
|
+
* only), so a resolved read would report a veto that never happened. The check covers the
|
|
245
|
+
* cascade; a `borders` key supplied by a `cells` function is written back as an own property and
|
|
246
|
+
* is unsupported - such values are not plugin-owned and never enter the border model.
|
|
247
|
+
*
|
|
248
|
+
* @param {number} row Visual row index.
|
|
249
|
+
* @param {number} column Visual column index.
|
|
250
|
+
* @param {object|null} value The denormalized border object, or `null` to remove.
|
|
251
|
+
* @returns {boolean} `true` when the meta now matches the requested write, `false` when it was vetoed.
|
|
252
|
+
*/ _writeBordersMeta = /*#__PURE__*/ new WeakSet(), /**
|
|
253
|
+
* Builds the border object for a single cell of a range configuration. The cell's existing
|
|
254
|
+
* borders are merged first, so a cell touched by several overlapping ranges keeps every side.
|
|
255
|
+
* Each side that lies on a range edge is resolved through {@link resolveRangeBorderSide}, so an
|
|
256
|
+
* empty side inherits the range-level `border` style instead of the default.
|
|
257
|
+
*
|
|
258
|
+
* @param {number} rowIndex Visual row index of the cell.
|
|
259
|
+
* @param {number} colIndex Visual column index of the cell.
|
|
260
|
+
* @param {object} customBorder The range configuration object.
|
|
261
|
+
* @param {object} range The `{ from, to }` range the configuration applies to.
|
|
262
|
+
* @returns {object} The merged border and the number of sides applied to this cell.
|
|
263
|
+
*/ _buildRangeCellBorder = /*#__PURE__*/ new WeakSet(), /**
|
|
264
|
+
* Destroys every plugin-owned custom selection and clears the rendered working set. Selections
|
|
265
|
+
* added to `highlight.customSelections` by other code are left untouched - the plugin only owns
|
|
266
|
+
* the entries tracked in its working-set cache. Does not touch the `savedBorders` model.
|
|
267
|
+
*/ _destroyAllSelections = /*#__PURE__*/ new WeakSet(), /**
|
|
268
|
+
* Clears the entire border model and its rendered working set: cancels any in-flight progressive
|
|
269
|
+
* load, removes the `borders` meta from every previously bordered cell, empties `savedBorders` and
|
|
270
|
+
* its indexes, and destroys the rendered selections. Shared by `clearBorders()` (clear all) and
|
|
271
|
+
* `changeBorderSettings()` (a fresh array config / `updateSettings` replace). Does not render.
|
|
272
|
+
*/ _resetBorderModel = /*#__PURE__*/ new WeakSet(), /**
|
|
273
|
+
* Rebuilds the visual-row index (`#bordersByRow`) from `savedBorders`. Runs at most once per model
|
|
274
|
+
* change (guarded by `#bordersByRowDirty`), never per render, so the per-frame viewport sync stays
|
|
275
|
+
* bounded by the viewport rather than the total border count.
|
|
276
|
+
*/ _rebuildBordersByRow = /*#__PURE__*/ new WeakSet(), /**
|
|
277
|
+
* Patches a single border into the visual-row index, replacing any entry the row bucket already
|
|
278
|
+
* holds for the same id (a style edit re-inserts a fresh border object for the same cell). Runs
|
|
279
|
+
* only when the index is current - while it is dirty the next sync rebuilds it from scratch, so
|
|
280
|
+
* patching it would be wasted work.
|
|
281
|
+
*
|
|
282
|
+
* @param {object} border The border to index.
|
|
283
|
+
*/ _indexBorderByRow = /*#__PURE__*/ new WeakSet(), /**
|
|
284
|
+
* Drops a single border from the visual-row index. Runs only when the index is current, for the
|
|
285
|
+
* same reason as {@link #indexBorderByRow}.
|
|
286
|
+
*
|
|
287
|
+
* @param {number} row Visual row index the border sits on.
|
|
288
|
+
* @param {string} borderId The id of the border to drop.
|
|
289
|
+
*/ _unindexBorderByRow = /*#__PURE__*/ new WeakSet(), /**
|
|
290
|
+
* Synchronizes the rendered custom selections with the current viewport. Creates selections for
|
|
291
|
+
* bordered cells that entered the rendered range and destroys those that left it, so the selection
|
|
292
|
+
* manager only ever iterates and draws O(viewport) borders regardless of how many are configured.
|
|
293
|
+
* Called on every view render (`beforeViewRender`), before the selection borders are drawn.
|
|
294
|
+
*/ _syncViewportSelections = /*#__PURE__*/ new WeakSet(), /**
|
|
295
|
+
* Creates and registers a rendered custom selection for a single border, keyed by its id in the
|
|
296
|
+
* working-set cache. The `Border` DOM itself is created lazily by the selection manager when the
|
|
297
|
+
* cell is inside the overlay's rendered range.
|
|
298
|
+
*
|
|
299
|
+
* @param {object} border The border model to render.
|
|
300
|
+
*/ _addSelectionForBorder = /*#__PURE__*/ new WeakSet(), /**
|
|
301
|
+
* Rebuilds the id-to-position index of the saved borders after positions have shifted.
|
|
302
|
+
*/ _rebuildSavedBordersIndex = /*#__PURE__*/ new WeakSet(), /**
|
|
303
|
+
* Reads and normalizes the `customBordersProgressive` setting.
|
|
304
|
+
*
|
|
305
|
+
* @returns {{ enabled: boolean, chunkSize: number }}
|
|
306
|
+
*/ _resolveProgressiveSetting = /*#__PURE__*/ new WeakSet(), /**
|
|
307
|
+
* Starts a progressive (background-batched) application of a border configuration. The first batch
|
|
308
|
+
* is scheduled asynchronously so the initial grid render is not blocked.
|
|
309
|
+
*
|
|
310
|
+
* @param {Array} borders The border configuration entries to apply.
|
|
311
|
+
* @param {number} chunkSize The number of entries to apply per batch.
|
|
312
|
+
*/ _startProgressiveApply = /*#__PURE__*/ new WeakSet(), /**
|
|
313
|
+
* Schedules the next progressive batch on a timeout so the browser can paint between batches.
|
|
314
|
+
* `_registerTimeout` auto-clears on `destroy`; the generation token guards against stale runs.
|
|
315
|
+
*
|
|
316
|
+
* @param {number} token The generation token captured when the load started.
|
|
317
|
+
*/ _scheduleProgressiveChunk = /*#__PURE__*/ new WeakSet(), /**
|
|
318
|
+
* Applies one progressive batch, renders so the newly in-viewport borders appear, then schedules
|
|
319
|
+
* the next batch or finishes. Aborts if the load was cancelled/superseded (token mismatch).
|
|
320
|
+
*
|
|
321
|
+
* @param {number} token The generation token captured when the load started.
|
|
322
|
+
*/ _processProgressiveChunk = /*#__PURE__*/ new WeakSet(), /**
|
|
323
|
+
* Applies all remaining progressive batches synchronously and finishes. Used when the border model
|
|
324
|
+
* must be complete immediately - e.g. before a structural change remaps coordinates.
|
|
325
|
+
*/ _flushProgressiveApply = /*#__PURE__*/ new WeakSet(), /**
|
|
326
|
+
* Finalizes a progressive load: clears the queue and pass state, invalidates any pending batch
|
|
327
|
+
* (token bump), and fires `afterCustomBordersUpdate` to signal the borders are complete.
|
|
328
|
+
*/ _finishProgressiveApply = /*#__PURE__*/ new WeakSet(), /**
|
|
329
|
+
* Cancels an in-flight progressive load without firing the completion hook (the borders are being
|
|
330
|
+
* discarded/replaced). Invalidates pending batches via the token bump.
|
|
331
|
+
*/ _cancelProgressiveApply = /*#__PURE__*/ new WeakSet(), /**
|
|
129
332
|
* Validate the style settings. If the style value is not supported, the property is removed from the configuration.
|
|
130
333
|
*
|
|
131
334
|
* @private
|
|
132
335
|
* @param {object[]} customBorders The user defined custom border objects array.
|
|
133
336
|
*/ _validateStyleSettings = /*#__PURE__*/ new WeakSet(), /**
|
|
337
|
+
* Re-synchronizes the saved borders and their rendered custom selections after rows or columns
|
|
338
|
+
* are inserted or removed. Each saved border's coordinate on the given axis is passed through
|
|
339
|
+
* `mapIndex`; a result of `-1` means the border's cell no longer exists and the border is dropped,
|
|
340
|
+
* otherwise the border moves to the new coordinate. The cell meta is left untouched - Handsontable
|
|
341
|
+
* already shifts it, and this method only realigns the plugin's own bookkeeping to that meta.
|
|
342
|
+
*
|
|
343
|
+
* @param {string} axis The coordinate axis to shift - `'row'` or `'col'`.
|
|
344
|
+
* @param {Function} mapIndex Maps an old visual index to its new index, or `-1` when removed.
|
|
345
|
+
*/ _shiftBorders = /*#__PURE__*/ new WeakSet(), /**
|
|
346
|
+
* Re-synchronizes the saved borders and their rendered custom selections after a row or column
|
|
347
|
+
* move. Each border's new visual index on the given axis is derived from the physical index
|
|
348
|
+
* captured before the move, so the border follows the cell it was applied to.
|
|
349
|
+
*
|
|
350
|
+
* @param {string} axis The coordinate axis to remap - `'row'` or `'col'`.
|
|
351
|
+
* @param {Array} snapshot Physical indexes captured before the move, parallel to `savedBorders`.
|
|
352
|
+
* @param {Function} toVisualIndex Translates a physical index to its current visual index.
|
|
353
|
+
*/ _applyMoveSnapshot = /*#__PURE__*/ new WeakSet(), /**
|
|
354
|
+
* Reindexes the model after a structural change has rewritten border coordinates and ids, then
|
|
355
|
+
* drops and re-renders the working set so the viewport sync rebuilds it from the updated model.
|
|
356
|
+
* Tearing the selections down first also avoids transient id collisions (a shifted border's new id
|
|
357
|
+
* can equal another border's not-yet-shifted old id). Shared by `#shiftBorders` and
|
|
358
|
+
* `#applyMoveSnapshot`.
|
|
359
|
+
*
|
|
360
|
+
* @param {boolean} [render=true] If `true`, a render is forced so `#syncViewportSelections`
|
|
361
|
+
* rebuilds the working set. Pass `false` when the caller runs inside an operation that renders on
|
|
362
|
+
* its own afterwards - rendering from within such an operation paints a half-updated grid.
|
|
363
|
+
*/ _rebuildWorkingSetFromModel = /*#__PURE__*/ new WeakSet(), /**
|
|
364
|
+
* Destroys the custom selection for the given border id and removes it from the highlight
|
|
365
|
+
* collection and the id cache. Used when a border's cell is removed from the table.
|
|
366
|
+
*
|
|
367
|
+
* @param {string} borderId The id of the border whose selection should be destroyed.
|
|
368
|
+
*/ _destroyBorderSelection = /*#__PURE__*/ new WeakSet(), /**
|
|
134
369
|
* Add border options to context menu.
|
|
135
370
|
*
|
|
136
371
|
* @param {object} defaultOptions Context menu items.
|
|
137
372
|
*/ _onAfterContextMenuDefaultOptions = /*#__PURE__*/ new WeakSet(), /**
|
|
138
|
-
* `
|
|
139
|
-
|
|
373
|
+
* `init` hook callback. Builds the border model without forcing a render: the `init` hook fires
|
|
374
|
+
* right before the core's first render, and a render forced from here would paint the grid
|
|
375
|
+
* before later-priority plugins (e.g. NestedHeaders) run their own `init` setup, leaving
|
|
376
|
+
* corrupted header DOM behind (#11031 regression). The core's first render syncs and draws the
|
|
377
|
+
* master overlay's borders; the freshly-bootstrapped overlay clones need one more selection
|
|
378
|
+
* pass, so that render is scheduled for `afterInit` - still inside the same synchronous init
|
|
379
|
+
* sequence, but after every plugin finished its initialization.
|
|
380
|
+
*/ _onAfterInit = /*#__PURE__*/ new WeakSet(), /**
|
|
381
|
+
* `beforeViewRender` hook callback. Synchronizes the rendered custom-border selections with the
|
|
382
|
+
* current viewport so only visible borders are materialized and drawn.
|
|
383
|
+
*
|
|
384
|
+
* The sync runs *before* the draw, not after it. The draw resolves the new rendered range
|
|
385
|
+
* (`createCalculators`) before firing `beforeViewRender`, so the range this reads is already the
|
|
386
|
+
* one about to be painted; the overlay clones then draw their selections, and the master draws
|
|
387
|
+
* its own at the end of the same cycle. Syncing from `afterViewRender` instead would land between
|
|
388
|
+
* those two, so a selection created there reached the master but missed the clones - a border
|
|
389
|
+
* scrolled back into a frozen row or column stayed invisible until an unrelated render.
|
|
390
|
+
*/ _onBeforeViewRender = /*#__PURE__*/ new WeakMap(), /**
|
|
391
|
+
* `afterSetCellMeta` hook callback. Follows an external write of the `borders` cell meta (e.g.
|
|
392
|
+
* UndoRedo restoring the meta of an undone row/column removal, or user code calling
|
|
393
|
+
* `setCellMeta` directly) by upserting the matching entry in the border model, so the model and
|
|
394
|
+
* the meta cannot diverge. The plugin's own writes are excluded by the re-entrancy guard.
|
|
395
|
+
*
|
|
396
|
+
* @param {number} row Visual row index.
|
|
397
|
+
* @param {number} column Visual column index.
|
|
398
|
+
* @param {string} key The meta key that was written.
|
|
399
|
+
* @param {*} value The written value.
|
|
400
|
+
*/ _onAfterSetCellMeta = /*#__PURE__*/ new WeakMap(), /**
|
|
401
|
+
* Schedules a single render for a batch of external `borders` cell-meta writes.
|
|
402
|
+
*
|
|
403
|
+
* The writes arrive per cell (`setCellMetaObject` fans a restored meta object out into one
|
|
404
|
+
* `setCellMeta` call per key, and UndoRedo replays one entry per removed cell), so rendering
|
|
405
|
+
* from the listener itself would run a full render for every bordered cell of the restored
|
|
406
|
+
* range. The microtask runs after the synchronous write batch but before the browser can paint,
|
|
407
|
+
* so the borders are still rebuilt within the same frame - no intermediate blank state. The
|
|
408
|
+
* microtask is registered through the core, which cancels pending ones on `destroy`.
|
|
409
|
+
*/ _scheduleMetaSyncRender = /*#__PURE__*/ new WeakSet(), /**
|
|
410
|
+
* `afterRemoveCellMeta` hook callback. Follows an external removal of the `borders` cell meta by
|
|
411
|
+
* dropping the matching entry from the border model and its rendered selection.
|
|
412
|
+
*
|
|
413
|
+
* @param {number} row Visual row index.
|
|
414
|
+
* @param {number} column Visual column index.
|
|
415
|
+
* @param {string} key The removed meta key.
|
|
416
|
+
*/ _onAfterRemoveCellMeta = /*#__PURE__*/ new WeakMap(), /**
|
|
417
|
+
* Applies any in-flight progressive load synchronously, so the border model is complete and its
|
|
418
|
+
* coordinates still describe the grid as the configuration meant them. Every structural change
|
|
419
|
+
* runs this from its `before*` hook: the core shifts the cell meta before firing the matching
|
|
420
|
+
* `after*` hook, so a queue drained from there would write its `borders` meta onto cells the
|
|
421
|
+
* configuration never targeted, leaving the meta and the model permanently out of step. The
|
|
422
|
+
* row/column move handlers flush from their `before*` hooks for the same reason.
|
|
423
|
+
*
|
|
424
|
+
* Auto-inserted rows and columns (`minSpareRows` / `minSpareCols`) append at the end and shift
|
|
425
|
+
* nothing, so they keep the load progressive instead of forcing it to complete.
|
|
426
|
+
*
|
|
427
|
+
* The `before*` hooks are vetoable, and the flush runs before the veto outcome is known - a
|
|
428
|
+
* later listener may still cancel the operation. A vetoed attempt therefore completes the load:
|
|
429
|
+
* nothing shifts, so the flushed model stays correct, but the remaining configuration is applied
|
|
430
|
+
* synchronously in that call. This is a deliberate trade-off - draining from the `after*` side
|
|
431
|
+
* corrupts the meta coordinates (the reason the flush lives here), and an already-applied queue
|
|
432
|
+
* cannot be re-armed.
|
|
433
|
+
*
|
|
434
|
+
* @param {string} [source] Source that triggered the structural change.
|
|
435
|
+
*/ _flushBeforeStructuralChange = /*#__PURE__*/ new WeakSet(), /**
|
|
436
|
+
* `beforeCreateRow` hook callback.
|
|
437
|
+
*
|
|
438
|
+
* @param {number} index Visual index of the first row about to be created.
|
|
439
|
+
* @param {number} amount Number of rows about to be created.
|
|
440
|
+
* @param {string} [source] Source that triggered the row creation.
|
|
441
|
+
*/ _onBeforeCreateRow = /*#__PURE__*/ new WeakMap(), /**
|
|
442
|
+
* `beforeRemoveRow` hook callback.
|
|
443
|
+
*
|
|
444
|
+
* @param {number} index Visual index of the first row about to be removed.
|
|
445
|
+
* @param {number} amount Number of rows about to be removed.
|
|
446
|
+
* @param {Array} physicalRows Physical indexes of the rows about to be removed.
|
|
447
|
+
* @param {string} [source] Source that triggered the row removal.
|
|
448
|
+
*/ _onBeforeRemoveRow = /*#__PURE__*/ new WeakMap(), /**
|
|
449
|
+
* `beforeCreateCol` hook callback.
|
|
450
|
+
*
|
|
451
|
+
* @param {number} index Visual index of the first column about to be created.
|
|
452
|
+
* @param {number} amount Number of columns about to be created.
|
|
453
|
+
* @param {string} [source] Source that triggered the column creation.
|
|
454
|
+
*/ _onBeforeCreateCol = /*#__PURE__*/ new WeakMap(), /**
|
|
455
|
+
* `beforeRemoveCol` hook callback.
|
|
456
|
+
*
|
|
457
|
+
* @param {number} index Visual index of the first column about to be removed.
|
|
458
|
+
* @param {number} amount Number of columns about to be removed.
|
|
459
|
+
* @param {Array} physicalColumns Physical indexes of the columns about to be removed.
|
|
460
|
+
* @param {string} [source] Source that triggered the column removal.
|
|
461
|
+
*/ _onBeforeRemoveCol = /*#__PURE__*/ new WeakMap(), /**
|
|
462
|
+
* `afterCreateRow` hook callback. Shifts every border at or below the insertion point down.
|
|
463
|
+
*
|
|
464
|
+
* @param {number} index Visual index of the first newly created row.
|
|
465
|
+
* @param {number} amount Number of created rows.
|
|
466
|
+
* @param {string} [source] Source that triggered the row creation.
|
|
467
|
+
*/ _onAfterCreateRow = /*#__PURE__*/ new WeakMap(), /**
|
|
468
|
+
* `afterRemoveRow` hook callback. Drops borders on removed rows and shifts the rest up.
|
|
469
|
+
*
|
|
470
|
+
* @param {number} index Visual index of the first removed row.
|
|
471
|
+
* @param {number} amount Number of removed rows.
|
|
472
|
+
*/ _onAfterRemoveRow = /*#__PURE__*/ new WeakMap(), /**
|
|
473
|
+
* `afterCreateCol` hook callback. Shifts every border at or after the insertion point right.
|
|
474
|
+
*
|
|
475
|
+
* @param {number} index Visual index of the first newly created column.
|
|
476
|
+
* @param {number} amount Number of created columns.
|
|
477
|
+
* @param {string} [source] Source that triggered the column creation.
|
|
478
|
+
*/ _onAfterCreateCol = /*#__PURE__*/ new WeakMap(), /**
|
|
479
|
+
* `afterRemoveCol` hook callback. Drops borders on removed columns and shifts the rest left.
|
|
480
|
+
*
|
|
481
|
+
* @param {number} index Visual index of the first removed column.
|
|
482
|
+
* @param {number} amount Number of removed columns.
|
|
483
|
+
*/ _onAfterRemoveCol = /*#__PURE__*/ new WeakMap(), /**
|
|
484
|
+
* `beforeRowMove` hook callback. Snapshots each saved border's physical row so it can be
|
|
485
|
+
* re-derived after the move reorders the visual index mapping.
|
|
486
|
+
*
|
|
487
|
+
* @param {Array} movedRows Visual row indexes being moved.
|
|
488
|
+
* @param {number} finalIndex Target start index for the moved rows.
|
|
489
|
+
* @param {number|undefined} dropIndex Drop index of the move.
|
|
490
|
+
* @param {boolean} movePossible Whether the move is possible.
|
|
491
|
+
*/ _onBeforeRowMove = /*#__PURE__*/ new WeakMap(), /**
|
|
492
|
+
* `afterRowMove` hook callback. Re-derives each border's visual row from the pre-move snapshot.
|
|
493
|
+
*
|
|
494
|
+
* @param {Array} movedRows Visual row indexes that were moved.
|
|
495
|
+
* @param {number} finalIndex Target start index for the moved rows.
|
|
496
|
+
* @param {number|undefined} dropIndex Drop index of the move.
|
|
497
|
+
* @param {boolean} movePossible Whether the move was possible.
|
|
498
|
+
* @param {boolean} orderChanged Whether the move changed the row order.
|
|
499
|
+
*/ _onAfterRowMove = /*#__PURE__*/ new WeakMap(), /**
|
|
500
|
+
* `beforeColumnMove` hook callback. Snapshots each saved border's physical column so it can be
|
|
501
|
+
* re-derived after the move reorders the visual index mapping.
|
|
502
|
+
*
|
|
503
|
+
* @param {Array} movedColumns Visual column indexes being moved.
|
|
504
|
+
* @param {number} finalIndex Target start index for the moved columns.
|
|
505
|
+
* @param {number|undefined} dropIndex Drop index of the move.
|
|
506
|
+
* @param {boolean} movePossible Whether the move is possible.
|
|
507
|
+
*/ _onBeforeColumnMove = /*#__PURE__*/ new WeakMap(), /**
|
|
508
|
+
* `afterColumnMove` hook callback. Re-derives each border's visual column from the pre-move
|
|
509
|
+
* snapshot.
|
|
510
|
+
*
|
|
511
|
+
* @param {Array} movedColumns Visual column indexes that were moved.
|
|
512
|
+
* @param {number} finalIndex Target start index for the moved columns.
|
|
513
|
+
* @param {number|undefined} dropIndex Drop index of the move.
|
|
514
|
+
* @param {boolean} movePossible Whether the move was possible.
|
|
515
|
+
* @param {boolean} orderChanged Whether the move changed the column order.
|
|
516
|
+
*/ _onAfterColumnMove = /*#__PURE__*/ new WeakMap();
|
|
140
517
|
class CustomBorders extends _base.BasePlugin {
|
|
141
518
|
/**
|
|
142
519
|
* Returns the plugin key used to identify this plugin in Handsontable settings.
|
|
@@ -149,6 +526,17 @@ class CustomBorders extends _base.BasePlugin {
|
|
|
149
526
|
return PLUGIN_PRIORITY;
|
|
150
527
|
}
|
|
151
528
|
/**
|
|
529
|
+
* Returns the settings keys that trigger the plugin update on `updateSettings()`. Beside the
|
|
530
|
+
* plugin key itself this covers `customBordersProgressive`, which changes how the very same
|
|
531
|
+
* configuration is applied - without it, switching only that option would stay inert until some
|
|
532
|
+
* unrelated `customBorders` update happened to come along.
|
|
533
|
+
*/ static get SETTING_KEYS() {
|
|
534
|
+
return [
|
|
535
|
+
PLUGIN_KEY,
|
|
536
|
+
'customBordersProgressive'
|
|
537
|
+
];
|
|
538
|
+
}
|
|
539
|
+
/**
|
|
152
540
|
* Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}
|
|
153
541
|
* hook and if it returns `true` then the {@link CustomBorders#enablePlugin} method is called.
|
|
154
542
|
*
|
|
@@ -164,11 +552,27 @@ class CustomBorders extends _base.BasePlugin {
|
|
|
164
552
|
}
|
|
165
553
|
this.addHook('afterContextMenuDefaultOptions', (options)=>_class_private_method_get(this, _onAfterContextMenuDefaultOptions, onAfterContextMenuDefaultOptions).call(this, options));
|
|
166
554
|
this.addHook('init', ()=>_class_private_method_get(this, _onAfterInit, onAfterInit).call(this));
|
|
555
|
+
this.addHook('beforeCreateRow', _class_private_field_get(this, _onBeforeCreateRow));
|
|
556
|
+
this.addHook('afterCreateRow', _class_private_field_get(this, _onAfterCreateRow));
|
|
557
|
+
this.addHook('beforeRemoveRow', _class_private_field_get(this, _onBeforeRemoveRow));
|
|
558
|
+
this.addHook('afterRemoveRow', _class_private_field_get(this, _onAfterRemoveRow));
|
|
559
|
+
this.addHook('beforeCreateCol', _class_private_field_get(this, _onBeforeCreateCol));
|
|
560
|
+
this.addHook('afterCreateCol', _class_private_field_get(this, _onAfterCreateCol));
|
|
561
|
+
this.addHook('beforeRemoveCol', _class_private_field_get(this, _onBeforeRemoveCol));
|
|
562
|
+
this.addHook('afterRemoveCol', _class_private_field_get(this, _onAfterRemoveCol));
|
|
563
|
+
this.addHook('beforeRowMove', _class_private_field_get(this, _onBeforeRowMove));
|
|
564
|
+
this.addHook('afterRowMove', _class_private_field_get(this, _onAfterRowMove));
|
|
565
|
+
this.addHook('beforeColumnMove', _class_private_field_get(this, _onBeforeColumnMove));
|
|
566
|
+
this.addHook('afterColumnMove', _class_private_field_get(this, _onAfterColumnMove));
|
|
567
|
+
this.addHook('beforeViewRender', _class_private_field_get(this, _onBeforeViewRender));
|
|
568
|
+
this.addHook('afterSetCellMeta', _class_private_field_get(this, _onAfterSetCellMeta));
|
|
569
|
+
this.addHook('afterRemoveCellMeta', _class_private_field_get(this, _onAfterRemoveCellMeta));
|
|
167
570
|
super.enablePlugin();
|
|
168
571
|
}
|
|
169
572
|
/**
|
|
170
573
|
* Disables the plugin functionality for this Handsontable instance.
|
|
171
574
|
*/ disablePlugin() {
|
|
575
|
+
_class_private_method_get(this, _cancelProgressiveApply, cancelProgressiveApply).call(this);
|
|
172
576
|
this.hideBorders();
|
|
173
577
|
super.disablePlugin();
|
|
174
578
|
}
|
|
@@ -201,7 +605,12 @@ class CustomBorders extends _base.BasePlugin {
|
|
|
201
605
|
* ```
|
|
202
606
|
*
|
|
203
607
|
* @param {Array[]|CellRange[]} selectionRanges Array of selection ranges.
|
|
204
|
-
* @param {object} borderObject Object with `top`, `
|
|
608
|
+
* @param {object} borderObject Object with `top`, `bottom`, `start`, and `end` properties.
|
|
609
|
+
* Each side object can include:
|
|
610
|
+
* - `width` (`number`) Border width in pixels (default: `1`).
|
|
611
|
+
* - `color` (`string`) CSS border color value (default: `'#000'`).
|
|
612
|
+
* - `hide` (`boolean`) Hides a border side when set to `true`.
|
|
613
|
+
* Legacy aliases `left` and `right` are also supported and are normalized to `start` and `end`.
|
|
205
614
|
*/ setBorders(selectionRanges, borderObject) {
|
|
206
615
|
let borderKeys = [
|
|
207
616
|
'top',
|
|
@@ -231,15 +640,11 @@ class CustomBorders extends _base.BasePlugin {
|
|
|
231
640
|
});
|
|
232
641
|
});
|
|
233
642
|
/*
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
Selection.getBorder, which creates a new instance of Border.
|
|
240
|
-
|
|
241
|
-
Seems wise to keep this single-direction flow of creating new Borders
|
|
242
|
-
*/ this.hot.view.render();
|
|
643
|
+
A forced render is used (not a fast `view.render()`) so the `beforeViewRender` hook fires and
|
|
644
|
+
`#syncViewportSelections` materializes the custom selections for the just-changed, in-viewport
|
|
645
|
+
borders before the selection borders are drawn. A fast draw can be skipped when Walkontable
|
|
646
|
+
detects no cell/viewport change, which would leave the new border model unrendered.
|
|
647
|
+
*/ this.hot.render();
|
|
243
648
|
}
|
|
244
649
|
/**
|
|
245
650
|
* Get custom borders.
|
|
@@ -300,12 +705,8 @@ class CustomBorders extends _base.BasePlugin {
|
|
|
300
705
|
if (selectionRanges) {
|
|
301
706
|
this.setBorders(selectionRanges);
|
|
302
707
|
} else {
|
|
303
|
-
(
|
|
304
|
-
|
|
305
|
-
this.clearNullCellRange();
|
|
306
|
-
this.hot.removeCellMeta(border.row, border.col, 'borders');
|
|
307
|
-
});
|
|
308
|
-
this.savedBorders.length = 0;
|
|
708
|
+
_class_private_method_get(this, _resetBorderModel, resetBorderModel).call(this);
|
|
709
|
+
this.hot.render();
|
|
309
710
|
}
|
|
310
711
|
}
|
|
311
712
|
/**
|
|
@@ -318,16 +719,25 @@ class CustomBorders extends _base.BasePlugin {
|
|
|
318
719
|
const hasSavedBorders = this.checkSavedBorders(border);
|
|
319
720
|
if (!hasSavedBorders) {
|
|
320
721
|
this.savedBorders.push(border);
|
|
722
|
+
_class_private_field_get(this, _savedBordersIndex).set(border.id, this.savedBorders.length - 1);
|
|
321
723
|
}
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
724
|
+
// Only the model is updated here; the rendered custom selection is created (or refreshed) by
|
|
725
|
+
// `#syncViewportSelections` on the next view render, and only if the border is inside the
|
|
726
|
+
// rendered range. This is what makes the plugin scale: selections and their border DOM are
|
|
727
|
+
// materialized for the viewport, not for every bordered cell. `place` is accepted for backward
|
|
728
|
+
// compatibility but no longer drives an incremental per-side toggle - the sync rebuilds the
|
|
729
|
+
// visible selection from the (already updated) border model, which carries the final side styles.
|
|
730
|
+
//
|
|
731
|
+
// The row index is patched for this one border rather than invalidated wholesale. Marking it
|
|
732
|
+
// dirty would make the next render rebuild it from the whole of `savedBorders`, so a progressive
|
|
733
|
+
// load - which renders once per batch - would rebuild a growing array once per batch and cost
|
|
734
|
+
// O(borders² / chunkSize) over the load, in the exact path the batching exists to speed up.
|
|
735
|
+
_class_private_method_get(this, _indexBorderByRow, indexBorderByRow).call(this, border);
|
|
736
|
+
// Drop any selection currently rendering this cell so the sync recreates it from the updated
|
|
737
|
+
// border object. The border id is coordinate-based and unchanged by a style edit, so without this
|
|
738
|
+
// the sync would keep the stale selection (it only adds/removes by id). No-op during bulk config
|
|
739
|
+
// load, when nothing is rendered yet.
|
|
740
|
+
_class_private_method_get(this, _destroyBorderSelection, destroyBorderSelection).call(this, border.id);
|
|
331
741
|
}
|
|
332
742
|
/**
|
|
333
743
|
* Prepare borders from setting (single cell).
|
|
@@ -345,22 +755,34 @@ class CustomBorders extends _base.BasePlugin {
|
|
|
345
755
|
}
|
|
346
756
|
let border = (0, _utils.createEmptyBorders)(row, column);
|
|
347
757
|
if (borderDescriptor) {
|
|
758
|
+
// A descriptor means "update these sides": start from the cell's existing borders so the
|
|
759
|
+
// sides it does not mention are kept, then layer the descriptor on top. With no descriptor
|
|
760
|
+
// the border stays all-hidden, which is the "clear this cell" intent handled below.
|
|
761
|
+
const existing = _class_private_method_get(this, _readExistingBordersForMerge, readExistingBordersForMerge).call(this, row, column);
|
|
762
|
+
if (isBorderObject(existing)) {
|
|
763
|
+
border = (0, _utils.normalizeBorder)((0, _object.deepClone)(existing));
|
|
764
|
+
// The merge base describes THIS cell regardless of the bookkeeping fields the stored meta
|
|
765
|
+
// carries - they can be stale when the meta is a detached snapshot (e.g. UndoRedo restoring
|
|
766
|
+
// borders captured at pre-shift coordinates).
|
|
767
|
+
border.row = row;
|
|
768
|
+
border.col = column;
|
|
769
|
+
border.id = (0, _utils.createId)(row, column);
|
|
770
|
+
}
|
|
348
771
|
border = (0, _utils.extendDefaultBorder)(border, borderDescriptor);
|
|
349
|
-
(0, _array.arrayEach)(this.hot.selection.highlight.customSelections, (customSelection)=>{
|
|
350
|
-
const { settings } = customSelection;
|
|
351
|
-
if (border.id === settings.id) {
|
|
352
|
-
Object.assign(settings, borderDescriptor);
|
|
353
|
-
const s = settings;
|
|
354
|
-
border.id = s.id;
|
|
355
|
-
border.top = s.top;
|
|
356
|
-
border.bottom = s.bottom;
|
|
357
|
-
border.start = s.start;
|
|
358
|
-
border.end = s.end;
|
|
359
|
-
return false; // breaks forAll
|
|
360
|
-
}
|
|
361
|
-
});
|
|
362
772
|
}
|
|
363
|
-
|
|
773
|
+
// When every side is hidden (e.g. `setBorders(range)` with no style object, used to clear a
|
|
774
|
+
// cell) the border is removed entirely - dropped from the model and its cell meta - rather than
|
|
775
|
+
// stored as an all-hidden object. The rendered selection is reconciled by the viewport sync.
|
|
776
|
+
if (this.countHide(border) === 4) {
|
|
777
|
+
this.removeAllBorders(row, column);
|
|
778
|
+
return;
|
|
779
|
+
}
|
|
780
|
+
// A vetoed meta write must not reach the model - otherwise `getBorders()` would report a border
|
|
781
|
+
// that `getCellMeta().borders` knows nothing about, and clearing the model later would try to
|
|
782
|
+
// remove a meta key that was never written.
|
|
783
|
+
if (!_class_private_method_get(this, _writeBordersMeta, writeBordersMeta).call(this, row, column, (0, _utils.denormalizeBorder)(border))) {
|
|
784
|
+
return;
|
|
785
|
+
}
|
|
364
786
|
this.insertBorderIntoSettings(border, place);
|
|
365
787
|
}
|
|
366
788
|
/**
|
|
@@ -374,39 +796,13 @@ class CustomBorders extends _base.BasePlugin {
|
|
|
374
796
|
const lastColumnIndex = Math.min(range.to.col, this.hot.countCols() - 1);
|
|
375
797
|
(0, _number.rangeEach)(range.from.row, lastRowIndex, (rowIndex)=>{
|
|
376
798
|
(0, _number.rangeEach)(range.from.col, lastColumnIndex, (colIndex)=>{
|
|
377
|
-
const border = (
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
// Please keep in mind that `range.to.row` may be beyond the table boundaries. The border won't be rendered.
|
|
386
|
-
if (rowIndex === range.to.row) {
|
|
387
|
-
if ((0, _object.hasOwnProperty)(customBorder, 'bottom')) {
|
|
388
|
-
add += 1;
|
|
389
|
-
border.bottom = customBorder.bottom;
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
if (colIndex === range.from.col) {
|
|
393
|
-
if ((0, _object.hasOwnProperty)(customBorder, 'start')) {
|
|
394
|
-
add += 1;
|
|
395
|
-
border.start = customBorder.start;
|
|
396
|
-
}
|
|
397
|
-
}
|
|
398
|
-
// Please keep in mind that `range.to.col` may be beyond the table boundaries. The border won't be rendered.
|
|
399
|
-
if (colIndex === range.to.col) {
|
|
400
|
-
if ((0, _object.hasOwnProperty)(customBorder, 'end')) {
|
|
401
|
-
add += 1;
|
|
402
|
-
border.end = customBorder.end;
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
if (add > 0) {
|
|
406
|
-
this.hot.setCellMeta(rowIndex, colIndex, 'borders', (0, _utils.denormalizeBorder)(border));
|
|
799
|
+
const { border, add } = _class_private_method_get(this, _buildRangeCellBorder, buildRangeCellBorder).call(this, rowIndex, colIndex, customBorder, range);
|
|
800
|
+
// `#buildRangeCellBorder` already merged this cell's existing borders, so overlapping
|
|
801
|
+
// ranges accumulate their sides in the model. The rendered selection is (re)built from the
|
|
802
|
+
// merged model by `#syncViewportSelections` on the next view render. A cell whose meta
|
|
803
|
+
// write is vetoed is skipped entirely, so the model never gets ahead of the meta.
|
|
804
|
+
if (add > 0 && _class_private_method_get(this, _writeBordersMeta, writeBordersMeta).call(this, rowIndex, colIndex, (0, _utils.denormalizeBorder)(border))) {
|
|
407
805
|
this.insertBorderIntoSettings(border, undefined);
|
|
408
|
-
} else {
|
|
409
|
-
// TODO sometimes it enters here. Why?
|
|
410
806
|
}
|
|
411
807
|
});
|
|
412
808
|
});
|
|
@@ -418,11 +814,18 @@ class CustomBorders extends _base.BasePlugin {
|
|
|
418
814
|
* @param {number} row Visual row index.
|
|
419
815
|
* @param {number} column Visual column index.
|
|
420
816
|
*/ removeAllBorders(row, column) {
|
|
817
|
+
// The meta removal is vetoable, so it runs first: when a `beforeRemoveCellMeta` listener blocks
|
|
818
|
+
// it the cell keeps its `borders` meta, and dropping the border from the model anyway would
|
|
819
|
+
// leave `getBorders()` and `getCellMeta().borders` disagreeing.
|
|
820
|
+
if (!_class_private_method_get(this, _writeBordersMeta, writeBordersMeta).call(this, row, column, null)) {
|
|
821
|
+
return;
|
|
822
|
+
}
|
|
421
823
|
const borderId = (0, _utils.createId)(row, column);
|
|
422
824
|
this.spliceBorder(borderId);
|
|
423
|
-
this.
|
|
424
|
-
this
|
|
425
|
-
|
|
825
|
+
_class_private_method_get(this, _unindexBorderByRow, unindexBorderByRow).call(this, row, borderId);
|
|
826
|
+
// Destroy the rendered selection if this border is currently in the viewport working set; if it
|
|
827
|
+
// is off-screen there is nothing rendered to remove.
|
|
828
|
+
_class_private_method_get(this, _destroyBorderSelection, destroyBorderSelection).call(this, borderId);
|
|
426
829
|
}
|
|
427
830
|
/**
|
|
428
831
|
* Set borders for each cell re. To border position.
|
|
@@ -445,20 +848,15 @@ class CustomBorders extends _base.BasePlugin {
|
|
|
445
848
|
const hideCount = this.countHide(bordersMeta);
|
|
446
849
|
if (hideCount === 4) {
|
|
447
850
|
this.removeAllBorders(row, column);
|
|
448
|
-
} else {
|
|
449
|
-
|
|
450
|
-
if (!customSelectionsChecker) {
|
|
451
|
-
this.insertBorderIntoSettings(bordersMeta, undefined);
|
|
452
|
-
}
|
|
453
|
-
this.hot.setCellMeta(row, column, 'borders', (0, _utils.denormalizeBorder)(bordersMeta));
|
|
851
|
+
} else if (_class_private_method_get(this, _writeBordersMeta, writeBordersMeta).call(this, row, column, (0, _utils.denormalizeBorder)(bordersMeta))) {
|
|
852
|
+
this.insertBorderIntoSettings(bordersMeta, undefined);
|
|
454
853
|
}
|
|
455
854
|
} else {
|
|
456
855
|
bordersMeta[place] = (0, _utils.createDefaultCustomBorder)();
|
|
457
|
-
|
|
458
|
-
if (
|
|
856
|
+
// The meta is written first so a vetoed write leaves the model untouched.
|
|
857
|
+
if (_class_private_method_get(this, _writeBordersMeta, writeBordersMeta).call(this, row, column, (0, _utils.denormalizeBorder)(bordersMeta))) {
|
|
459
858
|
this.insertBorderIntoSettings(bordersMeta, undefined);
|
|
460
859
|
}
|
|
461
|
-
this.hot.setCellMeta(row, column, 'borders', (0, _utils.denormalizeBorder)(bordersMeta));
|
|
462
860
|
}
|
|
463
861
|
}
|
|
464
862
|
/**
|
|
@@ -517,6 +915,9 @@ class CustomBorders extends _base.BasePlugin {
|
|
|
517
915
|
}
|
|
518
916
|
}
|
|
519
917
|
});
|
|
918
|
+
// Border changes above only updated the model; render so `#syncViewportSelections` materializes
|
|
919
|
+
// the visible selections for the changed cells.
|
|
920
|
+
this.hot.render();
|
|
520
921
|
}
|
|
521
922
|
/**
|
|
522
923
|
* Create borders from settings.
|
|
@@ -524,14 +925,30 @@ class CustomBorders extends _base.BasePlugin {
|
|
|
524
925
|
* @private
|
|
525
926
|
* @param {Array} customBorders Object with `row` and `col`, `start`, `end`, `top` and `bottom` properties.
|
|
526
927
|
*/ createCustomBorders(customBorders) {
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
928
|
+
// Own the first-touch tracking Set only when one is not already active. A progressive load keeps
|
|
929
|
+
// a single Set across all its batches (so overlapping ranges split across batches still merge
|
|
930
|
+
// correctly); a plain synchronous call owns and clears it here.
|
|
931
|
+
const ownsPass = _class_private_field_get(this, _configPassTouched) === null;
|
|
932
|
+
const wasInConfigPass = _class_private_field_get(this, _inConfigPass);
|
|
933
|
+
if (ownsPass) {
|
|
934
|
+
_class_private_field_set(this, _configPassTouched, new Set());
|
|
935
|
+
}
|
|
936
|
+
_class_private_field_set(this, _inConfigPass, true);
|
|
937
|
+
try {
|
|
938
|
+
(0, _array.arrayEach)(customBorders, (customBorder)=>{
|
|
939
|
+
const normCustomBorder = (0, _utils.normalizeBorder)(customBorder);
|
|
940
|
+
if (normCustomBorder.range) {
|
|
941
|
+
this.prepareBorderFromCustomAddedRange(normCustomBorder.range, normCustomBorder);
|
|
942
|
+
} else {
|
|
943
|
+
this.prepareBorderFromCustomAdded(normCustomBorder.row ?? 0, normCustomBorder.col ?? 0, normCustomBorder, undefined);
|
|
944
|
+
}
|
|
945
|
+
});
|
|
946
|
+
} finally{
|
|
947
|
+
_class_private_field_set(this, _inConfigPass, wasInConfigPass);
|
|
948
|
+
if (ownsPass) {
|
|
949
|
+
_class_private_field_set(this, _configPassTouched, null);
|
|
533
950
|
}
|
|
534
|
-
}
|
|
951
|
+
}
|
|
535
952
|
}
|
|
536
953
|
/**
|
|
537
954
|
* Count hide property in border object.
|
|
@@ -557,38 +974,12 @@ class CustomBorders extends _base.BasePlugin {
|
|
|
557
974
|
}, 0);
|
|
558
975
|
}
|
|
559
976
|
/**
|
|
560
|
-
*
|
|
561
|
-
*
|
|
562
|
-
* @private
|
|
563
|
-
* @param {string} borderId Border id name as string.
|
|
564
|
-
*/ clearBordersFromSelectionSettings(borderId) {
|
|
565
|
-
const index = (0, _array.arrayMap)(this.hot.selection.highlight.customSelections, (customSelection)=>customSelection.settings.id).indexOf(borderId);
|
|
566
|
-
if (index > -1) {
|
|
567
|
-
this.hot.selection.highlight.customSelections[index].clear();
|
|
568
|
-
}
|
|
569
|
-
}
|
|
570
|
-
/**
|
|
571
|
-
* Clear cellRange with null value.
|
|
572
|
-
*
|
|
573
|
-
* @private
|
|
574
|
-
*/ clearNullCellRange() {
|
|
575
|
-
(0, _array.arrayEach)(this.hot.selection.highlight.customSelections, (customSelection, index)=>{
|
|
576
|
-
if (customSelection.cellRange === null) {
|
|
577
|
-
customSelection.destroy();
|
|
578
|
-
this.hot.selection.highlight.customSelections.splice(index, 1);
|
|
579
|
-
return false; // breaks forAll
|
|
580
|
-
}
|
|
581
|
-
});
|
|
582
|
-
}
|
|
583
|
-
/**
|
|
584
|
-
* Hide custom borders.
|
|
977
|
+
* Hide custom borders. Destroys the rendered working-set selections; the `savedBorders` model is
|
|
978
|
+
* kept so the borders can be re-materialized if the plugin is re-enabled.
|
|
585
979
|
*
|
|
586
980
|
* @private
|
|
587
981
|
*/ hideBorders() {
|
|
588
|
-
(
|
|
589
|
-
this.clearBordersFromSelectionSettings(border.id);
|
|
590
|
-
this.clearNullCellRange();
|
|
591
|
-
});
|
|
982
|
+
_class_private_method_get(this, _destroyAllSelections, destroyAllSelections).call(this);
|
|
592
983
|
}
|
|
593
984
|
/**
|
|
594
985
|
* Splice border from savedBorders.
|
|
@@ -596,9 +987,10 @@ class CustomBorders extends _base.BasePlugin {
|
|
|
596
987
|
* @private
|
|
597
988
|
* @param {string} borderId Border id name as string.
|
|
598
989
|
*/ spliceBorder(borderId) {
|
|
599
|
-
const index = (
|
|
990
|
+
const index = _class_private_field_get(this, _savedBordersIndex).get(borderId) ?? -1;
|
|
600
991
|
if (index > -1) {
|
|
601
992
|
this.savedBorders.splice(index, 1);
|
|
993
|
+
_class_private_method_get(this, _rebuildSavedBordersIndex, rebuildSavedBordersIndex).call(this);
|
|
602
994
|
}
|
|
603
995
|
}
|
|
604
996
|
/**
|
|
@@ -616,73 +1008,11 @@ class CustomBorders extends _base.BasePlugin {
|
|
|
616
1008
|
this.spliceBorder(border.id);
|
|
617
1009
|
check = true;
|
|
618
1010
|
} else {
|
|
619
|
-
(
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
check = true;
|
|
623
|
-
return false; // breaks forAll
|
|
624
|
-
}
|
|
625
|
-
});
|
|
626
|
-
}
|
|
627
|
-
return check;
|
|
628
|
-
}
|
|
629
|
-
/**
|
|
630
|
-
* Check if an border already exists in the customSelections, and if true call toggleHiddenClass method.
|
|
631
|
-
*
|
|
632
|
-
* @private
|
|
633
|
-
* @param {object} border Object with `row` and `col`, `start`, `end`, `top` and `bottom`, `id` and
|
|
634
|
-
* `border` ({Object} with `color`, `width` and `cornerVisible` property) properties.
|
|
635
|
-
* @param {string} place Coordinate where add/remove border - `top`, `bottom`, `start`, `end` and `noBorders`.
|
|
636
|
-
* @param {boolean} remove True when remove borders, and false when add borders.
|
|
637
|
-
*
|
|
638
|
-
* @returns {boolean}
|
|
639
|
-
*/ checkCustomSelectionsFromContextMenu(border, place, remove) {
|
|
640
|
-
let check = false;
|
|
641
|
-
const customSelections = this.hot.selection.highlight.customSelections;
|
|
642
|
-
(0, _array.arrayEach)(customSelections, (customSelection)=>{
|
|
643
|
-
if (border.id === customSelection.settings.id) {
|
|
644
|
-
const borders = this.hot.view._wt.selectionManager.getBorderInstances(customSelection);
|
|
645
|
-
if (isBorderSide(place)) {
|
|
646
|
-
(0, _array.arrayEach)(borders, (borderObject)=>{
|
|
647
|
-
borderObject.toggleHiddenClass(place, remove ?? false);
|
|
648
|
-
});
|
|
649
|
-
}
|
|
1011
|
+
const index = _class_private_field_get(this, _savedBordersIndex).get(border.id);
|
|
1012
|
+
if (index !== undefined) {
|
|
1013
|
+
this.savedBorders[index] = border;
|
|
650
1014
|
check = true;
|
|
651
|
-
return false; // breaks forAll
|
|
652
1015
|
}
|
|
653
|
-
});
|
|
654
|
-
return check;
|
|
655
|
-
}
|
|
656
|
-
/**
|
|
657
|
-
* Check if an border already exists in the customSelections, and if true reset cellRange.
|
|
658
|
-
*
|
|
659
|
-
* @private
|
|
660
|
-
* @param {object} border Object with `row` and `col`, `start`, `end`, `top` and `bottom`, `id` and
|
|
661
|
-
* `border` ({Object} with `color`, `width` and `cornerVisible` property) properties.
|
|
662
|
-
* @param {CellRange} cellRange The selection range to check.
|
|
663
|
-
* @param {string} [place] Coordinate where add/remove border - `top`, `bottom`, `start`, `end`.
|
|
664
|
-
* @returns {boolean}
|
|
665
|
-
*/ checkCustomSelections(border, cellRange, place) {
|
|
666
|
-
const hideCount = this.countHide(border);
|
|
667
|
-
let check = false;
|
|
668
|
-
if (hideCount === 4) {
|
|
669
|
-
this.removeAllBorders(border.row, border.col);
|
|
670
|
-
check = true;
|
|
671
|
-
} else {
|
|
672
|
-
(0, _array.arrayEach)(this.hot.selection.highlight.customSelections, (customSelection)=>{
|
|
673
|
-
if (border.id === customSelection.settings.id) {
|
|
674
|
-
customSelection.visualCellRange = cellRange;
|
|
675
|
-
customSelection.commit();
|
|
676
|
-
if (place && isBorderSide(place)) {
|
|
677
|
-
const borders = this.hot.view._wt.selectionManager.getBorderInstances(customSelection);
|
|
678
|
-
(0, _array.arrayEach)(borders, (borderObject)=>{
|
|
679
|
-
borderObject.changeBorderStyle(place, border);
|
|
680
|
-
});
|
|
681
|
-
}
|
|
682
|
-
check = true;
|
|
683
|
-
return false; // breaks forAll
|
|
684
|
-
}
|
|
685
|
-
});
|
|
686
1016
|
}
|
|
687
1017
|
return check;
|
|
688
1018
|
}
|
|
@@ -690,18 +1020,38 @@ class CustomBorders extends _base.BasePlugin {
|
|
|
690
1020
|
* Change borders from settings.
|
|
691
1021
|
*
|
|
692
1022
|
* @private
|
|
693
|
-
|
|
1023
|
+
* @param {boolean} [render=true] If `true`, a render is forced after the border model is rebuilt
|
|
1024
|
+
* so `#syncViewportSelections` materializes the visible selections. Pass `false` on the `init`
|
|
1025
|
+
* path: the `init` hook fires before the core's own first render, so that render performs the
|
|
1026
|
+
* sync - and rendering here would paint the grid before later-priority plugins (e.g.
|
|
1027
|
+
* NestedHeaders) finish their `init` setup, leaving corrupted header DOM behind.
|
|
1028
|
+
*/ changeBorderSettings(render = true) {
|
|
694
1029
|
const customBorders = this.hot.getSettings()[PLUGIN_KEY];
|
|
695
1030
|
if (Array.isArray(customBorders)) {
|
|
696
1031
|
const bordersClone = (0, _object.deepClone)(customBorders.filter(isRecord));
|
|
697
1032
|
this.checkSettingsCohesion(bordersClone);
|
|
698
|
-
|
|
699
|
-
|
|
1033
|
+
// A fresh array config replaces the previous borders (this is also the `updateSettings` path).
|
|
1034
|
+
// Reset the model and clear the previous cells' meta first so `prepareBorderFromCustomAdded`
|
|
1035
|
+
// starts from a clean slate instead of merging the new config onto stale meta.
|
|
1036
|
+
_class_private_method_get(this, _resetBorderModel, resetBorderModel).call(this);
|
|
1037
|
+
const progressive = _class_private_method_get(this, _resolveProgressiveSetting, resolveProgressiveSetting).call(this);
|
|
1038
|
+
if (progressive.enabled && bordersClone.length > 0) {
|
|
1039
|
+
// Apply borders in background batches: render the (border-less) grid now so it is
|
|
1040
|
+
// interactive immediately; batches fill in and `afterCustomBordersUpdate` fires on drain.
|
|
1041
|
+
_class_private_method_get(this, _startProgressiveApply, startProgressiveApply).call(this, bordersClone, progressive.chunkSize);
|
|
1042
|
+
if (render) {
|
|
1043
|
+
this.hot.render();
|
|
1044
|
+
}
|
|
1045
|
+
return;
|
|
700
1046
|
}
|
|
701
1047
|
this.createCustomBorders(bordersClone);
|
|
702
1048
|
} else if (customBorders !== undefined) {
|
|
703
1049
|
this.createCustomBorders(this.savedBorders);
|
|
704
1050
|
}
|
|
1051
|
+
if (render) {
|
|
1052
|
+
this.hot.render();
|
|
1053
|
+
}
|
|
1054
|
+
this.hot.runHooks('afterCustomBordersUpdate');
|
|
705
1055
|
}
|
|
706
1056
|
/**
|
|
707
1057
|
* Checks the settings cohesion. The properties such like "left"/"right" are supported only
|
|
@@ -723,17 +1073,467 @@ class CustomBorders extends _base.BasePlugin {
|
|
|
723
1073
|
/**
|
|
724
1074
|
* Destroys the plugin instance.
|
|
725
1075
|
*/ destroy() {
|
|
1076
|
+
// Cancel any in-flight progressive load and release the border model / working-set graphs so a
|
|
1077
|
+
// destroyed instance does not retain them for the page lifetime.
|
|
1078
|
+
_class_private_method_get(this, _cancelProgressiveApply, cancelProgressiveApply).call(this);
|
|
1079
|
+
this.savedBorders = [];
|
|
1080
|
+
_class_private_field_get(this, _savedBordersIndex).clear();
|
|
1081
|
+
_class_private_field_get(this, _bordersByRow).clear();
|
|
1082
|
+
_class_private_field_get(this, _customSelectionsCache).clear();
|
|
1083
|
+
_class_private_field_set(this, _rowMoveSnapshot, null);
|
|
1084
|
+
_class_private_field_set(this, _columnMoveSnapshot, null);
|
|
726
1085
|
super.destroy();
|
|
727
1086
|
}
|
|
728
1087
|
constructor(...args){
|
|
729
|
-
super(...args), _class_private_method_init(this, _validateStyleSettings), _class_private_method_init(this, _onAfterContextMenuDefaultOptions), _class_private_method_init(this, _onAfterInit),
|
|
1088
|
+
super(...args), _class_private_method_init(this, _readExistingBordersForMerge), _class_private_method_init(this, _writeBordersMeta), _class_private_method_init(this, _buildRangeCellBorder), _class_private_method_init(this, _destroyAllSelections), _class_private_method_init(this, _resetBorderModel), _class_private_method_init(this, _rebuildBordersByRow), _class_private_method_init(this, _indexBorderByRow), _class_private_method_init(this, _unindexBorderByRow), _class_private_method_init(this, _syncViewportSelections), _class_private_method_init(this, _addSelectionForBorder), _class_private_method_init(this, _rebuildSavedBordersIndex), _class_private_method_init(this, _resolveProgressiveSetting), _class_private_method_init(this, _startProgressiveApply), _class_private_method_init(this, _scheduleProgressiveChunk), _class_private_method_init(this, _processProgressiveChunk), _class_private_method_init(this, _flushProgressiveApply), _class_private_method_init(this, _finishProgressiveApply), _class_private_method_init(this, _cancelProgressiveApply), _class_private_method_init(this, _validateStyleSettings), _class_private_method_init(this, _shiftBorders), _class_private_method_init(this, _applyMoveSnapshot), _class_private_method_init(this, _rebuildWorkingSetFromModel), _class_private_method_init(this, _destroyBorderSelection), _class_private_method_init(this, _onAfterContextMenuDefaultOptions), _class_private_method_init(this, _onAfterInit), _class_private_method_init(this, _scheduleMetaSyncRender), _class_private_method_init(this, _flushBeforeStructuralChange), _class_private_field_init(this, _savedBordersIndex, {
|
|
1089
|
+
writable: true,
|
|
1090
|
+
value: void 0
|
|
1091
|
+
}), _class_private_field_init(this, _customSelectionsCache, {
|
|
1092
|
+
writable: true,
|
|
1093
|
+
value: void 0
|
|
1094
|
+
}), _class_private_field_init(this, _bordersByRow, {
|
|
1095
|
+
writable: true,
|
|
1096
|
+
value: void 0
|
|
1097
|
+
}), _class_private_field_init(this, _bordersByRowDirty, {
|
|
1098
|
+
writable: true,
|
|
1099
|
+
value: void 0
|
|
1100
|
+
}), _class_private_field_init(this, _configPassTouched, {
|
|
1101
|
+
writable: true,
|
|
1102
|
+
value: void 0
|
|
1103
|
+
}), _class_private_field_init(this, _inConfigPass, {
|
|
1104
|
+
writable: true,
|
|
1105
|
+
value: void 0
|
|
1106
|
+
}), _class_private_field_init(this, _isInternalMetaWrite, {
|
|
1107
|
+
writable: true,
|
|
1108
|
+
value: void 0
|
|
1109
|
+
}), _class_private_field_init(this, _isMetaSyncRenderScheduled, {
|
|
1110
|
+
writable: true,
|
|
1111
|
+
value: void 0
|
|
1112
|
+
}), _class_private_field_init(this, _progressiveQueue, {
|
|
1113
|
+
writable: true,
|
|
1114
|
+
value: void 0
|
|
1115
|
+
}), _class_private_field_init(this, _progressiveIndex, {
|
|
1116
|
+
writable: true,
|
|
1117
|
+
value: void 0
|
|
1118
|
+
}), _class_private_field_init(this, _progressiveChunkSize, {
|
|
1119
|
+
writable: true,
|
|
1120
|
+
value: void 0
|
|
1121
|
+
}), _class_private_field_init(this, _progressiveToken, {
|
|
1122
|
+
writable: true,
|
|
1123
|
+
value: void 0
|
|
1124
|
+
}), _class_private_field_init(this, _rowMoveSnapshot, {
|
|
1125
|
+
writable: true,
|
|
1126
|
+
value: void 0
|
|
1127
|
+
}), _class_private_field_init(this, _columnMoveSnapshot, {
|
|
1128
|
+
writable: true,
|
|
1129
|
+
value: void 0
|
|
1130
|
+
}), _class_private_field_init(this, _onBeforeViewRender, {
|
|
1131
|
+
writable: true,
|
|
1132
|
+
value: void 0
|
|
1133
|
+
}), _class_private_field_init(this, _onAfterSetCellMeta, {
|
|
1134
|
+
writable: true,
|
|
1135
|
+
value: void 0
|
|
1136
|
+
}), _class_private_field_init(this, _onAfterRemoveCellMeta, {
|
|
1137
|
+
writable: true,
|
|
1138
|
+
value: void 0
|
|
1139
|
+
}), _class_private_field_init(this, _onBeforeCreateRow, {
|
|
1140
|
+
writable: true,
|
|
1141
|
+
value: void 0
|
|
1142
|
+
}), _class_private_field_init(this, _onBeforeRemoveRow, {
|
|
1143
|
+
writable: true,
|
|
1144
|
+
value: void 0
|
|
1145
|
+
}), _class_private_field_init(this, _onBeforeCreateCol, {
|
|
1146
|
+
writable: true,
|
|
1147
|
+
value: void 0
|
|
1148
|
+
}), _class_private_field_init(this, _onBeforeRemoveCol, {
|
|
1149
|
+
writable: true,
|
|
1150
|
+
value: void 0
|
|
1151
|
+
}), _class_private_field_init(this, _onAfterCreateRow, {
|
|
1152
|
+
writable: true,
|
|
1153
|
+
value: void 0
|
|
1154
|
+
}), _class_private_field_init(this, _onAfterRemoveRow, {
|
|
1155
|
+
writable: true,
|
|
1156
|
+
value: void 0
|
|
1157
|
+
}), _class_private_field_init(this, _onAfterCreateCol, {
|
|
1158
|
+
writable: true,
|
|
1159
|
+
value: void 0
|
|
1160
|
+
}), _class_private_field_init(this, _onAfterRemoveCol, {
|
|
1161
|
+
writable: true,
|
|
1162
|
+
value: void 0
|
|
1163
|
+
}), _class_private_field_init(this, _onBeforeRowMove, {
|
|
1164
|
+
writable: true,
|
|
1165
|
+
value: void 0
|
|
1166
|
+
}), _class_private_field_init(this, _onAfterRowMove, {
|
|
1167
|
+
writable: true,
|
|
1168
|
+
value: void 0
|
|
1169
|
+
}), _class_private_field_init(this, _onBeforeColumnMove, {
|
|
1170
|
+
writable: true,
|
|
1171
|
+
value: void 0
|
|
1172
|
+
}), _class_private_field_init(this, _onAfterColumnMove, {
|
|
1173
|
+
writable: true,
|
|
1174
|
+
value: void 0
|
|
1175
|
+
}), /**
|
|
730
1176
|
* Saved borders.
|
|
731
1177
|
*
|
|
732
1178
|
* @private
|
|
733
1179
|
* @type {Array}
|
|
734
|
-
*/ this.savedBorders = []
|
|
1180
|
+
*/ this.savedBorders = [], _class_private_field_set(this, _savedBordersIndex, new Map()), _class_private_field_set(this, _customSelectionsCache, new Map()), _class_private_field_set(this, _bordersByRow, new Map()), _class_private_field_set(this, _bordersByRowDirty, true), _class_private_field_set(this, _configPassTouched, null), _class_private_field_set(this, _inConfigPass, false), _class_private_field_set(this, _isInternalMetaWrite, false), _class_private_field_set(this, _isMetaSyncRenderScheduled, false), _class_private_field_set(this, _progressiveQueue, null), _class_private_field_set(this, _progressiveIndex, 0), _class_private_field_set(this, _progressiveChunkSize, DEFAULT_PROGRESSIVE_CHUNK_SIZE), _class_private_field_set(this, _progressiveToken, 0), _class_private_field_set(this, _rowMoveSnapshot, null), _class_private_field_set(this, _columnMoveSnapshot, null), _class_private_field_set(this, _onBeforeViewRender, ()=>{
|
|
1181
|
+
_class_private_method_get(this, _syncViewportSelections, syncViewportSelections).call(this);
|
|
1182
|
+
}), _class_private_field_set(this, _onAfterSetCellMeta, (row, column, key, value)=>{
|
|
1183
|
+
if (_class_private_field_get(this, _isInternalMetaWrite) || key !== 'borders' || !isRecord(value)) {
|
|
1184
|
+
return;
|
|
1185
|
+
}
|
|
1186
|
+
// The written value may be a complete plugin-shaped border object (UndoRedo restoring the meta
|
|
1187
|
+
// of an undone removal) or a partial user-authored one (e.g. `{ top: { width: 2 } }` passed to
|
|
1188
|
+
// `setCellMeta` directly), so it must not be required to carry the internal `id`/`row`/`col`
|
|
1189
|
+
// bookkeeping fields. Routing it through `prepareBorderFromCustomAdded` treats it as a border
|
|
1190
|
+
// descriptor for the write's coordinates. The meta key was already replaced by this write (the
|
|
1191
|
+
// previous sides are gone), so the descriptor defines the cell's borders: the canonical
|
|
1192
|
+
// (complete, denormalized) object is written back to the meta, an all-hidden result clears the
|
|
1193
|
+
// cell, and the model entry is upserted - so meta and model cannot diverge.
|
|
1194
|
+
this.prepareBorderFromCustomAdded(row, column, (0, _utils.normalizeBorder)((0, _object.deepClone)(value)), undefined);
|
|
1195
|
+
// `setCellMeta` does not render, and the model update above dropped the cell's previous rendered
|
|
1196
|
+
// selection so the viewport sync can rebuild it. Without a render the old border DOM is gone
|
|
1197
|
+
// and the new one waits for some unrelated render - the cell would appear to lose its border.
|
|
1198
|
+
_class_private_method_get(this, _scheduleMetaSyncRender, scheduleMetaSyncRender).call(this);
|
|
1199
|
+
}), _class_private_field_set(this, _onAfterRemoveCellMeta, (row, column, key)=>{
|
|
1200
|
+
if (_class_private_field_get(this, _isInternalMetaWrite) || key !== 'borders') {
|
|
1201
|
+
return;
|
|
1202
|
+
}
|
|
1203
|
+
const borderId = (0, _utils.createId)(row, column);
|
|
1204
|
+
this.spliceBorder(borderId);
|
|
1205
|
+
_class_private_method_get(this, _unindexBorderByRow, unindexBorderByRow).call(this, row, borderId);
|
|
1206
|
+
_class_private_method_get(this, _destroyBorderSelection, destroyBorderSelection).call(this, borderId);
|
|
1207
|
+
}), _class_private_field_set(this, _onBeforeCreateRow, (index, amount, source)=>{
|
|
1208
|
+
_class_private_method_get(this, _flushBeforeStructuralChange, flushBeforeStructuralChange).call(this, source);
|
|
1209
|
+
}), _class_private_field_set(this, _onBeforeRemoveRow, (index, amount, physicalRows, source)=>{
|
|
1210
|
+
_class_private_method_get(this, _flushBeforeStructuralChange, flushBeforeStructuralChange).call(this, source);
|
|
1211
|
+
}), _class_private_field_set(this, _onBeforeCreateCol, (index, amount, source)=>{
|
|
1212
|
+
_class_private_method_get(this, _flushBeforeStructuralChange, flushBeforeStructuralChange).call(this, source);
|
|
1213
|
+
}), _class_private_field_set(this, _onBeforeRemoveCol, (index, amount, physicalColumns, source)=>{
|
|
1214
|
+
_class_private_method_get(this, _flushBeforeStructuralChange, flushBeforeStructuralChange).call(this, source);
|
|
1215
|
+
}), _class_private_field_set(this, _onAfterCreateRow, (index, amount, source)=>{
|
|
1216
|
+
if (source === 'auto') {
|
|
1217
|
+
return;
|
|
1218
|
+
}
|
|
1219
|
+
_class_private_method_get(this, _shiftBorders, shiftBorders).call(this, 'row', (currentIndex)=>(0, _utils.getShiftedIndexAfterInsert)(currentIndex, index, amount));
|
|
1220
|
+
}), _class_private_field_set(this, _onAfterRemoveRow, (index, amount)=>{
|
|
1221
|
+
_class_private_method_get(this, _shiftBorders, shiftBorders).call(this, 'row', (currentIndex)=>(0, _utils.getShiftedIndexAfterRemove)(currentIndex, index, amount));
|
|
1222
|
+
}), _class_private_field_set(this, _onAfterCreateCol, (index, amount, source)=>{
|
|
1223
|
+
// Auto-inserted columns (e.g. `minSpareCols`) append at the end and, like auto rows, do NOT
|
|
1224
|
+
// shift cell meta in the core (`DataMap#createCol` skips `metaManager.createColumn` for
|
|
1225
|
+
// `source === 'auto'`). Shifting the border model here would then diverge from the meta, so skip
|
|
1226
|
+
// it - mirrors `#onAfterCreateRow`.
|
|
1227
|
+
if (source === 'auto') {
|
|
1228
|
+
return;
|
|
1229
|
+
}
|
|
1230
|
+
_class_private_method_get(this, _shiftBorders, shiftBorders).call(this, 'col', (currentIndex)=>(0, _utils.getShiftedIndexAfterInsert)(currentIndex, index, amount));
|
|
1231
|
+
}), _class_private_field_set(this, _onAfterRemoveCol, (index, amount)=>{
|
|
1232
|
+
_class_private_method_get(this, _shiftBorders, shiftBorders).call(this, 'col', (currentIndex)=>(0, _utils.getShiftedIndexAfterRemove)(currentIndex, index, amount));
|
|
1233
|
+
}), _class_private_field_set(this, _onBeforeRowMove, (movedRows, finalIndex, dropIndex, movePossible)=>{
|
|
1234
|
+
// Snapshot needs the complete model; finish any in-flight progressive load first.
|
|
1235
|
+
_class_private_method_get(this, _flushProgressiveApply, flushProgressiveApply).call(this);
|
|
1236
|
+
_class_private_field_set(this, _rowMoveSnapshot, movePossible ? this.savedBorders.map((border)=>this.hot.toPhysicalRow(border.row)) : null);
|
|
1237
|
+
}), _class_private_field_set(this, _onAfterRowMove, (movedRows, finalIndex, dropIndex, movePossible, orderChanged)=>{
|
|
1238
|
+
const snapshot = _class_private_field_get(this, _rowMoveSnapshot);
|
|
1239
|
+
_class_private_field_set(this, _rowMoveSnapshot, null);
|
|
1240
|
+
if (!snapshot || !orderChanged) {
|
|
1241
|
+
return;
|
|
1242
|
+
}
|
|
1243
|
+
_class_private_method_get(this, _applyMoveSnapshot, applyMoveSnapshot).call(this, 'row', snapshot, (physicalIndex)=>this.hot.toVisualRow(physicalIndex));
|
|
1244
|
+
}), _class_private_field_set(this, _onBeforeColumnMove, (movedColumns, finalIndex, dropIndex, movePossible)=>{
|
|
1245
|
+
// Snapshot needs the complete model; finish any in-flight progressive load first.
|
|
1246
|
+
_class_private_method_get(this, _flushProgressiveApply, flushProgressiveApply).call(this);
|
|
1247
|
+
_class_private_field_set(this, _columnMoveSnapshot, movePossible ? this.savedBorders.map((border)=>this.hot.toPhysicalColumn(border.col)) : null);
|
|
1248
|
+
}), _class_private_field_set(this, _onAfterColumnMove, (movedColumns, finalIndex, dropIndex, movePossible, orderChanged)=>{
|
|
1249
|
+
const snapshot = _class_private_field_get(this, _columnMoveSnapshot);
|
|
1250
|
+
_class_private_field_set(this, _columnMoveSnapshot, null);
|
|
1251
|
+
if (!snapshot || !orderChanged) {
|
|
1252
|
+
return;
|
|
1253
|
+
}
|
|
1254
|
+
_class_private_method_get(this, _applyMoveSnapshot, applyMoveSnapshot).call(this, 'col', snapshot, (physicalIndex)=>this.hot.toVisualColumn(physicalIndex));
|
|
1255
|
+
});
|
|
1256
|
+
}
|
|
1257
|
+
}
|
|
1258
|
+
function readExistingBordersForMerge(row, column) {
|
|
1259
|
+
const seen = _class_private_field_get(this, _configPassTouched);
|
|
1260
|
+
if (seen === null || !_class_private_field_get(this, _inConfigPass)) {
|
|
1261
|
+
return this.hot.getCellMeta(row, column).borders;
|
|
1262
|
+
}
|
|
1263
|
+
const key = `${row},${column}`;
|
|
1264
|
+
const shouldRead = seen.has(key);
|
|
1265
|
+
seen.add(key);
|
|
1266
|
+
return shouldRead ? this.hot.getCellMeta(row, column).borders : undefined;
|
|
1267
|
+
}
|
|
1268
|
+
function writeBordersMeta(row, column, value) {
|
|
1269
|
+
// Sampled before the write: a `runOnce` veto listener removes itself the moment it fires, so
|
|
1270
|
+
// probing afterwards would read `false` for a write that was in fact vetoed.
|
|
1271
|
+
const isVetoable = this.hot.hasHook(value === null ? 'beforeRemoveCellMeta' : 'beforeSetCellMeta');
|
|
1272
|
+
_class_private_field_set(this, _isInternalMetaWrite, true);
|
|
1273
|
+
try {
|
|
1274
|
+
if (value === null) {
|
|
1275
|
+
this.hot.removeCellMeta(row, column, 'borders');
|
|
1276
|
+
} else {
|
|
1277
|
+
this.hot.setCellMeta(row, column, 'borders', value);
|
|
1278
|
+
}
|
|
1279
|
+
} finally{
|
|
1280
|
+
_class_private_field_set(this, _isInternalMetaWrite, false);
|
|
1281
|
+
}
|
|
1282
|
+
if (!isVetoable) {
|
|
1283
|
+
return true;
|
|
1284
|
+
}
|
|
1285
|
+
// Same effective resolution as `getCellMeta`; the cell already holds stored meta after the
|
|
1286
|
+
// write above, so the transient read returns that stored object with its own properties
|
|
1287
|
+
// observable.
|
|
1288
|
+
const written = this.hot.getCellMetaTransient(row, column);
|
|
1289
|
+
return value === null ? !(0, _object.hasOwnProperty)(written, 'borders') : written.borders === value;
|
|
1290
|
+
}
|
|
1291
|
+
function buildRangeCellBorder(rowIndex, colIndex, customBorder, range) {
|
|
1292
|
+
const existing = _class_private_method_get(this, _readExistingBordersForMerge, readExistingBordersForMerge).call(this, rowIndex, colIndex);
|
|
1293
|
+
const border = isBorderObject(existing) ? (0, _utils.normalizeBorder)((0, _object.deepClone)(existing)) : (0, _utils.createEmptyBorders)(rowIndex, colIndex);
|
|
1294
|
+
let add = 0;
|
|
1295
|
+
const applyEdge = (isEdge, sideKey)=>{
|
|
1296
|
+
// `range.to.row`/`range.to.col` may lie beyond the table; those cells are never iterated.
|
|
1297
|
+
if (isEdge && (0, _object.hasOwnProperty)(customBorder, sideKey)) {
|
|
1298
|
+
border[sideKey] = (0, _utils.resolveRangeBorderSide)(customBorder[sideKey], customBorder.border);
|
|
1299
|
+
add += 1;
|
|
1300
|
+
}
|
|
1301
|
+
};
|
|
1302
|
+
applyEdge(rowIndex === range.from.row, 'top');
|
|
1303
|
+
applyEdge(rowIndex === range.to.row, 'bottom');
|
|
1304
|
+
applyEdge(colIndex === range.from.col, 'start');
|
|
1305
|
+
applyEdge(colIndex === range.to.col, 'end');
|
|
1306
|
+
if (isRecord(customBorder.border)) {
|
|
1307
|
+
border.border = customBorder.border;
|
|
1308
|
+
}
|
|
1309
|
+
return {
|
|
1310
|
+
border,
|
|
1311
|
+
add
|
|
1312
|
+
};
|
|
1313
|
+
}
|
|
1314
|
+
function destroyAllSelections() {
|
|
1315
|
+
const { customSelections } = this.hot.selection.highlight;
|
|
1316
|
+
const owned = new Set(_class_private_field_get(this, _customSelectionsCache).values());
|
|
1317
|
+
for(let index = customSelections.length - 1; index >= 0; index--){
|
|
1318
|
+
if (owned.has(customSelections[index])) {
|
|
1319
|
+
customSelections[index].destroy();
|
|
1320
|
+
customSelections.splice(index, 1);
|
|
1321
|
+
}
|
|
1322
|
+
}
|
|
1323
|
+
_class_private_field_get(this, _customSelectionsCache).clear();
|
|
1324
|
+
}
|
|
1325
|
+
function resetBorderModel() {
|
|
1326
|
+
_class_private_method_get(this, _cancelProgressiveApply, cancelProgressiveApply).call(this);
|
|
1327
|
+
// A `beforeRemoveCellMeta` listener can veto the removal. Those cells keep their `borders` meta,
|
|
1328
|
+
// so they keep their model entry too - clearing the model around them would leave `getBorders()`
|
|
1329
|
+
// and `getCellMeta().borders` disagreeing.
|
|
1330
|
+
const kept = [];
|
|
1331
|
+
(0, _array.arrayEach)(this.savedBorders, (border)=>{
|
|
1332
|
+
if (!_class_private_method_get(this, _writeBordersMeta, writeBordersMeta).call(this, border.row, border.col, null)) {
|
|
1333
|
+
kept.push(border);
|
|
1334
|
+
}
|
|
1335
|
+
});
|
|
1336
|
+
this.savedBorders = kept;
|
|
1337
|
+
_class_private_method_get(this, _rebuildSavedBordersIndex, rebuildSavedBordersIndex).call(this);
|
|
1338
|
+
_class_private_field_get(this, _bordersByRow).clear();
|
|
1339
|
+
_class_private_field_set(this, _bordersByRowDirty, true);
|
|
1340
|
+
_class_private_method_get(this, _destroyAllSelections, destroyAllSelections).call(this);
|
|
1341
|
+
}
|
|
1342
|
+
function rebuildBordersByRow() {
|
|
1343
|
+
_class_private_field_get(this, _bordersByRow).clear();
|
|
1344
|
+
(0, _array.arrayEach)(this.savedBorders, (border)=>{
|
|
1345
|
+
const rowBorders = _class_private_field_get(this, _bordersByRow).get(border.row);
|
|
1346
|
+
if (rowBorders) {
|
|
1347
|
+
rowBorders.push(border);
|
|
1348
|
+
} else {
|
|
1349
|
+
_class_private_field_get(this, _bordersByRow).set(border.row, [
|
|
1350
|
+
border
|
|
1351
|
+
]);
|
|
1352
|
+
}
|
|
1353
|
+
});
|
|
1354
|
+
_class_private_field_set(this, _bordersByRowDirty, false);
|
|
1355
|
+
}
|
|
1356
|
+
function indexBorderByRow(border) {
|
|
1357
|
+
if (_class_private_field_get(this, _bordersByRowDirty)) {
|
|
1358
|
+
return;
|
|
1359
|
+
}
|
|
1360
|
+
// A border removed by `checkSavedBorders` (all four sides hidden) is no longer in the model, so
|
|
1361
|
+
// it must leave the index rather than enter it.
|
|
1362
|
+
if (!_class_private_field_get(this, _savedBordersIndex).has(border.id)) {
|
|
1363
|
+
_class_private_method_get(this, _unindexBorderByRow, unindexBorderByRow).call(this, border.row, border.id);
|
|
1364
|
+
return;
|
|
1365
|
+
}
|
|
1366
|
+
const rowBorders = _class_private_field_get(this, _bordersByRow).get(border.row);
|
|
1367
|
+
if (!rowBorders) {
|
|
1368
|
+
_class_private_field_get(this, _bordersByRow).set(border.row, [
|
|
1369
|
+
border
|
|
1370
|
+
]);
|
|
1371
|
+
return;
|
|
1372
|
+
}
|
|
1373
|
+
const at = rowBorders.findIndex((indexed)=>indexed.id === border.id);
|
|
1374
|
+
if (at === -1) {
|
|
1375
|
+
rowBorders.push(border);
|
|
1376
|
+
} else {
|
|
1377
|
+
rowBorders[at] = border;
|
|
1378
|
+
}
|
|
1379
|
+
}
|
|
1380
|
+
function unindexBorderByRow(row, borderId) {
|
|
1381
|
+
if (_class_private_field_get(this, _bordersByRowDirty)) {
|
|
1382
|
+
return;
|
|
1383
|
+
}
|
|
1384
|
+
const rowBorders = _class_private_field_get(this, _bordersByRow).get(row);
|
|
1385
|
+
if (!rowBorders) {
|
|
1386
|
+
return;
|
|
1387
|
+
}
|
|
1388
|
+
const at = rowBorders.findIndex((indexed)=>indexed.id === borderId);
|
|
1389
|
+
if (at === -1) {
|
|
1390
|
+
return;
|
|
1391
|
+
}
|
|
1392
|
+
rowBorders.splice(at, 1);
|
|
1393
|
+
if (rowBorders.length === 0) {
|
|
1394
|
+
_class_private_field_get(this, _bordersByRow).delete(row);
|
|
1395
|
+
}
|
|
1396
|
+
}
|
|
1397
|
+
function syncViewportSelections() {
|
|
1398
|
+
if (_class_private_field_get(this, _bordersByRowDirty)) {
|
|
1399
|
+
_class_private_method_get(this, _rebuildBordersByRow, rebuildBordersByRow).call(this);
|
|
1400
|
+
}
|
|
1401
|
+
const view = this.hot.view;
|
|
1402
|
+
const firstRow = view.getFirstRenderedVisibleRow();
|
|
1403
|
+
const lastRow = view.getLastRenderedVisibleRow();
|
|
1404
|
+
const firstColumn = view.getFirstRenderedVisibleColumn();
|
|
1405
|
+
const lastColumn = view.getLastRenderedVisibleColumn();
|
|
1406
|
+
// Nothing rendered (e.g. detached table or headers only) - drop the whole working set.
|
|
1407
|
+
if (firstRow === null || lastRow === null || firstColumn === null || lastColumn === null) {
|
|
1408
|
+
if (_class_private_field_get(this, _customSelectionsCache).size > 0) {
|
|
1409
|
+
_class_private_method_get(this, _destroyAllSelections, destroyAllSelections).call(this);
|
|
1410
|
+
}
|
|
1411
|
+
return;
|
|
1412
|
+
}
|
|
1413
|
+
// Frozen rows/columns are rendered by the overlay clones even when the master rendered range
|
|
1414
|
+
// excludes them, so the working window is the union of the frozen areas and the master range.
|
|
1415
|
+
const settings = this.hot.getSettings();
|
|
1416
|
+
const fixedRowsTop = Number(settings.fixedRowsTop) || 0;
|
|
1417
|
+
const fixedRowsBottom = Number(settings.fixedRowsBottom) || 0;
|
|
1418
|
+
const fixedColumnsStart = Number(settings.fixedColumnsStart) || 0;
|
|
1419
|
+
const totalRows = this.hot.countRows();
|
|
1420
|
+
const totalColumns = this.hot.countCols();
|
|
1421
|
+
const rowRanges = (0, _utils.getViewportUnionRanges)(firstRow, lastRow, fixedRowsTop, fixedRowsBottom, totalRows);
|
|
1422
|
+
const shouldBeVisible = new Set();
|
|
1423
|
+
(0, _array.arrayEach)(rowRanges, ([fromRow, toRow])=>{
|
|
1424
|
+
for(let row = fromRow; row <= toRow; row++){
|
|
1425
|
+
const rowBorders = _class_private_field_get(this, _bordersByRow).get(row);
|
|
1426
|
+
if (!rowBorders) {
|
|
1427
|
+
continue; // eslint-disable-line no-continue
|
|
1428
|
+
}
|
|
1429
|
+
(0, _array.arrayEach)(rowBorders, (border)=>{
|
|
1430
|
+
if ((0, _utils.isIndexInViewportUnion)(border.col, firstColumn, lastColumn, fixedColumnsStart, 0, totalColumns)) {
|
|
1431
|
+
shouldBeVisible.add(border.id);
|
|
1432
|
+
if (!_class_private_field_get(this, _customSelectionsCache).has(border.id)) {
|
|
1433
|
+
_class_private_method_get(this, _addSelectionForBorder, addSelectionForBorder).call(this, border);
|
|
1434
|
+
}
|
|
1435
|
+
}
|
|
1436
|
+
});
|
|
1437
|
+
}
|
|
1438
|
+
});
|
|
1439
|
+
// Remove selections that scrolled out of the rendered range.
|
|
1440
|
+
(0, _array.arrayEach)(Array.from(_class_private_field_get(this, _customSelectionsCache).keys()), (borderId)=>{
|
|
1441
|
+
if (!shouldBeVisible.has(borderId)) {
|
|
1442
|
+
_class_private_method_get(this, _destroyBorderSelection, destroyBorderSelection).call(this, borderId);
|
|
1443
|
+
}
|
|
1444
|
+
});
|
|
1445
|
+
}
|
|
1446
|
+
function addSelectionForBorder(border) {
|
|
1447
|
+
const borderCoords = this.hot._createCellCoords(border.row, border.col);
|
|
1448
|
+
const visualCellRange = this.hot._createCellRange(borderCoords, borderCoords, borderCoords);
|
|
1449
|
+
const { customSelections } = this.hot.selection.highlight;
|
|
1450
|
+
this.hot.selection.highlight.addCustomSelection({
|
|
1451
|
+
border,
|
|
1452
|
+
visualCellRange
|
|
1453
|
+
});
|
|
1454
|
+
_class_private_field_get(this, _customSelectionsCache).set(border.id, customSelections[customSelections.length - 1]);
|
|
1455
|
+
}
|
|
1456
|
+
function rebuildSavedBordersIndex() {
|
|
1457
|
+
_class_private_field_get(this, _savedBordersIndex).clear();
|
|
1458
|
+
(0, _array.arrayEach)(this.savedBorders, (border, index)=>{
|
|
1459
|
+
_class_private_field_get(this, _savedBordersIndex).set(border.id, index);
|
|
1460
|
+
});
|
|
1461
|
+
}
|
|
1462
|
+
function resolveProgressiveSetting() {
|
|
1463
|
+
const setting = this.hot.getSettings().customBordersProgressive;
|
|
1464
|
+
if (setting === true) {
|
|
1465
|
+
return {
|
|
1466
|
+
enabled: true,
|
|
1467
|
+
chunkSize: DEFAULT_PROGRESSIVE_CHUNK_SIZE
|
|
1468
|
+
};
|
|
1469
|
+
}
|
|
1470
|
+
if (isRecord(setting)) {
|
|
1471
|
+
const size = typeof setting.chunkSize === 'number' && setting.chunkSize > 0 ? Math.floor(setting.chunkSize) : DEFAULT_PROGRESSIVE_CHUNK_SIZE;
|
|
1472
|
+
return {
|
|
1473
|
+
enabled: true,
|
|
1474
|
+
chunkSize: size
|
|
1475
|
+
};
|
|
1476
|
+
}
|
|
1477
|
+
return {
|
|
1478
|
+
enabled: false,
|
|
1479
|
+
chunkSize: DEFAULT_PROGRESSIVE_CHUNK_SIZE
|
|
1480
|
+
};
|
|
1481
|
+
}
|
|
1482
|
+
function startProgressiveApply(borders, chunkSize) {
|
|
1483
|
+
_class_private_field_set(this, _progressiveToken, _class_private_field_get(this, _progressiveToken) + 1);
|
|
1484
|
+
_class_private_field_set(this, _progressiveQueue, borders);
|
|
1485
|
+
_class_private_field_set(this, _progressiveIndex, 0);
|
|
1486
|
+
_class_private_field_set(this, _progressiveChunkSize, chunkSize);
|
|
1487
|
+
// One first-touch tracking Set shared across every batch (overlap-merge correctness).
|
|
1488
|
+
_class_private_field_set(this, _configPassTouched, new Set());
|
|
1489
|
+
_class_private_method_get(this, _scheduleProgressiveChunk, scheduleProgressiveChunk).call(this, _class_private_field_get(this, _progressiveToken));
|
|
1490
|
+
}
|
|
1491
|
+
function scheduleProgressiveChunk(token) {
|
|
1492
|
+
this.hot._registerTimeout(()=>_class_private_method_get(this, _processProgressiveChunk, processProgressiveChunk).call(this, token), 0);
|
|
1493
|
+
}
|
|
1494
|
+
function processProgressiveChunk(token) {
|
|
1495
|
+
if (token !== _class_private_field_get(this, _progressiveToken) || _class_private_field_get(this, _progressiveQueue) === null) {
|
|
1496
|
+
return;
|
|
1497
|
+
}
|
|
1498
|
+
const queue = _class_private_field_get(this, _progressiveQueue);
|
|
1499
|
+
const end = Math.min(_class_private_field_get(this, _progressiveIndex) + _class_private_field_get(this, _progressiveChunkSize), queue.length);
|
|
1500
|
+
this.createCustomBorders(queue.slice(_class_private_field_get(this, _progressiveIndex), end));
|
|
1501
|
+
_class_private_field_set(this, _progressiveIndex, end);
|
|
1502
|
+
this.hot.render();
|
|
1503
|
+
if (_class_private_field_get(this, _progressiveIndex) >= queue.length) {
|
|
1504
|
+
_class_private_method_get(this, _finishProgressiveApply, finishProgressiveApply).call(this);
|
|
1505
|
+
} else {
|
|
1506
|
+
_class_private_method_get(this, _scheduleProgressiveChunk, scheduleProgressiveChunk).call(this, token);
|
|
735
1507
|
}
|
|
736
1508
|
}
|
|
1509
|
+
function flushProgressiveApply() {
|
|
1510
|
+
if (_class_private_field_get(this, _progressiveQueue) === null) {
|
|
1511
|
+
return;
|
|
1512
|
+
}
|
|
1513
|
+
const queue = _class_private_field_get(this, _progressiveQueue);
|
|
1514
|
+
while(_class_private_field_get(this, _progressiveIndex) < queue.length){
|
|
1515
|
+
const end = Math.min(_class_private_field_get(this, _progressiveIndex) + _class_private_field_get(this, _progressiveChunkSize), queue.length);
|
|
1516
|
+
this.createCustomBorders(queue.slice(_class_private_field_get(this, _progressiveIndex), end));
|
|
1517
|
+
_class_private_field_set(this, _progressiveIndex, end);
|
|
1518
|
+
}
|
|
1519
|
+
_class_private_method_get(this, _finishProgressiveApply, finishProgressiveApply).call(this);
|
|
1520
|
+
}
|
|
1521
|
+
function finishProgressiveApply() {
|
|
1522
|
+
_class_private_field_set(this, _progressiveToken, _class_private_field_get(this, _progressiveToken) + 1);
|
|
1523
|
+
_class_private_field_set(this, _progressiveQueue, null);
|
|
1524
|
+
_class_private_field_set(this, _progressiveIndex, 0);
|
|
1525
|
+
_class_private_field_set(this, _configPassTouched, null);
|
|
1526
|
+
this.hot.runHooks('afterCustomBordersUpdate');
|
|
1527
|
+
}
|
|
1528
|
+
function cancelProgressiveApply() {
|
|
1529
|
+
if (_class_private_field_get(this, _progressiveQueue) === null) {
|
|
1530
|
+
return;
|
|
1531
|
+
}
|
|
1532
|
+
_class_private_field_set(this, _progressiveToken, _class_private_field_get(this, _progressiveToken) + 1);
|
|
1533
|
+
_class_private_field_set(this, _progressiveQueue, null);
|
|
1534
|
+
_class_private_field_set(this, _progressiveIndex, 0);
|
|
1535
|
+
_class_private_field_set(this, _configPassTouched, null);
|
|
1536
|
+
}
|
|
737
1537
|
function validateStyleSettings(customBorders) {
|
|
738
1538
|
customBorders.forEach((customBorder)=>{
|
|
739
1539
|
Object.keys(customBorder).forEach((key)=>{
|
|
@@ -754,6 +1554,66 @@ The border style will be ignored.`);
|
|
|
754
1554
|
});
|
|
755
1555
|
});
|
|
756
1556
|
}
|
|
1557
|
+
function shiftBorders(axis, mapIndex) {
|
|
1558
|
+
// The in-flight progressive load was already flushed from the matching `before*` hook, while the
|
|
1559
|
+
// queue's coordinates still matched the grid. Flushing here instead would be too late: the core
|
|
1560
|
+
// shifts the cell meta before it fires the `after*` hooks, so the flushed entries would write
|
|
1561
|
+
// their `borders` meta onto post-shift cells the configuration never targeted.
|
|
1562
|
+
const survivors = [];
|
|
1563
|
+
(0, _array.arrayEach)(this.savedBorders, (border)=>{
|
|
1564
|
+
const nextIndex = mapIndex(border[axis]);
|
|
1565
|
+
if (nextIndex === -1) {
|
|
1566
|
+
return;
|
|
1567
|
+
}
|
|
1568
|
+
border[axis] = nextIndex;
|
|
1569
|
+
border.id = (0, _utils.createId)(border.row, border.col);
|
|
1570
|
+
survivors.push(border);
|
|
1571
|
+
});
|
|
1572
|
+
this.savedBorders.length = 0;
|
|
1573
|
+
(0, _array.arrayEach)(survivors, (border)=>this.savedBorders.push(border));
|
|
1574
|
+
// No render here: the `afterCreate*`/`afterRemove*` hooks fire from inside `alter()`, before it
|
|
1575
|
+
// finishes rewriting the column/row headers, and `alter()` renders once it is done. Forcing a
|
|
1576
|
+
// render mid-`alter()` paints a header row the closing render then treats as up to date, so the
|
|
1577
|
+
// labels stay bound to their pre-insert columns while the new column is appended at the end -
|
|
1578
|
+
// clicking a header then selects a different column than the one the label sits on (#11031).
|
|
1579
|
+
_class_private_method_get(this, _rebuildWorkingSetFromModel, rebuildWorkingSetFromModel).call(this, false);
|
|
1580
|
+
}
|
|
1581
|
+
function applyMoveSnapshot(axis, snapshot, toVisualIndex) {
|
|
1582
|
+
(0, _array.arrayEach)(this.savedBorders, (border, index)=>{
|
|
1583
|
+
const physicalIndex = snapshot[index];
|
|
1584
|
+
if (typeof physicalIndex !== 'number') {
|
|
1585
|
+
return;
|
|
1586
|
+
}
|
|
1587
|
+
const visualIndex = toVisualIndex(physicalIndex);
|
|
1588
|
+
if (typeof visualIndex !== 'number') {
|
|
1589
|
+
return;
|
|
1590
|
+
}
|
|
1591
|
+
border[axis] = visualIndex;
|
|
1592
|
+
border.id = (0, _utils.createId)(border.row, border.col);
|
|
1593
|
+
});
|
|
1594
|
+
_class_private_method_get(this, _rebuildWorkingSetFromModel, rebuildWorkingSetFromModel).call(this);
|
|
1595
|
+
}
|
|
1596
|
+
function rebuildWorkingSetFromModel(render = true) {
|
|
1597
|
+
_class_private_method_get(this, _rebuildSavedBordersIndex, rebuildSavedBordersIndex).call(this);
|
|
1598
|
+
_class_private_field_set(this, _bordersByRowDirty, true);
|
|
1599
|
+
_class_private_method_get(this, _destroyAllSelections, destroyAllSelections).call(this);
|
|
1600
|
+
if (render) {
|
|
1601
|
+
this.hot.render();
|
|
1602
|
+
}
|
|
1603
|
+
}
|
|
1604
|
+
function destroyBorderSelection(borderId) {
|
|
1605
|
+
const customSelection = _class_private_field_get(this, _customSelectionsCache).get(borderId);
|
|
1606
|
+
if (!customSelection) {
|
|
1607
|
+
return;
|
|
1608
|
+
}
|
|
1609
|
+
const { customSelections } = this.hot.selection.highlight;
|
|
1610
|
+
const index = customSelections.indexOf(customSelection);
|
|
1611
|
+
if (index > -1) {
|
|
1612
|
+
customSelections.splice(index, 1);
|
|
1613
|
+
}
|
|
1614
|
+
customSelection.destroy();
|
|
1615
|
+
_class_private_field_get(this, _customSelectionsCache).delete(borderId);
|
|
1616
|
+
}
|
|
757
1617
|
function onAfterContextMenuDefaultOptions(rawOptions) {
|
|
758
1618
|
if (!this.hot.getSettings()[PLUGIN_KEY]) {
|
|
759
1619
|
return;
|
|
@@ -795,5 +1655,24 @@ function onAfterContextMenuDefaultOptions(rawOptions) {
|
|
|
795
1655
|
});
|
|
796
1656
|
}
|
|
797
1657
|
function onAfterInit() {
|
|
798
|
-
this.changeBorderSettings();
|
|
1658
|
+
this.changeBorderSettings(false);
|
|
1659
|
+
if (this.savedBorders.length > 0) {
|
|
1660
|
+
this.hot.addHookOnce('afterInit', ()=>this.hot.render());
|
|
1661
|
+
}
|
|
1662
|
+
}
|
|
1663
|
+
function scheduleMetaSyncRender() {
|
|
1664
|
+
if (_class_private_field_get(this, _isMetaSyncRenderScheduled)) {
|
|
1665
|
+
return;
|
|
1666
|
+
}
|
|
1667
|
+
_class_private_field_set(this, _isMetaSyncRenderScheduled, true);
|
|
1668
|
+
this.hot._registerMicrotask(()=>{
|
|
1669
|
+
_class_private_field_set(this, _isMetaSyncRenderScheduled, false);
|
|
1670
|
+
this.hot.render();
|
|
1671
|
+
});
|
|
1672
|
+
}
|
|
1673
|
+
function flushBeforeStructuralChange(source) {
|
|
1674
|
+
if (source === 'auto') {
|
|
1675
|
+
return;
|
|
1676
|
+
}
|
|
1677
|
+
_class_private_method_get(this, _flushProgressiveApply, flushProgressiveApply).call(this);
|
|
799
1678
|
}
|