handsontable 18.0.0 → 18.1.0-rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/3rdparty/walkontable/src/axisSizing/axisSizeSource.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/axisSizeSource.d.ts +55 -0
- package/3rdparty/walkontable/src/axisSizing/axisSizeSource.js +15 -0
- package/3rdparty/walkontable/src/axisSizing/axisSizeSource.mjs +14 -0
- package/3rdparty/walkontable/src/axisSizing/boxModel.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/boxModel.d.ts +32 -0
- package/3rdparty/walkontable/src/axisSizing/boxModel.js +45 -0
- package/3rdparty/walkontable/src/axisSizing/boxModel.mjs +33 -0
- package/3rdparty/walkontable/src/axisSizing/columnUtils.d.mts +2 -0
- package/3rdparty/walkontable/src/{utils/column.d.ts → axisSizing/columnUtils.d.ts} +12 -10
- package/3rdparty/walkontable/src/axisSizing/columnUtils.js +142 -0
- package/3rdparty/walkontable/src/axisSizing/columnUtils.mjs +137 -0
- package/3rdparty/walkontable/src/axisSizing/defaultSizeSource.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/defaultSizeSource.d.ts +58 -0
- package/3rdparty/walkontable/src/axisSizing/defaultSizeSource.js +124 -0
- package/3rdparty/walkontable/src/axisSizing/defaultSizeSource.mjs +114 -0
- package/3rdparty/walkontable/src/axisSizing/oversizedRows.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/oversizedRows.d.ts +162 -0
- package/3rdparty/walkontable/src/axisSizing/oversizedRows.js +424 -0
- package/3rdparty/walkontable/src/axisSizing/oversizedRows.mjs +522 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/index.d.ts +130 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/index.js +251 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/index.mjs +257 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/prefixSumStrategy.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/prefixSumStrategy.d.ts +51 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/prefixSumStrategy.js +116 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/prefixSumStrategy.mjs +112 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/sparseStrategy.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/sparseStrategy.d.ts +53 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/sparseStrategy.js +199 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/sparseStrategy.mjs +196 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/strategy.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/strategy.d.ts +53 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/strategy.js +40 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/strategy.mjs +41 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/uniformStrategy.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/uniformStrategy.d.ts +47 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/uniformStrategy.js +116 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/uniformStrategy.mjs +110 -0
- package/3rdparty/walkontable/src/axisSizing/rowUtils.d.mts +2 -0
- package/3rdparty/walkontable/src/{utils/row.d.ts → axisSizing/rowUtils.d.ts} +11 -9
- package/3rdparty/walkontable/src/axisSizing/rowUtils.js +106 -0
- package/3rdparty/walkontable/src/axisSizing/rowUtils.mjs +101 -0
- package/3rdparty/walkontable/src/axisSizing/sizeGetters.d.mts +2 -0
- package/3rdparty/walkontable/src/axisSizing/sizeGetters.d.ts +84 -0
- package/3rdparty/walkontable/src/axisSizing/sizeGetters.js +102 -0
- package/3rdparty/walkontable/src/axisSizing/sizeGetters.mjs +92 -0
- package/3rdparty/walkontable/src/calculator/axisCalculation.d.ts +1 -1
- package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.d.ts +10 -0
- package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.js +10 -1
- package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.mjs +10 -1
- package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.d.ts +9 -0
- package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.js +9 -1
- package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.mjs +9 -1
- package/3rdparty/walkontable/src/calculator/viewportColumns.d.ts +1 -1
- package/3rdparty/walkontable/src/calculator/viewportRows.d.ts +1 -1
- package/3rdparty/walkontable/src/cell/coords.js +4 -9
- package/3rdparty/walkontable/src/cell/coords.mjs +4 -9
- package/3rdparty/walkontable/src/cell/range.d.ts +10 -0
- package/3rdparty/walkontable/src/cell/range.js +19 -15
- package/3rdparty/walkontable/src/cell/range.mjs +16 -12
- package/3rdparty/walkontable/src/core/_base.d.ts +21 -21
- package/3rdparty/walkontable/src/core/_base.js +47 -147
- package/3rdparty/walkontable/src/core/_base.mjs +17 -147
- package/3rdparty/walkontable/src/core/clone.d.ts +4 -14
- package/3rdparty/walkontable/src/core/clone.js +40 -5
- package/3rdparty/walkontable/src/core/clone.mjs +10 -5
- package/3rdparty/walkontable/src/core/core.d.ts +1 -5
- package/3rdparty/walkontable/src/core/core.js +41 -47
- package/3rdparty/walkontable/src/core/core.mjs +12 -48
- package/3rdparty/walkontable/src/domMeasure/geometryReader.d.mts +1 -0
- package/3rdparty/walkontable/src/domMeasure/geometryReader.d.ts +172 -0
- package/3rdparty/walkontable/src/domMeasure/geometryReader.js +19 -0
- package/3rdparty/walkontable/src/domMeasure/geometryReader.mjs +16 -0
- package/3rdparty/walkontable/src/domMeasure/liveGeometryReader.d.mts +1 -0
- package/3rdparty/walkontable/src/domMeasure/liveGeometryReader.d.ts +134 -0
- package/3rdparty/walkontable/src/domMeasure/liveGeometryReader.js +195 -0
- package/3rdparty/walkontable/src/domMeasure/liveGeometryReader.mjs +193 -0
- package/3rdparty/walkontable/src/event.d.ts +25 -12
- package/3rdparty/walkontable/src/event.js +96 -236
- package/3rdparty/walkontable/src/event.mjs +95 -236
- package/3rdparty/walkontable/src/facade/core.d.ts +6 -6
- package/3rdparty/walkontable/src/index.d.ts +1 -1
- package/3rdparty/walkontable/src/index.js +10 -21
- package/3rdparty/walkontable/src/index.mjs +1 -1
- package/3rdparty/walkontable/src/overlay/index.d.ts +6 -6
- package/3rdparty/walkontable/src/overlay/index.js +11 -11
- package/3rdparty/walkontable/src/overlay/index.mjs +6 -6
- package/3rdparty/walkontable/src/overlay/overlays.d.ts +375 -0
- package/3rdparty/walkontable/src/overlay/overlays.js +605 -0
- package/3rdparty/walkontable/src/overlay/overlays.mjs +594 -0
- package/3rdparty/walkontable/src/overlay/{_base.d.ts → regions/_base.d.ts} +65 -16
- package/3rdparty/walkontable/src/overlay/{_base.js → regions/_base.js} +155 -50
- package/3rdparty/walkontable/src/overlay/{_base.mjs → regions/_base.mjs} +158 -47
- package/3rdparty/walkontable/src/overlay/regions/bottomInlineStartCornerOverlay.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/{bottomInlineStartCorner.d.ts → regions/bottomInlineStartCornerOverlay.d.ts} +5 -10
- package/3rdparty/walkontable/src/overlay/{bottomInlineStartCorner.js → regions/bottomInlineStartCornerOverlay.js} +18 -20
- package/3rdparty/walkontable/src/overlay/{bottomInlineStartCorner.mjs → regions/bottomInlineStartCornerOverlay.mjs} +18 -20
- package/3rdparty/walkontable/src/overlay/regions/bottomOverlay.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/{bottom.d.ts → regions/bottomOverlay.d.ts} +16 -11
- package/3rdparty/walkontable/src/overlay/{bottom.js → regions/bottomOverlay.js} +111 -66
- package/3rdparty/walkontable/src/overlay/{bottom.mjs → regions/bottomOverlay.mjs} +111 -66
- package/3rdparty/walkontable/src/overlay/regions/inlineStartOverlay.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/{inlineStart.d.ts → regions/inlineStartOverlay.d.ts} +17 -11
- package/3rdparty/walkontable/src/overlay/{inlineStart.js → regions/inlineStartOverlay.js} +120 -67
- package/3rdparty/walkontable/src/overlay/{inlineStart.mjs → regions/inlineStartOverlay.mjs} +120 -67
- package/3rdparty/walkontable/src/overlay/regions/topInlineStartCornerOverlay.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/{topInlineStartCorner.d.ts → regions/topInlineStartCornerOverlay.d.ts} +5 -10
- package/3rdparty/walkontable/src/overlay/{topInlineStartCorner.js → regions/topInlineStartCornerOverlay.js} +13 -16
- package/3rdparty/walkontable/src/overlay/{topInlineStartCorner.mjs → regions/topInlineStartCornerOverlay.mjs} +13 -16
- package/3rdparty/walkontable/src/overlay/regions/topOverlay.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/{top.d.ts → regions/topOverlay.d.ts} +32 -11
- package/3rdparty/walkontable/src/overlay/{top.js → regions/topOverlay.js} +161 -77
- package/3rdparty/walkontable/src/overlay/{top.mjs → regions/topOverlay.mjs} +161 -77
- package/3rdparty/walkontable/src/overlay/resizeMonitor.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/resizeMonitor.d.ts +49 -0
- package/3rdparty/walkontable/src/overlay/resizeMonitor.js +149 -0
- package/3rdparty/walkontable/src/overlay/resizeMonitor.mjs +148 -0
- package/3rdparty/walkontable/src/overlay/scroll/nativeScrollInput.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/scroll/nativeScrollInput.d.ts +62 -0
- package/3rdparty/walkontable/src/overlay/scroll/nativeScrollInput.js +283 -0
- package/3rdparty/walkontable/src/overlay/scroll/nativeScrollInput.mjs +288 -0
- package/3rdparty/walkontable/src/overlay/scroll/scrollSync.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/scroll/scrollSync.d.ts +176 -0
- package/3rdparty/walkontable/src/overlay/scroll/scrollSync.js +542 -0
- package/3rdparty/walkontable/src/overlay/scroll/scrollSync.mjs +550 -0
- package/3rdparty/walkontable/src/overlay/spreaderSize.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/spreaderSize.d.ts +67 -0
- package/3rdparty/walkontable/src/overlay/spreaderSize.js +173 -0
- package/3rdparty/walkontable/src/overlay/spreaderSize.mjs +174 -0
- package/3rdparty/walkontable/src/{stickyScrollStrategy.d.ts → overlay/strategies/stickyScrollStrategy.d.ts} +33 -21
- package/3rdparty/walkontable/src/{stickyScrollStrategy.js → overlay/strategies/stickyScrollStrategy.js} +65 -53
- package/3rdparty/walkontable/src/{stickyScrollStrategy.mjs → overlay/strategies/stickyScrollStrategy.mjs} +63 -50
- package/3rdparty/walkontable/src/ports.d.mts +1 -0
- package/3rdparty/walkontable/src/ports.d.ts +54 -0
- package/3rdparty/walkontable/src/ports.js +23 -0
- package/3rdparty/walkontable/src/ports.mjs +24 -0
- package/3rdparty/walkontable/src/{renderer → render}/_base.d.ts +1 -1
- package/3rdparty/walkontable/src/{renderer → render}/cells.js +1 -1
- package/3rdparty/walkontable/src/{renderer → render}/cells.mjs +1 -1
- package/3rdparty/walkontable/src/{renderer → render}/columnHeaders.d.ts +1 -0
- package/3rdparty/walkontable/src/{renderer → render}/columnHeaders.js +41 -1
- package/3rdparty/walkontable/src/{renderer → render}/columnHeaders.mjs +42 -2
- package/3rdparty/walkontable/src/render/index.d.mts +1 -0
- package/3rdparty/walkontable/src/{renderer → render}/index.d.ts +11 -3
- package/3rdparty/walkontable/src/{renderer → render}/index.js +13 -3
- package/3rdparty/walkontable/src/{renderer → render}/index.mjs +11 -1
- package/3rdparty/walkontable/src/{renderer → render}/rows.js +1 -1
- package/3rdparty/walkontable/src/{renderer → render}/rows.mjs +1 -1
- package/3rdparty/walkontable/src/render/tableRenderer.d.mts +1 -0
- package/3rdparty/walkontable/src/{renderer/table.d.ts → render/tableRenderer.d.ts} +12 -2
- package/3rdparty/walkontable/src/render/tableRenderer.js +375 -0
- package/3rdparty/walkontable/src/{renderer/table.mjs → render/tableRenderer.mjs} +152 -6
- package/3rdparty/walkontable/src/{scroll.d.ts → scroll/scroll.d.ts} +27 -10
- package/3rdparty/walkontable/src/{scroll.js → scroll/scroll.js} +104 -35
- package/3rdparty/walkontable/src/{scroll.mjs → scroll/scroll.mjs} +102 -32
- package/3rdparty/walkontable/src/selection/border/border.d.ts +313 -5
- package/3rdparty/walkontable/src/selection/border/border.js +861 -51
- package/3rdparty/walkontable/src/selection/border/border.mjs +863 -53
- package/3rdparty/walkontable/src/selection/border/types.d.ts +30 -0
- package/3rdparty/walkontable/src/selection/manager.js +242 -12
- package/3rdparty/walkontable/src/selection/manager.mjs +243 -13
- package/3rdparty/walkontable/src/selection/scanner.js +5 -12
- package/3rdparty/walkontable/src/selection/scanner.mjs +5 -12
- package/3rdparty/walkontable/src/settings/accessor.d.mts +2 -0
- package/3rdparty/walkontable/src/settings/accessor.d.ts +74 -0
- package/3rdparty/walkontable/src/settings/accessor.js +78 -0
- package/3rdparty/walkontable/src/settings/accessor.mjs +71 -0
- package/3rdparty/walkontable/src/settings/defaults.d.mts +1 -0
- package/3rdparty/walkontable/src/{settings.d.ts → settings/defaults.d.ts} +16 -77
- package/3rdparty/walkontable/src/settings/defaults.js +146 -0
- package/3rdparty/walkontable/src/settings/defaults.mjs +225 -0
- package/3rdparty/walkontable/src/settings/index.d.mts +1 -0
- package/3rdparty/walkontable/src/settings/index.d.ts +6 -0
- package/3rdparty/walkontable/src/settings/index.js +20 -0
- package/3rdparty/walkontable/src/settings/index.mjs +5 -0
- package/3rdparty/walkontable/src/table/baseTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/baseTable.d.ts +284 -0
- package/3rdparty/walkontable/src/table/baseTable.js +290 -0
- package/3rdparty/walkontable/src/table/baseTable.mjs +278 -0
- package/3rdparty/walkontable/src/table/cellAccess.d.mts +1 -0
- package/3rdparty/walkontable/src/table/cellAccess.d.ts +101 -0
- package/3rdparty/walkontable/src/table/cellAccess.js +238 -0
- package/3rdparty/walkontable/src/table/cellAccess.mjs +229 -0
- package/3rdparty/walkontable/src/table/domScaffold.d.mts +1 -0
- package/3rdparty/walkontable/src/table/domScaffold.d.ts +37 -0
- package/3rdparty/walkontable/src/table/domScaffold.js +145 -0
- package/3rdparty/walkontable/src/table/domScaffold.mjs +136 -0
- package/3rdparty/walkontable/src/table/drawCycle.d.mts +1 -0
- package/3rdparty/walkontable/src/table/drawCycle.d.ts +16 -0
- package/3rdparty/walkontable/src/table/drawCycle.js +405 -0
- package/3rdparty/walkontable/src/table/drawCycle.mjs +403 -0
- package/3rdparty/walkontable/src/table/rangeQuery/renderedRange.d.mts +1 -0
- package/3rdparty/walkontable/src/table/rangeQuery/renderedRange.d.ts +38 -0
- package/3rdparty/walkontable/src/table/rangeQuery/renderedRange.js +15 -0
- package/3rdparty/walkontable/src/table/rangeQuery/renderedRange.mjs +14 -0
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyColumnsStart.d.ts +1 -1
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyColumnsStart.js +1 -1
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyColumnsStart.mjs +1 -1
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsBottom.d.ts +1 -1
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsTop.d.ts +1 -1
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsTop.js +1 -1
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsTop.mjs +1 -1
- package/3rdparty/walkontable/src/table/rangeQuery/viewportPredicates.d.mts +2 -0
- package/3rdparty/walkontable/src/table/rangeQuery/viewportPredicates.d.ts +226 -0
- package/3rdparty/walkontable/src/table/rangeQuery/viewportPredicates.js +251 -0
- package/3rdparty/walkontable/src/table/rangeQuery/viewportPredicates.mjs +241 -0
- package/3rdparty/walkontable/src/table/rangeQuery/virtualRange.d.mts +1 -0
- package/3rdparty/walkontable/src/table/rangeQuery/virtualRange.d.ts +14 -0
- package/3rdparty/walkontable/src/table/rangeQuery/virtualRange.js +196 -0
- package/3rdparty/walkontable/src/table/rangeQuery/virtualRange.mjs +179 -0
- package/3rdparty/walkontable/src/table/regions/bottomInlineStartCornerTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/regions/bottomInlineStartCornerTable.d.ts +16 -0
- package/3rdparty/walkontable/src/table/{bottomInlineStartCorner.js → regions/bottomInlineStartCornerTable.js} +9 -12
- package/3rdparty/walkontable/src/table/regions/bottomInlineStartCornerTable.mjs +21 -0
- package/3rdparty/walkontable/src/table/regions/bottomTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/regions/bottomTable.d.ts +15 -0
- package/3rdparty/walkontable/src/table/regions/bottomTable.js +35 -0
- package/3rdparty/walkontable/src/table/regions/bottomTable.mjs +20 -0
- package/3rdparty/walkontable/src/table/regions/inlineStartTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/regions/inlineStartTable.d.ts +12 -0
- package/3rdparty/walkontable/src/table/regions/inlineStartTable.js +32 -0
- package/3rdparty/walkontable/src/table/regions/inlineStartTable.mjs +17 -0
- package/3rdparty/walkontable/src/table/regions/masterTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/{master.d.ts → regions/masterTable.d.ts} +4 -13
- package/3rdparty/walkontable/src/table/{master.js → regions/masterTable.js} +27 -57
- package/3rdparty/walkontable/src/table/{master.mjs → regions/masterTable.mjs} +26 -56
- package/3rdparty/walkontable/src/table/regions/topInlineStartCornerTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/regions/topInlineStartCornerTable.d.ts +16 -0
- package/3rdparty/walkontable/src/table/{topInlineStartCorner.js → regions/topInlineStartCornerTable.js} +9 -12
- package/3rdparty/walkontable/src/table/regions/topInlineStartCornerTable.mjs +21 -0
- package/3rdparty/walkontable/src/table/regions/topTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/regions/topTable.d.ts +15 -0
- package/3rdparty/walkontable/src/table/regions/topTable.js +35 -0
- package/3rdparty/walkontable/src/table/regions/topTable.mjs +20 -0
- package/3rdparty/walkontable/src/types.d.ts +7 -69
- package/3rdparty/walkontable/src/types.mjs +2 -1
- package/3rdparty/walkontable/src/utils/pointerToCoords.d.mts +1 -0
- package/3rdparty/walkontable/src/utils/{cellCoords.d.ts → pointerToCoords.d.ts} +24 -0
- package/3rdparty/walkontable/src/utils/pointerToCoords.js +181 -0
- package/3rdparty/walkontable/src/utils/pointerToCoords.mjs +186 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/gatherLayoutInput.d.mts +1 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/gatherLayoutInput.d.ts +40 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/gatherLayoutInput.js +139 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/gatherLayoutInput.mjs +131 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/layoutSnapshot.d.mts +1 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/layoutSnapshot.d.ts +133 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/layoutSnapshot.js +18 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/layoutSnapshot.mjs +18 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/resolveLayout.d.mts +1 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/resolveLayout.d.ts +17 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/resolveLayout.js +104 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/resolveLayout.mjs +99 -0
- package/3rdparty/walkontable/src/viewport/calculatorFactory.d.mts +1 -0
- package/3rdparty/walkontable/src/viewport/calculatorFactory.d.ts +84 -0
- package/3rdparty/walkontable/src/viewport/calculatorFactory.js +588 -0
- package/3rdparty/walkontable/src/viewport/calculatorFactory.mjs +601 -0
- package/3rdparty/walkontable/src/viewport/viewport.d.ts +267 -0
- package/3rdparty/walkontable/src/viewport/viewport.js +363 -0
- package/3rdparty/walkontable/src/viewport/viewport.mjs +355 -0
- package/3rdparty/walkontable/src/viewport/workspaceSize.d.mts +1 -0
- package/3rdparty/walkontable/src/viewport/workspaceSize.d.ts +59 -0
- package/3rdparty/walkontable/src/viewport/workspaceSize.js +284 -0
- package/3rdparty/walkontable/src/viewport/workspaceSize.mjs +282 -0
- package/3rdparty/walkontable/src/wire.d.mts +1 -0
- package/3rdparty/walkontable/src/wire.d.ts +81 -0
- package/3rdparty/walkontable/src/wire.js +56 -0
- package/3rdparty/walkontable/src/wire.mjs +56 -0
- package/LICENSE.txt +1 -1
- package/README.md +2 -2
- package/base.d.ts +10 -2
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/cellTypes/checkboxType/accessors/valueSetter.d.ts +1 -1
- package/cellTypes/checkboxType/accessors/valueSetter.js +3 -1
- package/cellTypes/checkboxType/accessors/valueSetter.mjs +3 -1
- package/cellTypes/index.d.ts +3 -2
- package/cellTypes/index.js +9 -0
- package/cellTypes/index.mjs +5 -2
- package/cellTypes/intlDatetimeType/index.d.mts +1 -0
- package/cellTypes/intlDatetimeType/index.d.ts +1 -0
- package/cellTypes/intlDatetimeType/index.js +19 -0
- package/cellTypes/intlDatetimeType/index.mjs +1 -0
- package/cellTypes/intlDatetimeType/intlDatetimeType.d.mts +1 -0
- package/cellTypes/intlDatetimeType/intlDatetimeType.d.ts +16 -0
- package/cellTypes/intlDatetimeType/intlDatetimeType.js +31 -0
- package/cellTypes/intlDatetimeType/intlDatetimeType.mjs +15 -0
- package/cellTypes/multiSelectType/index.d.ts +1 -1
- package/cellTypes/multiSelectType/index.js +3 -0
- package/cellTypes/multiSelectType/index.mjs +1 -1
- package/cellTypes/multiSelectType/multiSelectType.d.ts +1 -0
- package/cellTypes/multiSelectType/multiSelectType.js +4 -0
- package/cellTypes/multiSelectType/multiSelectType.mjs +1 -0
- package/cellTypes/numericType/accessors/valueSetter.js +30 -2
- package/cellTypes/numericType/accessors/valueSetter.mjs +31 -3
- package/core/coordsMapper/rangeToRenderableMapper.js +5 -12
- package/core/coordsMapper/rangeToRenderableMapper.mjs +5 -12
- package/core/hooks/bucket.d.ts +40 -6
- package/core/hooks/bucket.js +113 -84
- package/core/hooks/bucket.mjs +118 -84
- package/core/hooks/constants.js +254 -16
- package/core/hooks/constants.mjs +254 -16
- package/core/hooks/index.js +28 -25
- package/core/hooks/index.mjs +28 -25
- package/core/layout/constants.d.ts +11 -0
- package/core/layout/constants.js +6 -0
- package/core/layout/constants.mjs +12 -0
- package/core/layout/domSlot.d.ts +3 -1
- package/core/layout/domSlot.js +21 -14
- package/core/layout/domSlot.mjs +21 -14
- package/core/layout/index.d.ts +2 -2
- package/core/layout/index.js +6 -0
- package/core/layout/index.mjs +2 -2
- package/core/layout/layoutManager.d.ts +13 -0
- package/core/layout/layoutManager.js +25 -13
- package/core/layout/layoutManager.mjs +26 -11
- package/core/settings.d.ts +59 -6
- package/core/types.d.ts +15 -1
- package/core/types.mjs +9 -0
- package/core.js +481 -85
- package/core.mjs +483 -87
- package/dataMap/dataMap.d.ts +3 -13
- package/dataMap/dataMap.js +101 -44
- package/dataMap/dataMap.mjs +102 -45
- package/dataMap/dataSource.js +4 -1
- package/dataMap/dataSource.mjs +4 -1
- package/dataMap/metaManager/index.d.ts +62 -8
- package/dataMap/metaManager/index.js +66 -0
- package/dataMap/metaManager/index.mjs +66 -0
- package/dataMap/metaManager/lazyFactoryMap.d.ts +68 -43
- package/dataMap/metaManager/lazyFactoryMap.js +490 -110
- package/dataMap/metaManager/lazyFactoryMap.mjs +504 -111
- package/dataMap/metaManager/metaLayers/cellMeta.d.ts +55 -8
- package/dataMap/metaManager/metaLayers/cellMeta.js +112 -17
- package/dataMap/metaManager/metaLayers/cellMeta.mjs +112 -17
- package/dataMap/metaManager/metaLayers/columnMeta.d.ts +2 -1
- package/dataMap/metaManager/metaLayers/columnMeta.js +1 -0
- package/dataMap/metaManager/metaLayers/columnMeta.mjs +1 -0
- package/dataMap/metaManager/metaSchema.js +712 -31
- package/dataMap/metaManager/metaSchema.mjs +712 -31
- package/dataMap/metaManager/mods/dynamicCellMeta.d.ts +24 -10
- package/dataMap/metaManager/mods/dynamicCellMeta.js +245 -28
- package/dataMap/metaManager/mods/dynamicCellMeta.mjs +246 -29
- package/dataMap/metaManager/mods/extendMetaProperties.js +4 -9
- package/dataMap/metaManager/mods/extendMetaProperties.mjs +4 -9
- package/dataMap/sourceDataValidator.d.ts +13 -21
- package/dataMap/sourceDataValidator.js +39 -29
- package/dataMap/sourceDataValidator.mjs +50 -33
- package/dist/handsontable.full.js +34553 -9903
- package/dist/handsontable.full.min.js +168 -112
- package/dist/handsontable.js +31541 -13409
- package/dist/handsontable.min.js +172 -116
- package/dist/languages/all.js +2 -1
- package/dist/languages/all.min.js +1 -1
- package/dist/languages/fa-IR.js +2 -1
- package/dist/languages/fa-IR.min.js +1 -1
- package/dist/themes/classic.js +9 -3
- package/dist/themes/classic.min.js +4 -4
- package/dist/themes/horizon.js +9 -3
- package/dist/themes/horizon.min.js +4 -4
- package/dist/themes/main.js +9 -3
- package/dist/themes/main.min.js +4 -4
- package/dist/themes/static/variables/colors/ant.js +3 -3
- package/dist/themes/static/variables/colors/ant.min.js +3 -3
- package/dist/themes/static/variables/colors/classic.js +3 -3
- package/dist/themes/static/variables/colors/classic.min.js +3 -3
- package/dist/themes/static/variables/colors/horizon.js +3 -3
- package/dist/themes/static/variables/colors/horizon.min.js +3 -3
- package/dist/themes/static/variables/colors/main.js +3 -3
- package/dist/themes/static/variables/colors/main.min.js +3 -3
- package/dist/themes/static/variables/colors/material.js +3 -3
- package/dist/themes/static/variables/colors/material.min.js +3 -3
- package/dist/themes/static/variables/colors/shadcn.js +3 -3
- package/dist/themes/static/variables/colors/shadcn.min.js +3 -3
- package/dist/themes/static/variables/density.js +3 -3
- package/dist/themes/static/variables/density.min.js +3 -3
- package/dist/themes/static/variables/helpers/iconsMap.js +4 -9
- package/dist/themes/static/variables/helpers/iconsMap.min.js +4 -9
- package/dist/themes/static/variables/icons/horizon.js +3 -3
- package/dist/themes/static/variables/icons/horizon.min.js +3 -3
- package/dist/themes/static/variables/icons/main.js +3 -3
- package/dist/themes/static/variables/icons/main.min.js +3 -3
- package/dist/themes/static/variables/sizing.js +3 -3
- package/dist/themes/static/variables/sizing.min.js +3 -3
- package/dist/themes/static/variables/tokens/classic.js +9 -3
- package/dist/themes/static/variables/tokens/classic.min.js +4 -4
- package/dist/themes/static/variables/tokens/horizon.js +9 -3
- package/dist/themes/static/variables/tokens/horizon.min.js +4 -4
- package/dist/themes/static/variables/tokens/main.js +9 -3
- package/dist/themes/static/variables/tokens/main.min.js +4 -4
- package/editorManager.js +1 -3
- package/editorManager.mjs +1 -3
- package/editors/autocompleteEditor/autocompleteEditor.js +48 -22
- package/editors/autocompleteEditor/autocompleteEditor.mjs +48 -22
- package/editors/baseEditor/baseEditor.d.ts +15 -3
- package/editors/baseEditor/baseEditor.js +6 -6
- package/editors/baseEditor/baseEditor.mjs +16 -6
- package/editors/factory.js +5 -2
- package/editors/factory.mjs +5 -2
- package/editors/index.d.ts +3 -2
- package/editors/index.js +8 -0
- package/editors/index.mjs +3 -1
- package/editors/intlDatetimeEditor/index.d.mts +1 -0
- package/editors/intlDatetimeEditor/index.d.ts +1 -0
- package/editors/intlDatetimeEditor/index.js +19 -0
- package/editors/intlDatetimeEditor/index.mjs +1 -0
- package/editors/intlDatetimeEditor/intlDatetimeEditor.d.mts +1 -0
- package/editors/intlDatetimeEditor/intlDatetimeEditor.d.ts +42 -0
- package/editors/intlDatetimeEditor/intlDatetimeEditor.js +108 -0
- package/editors/intlDatetimeEditor/intlDatetimeEditor.mjs +93 -0
- package/editors/multiSelectEditor/controllers/dropdownController.js +5 -12
- package/editors/multiSelectEditor/controllers/dropdownController.mjs +5 -12
- package/editors/multiSelectEditor/controllers/inputController.js +1 -3
- package/editors/multiSelectEditor/controllers/inputController.mjs +1 -3
- package/editors/multiSelectEditor/multiSelectEditor.js +16 -21
- package/editors/multiSelectEditor/multiSelectEditor.mjs +17 -22
- package/editors/passwordEditor/passwordEditor.js +5 -12
- package/editors/passwordEditor/passwordEditor.mjs +5 -12
- package/editors/registry.js +4 -9
- package/editors/registry.mjs +4 -9
- package/editors/textEditor/textEditor.js +1 -1
- package/editors/textEditor/textEditor.mjs +2 -2
- package/eventManager.d.ts +3 -3
- package/focusManager/grid.d.ts +28 -0
- package/focusManager/grid.js +84 -14
- package/focusManager/grid.mjs +80 -15
- package/focusManager/scopeManager.js +1 -1
- package/focusManager/scopeManager.mjs +2 -2
- package/handsontable-non-commercial-license.pdf +0 -0
- package/helpers/array.d.ts +25 -0
- package/helpers/array.js +41 -4
- package/helpers/array.mjs +56 -4
- package/helpers/dateTime.d.ts +14 -0
- package/helpers/dateTime.js +74 -2
- package/helpers/dateTime.mjs +73 -2
- package/helpers/dom/cellCoords.js +156 -13
- package/helpers/dom/cellCoords.mjs +156 -13
- package/helpers/dom/element.d.ts +27 -3
- package/helpers/dom/element.js +92 -16
- package/helpers/dom/element.mjs +107 -17
- package/helpers/dom/event.d.ts +58 -0
- package/helpers/dom/event.js +39 -0
- package/helpers/dom/event.mjs +63 -0
- package/helpers/errors.d.ts +5 -0
- package/helpers/errors.js +10 -6
- package/helpers/errors.mjs +10 -6
- package/helpers/feature.d.ts +19 -0
- package/helpers/feature.js +21 -0
- package/helpers/feature.mjs +30 -0
- package/helpers/function.d.ts +1 -1
- package/helpers/function.js +4 -1
- package/helpers/function.mjs +4 -1
- package/helpers/mixed.d.ts +103 -0
- package/helpers/mixed.js +373 -4
- package/helpers/mixed.mjs +413 -4
- package/helpers/moves.js +2 -1
- package/helpers/moves.mjs +2 -1
- package/helpers/number.d.ts +22 -0
- package/helpers/number.js +49 -0
- package/helpers/number.mjs +66 -0
- package/i18n/languages/ar-AR.js +8 -19
- package/i18n/languages/cs-CZ.js +8 -19
- package/i18n/languages/de-CH.js +8 -19
- package/i18n/languages/de-DE.js +8 -19
- package/i18n/languages/en-US.js +8 -19
- package/i18n/languages/es-MX.js +8 -19
- package/i18n/languages/fa-IR.d.ts +1 -0
- package/i18n/languages/fa-IR.js +9 -19
- package/i18n/languages/fa-IR.mjs +1 -0
- package/i18n/languages/fr-FR.js +8 -19
- package/i18n/languages/hr-HR.js +8 -19
- package/i18n/languages/it-IT.js +8 -19
- package/i18n/languages/ja-JP.js +8 -19
- package/i18n/languages/ko-KR.js +8 -19
- package/i18n/languages/lv-LV.js +8 -19
- package/i18n/languages/nb-NO.js +8 -19
- package/i18n/languages/nl-NL.js +8 -19
- package/i18n/languages/pl-PL.js +8 -19
- package/i18n/languages/pt-BR.js +8 -19
- package/i18n/languages/ru-RU.js +8 -19
- package/i18n/languages/sr-SP.js +8 -19
- package/i18n/languages/zh-CN.js +8 -19
- package/i18n/languages/zh-TW.js +8 -19
- package/i18n/registry.js +8 -19
- package/index.d.ts +2 -2
- package/index.js +8 -19
- package/languages/all.js +2 -1
- package/languages/fa-IR.js +2 -1
- package/languages/fa-IR.mjs +1 -0
- package/languages/index.js +2 -1
- package/package.json +61 -1
- package/plugins/autoColumnSize/autoColumnSize.d.ts +24 -1
- package/plugins/autoColumnSize/autoColumnSize.js +506 -94
- package/plugins/autoColumnSize/autoColumnSize.mjs +513 -95
- package/plugins/autoRowSize/autoRowSize.d.ts +40 -5
- package/plugins/autoRowSize/autoRowSize.js +73 -36
- package/plugins/autoRowSize/autoRowSize.mjs +103 -41
- package/plugins/autofill/autofill.js +35 -24
- package/plugins/autofill/autofill.mjs +35 -24
- package/plugins/base/base.d.ts +10 -0
- package/plugins/base/base.js +5 -12
- package/plugins/base/base.mjs +5 -12
- package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +4 -9
- package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +4 -9
- package/plugins/collapsibleColumns/collapsibleColumns.d.ts +4 -0
- package/plugins/collapsibleColumns/collapsibleColumns.js +94 -20
- package/plugins/collapsibleColumns/collapsibleColumns.mjs +98 -20
- package/plugins/columnSorting/columnSorting.d.ts +31 -2
- package/plugins/columnSorting/columnSorting.js +153 -33
- package/plugins/columnSorting/columnSorting.mjs +155 -35
- package/plugins/columnSorting/columnStatesManager.d.ts +1 -1
- package/plugins/columnSorting/columnStatesManager.js +1 -7
- package/plugins/columnSorting/columnStatesManager.mjs +1 -7
- package/plugins/columnSorting/domHelpers.d.ts +3 -0
- package/plugins/columnSorting/domHelpers.js +9 -0
- package/plugins/columnSorting/domHelpers.mjs +3 -3
- package/plugins/columnSorting/rootComparator.js +21 -16
- package/plugins/columnSorting/rootComparator.mjs +21 -16
- package/plugins/columnSorting/sortFunction/checkbox.js +7 -5
- package/plugins/columnSorting/sortFunction/checkbox.mjs +7 -5
- package/plugins/columnSorting/sortFunction/default.js +15 -4
- package/plugins/columnSorting/sortFunction/default.mjs +15 -4
- package/plugins/columnSorting/sortFunction/intlDatetime.d.mts +1 -0
- package/plugins/columnSorting/sortFunction/intlDatetime.d.ts +10 -0
- package/plugins/columnSorting/sortFunction/intlDatetime.js +23 -0
- package/plugins/columnSorting/sortFunction/intlDatetime.mjs +12 -0
- package/plugins/columnSorting/sortService/registry.js +2 -0
- package/plugins/columnSorting/sortService/registry.mjs +2 -0
- package/plugins/columnSorting/utils.d.ts +8 -0
- package/plugins/columnSorting/utils.js +37 -45
- package/plugins/columnSorting/utils.mjs +42 -47
- package/plugins/columnSummary/columnSummary.js +13 -14
- package/plugins/columnSummary/columnSummary.mjs +13 -14
- package/plugins/columnSummary/endpoints.d.ts +69 -2
- package/plugins/columnSummary/endpoints.js +176 -29
- package/plugins/columnSummary/endpoints.mjs +176 -29
- package/plugins/comments/commentEditor.js +5 -10
- package/plugins/comments/commentEditor.mjs +6 -11
- package/plugins/comments/comments.js +5 -12
- package/plugins/comments/comments.mjs +5 -12
- package/plugins/comments/contextMenuItem/addEditComment.js +8 -19
- package/plugins/comments/contextMenuItem/readOnlyComment.js +8 -19
- package/plugins/comments/contextMenuItem/removeComment.js +8 -19
- package/plugins/comments/editorResizeObserver.js +5 -12
- package/plugins/comments/editorResizeObserver.mjs +5 -12
- package/plugins/contextMenu/contextMenu.d.ts +12 -1
- package/plugins/contextMenu/contextMenu.js +34 -15
- package/plugins/contextMenu/contextMenu.mjs +34 -15
- package/plugins/contextMenu/index.d.ts +1 -1
- package/plugins/contextMenu/menu/menu.d.ts +22 -1
- package/plugins/contextMenu/menu/menu.js +216 -15
- package/plugins/contextMenu/menu/menu.mjs +217 -16
- package/plugins/contextMenu/menu/positioner.js +4 -9
- package/plugins/contextMenu/menu/positioner.mjs +4 -9
- package/plugins/contextMenu/predefinedItems/alignment.js +22 -33
- package/plugins/contextMenu/predefinedItems/alignment.mjs +14 -14
- package/plugins/contextMenu/predefinedItems/clearColumn.js +9 -20
- package/plugins/contextMenu/predefinedItems/clearColumn.mjs +1 -1
- package/plugins/contextMenu/predefinedItems/columnLeft.js +8 -19
- package/plugins/contextMenu/predefinedItems/columnRight.js +8 -19
- package/plugins/contextMenu/predefinedItems/index.js +8 -19
- package/plugins/contextMenu/predefinedItems/readOnly.js +11 -22
- package/plugins/contextMenu/predefinedItems/readOnly.mjs +3 -3
- package/plugins/contextMenu/predefinedItems/redo.js +8 -19
- package/plugins/contextMenu/predefinedItems/removeColumn.js +8 -19
- package/plugins/contextMenu/predefinedItems/removeRow.js +8 -19
- package/plugins/contextMenu/predefinedItems/rowAbove.js +8 -19
- package/plugins/contextMenu/predefinedItems/rowBelow.js +8 -19
- package/plugins/contextMenu/predefinedItems/undo.js +8 -19
- package/plugins/contextMenu/utils.js +1 -1
- package/plugins/contextMenu/utils.mjs +1 -1
- package/plugins/copyPaste/contextMenuItem/cut.js +8 -19
- package/plugins/copyPaste/copyPaste.js +62 -20
- package/plugins/copyPaste/copyPaste.mjs +63 -21
- package/plugins/copyPaste/copyableRanges.js +11 -14
- package/plugins/copyPaste/copyableRanges.mjs +11 -14
- package/plugins/copyPaste/pasteEvent.d.ts +1 -1
- package/plugins/customBorders/contextMenuItem/bottom.js +8 -19
- package/plugins/customBorders/contextMenuItem/left.js +8 -19
- package/plugins/customBorders/contextMenuItem/noBorders.js +8 -19
- package/plugins/customBorders/contextMenuItem/right.js +8 -19
- package/plugins/customBorders/contextMenuItem/top.js +8 -19
- package/plugins/customBorders/customBorders.d.ts +21 -40
- package/plugins/customBorders/customBorders.js +1084 -223
- package/plugins/customBorders/customBorders.mjs +1078 -206
- package/plugins/customBorders/utils.d.ts +71 -0
- package/plugins/customBorders/utils.js +63 -0
- package/plugins/customBorders/utils.mjs +101 -0
- package/plugins/dataProvider/dataProvider.js +35 -38
- package/plugins/dataProvider/dataProvider.mjs +27 -19
- package/plugins/dataProvider/query/crud.js +1 -1
- package/plugins/dataProvider/query/crud.mjs +1 -1
- package/plugins/dialog/dialog.js +15 -33
- package/plugins/dialog/dialog.mjs +7 -14
- package/plugins/dialog/ui.js +5 -12
- package/plugins/dialog/ui.mjs +5 -12
- package/plugins/dragToScroll/autoScroller.js +4 -9
- package/plugins/dragToScroll/autoScroller.mjs +4 -9
- package/plugins/dragToScroll/dragToScroll.d.ts +2 -2
- package/plugins/dragToScroll/dragToScroll.js +155 -26
- package/plugins/dragToScroll/dragToScroll.mjs +156 -27
- package/plugins/dragToScroll/scrollTimer.js +4 -9
- package/plugins/dragToScroll/scrollTimer.mjs +4 -9
- package/plugins/dropdownMenu/dropdownMenu.d.ts +5 -1
- package/plugins/dropdownMenu/dropdownMenu.js +50 -15
- package/plugins/dropdownMenu/dropdownMenu.mjs +51 -16
- package/plugins/dropdownMenu/index.d.ts +1 -0
- package/plugins/emptyDataState/emptyDataState.js +15 -33
- package/plugins/emptyDataState/emptyDataState.mjs +7 -14
- package/plugins/emptyDataState/ui.js +4 -9
- package/plugins/emptyDataState/ui.mjs +4 -9
- package/plugins/exportFile/dataProvider.js +5 -1
- package/plugins/exportFile/dataProvider.mjs +5 -1
- package/plugins/exportFile/exportFile.js +13 -31
- package/plugins/exportFile/exportFile.mjs +5 -12
- package/plugins/exportFile/types/csv.js +1 -3
- package/plugins/exportFile/types/csv.mjs +1 -3
- package/plugins/exportFile/types/xlsx/cell-style.js +4 -2
- package/plugins/exportFile/types/xlsx/cell-style.mjs +4 -2
- package/plugins/exportFile/types/xlsx/date-utils.d.ts +15 -0
- package/plugins/exportFile/types/xlsx/date-utils.js +31 -0
- package/plugins/exportFile/types/xlsx/date-utils.mjs +36 -0
- package/plugins/exportFile/types/xlsx.js +10 -3
- package/plugins/exportFile/types/xlsx.mjs +11 -4
- package/plugins/filters/component/_base.d.ts +1 -2
- package/plugins/filters/component/_base.js +1 -2
- package/plugins/filters/component/_base.mjs +1 -2
- package/plugins/filters/component/actionBar.js +9 -22
- package/plugins/filters/component/actionBar.mjs +1 -3
- package/plugins/filters/component/condition.d.ts +1 -0
- package/plugins/filters/component/condition.js +11 -22
- package/plugins/filters/component/condition.mjs +3 -3
- package/plugins/filters/component/operators.js +1 -3
- package/plugins/filters/component/operators.mjs +1 -3
- package/plugins/filters/component/value.d.ts +5 -6
- package/plugins/filters/component/value.js +62 -56
- package/plugins/filters/component/value.mjs +55 -38
- package/plugins/filters/condition/beginsWith.js +8 -19
- package/plugins/filters/condition/between.js +8 -19
- package/plugins/filters/condition/contains.js +8 -19
- package/plugins/filters/condition/date/after.js +10 -20
- package/plugins/filters/condition/date/after.mjs +2 -1
- package/plugins/filters/condition/date/afterOrEqual.js +10 -20
- package/plugins/filters/condition/date/afterOrEqual.mjs +2 -1
- package/plugins/filters/condition/date/before.js +10 -20
- package/plugins/filters/condition/date/before.mjs +2 -1
- package/plugins/filters/condition/date/beforeOrEqual.js +10 -20
- package/plugins/filters/condition/date/beforeOrEqual.mjs +2 -1
- package/plugins/filters/condition/date/today.js +8 -19
- package/plugins/filters/condition/date/tomorrow.js +8 -19
- package/plugins/filters/condition/date/yesterday.js +8 -19
- package/plugins/filters/condition/empty.js +8 -19
- package/plugins/filters/condition/endsWith.js +8 -19
- package/plugins/filters/condition/equal.d.ts +7 -0
- package/plugins/filters/condition/equal.js +12 -19
- package/plugins/filters/condition/equal.mjs +10 -0
- package/plugins/filters/condition/greaterThan.js +8 -19
- package/plugins/filters/condition/greaterThanOrEqual.js +8 -19
- package/plugins/filters/condition/intlDate/after.js +8 -19
- package/plugins/filters/condition/intlDate/afterOrEqual.js +8 -19
- package/plugins/filters/condition/intlDate/before.js +8 -19
- package/plugins/filters/condition/intlDate/beforeOrEqual.js +8 -19
- package/plugins/filters/condition/intlDate/between.js +8 -19
- package/plugins/filters/condition/intlDate/today.js +8 -19
- package/plugins/filters/condition/intlDate/tomorrow.js +8 -19
- package/plugins/filters/condition/intlDate/yesterday.js +8 -19
- package/plugins/filters/condition/intlDatetime/after.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/after.d.ts +18 -0
- package/plugins/filters/condition/intlDatetime/after.js +66 -0
- package/plugins/filters/condition/intlDatetime/after.mjs +22 -0
- package/plugins/filters/condition/intlDatetime/afterOrEqual.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/afterOrEqual.d.ts +18 -0
- package/plugins/filters/condition/intlDatetime/afterOrEqual.js +66 -0
- package/plugins/filters/condition/intlDatetime/afterOrEqual.mjs +22 -0
- package/plugins/filters/condition/intlDatetime/before.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/before.d.ts +18 -0
- package/plugins/filters/condition/intlDatetime/before.js +66 -0
- package/plugins/filters/condition/intlDatetime/before.mjs +22 -0
- package/plugins/filters/condition/intlDatetime/beforeOrEqual.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/beforeOrEqual.d.ts +18 -0
- package/plugins/filters/condition/intlDatetime/beforeOrEqual.js +66 -0
- package/plugins/filters/condition/intlDatetime/beforeOrEqual.mjs +22 -0
- package/plugins/filters/condition/intlDatetime/between.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/between.d.ts +18 -0
- package/plugins/filters/condition/intlDatetime/between.js +67 -0
- package/plugins/filters/condition/intlDatetime/between.mjs +23 -0
- package/plugins/filters/condition/intlDatetime/today.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/today.d.ts +17 -0
- package/plugins/filters/condition/intlDatetime/today.js +65 -0
- package/plugins/filters/condition/intlDatetime/today.mjs +20 -0
- package/plugins/filters/condition/intlDatetime/tomorrow.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/tomorrow.d.ts +17 -0
- package/plugins/filters/condition/intlDatetime/tomorrow.js +66 -0
- package/plugins/filters/condition/intlDatetime/tomorrow.mjs +21 -0
- package/plugins/filters/condition/intlDatetime/yesterday.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/yesterday.d.ts +17 -0
- package/plugins/filters/condition/intlDatetime/yesterday.js +66 -0
- package/plugins/filters/condition/intlDatetime/yesterday.mjs +21 -0
- package/plugins/filters/condition/intlTime/after.js +8 -19
- package/plugins/filters/condition/intlTime/afterOrEqual.js +8 -19
- package/plugins/filters/condition/intlTime/before.js +8 -19
- package/plugins/filters/condition/intlTime/beforeOrEqual.js +8 -19
- package/plugins/filters/condition/intlTime/between.js +8 -19
- package/plugins/filters/condition/lessThan.js +8 -19
- package/plugins/filters/condition/lessThanOrEqual.js +8 -19
- package/plugins/filters/condition/none.js +8 -19
- package/plugins/filters/condition/notBetween.js +8 -19
- package/plugins/filters/condition/notContains.js +8 -19
- package/plugins/filters/condition/notEmpty.js +8 -19
- package/plugins/filters/condition/notEqual.js +8 -19
- package/plugins/filters/conditionCollection.js +4 -7
- package/plugins/filters/conditionCollection.mjs +4 -7
- package/plugins/filters/conditionUpdateObserver.d.ts +2 -2
- package/plugins/filters/conditionUpdateObserver.js +144 -52
- package/plugins/filters/conditionUpdateObserver.mjs +144 -52
- package/plugins/filters/constants.d.ts +1 -0
- package/plugins/filters/constants.js +31 -0
- package/plugins/filters/constants.mjs +28 -0
- package/plugins/filters/dataFilter.d.ts +4 -12
- package/plugins/filters/dataFilter.js +7 -19
- package/plugins/filters/dataFilter.mjs +8 -20
- package/plugins/filters/filters.d.ts +33 -9
- package/plugins/filters/filters.js +104 -62
- package/plugins/filters/filters.mjs +97 -44
- package/plugins/filters/logicalOperations/conjunction.js +8 -19
- package/plugins/filters/logicalOperations/disjunction.js +8 -19
- package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +8 -19
- package/plugins/filters/sortComparators.d.ts +9 -2
- package/plugins/filters/sortComparators.js +34 -1
- package/plugins/filters/sortComparators.mjs +38 -3
- package/plugins/filters/ui/_base.js +8 -19
- package/plugins/filters/ui/input.d.ts +4 -0
- package/plugins/filters/ui/input.js +23 -18
- package/plugins/filters/ui/input.mjs +23 -18
- package/plugins/filters/ui/link.js +4 -9
- package/plugins/filters/ui/link.mjs +4 -9
- package/plugins/filters/ui/multipleSelect.js +40 -35
- package/plugins/filters/ui/multipleSelect.mjs +32 -16
- package/plugins/filters/ui/radioInput.js +4 -9
- package/plugins/filters/ui/radioInput.mjs +4 -9
- package/plugins/filters/ui/select.js +14 -32
- package/plugins/filters/ui/select.mjs +6 -13
- package/plugins/formulas/engine/register.d.ts +5 -4
- package/plugins/formulas/engine/register.js +5 -2
- package/plugins/formulas/engine/register.mjs +9 -5
- package/plugins/formulas/engine/settings.d.ts +2 -6
- package/plugins/formulas/engine/settings.js +29 -4
- package/plugins/formulas/engine/settings.mjs +29 -4
- package/plugins/formulas/engine/types.d.ts +12 -2
- package/plugins/formulas/formulas.d.ts +39 -0
- package/plugins/formulas/formulas.js +748 -55
- package/plugins/formulas/formulas.mjs +752 -57
- package/plugins/formulas/hyperlinkUrl.d.mts +1 -0
- package/plugins/formulas/hyperlinkUrl.d.ts +12 -0
- package/plugins/formulas/hyperlinkUrl.js +32 -0
- package/plugins/formulas/hyperlinkUrl.mjs +32 -0
- package/plugins/formulas/indexSyncer/axisSyncer.d.ts +1 -0
- package/plugins/formulas/indexSyncer/axisSyncer.js +77 -27
- package/plugins/formulas/indexSyncer/axisSyncer.mjs +77 -27
- package/plugins/formulas/indexSyncer/index.js +4 -9
- package/plugins/formulas/indexSyncer/index.mjs +4 -9
- package/plugins/formulas/utils.d.ts +9 -0
- package/plugins/formulas/utils.js +21 -0
- package/plugins/formulas/utils.mjs +25 -0
- package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +8 -19
- package/plugins/hiddenColumns/contextMenuItem/showColumn.js +14 -20
- package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +6 -1
- package/plugins/hiddenColumns/hiddenColumns.js +11 -15
- package/plugins/hiddenColumns/hiddenColumns.mjs +11 -15
- package/plugins/hiddenRows/contextMenuItem/hideRow.js +8 -19
- package/plugins/hiddenRows/contextMenuItem/showRow.js +14 -20
- package/plugins/hiddenRows/contextMenuItem/showRow.mjs +6 -1
- package/plugins/hiddenRows/hiddenRows.js +11 -15
- package/plugins/hiddenRows/hiddenRows.mjs +11 -15
- package/plugins/index.d.ts +5 -1
- package/plugins/index.js +10 -0
- package/plugins/index.mjs +5 -1
- package/plugins/loading/loading.js +13 -31
- package/plugins/loading/loading.mjs +5 -12
- package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +8 -19
- package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +8 -19
- package/plugins/manualColumnFreeze/manualColumnFreeze.js +5 -12
- package/plugins/manualColumnFreeze/manualColumnFreeze.mjs +5 -12
- package/plugins/manualColumnMove/manualColumnMove.d.ts +10 -0
- package/plugins/manualColumnMove/manualColumnMove.js +128 -33
- package/plugins/manualColumnMove/manualColumnMove.mjs +129 -34
- package/plugins/manualColumnResize/manualColumnResize.d.ts +12 -1
- package/plugins/manualColumnResize/manualColumnResize.js +28 -17
- package/plugins/manualColumnResize/manualColumnResize.mjs +28 -17
- package/plugins/manualRowMove/manualRowMove.js +5 -12
- package/plugins/manualRowMove/manualRowMove.mjs +5 -12
- package/plugins/manualRowResize/manualRowResize.d.ts +13 -2
- package/plugins/manualRowResize/manualRowResize.js +29 -18
- package/plugins/manualRowResize/manualRowResize.mjs +29 -18
- package/plugins/mergeCells/cellCoords.d.ts +8 -0
- package/plugins/mergeCells/cellCoords.js +15 -9
- package/plugins/mergeCells/cellCoords.mjs +15 -9
- package/plugins/mergeCells/cellsCollection.d.ts +46 -2
- package/plugins/mergeCells/cellsCollection.js +190 -71
- package/plugins/mergeCells/cellsCollection.mjs +190 -71
- package/plugins/mergeCells/contextMenuItem/toggleMerge.js +8 -19
- package/plugins/mergeCells/focusOrder.d.ts +26 -20
- package/plugins/mergeCells/focusOrder.js +363 -189
- package/plugins/mergeCells/focusOrder.mjs +368 -184
- package/plugins/mergeCells/mergeCells.d.ts +13 -8
- package/plugins/mergeCells/mergeCells.js +327 -76
- package/plugins/mergeCells/mergeCells.mjs +327 -76
- package/plugins/moveCells/helpers.d.mts +1 -0
- package/plugins/moveCells/helpers.d.ts +21 -0
- package/plugins/moveCells/helpers.js +20 -0
- package/plugins/moveCells/helpers.mjs +15 -0
- package/plugins/moveCells/index.d.mts +1 -0
- package/plugins/moveCells/index.d.ts +1 -0
- package/plugins/moveCells/index.js +22 -0
- package/plugins/moveCells/index.mjs +1 -0
- package/plugins/moveCells/moveCells.d.mts +1 -0
- package/plugins/moveCells/moveCells.d.ts +80 -0
- package/plugins/moveCells/moveCells.js +595 -0
- package/plugins/moveCells/moveCells.mjs +580 -0
- package/plugins/multiColumnSorting/multiColumnSorting.d.ts +8 -8
- package/plugins/multiColumnSorting/multiColumnSorting.js +11 -16
- package/plugins/multiColumnSorting/multiColumnSorting.mjs +11 -16
- package/plugins/multiColumnSorting/rootComparator.js +26 -19
- package/plugins/multiColumnSorting/rootComparator.mjs +26 -19
- package/plugins/multipleSelectionHandles/multipleSelectionHandles.d.ts +19 -4
- package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +266 -58
- package/plugins/multipleSelectionHandles/multipleSelectionHandles.mjs +266 -58
- package/plugins/nestedHeaders/nestedHeaders.d.ts +10 -1
- package/plugins/nestedHeaders/nestedHeaders.js +227 -35
- package/plugins/nestedHeaders/nestedHeaders.mjs +227 -35
- package/plugins/nestedHeaders/stateManager/columnArrangement.d.mts +1 -0
- package/plugins/nestedHeaders/stateManager/columnArrangement.d.ts +37 -0
- package/plugins/nestedHeaders/stateManager/columnArrangement.js +35 -0
- package/plugins/nestedHeaders/stateManager/columnArrangement.mjs +30 -0
- package/plugins/nestedHeaders/stateManager/deriveSettings.d.mts +1 -0
- package/plugins/nestedHeaders/stateManager/deriveSettings.d.ts +57 -0
- package/plugins/nestedHeaders/stateManager/deriveSettings.js +115 -0
- package/plugins/nestedHeaders/stateManager/deriveSettings.mjs +135 -0
- package/plugins/nestedHeaders/stateManager/headersTree.d.ts +14 -1
- package/plugins/nestedHeaders/stateManager/headersTree.js +4 -9
- package/plugins/nestedHeaders/stateManager/headersTree.mjs +4 -9
- package/plugins/nestedHeaders/stateManager/index.d.ts +76 -13
- package/plugins/nestedHeaders/stateManager/index.js +386 -50
- package/plugins/nestedHeaders/stateManager/index.mjs +387 -51
- package/plugins/nestedHeaders/stateManager/matrixGenerator.js +3 -2
- package/plugins/nestedHeaders/stateManager/matrixGenerator.mjs +3 -2
- package/plugins/nestedHeaders/stateManager/settingsNormalizer.js +5 -1
- package/plugins/nestedHeaders/stateManager/settingsNormalizer.mjs +5 -1
- package/plugins/nestedHeaders/stateManager/sourceSettings.d.ts +23 -6
- package/plugins/nestedHeaders/stateManager/sourceSettings.js +24 -13
- package/plugins/nestedHeaders/stateManager/sourceSettings.mjs +24 -13
- package/plugins/nestedHeaders/stateManager/utils.d.ts +17 -1
- package/plugins/nestedHeaders/stateManager/utils.js +6 -1
- package/plugins/nestedHeaders/stateManager/utils.mjs +6 -1
- package/plugins/nestedHeaders/utils/ghostTable.js +1 -3
- package/plugins/nestedHeaders/utils/ghostTable.mjs +1 -3
- package/plugins/nestedRows/data/dataManager.d.ts +4 -1
- package/plugins/nestedRows/data/dataManager.js +10 -4
- package/plugins/nestedRows/data/dataManager.mjs +10 -4
- package/plugins/nestedRows/nestedRows.d.ts +127 -1
- package/plugins/nestedRows/nestedRows.js +332 -17
- package/plugins/nestedRows/nestedRows.mjs +332 -17
- package/plugins/nestedRows/ui/collapsing.d.ts +58 -0
- package/plugins/nestedRows/ui/collapsing.js +234 -40
- package/plugins/nestedRows/ui/collapsing.mjs +234 -40
- package/plugins/nestedRows/ui/contextMenu.js +12 -28
- package/plugins/nestedRows/ui/contextMenu.mjs +4 -9
- package/plugins/notification/notification.js +13 -31
- package/plugins/notification/notification.mjs +5 -12
- package/plugins/notification/ui.js +4 -9
- package/plugins/notification/ui.mjs +4 -9
- package/plugins/pagination/pagination.js +7 -14
- package/plugins/pagination/pagination.mjs +7 -14
- package/plugins/pagination/ui.js +13 -31
- package/plugins/pagination/ui.mjs +5 -12
- package/plugins/search/search.js +27 -11
- package/plugins/search/search.mjs +27 -11
- package/plugins/selectionHandles/helpers.d.mts +1 -0
- package/plugins/selectionHandles/helpers.d.ts +17 -0
- package/plugins/selectionHandles/helpers.js +16 -0
- package/plugins/selectionHandles/helpers.mjs +11 -0
- package/plugins/selectionHandles/index.d.mts +1 -0
- package/plugins/selectionHandles/index.d.ts +1 -0
- package/plugins/selectionHandles/index.js +22 -0
- package/plugins/selectionHandles/index.mjs +1 -0
- package/plugins/selectionHandles/selectionHandles.d.mts +1 -0
- package/plugins/selectionHandles/selectionHandles.d.ts +52 -0
- package/plugins/selectionHandles/selectionHandles.js +335 -0
- package/plugins/selectionHandles/selectionHandles.mjs +316 -0
- package/plugins/stretchColumns/calculator.js +5 -12
- package/plugins/stretchColumns/calculator.mjs +5 -12
- package/plugins/stretchColumns/strategies/last.js +4 -9
- package/plugins/stretchColumns/strategies/last.mjs +4 -9
- package/plugins/stretchColumns/stretchColumns.js +4 -9
- package/plugins/stretchColumns/stretchColumns.mjs +4 -9
- package/plugins/touchScroll/touchScroll.js +4 -9
- package/plugins/touchScroll/touchScroll.mjs +4 -9
- package/plugins/trimRows/trimRows.d.ts +1 -1
- package/plugins/trimRows/trimRows.js +10 -11
- package/plugins/trimRows/trimRows.mjs +10 -11
- package/plugins/types.d.ts +4 -0
- package/plugins/undoRedo/actions/cellAlignment.js +1 -1
- package/plugins/undoRedo/actions/cellAlignment.mjs +1 -1
- package/plugins/undoRedo/actions/createColumn.js +4 -1
- package/plugins/undoRedo/actions/createColumn.mjs +4 -1
- package/plugins/undoRedo/actions/createRow.js +4 -1
- package/plugins/undoRedo/actions/createRow.mjs +4 -1
- package/plugins/undoRedo/actions/fixedCounts.d.mts +1 -0
- package/plugins/undoRedo/actions/fixedCounts.d.ts +36 -0
- package/plugins/undoRedo/actions/fixedCounts.js +63 -0
- package/plugins/undoRedo/actions/fixedCounts.mjs +62 -0
- package/plugins/undoRedo/actions/index.js +2 -0
- package/plugins/undoRedo/actions/index.mjs +2 -0
- package/plugins/undoRedo/actions/moveCells.d.mts +1 -0
- package/plugins/undoRedo/actions/moveCells.d.ts +104 -0
- package/plugins/undoRedo/actions/moveCells.js +225 -0
- package/plugins/undoRedo/actions/moveCells.mjs +227 -0
- package/plugins/undoRedo/actions/removeColumn.d.ts +18 -2
- package/plugins/undoRedo/actions/removeColumn.js +11 -4
- package/plugins/undoRedo/actions/removeColumn.mjs +12 -5
- package/plugins/undoRedo/actions/removeRow.js +2 -57
- package/plugins/undoRedo/actions/removeRow.mjs +2 -57
- package/plugins/undoRedo/undoRedo.d.ts +26 -0
- package/plugins/undoRedo/undoRedo.js +40 -11
- package/plugins/undoRedo/undoRedo.mjs +40 -11
- package/plugins/undoRedo/utils.d.ts +29 -0
- package/plugins/undoRedo/utils.js +55 -3
- package/plugins/undoRedo/utils.mjs +59 -0
- package/renderSizeProbe.d.mts +1 -0
- package/renderSizeProbe.d.ts +60 -0
- package/renderSizeProbe.js +161 -0
- package/renderSizeProbe.mjs +174 -0
- package/renderers/checkboxRenderer/checkboxRenderer.js +9 -4
- package/renderers/checkboxRenderer/checkboxRenderer.mjs +9 -4
- package/renderers/index.d.ts +3 -2
- package/renderers/index.js +8 -0
- package/renderers/index.mjs +3 -1
- package/renderers/intlDatetimeRenderer/index.d.mts +1 -0
- package/renderers/intlDatetimeRenderer/index.d.ts +1 -0
- package/renderers/intlDatetimeRenderer/index.js +22 -0
- package/renderers/intlDatetimeRenderer/index.mjs +1 -0
- package/renderers/intlDatetimeRenderer/intlDatetimeRenderer.d.mts +1 -0
- package/renderers/intlDatetimeRenderer/intlDatetimeRenderer.d.ts +26 -0
- package/renderers/intlDatetimeRenderer/intlDatetimeRenderer.js +82 -0
- package/renderers/intlDatetimeRenderer/intlDatetimeRenderer.mjs +67 -0
- package/renderers/multiSelectRenderer/multiSelectRenderer.js +2 -3
- package/renderers/multiSelectRenderer/multiSelectRenderer.mjs +2 -3
- package/renderers/multiSelectRenderer/utils/utils.d.ts +1 -1
- package/renderers/multiSelectRenderer/utils/utils.js +11 -8
- package/renderers/multiSelectRenderer/utils/utils.mjs +11 -8
- package/renderers/renderCell.d.mts +1 -0
- package/renderers/renderCell.d.ts +37 -0
- package/renderers/renderCell.js +43 -0
- package/renderers/renderCell.mjs +48 -0
- package/selection/highlight/highlight.js +1 -3
- package/selection/highlight/highlight.mjs +1 -3
- package/selection/highlight/types/areaLayered.d.ts +3 -1
- package/selection/highlight/types/areaLayered.js +4 -2
- package/selection/highlight/types/areaLayered.mjs +6 -2
- package/selection/highlight/types/focus.d.ts +3 -1
- package/selection/highlight/types/focus.js +3 -2
- package/selection/highlight/types/focus.mjs +5 -2
- package/selection/mouseEventHandler.js +29 -26
- package/selection/mouseEventHandler.mjs +29 -26
- package/selection/moveCells.d.mts +1 -0
- package/selection/moveCells.d.ts +15 -0
- package/selection/moveCells.js +13 -0
- package/selection/moveCells.mjs +9 -0
- package/selection/selection.d.ts +56 -2
- package/selection/selection.js +162 -36
- package/selection/selection.mjs +154 -17
- package/selection/transformation/_base.js +5 -12
- package/selection/transformation/_base.mjs +5 -12
- package/selection/types.d.ts +3 -0
- package/settings.d.ts +24 -3
- package/shortcuts/context.d.ts +4 -0
- package/shortcuts/context.js +16 -8
- package/shortcuts/context.mjs +20 -8
- package/shortcuts/contexts/commands/populateSelectedCellsData.js +1 -1
- package/shortcuts/contexts/commands/populateSelectedCellsData.mjs +1 -1
- package/styles/handsontable.css +504 -158
- package/styles/handsontable.min.css +4 -4
- package/styles/handsontableStyles.js +1 -1
- package/styles/handsontableStyles.mjs +1 -1
- package/styles/ht-icons-horizon.css +1 -10
- package/styles/ht-icons-horizon.min.css +4 -4
- package/styles/ht-icons-main.css +1 -10
- package/styles/ht-icons-main.min.css +4 -4
- package/styles/ht-theme-classic-no-icons.css +6 -0
- package/styles/ht-theme-classic-no-icons.min.css +4 -4
- package/styles/ht-theme-classic.css +7 -10
- package/styles/ht-theme-classic.min.css +4 -4
- package/styles/ht-theme-horizon-no-icons.css +6 -0
- package/styles/ht-theme-horizon-no-icons.min.css +4 -4
- package/styles/ht-theme-horizon.css +7 -10
- package/styles/ht-theme-horizon.min.css +4 -4
- package/styles/ht-theme-main-no-icons.css +6 -0
- package/styles/ht-theme-main-no-icons.min.css +4 -4
- package/styles/ht-theme-main.css +7 -10
- package/styles/ht-theme-main.min.css +4 -4
- package/tableView.d.ts +17 -4
- package/tableView.js +211 -53
- package/tableView.mjs +212 -54
- package/themes/engine/builder.js +5 -12
- package/themes/engine/builder.mjs +5 -12
- package/themes/engine/index.d.ts +2 -1
- package/themes/engine/index.js +3 -0
- package/themes/engine/index.mjs +1 -1
- package/themes/engine/manager.d.ts +75 -3
- package/themes/engine/manager.js +247 -18
- package/themes/engine/manager.mjs +254 -18
- package/themes/engine/utils/cssVariables.d.ts +18 -1
- package/themes/engine/utils/cssVariables.js +27 -11
- package/themes/engine/utils/cssVariables.mjs +28 -11
- package/themes/engine/utils/validation.js +7 -0
- package/themes/engine/utils/validation.mjs +7 -0
- package/themes/static/variables/helpers/iconsMap.js +1 -6
- package/themes/static/variables/helpers/iconsMap.mjs +1 -6
- package/themes/static/variables/tokens/classic.js +6 -0
- package/themes/static/variables/tokens/classic.mjs +6 -0
- package/themes/static/variables/tokens/horizon.js +6 -0
- package/themes/static/variables/tokens/horizon.mjs +6 -0
- package/themes/static/variables/tokens/main.js +6 -0
- package/themes/static/variables/tokens/main.mjs +6 -0
- package/themes/types.d.ts +1 -1
- package/translations/changesObservable/observable.js +4 -9
- package/translations/changesObservable/observable.mjs +4 -9
- package/translations/changesObservable/observer.js +4 -9
- package/translations/changesObservable/observer.mjs +4 -9
- package/translations/indexMapper.d.ts +14 -9
- package/translations/indexMapper.js +109 -49
- package/translations/indexMapper.mjs +109 -49
- package/translations/mapCollections/aggregatedCollection.js +20 -35
- package/translations/mapCollections/aggregatedCollection.mjs +20 -35
- package/translations/mapCollections/mapCollection.d.ts +10 -4
- package/translations/mapCollections/mapCollection.js +2 -2
- package/translations/mapCollections/mapCollection.mjs +2 -2
- package/translations/maps/booleanMap.d.mts +1 -0
- package/translations/maps/booleanMap.d.ts +86 -0
- package/translations/maps/booleanMap.js +293 -0
- package/translations/maps/booleanMap.mjs +301 -0
- package/translations/maps/hidingMap.d.ts +5 -2
- package/translations/maps/hidingMap.js +8 -3
- package/translations/maps/hidingMap.mjs +8 -3
- package/translations/maps/index.d.ts +5 -2
- package/translations/maps/index.js +7 -3
- package/translations/maps/index.mjs +10 -2
- package/translations/maps/indexMap.d.ts +26 -2
- package/translations/maps/indexMap.js +73 -6
- package/translations/maps/indexMap.mjs +73 -6
- package/translations/maps/indexesSequence.d.ts +53 -2
- package/translations/maps/indexesSequence.js +218 -3
- package/translations/maps/indexesSequence.mjs +226 -3
- package/translations/maps/trimmingMap.d.ts +5 -2
- package/translations/maps/trimmingMap.js +8 -3
- package/translations/maps/trimmingMap.mjs +8 -3
- package/translations/maps/utils/actionsOnIndexes.js +20 -1
- package/translations/maps/utils/actionsOnIndexes.mjs +20 -1
- package/translations/maps/utils/indexesSequence.js +12 -3
- package/translations/maps/utils/indexesSequence.mjs +12 -3
- package/translations/maps/utils/physicallyIndexed.js +12 -1
- package/translations/maps/utils/physicallyIndexed.mjs +12 -1
- package/utils/entitlementLicenseKey/classify.d.mts +1 -0
- package/utils/entitlementLicenseKey/classify.d.ts +34 -0
- package/utils/entitlementLicenseKey/classify.js +97 -0
- package/utils/entitlementLicenseKey/classify.mjs +96 -0
- package/utils/entitlementLicenseKey/constants.d.mts +1 -0
- package/utils/entitlementLicenseKey/constants.d.ts +69 -0
- package/utils/entitlementLicenseKey/constants.js +54 -0
- package/utils/entitlementLicenseKey/constants.mjs +66 -0
- package/utils/entitlementLicenseKey/detectFormat.d.mts +1 -0
- package/utils/entitlementLicenseKey/detectFormat.d.ts +23 -0
- package/utils/entitlementLicenseKey/detectFormat.js +60 -0
- package/utils/entitlementLicenseKey/detectFormat.mjs +60 -0
- package/utils/entitlementLicenseKey/encoding.d.mts +1 -0
- package/utils/entitlementLicenseKey/encoding.d.ts +58 -0
- package/utils/entitlementLicenseKey/encoding.js +161 -0
- package/utils/entitlementLicenseKey/encoding.mjs +172 -0
- package/utils/entitlementLicenseKey/extractKeyData.d.mts +1 -0
- package/utils/entitlementLicenseKey/extractKeyData.d.ts +47 -0
- package/utils/entitlementLicenseKey/extractKeyData.js +213 -0
- package/utils/entitlementLicenseKey/extractKeyData.mjs +232 -0
- package/utils/entitlementLicenseKey/grants.d.mts +1 -0
- package/utils/entitlementLicenseKey/grants.d.ts +54 -0
- package/utils/entitlementLicenseKey/grants.js +68 -0
- package/utils/entitlementLicenseKey/grants.mjs +84 -0
- package/utils/entitlementLicenseKey/index.d.mts +1 -0
- package/utils/entitlementLicenseKey/index.d.ts +8 -0
- package/utils/entitlementLicenseKey/index.js +53 -0
- package/utils/entitlementLicenseKey/index.mjs +6 -0
- package/utils/entitlementLicenseKey/sha512.d.mts +1 -0
- package/utils/entitlementLicenseKey/sha512.d.ts +11 -0
- package/utils/entitlementLicenseKey/sha512.js +328 -0
- package/utils/entitlementLicenseKey/sha512.mjs +327 -0
- package/utils/entitlementLicenseKey/types.d.mts +1 -0
- package/utils/entitlementLicenseKey/types.d.ts +84 -0
- package/utils/entitlementLicenseKey/types.js +8 -0
- package/utils/entitlementLicenseKey/types.mjs +10 -0
- package/utils/ghostTable.d.ts +1 -0
- package/utils/ghostTable.js +58 -11
- package/utils/ghostTable.mjs +58 -11
- package/utils/interval.js +5 -12
- package/utils/interval.mjs +5 -12
- package/utils/licenseBranding/badge.d.mts +1 -0
- package/utils/licenseBranding/badge.d.ts +21 -0
- package/utils/licenseBranding/badge.js +237 -0
- package/utils/licenseBranding/badge.mjs +244 -0
- package/utils/licenseBranding/content.d.mts +1 -0
- package/utils/licenseBranding/content.d.ts +54 -0
- package/utils/licenseBranding/content.js +93 -0
- package/utils/licenseBranding/content.mjs +79 -0
- package/utils/licenseBranding/index.d.mts +1 -0
- package/utils/licenseBranding/index.d.ts +14 -0
- package/utils/licenseBranding/index.js +55 -0
- package/utils/licenseBranding/index.mjs +56 -0
- package/utils/licenseBranding/lockScreen.d.mts +1 -0
- package/utils/licenseBranding/lockScreen.d.ts +23 -0
- package/utils/licenseBranding/lockScreen.js +150 -0
- package/utils/licenseBranding/lockScreen.mjs +159 -0
- package/utils/licenseNotification.d.ts +19 -0
- package/utils/licenseNotification.js +56 -29
- package/utils/licenseNotification.mjs +61 -29
- package/utils/movableMeta.d.mts +1 -0
- package/utils/movableMeta.d.ts +40 -0
- package/utils/movableMeta.js +47 -0
- package/utils/movableMeta.mjs +46 -0
- package/utils/parseTable.js +1 -1
- package/utils/parseTable.mjs +1 -1
- package/utils/samplesGenerator.d.ts +41 -14
- package/utils/samplesGenerator.js +112 -42
- package/utils/samplesGenerator.mjs +112 -42
- package/utils/stylesHandler.d.ts +13 -0
- package/utils/stylesHandler.js +60 -14
- package/utils/stylesHandler.mjs +60 -14
- package/validators/autocompleteValidator/autocompleteValidator.js +3 -0
- package/validators/autocompleteValidator/autocompleteValidator.mjs +3 -0
- package/validators/index.d.ts +3 -2
- package/validators/index.js +8 -0
- package/validators/index.mjs +3 -1
- package/validators/intlDatetimeValidator/index.d.mts +1 -0
- package/validators/intlDatetimeValidator/index.d.ts +1 -0
- package/validators/intlDatetimeValidator/index.js +25 -0
- package/validators/intlDatetimeValidator/index.mjs +1 -0
- package/validators/intlDatetimeValidator/intlDatetimeValidator.d.mts +1 -0
- package/validators/intlDatetimeValidator/intlDatetimeValidator.d.ts +28 -0
- package/validators/intlDatetimeValidator/intlDatetimeValidator.js +49 -0
- package/validators/intlDatetimeValidator/intlDatetimeValidator.mjs +37 -0
- package/3rdparty/walkontable/src/overlay/bottom.d.mts +0 -1
- package/3rdparty/walkontable/src/overlay/bottomInlineStartCorner.d.mts +0 -1
- package/3rdparty/walkontable/src/overlay/inlineStart.d.mts +0 -1
- package/3rdparty/walkontable/src/overlay/top.d.mts +0 -1
- package/3rdparty/walkontable/src/overlay/topInlineStartCorner.d.mts +0 -1
- package/3rdparty/walkontable/src/overlays.d.ts +0 -329
- package/3rdparty/walkontable/src/overlays.js +0 -870
- package/3rdparty/walkontable/src/overlays.mjs +0 -860
- package/3rdparty/walkontable/src/renderer/table.d.mts +0 -1
- package/3rdparty/walkontable/src/renderer/table.js +0 -229
- package/3rdparty/walkontable/src/settings.d.mts +0 -2
- package/3rdparty/walkontable/src/settings.js +0 -196
- package/3rdparty/walkontable/src/settings.mjs +0 -263
- package/3rdparty/walkontable/src/table/bottom.d.mts +0 -2
- package/3rdparty/walkontable/src/table/bottom.d.ts +0 -19
- package/3rdparty/walkontable/src/table/bottom.js +0 -38
- package/3rdparty/walkontable/src/table/bottom.mjs +0 -23
- package/3rdparty/walkontable/src/table/bottomInlineStartCorner.d.mts +0 -2
- package/3rdparty/walkontable/src/table/bottomInlineStartCorner.d.ts +0 -20
- package/3rdparty/walkontable/src/table/bottomInlineStartCorner.mjs +0 -24
- package/3rdparty/walkontable/src/table/inlineStart.d.mts +0 -2
- package/3rdparty/walkontable/src/table/inlineStart.d.ts +0 -16
- package/3rdparty/walkontable/src/table/inlineStart.js +0 -35
- package/3rdparty/walkontable/src/table/inlineStart.mjs +0 -20
- package/3rdparty/walkontable/src/table/master.d.mts +0 -2
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.d.mts +0 -2
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.d.ts +0 -75
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +0 -122
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +0 -112
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.d.mts +0 -2
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.d.ts +0 -75
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +0 -122
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +0 -112
- package/3rdparty/walkontable/src/table/top.d.mts +0 -2
- package/3rdparty/walkontable/src/table/top.d.ts +0 -19
- package/3rdparty/walkontable/src/table/top.js +0 -38
- package/3rdparty/walkontable/src/table/top.mjs +0 -23
- package/3rdparty/walkontable/src/table/topInlineStartCorner.d.mts +0 -2
- package/3rdparty/walkontable/src/table/topInlineStartCorner.d.ts +0 -20
- package/3rdparty/walkontable/src/table/topInlineStartCorner.mjs +0 -24
- package/3rdparty/walkontable/src/table.d.mts +0 -2
- package/3rdparty/walkontable/src/table.d.ts +0 -741
- package/3rdparty/walkontable/src/table.js +0 -1120
- package/3rdparty/walkontable/src/table.mjs +0 -1105
- package/3rdparty/walkontable/src/utils/cellCoords.d.mts +0 -1
- package/3rdparty/walkontable/src/utils/cellCoords.js +0 -54
- package/3rdparty/walkontable/src/utils/cellCoords.mjs +0 -54
- package/3rdparty/walkontable/src/utils/column.d.mts +0 -2
- package/3rdparty/walkontable/src/utils/column.js +0 -75
- package/3rdparty/walkontable/src/utils/column.mjs +0 -70
- package/3rdparty/walkontable/src/utils/positionCache.d.mts +0 -1
- package/3rdparty/walkontable/src/utils/positionCache.d.ts +0 -91
- package/3rdparty/walkontable/src/utils/positionCache.js +0 -193
- package/3rdparty/walkontable/src/utils/positionCache.mjs +0 -194
- package/3rdparty/walkontable/src/utils/row.d.mts +0 -2
- package/3rdparty/walkontable/src/utils/row.js +0 -46
- package/3rdparty/walkontable/src/utils/row.mjs +0 -41
- package/3rdparty/walkontable/src/viewport.d.ts +0 -254
- package/3rdparty/walkontable/src/viewport.js +0 -533
- package/3rdparty/walkontable/src/viewport.mjs +0 -523
- /package/3rdparty/walkontable/src/{renderer → axisSizing/positionCache}/index.d.mts +0 -0
- /package/3rdparty/walkontable/src/{overlays.d.mts → overlay/overlays.d.mts} +0 -0
- /package/3rdparty/walkontable/src/overlay/{_base.d.mts → regions/_base.d.mts} +0 -0
- /package/3rdparty/walkontable/src/{stickyScrollStrategy.d.mts → overlay/strategies/stickyScrollStrategy.d.mts} +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/_base.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/_base.js +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/_base.mjs +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/cells.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/cells.d.ts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/colGroup.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/colGroup.d.ts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/colGroup.js +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/colGroup.mjs +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/columnHeaderRows.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/columnHeaderRows.d.ts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/columnHeaderRows.js +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/columnHeaderRows.mjs +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/columnHeaders.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/rowHeaders.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/rowHeaders.d.ts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/rowHeaders.js +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/rowHeaders.mjs +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/rows.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/rows.d.ts +0 -0
- /package/3rdparty/walkontable/src/{scroll.d.mts → scroll/scroll.d.mts} +0 -0
- /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyColumnsStart.d.mts +0 -0
- /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsBottom.d.mts +0 -0
- /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsBottom.js +0 -0
- /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsBottom.mjs +0 -0
- /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsTop.d.mts +0 -0
- /package/3rdparty/walkontable/src/{viewport.d.mts → viewport/viewport.d.mts} +0 -0
package/core.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { addClass, empty, observeVisibilityChangeOnce, removeClass } from './helpers/dom/element.mjs';
|
|
1
|
+
import { addClass, empty, isShadowRoot, observeVisibilityChangeOnce, removeClass } from './helpers/dom/element.mjs';
|
|
2
2
|
import { isFunction } from './helpers/function.mjs';
|
|
3
3
|
import { isDefined, isUndefined, isRegExp, isEmpty } from './helpers/mixed.mjs';
|
|
4
4
|
import { isMobileBrowser, isIpadOS } from './helpers/browser.mjs';
|
|
@@ -34,8 +34,9 @@ import { warn } from './helpers/console.mjs';
|
|
|
34
34
|
import { throwWithCause } from './helpers/errors.mjs';
|
|
35
35
|
import { install as installAccessibilityAnnouncer, uninstall as uninstallAccessibilityAnnouncer } from './utils/a11yAnnouncer.mjs';
|
|
36
36
|
import { initLicenseNotification } from './utils/licenseNotification.mjs';
|
|
37
|
+
import { initLicenseBranding } from './utils/licenseBranding/index.mjs';
|
|
37
38
|
import { getValueSetterValue } from './utils/valueAccessors.mjs';
|
|
38
|
-
import { createThemeManager } from './themes/engine/index.mjs';
|
|
39
|
+
import { createThemeManager, isThemeOverrideEmpty } from './themes/engine/index.mjs';
|
|
39
40
|
import { LayoutManager } from './core/layout/index.mjs';
|
|
40
41
|
import { getTheme, hasTheme, registerTheme, mainTheme } from './themes/index.mjs';
|
|
41
42
|
import DataMap from './dataMap/dataMap.mjs';
|
|
@@ -189,6 +190,12 @@ let activeGuid = null;
|
|
|
189
190
|
let focusGridManager;
|
|
190
191
|
let viewportScroller;
|
|
191
192
|
let firstRun = true;
|
|
193
|
+
// Guards the "colorScheme/density need the theme engine" warning so it is logged once per
|
|
194
|
+
// instance instead of on every `updateSettings()` call that carries the options.
|
|
195
|
+
let themeOverridesWarningShown = false;
|
|
196
|
+
// Set only when the table is initialized while invisible (see the `init` method). Kept in the closure, not on
|
|
197
|
+
// the instance, because `destroy` nulls every instance property before it could be read there.
|
|
198
|
+
let visibilityObserver = null;
|
|
192
199
|
const mergedUserSettings = {
|
|
193
200
|
...userSettings.initialState,
|
|
194
201
|
...userSettings
|
|
@@ -280,6 +287,9 @@ let activeGuid = null;
|
|
|
280
287
|
'handsontable'
|
|
281
288
|
]);
|
|
282
289
|
addClass(this.rootWrapperElement, 'ht-root-wrapper');
|
|
290
|
+
if (isShadowRoot(this.rootContainer.getRootNode())) {
|
|
291
|
+
addClass(this.rootWrapperElement, 'ht-shadow-dom');
|
|
292
|
+
}
|
|
283
293
|
addClass(this.rootSlotTopElement, 'ht-slot-top');
|
|
284
294
|
addClass(this.rootGridElement, 'ht-grid');
|
|
285
295
|
addClass(this.rootGridContentElement, 'ht-grid-content');
|
|
@@ -478,6 +488,7 @@ let activeGuid = null;
|
|
|
478
488
|
const editor = instance.getActiveEditor();
|
|
479
489
|
return editor ? editor.isOpened() : false;
|
|
480
490
|
},
|
|
491
|
+
isPluginEnabled: (pluginName)=>instance.getPlugin(pluginName)?.enabled === true,
|
|
481
492
|
countRenderableColumns: ()=>instance.view.countRenderableColumns(),
|
|
482
493
|
countRenderableRows: ()=>instance.view.countRenderableRows(),
|
|
483
494
|
countRowHeaders: ()=>instance.countRowHeaders(),
|
|
@@ -625,8 +636,8 @@ let activeGuid = null;
|
|
|
625
636
|
* format `[[index, amount], [index, amount]...]` this can be used to remove
|
|
626
637
|
* non-consecutive columns or rows in one call.
|
|
627
638
|
* @param {number} [amount=1] Amount of rows or columns to remove.
|
|
628
|
-
* @param {string} [source] Optional. Source
|
|
629
|
-
* @param {boolean} [keepEmptyRows] Optional. Flag for
|
|
639
|
+
* @param {string} [source] Optional. Source indicator passed to related hooks.
|
|
640
|
+
* @param {boolean} [keepEmptyRows] Optional. Flag for skipping the post-alter empty row and column adjustment.
|
|
630
641
|
*/ alter (action, index, amount = 1, source, keepEmptyRows) {
|
|
631
642
|
const skipAlter = instance.runHooks('beforeAlter', action, index, amount, source, keepEmptyRows);
|
|
632
643
|
if (skipAlter === false) {
|
|
@@ -684,6 +695,7 @@ let activeGuid = null;
|
|
|
684
695
|
if (Number.isInteger(groupIndex)) {
|
|
685
696
|
groupIndex = Math.max(groupIndex - offset, 0);
|
|
686
697
|
}
|
|
698
|
+
const totalRowsBefore = instance.countRows();
|
|
687
699
|
// TODO: for datamap.removeRow index should be passed as it is (with undefined and null values). If not, the logic
|
|
688
700
|
// inside the datamap.removeRow breaks the removing functionality.
|
|
689
701
|
const wasRemoved = datamap.removeRow(groupIndex, groupAmount, source);
|
|
@@ -702,8 +714,22 @@ let activeGuid = null;
|
|
|
702
714
|
tableMeta.fixedRowsTop -= Math.min(groupAmount, fixedRowsTop - calcIndex);
|
|
703
715
|
}
|
|
704
716
|
const fixedRowsBottom = tableMeta.fixedRowsBottom;
|
|
705
|
-
if (fixedRowsBottom
|
|
706
|
-
|
|
717
|
+
if (fixedRowsBottom) {
|
|
718
|
+
// Count how many of the removed rows belonged to the bottom fixed rows. Those rows occupied
|
|
719
|
+
// the `[totalRowsBefore - fixedRowsBottom, totalRowsBefore - 1]` range, so the boundary has
|
|
720
|
+
// to be compared with the row count from *before* the removal. Rows removed above that
|
|
721
|
+
// range keep the setting untouched (DEV-2551).
|
|
722
|
+
const removedRowsCount = totalRowsBefore - totalRows;
|
|
723
|
+
// With no index passed, `datamap.removeRow` takes the rows from the end, so the removal
|
|
724
|
+
// starts that many rows before the last one. `calcIndex` points at the last row then, not
|
|
725
|
+
// at the first removed one.
|
|
726
|
+
const firstRemovedRowIndex = Number.isInteger(groupIndex) ? calcIndex : Math.max(totalRowsBefore - removedRowsCount, 0);
|
|
727
|
+
const firstFixedRowIndex = totalRowsBefore - fixedRowsBottom;
|
|
728
|
+
const lastRemovedRowIndex = Math.min(firstRemovedRowIndex + removedRowsCount - 1, totalRowsBefore - 1);
|
|
729
|
+
const removedFixedRowsCount = lastRemovedRowIndex - Math.max(firstRemovedRowIndex, firstFixedRowIndex) + 1;
|
|
730
|
+
if (removedFixedRowsCount > 0) {
|
|
731
|
+
tableMeta.fixedRowsBottom -= Math.min(removedFixedRowsCount, fixedRowsBottom);
|
|
732
|
+
}
|
|
707
733
|
}
|
|
708
734
|
if (totalRows === 0) {
|
|
709
735
|
selection.deselect();
|
|
@@ -766,7 +792,11 @@ let activeGuid = null;
|
|
|
766
792
|
}
|
|
767
793
|
const fixedColumnsStart = tableMeta.fixedColumnsStart;
|
|
768
794
|
if (fixedColumnsStart >= calcIndex + 1) {
|
|
769
|
-
|
|
795
|
+
// Since 12.0.0, the "fixedColumnsLeft" is replaced with the "fixedColumnsStart" option.
|
|
796
|
+
// However, keeping the old name still in effect. When both option names are used together,
|
|
797
|
+
// the error is thrown. To prevent that, the engine needs to modify the original option key
|
|
798
|
+
// to bypass the validation.
|
|
799
|
+
tableMeta._fixedColumnsStart -= Math.min(groupAmount, fixedColumnsStart - calcIndex);
|
|
770
800
|
}
|
|
771
801
|
if (Array.isArray(tableMeta.colHeaders)) {
|
|
772
802
|
if (typeof physicalColumnIndex === 'undefined') {
|
|
@@ -832,9 +862,22 @@ let activeGuid = null;
|
|
|
832
862
|
}
|
|
833
863
|
{
|
|
834
864
|
let emptyCols = 0;
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
865
|
+
const canCreateSpareCols = minSpareCols > 0 && !tableMeta.columns && instance.dataType === 'array';
|
|
866
|
+
// Count trailing empty columns, but only when the `minSpareCols` branch below can consume
|
|
867
|
+
// the result, and never beyond `minSpareCols` itself. Verifying that a column is empty
|
|
868
|
+
// scans every row of that column, and this method runs after every change batch - an
|
|
869
|
+
// uncapped count (the previous `countEmptyCols(true)` call) paid O(empty columns * rows)
|
|
870
|
+
// per edit and also ran when only `minCols` was set, where the result was never used.
|
|
871
|
+
if (canCreateSpareCols) {
|
|
872
|
+
for(let visualIndex = instance.countCols() - 1; visualIndex >= 0; visualIndex--){
|
|
873
|
+
if (!instance.isEmptyCol(visualIndex)) {
|
|
874
|
+
break;
|
|
875
|
+
}
|
|
876
|
+
emptyCols += 1;
|
|
877
|
+
if (emptyCols >= minSpareCols) {
|
|
878
|
+
break;
|
|
879
|
+
}
|
|
880
|
+
}
|
|
838
881
|
}
|
|
839
882
|
let nrOfColumns = instance.countCols();
|
|
840
883
|
// should I add empty cols to meet minCols?
|
|
@@ -848,7 +891,7 @@ let activeGuid = null;
|
|
|
848
891
|
});
|
|
849
892
|
}
|
|
850
893
|
// should I add empty cols to meet minSpareCols?
|
|
851
|
-
if (
|
|
894
|
+
if (canCreateSpareCols && emptyCols < minSpareCols) {
|
|
852
895
|
nrOfColumns = instance.countCols();
|
|
853
896
|
const emptyColsMissing = minSpareCols - emptyCols;
|
|
854
897
|
const colsToCreate = Math.min(emptyColsMissing, tableMeta.maxCols - nrOfColumns);
|
|
@@ -986,7 +1029,11 @@ let activeGuid = null;
|
|
|
986
1029
|
clen = Math.max(colInputLength, colSelectionLength);
|
|
987
1030
|
}
|
|
988
1031
|
current.col = start.col;
|
|
989
|
-
|
|
1032
|
+
// The transient read keeps a bulk paste/fill from permanently materializing one meta
|
|
1033
|
+
// object per target cell - this loop only reads (`skipRowOnPaste`, `skipColumnOnPaste`,
|
|
1034
|
+
// `readOnly`, `valueSetter`, `parsePastedValue`); the write itself goes through the
|
|
1035
|
+
// data layer.
|
|
1036
|
+
cellMeta = instance.getCellMetaTransient(current.row, current.col);
|
|
990
1037
|
if ((source === 'CopyPaste.paste' || source === 'Autofill.fill' || source === 'autofill.fill') && cellMeta.skipRowOnPaste) {
|
|
991
1038
|
skippedRow += 1;
|
|
992
1039
|
current.row += 1;
|
|
@@ -1000,7 +1047,7 @@ let activeGuid = null;
|
|
|
1000
1047
|
if (end && current.col > end.col && colSelectionLength > colInputLength || !tableMeta.allowInsertColumn && current.col > instance.countCols() - 1 || current.col >= tableMeta.maxCols) {
|
|
1001
1048
|
break;
|
|
1002
1049
|
}
|
|
1003
|
-
cellMeta = instance.
|
|
1050
|
+
cellMeta = instance.getCellMetaTransient(current.row, current.col);
|
|
1004
1051
|
if ((source === 'CopyPaste.paste' || source === 'Autofill.fill' || source === 'autofill.fill') && cellMeta.skipColumnOnPaste) {
|
|
1005
1052
|
skippedColumn += 1;
|
|
1006
1053
|
current.col += 1;
|
|
@@ -1123,7 +1170,7 @@ let activeGuid = null;
|
|
|
1123
1170
|
const themeName = tableMeta.themeName;
|
|
1124
1171
|
const rootContainerThemeClassName = getThemeClassName(instance.rootContainer);
|
|
1125
1172
|
if (isRootInstance(instance) && !rootContainerThemeClassName && (isObject(theme) || !theme && !themeName)) {
|
|
1126
|
-
initializeThemeManager(theme);
|
|
1173
|
+
initializeThemeManager(theme, readStoredThemeOverrides());
|
|
1127
1174
|
}
|
|
1128
1175
|
dataSource.setData(tableMeta.data);
|
|
1129
1176
|
instance.runHooks('beforeInit');
|
|
@@ -1138,6 +1185,7 @@ let activeGuid = null;
|
|
|
1138
1185
|
if (isRootInstance(this)) {
|
|
1139
1186
|
installAccessibilityAnnouncer(instance.rootPortalElement);
|
|
1140
1187
|
initLicenseNotification(instance);
|
|
1188
|
+
initLicenseBranding(instance);
|
|
1141
1189
|
// Keep the edge slots (top, bottom) as wide as the table so their content
|
|
1142
1190
|
// (toolbars, pagination, license notification) aligns with the grid.
|
|
1143
1191
|
const lastEdgeWidths = {
|
|
@@ -1173,7 +1221,12 @@ let activeGuid = null;
|
|
|
1173
1221
|
this.render();
|
|
1174
1222
|
// Run the logic only if it's the table's initialization and the root element is not visible.
|
|
1175
1223
|
if (!!firstRun && instance.rootElement.offsetParent === null) {
|
|
1176
|
-
observeVisibilityChangeOnce(instance.rootElement, ()=>{
|
|
1224
|
+
visibilityObserver = observeVisibilityChangeOnce(instance.rootElement, ()=>{
|
|
1225
|
+
// A delivery carries the state from the moment its snapshot was taken, so it can arrive after the
|
|
1226
|
+
// instance is gone even though `destroy` disconnects the observer.
|
|
1227
|
+
if (!instance || instance.isDestroyed || !instance.view) {
|
|
1228
|
+
return;
|
|
1229
|
+
}
|
|
1177
1230
|
// Update the spreader size cache before rendering.
|
|
1178
1231
|
instance.view._wt.wtOverlays.updateLastSpreaderSize();
|
|
1179
1232
|
instance.view.adjustElementsSize();
|
|
@@ -1187,11 +1240,85 @@ let activeGuid = null;
|
|
|
1187
1240
|
instance.runHooks('afterInit');
|
|
1188
1241
|
};
|
|
1189
1242
|
/**
|
|
1243
|
+
* Reads the per-instance color scheme and density overrides from a settings object.
|
|
1244
|
+
*
|
|
1245
|
+
* Only the keys actually present are returned, so a missing key keeps the value already applied
|
|
1246
|
+
* instead of resetting it to the theme default.
|
|
1247
|
+
*
|
|
1248
|
+
* @param {object} settings - The settings object to read the overrides from.
|
|
1249
|
+
* @returns {object} The theme overrides object.
|
|
1250
|
+
*/ function readThemeOverrides(settings) {
|
|
1251
|
+
const overrides = {};
|
|
1252
|
+
if (hasOwnProperty(settings, 'colorScheme')) {
|
|
1253
|
+
overrides.colorScheme = settings.colorScheme;
|
|
1254
|
+
}
|
|
1255
|
+
if (hasOwnProperty(settings, 'density')) {
|
|
1256
|
+
overrides.density = settings.density;
|
|
1257
|
+
}
|
|
1258
|
+
return overrides;
|
|
1259
|
+
}
|
|
1260
|
+
/**
|
|
1261
|
+
* Reads the color scheme and density currently configured on this instance.
|
|
1262
|
+
*
|
|
1263
|
+
* Unlike `readThemeOverrides()`, this reads the effective values rather than only the keys that
|
|
1264
|
+
* one payload carries. `updateSettings()` stores grid options on the global meta, which the table
|
|
1265
|
+
* meta inherits through its prototype, so an own-property check would miss them. Use this when
|
|
1266
|
+
* rebuilding a ThemeManager, which has to pick up options set by an earlier call.
|
|
1267
|
+
*
|
|
1268
|
+
* @returns {object} The theme overrides object.
|
|
1269
|
+
*/ function readStoredThemeOverrides() {
|
|
1270
|
+
return {
|
|
1271
|
+
colorScheme: tableMeta.colorScheme,
|
|
1272
|
+
density: tableMeta.density
|
|
1273
|
+
};
|
|
1274
|
+
}
|
|
1275
|
+
/**
|
|
1276
|
+
* Applies the `colorScheme` and `density` options to the ThemeManager of this instance.
|
|
1277
|
+
*
|
|
1278
|
+
* The options are per-instance overrides, so the shared theme object stays untouched and other
|
|
1279
|
+
* grids using the same theme keep their own look.
|
|
1280
|
+
*
|
|
1281
|
+
* @param {object} settings - The settings object that may carry the overrides.
|
|
1282
|
+
* @param {boolean} init - `true` when called during initialization. The initial styles are
|
|
1283
|
+
* injected by the ThemeManager constructor, so nothing has to be refreshed in that case.
|
|
1284
|
+
* @returns {boolean} `true` when the overrides changed and `afterSetTheme` still has to run.
|
|
1285
|
+
*/ function applyThemeOverrides(settings, init) {
|
|
1286
|
+
const overrides = readThemeOverrides(settings);
|
|
1287
|
+
if (!hasOwnProperty(overrides, 'colorScheme') && !hasOwnProperty(overrides, 'density')) {
|
|
1288
|
+
return false;
|
|
1289
|
+
}
|
|
1290
|
+
if (!instance.themeManager) {
|
|
1291
|
+
// Only complain when a value is actually asked for. Clearing the options is documented, and a
|
|
1292
|
+
// framework wrapper re-sends every prop on each render, so warning on key presence alone
|
|
1293
|
+
// would fill the console for grids that never used these options.
|
|
1294
|
+
const isValueRequested = !isThemeOverrideEmpty(overrides.colorScheme) || !isThemeOverrideEmpty(overrides.density);
|
|
1295
|
+
if (isValueRequested && !themeOverridesWarningShown) {
|
|
1296
|
+
themeOverridesWarningShown = true;
|
|
1297
|
+
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.');
|
|
1298
|
+
}
|
|
1299
|
+
return false;
|
|
1300
|
+
}
|
|
1301
|
+
const hasChanged = instance.themeManager.setOverrides(overrides);
|
|
1302
|
+
if (!hasChanged || init) {
|
|
1303
|
+
return false;
|
|
1304
|
+
}
|
|
1305
|
+
// Clear the cache here so the render at the end of `updateSettings` measures the new sizes.
|
|
1306
|
+
// Rendering here as well would paint once with stale meta and then immediately paint again.
|
|
1307
|
+
instance.stylesHandler.clearCache();
|
|
1308
|
+
return true;
|
|
1309
|
+
}
|
|
1310
|
+
/**
|
|
1190
1311
|
* Initializes the ThemeManager with the given theme configuration.
|
|
1191
1312
|
*
|
|
1192
1313
|
* @param {object|boolean} theme - The theme configuration object or `true` to use the default theme.
|
|
1193
|
-
|
|
1314
|
+
* @param {object} [overrides] - The per-instance color scheme and density overrides.
|
|
1315
|
+
*/ function initializeThemeManager(theme, overrides) {
|
|
1194
1316
|
let themeObject;
|
|
1317
|
+
// Tear the previous manager down first. Without this its `<style>` node stays in the wrapper,
|
|
1318
|
+
// and because a new manager prepends its own node the orphan ends up LATER in source order —
|
|
1319
|
+
// so at the same specificity the orphan's override rules win and the grid can never change or
|
|
1320
|
+
// reset a `colorScheme` or `density` that was set at construction time.
|
|
1321
|
+
instance.themeManager?.destroy();
|
|
1195
1322
|
if (typeof theme === 'undefined') {
|
|
1196
1323
|
if (hasTheme('main')) {
|
|
1197
1324
|
themeObject = getTheme('main');
|
|
@@ -1206,7 +1333,8 @@ let activeGuid = null;
|
|
|
1206
1333
|
}
|
|
1207
1334
|
instance.themeManager = createThemeManager({
|
|
1208
1335
|
hot: instance,
|
|
1209
|
-
themeObject
|
|
1336
|
+
themeObject,
|
|
1337
|
+
overrides
|
|
1210
1338
|
});
|
|
1211
1339
|
}
|
|
1212
1340
|
/**
|
|
@@ -1294,7 +1422,14 @@ let activeGuid = null;
|
|
|
1294
1422
|
const visualCol = datamap.propToCol(prop);
|
|
1295
1423
|
let cellProperties;
|
|
1296
1424
|
if (Number.isInteger(visualCol)) {
|
|
1297
|
-
|
|
1425
|
+
// The transient read keeps a bulk change set from permanently materializing one meta
|
|
1426
|
+
// object per changed cell while the validator is looked up. Cells that DO have a
|
|
1427
|
+
// validator switch to the eagerly stored meta object below - validation writes its
|
|
1428
|
+
// `valid` result on the meta, and that result must survive on the stored object.
|
|
1429
|
+
cellProperties = instance.getCellMetaTransient(row, visualCol);
|
|
1430
|
+
if (instance.getCellValidator(cellProperties)) {
|
|
1431
|
+
cellProperties = instance.getCellMeta(row, visualCol);
|
|
1432
|
+
}
|
|
1298
1433
|
} else {
|
|
1299
1434
|
// If there's no requested visual column, we can use the table meta as the cell properties when retrieving
|
|
1300
1435
|
// the cell validator.
|
|
@@ -1329,7 +1464,7 @@ let activeGuid = null;
|
|
|
1329
1464
|
*
|
|
1330
1465
|
* @private
|
|
1331
1466
|
* @param {Array} changes Array in form of [row, prop, oldValue, newValue].
|
|
1332
|
-
* @param {string} source String that identifies how this change will be described in changes array (useful in
|
|
1467
|
+
* @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).
|
|
1333
1468
|
* @fires Hooks#beforeChangeRender
|
|
1334
1469
|
* @fires Hooks#afterChange
|
|
1335
1470
|
*/ function applyChanges(changes, source) {
|
|
@@ -1343,8 +1478,13 @@ let activeGuid = null;
|
|
|
1343
1478
|
continue;
|
|
1344
1479
|
}
|
|
1345
1480
|
if (tableMeta.allowInsertRow) {
|
|
1481
|
+
// Create the whole missing range in one call - one index-mapper insert and one hook
|
|
1482
|
+
// round instead of one per row. Creating row by row made a paste reaching far below
|
|
1483
|
+
// the last row quadratic in the gap size. The loop re-checks the count so a partial
|
|
1484
|
+
// creation (e.g. a `maxRows` clamp) is detected and the change is skipped.
|
|
1346
1485
|
while(changes[i][0] > instance.countRows() - 1){
|
|
1347
|
-
const
|
|
1486
|
+
const missingRows = changes[i][0] - (instance.countRows() - 1);
|
|
1487
|
+
const { delta: numberOfCreatedRows } = datamap.createRow(undefined, missingRows, {
|
|
1348
1488
|
source: 'auto'
|
|
1349
1489
|
});
|
|
1350
1490
|
if (numberOfCreatedRows === 0) {
|
|
@@ -1355,7 +1495,8 @@ let activeGuid = null;
|
|
|
1355
1495
|
}
|
|
1356
1496
|
if (instance.dataType === 'array' && (!tableMeta.columns || tableMeta.columns.length === 0) && tableMeta.allowInsertColumn) {
|
|
1357
1497
|
while(Number(datamap.propToCol(changes[i][1])) > instance.countCols() - 1){
|
|
1358
|
-
const
|
|
1498
|
+
const missingColumns = Number(datamap.propToCol(changes[i][1])) - (instance.countCols() - 1);
|
|
1499
|
+
const { delta: numberOfCreatedColumns } = datamap.createCol(undefined, missingColumns, {
|
|
1359
1500
|
source: 'auto'
|
|
1360
1501
|
});
|
|
1361
1502
|
if (numberOfCreatedColumns === 0) {
|
|
@@ -1525,7 +1666,10 @@ let activeGuid = null;
|
|
|
1525
1666
|
const visualColumn = datamap.propToCol(prop);
|
|
1526
1667
|
let cellProperties;
|
|
1527
1668
|
if (Number.isInteger(visualColumn)) {
|
|
1528
|
-
|
|
1669
|
+
// The transient read keeps a bulk change set (paste, fill, checkbox toggle over a large
|
|
1670
|
+
// selection) from permanently materializing one meta object per changed cell - the meta
|
|
1671
|
+
// is only read here (`valueSetter`).
|
|
1672
|
+
cellProperties = instance.getCellMetaTransient(row, visualColumn);
|
|
1529
1673
|
} else {
|
|
1530
1674
|
// If there's no requested visual column, we can use the table meta as the cell properties
|
|
1531
1675
|
cellProperties = {
|
|
@@ -1547,7 +1691,9 @@ let activeGuid = null;
|
|
|
1547
1691
|
* @param {number|Array} row Visual row index or array of changes in format `[[row, col, value],...]`.
|
|
1548
1692
|
* @param {number} [column] Visual column index.
|
|
1549
1693
|
* @param {string} [value] New value.
|
|
1550
|
-
* @param {string} [source] String that identifies how this change will be described in the changes array (useful in afterChange or beforeChange
|
|
1694
|
+
* @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.
|
|
1695
|
+
* @fires Hooks#beforeChange
|
|
1696
|
+
* @fires Hooks#afterChange
|
|
1551
1697
|
*/ this.setDataAtCell = function(row, column, value, source) {
|
|
1552
1698
|
const input = setDataInputToArray(row, column, value);
|
|
1553
1699
|
const changes = [];
|
|
@@ -1597,7 +1743,9 @@ let activeGuid = null;
|
|
|
1597
1743
|
* @param {number|Array} row Visual row index or array of changes in format `[[row, prop, value], ...]`.
|
|
1598
1744
|
* @param {string} prop Property name or the source string (e.g. `'first.name'` or `'0'`).
|
|
1599
1745
|
* @param {string} value Value to be set.
|
|
1600
|
-
* @param {string} [source] String that identifies how this change will be described in changes array (useful in
|
|
1746
|
+
* @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).
|
|
1747
|
+
* @fires Hooks#beforeChange
|
|
1748
|
+
* @fires Hooks#afterChange
|
|
1601
1749
|
*/ this.setDataAtRowProp = function(row, prop, value, source) {
|
|
1602
1750
|
const input = setDataInputToArray(row, prop, value);
|
|
1603
1751
|
const changes = [];
|
|
@@ -1669,7 +1817,7 @@ let activeGuid = null;
|
|
|
1669
1817
|
* @memberof Core#
|
|
1670
1818
|
* @function destroyEditor
|
|
1671
1819
|
* @param {boolean} [revertOriginal=false] If `true`, the previous value will be restored. Otherwise, the edited value will be saved.
|
|
1672
|
-
* @param {boolean} [prepareEditorIfNeeded=true] If `true
|
|
1820
|
+
* @param {boolean} [prepareEditorIfNeeded=true] If `true`, the editor under the selected cell will be prepared to open.
|
|
1673
1821
|
*/ this.destroyEditor = function(revertOriginal = false, prepareEditorIfNeeded = true) {
|
|
1674
1822
|
editorManager.closeEditor(revertOriginal);
|
|
1675
1823
|
instance.view.render();
|
|
@@ -1843,8 +1991,10 @@ let activeGuid = null;
|
|
|
1843
1991
|
*
|
|
1844
1992
|
* @memberof Core#
|
|
1845
1993
|
* @function emptySelectedCells
|
|
1846
|
-
* @param {string} [source] String that identifies how this change will be described in the changes array (useful in afterChange or beforeChange
|
|
1994
|
+
* @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.
|
|
1847
1995
|
* @since 0.36.0
|
|
1996
|
+
* @fires Hooks#beforeChange
|
|
1997
|
+
* @fires Hooks#afterChange
|
|
1848
1998
|
*/ this.emptySelectedCells = function(source) {
|
|
1849
1999
|
if (!selection.isSelected() || this.countRows() === 0 || this.countCols() === 0) {
|
|
1850
2000
|
return;
|
|
@@ -1865,7 +2015,9 @@ let activeGuid = null;
|
|
|
1865
2015
|
}
|
|
1866
2016
|
const collectEmptyCellChanges = (row)=>{
|
|
1867
2017
|
rangeEach(fromColumn, toColumn, (column)=>{
|
|
1868
|
-
|
|
2018
|
+
// The transient read keeps clearing a large selection from permanently materializing
|
|
2019
|
+
// one meta object per cell - only `readOnly` is read here.
|
|
2020
|
+
if (!this.getCellMetaTransient(row, column).readOnly) {
|
|
1869
2021
|
changes.push([
|
|
1870
2022
|
row,
|
|
1871
2023
|
column,
|
|
@@ -1967,7 +2119,8 @@ let activeGuid = null;
|
|
|
1967
2119
|
* to the DOM. While rendering the table all cell renderers are recalled.
|
|
1968
2120
|
*
|
|
1969
2121
|
* Calling this method manually is not recommended. Handsontable tries to render itself by choosing the most
|
|
1970
|
-
* optimal moments in its lifecycle.
|
|
2122
|
+
* optimal moments in its lifecycle. After [setCellMeta()](@/api/core.md#setcellmeta) changes visual cell
|
|
2123
|
+
* properties, call this method to apply them, or wrap multiple calls in [batch()](@/api/core.md#batch).
|
|
1971
2124
|
*
|
|
1972
2125
|
* @memberof Core#
|
|
1973
2126
|
* @function render
|
|
@@ -2208,8 +2361,8 @@ let activeGuid = null;
|
|
|
2208
2361
|
* @memberof Core#
|
|
2209
2362
|
* @function updateData
|
|
2210
2363
|
* @since 11.1.0
|
|
2211
|
-
* @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
|
|
2212
|
-
* @param {string} [source] The source of the `updateData()` call
|
|
2364
|
+
* @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.
|
|
2365
|
+
* @param {string} [source] The source of the `updateData()` call.
|
|
2213
2366
|
* @fires Hooks#beforeUpdateData
|
|
2214
2367
|
* @fires Hooks#afterUpdateData
|
|
2215
2368
|
* @fires Hooks#afterChange
|
|
@@ -2250,8 +2403,8 @@ let activeGuid = null;
|
|
|
2250
2403
|
*
|
|
2251
2404
|
* @memberof Core#
|
|
2252
2405
|
* @function loadData
|
|
2253
|
-
* @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
|
|
2254
|
-
* @param {string} [source] The source of the `loadData()` call
|
|
2406
|
+
* @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.
|
|
2407
|
+
* @param {string} [source] The source of the `loadData()` call.
|
|
2255
2408
|
* @fires Hooks#beforeLoadData
|
|
2256
2409
|
* @fires Hooks#afterLoadData
|
|
2257
2410
|
* @fires Hooks#afterChange
|
|
@@ -2325,11 +2478,17 @@ let activeGuid = null;
|
|
|
2325
2478
|
this.rowIndexMapper.initToLength(this.countSourceRows());
|
|
2326
2479
|
};
|
|
2327
2480
|
/**
|
|
2328
|
-
* Returns the current
|
|
2329
|
-
* unless some modifications have been applied (i.e. Sequence of rows/columns was changed, some row/column was skipped).
|
|
2330
|
-
* If that's the case - use the {@link Core#getSourceData} method.).
|
|
2481
|
+
* Returns the current visual data as a 2D array.
|
|
2331
2482
|
*
|
|
2332
|
-
*
|
|
2483
|
+
* Unlike the source data (which may be an array of objects), `getData()` always
|
|
2484
|
+
* returns an array of arrays regardless of the original data format. The returned
|
|
2485
|
+
* data reflects the current visual state of the grid: rows and columns are in their
|
|
2486
|
+
* current visual order, after any sorting, filtering, or reordering.
|
|
2487
|
+
*
|
|
2488
|
+
* To retrieve the data in its original source format, use the {@link Core#getSourceData} method instead.
|
|
2489
|
+
*
|
|
2490
|
+
* Optionally you can provide a cell range by defining `row`, `column`, `row2`, `column2`
|
|
2491
|
+
* to get only a fragment of the data.
|
|
2333
2492
|
*
|
|
2334
2493
|
* @memberof Core#
|
|
2335
2494
|
* @function getData
|
|
@@ -2337,7 +2496,7 @@ let activeGuid = null;
|
|
|
2337
2496
|
* @param {number} [column] From visual column index.
|
|
2338
2497
|
* @param {number} [row2] To visual row index.
|
|
2339
2498
|
* @param {number} [column2] To visual column index.
|
|
2340
|
-
* @returns {Array[]}
|
|
2499
|
+
* @returns {Array[]} A 2D array of cell values in the current visual order.
|
|
2341
2500
|
* @example
|
|
2342
2501
|
* ```js
|
|
2343
2502
|
* // Get all data (in order how it is rendered in the table).
|
|
@@ -2407,11 +2566,19 @@ let activeGuid = null;
|
|
|
2407
2566
|
* __Note__, that although the `updateSettings` method doesn't overwrite the previously declared settings, it might reset
|
|
2408
2567
|
* the settings made post-initialization. (for example - ignore changes made using the columnResize feature).
|
|
2409
2568
|
*
|
|
2410
|
-
*
|
|
2411
|
-
* (for example, row/column sequence, column width, row height, frozen columns etc.).
|
|
2569
|
+
* Passing `columns` inside the `settings` object resets the states corresponding to rows and columns
|
|
2570
|
+
* (for example, row/column sequence, column width, row height, frozen columns etc.). Passing `data` does not reset these states.
|
|
2412
2571
|
*
|
|
2413
|
-
*
|
|
2414
|
-
*
|
|
2572
|
+
* After initialization, passing `data` calls [`updateData()`](@/api/core.md#updatedata) internally.
|
|
2573
|
+
* The resulting [`beforeUpdateData`](@/api/hooks.md#beforeupdatedata) and
|
|
2574
|
+
* [`afterUpdateData`](@/api/hooks.md#afterupdatedata) hooks receive `"updateSettings"` as their
|
|
2575
|
+
* `source`, while [`afterChange`](@/api/hooks.md#afterchange) receives `null` as its `changes`
|
|
2576
|
+
* argument and `"updateData"` as its `source`. If you call `updateSettings` with `data` inside
|
|
2577
|
+
* `afterChange`, check the hook's `source` to prevent an infinite loop.
|
|
2578
|
+
*
|
|
2579
|
+
* Cell meta set imperatively through [[setCellMeta]] (for example, by the user or the context menu) is preserved across
|
|
2580
|
+
* `updateSettings`, even when `settings` includes `cell`, `cells`, or `columns`. On a direct conflict, a value re-stated
|
|
2581
|
+
* through the declarative `cell` option takes precedence over the preserved imperative value.
|
|
2415
2582
|
*
|
|
2416
2583
|
* Cell meta set imperatively through [[setCellMeta]] (for example, by the user or the context menu) is preserved across
|
|
2417
2584
|
* `updateSettings`, even when `settings` includes `cell`, `cells`, or `columns`. On a direct conflict, a value re-stated
|
|
@@ -2448,6 +2615,9 @@ let activeGuid = null;
|
|
|
2448
2615
|
if (isDefined(settings.ganttChart)) {
|
|
2449
2616
|
throwWithCause('Since 8.0.0 the "ganttChart" setting is no longer supported.');
|
|
2450
2617
|
}
|
|
2618
|
+
// The `columns` option (or the state its function form reads) may change in this call - drop
|
|
2619
|
+
// getColHeader's index translation cache so it rebuilds against the updated settings.
|
|
2620
|
+
columnsSettingIndexes = null;
|
|
2451
2621
|
if (isDefined(settings.rowHeights) && isDefined(settings.minRowHeights)) {
|
|
2452
2622
|
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.');
|
|
2453
2623
|
}
|
|
@@ -2498,20 +2668,26 @@ let activeGuid = null;
|
|
|
2498
2668
|
const currentThemeName = instance.getCurrentThemeName();
|
|
2499
2669
|
// Use `theme` option if it's a string and differs from current theme (takes priority over `themeName`).
|
|
2500
2670
|
if (themeOptionExists && typeof settings.theme === 'string' && currentThemeName !== settings.theme) {
|
|
2501
|
-
|
|
2502
|
-
|
|
2671
|
+
// `destroy()`, not `unmount()`. Unmounting removes the style node but leaves the manager
|
|
2672
|
+
// subscribed to the shared theme object, so the next theme change re-injects its scoped
|
|
2673
|
+
// rules and the grid gets stuck on whatever override the dead manager still holds.
|
|
2674
|
+
instance.themeManager?.destroy();
|
|
2503
2675
|
instance.useTheme(settings.theme);
|
|
2504
2676
|
// Use `themeName` option if `theme` is not provided and the name differs from current theme.
|
|
2505
2677
|
} else if (themeNameOptionExists && !themeOptionExists && currentThemeName !== settings.themeName) {
|
|
2506
|
-
|
|
2507
|
-
|
|
2678
|
+
// `destroy()`, not `unmount()`. Unmounting removes the style node but leaves the manager
|
|
2679
|
+
// subscribed to the shared theme object, so the next theme change re-injects its scoped
|
|
2680
|
+
// rules and the grid gets stuck on whatever override the dead manager still holds.
|
|
2681
|
+
instance.themeManager?.destroy();
|
|
2508
2682
|
tableMeta.theme = settings.themeName;
|
|
2509
2683
|
tableMeta.themeName = undefined;
|
|
2510
2684
|
instance.useTheme(settings.themeName);
|
|
2511
2685
|
// Initialize or update the themeManager when theme is an object.
|
|
2512
2686
|
} else if (isRootInstance(instance) && !rootContainerThemeClassName && isObject(settings.theme)) {
|
|
2513
2687
|
if (instance.themeManager === null) {
|
|
2514
|
-
|
|
2688
|
+
// Read the overrides from `tableMeta`, not from this payload. The options may have been
|
|
2689
|
+
// set by an earlier call, and the manager being rebuilt here starts with none of them.
|
|
2690
|
+
initializeThemeManager(settings.theme, readStoredThemeOverrides());
|
|
2515
2691
|
instance.useTheme(instance.themeManager.getClassName());
|
|
2516
2692
|
} else {
|
|
2517
2693
|
let themeObject;
|
|
@@ -2525,6 +2701,7 @@ let activeGuid = null;
|
|
|
2525
2701
|
}
|
|
2526
2702
|
}
|
|
2527
2703
|
}
|
|
2704
|
+
const themeOverridesChanged = applyThemeOverrides(settings, init);
|
|
2528
2705
|
// Load data or create data map
|
|
2529
2706
|
if (instance.runHooks('hasExternalDataSource') === true) {
|
|
2530
2707
|
// When dataProvider is a complete server-backed config, ignore static data, the plugin loads rows.
|
|
@@ -2642,11 +2819,23 @@ let activeGuid = null;
|
|
|
2642
2819
|
// width blocks ran) so partial updateSettings calls see the correct state.
|
|
2643
2820
|
// When height IS set, the height block's `overflow: clip` shorthand handles both axes — leave
|
|
2644
2821
|
// overflowX untouched to avoid breaking that shorthand.
|
|
2822
|
+
// Only clip for a definite width. A relative width (`100%`, other percentages, viewport units,
|
|
2823
|
+
// or a `calc()` that mixes them in) fills its container, and content wider than that scrolls
|
|
2824
|
+
// with the window — matching the long-standing behavior where the page gains a horizontal
|
|
2825
|
+
// scrollbar and every column stays reachable. Clipping those would silently hide the off-width
|
|
2826
|
+
// columns with no scrollbar. A definite width (`px`, `em`, `rem`, and other absolute lengths)
|
|
2827
|
+
// establishes a fixed box the table must not visually overflow, so it is clipped.
|
|
2645
2828
|
// Browser compatibility: `overflow-x: clip` requires Safari 16+. On Safari 14.1–15.x it silently
|
|
2646
2829
|
// falls back to `visible` (graceful degradation — pre-existing behavior, not a new regression).
|
|
2647
2830
|
if (typeof settings.height !== 'undefined' || typeof settings.width !== 'undefined') {
|
|
2648
2831
|
const effectiveHeight = instance.rootElement.style.height;
|
|
2649
2832
|
const effectiveWidth = instance.rootElement.style.width;
|
|
2833
|
+
// Relative: percentages and viewport units resolve against an ancestor, so a `%` or a viewport
|
|
2834
|
+
// unit (`vw`/`vh`/`vmin`/`vmax`, and dynamic `dvh`/`svh`/`lvh` via the `vh` match) anywhere —
|
|
2835
|
+
// including inside `calc()` — marks the width as container-driven. No word boundaries: the unit
|
|
2836
|
+
// is preceded by digits (`100vw`), which are word characters, so `\bv` would never match.
|
|
2837
|
+
const isRelativeWidth = /%|v(?:w|h|min|max)/i.test(effectiveWidth);
|
|
2838
|
+
const isDefiniteWidth = effectiveWidth !== '' && effectiveWidth !== 'auto' && !isRelativeWidth;
|
|
2650
2839
|
if (!effectiveHeight) {
|
|
2651
2840
|
const currentOverflowX = instance.rootElement.style.overflowX;
|
|
2652
2841
|
// Only manage the overflow-x we own (`clip`) or that is unset. Preserve a user-defined
|
|
@@ -2654,7 +2843,7 @@ let activeGuid = null;
|
|
|
2654
2843
|
// by `clip`. Unlike `hidden`, `clip` creates no block formatting context and allows no
|
|
2655
2844
|
// programmatic scroll.
|
|
2656
2845
|
if (currentOverflowX === '' || currentOverflowX === 'clip') {
|
|
2657
|
-
instance.rootElement.style.overflowX =
|
|
2846
|
+
instance.rootElement.style.overflowX = isDefiniteWidth ? 'clip' : '';
|
|
2658
2847
|
}
|
|
2659
2848
|
}
|
|
2660
2849
|
}
|
|
@@ -2672,6 +2861,12 @@ let activeGuid = null;
|
|
|
2672
2861
|
instance.render();
|
|
2673
2862
|
instance.view._wt.wtOverlays.adjustElementsSize();
|
|
2674
2863
|
}
|
|
2864
|
+
// Fired after the render above, so a listener reading cell sizes sees the new density. The
|
|
2865
|
+
// manager can be gone by now: an `afterUpdateSettings` listener is free to move the grid to a
|
|
2866
|
+
// class-name theme, which tears the engine down.
|
|
2867
|
+
if (themeOverridesChanged && instance.themeManager) {
|
|
2868
|
+
instance.runHooks('afterSetTheme', instance.themeManager.getClassName(), false);
|
|
2869
|
+
}
|
|
2675
2870
|
if (!init && instance.view && (currentHeight === '' || height === '' || height === undefined) && currentHeight !== height) {
|
|
2676
2871
|
instance.view._wt.wtOverlays.updateMainScrollableElements();
|
|
2677
2872
|
}
|
|
@@ -2703,11 +2898,36 @@ let activeGuid = null;
|
|
|
2703
2898
|
return null;
|
|
2704
2899
|
};
|
|
2705
2900
|
/**
|
|
2706
|
-
* Returns the
|
|
2901
|
+
* Returns the current global grid settings object.
|
|
2902
|
+
*
|
|
2903
|
+
* The returned object contains the settings passed to the constructor or the most recent
|
|
2904
|
+
* `updateSettings()` call. It reflects the
|
|
2905
|
+
* [grid-level](@/guides/getting-started/configuration-options/configuration-options.md#set-grid-options)
|
|
2906
|
+
* configuration only.
|
|
2907
|
+
*
|
|
2908
|
+
* It does not include merged per-cell or per-column values. Configuration options cascade from
|
|
2909
|
+
* grid to column to cell (see
|
|
2910
|
+
* [Cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)).
|
|
2911
|
+
* To read the effective value for a specific cell, use [[getCellMeta]]. To read column-level meta, use [[getColumnMeta]].
|
|
2707
2912
|
*
|
|
2708
2913
|
* @memberof Core#
|
|
2709
2914
|
* @function getSettings
|
|
2710
|
-
* @returns {TableMeta} Object containing the current
|
|
2915
|
+
* @returns {TableMeta} Object containing the current global grid settings.
|
|
2916
|
+
* @example
|
|
2917
|
+
* ```js
|
|
2918
|
+
* const hot = new Handsontable(container, {
|
|
2919
|
+
* readOnly: false,
|
|
2920
|
+
* columns: (index) => ({
|
|
2921
|
+
* readOnly: index === 2 || index === 8,
|
|
2922
|
+
* }),
|
|
2923
|
+
* });
|
|
2924
|
+
*
|
|
2925
|
+
* // returns `false` (global grid-level setting)
|
|
2926
|
+
* hot.getSettings().readOnly;
|
|
2927
|
+
*
|
|
2928
|
+
* // returns `true` for column 2 (merged column and cell meta)
|
|
2929
|
+
* hot.getCellMeta(0, 2).readOnly;
|
|
2930
|
+
* ```
|
|
2711
2931
|
*/ this.getSettings = function() {
|
|
2712
2932
|
return tableMeta;
|
|
2713
2933
|
};
|
|
@@ -2762,8 +2982,10 @@ let activeGuid = null;
|
|
|
2762
2982
|
* @param {number|number[]} [index] A visual index of the row/column before or after which the new row/column will be
|
|
2763
2983
|
* inserted or removed. Can also be an array of arrays, in format `[[index, amount],...]`.
|
|
2764
2984
|
* @param {number} [amount] The amount of rows or columns to be inserted or removed (default: `1`).
|
|
2765
|
-
* @param {string} [source] Source indicator.
|
|
2766
|
-
* @param {boolean} [keepEmptyRows] If set to `true
|
|
2985
|
+
* @param {string} [source] Source indicator passed to related hooks.
|
|
2986
|
+
* @param {boolean} [keepEmptyRows] If set to `true`, skips the automatic adjustment that normally adds empty rows
|
|
2987
|
+
* or columns after the operation to satisfy `minRows`, `minSpareRows`,
|
|
2988
|
+
* `minCols`, or `minSpareCols`.
|
|
2767
2989
|
* @example
|
|
2768
2990
|
* ```js
|
|
2769
2991
|
* // above row 10 (by visual index), insert 1 new row
|
|
@@ -2783,9 +3005,23 @@ let activeGuid = null;
|
|
|
2783
3005
|
* // remove 2 rows, starting from row 10 (by visual index)
|
|
2784
3006
|
* hot.alter('remove_row', 10, 2);
|
|
2785
3007
|
*
|
|
3008
|
+
* // remove 2 columns, starting from column 3 (by visual index)
|
|
3009
|
+
* hot.alter('remove_col', 3, 2);
|
|
3010
|
+
*
|
|
2786
3011
|
* // remove 3 rows, starting from row 1 (by visual index)
|
|
2787
3012
|
* // remove 2 rows, starting from row 5 (by visual index)
|
|
2788
3013
|
* hot.alter('remove_row', [[1, 3], [5, 2]]);
|
|
3014
|
+
*
|
|
3015
|
+
* // pass a custom source string to hooks
|
|
3016
|
+
* hot.addHook('afterCreateRow', (index, amount, source) => {
|
|
3017
|
+
* if (source === 'inventory-import') {
|
|
3018
|
+
* // Run logic only for rows created by the inventory import.
|
|
3019
|
+
* }
|
|
3020
|
+
* });
|
|
3021
|
+
* hot.alter('insert_row_above', 0, 1, 'inventory-import');
|
|
3022
|
+
*
|
|
3023
|
+
* // remove a row without immediately adding empty rows required by `minRows` or `minSpareRows`
|
|
3024
|
+
* hot.alter('remove_row', 4, 1, 'inventory-cleanup', true);
|
|
2789
3025
|
* ```
|
|
2790
3026
|
*/ this.alter = function(action, index, amount, source, keepEmptyRows) {
|
|
2791
3027
|
grid.alter(action, index, amount, source, keepEmptyRows);
|
|
@@ -3061,9 +3297,14 @@ let activeGuid = null;
|
|
|
3061
3297
|
const visualRow = instance.toVisualRow(changeRow);
|
|
3062
3298
|
const visualColumn = instance.toVisualColumn(changeProp);
|
|
3063
3299
|
if (Number.isInteger(visualColumn)) {
|
|
3064
|
-
|
|
3300
|
+
// The transient read keeps a bulk source-data write from permanently materializing one
|
|
3301
|
+
// meta object per changed cell - the meta only feeds the `valueSetter` and the
|
|
3302
|
+
// source-data validator, both read-only.
|
|
3303
|
+
return instance.getCellMetaTransient(visualRow, visualColumn);
|
|
3065
3304
|
}
|
|
3066
|
-
// If there's no requested visual column, we can use the table meta as the cell properties
|
|
3305
|
+
// If there's no requested visual column, we can use the table meta as the cell properties.
|
|
3306
|
+
// The snapshot lacks the per-cell coordinate properties, but every consumer here reads
|
|
3307
|
+
// settings-level keys only.
|
|
3067
3308
|
return {
|
|
3068
3309
|
...Object.getPrototypeOf(tableMeta),
|
|
3069
3310
|
...tableMeta
|
|
@@ -3176,7 +3417,7 @@ let activeGuid = null;
|
|
|
3176
3417
|
rangeEach(Math.max(Math.min(rowStart, rowEnd), 0), Math.max(rowStart, rowEnd), (row)=>{
|
|
3177
3418
|
let isTypeEqual = true;
|
|
3178
3419
|
rangeEach(Math.max(Math.min(columnStart, columnEnd), 0), Math.max(columnStart, columnEnd), (column)=>{
|
|
3179
|
-
const cellType = instance.
|
|
3420
|
+
const cellType = instance.getCellMetaTransient(row, column);
|
|
3180
3421
|
currentType = cellType.type ?? null;
|
|
3181
3422
|
if (previousType) {
|
|
3182
3423
|
isTypeEqual = previousType === currentType;
|
|
@@ -3255,8 +3496,52 @@ let activeGuid = null;
|
|
|
3255
3496
|
}
|
|
3256
3497
|
};
|
|
3257
3498
|
/**
|
|
3499
|
+
* Writes a configuration-derived cell meta value declaratively. The value is applied to the cell meta
|
|
3500
|
+
* (so it is retained while the cell is released from the viewport by the meta eviction), but is NOT
|
|
3501
|
+
* recorded as user-defined, so an `updateSettings` cache reset clears it and it is re-applied from the
|
|
3502
|
+
* current configuration - exactly like the `cell` option. Used by built-in plugins that derive cell
|
|
3503
|
+
* meta from their own configuration (for example ColumnSummary) and re-apply it on each update.
|
|
3504
|
+
*
|
|
3505
|
+
* Unlike the public `setCellMeta`, this does NOT fire `beforeSetCellMeta`/`afterSetCellMeta` and is
|
|
3506
|
+
* not vetoable: the write is plugin-internal render state the user never requested, so it must not
|
|
3507
|
+
* surface through public hooks or be blocked by a `beforeSetCellMeta` veto. This matches the direct
|
|
3508
|
+
* meta-object write these plugins used before the viewport meta eviction was introduced.
|
|
3509
|
+
*
|
|
3510
|
+
* Internal API: deliberately NOT declared on the public `HotInstance` type (`core/types.ts`), so it
|
|
3511
|
+
* is not exposed to third-party code or the published `.d.ts`. Built-in consumers reach it through a
|
|
3512
|
+
* local internal type (see `HotInstanceInternal` in the ColumnSummary plugin). Do not add it to
|
|
3513
|
+
* `HotInstance` - that would turn an implementation detail into a supported public API.
|
|
3514
|
+
*
|
|
3515
|
+
* @private
|
|
3516
|
+
* @memberof Core#
|
|
3517
|
+
* @function _setCellMetaDeclarative
|
|
3518
|
+
* @param {number} row Visual row index.
|
|
3519
|
+
* @param {number} column Visual column index.
|
|
3520
|
+
* @param {string} key The property name to set.
|
|
3521
|
+
* @param {*} value The value to write.
|
|
3522
|
+
*/ this._setCellMetaDeclarative = function(row, column, key, value) {
|
|
3523
|
+
let physicalRow = row;
|
|
3524
|
+
let physicalColumn = column;
|
|
3525
|
+
if (row < instance.countRows()) {
|
|
3526
|
+
physicalRow = instance.toPhysicalRow(row);
|
|
3527
|
+
}
|
|
3528
|
+
if (column < instance.countCols()) {
|
|
3529
|
+
physicalColumn = instance.toPhysicalColumn(column);
|
|
3530
|
+
}
|
|
3531
|
+
metaManager.disableUserDefinedMetaRecording();
|
|
3532
|
+
try {
|
|
3533
|
+
metaManager.setCellMeta(physicalRow, physicalColumn, key, value);
|
|
3534
|
+
} finally{
|
|
3535
|
+
metaManager.enableUserDefinedMetaRecording();
|
|
3536
|
+
}
|
|
3537
|
+
};
|
|
3538
|
+
/**
|
|
3258
3539
|
* Sets a property defined by the `key` property to the meta object of a cell corresponding to params `row` and `column`.
|
|
3259
3540
|
*
|
|
3541
|
+
* This method updates internal cell metadata only. It does not repaint the grid. To reflect visual changes (such as
|
|
3542
|
+
* `className`, `type`, or `readOnly`), call [render()](@/api/core.md#render) afterward, or wrap multiple calls in
|
|
3543
|
+
* [batch()](@/api/core.md#batch).
|
|
3544
|
+
*
|
|
3260
3545
|
* @memberof Core#
|
|
3261
3546
|
* @function setCellMeta
|
|
3262
3547
|
* @param {number} row Visual row index.
|
|
@@ -3293,6 +3578,11 @@ let activeGuid = null;
|
|
|
3293
3578
|
/**
|
|
3294
3579
|
* Returns the cell properties object for the given `row` and `column` coordinates.
|
|
3295
3580
|
*
|
|
3581
|
+
* The returned object reflects the effective cell configuration after
|
|
3582
|
+
* [cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)
|
|
3583
|
+
* (grid, column, and cell levels). To read global grid settings only, use [[getSettings]].
|
|
3584
|
+
* To read column-level meta, use [[getColumnMeta]].
|
|
3585
|
+
*
|
|
3296
3586
|
* @memberof Core#
|
|
3297
3587
|
* @function getCellMeta
|
|
3298
3588
|
* @param {number} row Visual row index.
|
|
@@ -3320,8 +3610,52 @@ let activeGuid = null;
|
|
|
3320
3610
|
});
|
|
3321
3611
|
};
|
|
3322
3612
|
/**
|
|
3613
|
+
* Returns the cell properties object for the given `row` and `column` coordinates without
|
|
3614
|
+
* retaining it in the cell meta cache.
|
|
3615
|
+
*
|
|
3616
|
+
* Like [[getCellMeta]], the returned object reflects the effective cell configuration after
|
|
3617
|
+
* [cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)
|
|
3618
|
+
* and dynamic extension (the `cells` function and the `beforeGetCellMeta`/`afterGetCellMeta`
|
|
3619
|
+
* hooks run). Unlike `getCellMeta`, when the cell has no stored meta object the extension runs
|
|
3620
|
+
* on a temporary object that is not saved, so scanning many cells (for example, a whole column
|
|
3621
|
+
* or the entire dataset) does not permanently allocate one meta object per visited cell. Cells
|
|
3622
|
+
* that already carry stored meta (for example, written by [[setCellMeta]] or the `cell` option)
|
|
3623
|
+
* return their stored object, exactly as `getCellMeta` would.
|
|
3624
|
+
*
|
|
3625
|
+
* Use this method for read-only bulk scans. Do not write to the returned object - for cells
|
|
3626
|
+
* without stored meta the write lands on the temporary object and is lost; use `setCellMeta`
|
|
3627
|
+
* to persist values.
|
|
3628
|
+
*
|
|
3629
|
+
* @memberof Core#
|
|
3630
|
+
* @function getCellMetaTransient
|
|
3631
|
+
* @since 18.1.0
|
|
3632
|
+
* @param {number} row Visual row index.
|
|
3633
|
+
* @param {number} column Visual column index.
|
|
3634
|
+
* @returns {object} The cell properties object.
|
|
3635
|
+
* @fires Hooks#beforeGetCellMeta
|
|
3636
|
+
* @fires Hooks#afterGetCellMeta
|
|
3637
|
+
*/ this.getCellMetaTransient = function(row, column) {
|
|
3638
|
+
let physicalRow = instance.toPhysicalRow(row);
|
|
3639
|
+
let physicalColumn = instance.toPhysicalColumn(column);
|
|
3640
|
+
if (physicalRow === null) {
|
|
3641
|
+
physicalRow = row;
|
|
3642
|
+
}
|
|
3643
|
+
if (physicalColumn === null) {
|
|
3644
|
+
physicalColumn = column;
|
|
3645
|
+
}
|
|
3646
|
+
return metaManager.getCellMetaTransient(physicalRow, physicalColumn, {
|
|
3647
|
+
visualRow: row,
|
|
3648
|
+
visualColumn: column
|
|
3649
|
+
});
|
|
3650
|
+
};
|
|
3651
|
+
/**
|
|
3323
3652
|
* Returns the meta information for the provided column.
|
|
3324
3653
|
*
|
|
3654
|
+
* The returned object reflects the column-level configuration after
|
|
3655
|
+
* [cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)
|
|
3656
|
+
* (grid and column levels). To read global grid settings only, use [[getSettings]].
|
|
3657
|
+
* To read the effective configuration for a specific cell, use [[getCellMeta]].
|
|
3658
|
+
*
|
|
3325
3659
|
* @since 14.5.0
|
|
3326
3660
|
* @memberof Core#
|
|
3327
3661
|
* @function getColumnMeta
|
|
@@ -3526,12 +3860,27 @@ let activeGuid = null;
|
|
|
3526
3860
|
continue;
|
|
3527
3861
|
}
|
|
3528
3862
|
waitingForValidator.addValidatorToQueue();
|
|
3529
|
-
|
|
3863
|
+
// The transient read keeps a bulk validation from permanently materializing one meta
|
|
3864
|
+
// object per validated cell (O(rows x columns) retention). Cells with stored meta -
|
|
3865
|
+
// including every currently rendered cell - still receive their `valid` result on the
|
|
3866
|
+
// stored object, because the transient read returns the stored object for them.
|
|
3867
|
+
const row = i;
|
|
3868
|
+
const column = j;
|
|
3869
|
+
const cellMeta = instance.getCellMetaTransient(row, column);
|
|
3870
|
+
instance.validateCell(instance.getDataAtCell(row, column), cellMeta, (result)=>{
|
|
3530
3871
|
if (typeof result !== 'boolean') {
|
|
3531
3872
|
throwWithCause('Validation error: result is not boolean');
|
|
3532
3873
|
}
|
|
3533
3874
|
if (result === false) {
|
|
3534
3875
|
waitingForValidator.valid = false;
|
|
3876
|
+
// A failed result written on a throwaway object would be lost - persist it on the
|
|
3877
|
+
// stored meta (a DIRECT write, exactly like the edit-path validation flow; NOT
|
|
3878
|
+
// `setCellMeta`, which would mark the property as user-persisted and change
|
|
3879
|
+
// updateSettings/eviction semantics). Only failures materialize, so retention stays
|
|
3880
|
+
// O(invalid cells); the eviction pass already keeps `valid === false` cells.
|
|
3881
|
+
instance.getCellMeta(row, column, {
|
|
3882
|
+
skipMetaExtension: true
|
|
3883
|
+
}).valid = false;
|
|
3535
3884
|
}
|
|
3536
3885
|
waitingForValidator.removeValidatorFormQueue();
|
|
3537
3886
|
}, 'validateCells');
|
|
@@ -3597,6 +3946,13 @@ let activeGuid = null;
|
|
|
3597
3946
|
return false;
|
|
3598
3947
|
};
|
|
3599
3948
|
/**
|
|
3949
|
+
* Caches the index translation that `getColHeader` derives from the `columns` option when that
|
|
3950
|
+
* option is a function: the source column indexes for which `columns(index)` returns a truthy
|
|
3951
|
+
* settings object. Only the membership array is cached — titles are still read live from the
|
|
3952
|
+
* `columns` function. Rebuilt when the function reference or the column count changes; cleared
|
|
3953
|
+
* by `updateSettings`.
|
|
3954
|
+
*/ let columnsSettingIndexes = null;
|
|
3955
|
+
/**
|
|
3600
3956
|
* Gets the values of column headers (if column headers are [enabled](@/api/options.md#colheaders)).
|
|
3601
3957
|
*
|
|
3602
3958
|
* To get an array with the values of all
|
|
@@ -3646,23 +4002,30 @@ let activeGuid = null;
|
|
|
3646
4002
|
}
|
|
3647
4003
|
let result = tableMeta.colHeaders;
|
|
3648
4004
|
const columns = tableMeta.columns;
|
|
3649
|
-
const
|
|
3650
|
-
|
|
4005
|
+
const columnsFn = typeof columns === 'function' ? columns : null;
|
|
4006
|
+
const physicalColumn = instance.toPhysicalColumn(columnIndex);
|
|
4007
|
+
let columnSettings = null;
|
|
4008
|
+
if (columnsFn !== null) {
|
|
3651
4009
|
const columnsLen = instance.countCols();
|
|
3652
|
-
|
|
3653
|
-
|
|
3654
|
-
|
|
3655
|
-
|
|
4010
|
+
if (columnsSettingIndexes === null || columnsSettingIndexes.columns !== columnsFn || columnsSettingIndexes.columnsLen !== columnsLen) {
|
|
4011
|
+
const indexes = [];
|
|
4012
|
+
for(let index = 0; index < columnsLen; index++){
|
|
4013
|
+
if (columnsFn(index)) {
|
|
4014
|
+
indexes.push(index);
|
|
4015
|
+
}
|
|
3656
4016
|
}
|
|
4017
|
+
columnsSettingIndexes = {
|
|
4018
|
+
columns: columnsFn,
|
|
4019
|
+
columnsLen,
|
|
4020
|
+
indexes
|
|
4021
|
+
};
|
|
3657
4022
|
}
|
|
3658
|
-
|
|
3659
|
-
}
|
|
3660
|
-
const physicalColumn = instance.toPhysicalColumn(columnIndex);
|
|
3661
|
-
const prop = translateVisualIndexToColumns(physicalColumn);
|
|
4023
|
+
columnSettings = columnsFn(columnsSettingIndexes.indexes[physicalColumn]) ?? null;
|
|
4024
|
+
}
|
|
3662
4025
|
if (tableMeta.colHeaders === false) {
|
|
3663
4026
|
result = null;
|
|
3664
|
-
} else if (
|
|
3665
|
-
result =
|
|
4027
|
+
} else if (columnSettings && columnSettings.title) {
|
|
4028
|
+
result = columnSettings.title;
|
|
3666
4029
|
} else if (columns && !isFunction(columns) && columns[physicalColumn] && columns[physicalColumn].title) {
|
|
3667
4030
|
result = columns[physicalColumn].title;
|
|
3668
4031
|
} else if (Array.isArray(tableMeta.colHeaders) && tableMeta.colHeaders[physicalColumn] !== undefined) {
|
|
@@ -3835,7 +4198,7 @@ let activeGuid = null;
|
|
|
3835
4198
|
* @returns {number} Returns -1 if table is not visible.
|
|
3836
4199
|
*/ this.countRenderedRows = function() {
|
|
3837
4200
|
const view = instance.view;
|
|
3838
|
-
return view
|
|
4201
|
+
return view?._wt.drawn ? view._wt.wtTable.getRenderedRowsCount() : -1;
|
|
3839
4202
|
};
|
|
3840
4203
|
/**
|
|
3841
4204
|
* Returns the number of rendered rows that are only visible in the table viewport.
|
|
@@ -3846,7 +4209,7 @@ let activeGuid = null;
|
|
|
3846
4209
|
* @returns {number} Number of visible rows or -1.
|
|
3847
4210
|
*/ this.countVisibleRows = function() {
|
|
3848
4211
|
const view = instance.view;
|
|
3849
|
-
return view
|
|
4212
|
+
return view?._wt.drawn ? view._wt.wtTable.getVisibleRowsCount() : -1;
|
|
3850
4213
|
};
|
|
3851
4214
|
/**
|
|
3852
4215
|
* Returns the number of rendered rows including columns that are partially or fully rendered
|
|
@@ -3857,7 +4220,7 @@ let activeGuid = null;
|
|
|
3857
4220
|
* @returns {number} Returns -1 if table is not visible.
|
|
3858
4221
|
*/ this.countRenderedCols = function() {
|
|
3859
4222
|
const view = instance.view;
|
|
3860
|
-
return view
|
|
4223
|
+
return view?._wt.drawn ? view._wt.wtTable.getRenderedColumnsCount() : -1;
|
|
3861
4224
|
};
|
|
3862
4225
|
/**
|
|
3863
4226
|
* Returns the number of rendered columns that are only visible in the table viewport.
|
|
@@ -3868,7 +4231,7 @@ let activeGuid = null;
|
|
|
3868
4231
|
* @returns {number} Number of visible columns or -1.
|
|
3869
4232
|
*/ this.countVisibleCols = function() {
|
|
3870
4233
|
const view = instance.view;
|
|
3871
|
-
return view
|
|
4234
|
+
return view?._wt.drawn ? view._wt.wtTable.getVisibleColumnsCount() : -1;
|
|
3872
4235
|
};
|
|
3873
4236
|
/**
|
|
3874
4237
|
* Returns the number of rendered row headers.
|
|
@@ -3878,7 +4241,8 @@ let activeGuid = null;
|
|
|
3878
4241
|
* @function countRowHeaders
|
|
3879
4242
|
* @returns {number} Number of row headers.
|
|
3880
4243
|
*/ this.countRowHeaders = function() {
|
|
3881
|
-
|
|
4244
|
+
const view = instance.view;
|
|
4245
|
+
return view ? view.getRowHeadersCount() : 0;
|
|
3882
4246
|
};
|
|
3883
4247
|
/**
|
|
3884
4248
|
* Returns the number of rendered column headers.
|
|
@@ -3888,7 +4252,8 @@ let activeGuid = null;
|
|
|
3888
4252
|
* @function countColHeaders
|
|
3889
4253
|
* @returns {number} Number of column headers.
|
|
3890
4254
|
*/ this.countColHeaders = function() {
|
|
3891
|
-
|
|
4255
|
+
const view = instance.view;
|
|
4256
|
+
return view ? view.getColumnHeadersCount() : 0;
|
|
3892
4257
|
};
|
|
3893
4258
|
/**
|
|
3894
4259
|
* Returns the number of empty rows. If the optional ending parameter is `true`, returns the
|
|
@@ -3988,8 +4353,8 @@ let activeGuid = null;
|
|
|
3988
4353
|
* @param {number|string} column A visual column index (`number`), or a column property's value (`string`).
|
|
3989
4354
|
* @param {number} [endRow] If selecting a range: the visual row index of the last cell in the range.
|
|
3990
4355
|
* @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.
|
|
3991
|
-
* @param {boolean} [scrollToCell=true] `true
|
|
3992
|
-
* @param {boolean} [changeListener=true] `true
|
|
4356
|
+
* @param {boolean} [scrollToCell=true] If `true`, scrolls the viewport to the newly-selected cells. If `false`, keeps the previous viewport.
|
|
4357
|
+
* @param {boolean} [changeListener=true] If `true`, switches the keyboard focus to Handsontable. If `false`, keeps the
|
|
3993
4358
|
* previous keyboard focus. If an element outside Handsontable (such as a custom input) currently owns the browser
|
|
3994
4359
|
* focus, it remains focused after the call.
|
|
3995
4360
|
* @returns {boolean} `true`: the selection was successful, `false`: the selection failed.
|
|
@@ -4062,8 +4427,8 @@ let activeGuid = null;
|
|
|
4062
4427
|
* @param {Array[]|CellRange[]} coords Visual coordinates,
|
|
4063
4428
|
* passed either as an array of arrays (`[[rowStart, columnStart, rowEnd, columnEnd], ...]`)
|
|
4064
4429
|
* or as an array of [`CellRange`](@/api/cellRange.md) objects.
|
|
4065
|
-
* @param {boolean} [scrollToCell=true] `true
|
|
4066
|
-
* @param {boolean} [changeListener=true] `true
|
|
4430
|
+
* @param {boolean} [scrollToCell=true] If `true`, scrolls the viewport to the newly-selected cells. If `false`, keeps the previous viewport.
|
|
4431
|
+
* @param {boolean} [changeListener=true] If `true`, switches the keyboard focus to Handsontable. If `false`, keeps the
|
|
4067
4432
|
* previous keyboard focus. If an element outside Handsontable (such as a custom input) currently owns the browser
|
|
4068
4433
|
* focus, it remains focused after the call.
|
|
4069
4434
|
* @returns {boolean} `true`: the selection was successful, `false`: the selection failed.
|
|
@@ -4114,8 +4479,8 @@ let activeGuid = null;
|
|
|
4114
4479
|
* @memberof Core#
|
|
4115
4480
|
* @since 0.38.0
|
|
4116
4481
|
* @function selectColumns
|
|
4117
|
-
* @param {number} startColumn The visual column index from which the selection starts.
|
|
4118
|
-
* @param {number} [endColumn=startColumn] The visual column index to which the selection finishes. If `endColumn`
|
|
4482
|
+
* @param {number | string} startColumn The visual column index or column property from which the selection starts.
|
|
4483
|
+
* @param {number | string} [endColumn=startColumn] The visual column index or column property to which the selection finishes. If `endColumn`
|
|
4119
4484
|
* is not defined the column defined by `startColumn` will be selected.
|
|
4120
4485
|
* @param {number | { row: number, col: number } | CellCoords} [focusPosition=0] The argument allows changing the cell/header focus
|
|
4121
4486
|
* position. The value can take visual row index from -N to N, where negative values point to the headers and positive
|
|
@@ -4190,16 +4555,15 @@ let activeGuid = null;
|
|
|
4190
4555
|
* @since 0.38.2
|
|
4191
4556
|
* @memberof Core#
|
|
4192
4557
|
* @function selectAll
|
|
4193
|
-
* @param {boolean} [includeRowHeaders=false] `true
|
|
4194
|
-
*
|
|
4195
|
-
* @param {boolean} [includeColumnHeaders=false] `true` If the selection should include the column
|
|
4196
|
-
* headers, `false` otherwise.
|
|
4558
|
+
* @param {boolean} [includeRowHeaders=false] If `true`, includes the row headers in the selection.
|
|
4559
|
+
* @param {boolean} [includeColumnHeaders=false] If `true`, includes the column headers in the selection.
|
|
4197
4560
|
*
|
|
4198
|
-
* @param {object} [options] Additional object with options. Since 14.0.0
|
|
4561
|
+
* @param {object} [options] Additional object with options. Since 14.0.0.
|
|
4199
4562
|
* @param {{row: number, col: number} | boolean} [options.focusPosition] The argument allows changing the cell/header
|
|
4200
4563
|
* focus position. The value takes an object with a `row` and `col` properties from -N to N, where
|
|
4201
4564
|
* negative values point to the headers and positive values point to the cell range. If `false`, the focus
|
|
4202
|
-
* position won't be changed.
|
|
4565
|
+
* position won't be changed. When the {@link Options#navigableHeaders} option is disabled (the default), a
|
|
4566
|
+
* `focusPosition` that points to a header is relocated to the nearest cell in the data set. Example:
|
|
4203
4567
|
* ```js
|
|
4204
4568
|
* hot.selectAll(0, 0, {
|
|
4205
4569
|
* focusPosition: { row: 0, col: 1 },
|
|
@@ -4208,7 +4572,9 @@ let activeGuid = null;
|
|
|
4208
4572
|
* ```
|
|
4209
4573
|
*
|
|
4210
4574
|
* @param {boolean} [options.disableHeadersHighlight] If `true`, disables highlighting the headers even when
|
|
4211
|
-
* the logical coordinates points on them.
|
|
4575
|
+
* the logical coordinates points on them. This only suppresses the highlight shown on headers of a fully-selected
|
|
4576
|
+
* row or column. It doesn't affect the focus indicator on the individual cell or header that holds the focus,
|
|
4577
|
+
* which stays visible even when {@link Options#navigableHeaders} moves the focus onto a header.
|
|
4212
4578
|
*/ this.selectAll = function(includeRowHeaders = true, includeColumnHeaders = includeRowHeaders, options) {
|
|
4213
4579
|
viewportScroller.skipNextScrollCycle();
|
|
4214
4580
|
selection.selectAll(includeRowHeaders, includeColumnHeaders, options);
|
|
@@ -4242,6 +4608,9 @@ let activeGuid = null;
|
|
|
4242
4608
|
/**
|
|
4243
4609
|
* Scroll viewport to coordinates specified by the `row` and/or `col` object properties.
|
|
4244
4610
|
*
|
|
4611
|
+
* The object-based signature was introduced in v14.0.0. The positional arguments form is retained
|
|
4612
|
+
* for backward compatibility.
|
|
4613
|
+
*
|
|
4245
4614
|
* ```js
|
|
4246
4615
|
* // scroll the viewport to the visual row index (leave the horizontal scroll untouched)
|
|
4247
4616
|
* hot.scrollViewportTo({ row: 50 });
|
|
@@ -4256,6 +4625,9 @@ let activeGuid = null;
|
|
|
4256
4625
|
* }, () => {
|
|
4257
4626
|
* // callback function executed after the viewport is scrolled
|
|
4258
4627
|
* });
|
|
4628
|
+
*
|
|
4629
|
+
* // scroll the viewport using the backward-compatible positional arguments form
|
|
4630
|
+
* hot.scrollViewportTo(50, 50, true, true);
|
|
4259
4631
|
* ```
|
|
4260
4632
|
*
|
|
4261
4633
|
* @memberof Core#
|
|
@@ -4361,6 +4733,10 @@ let activeGuid = null;
|
|
|
4361
4733
|
*/ this.destroy = function() {
|
|
4362
4734
|
instance._clearTimeouts();
|
|
4363
4735
|
instance._clearMicrotasks();
|
|
4736
|
+
// Drop the hidden-init visibility observer before the teardown below nulls the instance. Otherwise a
|
|
4737
|
+
// delivery queued while the table was becoming visible runs its callback on a destroyed instance.
|
|
4738
|
+
visibilityObserver?.disconnect();
|
|
4739
|
+
visibilityObserver = null;
|
|
4364
4740
|
if (instance.view) {
|
|
4365
4741
|
instance.view.destroy();
|
|
4366
4742
|
}
|
|
@@ -4452,6 +4828,11 @@ let activeGuid = null;
|
|
|
4452
4828
|
/**
|
|
4453
4829
|
* Returns the first rendered row in the DOM (usually, it is not visible in the table's viewport).
|
|
4454
4830
|
*
|
|
4831
|
+
* When the {@link MergeCells} plugin is enabled with its default `virtualized: false` setting, a merged
|
|
4832
|
+
* cell that crosses the viewport edge extends the rendered row range, so this method can return a row
|
|
4833
|
+
* index further from the viewport than usual. For the actual visible viewport, use
|
|
4834
|
+
* {@link Core#getFirstFullyVisibleRow} or {@link Core#getFirstPartiallyVisibleRow}.
|
|
4835
|
+
*
|
|
4455
4836
|
* @since 14.6.0
|
|
4456
4837
|
* @memberof Core#
|
|
4457
4838
|
* @function getFirstRenderedVisibleRow
|
|
@@ -4462,6 +4843,11 @@ let activeGuid = null;
|
|
|
4462
4843
|
/**
|
|
4463
4844
|
* Returns the last rendered row in the DOM (usually, it is not visible in the table's viewport).
|
|
4464
4845
|
*
|
|
4846
|
+
* When the {@link MergeCells} plugin is enabled with its default `virtualized: false` setting, a merged
|
|
4847
|
+
* cell that crosses the viewport edge extends the rendered row range, so this method can return a row
|
|
4848
|
+
* index further from the viewport than usual. For the actual visible viewport, use
|
|
4849
|
+
* {@link Core#getLastFullyVisibleRow} or {@link Core#getLastPartiallyVisibleRow}.
|
|
4850
|
+
*
|
|
4465
4851
|
* @since 14.6.0
|
|
4466
4852
|
* @memberof Core#
|
|
4467
4853
|
* @function getLastRenderedVisibleRow
|
|
@@ -4472,6 +4858,11 @@ let activeGuid = null;
|
|
|
4472
4858
|
/**
|
|
4473
4859
|
* Returns the first rendered column in the DOM (usually, it is not visible in the table's viewport).
|
|
4474
4860
|
*
|
|
4861
|
+
* When the {@link MergeCells} plugin is enabled with its default `virtualized: false` setting, a merged
|
|
4862
|
+
* cell that crosses the viewport edge extends the rendered column range, so this method can return a
|
|
4863
|
+
* column index further from the viewport than usual. For the actual visible viewport, use
|
|
4864
|
+
* {@link Core#getFirstFullyVisibleColumn} or {@link Core#getFirstPartiallyVisibleColumn}.
|
|
4865
|
+
*
|
|
4475
4866
|
* @since 14.6.0
|
|
4476
4867
|
* @memberof Core#
|
|
4477
4868
|
* @function getFirstRenderedVisibleColumn
|
|
@@ -4482,6 +4873,11 @@ let activeGuid = null;
|
|
|
4482
4873
|
/**
|
|
4483
4874
|
* Returns the last rendered column in the DOM (usually, it is not visible in the table's viewport).
|
|
4484
4875
|
*
|
|
4876
|
+
* When the {@link MergeCells} plugin is enabled with its default `virtualized: false` setting, a merged
|
|
4877
|
+
* cell that crosses the viewport edge extends the rendered column range, so this method can return a
|
|
4878
|
+
* column index further from the viewport than usual. For the actual visible viewport, use
|
|
4879
|
+
* {@link Core#getLastFullyVisibleColumn} or {@link Core#getLastPartiallyVisibleColumn}.
|
|
4880
|
+
*
|
|
4485
4881
|
* @since 14.6.0
|
|
4486
4882
|
* @memberof Core#
|
|
4487
4883
|
* @function getLastRenderedVisibleColumn
|
|
@@ -4964,7 +5360,7 @@ let activeGuid = null;
|
|
|
4964
5360
|
const themeName = mergedUserSettings.themeName;
|
|
4965
5361
|
const rootContainerThemeClassName = getThemeClassName(instance.rootContainer);
|
|
4966
5362
|
if (isRootInstance(instance) && !rootContainerThemeClassName && (isObject(theme) || !theme && !themeName)) {
|
|
4967
|
-
initializeThemeManager(theme);
|
|
5363
|
+
initializeThemeManager(theme, readThemeOverrides(mergedUserSettings));
|
|
4968
5364
|
}
|
|
4969
5365
|
getPluginsNames().forEach((pluginName)=>{
|
|
4970
5366
|
const PluginClass = getPlugin(pluginName);
|