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
package/core.js
CHANGED
|
@@ -131,6 +131,7 @@ const _console = require("./helpers/console");
|
|
|
131
131
|
const _errors = require("./helpers/errors");
|
|
132
132
|
const _a11yAnnouncer = require("./utils/a11yAnnouncer");
|
|
133
133
|
const _licenseNotification = require("./utils/licenseNotification");
|
|
134
|
+
const _licenseBranding = require("./utils/licenseBranding");
|
|
134
135
|
const _valueAccessors = require("./utils/valueAccessors");
|
|
135
136
|
const _engine = require("./themes/engine");
|
|
136
137
|
const _layout = require("./core/layout");
|
|
@@ -190,10 +191,59 @@ let activeGuid = null;
|
|
|
190
191
|
* @type {Map<string, Core>}
|
|
191
192
|
*/ const foreignHotInstances = new Map();
|
|
192
193
|
/**
|
|
193
|
-
*
|
|
194
|
+
* Configuration options removed from the public API, with the version that removed them.
|
|
195
|
+
* Configuring one prints a one-time warning; the value is ignored.
|
|
194
196
|
*
|
|
195
|
-
*
|
|
196
|
-
|
|
197
|
+
* `persistentState` says 17.0.0, not 18.0.0: #12015 removed the plugin, its option, and its hooks
|
|
198
|
+
* in 17.0.0, and no published 17.x or 18.x package carries them. The 18.0.0 changelog entry for
|
|
199
|
+
* #12727 describes deleting a copy that the TypeScript conversion re-created on `develop` after
|
|
200
|
+
* 17.1.0 and that never shipped.
|
|
201
|
+
*
|
|
202
|
+
* `datePickerConfig` is deliberately absent: `DateEditor#prepare` already warns about it, and it
|
|
203
|
+
* also sees the per-cell forms that `warnAboutRemovedOptions` cannot.
|
|
204
|
+
*
|
|
205
|
+
* @type {ReadonlyArray<RemovedOption>}
|
|
206
|
+
*/ const REMOVED_OPTIONS = [
|
|
207
|
+
{
|
|
208
|
+
name: 'persistentState',
|
|
209
|
+
version: '17.0.0',
|
|
210
|
+
migrationUrl: 'https://handsontable.com/docs/javascript-data-grid/changelog-17/'
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
name: 'correctFormat',
|
|
214
|
+
version: '18.0.0',
|
|
215
|
+
migrationUrl: 'https://handsontable.com/docs/javascript-data-grid/migration-from-17.1-to-18.0/'
|
|
216
|
+
}
|
|
217
|
+
];
|
|
218
|
+
/**
|
|
219
|
+
* Warns once per removed option found anywhere in the passed settings.
|
|
220
|
+
*
|
|
221
|
+
* Scans the top level, every entry of an array-form `columns`, and every entry of the declarative
|
|
222
|
+
* `cell` array, because the removed options are not all global: `correctFormat` is a cell option,
|
|
223
|
+
* so `columns: [{ correctFormat: true }]` and `cell: [{ row, col, correctFormat: true }]` are its
|
|
224
|
+
* common forms, and a top-level-only check would leave those callers with a clean console and
|
|
225
|
+
* silently dropped date auto-correction.
|
|
226
|
+
*
|
|
227
|
+
* The remaining per-cell forms - a `cells` function, or meta set through `setCellMeta` - stay
|
|
228
|
+
* uncovered. Reaching them means inspecting resolved meta for every cell on every render, which
|
|
229
|
+
* costs more than the warning is worth.
|
|
230
|
+
*
|
|
231
|
+
* @param {object} settings Settings object passed to `updateSettings`.
|
|
232
|
+
*/ function warnAboutRemovedOptions(settings) {
|
|
233
|
+
const columns = Array.isArray(settings.columns) ? settings.columns : [];
|
|
234
|
+
const cells = Array.isArray(settings.cell) ? settings.cell : [];
|
|
235
|
+
const scopes = [
|
|
236
|
+
settings,
|
|
237
|
+
...columns,
|
|
238
|
+
...cells
|
|
239
|
+
];
|
|
240
|
+
REMOVED_OPTIONS.forEach(({ name, version, migrationUrl })=>{
|
|
241
|
+
const isUsed = scopes.some((scope)=>(0, _object.isObject)(scope) && (0, _mixed.isDefined)(scope[name]));
|
|
242
|
+
if (isUsed) {
|
|
243
|
+
(0, _console.removedWarnOnce)(`Core.removedOption.${name}`, `The "${name}" setting was removed in Handsontable ${version} and is ignored. ` + `See ${migrationUrl} for the migration path.`);
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
}
|
|
197
247
|
function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
198
248
|
let instance = this;
|
|
199
249
|
const eventManager = new _eventManager.default(instance);
|
|
@@ -204,6 +254,12 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
204
254
|
let focusGridManager;
|
|
205
255
|
let viewportScroller;
|
|
206
256
|
let firstRun = true;
|
|
257
|
+
// Guards the "colorScheme/density need the theme engine" warning so it is logged once per
|
|
258
|
+
// instance instead of on every `updateSettings()` call that carries the options.
|
|
259
|
+
let themeOverridesWarningShown = false;
|
|
260
|
+
// Set only when the table is initialized while invisible (see the `init` method). Kept in the closure, not on
|
|
261
|
+
// the instance, because `destroy` nulls every instance property before it could be read there.
|
|
262
|
+
let visibilityObserver = null;
|
|
207
263
|
const mergedUserSettings = {
|
|
208
264
|
...userSettings.initialState,
|
|
209
265
|
...userSettings
|
|
@@ -295,6 +351,9 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
295
351
|
'handsontable'
|
|
296
352
|
]);
|
|
297
353
|
(0, _element.addClass)(this.rootWrapperElement, 'ht-root-wrapper');
|
|
354
|
+
if ((0, _element.isShadowRoot)(this.rootContainer.getRootNode())) {
|
|
355
|
+
(0, _element.addClass)(this.rootWrapperElement, 'ht-shadow-dom');
|
|
356
|
+
}
|
|
298
357
|
(0, _element.addClass)(this.rootSlotTopElement, 'ht-slot-top');
|
|
299
358
|
(0, _element.addClass)(this.rootGridElement, 'ht-grid');
|
|
300
359
|
(0, _element.addClass)(this.rootGridContentElement, 'ht-grid-content');
|
|
@@ -493,6 +552,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
493
552
|
const editor = instance.getActiveEditor();
|
|
494
553
|
return editor ? editor.isOpened() : false;
|
|
495
554
|
},
|
|
555
|
+
isPluginEnabled: (pluginName)=>instance.getPlugin(pluginName)?.enabled === true,
|
|
496
556
|
countRenderableColumns: ()=>instance.view.countRenderableColumns(),
|
|
497
557
|
countRenderableRows: ()=>instance.view.countRenderableRows(),
|
|
498
558
|
countRowHeaders: ()=>instance.countRowHeaders(),
|
|
@@ -640,8 +700,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
640
700
|
* format `[[index, amount], [index, amount]...]` this can be used to remove
|
|
641
701
|
* non-consecutive columns or rows in one call.
|
|
642
702
|
* @param {number} [amount=1] Amount of rows or columns to remove.
|
|
643
|
-
* @param {string} [source] Optional. Source
|
|
644
|
-
* @param {boolean} [keepEmptyRows] Optional. Flag for
|
|
703
|
+
* @param {string} [source] Optional. Source indicator passed to related hooks.
|
|
704
|
+
* @param {boolean} [keepEmptyRows] Optional. Flag for skipping the post-alter empty row and column adjustment.
|
|
645
705
|
*/ alter (action, index, amount = 1, source, keepEmptyRows) {
|
|
646
706
|
const skipAlter = instance.runHooks('beforeAlter', action, index, amount, source, keepEmptyRows);
|
|
647
707
|
if (skipAlter === false) {
|
|
@@ -699,6 +759,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
699
759
|
if (Number.isInteger(groupIndex)) {
|
|
700
760
|
groupIndex = Math.max(groupIndex - offset, 0);
|
|
701
761
|
}
|
|
762
|
+
const totalRowsBefore = instance.countRows();
|
|
702
763
|
// TODO: for datamap.removeRow index should be passed as it is (with undefined and null values). If not, the logic
|
|
703
764
|
// inside the datamap.removeRow breaks the removing functionality.
|
|
704
765
|
const wasRemoved = datamap.removeRow(groupIndex, groupAmount, source);
|
|
@@ -717,8 +778,22 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
717
778
|
tableMeta.fixedRowsTop -= Math.min(groupAmount, fixedRowsTop - calcIndex);
|
|
718
779
|
}
|
|
719
780
|
const fixedRowsBottom = tableMeta.fixedRowsBottom;
|
|
720
|
-
if (fixedRowsBottom
|
|
721
|
-
|
|
781
|
+
if (fixedRowsBottom) {
|
|
782
|
+
// Count how many of the removed rows belonged to the bottom fixed rows. Those rows occupied
|
|
783
|
+
// the `[totalRowsBefore - fixedRowsBottom, totalRowsBefore - 1]` range, so the boundary has
|
|
784
|
+
// to be compared with the row count from *before* the removal. Rows removed above that
|
|
785
|
+
// range keep the setting untouched (DEV-2551).
|
|
786
|
+
const removedRowsCount = totalRowsBefore - totalRows;
|
|
787
|
+
// With no index passed, `datamap.removeRow` takes the rows from the end, so the removal
|
|
788
|
+
// starts that many rows before the last one. `calcIndex` points at the last row then, not
|
|
789
|
+
// at the first removed one.
|
|
790
|
+
const firstRemovedRowIndex = Number.isInteger(groupIndex) ? calcIndex : Math.max(totalRowsBefore - removedRowsCount, 0);
|
|
791
|
+
const firstFixedRowIndex = totalRowsBefore - fixedRowsBottom;
|
|
792
|
+
const lastRemovedRowIndex = Math.min(firstRemovedRowIndex + removedRowsCount - 1, totalRowsBefore - 1);
|
|
793
|
+
const removedFixedRowsCount = lastRemovedRowIndex - Math.max(firstRemovedRowIndex, firstFixedRowIndex) + 1;
|
|
794
|
+
if (removedFixedRowsCount > 0) {
|
|
795
|
+
tableMeta.fixedRowsBottom -= Math.min(removedFixedRowsCount, fixedRowsBottom);
|
|
796
|
+
}
|
|
722
797
|
}
|
|
723
798
|
if (totalRows === 0) {
|
|
724
799
|
selection.deselect();
|
|
@@ -781,7 +856,11 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
781
856
|
}
|
|
782
857
|
const fixedColumnsStart = tableMeta.fixedColumnsStart;
|
|
783
858
|
if (fixedColumnsStart >= calcIndex + 1) {
|
|
784
|
-
|
|
859
|
+
// Since 12.0.0, the "fixedColumnsLeft" is replaced with the "fixedColumnsStart" option.
|
|
860
|
+
// However, keeping the old name still in effect. When both option names are used together,
|
|
861
|
+
// the error is thrown. To prevent that, the engine needs to modify the original option key
|
|
862
|
+
// to bypass the validation.
|
|
863
|
+
tableMeta._fixedColumnsStart -= Math.min(groupAmount, fixedColumnsStart - calcIndex);
|
|
785
864
|
}
|
|
786
865
|
if (Array.isArray(tableMeta.colHeaders)) {
|
|
787
866
|
if (typeof physicalColumnIndex === 'undefined') {
|
|
@@ -847,9 +926,22 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
847
926
|
}
|
|
848
927
|
{
|
|
849
928
|
let emptyCols = 0;
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
929
|
+
const canCreateSpareCols = minSpareCols > 0 && !tableMeta.columns && instance.dataType === 'array';
|
|
930
|
+
// Count trailing empty columns, but only when the `minSpareCols` branch below can consume
|
|
931
|
+
// the result, and never beyond `minSpareCols` itself. Verifying that a column is empty
|
|
932
|
+
// scans every row of that column, and this method runs after every change batch - an
|
|
933
|
+
// uncapped count (the previous `countEmptyCols(true)` call) paid O(empty columns * rows)
|
|
934
|
+
// per edit and also ran when only `minCols` was set, where the result was never used.
|
|
935
|
+
if (canCreateSpareCols) {
|
|
936
|
+
for(let visualIndex = instance.countCols() - 1; visualIndex >= 0; visualIndex--){
|
|
937
|
+
if (!instance.isEmptyCol(visualIndex)) {
|
|
938
|
+
break;
|
|
939
|
+
}
|
|
940
|
+
emptyCols += 1;
|
|
941
|
+
if (emptyCols >= minSpareCols) {
|
|
942
|
+
break;
|
|
943
|
+
}
|
|
944
|
+
}
|
|
853
945
|
}
|
|
854
946
|
let nrOfColumns = instance.countCols();
|
|
855
947
|
// should I add empty cols to meet minCols?
|
|
@@ -863,7 +955,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
863
955
|
});
|
|
864
956
|
}
|
|
865
957
|
// should I add empty cols to meet minSpareCols?
|
|
866
|
-
if (
|
|
958
|
+
if (canCreateSpareCols && emptyCols < minSpareCols) {
|
|
867
959
|
nrOfColumns = instance.countCols();
|
|
868
960
|
const emptyColsMissing = minSpareCols - emptyCols;
|
|
869
961
|
const colsToCreate = Math.min(emptyColsMissing, tableMeta.maxCols - nrOfColumns);
|
|
@@ -1001,7 +1093,11 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
1001
1093
|
clen = Math.max(colInputLength, colSelectionLength);
|
|
1002
1094
|
}
|
|
1003
1095
|
current.col = start.col;
|
|
1004
|
-
|
|
1096
|
+
// The transient read keeps a bulk paste/fill from permanently materializing one meta
|
|
1097
|
+
// object per target cell - this loop only reads (`skipRowOnPaste`, `skipColumnOnPaste`,
|
|
1098
|
+
// `readOnly`, `valueSetter`, `parsePastedValue`); the write itself goes through the
|
|
1099
|
+
// data layer.
|
|
1100
|
+
cellMeta = instance.getCellMetaTransient(current.row, current.col);
|
|
1005
1101
|
if ((source === 'CopyPaste.paste' || source === 'Autofill.fill' || source === 'autofill.fill') && cellMeta.skipRowOnPaste) {
|
|
1006
1102
|
skippedRow += 1;
|
|
1007
1103
|
current.row += 1;
|
|
@@ -1015,7 +1111,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
1015
1111
|
if (end && current.col > end.col && colSelectionLength > colInputLength || !tableMeta.allowInsertColumn && current.col > instance.countCols() - 1 || current.col >= tableMeta.maxCols) {
|
|
1016
1112
|
break;
|
|
1017
1113
|
}
|
|
1018
|
-
cellMeta = instance.
|
|
1114
|
+
cellMeta = instance.getCellMetaTransient(current.row, current.col);
|
|
1019
1115
|
if ((source === 'CopyPaste.paste' || source === 'Autofill.fill' || source === 'autofill.fill') && cellMeta.skipColumnOnPaste) {
|
|
1020
1116
|
skippedColumn += 1;
|
|
1021
1117
|
current.col += 1;
|
|
@@ -1138,7 +1234,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
1138
1234
|
const themeName = tableMeta.themeName;
|
|
1139
1235
|
const rootContainerThemeClassName = (0, _themes.getThemeClassName)(instance.rootContainer);
|
|
1140
1236
|
if ((0, _rootInstance.isRootInstance)(instance) && !rootContainerThemeClassName && ((0, _object.isObject)(theme) || !theme && !themeName)) {
|
|
1141
|
-
initializeThemeManager(theme);
|
|
1237
|
+
initializeThemeManager(theme, readStoredThemeOverrides());
|
|
1142
1238
|
}
|
|
1143
1239
|
dataSource.setData(tableMeta.data);
|
|
1144
1240
|
instance.runHooks('beforeInit');
|
|
@@ -1153,6 +1249,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
1153
1249
|
if ((0, _rootInstance.isRootInstance)(this)) {
|
|
1154
1250
|
(0, _a11yAnnouncer.install)(instance.rootPortalElement);
|
|
1155
1251
|
(0, _licenseNotification.initLicenseNotification)(instance);
|
|
1252
|
+
(0, _licenseBranding.initLicenseBranding)(instance);
|
|
1156
1253
|
// Keep the edge slots (top, bottom) as wide as the table so their content
|
|
1157
1254
|
// (toolbars, pagination, license notification) aligns with the grid.
|
|
1158
1255
|
const lastEdgeWidths = {
|
|
@@ -1188,7 +1285,12 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
1188
1285
|
this.render();
|
|
1189
1286
|
// Run the logic only if it's the table's initialization and the root element is not visible.
|
|
1190
1287
|
if (!!firstRun && instance.rootElement.offsetParent === null) {
|
|
1191
|
-
(0, _element.observeVisibilityChangeOnce)(instance.rootElement, ()=>{
|
|
1288
|
+
visibilityObserver = (0, _element.observeVisibilityChangeOnce)(instance.rootElement, ()=>{
|
|
1289
|
+
// A delivery carries the state from the moment its snapshot was taken, so it can arrive after the
|
|
1290
|
+
// instance is gone even though `destroy` disconnects the observer.
|
|
1291
|
+
if (!instance || instance.isDestroyed || !instance.view) {
|
|
1292
|
+
return;
|
|
1293
|
+
}
|
|
1192
1294
|
// Update the spreader size cache before rendering.
|
|
1193
1295
|
instance.view._wt.wtOverlays.updateLastSpreaderSize();
|
|
1194
1296
|
instance.view.adjustElementsSize();
|
|
@@ -1202,11 +1304,85 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
1202
1304
|
instance.runHooks('afterInit');
|
|
1203
1305
|
};
|
|
1204
1306
|
/**
|
|
1307
|
+
* Reads the per-instance color scheme and density overrides from a settings object.
|
|
1308
|
+
*
|
|
1309
|
+
* Only the keys actually present are returned, so a missing key keeps the value already applied
|
|
1310
|
+
* instead of resetting it to the theme default.
|
|
1311
|
+
*
|
|
1312
|
+
* @param {object} settings - The settings object to read the overrides from.
|
|
1313
|
+
* @returns {object} The theme overrides object.
|
|
1314
|
+
*/ function readThemeOverrides(settings) {
|
|
1315
|
+
const overrides = {};
|
|
1316
|
+
if ((0, _object.hasOwnProperty)(settings, 'colorScheme')) {
|
|
1317
|
+
overrides.colorScheme = settings.colorScheme;
|
|
1318
|
+
}
|
|
1319
|
+
if ((0, _object.hasOwnProperty)(settings, 'density')) {
|
|
1320
|
+
overrides.density = settings.density;
|
|
1321
|
+
}
|
|
1322
|
+
return overrides;
|
|
1323
|
+
}
|
|
1324
|
+
/**
|
|
1325
|
+
* Reads the color scheme and density currently configured on this instance.
|
|
1326
|
+
*
|
|
1327
|
+
* Unlike `readThemeOverrides()`, this reads the effective values rather than only the keys that
|
|
1328
|
+
* one payload carries. `updateSettings()` stores grid options on the global meta, which the table
|
|
1329
|
+
* meta inherits through its prototype, so an own-property check would miss them. Use this when
|
|
1330
|
+
* rebuilding a ThemeManager, which has to pick up options set by an earlier call.
|
|
1331
|
+
*
|
|
1332
|
+
* @returns {object} The theme overrides object.
|
|
1333
|
+
*/ function readStoredThemeOverrides() {
|
|
1334
|
+
return {
|
|
1335
|
+
colorScheme: tableMeta.colorScheme,
|
|
1336
|
+
density: tableMeta.density
|
|
1337
|
+
};
|
|
1338
|
+
}
|
|
1339
|
+
/**
|
|
1340
|
+
* Applies the `colorScheme` and `density` options to the ThemeManager of this instance.
|
|
1341
|
+
*
|
|
1342
|
+
* The options are per-instance overrides, so the shared theme object stays untouched and other
|
|
1343
|
+
* grids using the same theme keep their own look.
|
|
1344
|
+
*
|
|
1345
|
+
* @param {object} settings - The settings object that may carry the overrides.
|
|
1346
|
+
* @param {boolean} init - `true` when called during initialization. The initial styles are
|
|
1347
|
+
* injected by the ThemeManager constructor, so nothing has to be refreshed in that case.
|
|
1348
|
+
* @returns {boolean} `true` when the overrides changed and `afterSetTheme` still has to run.
|
|
1349
|
+
*/ function applyThemeOverrides(settings, init) {
|
|
1350
|
+
const overrides = readThemeOverrides(settings);
|
|
1351
|
+
if (!(0, _object.hasOwnProperty)(overrides, 'colorScheme') && !(0, _object.hasOwnProperty)(overrides, 'density')) {
|
|
1352
|
+
return false;
|
|
1353
|
+
}
|
|
1354
|
+
if (!instance.themeManager) {
|
|
1355
|
+
// Only complain when a value is actually asked for. Clearing the options is documented, and a
|
|
1356
|
+
// framework wrapper re-sends every prop on each render, so warning on key presence alone
|
|
1357
|
+
// would fill the console for grids that never used these options.
|
|
1358
|
+
const isValueRequested = !(0, _engine.isThemeOverrideEmpty)(overrides.colorScheme) || !(0, _engine.isThemeOverrideEmpty)(overrides.density);
|
|
1359
|
+
if (isValueRequested && !themeOverridesWarningShown) {
|
|
1360
|
+
themeOverridesWarningShown = true;
|
|
1361
|
+
(0, _console.warn)('The `colorScheme` and `density` options require the theme engine, so they have no ' + 'effect when the theme is enabled by a CSS class name. Pass a theme config object or a ' + '`ThemeBuilder` instance to the `theme` option, or remove the `ht-theme-*` class from ' + 'the container element to use the default theme.');
|
|
1362
|
+
}
|
|
1363
|
+
return false;
|
|
1364
|
+
}
|
|
1365
|
+
const hasChanged = instance.themeManager.setOverrides(overrides);
|
|
1366
|
+
if (!hasChanged || init) {
|
|
1367
|
+
return false;
|
|
1368
|
+
}
|
|
1369
|
+
// Clear the cache here so the render at the end of `updateSettings` measures the new sizes.
|
|
1370
|
+
// Rendering here as well would paint once with stale meta and then immediately paint again.
|
|
1371
|
+
instance.stylesHandler.clearCache();
|
|
1372
|
+
return true;
|
|
1373
|
+
}
|
|
1374
|
+
/**
|
|
1205
1375
|
* Initializes the ThemeManager with the given theme configuration.
|
|
1206
1376
|
*
|
|
1207
1377
|
* @param {object|boolean} theme - The theme configuration object or `true` to use the default theme.
|
|
1208
|
-
|
|
1378
|
+
* @param {object} [overrides] - The per-instance color scheme and density overrides.
|
|
1379
|
+
*/ function initializeThemeManager(theme, overrides) {
|
|
1209
1380
|
let themeObject;
|
|
1381
|
+
// Tear the previous manager down first. Without this its `<style>` node stays in the wrapper,
|
|
1382
|
+
// and because a new manager prepends its own node the orphan ends up LATER in source order —
|
|
1383
|
+
// so at the same specificity the orphan's override rules win and the grid can never change or
|
|
1384
|
+
// reset a `colorScheme` or `density` that was set at construction time.
|
|
1385
|
+
instance.themeManager?.destroy();
|
|
1210
1386
|
if (typeof theme === 'undefined') {
|
|
1211
1387
|
if ((0, _themes1.hasTheme)('main')) {
|
|
1212
1388
|
themeObject = (0, _themes1.getTheme)('main');
|
|
@@ -1221,7 +1397,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
1221
1397
|
}
|
|
1222
1398
|
instance.themeManager = (0, _engine.createThemeManager)({
|
|
1223
1399
|
hot: instance,
|
|
1224
|
-
themeObject
|
|
1400
|
+
themeObject,
|
|
1401
|
+
overrides
|
|
1225
1402
|
});
|
|
1226
1403
|
}
|
|
1227
1404
|
/**
|
|
@@ -1309,7 +1486,14 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
1309
1486
|
const visualCol = datamap.propToCol(prop);
|
|
1310
1487
|
let cellProperties;
|
|
1311
1488
|
if (Number.isInteger(visualCol)) {
|
|
1312
|
-
|
|
1489
|
+
// The transient read keeps a bulk change set from permanently materializing one meta
|
|
1490
|
+
// object per changed cell while the validator is looked up. Cells that DO have a
|
|
1491
|
+
// validator switch to the eagerly stored meta object below - validation writes its
|
|
1492
|
+
// `valid` result on the meta, and that result must survive on the stored object.
|
|
1493
|
+
cellProperties = instance.getCellMetaTransient(row, visualCol);
|
|
1494
|
+
if (instance.getCellValidator(cellProperties)) {
|
|
1495
|
+
cellProperties = instance.getCellMeta(row, visualCol);
|
|
1496
|
+
}
|
|
1313
1497
|
} else {
|
|
1314
1498
|
// If there's no requested visual column, we can use the table meta as the cell properties when retrieving
|
|
1315
1499
|
// the cell validator.
|
|
@@ -1344,7 +1528,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
1344
1528
|
*
|
|
1345
1529
|
* @private
|
|
1346
1530
|
* @param {Array} changes Array in form of [row, prop, oldValue, newValue].
|
|
1347
|
-
* @param {string} source String that identifies how this change will be described in changes array (useful in
|
|
1531
|
+
* @param {string} source String that identifies how this change will be described in changes array (useful in {@link Hooks#afterChange} or {@link Hooks#beforeChange} callbacks).
|
|
1348
1532
|
* @fires Hooks#beforeChangeRender
|
|
1349
1533
|
* @fires Hooks#afterChange
|
|
1350
1534
|
*/ function applyChanges(changes, source) {
|
|
@@ -1358,8 +1542,13 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
1358
1542
|
continue;
|
|
1359
1543
|
}
|
|
1360
1544
|
if (tableMeta.allowInsertRow) {
|
|
1545
|
+
// Create the whole missing range in one call - one index-mapper insert and one hook
|
|
1546
|
+
// round instead of one per row. Creating row by row made a paste reaching far below
|
|
1547
|
+
// the last row quadratic in the gap size. The loop re-checks the count so a partial
|
|
1548
|
+
// creation (e.g. a `maxRows` clamp) is detected and the change is skipped.
|
|
1361
1549
|
while(changes[i][0] > instance.countRows() - 1){
|
|
1362
|
-
const
|
|
1550
|
+
const missingRows = changes[i][0] - (instance.countRows() - 1);
|
|
1551
|
+
const { delta: numberOfCreatedRows } = datamap.createRow(undefined, missingRows, {
|
|
1363
1552
|
source: 'auto'
|
|
1364
1553
|
});
|
|
1365
1554
|
if (numberOfCreatedRows === 0) {
|
|
@@ -1370,7 +1559,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
1370
1559
|
}
|
|
1371
1560
|
if (instance.dataType === 'array' && (!tableMeta.columns || tableMeta.columns.length === 0) && tableMeta.allowInsertColumn) {
|
|
1372
1561
|
while(Number(datamap.propToCol(changes[i][1])) > instance.countCols() - 1){
|
|
1373
|
-
const
|
|
1562
|
+
const missingColumns = Number(datamap.propToCol(changes[i][1])) - (instance.countCols() - 1);
|
|
1563
|
+
const { delta: numberOfCreatedColumns } = datamap.createCol(undefined, missingColumns, {
|
|
1374
1564
|
source: 'auto'
|
|
1375
1565
|
});
|
|
1376
1566
|
if (numberOfCreatedColumns === 0) {
|
|
@@ -1540,7 +1730,10 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
1540
1730
|
const visualColumn = datamap.propToCol(prop);
|
|
1541
1731
|
let cellProperties;
|
|
1542
1732
|
if (Number.isInteger(visualColumn)) {
|
|
1543
|
-
|
|
1733
|
+
// The transient read keeps a bulk change set (paste, fill, checkbox toggle over a large
|
|
1734
|
+
// selection) from permanently materializing one meta object per changed cell - the meta
|
|
1735
|
+
// is only read here (`valueSetter`).
|
|
1736
|
+
cellProperties = instance.getCellMetaTransient(row, visualColumn);
|
|
1544
1737
|
} else {
|
|
1545
1738
|
// If there's no requested visual column, we can use the table meta as the cell properties
|
|
1546
1739
|
cellProperties = {
|
|
@@ -1562,7 +1755,9 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
1562
1755
|
* @param {number|Array} row Visual row index or array of changes in format `[[row, col, value],...]`.
|
|
1563
1756
|
* @param {number} [column] Visual column index.
|
|
1564
1757
|
* @param {string} [value] New value.
|
|
1565
|
-
* @param {string} [source] String that identifies how this change will be described in the changes array (useful in afterChange or beforeChange
|
|
1758
|
+
* @param {string} [source] String that identifies how this change will be described in the changes array (useful in {@link Hooks#afterChange} or {@link Hooks#beforeChange} callbacks). Set to 'edit' if left empty.
|
|
1759
|
+
* @fires Hooks#beforeChange
|
|
1760
|
+
* @fires Hooks#afterChange
|
|
1566
1761
|
*/ this.setDataAtCell = function(row, column, value, source) {
|
|
1567
1762
|
const input = setDataInputToArray(row, column, value);
|
|
1568
1763
|
const changes = [];
|
|
@@ -1612,7 +1807,9 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
1612
1807
|
* @param {number|Array} row Visual row index or array of changes in format `[[row, prop, value], ...]`.
|
|
1613
1808
|
* @param {string} prop Property name or the source string (e.g. `'first.name'` or `'0'`).
|
|
1614
1809
|
* @param {string} value Value to be set.
|
|
1615
|
-
* @param {string} [source] String that identifies how this change will be described in changes array (useful in
|
|
1810
|
+
* @param {string} [source] String that identifies how this change will be described in changes array (useful in {@link Hooks#afterChange} or {@link Hooks#beforeChange} callbacks).
|
|
1811
|
+
* @fires Hooks#beforeChange
|
|
1812
|
+
* @fires Hooks#afterChange
|
|
1616
1813
|
*/ this.setDataAtRowProp = function(row, prop, value, source) {
|
|
1617
1814
|
const input = setDataInputToArray(row, prop, value);
|
|
1618
1815
|
const changes = [];
|
|
@@ -1684,7 +1881,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
1684
1881
|
* @memberof Core#
|
|
1685
1882
|
* @function destroyEditor
|
|
1686
1883
|
* @param {boolean} [revertOriginal=false] If `true`, the previous value will be restored. Otherwise, the edited value will be saved.
|
|
1687
|
-
* @param {boolean} [prepareEditorIfNeeded=true] If `true
|
|
1884
|
+
* @param {boolean} [prepareEditorIfNeeded=true] If `true`, the editor under the selected cell will be prepared to open.
|
|
1688
1885
|
*/ this.destroyEditor = function(revertOriginal = false, prepareEditorIfNeeded = true) {
|
|
1689
1886
|
editorManager.closeEditor(revertOriginal);
|
|
1690
1887
|
instance.view.render();
|
|
@@ -1858,8 +2055,10 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
1858
2055
|
*
|
|
1859
2056
|
* @memberof Core#
|
|
1860
2057
|
* @function emptySelectedCells
|
|
1861
|
-
* @param {string} [source] String that identifies how this change will be described in the changes array (useful in afterChange or beforeChange
|
|
2058
|
+
* @param {string} [source] String that identifies how this change will be described in the changes array (useful in {@link Hooks#afterChange} or {@link Hooks#beforeChange} callbacks). Set to 'edit' if left empty.
|
|
1862
2059
|
* @since 0.36.0
|
|
2060
|
+
* @fires Hooks#beforeChange
|
|
2061
|
+
* @fires Hooks#afterChange
|
|
1863
2062
|
*/ this.emptySelectedCells = function(source) {
|
|
1864
2063
|
if (!selection.isSelected() || this.countRows() === 0 || this.countCols() === 0) {
|
|
1865
2064
|
return;
|
|
@@ -1880,7 +2079,9 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
1880
2079
|
}
|
|
1881
2080
|
const collectEmptyCellChanges = (row)=>{
|
|
1882
2081
|
(0, _number.rangeEach)(fromColumn, toColumn, (column)=>{
|
|
1883
|
-
|
|
2082
|
+
// The transient read keeps clearing a large selection from permanently materializing
|
|
2083
|
+
// one meta object per cell - only `readOnly` is read here.
|
|
2084
|
+
if (!this.getCellMetaTransient(row, column).readOnly) {
|
|
1884
2085
|
changes.push([
|
|
1885
2086
|
row,
|
|
1886
2087
|
column,
|
|
@@ -1982,7 +2183,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
1982
2183
|
* to the DOM. While rendering the table all cell renderers are recalled.
|
|
1983
2184
|
*
|
|
1984
2185
|
* Calling this method manually is not recommended. Handsontable tries to render itself by choosing the most
|
|
1985
|
-
* optimal moments in its lifecycle.
|
|
2186
|
+
* optimal moments in its lifecycle. After [setCellMeta()](@/api/core.md#setcellmeta) changes visual cell
|
|
2187
|
+
* properties, call this method to apply them, or wrap multiple calls in [batch()](@/api/core.md#batch).
|
|
1986
2188
|
*
|
|
1987
2189
|
* @memberof Core#
|
|
1988
2190
|
* @function render
|
|
@@ -2223,8 +2425,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
2223
2425
|
* @memberof Core#
|
|
2224
2426
|
* @function updateData
|
|
2225
2427
|
* @since 11.1.0
|
|
2226
|
-
* @param {Array} data An [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects), that contains Handsontable's data
|
|
2227
|
-
* @param {string} [source] The source of the `updateData()` call
|
|
2428
|
+
* @param {Array} data An [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects), that contains Handsontable's data.
|
|
2429
|
+
* @param {string} [source] The source of the `updateData()` call.
|
|
2228
2430
|
* @fires Hooks#beforeUpdateData
|
|
2229
2431
|
* @fires Hooks#afterUpdateData
|
|
2230
2432
|
* @fires Hooks#afterChange
|
|
@@ -2265,8 +2467,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
2265
2467
|
*
|
|
2266
2468
|
* @memberof Core#
|
|
2267
2469
|
* @function loadData
|
|
2268
|
-
* @param {Array} data An [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects), that contains Handsontable's data
|
|
2269
|
-
* @param {string} [source] The source of the `loadData()` call
|
|
2470
|
+
* @param {Array} data An [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects), that contains Handsontable's data.
|
|
2471
|
+
* @param {string} [source] The source of the `loadData()` call.
|
|
2270
2472
|
* @fires Hooks#beforeLoadData
|
|
2271
2473
|
* @fires Hooks#afterLoadData
|
|
2272
2474
|
* @fires Hooks#afterChange
|
|
@@ -2340,11 +2542,17 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
2340
2542
|
this.rowIndexMapper.initToLength(this.countSourceRows());
|
|
2341
2543
|
};
|
|
2342
2544
|
/**
|
|
2343
|
-
* Returns the current
|
|
2344
|
-
*
|
|
2345
|
-
*
|
|
2545
|
+
* Returns the current visual data as a 2D array.
|
|
2546
|
+
*
|
|
2547
|
+
* Unlike the source data (which may be an array of objects), `getData()` always
|
|
2548
|
+
* returns an array of arrays regardless of the original data format. The returned
|
|
2549
|
+
* data reflects the current visual state of the grid: rows and columns are in their
|
|
2550
|
+
* current visual order, after any sorting, filtering, or reordering.
|
|
2346
2551
|
*
|
|
2347
|
-
*
|
|
2552
|
+
* To retrieve the data in its original source format, use the {@link Core#getSourceData} method instead.
|
|
2553
|
+
*
|
|
2554
|
+
* Optionally you can provide a cell range by defining `row`, `column`, `row2`, `column2`
|
|
2555
|
+
* to get only a fragment of the data.
|
|
2348
2556
|
*
|
|
2349
2557
|
* @memberof Core#
|
|
2350
2558
|
* @function getData
|
|
@@ -2352,7 +2560,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
2352
2560
|
* @param {number} [column] From visual column index.
|
|
2353
2561
|
* @param {number} [row2] To visual row index.
|
|
2354
2562
|
* @param {number} [column2] To visual column index.
|
|
2355
|
-
* @returns {Array[]}
|
|
2563
|
+
* @returns {Array[]} A 2D array of cell values in the current visual order.
|
|
2356
2564
|
* @example
|
|
2357
2565
|
* ```js
|
|
2358
2566
|
* // Get all data (in order how it is rendered in the table).
|
|
@@ -2422,11 +2630,19 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
2422
2630
|
* __Note__, that although the `updateSettings` method doesn't overwrite the previously declared settings, it might reset
|
|
2423
2631
|
* the settings made post-initialization. (for example - ignore changes made using the columnResize feature).
|
|
2424
2632
|
*
|
|
2425
|
-
*
|
|
2426
|
-
* (for example, row/column sequence, column width, row height, frozen columns etc.).
|
|
2633
|
+
* Passing `columns` inside the `settings` object resets the states corresponding to rows and columns
|
|
2634
|
+
* (for example, row/column sequence, column width, row height, frozen columns etc.). Passing `data` does not reset these states.
|
|
2635
|
+
*
|
|
2636
|
+
* After initialization, passing `data` calls [`updateData()`](@/api/core.md#updatedata) internally.
|
|
2637
|
+
* The resulting [`beforeUpdateData`](@/api/hooks.md#beforeupdatedata) and
|
|
2638
|
+
* [`afterUpdateData`](@/api/hooks.md#afterupdatedata) hooks receive `"updateSettings"` as their
|
|
2639
|
+
* `source`, while [`afterChange`](@/api/hooks.md#afterchange) receives `null` as its `changes`
|
|
2640
|
+
* argument and `"updateData"` as its `source`. If you call `updateSettings` with `data` inside
|
|
2641
|
+
* `afterChange`, check the hook's `source` to prevent an infinite loop.
|
|
2427
2642
|
*
|
|
2428
|
-
*
|
|
2429
|
-
*
|
|
2643
|
+
* Cell meta set imperatively through [[setCellMeta]] (for example, by the user or the context menu) is preserved across
|
|
2644
|
+
* `updateSettings`, even when `settings` includes `cell`, `cells`, or `columns`. On a direct conflict, a value re-stated
|
|
2645
|
+
* through the declarative `cell` option takes precedence over the preserved imperative value.
|
|
2430
2646
|
*
|
|
2431
2647
|
* Cell meta set imperatively through [[setCellMeta]] (for example, by the user or the context menu) is preserved across
|
|
2432
2648
|
* `updateSettings`, even when `settings` includes `cell`, `cells`, or `columns`. On a direct conflict, a value re-stated
|
|
@@ -2463,6 +2679,10 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
2463
2679
|
if ((0, _mixed.isDefined)(settings.ganttChart)) {
|
|
2464
2680
|
(0, _errors.throwWithCause)('Since 8.0.0 the "ganttChart" setting is no longer supported.');
|
|
2465
2681
|
}
|
|
2682
|
+
warnAboutRemovedOptions(settings);
|
|
2683
|
+
// The `columns` option (or the state its function form reads) may change in this call - drop
|
|
2684
|
+
// getColHeader's index translation cache so it rebuilds against the updated settings.
|
|
2685
|
+
columnsSettingIndexes = null;
|
|
2466
2686
|
if ((0, _mixed.isDefined)(settings.rowHeights) && (0, _mixed.isDefined)(settings.minRowHeights)) {
|
|
2467
2687
|
(0, _console.warn)('Both `rowHeights` and `minRowHeights` are defined in your configuration. ' + 'As one is the alias of the other, only one of them can be used at a time. ' + '`rowHeights` will be used as the row height configuration.');
|
|
2468
2688
|
}
|
|
@@ -2513,20 +2733,26 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
2513
2733
|
const currentThemeName = instance.getCurrentThemeName();
|
|
2514
2734
|
// Use `theme` option if it's a string and differs from current theme (takes priority over `themeName`).
|
|
2515
2735
|
if (themeOptionExists && typeof settings.theme === 'string' && currentThemeName !== settings.theme) {
|
|
2516
|
-
|
|
2517
|
-
|
|
2736
|
+
// `destroy()`, not `unmount()`. Unmounting removes the style node but leaves the manager
|
|
2737
|
+
// subscribed to the shared theme object, so the next theme change re-injects its scoped
|
|
2738
|
+
// rules and the grid gets stuck on whatever override the dead manager still holds.
|
|
2739
|
+
instance.themeManager?.destroy();
|
|
2518
2740
|
instance.useTheme(settings.theme);
|
|
2519
2741
|
// Use `themeName` option if `theme` is not provided and the name differs from current theme.
|
|
2520
2742
|
} else if (themeNameOptionExists && !themeOptionExists && currentThemeName !== settings.themeName) {
|
|
2521
|
-
|
|
2522
|
-
|
|
2743
|
+
// `destroy()`, not `unmount()`. Unmounting removes the style node but leaves the manager
|
|
2744
|
+
// subscribed to the shared theme object, so the next theme change re-injects its scoped
|
|
2745
|
+
// rules and the grid gets stuck on whatever override the dead manager still holds.
|
|
2746
|
+
instance.themeManager?.destroy();
|
|
2523
2747
|
tableMeta.theme = settings.themeName;
|
|
2524
2748
|
tableMeta.themeName = undefined;
|
|
2525
2749
|
instance.useTheme(settings.themeName);
|
|
2526
2750
|
// Initialize or update the themeManager when theme is an object.
|
|
2527
2751
|
} else if ((0, _rootInstance.isRootInstance)(instance) && !rootContainerThemeClassName && (0, _object.isObject)(settings.theme)) {
|
|
2528
2752
|
if (instance.themeManager === null) {
|
|
2529
|
-
|
|
2753
|
+
// Read the overrides from `tableMeta`, not from this payload. The options may have been
|
|
2754
|
+
// set by an earlier call, and the manager being rebuilt here starts with none of them.
|
|
2755
|
+
initializeThemeManager(settings.theme, readStoredThemeOverrides());
|
|
2530
2756
|
instance.useTheme(instance.themeManager.getClassName());
|
|
2531
2757
|
} else {
|
|
2532
2758
|
let themeObject;
|
|
@@ -2540,6 +2766,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
2540
2766
|
}
|
|
2541
2767
|
}
|
|
2542
2768
|
}
|
|
2769
|
+
const themeOverridesChanged = applyThemeOverrides(settings, init);
|
|
2543
2770
|
// Load data or create data map
|
|
2544
2771
|
if (instance.runHooks('hasExternalDataSource') === true) {
|
|
2545
2772
|
// When dataProvider is a complete server-backed config, ignore static data, the plugin loads rows.
|
|
@@ -2657,11 +2884,23 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
2657
2884
|
// width blocks ran) so partial updateSettings calls see the correct state.
|
|
2658
2885
|
// When height IS set, the height block's `overflow: clip` shorthand handles both axes — leave
|
|
2659
2886
|
// overflowX untouched to avoid breaking that shorthand.
|
|
2887
|
+
// Only clip for a definite width. A relative width (`100%`, other percentages, viewport units,
|
|
2888
|
+
// or a `calc()` that mixes them in) fills its container, and content wider than that scrolls
|
|
2889
|
+
// with the window — matching the long-standing behavior where the page gains a horizontal
|
|
2890
|
+
// scrollbar and every column stays reachable. Clipping those would silently hide the off-width
|
|
2891
|
+
// columns with no scrollbar. A definite width (`px`, `em`, `rem`, and other absolute lengths)
|
|
2892
|
+
// establishes a fixed box the table must not visually overflow, so it is clipped.
|
|
2660
2893
|
// Browser compatibility: `overflow-x: clip` requires Safari 16+. On Safari 14.1–15.x it silently
|
|
2661
2894
|
// falls back to `visible` (graceful degradation — pre-existing behavior, not a new regression).
|
|
2662
2895
|
if (typeof settings.height !== 'undefined' || typeof settings.width !== 'undefined') {
|
|
2663
2896
|
const effectiveHeight = instance.rootElement.style.height;
|
|
2664
2897
|
const effectiveWidth = instance.rootElement.style.width;
|
|
2898
|
+
// Relative: percentages and viewport units resolve against an ancestor, so a `%` or a viewport
|
|
2899
|
+
// unit (`vw`/`vh`/`vmin`/`vmax`, and dynamic `dvh`/`svh`/`lvh` via the `vh` match) anywhere —
|
|
2900
|
+
// including inside `calc()` — marks the width as container-driven. No word boundaries: the unit
|
|
2901
|
+
// is preceded by digits (`100vw`), which are word characters, so `\bv` would never match.
|
|
2902
|
+
const isRelativeWidth = /%|v(?:w|h|min|max)/i.test(effectiveWidth);
|
|
2903
|
+
const isDefiniteWidth = effectiveWidth !== '' && effectiveWidth !== 'auto' && !isRelativeWidth;
|
|
2665
2904
|
if (!effectiveHeight) {
|
|
2666
2905
|
const currentOverflowX = instance.rootElement.style.overflowX;
|
|
2667
2906
|
// Only manage the overflow-x we own (`clip`) or that is unset. Preserve a user-defined
|
|
@@ -2669,7 +2908,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
2669
2908
|
// by `clip`. Unlike `hidden`, `clip` creates no block formatting context and allows no
|
|
2670
2909
|
// programmatic scroll.
|
|
2671
2910
|
if (currentOverflowX === '' || currentOverflowX === 'clip') {
|
|
2672
|
-
instance.rootElement.style.overflowX =
|
|
2911
|
+
instance.rootElement.style.overflowX = isDefiniteWidth ? 'clip' : '';
|
|
2673
2912
|
}
|
|
2674
2913
|
}
|
|
2675
2914
|
}
|
|
@@ -2687,6 +2926,12 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
2687
2926
|
instance.render();
|
|
2688
2927
|
instance.view._wt.wtOverlays.adjustElementsSize();
|
|
2689
2928
|
}
|
|
2929
|
+
// Fired after the render above, so a listener reading cell sizes sees the new density. The
|
|
2930
|
+
// manager can be gone by now: an `afterUpdateSettings` listener is free to move the grid to a
|
|
2931
|
+
// class-name theme, which tears the engine down.
|
|
2932
|
+
if (themeOverridesChanged && instance.themeManager) {
|
|
2933
|
+
instance.runHooks('afterSetTheme', instance.themeManager.getClassName(), false);
|
|
2934
|
+
}
|
|
2690
2935
|
if (!init && instance.view && (currentHeight === '' || height === '' || height === undefined) && currentHeight !== height) {
|
|
2691
2936
|
instance.view._wt.wtOverlays.updateMainScrollableElements();
|
|
2692
2937
|
}
|
|
@@ -2718,11 +2963,36 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
2718
2963
|
return null;
|
|
2719
2964
|
};
|
|
2720
2965
|
/**
|
|
2721
|
-
* Returns the
|
|
2966
|
+
* Returns the current global grid settings object.
|
|
2967
|
+
*
|
|
2968
|
+
* The returned object contains the settings passed to the constructor or the most recent
|
|
2969
|
+
* `updateSettings()` call. It reflects the
|
|
2970
|
+
* [grid-level](@/guides/getting-started/configuration-options/configuration-options.md#set-grid-options)
|
|
2971
|
+
* configuration only.
|
|
2972
|
+
*
|
|
2973
|
+
* It does not include merged per-cell or per-column values. Configuration options cascade from
|
|
2974
|
+
* grid to column to cell (see
|
|
2975
|
+
* [Cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)).
|
|
2976
|
+
* To read the effective value for a specific cell, use [[getCellMeta]]. To read column-level meta, use [[getColumnMeta]].
|
|
2722
2977
|
*
|
|
2723
2978
|
* @memberof Core#
|
|
2724
2979
|
* @function getSettings
|
|
2725
|
-
* @returns {TableMeta} Object containing the current
|
|
2980
|
+
* @returns {TableMeta} Object containing the current global grid settings.
|
|
2981
|
+
* @example
|
|
2982
|
+
* ```js
|
|
2983
|
+
* const hot = new Handsontable(container, {
|
|
2984
|
+
* readOnly: false,
|
|
2985
|
+
* columns: (index) => ({
|
|
2986
|
+
* readOnly: index === 2 || index === 8,
|
|
2987
|
+
* }),
|
|
2988
|
+
* });
|
|
2989
|
+
*
|
|
2990
|
+
* // returns `false` (global grid-level setting)
|
|
2991
|
+
* hot.getSettings().readOnly;
|
|
2992
|
+
*
|
|
2993
|
+
* // returns `true` for column 2 (merged column and cell meta)
|
|
2994
|
+
* hot.getCellMeta(0, 2).readOnly;
|
|
2995
|
+
* ```
|
|
2726
2996
|
*/ this.getSettings = function() {
|
|
2727
2997
|
return tableMeta;
|
|
2728
2998
|
};
|
|
@@ -2777,8 +3047,10 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
2777
3047
|
* @param {number|number[]} [index] A visual index of the row/column before or after which the new row/column will be
|
|
2778
3048
|
* inserted or removed. Can also be an array of arrays, in format `[[index, amount],...]`.
|
|
2779
3049
|
* @param {number} [amount] The amount of rows or columns to be inserted or removed (default: `1`).
|
|
2780
|
-
* @param {string} [source] Source indicator.
|
|
2781
|
-
* @param {boolean} [keepEmptyRows] If set to `true
|
|
3050
|
+
* @param {string} [source] Source indicator passed to related hooks.
|
|
3051
|
+
* @param {boolean} [keepEmptyRows] If set to `true`, skips the automatic adjustment that normally adds empty rows
|
|
3052
|
+
* or columns after the operation to satisfy `minRows`, `minSpareRows`,
|
|
3053
|
+
* `minCols`, or `minSpareCols`.
|
|
2782
3054
|
* @example
|
|
2783
3055
|
* ```js
|
|
2784
3056
|
* // above row 10 (by visual index), insert 1 new row
|
|
@@ -2798,9 +3070,23 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
2798
3070
|
* // remove 2 rows, starting from row 10 (by visual index)
|
|
2799
3071
|
* hot.alter('remove_row', 10, 2);
|
|
2800
3072
|
*
|
|
3073
|
+
* // remove 2 columns, starting from column 3 (by visual index)
|
|
3074
|
+
* hot.alter('remove_col', 3, 2);
|
|
3075
|
+
*
|
|
2801
3076
|
* // remove 3 rows, starting from row 1 (by visual index)
|
|
2802
3077
|
* // remove 2 rows, starting from row 5 (by visual index)
|
|
2803
3078
|
* hot.alter('remove_row', [[1, 3], [5, 2]]);
|
|
3079
|
+
*
|
|
3080
|
+
* // pass a custom source string to hooks
|
|
3081
|
+
* hot.addHook('afterCreateRow', (index, amount, source) => {
|
|
3082
|
+
* if (source === 'inventory-import') {
|
|
3083
|
+
* // Run logic only for rows created by the inventory import.
|
|
3084
|
+
* }
|
|
3085
|
+
* });
|
|
3086
|
+
* hot.alter('insert_row_above', 0, 1, 'inventory-import');
|
|
3087
|
+
*
|
|
3088
|
+
* // remove a row without immediately adding empty rows required by `minRows` or `minSpareRows`
|
|
3089
|
+
* hot.alter('remove_row', 4, 1, 'inventory-cleanup', true);
|
|
2804
3090
|
* ```
|
|
2805
3091
|
*/ this.alter = function(action, index, amount, source, keepEmptyRows) {
|
|
2806
3092
|
grid.alter(action, index, amount, source, keepEmptyRows);
|
|
@@ -3076,9 +3362,14 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
3076
3362
|
const visualRow = instance.toVisualRow(changeRow);
|
|
3077
3363
|
const visualColumn = instance.toVisualColumn(changeProp);
|
|
3078
3364
|
if (Number.isInteger(visualColumn)) {
|
|
3079
|
-
|
|
3365
|
+
// The transient read keeps a bulk source-data write from permanently materializing one
|
|
3366
|
+
// meta object per changed cell - the meta only feeds the `valueSetter` and the
|
|
3367
|
+
// source-data validator, both read-only.
|
|
3368
|
+
return instance.getCellMetaTransient(visualRow, visualColumn);
|
|
3080
3369
|
}
|
|
3081
|
-
// If there's no requested visual column, we can use the table meta as the cell properties
|
|
3370
|
+
// If there's no requested visual column, we can use the table meta as the cell properties.
|
|
3371
|
+
// The snapshot lacks the per-cell coordinate properties, but every consumer here reads
|
|
3372
|
+
// settings-level keys only.
|
|
3082
3373
|
return {
|
|
3083
3374
|
...Object.getPrototypeOf(tableMeta),
|
|
3084
3375
|
...tableMeta
|
|
@@ -3191,7 +3482,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
3191
3482
|
(0, _number.rangeEach)(Math.max(Math.min(rowStart, rowEnd), 0), Math.max(rowStart, rowEnd), (row)=>{
|
|
3192
3483
|
let isTypeEqual = true;
|
|
3193
3484
|
(0, _number.rangeEach)(Math.max(Math.min(columnStart, columnEnd), 0), Math.max(columnStart, columnEnd), (column)=>{
|
|
3194
|
-
const cellType = instance.
|
|
3485
|
+
const cellType = instance.getCellMetaTransient(row, column);
|
|
3195
3486
|
currentType = cellType.type ?? null;
|
|
3196
3487
|
if (previousType) {
|
|
3197
3488
|
isTypeEqual = previousType === currentType;
|
|
@@ -3270,8 +3561,52 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
3270
3561
|
}
|
|
3271
3562
|
};
|
|
3272
3563
|
/**
|
|
3564
|
+
* Writes a configuration-derived cell meta value declaratively. The value is applied to the cell meta
|
|
3565
|
+
* (so it is retained while the cell is released from the viewport by the meta eviction), but is NOT
|
|
3566
|
+
* recorded as user-defined, so an `updateSettings` cache reset clears it and it is re-applied from the
|
|
3567
|
+
* current configuration - exactly like the `cell` option. Used by built-in plugins that derive cell
|
|
3568
|
+
* meta from their own configuration (for example ColumnSummary) and re-apply it on each update.
|
|
3569
|
+
*
|
|
3570
|
+
* Unlike the public `setCellMeta`, this does NOT fire `beforeSetCellMeta`/`afterSetCellMeta` and is
|
|
3571
|
+
* not vetoable: the write is plugin-internal render state the user never requested, so it must not
|
|
3572
|
+
* surface through public hooks or be blocked by a `beforeSetCellMeta` veto. This matches the direct
|
|
3573
|
+
* meta-object write these plugins used before the viewport meta eviction was introduced.
|
|
3574
|
+
*
|
|
3575
|
+
* Internal API: deliberately NOT declared on the public `HotInstance` type (`core/types.ts`), so it
|
|
3576
|
+
* is not exposed to third-party code or the published `.d.ts`. Built-in consumers reach it through a
|
|
3577
|
+
* local internal type (see `HotInstanceInternal` in the ColumnSummary plugin). Do not add it to
|
|
3578
|
+
* `HotInstance` - that would turn an implementation detail into a supported public API.
|
|
3579
|
+
*
|
|
3580
|
+
* @private
|
|
3581
|
+
* @memberof Core#
|
|
3582
|
+
* @function _setCellMetaDeclarative
|
|
3583
|
+
* @param {number} row Visual row index.
|
|
3584
|
+
* @param {number} column Visual column index.
|
|
3585
|
+
* @param {string} key The property name to set.
|
|
3586
|
+
* @param {*} value The value to write.
|
|
3587
|
+
*/ this._setCellMetaDeclarative = function(row, column, key, value) {
|
|
3588
|
+
let physicalRow = row;
|
|
3589
|
+
let physicalColumn = column;
|
|
3590
|
+
if (row < instance.countRows()) {
|
|
3591
|
+
physicalRow = instance.toPhysicalRow(row);
|
|
3592
|
+
}
|
|
3593
|
+
if (column < instance.countCols()) {
|
|
3594
|
+
physicalColumn = instance.toPhysicalColumn(column);
|
|
3595
|
+
}
|
|
3596
|
+
metaManager.disableUserDefinedMetaRecording();
|
|
3597
|
+
try {
|
|
3598
|
+
metaManager.setCellMeta(physicalRow, physicalColumn, key, value);
|
|
3599
|
+
} finally{
|
|
3600
|
+
metaManager.enableUserDefinedMetaRecording();
|
|
3601
|
+
}
|
|
3602
|
+
};
|
|
3603
|
+
/**
|
|
3273
3604
|
* Sets a property defined by the `key` property to the meta object of a cell corresponding to params `row` and `column`.
|
|
3274
3605
|
*
|
|
3606
|
+
* This method updates internal cell metadata only. It does not repaint the grid. To reflect visual changes (such as
|
|
3607
|
+
* `className`, `type`, or `readOnly`), call [render()](@/api/core.md#render) afterward, or wrap multiple calls in
|
|
3608
|
+
* [batch()](@/api/core.md#batch).
|
|
3609
|
+
*
|
|
3275
3610
|
* @memberof Core#
|
|
3276
3611
|
* @function setCellMeta
|
|
3277
3612
|
* @param {number} row Visual row index.
|
|
@@ -3308,6 +3643,11 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
3308
3643
|
/**
|
|
3309
3644
|
* Returns the cell properties object for the given `row` and `column` coordinates.
|
|
3310
3645
|
*
|
|
3646
|
+
* The returned object reflects the effective cell configuration after
|
|
3647
|
+
* [cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)
|
|
3648
|
+
* (grid, column, and cell levels). To read global grid settings only, use [[getSettings]].
|
|
3649
|
+
* To read column-level meta, use [[getColumnMeta]].
|
|
3650
|
+
*
|
|
3311
3651
|
* @memberof Core#
|
|
3312
3652
|
* @function getCellMeta
|
|
3313
3653
|
* @param {number} row Visual row index.
|
|
@@ -3335,8 +3675,52 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
3335
3675
|
});
|
|
3336
3676
|
};
|
|
3337
3677
|
/**
|
|
3678
|
+
* Returns the cell properties object for the given `row` and `column` coordinates without
|
|
3679
|
+
* retaining it in the cell meta cache.
|
|
3680
|
+
*
|
|
3681
|
+
* Like [[getCellMeta]], the returned object reflects the effective cell configuration after
|
|
3682
|
+
* [cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)
|
|
3683
|
+
* and dynamic extension (the `cells` function and the `beforeGetCellMeta`/`afterGetCellMeta`
|
|
3684
|
+
* hooks run). Unlike `getCellMeta`, when the cell has no stored meta object the extension runs
|
|
3685
|
+
* on a temporary object that is not saved, so scanning many cells (for example, a whole column
|
|
3686
|
+
* or the entire dataset) does not permanently allocate one meta object per visited cell. Cells
|
|
3687
|
+
* that already carry stored meta (for example, written by [[setCellMeta]] or the `cell` option)
|
|
3688
|
+
* return their stored object, exactly as `getCellMeta` would.
|
|
3689
|
+
*
|
|
3690
|
+
* Use this method for read-only bulk scans. Do not write to the returned object - for cells
|
|
3691
|
+
* without stored meta the write lands on the temporary object and is lost; use `setCellMeta`
|
|
3692
|
+
* to persist values.
|
|
3693
|
+
*
|
|
3694
|
+
* @memberof Core#
|
|
3695
|
+
* @function getCellMetaTransient
|
|
3696
|
+
* @since 18.1.0
|
|
3697
|
+
* @param {number} row Visual row index.
|
|
3698
|
+
* @param {number} column Visual column index.
|
|
3699
|
+
* @returns {object} The cell properties object.
|
|
3700
|
+
* @fires Hooks#beforeGetCellMeta
|
|
3701
|
+
* @fires Hooks#afterGetCellMeta
|
|
3702
|
+
*/ this.getCellMetaTransient = function(row, column) {
|
|
3703
|
+
let physicalRow = instance.toPhysicalRow(row);
|
|
3704
|
+
let physicalColumn = instance.toPhysicalColumn(column);
|
|
3705
|
+
if (physicalRow === null) {
|
|
3706
|
+
physicalRow = row;
|
|
3707
|
+
}
|
|
3708
|
+
if (physicalColumn === null) {
|
|
3709
|
+
physicalColumn = column;
|
|
3710
|
+
}
|
|
3711
|
+
return metaManager.getCellMetaTransient(physicalRow, physicalColumn, {
|
|
3712
|
+
visualRow: row,
|
|
3713
|
+
visualColumn: column
|
|
3714
|
+
});
|
|
3715
|
+
};
|
|
3716
|
+
/**
|
|
3338
3717
|
* Returns the meta information for the provided column.
|
|
3339
3718
|
*
|
|
3719
|
+
* The returned object reflects the column-level configuration after
|
|
3720
|
+
* [cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)
|
|
3721
|
+
* (grid and column levels). To read global grid settings only, use [[getSettings]].
|
|
3722
|
+
* To read the effective configuration for a specific cell, use [[getCellMeta]].
|
|
3723
|
+
*
|
|
3340
3724
|
* @since 14.5.0
|
|
3341
3725
|
* @memberof Core#
|
|
3342
3726
|
* @function getColumnMeta
|
|
@@ -3541,12 +3925,27 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
3541
3925
|
continue;
|
|
3542
3926
|
}
|
|
3543
3927
|
waitingForValidator.addValidatorToQueue();
|
|
3544
|
-
|
|
3928
|
+
// The transient read keeps a bulk validation from permanently materializing one meta
|
|
3929
|
+
// object per validated cell (O(rows x columns) retention). Cells with stored meta -
|
|
3930
|
+
// including every currently rendered cell - still receive their `valid` result on the
|
|
3931
|
+
// stored object, because the transient read returns the stored object for them.
|
|
3932
|
+
const row = i;
|
|
3933
|
+
const column = j;
|
|
3934
|
+
const cellMeta = instance.getCellMetaTransient(row, column);
|
|
3935
|
+
instance.validateCell(instance.getDataAtCell(row, column), cellMeta, (result)=>{
|
|
3545
3936
|
if (typeof result !== 'boolean') {
|
|
3546
3937
|
(0, _errors.throwWithCause)('Validation error: result is not boolean');
|
|
3547
3938
|
}
|
|
3548
3939
|
if (result === false) {
|
|
3549
3940
|
waitingForValidator.valid = false;
|
|
3941
|
+
// A failed result written on a throwaway object would be lost - persist it on the
|
|
3942
|
+
// stored meta (a DIRECT write, exactly like the edit-path validation flow; NOT
|
|
3943
|
+
// `setCellMeta`, which would mark the property as user-persisted and change
|
|
3944
|
+
// updateSettings/eviction semantics). Only failures materialize, so retention stays
|
|
3945
|
+
// O(invalid cells); the eviction pass already keeps `valid === false` cells.
|
|
3946
|
+
instance.getCellMeta(row, column, {
|
|
3947
|
+
skipMetaExtension: true
|
|
3948
|
+
}).valid = false;
|
|
3550
3949
|
}
|
|
3551
3950
|
waitingForValidator.removeValidatorFormQueue();
|
|
3552
3951
|
}, 'validateCells');
|
|
@@ -3612,6 +4011,13 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
3612
4011
|
return false;
|
|
3613
4012
|
};
|
|
3614
4013
|
/**
|
|
4014
|
+
* Caches the index translation that `getColHeader` derives from the `columns` option when that
|
|
4015
|
+
* option is a function: the source column indexes for which `columns(index)` returns a truthy
|
|
4016
|
+
* settings object. Only the membership array is cached — titles are still read live from the
|
|
4017
|
+
* `columns` function. Rebuilt when the function reference or the column count changes; cleared
|
|
4018
|
+
* by `updateSettings`.
|
|
4019
|
+
*/ let columnsSettingIndexes = null;
|
|
4020
|
+
/**
|
|
3615
4021
|
* Gets the values of column headers (if column headers are [enabled](@/api/options.md#colheaders)).
|
|
3616
4022
|
*
|
|
3617
4023
|
* To get an array with the values of all
|
|
@@ -3661,23 +4067,30 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
3661
4067
|
}
|
|
3662
4068
|
let result = tableMeta.colHeaders;
|
|
3663
4069
|
const columns = tableMeta.columns;
|
|
3664
|
-
const
|
|
3665
|
-
|
|
4070
|
+
const columnsFn = typeof columns === 'function' ? columns : null;
|
|
4071
|
+
const physicalColumn = instance.toPhysicalColumn(columnIndex);
|
|
4072
|
+
let columnSettings = null;
|
|
4073
|
+
if (columnsFn !== null) {
|
|
3666
4074
|
const columnsLen = instance.countCols();
|
|
3667
|
-
|
|
3668
|
-
|
|
3669
|
-
|
|
3670
|
-
|
|
4075
|
+
if (columnsSettingIndexes === null || columnsSettingIndexes.columns !== columnsFn || columnsSettingIndexes.columnsLen !== columnsLen) {
|
|
4076
|
+
const indexes = [];
|
|
4077
|
+
for(let index = 0; index < columnsLen; index++){
|
|
4078
|
+
if (columnsFn(index)) {
|
|
4079
|
+
indexes.push(index);
|
|
4080
|
+
}
|
|
3671
4081
|
}
|
|
4082
|
+
columnsSettingIndexes = {
|
|
4083
|
+
columns: columnsFn,
|
|
4084
|
+
columnsLen,
|
|
4085
|
+
indexes
|
|
4086
|
+
};
|
|
3672
4087
|
}
|
|
3673
|
-
|
|
3674
|
-
}
|
|
3675
|
-
const physicalColumn = instance.toPhysicalColumn(columnIndex);
|
|
3676
|
-
const prop = translateVisualIndexToColumns(physicalColumn);
|
|
4088
|
+
columnSettings = columnsFn(columnsSettingIndexes.indexes[physicalColumn]) ?? null;
|
|
4089
|
+
}
|
|
3677
4090
|
if (tableMeta.colHeaders === false) {
|
|
3678
4091
|
result = null;
|
|
3679
|
-
} else if (
|
|
3680
|
-
result =
|
|
4092
|
+
} else if (columnSettings && columnSettings.title) {
|
|
4093
|
+
result = columnSettings.title;
|
|
3681
4094
|
} else if (columns && !(0, _function.isFunction)(columns) && columns[physicalColumn] && columns[physicalColumn].title) {
|
|
3682
4095
|
result = columns[physicalColumn].title;
|
|
3683
4096
|
} else if (Array.isArray(tableMeta.colHeaders) && tableMeta.colHeaders[physicalColumn] !== undefined) {
|
|
@@ -3850,7 +4263,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
3850
4263
|
* @returns {number} Returns -1 if table is not visible.
|
|
3851
4264
|
*/ this.countRenderedRows = function() {
|
|
3852
4265
|
const view = instance.view;
|
|
3853
|
-
return view
|
|
4266
|
+
return view?._wt.drawn ? view._wt.wtTable.getRenderedRowsCount() : -1;
|
|
3854
4267
|
};
|
|
3855
4268
|
/**
|
|
3856
4269
|
* Returns the number of rendered rows that are only visible in the table viewport.
|
|
@@ -3861,7 +4274,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
3861
4274
|
* @returns {number} Number of visible rows or -1.
|
|
3862
4275
|
*/ this.countVisibleRows = function() {
|
|
3863
4276
|
const view = instance.view;
|
|
3864
|
-
return view
|
|
4277
|
+
return view?._wt.drawn ? view._wt.wtTable.getVisibleRowsCount() : -1;
|
|
3865
4278
|
};
|
|
3866
4279
|
/**
|
|
3867
4280
|
* Returns the number of rendered rows including columns that are partially or fully rendered
|
|
@@ -3872,7 +4285,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
3872
4285
|
* @returns {number} Returns -1 if table is not visible.
|
|
3873
4286
|
*/ this.countRenderedCols = function() {
|
|
3874
4287
|
const view = instance.view;
|
|
3875
|
-
return view
|
|
4288
|
+
return view?._wt.drawn ? view._wt.wtTable.getRenderedColumnsCount() : -1;
|
|
3876
4289
|
};
|
|
3877
4290
|
/**
|
|
3878
4291
|
* Returns the number of rendered columns that are only visible in the table viewport.
|
|
@@ -3883,7 +4296,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
3883
4296
|
* @returns {number} Number of visible columns or -1.
|
|
3884
4297
|
*/ this.countVisibleCols = function() {
|
|
3885
4298
|
const view = instance.view;
|
|
3886
|
-
return view
|
|
4299
|
+
return view?._wt.drawn ? view._wt.wtTable.getVisibleColumnsCount() : -1;
|
|
3887
4300
|
};
|
|
3888
4301
|
/**
|
|
3889
4302
|
* Returns the number of rendered row headers.
|
|
@@ -3893,7 +4306,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
3893
4306
|
* @function countRowHeaders
|
|
3894
4307
|
* @returns {number} Number of row headers.
|
|
3895
4308
|
*/ this.countRowHeaders = function() {
|
|
3896
|
-
|
|
4309
|
+
const view = instance.view;
|
|
4310
|
+
return view ? view.getRowHeadersCount() : 0;
|
|
3897
4311
|
};
|
|
3898
4312
|
/**
|
|
3899
4313
|
* Returns the number of rendered column headers.
|
|
@@ -3903,7 +4317,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
3903
4317
|
* @function countColHeaders
|
|
3904
4318
|
* @returns {number} Number of column headers.
|
|
3905
4319
|
*/ this.countColHeaders = function() {
|
|
3906
|
-
|
|
4320
|
+
const view = instance.view;
|
|
4321
|
+
return view ? view.getColumnHeadersCount() : 0;
|
|
3907
4322
|
};
|
|
3908
4323
|
/**
|
|
3909
4324
|
* Returns the number of empty rows. If the optional ending parameter is `true`, returns the
|
|
@@ -4003,8 +4418,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
4003
4418
|
* @param {number|string} column A visual column index (`number`), or a column property's value (`string`).
|
|
4004
4419
|
* @param {number} [endRow] If selecting a range: the visual row index of the last cell in the range.
|
|
4005
4420
|
* @param {number|string} [endColumn] If selecting a range: the visual column index (or a column property's value) of the last cell in the range.
|
|
4006
|
-
* @param {boolean} [scrollToCell=true] `true
|
|
4007
|
-
* @param {boolean} [changeListener=true] `true
|
|
4421
|
+
* @param {boolean} [scrollToCell=true] If `true`, scrolls the viewport to the newly-selected cells. If `false`, keeps the previous viewport.
|
|
4422
|
+
* @param {boolean} [changeListener=true] If `true`, switches the keyboard focus to Handsontable. If `false`, keeps the
|
|
4008
4423
|
* previous keyboard focus. If an element outside Handsontable (such as a custom input) currently owns the browser
|
|
4009
4424
|
* focus, it remains focused after the call.
|
|
4010
4425
|
* @returns {boolean} `true`: the selection was successful, `false`: the selection failed.
|
|
@@ -4077,8 +4492,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
4077
4492
|
* @param {Array[]|CellRange[]} coords Visual coordinates,
|
|
4078
4493
|
* passed either as an array of arrays (`[[rowStart, columnStart, rowEnd, columnEnd], ...]`)
|
|
4079
4494
|
* or as an array of [`CellRange`](@/api/cellRange.md) objects.
|
|
4080
|
-
* @param {boolean} [scrollToCell=true] `true
|
|
4081
|
-
* @param {boolean} [changeListener=true] `true
|
|
4495
|
+
* @param {boolean} [scrollToCell=true] If `true`, scrolls the viewport to the newly-selected cells. If `false`, keeps the previous viewport.
|
|
4496
|
+
* @param {boolean} [changeListener=true] If `true`, switches the keyboard focus to Handsontable. If `false`, keeps the
|
|
4082
4497
|
* previous keyboard focus. If an element outside Handsontable (such as a custom input) currently owns the browser
|
|
4083
4498
|
* focus, it remains focused after the call.
|
|
4084
4499
|
* @returns {boolean} `true`: the selection was successful, `false`: the selection failed.
|
|
@@ -4129,8 +4544,8 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
4129
4544
|
* @memberof Core#
|
|
4130
4545
|
* @since 0.38.0
|
|
4131
4546
|
* @function selectColumns
|
|
4132
|
-
* @param {number} startColumn The visual column index from which the selection starts.
|
|
4133
|
-
* @param {number} [endColumn=startColumn] The visual column index to which the selection finishes. If `endColumn`
|
|
4547
|
+
* @param {number | string} startColumn The visual column index or column property from which the selection starts.
|
|
4548
|
+
* @param {number | string} [endColumn=startColumn] The visual column index or column property to which the selection finishes. If `endColumn`
|
|
4134
4549
|
* is not defined the column defined by `startColumn` will be selected.
|
|
4135
4550
|
* @param {number | { row: number, col: number } | CellCoords} [focusPosition=0] The argument allows changing the cell/header focus
|
|
4136
4551
|
* position. The value can take visual row index from -N to N, where negative values point to the headers and positive
|
|
@@ -4205,16 +4620,15 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
4205
4620
|
* @since 0.38.2
|
|
4206
4621
|
* @memberof Core#
|
|
4207
4622
|
* @function selectAll
|
|
4208
|
-
* @param {boolean} [includeRowHeaders=false] `true
|
|
4209
|
-
*
|
|
4210
|
-
* @param {boolean} [includeColumnHeaders=false] `true` If the selection should include the column
|
|
4211
|
-
* headers, `false` otherwise.
|
|
4623
|
+
* @param {boolean} [includeRowHeaders=false] If `true`, includes the row headers in the selection.
|
|
4624
|
+
* @param {boolean} [includeColumnHeaders=false] If `true`, includes the column headers in the selection.
|
|
4212
4625
|
*
|
|
4213
|
-
* @param {object} [options] Additional object with options. Since 14.0.0
|
|
4626
|
+
* @param {object} [options] Additional object with options. Since 14.0.0.
|
|
4214
4627
|
* @param {{row: number, col: number} | boolean} [options.focusPosition] The argument allows changing the cell/header
|
|
4215
4628
|
* focus position. The value takes an object with a `row` and `col` properties from -N to N, where
|
|
4216
4629
|
* negative values point to the headers and positive values point to the cell range. If `false`, the focus
|
|
4217
|
-
* position won't be changed.
|
|
4630
|
+
* position won't be changed. When the {@link Options#navigableHeaders} option is disabled (the default), a
|
|
4631
|
+
* `focusPosition` that points to a header is relocated to the nearest cell in the data set. Example:
|
|
4218
4632
|
* ```js
|
|
4219
4633
|
* hot.selectAll(0, 0, {
|
|
4220
4634
|
* focusPosition: { row: 0, col: 1 },
|
|
@@ -4223,7 +4637,9 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
4223
4637
|
* ```
|
|
4224
4638
|
*
|
|
4225
4639
|
* @param {boolean} [options.disableHeadersHighlight] If `true`, disables highlighting the headers even when
|
|
4226
|
-
* the logical coordinates points on them.
|
|
4640
|
+
* the logical coordinates points on them. This only suppresses the highlight shown on headers of a fully-selected
|
|
4641
|
+
* row or column. It doesn't affect the focus indicator on the individual cell or header that holds the focus,
|
|
4642
|
+
* which stays visible even when {@link Options#navigableHeaders} moves the focus onto a header.
|
|
4227
4643
|
*/ this.selectAll = function(includeRowHeaders = true, includeColumnHeaders = includeRowHeaders, options) {
|
|
4228
4644
|
viewportScroller.skipNextScrollCycle();
|
|
4229
4645
|
selection.selectAll(includeRowHeaders, includeColumnHeaders, options);
|
|
@@ -4257,6 +4673,9 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
4257
4673
|
/**
|
|
4258
4674
|
* Scroll viewport to coordinates specified by the `row` and/or `col` object properties.
|
|
4259
4675
|
*
|
|
4676
|
+
* The object-based signature was introduced in v14.0.0. The positional arguments form is retained
|
|
4677
|
+
* for backward compatibility.
|
|
4678
|
+
*
|
|
4260
4679
|
* ```js
|
|
4261
4680
|
* // scroll the viewport to the visual row index (leave the horizontal scroll untouched)
|
|
4262
4681
|
* hot.scrollViewportTo({ row: 50 });
|
|
@@ -4271,6 +4690,9 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
4271
4690
|
* }, () => {
|
|
4272
4691
|
* // callback function executed after the viewport is scrolled
|
|
4273
4692
|
* });
|
|
4693
|
+
*
|
|
4694
|
+
* // scroll the viewport using the backward-compatible positional arguments form
|
|
4695
|
+
* hot.scrollViewportTo(50, 50, true, true);
|
|
4274
4696
|
* ```
|
|
4275
4697
|
*
|
|
4276
4698
|
* @memberof Core#
|
|
@@ -4376,6 +4798,10 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
4376
4798
|
*/ this.destroy = function() {
|
|
4377
4799
|
instance._clearTimeouts();
|
|
4378
4800
|
instance._clearMicrotasks();
|
|
4801
|
+
// Drop the hidden-init visibility observer before the teardown below nulls the instance. Otherwise a
|
|
4802
|
+
// delivery queued while the table was becoming visible runs its callback on a destroyed instance.
|
|
4803
|
+
visibilityObserver?.disconnect();
|
|
4804
|
+
visibilityObserver = null;
|
|
4379
4805
|
if (instance.view) {
|
|
4380
4806
|
instance.view.destroy();
|
|
4381
4807
|
}
|
|
@@ -4467,6 +4893,11 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
4467
4893
|
/**
|
|
4468
4894
|
* Returns the first rendered row in the DOM (usually, it is not visible in the table's viewport).
|
|
4469
4895
|
*
|
|
4896
|
+
* When the {@link MergeCells} plugin is enabled with its default `virtualized: false` setting, a merged
|
|
4897
|
+
* cell that crosses the viewport edge extends the rendered row range, so this method can return a row
|
|
4898
|
+
* index further from the viewport than usual. For the actual visible viewport, use
|
|
4899
|
+
* {@link Core#getFirstFullyVisibleRow} or {@link Core#getFirstPartiallyVisibleRow}.
|
|
4900
|
+
*
|
|
4470
4901
|
* @since 14.6.0
|
|
4471
4902
|
* @memberof Core#
|
|
4472
4903
|
* @function getFirstRenderedVisibleRow
|
|
@@ -4477,6 +4908,11 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
4477
4908
|
/**
|
|
4478
4909
|
* Returns the last rendered row in the DOM (usually, it is not visible in the table's viewport).
|
|
4479
4910
|
*
|
|
4911
|
+
* When the {@link MergeCells} plugin is enabled with its default `virtualized: false` setting, a merged
|
|
4912
|
+
* cell that crosses the viewport edge extends the rendered row range, so this method can return a row
|
|
4913
|
+
* index further from the viewport than usual. For the actual visible viewport, use
|
|
4914
|
+
* {@link Core#getLastFullyVisibleRow} or {@link Core#getLastPartiallyVisibleRow}.
|
|
4915
|
+
*
|
|
4480
4916
|
* @since 14.6.0
|
|
4481
4917
|
* @memberof Core#
|
|
4482
4918
|
* @function getLastRenderedVisibleRow
|
|
@@ -4487,6 +4923,11 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
4487
4923
|
/**
|
|
4488
4924
|
* Returns the first rendered column in the DOM (usually, it is not visible in the table's viewport).
|
|
4489
4925
|
*
|
|
4926
|
+
* When the {@link MergeCells} plugin is enabled with its default `virtualized: false` setting, a merged
|
|
4927
|
+
* cell that crosses the viewport edge extends the rendered column range, so this method can return a
|
|
4928
|
+
* column index further from the viewport than usual. For the actual visible viewport, use
|
|
4929
|
+
* {@link Core#getFirstFullyVisibleColumn} or {@link Core#getFirstPartiallyVisibleColumn}.
|
|
4930
|
+
*
|
|
4490
4931
|
* @since 14.6.0
|
|
4491
4932
|
* @memberof Core#
|
|
4492
4933
|
* @function getFirstRenderedVisibleColumn
|
|
@@ -4497,6 +4938,11 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
4497
4938
|
/**
|
|
4498
4939
|
* Returns the last rendered column in the DOM (usually, it is not visible in the table's viewport).
|
|
4499
4940
|
*
|
|
4941
|
+
* When the {@link MergeCells} plugin is enabled with its default `virtualized: false` setting, a merged
|
|
4942
|
+
* cell that crosses the viewport edge extends the rendered column range, so this method can return a
|
|
4943
|
+
* column index further from the viewport than usual. For the actual visible viewport, use
|
|
4944
|
+
* {@link Core#getLastFullyVisibleColumn} or {@link Core#getLastPartiallyVisibleColumn}.
|
|
4945
|
+
*
|
|
4500
4946
|
* @since 14.6.0
|
|
4501
4947
|
* @memberof Core#
|
|
4502
4948
|
* @function getLastRenderedVisibleColumn
|
|
@@ -4979,7 +5425,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
4979
5425
|
const themeName = mergedUserSettings.themeName;
|
|
4980
5426
|
const rootContainerThemeClassName = (0, _themes.getThemeClassName)(instance.rootContainer);
|
|
4981
5427
|
if ((0, _rootInstance.isRootInstance)(instance) && !rootContainerThemeClassName && ((0, _object.isObject)(theme) || !theme && !themeName)) {
|
|
4982
|
-
initializeThemeManager(theme);
|
|
5428
|
+
initializeThemeManager(theme, readThemeOverrides(mergedUserSettings));
|
|
4983
5429
|
}
|
|
4984
5430
|
(0, _registry.getPluginsNames)().forEach((pluginName)=>{
|
|
4985
5431
|
const PluginClass = (0, _registry.getPlugin)(pluginName);
|