handsontable 18.0.0 → 18.1.0-rc7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/3rdparty/walkontable/src/axisSizing/axisSizeSource.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/axisSizeSource.d.ts +55 -0
- package/3rdparty/walkontable/src/axisSizing/axisSizeSource.js +15 -0
- package/3rdparty/walkontable/src/axisSizing/axisSizeSource.mjs +14 -0
- package/3rdparty/walkontable/src/axisSizing/boxModel.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/boxModel.d.ts +32 -0
- package/3rdparty/walkontable/src/axisSizing/boxModel.js +45 -0
- package/3rdparty/walkontable/src/axisSizing/boxModel.mjs +33 -0
- package/3rdparty/walkontable/src/axisSizing/columnUtils.d.mts +2 -0
- package/3rdparty/walkontable/src/{utils/column.d.ts → axisSizing/columnUtils.d.ts} +12 -10
- package/3rdparty/walkontable/src/axisSizing/columnUtils.js +147 -0
- package/3rdparty/walkontable/src/axisSizing/columnUtils.mjs +142 -0
- package/3rdparty/walkontable/src/axisSizing/defaultSizeSource.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/defaultSizeSource.d.ts +58 -0
- package/3rdparty/walkontable/src/axisSizing/defaultSizeSource.js +129 -0
- package/3rdparty/walkontable/src/axisSizing/defaultSizeSource.mjs +119 -0
- package/3rdparty/walkontable/src/axisSizing/oversizedRows.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/oversizedRows.d.ts +162 -0
- package/3rdparty/walkontable/src/axisSizing/oversizedRows.js +424 -0
- package/3rdparty/walkontable/src/axisSizing/oversizedRows.mjs +522 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/index.d.ts +130 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/index.js +256 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/index.mjs +262 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/prefixSumStrategy.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/prefixSumStrategy.d.ts +51 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/prefixSumStrategy.js +121 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/prefixSumStrategy.mjs +117 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/sparseStrategy.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/sparseStrategy.d.ts +53 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/sparseStrategy.js +206 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/sparseStrategy.mjs +203 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/strategy.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/strategy.d.ts +53 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/strategy.js +40 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/strategy.mjs +41 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/uniformStrategy.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/uniformStrategy.d.ts +47 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/uniformStrategy.js +121 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/uniformStrategy.mjs +115 -0
- package/3rdparty/walkontable/src/axisSizing/rowUtils.d.mts +2 -0
- package/3rdparty/walkontable/src/{utils/row.d.ts → axisSizing/rowUtils.d.ts} +11 -9
- package/3rdparty/walkontable/src/axisSizing/rowUtils.js +111 -0
- package/3rdparty/walkontable/src/axisSizing/rowUtils.mjs +106 -0
- package/3rdparty/walkontable/src/axisSizing/sizeGetters.d.mts +2 -0
- package/3rdparty/walkontable/src/axisSizing/sizeGetters.d.ts +84 -0
- package/3rdparty/walkontable/src/axisSizing/sizeGetters.js +102 -0
- package/3rdparty/walkontable/src/axisSizing/sizeGetters.mjs +92 -0
- package/3rdparty/walkontable/src/calculator/axisCalculation.d.ts +1 -1
- package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.d.ts +10 -0
- package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.js +10 -1
- package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.mjs +10 -1
- package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.d.ts +9 -0
- package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.js +9 -1
- package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.mjs +9 -1
- package/3rdparty/walkontable/src/calculator/viewportColumns.d.ts +1 -1
- package/3rdparty/walkontable/src/calculator/viewportRows.d.ts +1 -1
- package/3rdparty/walkontable/src/cell/range.d.ts +10 -0
- package/3rdparty/walkontable/src/cell/range.js +14 -3
- package/3rdparty/walkontable/src/cell/range.mjs +11 -0
- package/3rdparty/walkontable/src/core/_base.d.ts +21 -21
- package/3rdparty/walkontable/src/core/_base.js +58 -147
- package/3rdparty/walkontable/src/core/_base.mjs +17 -147
- package/3rdparty/walkontable/src/core/clone.d.ts +4 -14
- package/3rdparty/walkontable/src/core/clone.js +51 -5
- package/3rdparty/walkontable/src/core/clone.mjs +10 -5
- package/3rdparty/walkontable/src/core/core.d.ts +1 -5
- package/3rdparty/walkontable/src/core/core.js +52 -47
- package/3rdparty/walkontable/src/core/core.mjs +12 -48
- package/3rdparty/walkontable/src/domMeasure/geometryReader.d.mts +1 -0
- package/3rdparty/walkontable/src/domMeasure/geometryReader.d.ts +172 -0
- package/3rdparty/walkontable/src/domMeasure/geometryReader.js +19 -0
- package/3rdparty/walkontable/src/domMeasure/geometryReader.mjs +16 -0
- package/3rdparty/walkontable/src/domMeasure/liveGeometryReader.d.mts +1 -0
- package/3rdparty/walkontable/src/domMeasure/liveGeometryReader.d.ts +134 -0
- package/3rdparty/walkontable/src/domMeasure/liveGeometryReader.js +200 -0
- package/3rdparty/walkontable/src/domMeasure/liveGeometryReader.mjs +198 -0
- package/3rdparty/walkontable/src/event.d.ts +25 -12
- package/3rdparty/walkontable/src/event.js +91 -224
- package/3rdparty/walkontable/src/event.mjs +90 -224
- package/3rdparty/walkontable/src/facade/core.d.ts +6 -6
- package/3rdparty/walkontable/src/index.d.ts +1 -1
- package/3rdparty/walkontable/src/index.js +2 -2
- package/3rdparty/walkontable/src/index.mjs +1 -1
- package/3rdparty/walkontable/src/overlay/index.d.ts +6 -6
- package/3rdparty/walkontable/src/overlay/index.js +11 -11
- package/3rdparty/walkontable/src/overlay/index.mjs +6 -6
- package/3rdparty/walkontable/src/overlay/overlays.d.ts +375 -0
- package/3rdparty/walkontable/src/overlay/overlays.js +612 -0
- package/3rdparty/walkontable/src/overlay/overlays.mjs +601 -0
- package/3rdparty/walkontable/src/overlay/{_base.d.ts → regions/_base.d.ts} +65 -16
- package/3rdparty/walkontable/src/overlay/{_base.js → regions/_base.js} +160 -50
- package/3rdparty/walkontable/src/overlay/{_base.mjs → regions/_base.mjs} +163 -47
- package/3rdparty/walkontable/src/overlay/regions/bottomInlineStartCornerOverlay.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/{bottomInlineStartCorner.d.ts → regions/bottomInlineStartCornerOverlay.d.ts} +5 -10
- package/3rdparty/walkontable/src/overlay/{bottomInlineStartCorner.js → regions/bottomInlineStartCornerOverlay.js} +18 -20
- package/3rdparty/walkontable/src/overlay/{bottomInlineStartCorner.mjs → regions/bottomInlineStartCornerOverlay.mjs} +18 -20
- package/3rdparty/walkontable/src/overlay/regions/bottomOverlay.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/{bottom.d.ts → regions/bottomOverlay.d.ts} +16 -11
- package/3rdparty/walkontable/src/overlay/{bottom.js → regions/bottomOverlay.js} +113 -66
- package/3rdparty/walkontable/src/overlay/{bottom.mjs → regions/bottomOverlay.mjs} +113 -66
- package/3rdparty/walkontable/src/overlay/regions/inlineStartOverlay.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/{inlineStart.d.ts → regions/inlineStartOverlay.d.ts} +17 -11
- package/3rdparty/walkontable/src/overlay/{inlineStart.js → regions/inlineStartOverlay.js} +122 -67
- package/3rdparty/walkontable/src/overlay/{inlineStart.mjs → regions/inlineStartOverlay.mjs} +122 -67
- package/3rdparty/walkontable/src/overlay/regions/topInlineStartCornerOverlay.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/{topInlineStartCorner.d.ts → regions/topInlineStartCornerOverlay.d.ts} +5 -10
- package/3rdparty/walkontable/src/overlay/{topInlineStartCorner.js → regions/topInlineStartCornerOverlay.js} +13 -16
- package/3rdparty/walkontable/src/overlay/{topInlineStartCorner.mjs → regions/topInlineStartCornerOverlay.mjs} +13 -16
- package/3rdparty/walkontable/src/overlay/regions/topOverlay.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/{top.d.ts → regions/topOverlay.d.ts} +32 -11
- package/3rdparty/walkontable/src/overlay/{top.js → regions/topOverlay.js} +163 -77
- package/3rdparty/walkontable/src/overlay/{top.mjs → regions/topOverlay.mjs} +163 -77
- package/3rdparty/walkontable/src/overlay/resizeMonitor.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/resizeMonitor.d.ts +49 -0
- package/3rdparty/walkontable/src/overlay/resizeMonitor.js +154 -0
- package/3rdparty/walkontable/src/overlay/resizeMonitor.mjs +153 -0
- package/3rdparty/walkontable/src/overlay/scroll/nativeScrollInput.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/scroll/nativeScrollInput.d.ts +62 -0
- package/3rdparty/walkontable/src/overlay/scroll/nativeScrollInput.js +290 -0
- package/3rdparty/walkontable/src/overlay/scroll/nativeScrollInput.mjs +295 -0
- package/3rdparty/walkontable/src/overlay/scroll/scrollSync.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/scroll/scrollSync.d.ts +176 -0
- package/3rdparty/walkontable/src/overlay/scroll/scrollSync.js +549 -0
- package/3rdparty/walkontable/src/overlay/scroll/scrollSync.mjs +557 -0
- package/3rdparty/walkontable/src/overlay/spreaderSize.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/spreaderSize.d.ts +67 -0
- package/3rdparty/walkontable/src/overlay/spreaderSize.js +178 -0
- package/3rdparty/walkontable/src/overlay/spreaderSize.mjs +179 -0
- package/3rdparty/walkontable/src/{stickyScrollStrategy.d.ts → overlay/strategies/stickyScrollStrategy.d.ts} +33 -21
- package/3rdparty/walkontable/src/{stickyScrollStrategy.js → overlay/strategies/stickyScrollStrategy.js} +60 -41
- package/3rdparty/walkontable/src/{stickyScrollStrategy.mjs → overlay/strategies/stickyScrollStrategy.mjs} +58 -38
- package/3rdparty/walkontable/src/ports.d.mts +1 -0
- package/3rdparty/walkontable/src/ports.d.ts +54 -0
- package/3rdparty/walkontable/src/ports.js +23 -0
- package/3rdparty/walkontable/src/ports.mjs +24 -0
- package/3rdparty/walkontable/src/{renderer → render}/_base.d.ts +1 -1
- package/3rdparty/walkontable/src/{renderer → render}/cells.js +1 -1
- package/3rdparty/walkontable/src/{renderer → render}/cells.mjs +1 -1
- package/3rdparty/walkontable/src/{renderer → render}/columnHeaders.d.ts +1 -0
- package/3rdparty/walkontable/src/{renderer → render}/columnHeaders.js +43 -1
- package/3rdparty/walkontable/src/{renderer → render}/columnHeaders.mjs +44 -2
- package/3rdparty/walkontable/src/render/index.d.mts +1 -0
- package/3rdparty/walkontable/src/{renderer → render}/index.d.ts +11 -3
- package/3rdparty/walkontable/src/{renderer → render}/index.js +13 -3
- package/3rdparty/walkontable/src/{renderer → render}/index.mjs +11 -1
- package/3rdparty/walkontable/src/{renderer → render}/rows.js +1 -1
- package/3rdparty/walkontable/src/{renderer → render}/rows.mjs +1 -1
- package/3rdparty/walkontable/src/render/tableRenderer.d.mts +1 -0
- package/3rdparty/walkontable/src/{renderer/table.d.ts → render/tableRenderer.d.ts} +12 -2
- package/3rdparty/walkontable/src/render/tableRenderer.js +382 -0
- package/3rdparty/walkontable/src/{renderer/table.mjs → render/tableRenderer.mjs} +159 -6
- package/3rdparty/walkontable/src/{scroll.d.ts → scroll/scroll.d.ts} +27 -10
- package/3rdparty/walkontable/src/{scroll.js → scroll/scroll.js} +108 -32
- package/3rdparty/walkontable/src/{scroll.mjs → scroll/scroll.mjs} +106 -29
- package/3rdparty/walkontable/src/selection/border/border.d.ts +313 -5
- package/3rdparty/walkontable/src/selection/border/border.js +861 -51
- package/3rdparty/walkontable/src/selection/border/border.mjs +863 -53
- package/3rdparty/walkontable/src/selection/border/types.d.ts +30 -0
- package/3rdparty/walkontable/src/selection/manager.js +237 -0
- package/3rdparty/walkontable/src/selection/manager.mjs +238 -1
- package/3rdparty/walkontable/src/settings/accessor.d.mts +2 -0
- package/3rdparty/walkontable/src/settings/accessor.d.ts +74 -0
- package/3rdparty/walkontable/src/settings/accessor.js +78 -0
- package/3rdparty/walkontable/src/settings/accessor.mjs +71 -0
- package/3rdparty/walkontable/src/settings/defaults.d.mts +1 -0
- package/3rdparty/walkontable/src/{settings.d.ts → settings/defaults.d.ts} +16 -77
- package/3rdparty/walkontable/src/settings/defaults.js +146 -0
- package/3rdparty/walkontable/src/settings/defaults.mjs +225 -0
- package/3rdparty/walkontable/src/settings/index.d.mts +1 -0
- package/3rdparty/walkontable/src/settings/index.d.ts +6 -0
- package/3rdparty/walkontable/src/settings/index.js +20 -0
- package/3rdparty/walkontable/src/settings/index.mjs +5 -0
- package/3rdparty/walkontable/src/table/baseTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/baseTable.d.ts +284 -0
- package/3rdparty/walkontable/src/table/baseTable.js +295 -0
- package/3rdparty/walkontable/src/table/baseTable.mjs +283 -0
- package/3rdparty/walkontable/src/table/cellAccess.d.mts +1 -0
- package/3rdparty/walkontable/src/table/cellAccess.d.ts +101 -0
- package/3rdparty/walkontable/src/table/cellAccess.js +238 -0
- package/3rdparty/walkontable/src/table/cellAccess.mjs +229 -0
- package/3rdparty/walkontable/src/table/domScaffold.d.mts +1 -0
- package/3rdparty/walkontable/src/table/domScaffold.d.ts +37 -0
- package/3rdparty/walkontable/src/table/domScaffold.js +145 -0
- package/3rdparty/walkontable/src/table/domScaffold.mjs +136 -0
- package/3rdparty/walkontable/src/table/drawCycle.d.mts +1 -0
- package/3rdparty/walkontable/src/table/drawCycle.d.ts +16 -0
- package/3rdparty/walkontable/src/table/drawCycle.js +405 -0
- package/3rdparty/walkontable/src/table/drawCycle.mjs +403 -0
- package/3rdparty/walkontable/src/table/rangeQuery/renderedRange.d.mts +1 -0
- package/3rdparty/walkontable/src/table/rangeQuery/renderedRange.d.ts +38 -0
- package/3rdparty/walkontable/src/table/rangeQuery/renderedRange.js +15 -0
- package/3rdparty/walkontable/src/table/rangeQuery/renderedRange.mjs +14 -0
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyColumnsStart.d.ts +1 -1
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyColumnsStart.js +1 -1
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyColumnsStart.mjs +1 -1
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsBottom.d.ts +1 -1
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsTop.d.ts +1 -1
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsTop.js +1 -1
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsTop.mjs +1 -1
- package/3rdparty/walkontable/src/table/rangeQuery/viewportPredicates.d.mts +2 -0
- package/3rdparty/walkontable/src/table/rangeQuery/viewportPredicates.d.ts +226 -0
- package/3rdparty/walkontable/src/table/rangeQuery/viewportPredicates.js +251 -0
- package/3rdparty/walkontable/src/table/rangeQuery/viewportPredicates.mjs +241 -0
- package/3rdparty/walkontable/src/table/rangeQuery/virtualRange.d.mts +1 -0
- package/3rdparty/walkontable/src/table/rangeQuery/virtualRange.d.ts +14 -0
- package/3rdparty/walkontable/src/table/rangeQuery/virtualRange.js +196 -0
- package/3rdparty/walkontable/src/table/rangeQuery/virtualRange.mjs +179 -0
- package/3rdparty/walkontable/src/table/regions/bottomInlineStartCornerTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/regions/bottomInlineStartCornerTable.d.ts +16 -0
- package/3rdparty/walkontable/src/table/{bottomInlineStartCorner.js → regions/bottomInlineStartCornerTable.js} +9 -12
- package/3rdparty/walkontable/src/table/regions/bottomInlineStartCornerTable.mjs +21 -0
- package/3rdparty/walkontable/src/table/regions/bottomTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/regions/bottomTable.d.ts +15 -0
- package/3rdparty/walkontable/src/table/regions/bottomTable.js +35 -0
- package/3rdparty/walkontable/src/table/regions/bottomTable.mjs +20 -0
- package/3rdparty/walkontable/src/table/regions/inlineStartTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/regions/inlineStartTable.d.ts +12 -0
- package/3rdparty/walkontable/src/table/regions/inlineStartTable.js +32 -0
- package/3rdparty/walkontable/src/table/regions/inlineStartTable.mjs +17 -0
- package/3rdparty/walkontable/src/table/regions/masterTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/{master.d.ts → regions/masterTable.d.ts} +4 -13
- package/3rdparty/walkontable/src/table/{master.js → regions/masterTable.js} +23 -48
- package/3rdparty/walkontable/src/table/{master.mjs → regions/masterTable.mjs} +22 -47
- package/3rdparty/walkontable/src/table/regions/topInlineStartCornerTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/regions/topInlineStartCornerTable.d.ts +16 -0
- package/3rdparty/walkontable/src/table/{topInlineStartCorner.js → regions/topInlineStartCornerTable.js} +9 -12
- package/3rdparty/walkontable/src/table/regions/topInlineStartCornerTable.mjs +21 -0
- package/3rdparty/walkontable/src/table/regions/topTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/regions/topTable.d.ts +15 -0
- package/3rdparty/walkontable/src/table/regions/topTable.js +35 -0
- package/3rdparty/walkontable/src/table/regions/topTable.mjs +20 -0
- package/3rdparty/walkontable/src/types.d.ts +7 -69
- package/3rdparty/walkontable/src/types.mjs +2 -1
- package/3rdparty/walkontable/src/utils/pointerToCoords.d.mts +1 -0
- package/3rdparty/walkontable/src/utils/{cellCoords.d.ts → pointerToCoords.d.ts} +24 -0
- package/3rdparty/walkontable/src/utils/pointerToCoords.js +181 -0
- package/3rdparty/walkontable/src/utils/pointerToCoords.mjs +186 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/gatherLayoutInput.d.mts +1 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/gatherLayoutInput.d.ts +40 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/gatherLayoutInput.js +139 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/gatherLayoutInput.mjs +131 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/layoutSnapshot.d.mts +1 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/layoutSnapshot.d.ts +133 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/layoutSnapshot.js +18 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/layoutSnapshot.mjs +18 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/resolveLayout.d.mts +1 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/resolveLayout.d.ts +17 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/resolveLayout.js +104 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/resolveLayout.mjs +99 -0
- package/3rdparty/walkontable/src/viewport/calculatorFactory.d.mts +1 -0
- package/3rdparty/walkontable/src/viewport/calculatorFactory.d.ts +84 -0
- package/3rdparty/walkontable/src/viewport/calculatorFactory.js +588 -0
- package/3rdparty/walkontable/src/viewport/calculatorFactory.mjs +601 -0
- package/3rdparty/walkontable/src/viewport/viewport.d.ts +267 -0
- package/3rdparty/walkontable/src/viewport/viewport.js +368 -0
- package/3rdparty/walkontable/src/viewport/viewport.mjs +360 -0
- package/3rdparty/walkontable/src/viewport/workspaceSize.d.mts +1 -0
- package/3rdparty/walkontable/src/viewport/workspaceSize.d.ts +59 -0
- package/3rdparty/walkontable/src/viewport/workspaceSize.js +284 -0
- package/3rdparty/walkontable/src/viewport/workspaceSize.mjs +282 -0
- package/3rdparty/walkontable/src/wire.d.mts +1 -0
- package/3rdparty/walkontable/src/wire.d.ts +81 -0
- package/3rdparty/walkontable/src/wire.js +56 -0
- package/3rdparty/walkontable/src/wire.mjs +56 -0
- package/CHANGELOG.md +114 -1
- package/LICENSE.txt +1 -1
- package/README.md +2 -2
- package/base.d.ts +13 -4
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/cellTypes/checkboxType/accessors/valueSetter.d.ts +1 -1
- package/cellTypes/checkboxType/accessors/valueSetter.js +3 -1
- package/cellTypes/checkboxType/accessors/valueSetter.mjs +3 -1
- package/cellTypes/index.d.ts +3 -2
- package/cellTypes/index.js +9 -0
- package/cellTypes/index.mjs +5 -2
- package/cellTypes/intlDatetimeType/index.d.mts +1 -0
- package/cellTypes/intlDatetimeType/index.d.ts +1 -0
- package/cellTypes/intlDatetimeType/index.js +19 -0
- package/cellTypes/intlDatetimeType/index.mjs +1 -0
- package/cellTypes/intlDatetimeType/intlDatetimeType.d.mts +1 -0
- package/cellTypes/intlDatetimeType/intlDatetimeType.d.ts +16 -0
- package/cellTypes/intlDatetimeType/intlDatetimeType.js +31 -0
- package/cellTypes/intlDatetimeType/intlDatetimeType.mjs +15 -0
- package/cellTypes/multiSelectType/index.d.ts +1 -1
- package/cellTypes/multiSelectType/index.js +3 -0
- package/cellTypes/multiSelectType/index.mjs +1 -1
- package/cellTypes/multiSelectType/multiSelectType.d.ts +1 -0
- package/cellTypes/multiSelectType/multiSelectType.js +4 -0
- package/cellTypes/multiSelectType/multiSelectType.mjs +1 -0
- package/cellTypes/numericType/accessors/valueSetter.js +30 -2
- package/cellTypes/numericType/accessors/valueSetter.mjs +31 -3
- package/core/hooks/bucket.d.ts +40 -6
- package/core/hooks/bucket.js +108 -72
- package/core/hooks/bucket.mjs +113 -72
- package/core/hooks/constants.js +254 -16
- package/core/hooks/constants.mjs +254 -16
- package/core/hooks/index.js +27 -22
- package/core/hooks/index.mjs +27 -22
- package/core/layout/constants.d.ts +11 -0
- package/core/layout/constants.js +6 -0
- package/core/layout/constants.mjs +12 -0
- package/core/layout/domSlot.d.ts +3 -1
- package/core/layout/domSlot.js +16 -2
- package/core/layout/domSlot.mjs +16 -2
- package/core/layout/index.d.ts +2 -2
- package/core/layout/index.js +6 -0
- package/core/layout/index.mjs +2 -2
- package/core/layout/layoutManager.d.ts +13 -0
- package/core/layout/layoutManager.js +21 -4
- package/core/layout/layoutManager.mjs +22 -2
- package/core/settings.d.ts +102 -6
- package/core/types.d.ts +15 -1
- package/core/types.mjs +9 -0
- package/core.js +534 -88
- package/core.mjs +537 -91
- package/dataMap/dataMap.d.ts +3 -13
- package/dataMap/dataMap.js +100 -41
- package/dataMap/dataMap.mjs +101 -42
- package/dataMap/dataSource.js +4 -1
- package/dataMap/dataSource.mjs +4 -1
- package/dataMap/metaManager/index.d.ts +62 -8
- package/dataMap/metaManager/index.js +66 -0
- package/dataMap/metaManager/index.mjs +66 -0
- package/dataMap/metaManager/lazyFactoryMap.d.ts +68 -43
- package/dataMap/metaManager/lazyFactoryMap.js +497 -110
- package/dataMap/metaManager/lazyFactoryMap.mjs +511 -111
- package/dataMap/metaManager/metaLayers/cellMeta.d.ts +55 -8
- package/dataMap/metaManager/metaLayers/cellMeta.js +108 -8
- package/dataMap/metaManager/metaLayers/cellMeta.mjs +108 -8
- package/dataMap/metaManager/metaLayers/columnMeta.d.ts +2 -1
- package/dataMap/metaManager/metaLayers/columnMeta.js +1 -0
- package/dataMap/metaManager/metaLayers/columnMeta.mjs +1 -0
- package/dataMap/metaManager/metaSchema.js +759 -39
- package/dataMap/metaManager/metaSchema.mjs +759 -39
- package/dataMap/metaManager/mods/dynamicCellMeta.d.ts +24 -10
- package/dataMap/metaManager/mods/dynamicCellMeta.js +252 -28
- package/dataMap/metaManager/mods/dynamicCellMeta.mjs +253 -29
- package/dataMap/sourceDataValidator.d.ts +13 -21
- package/dataMap/sourceDataValidator.js +39 -29
- package/dataMap/sourceDataValidator.mjs +50 -33
- package/dist/handsontable.full.js +30027 -11261
- package/dist/handsontable.full.min.js +168 -112
- package/dist/handsontable.js +32468 -13762
- package/dist/handsontable.min.js +172 -116
- package/dist/languages/all.js +2 -1
- package/dist/languages/all.min.js +1 -1
- package/dist/languages/fa-IR.js +2 -1
- package/dist/languages/fa-IR.min.js +1 -1
- package/dist/themes/classic.js +9 -3
- package/dist/themes/classic.min.js +4 -4
- package/dist/themes/horizon.js +9 -3
- package/dist/themes/horizon.min.js +4 -4
- package/dist/themes/main.js +9 -3
- package/dist/themes/main.min.js +4 -4
- package/dist/themes/static/variables/colors/ant.js +3 -3
- package/dist/themes/static/variables/colors/ant.min.js +3 -3
- package/dist/themes/static/variables/colors/classic.js +3 -3
- package/dist/themes/static/variables/colors/classic.min.js +3 -3
- package/dist/themes/static/variables/colors/horizon.js +3 -3
- package/dist/themes/static/variables/colors/horizon.min.js +3 -3
- package/dist/themes/static/variables/colors/main.js +3 -3
- package/dist/themes/static/variables/colors/main.min.js +3 -3
- package/dist/themes/static/variables/colors/material.js +3 -3
- package/dist/themes/static/variables/colors/material.min.js +3 -3
- package/dist/themes/static/variables/colors/shadcn.js +3 -3
- package/dist/themes/static/variables/colors/shadcn.min.js +3 -3
- package/dist/themes/static/variables/density.js +3 -3
- package/dist/themes/static/variables/density.min.js +3 -3
- package/dist/themes/static/variables/helpers/iconsMap.js +4 -9
- package/dist/themes/static/variables/helpers/iconsMap.min.js +4 -9
- package/dist/themes/static/variables/icons/horizon.js +3 -3
- package/dist/themes/static/variables/icons/horizon.min.js +3 -3
- package/dist/themes/static/variables/icons/main.js +3 -3
- package/dist/themes/static/variables/icons/main.min.js +3 -3
- package/dist/themes/static/variables/sizing.js +3 -3
- package/dist/themes/static/variables/sizing.min.js +3 -3
- package/dist/themes/static/variables/tokens/classic.js +9 -3
- package/dist/themes/static/variables/tokens/classic.min.js +4 -4
- package/dist/themes/static/variables/tokens/horizon.js +9 -3
- package/dist/themes/static/variables/tokens/horizon.min.js +4 -4
- package/dist/themes/static/variables/tokens/main.js +9 -3
- package/dist/themes/static/variables/tokens/main.min.js +4 -4
- package/editorManager.js +152 -3
- package/editorManager.mjs +152 -3
- package/editors/autocompleteEditor/autocompleteEditor.js +58 -11
- package/editors/autocompleteEditor/autocompleteEditor.mjs +59 -12
- package/editors/baseEditor/baseEditor.d.ts +15 -3
- package/editors/baseEditor/baseEditor.js +5 -3
- package/editors/baseEditor/baseEditor.mjs +15 -3
- package/editors/factory.js +5 -2
- package/editors/factory.mjs +5 -2
- package/editors/index.d.ts +3 -2
- package/editors/index.js +8 -0
- package/editors/index.mjs +3 -1
- package/editors/intlDatetimeEditor/index.d.mts +1 -0
- package/editors/intlDatetimeEditor/index.d.ts +1 -0
- package/editors/intlDatetimeEditor/index.js +19 -0
- package/editors/intlDatetimeEditor/index.mjs +1 -0
- package/editors/intlDatetimeEditor/intlDatetimeEditor.d.mts +1 -0
- package/editors/intlDatetimeEditor/intlDatetimeEditor.d.ts +42 -0
- package/editors/intlDatetimeEditor/intlDatetimeEditor.js +108 -0
- package/editors/intlDatetimeEditor/intlDatetimeEditor.mjs +93 -0
- package/editors/multiSelectEditor/multiSelectEditor.js +11 -9
- package/editors/multiSelectEditor/multiSelectEditor.mjs +12 -10
- package/editors/selectEditor/selectEditor.js +2 -1
- package/editors/selectEditor/selectEditor.mjs +2 -1
- package/editors/textEditor/textEditor.js +1 -1
- package/editors/textEditor/textEditor.mjs +2 -2
- package/eventManager.d.ts +3 -3
- package/focusManager/grid.d.ts +28 -0
- package/focusManager/grid.js +85 -2
- package/focusManager/grid.mjs +81 -3
- package/focusManager/scopeManager.js +1 -1
- package/focusManager/scopeManager.mjs +2 -2
- package/handsontable-non-commercial-license.pdf +0 -0
- package/helpers/array.d.ts +25 -0
- package/helpers/array.js +41 -4
- package/helpers/array.mjs +56 -4
- package/helpers/console.d.ts +25 -3
- package/helpers/console.js +40 -7
- package/helpers/console.mjs +52 -7
- package/helpers/dateTime.d.ts +14 -0
- package/helpers/dateTime.js +74 -2
- package/helpers/dateTime.mjs +73 -2
- package/helpers/dom/cellCoords.js +156 -13
- package/helpers/dom/cellCoords.mjs +156 -13
- package/helpers/dom/element.d.ts +47 -8
- package/helpers/dom/element.js +104 -18
- package/helpers/dom/element.mjs +132 -23
- package/helpers/dom/event.d.ts +58 -0
- package/helpers/dom/event.js +39 -0
- package/helpers/dom/event.mjs +63 -0
- package/helpers/errors.d.ts +5 -0
- package/helpers/errors.js +10 -6
- package/helpers/errors.mjs +10 -6
- package/helpers/feature.d.ts +19 -0
- package/helpers/feature.js +21 -0
- package/helpers/feature.mjs +30 -0
- package/helpers/function.d.ts +1 -1
- package/helpers/function.js +4 -1
- package/helpers/function.mjs +4 -1
- package/helpers/mixed.d.ts +103 -0
- package/helpers/mixed.js +373 -4
- package/helpers/mixed.mjs +413 -4
- package/helpers/moves.js +2 -1
- package/helpers/moves.mjs +2 -1
- package/helpers/number.d.ts +22 -0
- package/helpers/number.js +49 -0
- package/helpers/number.mjs +66 -0
- package/helpers/string.d.ts +14 -10
- package/helpers/string.js +17 -9
- package/helpers/string.mjs +27 -17
- package/helpers/templateString.d.mts +1 -0
- package/helpers/templateString.d.ts +13 -0
- package/helpers/templateString.js +29 -0
- package/helpers/templateString.mjs +19 -0
- package/helpers/uiButton.d.mts +1 -0
- package/helpers/uiButton.d.ts +21 -0
- package/helpers/uiButton.js +37 -0
- package/helpers/uiButton.mjs +31 -0
- package/i18n/languages/fa-IR.d.ts +1 -0
- package/i18n/languages/fa-IR.js +1 -0
- package/i18n/languages/fa-IR.mjs +1 -0
- package/index.d.ts +3 -3
- package/languages/all.js +2 -1
- package/languages/fa-IR.js +2 -1
- package/languages/fa-IR.mjs +1 -0
- package/languages/index.js +2 -1
- package/package.json +61 -1
- package/plugins/autoColumnSize/autoColumnSize.d.ts +24 -1
- package/plugins/autoColumnSize/autoColumnSize.js +501 -82
- package/plugins/autoColumnSize/autoColumnSize.mjs +508 -83
- package/plugins/autoRowSize/autoRowSize.d.ts +40 -5
- package/plugins/autoRowSize/autoRowSize.js +68 -24
- package/plugins/autoRowSize/autoRowSize.mjs +98 -29
- package/plugins/autofill/autofill.js +30 -12
- package/plugins/autofill/autofill.mjs +30 -12
- package/plugins/base/base.d.ts +10 -0
- package/plugins/collapsibleColumns/collapsibleColumns.d.ts +4 -0
- package/plugins/collapsibleColumns/collapsibleColumns.js +89 -8
- package/plugins/collapsibleColumns/collapsibleColumns.mjs +93 -8
- package/plugins/columnSorting/columnSorting.d.ts +31 -2
- package/plugins/columnSorting/columnSorting.js +151 -24
- package/plugins/columnSorting/columnSorting.mjs +153 -26
- package/plugins/columnSorting/columnStatesManager.d.ts +1 -1
- package/plugins/columnSorting/columnStatesManager.js +1 -7
- package/plugins/columnSorting/columnStatesManager.mjs +1 -7
- package/plugins/columnSorting/domHelpers.d.ts +3 -0
- package/plugins/columnSorting/domHelpers.js +9 -0
- package/plugins/columnSorting/domHelpers.mjs +3 -3
- package/plugins/columnSorting/rootComparator.js +21 -16
- package/plugins/columnSorting/rootComparator.mjs +21 -16
- package/plugins/columnSorting/sortFunction/checkbox.js +7 -5
- package/plugins/columnSorting/sortFunction/checkbox.mjs +7 -5
- package/plugins/columnSorting/sortFunction/default.js +15 -4
- package/plugins/columnSorting/sortFunction/default.mjs +15 -4
- package/plugins/columnSorting/sortFunction/intlDatetime.d.mts +1 -0
- package/plugins/columnSorting/sortFunction/intlDatetime.d.ts +10 -0
- package/plugins/columnSorting/sortFunction/intlDatetime.js +23 -0
- package/plugins/columnSorting/sortFunction/intlDatetime.mjs +12 -0
- package/plugins/columnSorting/sortService/registry.js +2 -0
- package/plugins/columnSorting/sortService/registry.mjs +2 -0
- package/plugins/columnSorting/utils.d.ts +8 -0
- package/plugins/columnSorting/utils.js +37 -45
- package/plugins/columnSorting/utils.mjs +42 -47
- package/plugins/columnSummary/columnSummary.js +9 -5
- package/plugins/columnSummary/columnSummary.mjs +9 -5
- package/plugins/columnSummary/endpoints.d.ts +69 -2
- package/plugins/columnSummary/endpoints.js +181 -29
- package/plugins/columnSummary/endpoints.mjs +181 -29
- package/plugins/comments/commentEditor.js +1 -1
- package/plugins/comments/commentEditor.mjs +2 -2
- package/plugins/contextMenu/contextMenu.d.ts +12 -1
- package/plugins/contextMenu/contextMenu.js +30 -6
- package/plugins/contextMenu/contextMenu.mjs +30 -6
- package/plugins/contextMenu/index.d.ts +1 -1
- package/plugins/contextMenu/menu/menu.d.ts +22 -1
- package/plugins/contextMenu/menu/menu.js +211 -3
- package/plugins/contextMenu/menu/menu.mjs +212 -4
- package/plugins/contextMenu/menu/menuItemRenderer.js +2 -2
- package/plugins/contextMenu/menu/menuItemRenderer.mjs +2 -2
- package/plugins/contextMenu/predefinedItems/alignment.js +14 -14
- package/plugins/contextMenu/predefinedItems/alignment.mjs +14 -14
- package/plugins/contextMenu/predefinedItems/clearColumn.js +1 -1
- package/plugins/contextMenu/predefinedItems/clearColumn.mjs +1 -1
- package/plugins/contextMenu/predefinedItems/readOnly.js +3 -3
- package/plugins/contextMenu/predefinedItems/readOnly.mjs +3 -3
- package/plugins/contextMenu/utils.js +1 -1
- package/plugins/contextMenu/utils.mjs +1 -1
- package/plugins/copyPaste/copyPaste.js +70 -16
- package/plugins/copyPaste/copyPaste.mjs +71 -17
- package/plugins/copyPaste/copyableRanges.js +6 -2
- package/plugins/copyPaste/copyableRanges.mjs +6 -2
- package/plugins/copyPaste/pasteEvent.d.ts +1 -1
- package/plugins/customBorders/customBorders.d.ts +21 -40
- package/plugins/customBorders/customBorders.js +1080 -201
- package/plugins/customBorders/customBorders.mjs +1082 -203
- package/plugins/customBorders/utils.d.ts +71 -0
- package/plugins/customBorders/utils.js +63 -0
- package/plugins/customBorders/utils.mjs +101 -0
- package/plugins/dataProvider/dataProvider.d.ts +2 -1
- package/plugins/dataProvider/dataProvider.js +22 -7
- package/plugins/dataProvider/dataProvider.mjs +22 -7
- package/plugins/dataProvider/query/crud.js +1 -1
- package/plugins/dataProvider/query/crud.mjs +1 -1
- package/plugins/dialog/dialog.js +14 -9
- package/plugins/dialog/dialog.mjs +14 -9
- package/plugins/dialog/templates/confirm.d.ts +1 -1
- package/plugins/dialog/templates/confirm.js +2 -1
- package/plugins/dialog/templates/confirm.mjs +2 -1
- package/plugins/dialog/ui.d.ts +5 -3
- package/plugins/dialog/ui.js +12 -4
- package/plugins/dialog/ui.mjs +12 -4
- package/plugins/dragToScroll/dragToScroll.d.ts +2 -2
- package/plugins/dragToScroll/dragToScroll.js +150 -14
- package/plugins/dragToScroll/dragToScroll.mjs +151 -15
- package/plugins/dropdownMenu/dropdownMenu.d.ts +5 -1
- package/plugins/dropdownMenu/dropdownMenu.js +45 -3
- package/plugins/dropdownMenu/dropdownMenu.mjs +46 -4
- package/plugins/dropdownMenu/index.d.ts +1 -0
- package/plugins/emptyDataState/emptyDataState.js +4 -6
- package/plugins/emptyDataState/emptyDataState.mjs +4 -6
- package/plugins/emptyDataState/ui.js +2 -1
- package/plugins/emptyDataState/ui.mjs +2 -1
- package/plugins/exportFile/dataProvider.js +7 -9
- package/plugins/exportFile/dataProvider.mjs +7 -9
- package/plugins/exportFile/exportFile.d.ts +10 -3
- package/plugins/exportFile/types/_base.js +4 -10
- package/plugins/exportFile/types/_base.mjs +4 -10
- package/plugins/exportFile/types/xlsx/cell-style.js +4 -2
- package/plugins/exportFile/types/xlsx/cell-style.mjs +4 -2
- package/plugins/exportFile/types/xlsx/date-utils.d.ts +15 -0
- package/plugins/exportFile/types/xlsx/date-utils.js +31 -0
- package/plugins/exportFile/types/xlsx/date-utils.mjs +36 -0
- package/plugins/exportFile/types/xlsx.js +13 -9
- package/plugins/exportFile/types/xlsx.mjs +14 -10
- package/plugins/exportFile/utils.d.ts +9 -1
- package/plugins/exportFile/utils.js +27 -4
- package/plugins/exportFile/utils.mjs +40 -2
- package/plugins/filters/component/_base.d.ts +1 -2
- package/plugins/filters/component/_base.js +1 -2
- package/plugins/filters/component/_base.mjs +1 -2
- package/plugins/filters/component/condition.d.ts +1 -0
- package/plugins/filters/component/condition.js +2 -0
- package/plugins/filters/component/condition.mjs +2 -0
- package/plugins/filters/component/value.d.ts +5 -6
- package/plugins/filters/component/value.js +53 -34
- package/plugins/filters/component/value.mjs +54 -35
- package/plugins/filters/condition/date/after.js +2 -1
- package/plugins/filters/condition/date/after.mjs +2 -1
- package/plugins/filters/condition/date/afterOrEqual.js +2 -1
- package/plugins/filters/condition/date/afterOrEqual.mjs +2 -1
- package/plugins/filters/condition/date/before.js +2 -1
- package/plugins/filters/condition/date/before.mjs +2 -1
- package/plugins/filters/condition/date/beforeOrEqual.js +2 -1
- package/plugins/filters/condition/date/beforeOrEqual.mjs +2 -1
- package/plugins/filters/condition/equal.d.ts +7 -0
- package/plugins/filters/condition/equal.js +4 -0
- package/plugins/filters/condition/equal.mjs +10 -0
- package/plugins/filters/condition/intlDatetime/after.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/after.d.ts +18 -0
- package/plugins/filters/condition/intlDatetime/after.js +77 -0
- package/plugins/filters/condition/intlDatetime/after.mjs +22 -0
- package/plugins/filters/condition/intlDatetime/afterOrEqual.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/afterOrEqual.d.ts +18 -0
- package/plugins/filters/condition/intlDatetime/afterOrEqual.js +77 -0
- package/plugins/filters/condition/intlDatetime/afterOrEqual.mjs +22 -0
- package/plugins/filters/condition/intlDatetime/before.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/before.d.ts +18 -0
- package/plugins/filters/condition/intlDatetime/before.js +77 -0
- package/plugins/filters/condition/intlDatetime/before.mjs +22 -0
- package/plugins/filters/condition/intlDatetime/beforeOrEqual.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/beforeOrEqual.d.ts +18 -0
- package/plugins/filters/condition/intlDatetime/beforeOrEqual.js +77 -0
- package/plugins/filters/condition/intlDatetime/beforeOrEqual.mjs +22 -0
- package/plugins/filters/condition/intlDatetime/between.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/between.d.ts +18 -0
- package/plugins/filters/condition/intlDatetime/between.js +78 -0
- package/plugins/filters/condition/intlDatetime/between.mjs +23 -0
- package/plugins/filters/condition/intlDatetime/today.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/today.d.ts +17 -0
- package/plugins/filters/condition/intlDatetime/today.js +76 -0
- package/plugins/filters/condition/intlDatetime/today.mjs +20 -0
- package/plugins/filters/condition/intlDatetime/tomorrow.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/tomorrow.d.ts +17 -0
- package/plugins/filters/condition/intlDatetime/tomorrow.js +77 -0
- package/plugins/filters/condition/intlDatetime/tomorrow.mjs +21 -0
- package/plugins/filters/condition/intlDatetime/yesterday.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/yesterday.d.ts +17 -0
- package/plugins/filters/condition/intlDatetime/yesterday.js +77 -0
- package/plugins/filters/condition/intlDatetime/yesterday.mjs +21 -0
- package/plugins/filters/conditionCollection.js +4 -7
- package/plugins/filters/conditionCollection.mjs +4 -7
- package/plugins/filters/conditionUpdateObserver.d.ts +2 -2
- package/plugins/filters/conditionUpdateObserver.js +148 -49
- package/plugins/filters/conditionUpdateObserver.mjs +148 -49
- package/plugins/filters/constants.d.ts +1 -0
- package/plugins/filters/constants.js +31 -0
- package/plugins/filters/constants.mjs +28 -0
- package/plugins/filters/dataFilter.d.ts +4 -12
- package/plugins/filters/dataFilter.js +7 -19
- package/plugins/filters/dataFilter.mjs +8 -20
- package/plugins/filters/filters.d.ts +33 -9
- package/plugins/filters/filters.js +91 -31
- package/plugins/filters/filters.mjs +92 -32
- package/plugins/filters/sortComparators.d.ts +9 -2
- package/plugins/filters/sortComparators.js +34 -1
- package/plugins/filters/sortComparators.mjs +38 -3
- package/plugins/filters/ui/input.d.ts +4 -0
- package/plugins/filters/ui/input.js +18 -6
- package/plugins/filters/ui/input.mjs +18 -6
- package/plugins/filters/ui/multipleSelect.js +27 -4
- package/plugins/filters/ui/multipleSelect.mjs +27 -4
- package/plugins/filters/ui/select.js +1 -1
- package/plugins/filters/ui/select.mjs +1 -1
- package/plugins/formulas/engine/register.d.ts +5 -4
- package/plugins/formulas/engine/register.js +5 -2
- package/plugins/formulas/engine/register.mjs +9 -5
- package/plugins/formulas/engine/settings.d.ts +2 -6
- package/plugins/formulas/engine/settings.js +29 -4
- package/plugins/formulas/engine/settings.mjs +29 -4
- package/plugins/formulas/engine/types.d.ts +12 -2
- package/plugins/formulas/formulas.d.ts +39 -0
- package/plugins/formulas/formulas.js +789 -47
- package/plugins/formulas/formulas.mjs +793 -49
- package/plugins/formulas/hyperlinkUrl.d.mts +1 -0
- package/plugins/formulas/hyperlinkUrl.d.ts +12 -0
- package/plugins/formulas/hyperlinkUrl.js +32 -0
- package/plugins/formulas/hyperlinkUrl.mjs +32 -0
- package/plugins/formulas/indexSyncer/axisSyncer.d.ts +1 -0
- package/plugins/formulas/indexSyncer/axisSyncer.js +72 -15
- package/plugins/formulas/indexSyncer/axisSyncer.mjs +72 -15
- package/plugins/formulas/utils.d.ts +9 -0
- package/plugins/formulas/utils.js +21 -0
- package/plugins/formulas/utils.mjs +25 -0
- package/plugins/hiddenColumns/contextMenuItem/showColumn.js +6 -1
- package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +6 -1
- package/plugins/hiddenColumns/hiddenColumns.js +6 -3
- package/plugins/hiddenColumns/hiddenColumns.mjs +6 -3
- package/plugins/hiddenRows/contextMenuItem/showRow.js +6 -1
- package/plugins/hiddenRows/contextMenuItem/showRow.mjs +6 -1
- package/plugins/hiddenRows/hiddenRows.js +6 -3
- package/plugins/hiddenRows/hiddenRows.mjs +6 -3
- package/plugins/index.d.ts +5 -1
- package/plugins/index.js +10 -0
- package/plugins/index.mjs +5 -1
- package/plugins/loading/content.d.ts +5 -3
- package/plugins/loading/content.js +3 -2
- package/plugins/loading/content.mjs +8 -5
- package/plugins/loading/loading.d.ts +5 -2
- package/plugins/loading/loading.mjs +5 -2
- package/plugins/manualColumnMove/manualColumnMove.d.ts +10 -0
- package/plugins/manualColumnMove/manualColumnMove.js +122 -20
- package/plugins/manualColumnMove/manualColumnMove.mjs +123 -21
- package/plugins/manualColumnResize/manualColumnResize.d.ts +20 -7
- package/plugins/manualColumnResize/manualColumnResize.js +33 -13
- package/plugins/manualColumnResize/manualColumnResize.mjs +34 -14
- package/plugins/manualRowResize/manualRowResize.d.ts +21 -8
- package/plugins/manualRowResize/manualRowResize.js +34 -14
- package/plugins/manualRowResize/manualRowResize.mjs +35 -15
- package/plugins/mergeCells/cellCoords.d.ts +8 -0
- package/plugins/mergeCells/cellCoords.js +11 -0
- package/plugins/mergeCells/cellCoords.mjs +11 -0
- package/plugins/mergeCells/cellsCollection.d.ts +46 -2
- package/plugins/mergeCells/cellsCollection.js +189 -68
- package/plugins/mergeCells/cellsCollection.mjs +189 -68
- package/plugins/mergeCells/focusOrder.d.ts +26 -20
- package/plugins/mergeCells/focusOrder.js +358 -177
- package/plugins/mergeCells/focusOrder.mjs +363 -172
- package/plugins/mergeCells/mergeCells.d.ts +13 -8
- package/plugins/mergeCells/mergeCells.js +322 -64
- package/plugins/mergeCells/mergeCells.mjs +322 -64
- package/plugins/moveCells/helpers.d.mts +1 -0
- package/plugins/moveCells/helpers.d.ts +21 -0
- package/plugins/moveCells/helpers.js +20 -0
- package/plugins/moveCells/helpers.mjs +15 -0
- package/plugins/moveCells/index.d.mts +1 -0
- package/plugins/moveCells/index.d.ts +1 -0
- package/plugins/moveCells/index.js +22 -0
- package/plugins/moveCells/index.mjs +1 -0
- package/plugins/moveCells/moveCells.d.mts +1 -0
- package/plugins/moveCells/moveCells.d.ts +80 -0
- package/plugins/moveCells/moveCells.js +602 -0
- package/plugins/moveCells/moveCells.mjs +587 -0
- package/plugins/multiColumnSorting/multiColumnSorting.d.ts +8 -8
- package/plugins/multiColumnSorting/multiColumnSorting.js +11 -16
- package/plugins/multiColumnSorting/multiColumnSorting.mjs +11 -16
- package/plugins/multiColumnSorting/rootComparator.js +26 -19
- package/plugins/multiColumnSorting/rootComparator.mjs +26 -19
- package/plugins/multipleSelectionHandles/multipleSelectionHandles.d.ts +19 -4
- package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +273 -58
- package/plugins/multipleSelectionHandles/multipleSelectionHandles.mjs +273 -58
- package/plugins/nestedHeaders/nestedHeaders.d.ts +10 -1
- package/plugins/nestedHeaders/nestedHeaders.js +222 -23
- package/plugins/nestedHeaders/nestedHeaders.mjs +222 -23
- package/plugins/nestedHeaders/stateManager/columnArrangement.d.mts +1 -0
- package/plugins/nestedHeaders/stateManager/columnArrangement.d.ts +37 -0
- package/plugins/nestedHeaders/stateManager/columnArrangement.js +35 -0
- package/plugins/nestedHeaders/stateManager/columnArrangement.mjs +30 -0
- package/plugins/nestedHeaders/stateManager/deriveSettings.d.mts +1 -0
- package/plugins/nestedHeaders/stateManager/deriveSettings.d.ts +57 -0
- package/plugins/nestedHeaders/stateManager/deriveSettings.js +115 -0
- package/plugins/nestedHeaders/stateManager/deriveSettings.mjs +135 -0
- package/plugins/nestedHeaders/stateManager/headersTree.d.ts +14 -1
- package/plugins/nestedHeaders/stateManager/index.d.ts +76 -13
- package/plugins/nestedHeaders/stateManager/index.js +381 -38
- package/plugins/nestedHeaders/stateManager/index.mjs +382 -39
- package/plugins/nestedHeaders/stateManager/matrixGenerator.js +3 -2
- package/plugins/nestedHeaders/stateManager/matrixGenerator.mjs +3 -2
- package/plugins/nestedHeaders/stateManager/settingsNormalizer.js +5 -1
- package/plugins/nestedHeaders/stateManager/settingsNormalizer.mjs +5 -1
- package/plugins/nestedHeaders/stateManager/sourceSettings.d.ts +23 -6
- package/plugins/nestedHeaders/stateManager/sourceSettings.js +20 -4
- package/plugins/nestedHeaders/stateManager/sourceSettings.mjs +20 -4
- package/plugins/nestedHeaders/stateManager/utils.d.ts +17 -1
- package/plugins/nestedHeaders/stateManager/utils.js +6 -1
- package/plugins/nestedHeaders/stateManager/utils.mjs +6 -1
- package/plugins/nestedHeaders/utils/ghostTable.js +21 -8
- package/plugins/nestedHeaders/utils/ghostTable.mjs +21 -8
- package/plugins/nestedRows/data/dataManager.d.ts +4 -1
- package/plugins/nestedRows/data/dataManager.js +10 -4
- package/plugins/nestedRows/data/dataManager.mjs +10 -4
- package/plugins/nestedRows/nestedRows.d.ts +127 -1
- package/plugins/nestedRows/nestedRows.js +330 -8
- package/plugins/nestedRows/nestedRows.mjs +330 -8
- package/plugins/nestedRows/ui/collapsing.d.ts +58 -0
- package/plugins/nestedRows/ui/collapsing.js +236 -40
- package/plugins/nestedRows/ui/collapsing.mjs +236 -40
- package/plugins/notification/notification.d.ts +2 -1
- package/plugins/notification/notification.js +6 -3
- package/plugins/notification/notification.mjs +6 -3
- package/plugins/notification/ui.d.ts +8 -5
- package/plugins/notification/ui.js +18 -6
- package/plugins/notification/ui.mjs +18 -6
- package/plugins/pagination/pagination.js +2 -2
- package/plugins/pagination/pagination.mjs +2 -2
- package/plugins/search/search.js +23 -2
- package/plugins/search/search.mjs +23 -2
- package/plugins/selectionHandles/helpers.d.mts +1 -0
- package/plugins/selectionHandles/helpers.d.ts +17 -0
- package/plugins/selectionHandles/helpers.js +16 -0
- package/plugins/selectionHandles/helpers.mjs +11 -0
- package/plugins/selectionHandles/index.d.mts +1 -0
- package/plugins/selectionHandles/index.d.ts +1 -0
- package/plugins/selectionHandles/index.js +22 -0
- package/plugins/selectionHandles/index.mjs +1 -0
- package/plugins/selectionHandles/selectionHandles.d.mts +1 -0
- package/plugins/selectionHandles/selectionHandles.d.ts +52 -0
- package/plugins/selectionHandles/selectionHandles.js +342 -0
- package/plugins/selectionHandles/selectionHandles.mjs +323 -0
- package/plugins/trimRows/trimRows.d.ts +1 -1
- package/plugins/trimRows/trimRows.js +6 -2
- package/plugins/trimRows/trimRows.mjs +6 -2
- package/plugins/types.d.ts +4 -0
- package/plugins/undoRedo/actions/cellAlignment.js +1 -1
- package/plugins/undoRedo/actions/cellAlignment.mjs +1 -1
- package/plugins/undoRedo/actions/createColumn.js +4 -1
- package/plugins/undoRedo/actions/createColumn.mjs +4 -1
- package/plugins/undoRedo/actions/createRow.js +4 -1
- package/plugins/undoRedo/actions/createRow.mjs +4 -1
- package/plugins/undoRedo/actions/fixedCounts.d.mts +1 -0
- package/plugins/undoRedo/actions/fixedCounts.d.ts +36 -0
- package/plugins/undoRedo/actions/fixedCounts.js +63 -0
- package/plugins/undoRedo/actions/fixedCounts.mjs +62 -0
- package/plugins/undoRedo/actions/index.js +2 -0
- package/plugins/undoRedo/actions/index.mjs +2 -0
- package/plugins/undoRedo/actions/moveCells.d.mts +1 -0
- package/plugins/undoRedo/actions/moveCells.d.ts +104 -0
- package/plugins/undoRedo/actions/moveCells.js +225 -0
- package/plugins/undoRedo/actions/moveCells.mjs +227 -0
- package/plugins/undoRedo/actions/removeColumn.d.ts +18 -2
- package/plugins/undoRedo/actions/removeColumn.js +11 -4
- package/plugins/undoRedo/actions/removeColumn.mjs +12 -5
- package/plugins/undoRedo/actions/removeRow.js +2 -57
- package/plugins/undoRedo/actions/removeRow.mjs +2 -57
- package/plugins/undoRedo/undoRedo.d.ts +26 -0
- package/plugins/undoRedo/undoRedo.js +36 -2
- package/plugins/undoRedo/undoRedo.mjs +36 -2
- package/plugins/undoRedo/utils.d.ts +29 -0
- package/plugins/undoRedo/utils.js +55 -3
- package/plugins/undoRedo/utils.mjs +59 -0
- package/renderSizeProbe.d.mts +1 -0
- package/renderSizeProbe.d.ts +60 -0
- package/renderSizeProbe.js +163 -0
- package/renderSizeProbe.mjs +176 -0
- package/renderers/checkboxRenderer/checkboxRenderer.js +9 -4
- package/renderers/checkboxRenderer/checkboxRenderer.mjs +9 -4
- package/renderers/index.d.ts +3 -2
- package/renderers/index.js +8 -0
- package/renderers/index.mjs +3 -1
- package/renderers/intlDatetimeRenderer/index.d.mts +1 -0
- package/renderers/intlDatetimeRenderer/index.d.ts +1 -0
- package/renderers/intlDatetimeRenderer/index.js +22 -0
- package/renderers/intlDatetimeRenderer/index.mjs +1 -0
- package/renderers/intlDatetimeRenderer/intlDatetimeRenderer.d.mts +1 -0
- package/renderers/intlDatetimeRenderer/intlDatetimeRenderer.d.ts +26 -0
- package/renderers/intlDatetimeRenderer/intlDatetimeRenderer.js +82 -0
- package/renderers/intlDatetimeRenderer/intlDatetimeRenderer.mjs +67 -0
- package/renderers/multiSelectRenderer/multiSelectRenderer.js +2 -3
- package/renderers/multiSelectRenderer/multiSelectRenderer.mjs +2 -3
- package/renderers/multiSelectRenderer/utils/utils.d.ts +1 -1
- package/renderers/multiSelectRenderer/utils/utils.js +11 -8
- package/renderers/multiSelectRenderer/utils/utils.mjs +11 -8
- package/renderers/passwordRenderer/passwordRenderer.js +6 -1
- package/renderers/passwordRenderer/passwordRenderer.mjs +6 -1
- package/renderers/renderCell.d.mts +1 -0
- package/renderers/renderCell.d.ts +37 -0
- package/renderers/renderCell.js +43 -0
- package/renderers/renderCell.mjs +48 -0
- package/selection/highlight/types/areaLayered.d.ts +3 -1
- package/selection/highlight/types/areaLayered.js +4 -2
- package/selection/highlight/types/areaLayered.mjs +6 -2
- package/selection/highlight/types/focus.d.ts +3 -1
- package/selection/highlight/types/focus.js +3 -2
- package/selection/highlight/types/focus.mjs +5 -2
- package/selection/mouseEventHandler.js +29 -26
- package/selection/mouseEventHandler.mjs +29 -26
- package/selection/moveCells.d.mts +1 -0
- package/selection/moveCells.d.ts +15 -0
- package/selection/moveCells.js +13 -0
- package/selection/moveCells.mjs +9 -0
- package/selection/selection.d.ts +56 -2
- package/selection/selection.js +149 -5
- package/selection/selection.mjs +149 -5
- package/selection/types.d.ts +3 -0
- package/settings.d.ts +24 -3
- package/shortcuts/context.d.ts +4 -0
- package/shortcuts/context.js +16 -8
- package/shortcuts/context.mjs +20 -8
- package/shortcuts/contexts/commands/populateSelectedCellsData.js +1 -1
- package/shortcuts/contexts/commands/populateSelectedCellsData.mjs +1 -1
- package/styles/handsontable.css +504 -158
- package/styles/handsontable.min.css +4 -4
- package/styles/handsontableStyles.d.mts +2 -0
- package/styles/handsontableStyles.d.ts +2 -0
- package/styles/handsontableStyles.js +1 -1
- package/styles/handsontableStyles.mjs +1 -1
- package/styles/ht-icons-horizon.css +1 -10
- package/styles/ht-icons-horizon.min.css +4 -4
- package/styles/ht-icons-main.css +1 -10
- package/styles/ht-icons-main.min.css +4 -4
- package/styles/ht-theme-classic-no-icons.css +6 -0
- package/styles/ht-theme-classic-no-icons.min.css +4 -4
- package/styles/ht-theme-classic.css +7 -10
- package/styles/ht-theme-classic.min.css +4 -4
- package/styles/ht-theme-horizon-no-icons.css +6 -0
- package/styles/ht-theme-horizon-no-icons.min.css +4 -4
- package/styles/ht-theme-horizon.css +7 -10
- package/styles/ht-theme-horizon.min.css +4 -4
- package/styles/ht-theme-main-no-icons.css +6 -0
- package/styles/ht-theme-main-no-icons.min.css +4 -4
- package/styles/ht-theme-main.css +7 -10
- package/styles/ht-theme-main.min.css +4 -4
- package/tableView.d.ts +17 -4
- package/tableView.js +208 -42
- package/tableView.mjs +209 -43
- package/themes/engine/index.d.ts +2 -1
- package/themes/engine/index.js +3 -0
- package/themes/engine/index.mjs +1 -1
- package/themes/engine/manager.d.ts +75 -3
- package/themes/engine/manager.js +242 -6
- package/themes/engine/manager.mjs +249 -6
- package/themes/engine/utils/cssVariables.d.ts +18 -1
- package/themes/engine/utils/cssVariables.js +27 -11
- package/themes/engine/utils/cssVariables.mjs +28 -11
- package/themes/engine/utils/validation.js +7 -0
- package/themes/engine/utils/validation.mjs +7 -0
- package/themes/static/variables/helpers/iconsMap.js +1 -6
- package/themes/static/variables/helpers/iconsMap.mjs +1 -6
- package/themes/static/variables/tokens/classic.js +6 -0
- package/themes/static/variables/tokens/classic.mjs +6 -0
- package/themes/static/variables/tokens/horizon.js +6 -0
- package/themes/static/variables/tokens/horizon.mjs +6 -0
- package/themes/static/variables/tokens/main.js +6 -0
- package/themes/static/variables/tokens/main.mjs +6 -0
- package/themes/types.d.ts +1 -1
- package/translations/indexMapper.d.ts +14 -9
- package/translations/indexMapper.js +104 -43
- package/translations/indexMapper.mjs +104 -43
- package/translations/mapCollections/aggregatedCollection.js +20 -35
- package/translations/mapCollections/aggregatedCollection.mjs +20 -35
- package/translations/mapCollections/mapCollection.d.ts +10 -4
- package/translations/mapCollections/mapCollection.js +2 -2
- package/translations/mapCollections/mapCollection.mjs +2 -2
- package/translations/maps/booleanMap.d.mts +1 -0
- package/translations/maps/booleanMap.d.ts +86 -0
- package/translations/maps/booleanMap.js +300 -0
- package/translations/maps/booleanMap.mjs +308 -0
- package/translations/maps/hidingMap.d.ts +5 -2
- package/translations/maps/hidingMap.js +8 -3
- package/translations/maps/hidingMap.mjs +8 -3
- package/translations/maps/index.d.ts +5 -2
- package/translations/maps/index.js +7 -3
- package/translations/maps/index.mjs +10 -2
- package/translations/maps/indexMap.d.ts +26 -2
- package/translations/maps/indexMap.js +78 -6
- package/translations/maps/indexMap.mjs +78 -6
- package/translations/maps/indexesSequence.d.ts +53 -2
- package/translations/maps/indexesSequence.js +225 -3
- package/translations/maps/indexesSequence.mjs +233 -3
- package/translations/maps/trimmingMap.d.ts +5 -2
- package/translations/maps/trimmingMap.js +8 -3
- package/translations/maps/trimmingMap.mjs +8 -3
- package/translations/maps/utils/actionsOnIndexes.js +20 -1
- package/translations/maps/utils/actionsOnIndexes.mjs +20 -1
- package/translations/maps/utils/indexesSequence.js +12 -3
- package/translations/maps/utils/indexesSequence.mjs +12 -3
- package/translations/maps/utils/physicallyIndexed.js +12 -1
- package/translations/maps/utils/physicallyIndexed.mjs +12 -1
- package/utils/entitlementLicenseKey/classify.d.mts +1 -0
- package/utils/entitlementLicenseKey/classify.d.ts +34 -0
- package/utils/entitlementLicenseKey/classify.js +97 -0
- package/utils/entitlementLicenseKey/classify.mjs +96 -0
- package/utils/entitlementLicenseKey/constants.d.mts +1 -0
- package/utils/entitlementLicenseKey/constants.d.ts +69 -0
- package/utils/entitlementLicenseKey/constants.js +54 -0
- package/utils/entitlementLicenseKey/constants.mjs +66 -0
- package/utils/entitlementLicenseKey/detectFormat.d.mts +1 -0
- package/utils/entitlementLicenseKey/detectFormat.d.ts +23 -0
- package/utils/entitlementLicenseKey/detectFormat.js +60 -0
- package/utils/entitlementLicenseKey/detectFormat.mjs +60 -0
- package/utils/entitlementLicenseKey/encoding.d.mts +1 -0
- package/utils/entitlementLicenseKey/encoding.d.ts +58 -0
- package/utils/entitlementLicenseKey/encoding.js +161 -0
- package/utils/entitlementLicenseKey/encoding.mjs +172 -0
- package/utils/entitlementLicenseKey/extractKeyData.d.mts +1 -0
- package/utils/entitlementLicenseKey/extractKeyData.d.ts +47 -0
- package/utils/entitlementLicenseKey/extractKeyData.js +213 -0
- package/utils/entitlementLicenseKey/extractKeyData.mjs +232 -0
- package/utils/entitlementLicenseKey/grants.d.mts +1 -0
- package/utils/entitlementLicenseKey/grants.d.ts +54 -0
- package/utils/entitlementLicenseKey/grants.js +68 -0
- package/utils/entitlementLicenseKey/grants.mjs +84 -0
- package/utils/entitlementLicenseKey/index.d.mts +1 -0
- package/utils/entitlementLicenseKey/index.d.ts +8 -0
- package/utils/entitlementLicenseKey/index.js +53 -0
- package/utils/entitlementLicenseKey/index.mjs +6 -0
- package/utils/entitlementLicenseKey/sha512.d.mts +1 -0
- package/utils/entitlementLicenseKey/sha512.d.ts +11 -0
- package/utils/entitlementLicenseKey/sha512.js +328 -0
- package/utils/entitlementLicenseKey/sha512.mjs +327 -0
- package/utils/entitlementLicenseKey/types.d.mts +1 -0
- package/utils/entitlementLicenseKey/types.d.ts +84 -0
- package/utils/entitlementLicenseKey/types.js +8 -0
- package/utils/entitlementLicenseKey/types.mjs +10 -0
- package/utils/ghostTable.d.ts +1 -0
- package/utils/ghostTable.js +60 -11
- package/utils/ghostTable.mjs +60 -11
- package/utils/licenseBranding/badge.d.mts +1 -0
- package/utils/licenseBranding/badge.d.ts +21 -0
- package/utils/licenseBranding/badge.js +237 -0
- package/utils/licenseBranding/badge.mjs +244 -0
- package/utils/licenseBranding/content.d.mts +1 -0
- package/utils/licenseBranding/content.d.ts +54 -0
- package/utils/licenseBranding/content.js +93 -0
- package/utils/licenseBranding/content.mjs +79 -0
- package/utils/licenseBranding/index.d.mts +1 -0
- package/utils/licenseBranding/index.d.ts +14 -0
- package/utils/licenseBranding/index.js +55 -0
- package/utils/licenseBranding/index.mjs +56 -0
- package/utils/licenseBranding/lockScreen.d.mts +1 -0
- package/utils/licenseBranding/lockScreen.d.ts +23 -0
- package/utils/licenseBranding/lockScreen.js +150 -0
- package/utils/licenseBranding/lockScreen.mjs +159 -0
- package/utils/licenseNotification.d.ts +19 -0
- package/utils/licenseNotification.js +56 -29
- package/utils/licenseNotification.mjs +61 -29
- package/utils/movableMeta.d.mts +1 -0
- package/utils/movableMeta.d.ts +40 -0
- package/utils/movableMeta.js +47 -0
- package/utils/movableMeta.mjs +46 -0
- package/utils/parseTable.js +16 -7
- package/utils/parseTable.mjs +16 -7
- package/utils/samplesGenerator.d.ts +41 -14
- package/utils/samplesGenerator.js +114 -42
- package/utils/samplesGenerator.mjs +114 -42
- package/utils/sanitizer.d.mts +1 -0
- package/utils/sanitizer.d.ts +47 -0
- package/utils/sanitizer.js +43 -0
- package/utils/sanitizer.mjs +55 -0
- package/utils/stylesHandler.d.ts +13 -0
- package/utils/stylesHandler.js +55 -2
- package/utils/stylesHandler.mjs +55 -2
- package/validators/autocompleteValidator/autocompleteValidator.js +3 -0
- package/validators/autocompleteValidator/autocompleteValidator.mjs +3 -0
- package/validators/index.d.ts +3 -2
- package/validators/index.js +8 -0
- package/validators/index.mjs +3 -1
- package/validators/intlDatetimeValidator/index.d.mts +1 -0
- package/validators/intlDatetimeValidator/index.d.ts +1 -0
- package/validators/intlDatetimeValidator/index.js +25 -0
- package/validators/intlDatetimeValidator/index.mjs +1 -0
- package/validators/intlDatetimeValidator/intlDatetimeValidator.d.mts +1 -0
- package/validators/intlDatetimeValidator/intlDatetimeValidator.d.ts +28 -0
- package/validators/intlDatetimeValidator/intlDatetimeValidator.js +49 -0
- package/validators/intlDatetimeValidator/intlDatetimeValidator.mjs +37 -0
- package/3rdparty/walkontable/src/overlay/bottom.d.mts +0 -1
- package/3rdparty/walkontable/src/overlay/bottomInlineStartCorner.d.mts +0 -1
- package/3rdparty/walkontable/src/overlay/inlineStart.d.mts +0 -1
- package/3rdparty/walkontable/src/overlay/top.d.mts +0 -1
- package/3rdparty/walkontable/src/overlay/topInlineStartCorner.d.mts +0 -1
- package/3rdparty/walkontable/src/overlays.d.ts +0 -329
- package/3rdparty/walkontable/src/overlays.js +0 -870
- package/3rdparty/walkontable/src/overlays.mjs +0 -860
- package/3rdparty/walkontable/src/renderer/table.d.mts +0 -1
- package/3rdparty/walkontable/src/renderer/table.js +0 -229
- package/3rdparty/walkontable/src/settings.d.mts +0 -2
- package/3rdparty/walkontable/src/settings.js +0 -196
- package/3rdparty/walkontable/src/settings.mjs +0 -263
- package/3rdparty/walkontable/src/table/bottom.d.mts +0 -2
- package/3rdparty/walkontable/src/table/bottom.d.ts +0 -19
- package/3rdparty/walkontable/src/table/bottom.js +0 -38
- package/3rdparty/walkontable/src/table/bottom.mjs +0 -23
- package/3rdparty/walkontable/src/table/bottomInlineStartCorner.d.mts +0 -2
- package/3rdparty/walkontable/src/table/bottomInlineStartCorner.d.ts +0 -20
- package/3rdparty/walkontable/src/table/bottomInlineStartCorner.mjs +0 -24
- package/3rdparty/walkontable/src/table/inlineStart.d.mts +0 -2
- package/3rdparty/walkontable/src/table/inlineStart.d.ts +0 -16
- package/3rdparty/walkontable/src/table/inlineStart.js +0 -35
- package/3rdparty/walkontable/src/table/inlineStart.mjs +0 -20
- package/3rdparty/walkontable/src/table/master.d.mts +0 -2
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.d.mts +0 -2
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.d.ts +0 -75
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +0 -122
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +0 -112
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.d.mts +0 -2
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.d.ts +0 -75
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +0 -122
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +0 -112
- package/3rdparty/walkontable/src/table/top.d.mts +0 -2
- package/3rdparty/walkontable/src/table/top.d.ts +0 -19
- package/3rdparty/walkontable/src/table/top.js +0 -38
- package/3rdparty/walkontable/src/table/top.mjs +0 -23
- package/3rdparty/walkontable/src/table/topInlineStartCorner.d.mts +0 -2
- package/3rdparty/walkontable/src/table/topInlineStartCorner.d.ts +0 -20
- package/3rdparty/walkontable/src/table/topInlineStartCorner.mjs +0 -24
- package/3rdparty/walkontable/src/table.d.mts +0 -2
- package/3rdparty/walkontable/src/table.d.ts +0 -741
- package/3rdparty/walkontable/src/table.js +0 -1120
- package/3rdparty/walkontable/src/table.mjs +0 -1105
- package/3rdparty/walkontable/src/utils/cellCoords.d.mts +0 -1
- package/3rdparty/walkontable/src/utils/cellCoords.js +0 -54
- package/3rdparty/walkontable/src/utils/cellCoords.mjs +0 -54
- package/3rdparty/walkontable/src/utils/column.d.mts +0 -2
- package/3rdparty/walkontable/src/utils/column.js +0 -75
- package/3rdparty/walkontable/src/utils/column.mjs +0 -70
- package/3rdparty/walkontable/src/utils/positionCache.d.mts +0 -1
- package/3rdparty/walkontable/src/utils/positionCache.d.ts +0 -91
- package/3rdparty/walkontable/src/utils/positionCache.js +0 -193
- package/3rdparty/walkontable/src/utils/positionCache.mjs +0 -194
- package/3rdparty/walkontable/src/utils/row.d.mts +0 -2
- package/3rdparty/walkontable/src/utils/row.js +0 -46
- package/3rdparty/walkontable/src/utils/row.mjs +0 -41
- package/3rdparty/walkontable/src/viewport.d.ts +0 -254
- package/3rdparty/walkontable/src/viewport.js +0 -533
- package/3rdparty/walkontable/src/viewport.mjs +0 -523
- /package/3rdparty/walkontable/src/{renderer → axisSizing/positionCache}/index.d.mts +0 -0
- /package/3rdparty/walkontable/src/{overlays.d.mts → overlay/overlays.d.mts} +0 -0
- /package/3rdparty/walkontable/src/overlay/{_base.d.mts → regions/_base.d.mts} +0 -0
- /package/3rdparty/walkontable/src/{stickyScrollStrategy.d.mts → overlay/strategies/stickyScrollStrategy.d.mts} +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/_base.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/_base.js +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/_base.mjs +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/cells.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/cells.d.ts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/colGroup.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/colGroup.d.ts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/colGroup.js +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/colGroup.mjs +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/columnHeaderRows.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/columnHeaderRows.d.ts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/columnHeaderRows.js +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/columnHeaderRows.mjs +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/columnHeaders.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/rowHeaders.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/rowHeaders.d.ts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/rowHeaders.js +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/rowHeaders.mjs +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/rows.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/rows.d.ts +0 -0
- /package/3rdparty/walkontable/src/{scroll.d.mts → scroll/scroll.d.mts} +0 -0
- /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyColumnsStart.d.mts +0 -0
- /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsBottom.d.mts +0 -0
- /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsBottom.js +0 -0
- /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsBottom.mjs +0 -0
- /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsTop.d.mts +0 -0
- /package/3rdparty/walkontable/src/{viewport.d.mts → viewport/viewport.d.mts} +0 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { html } from '../../helpers/templateLiteralTag.mjs';
|
|
2
|
+
// The lock reuses the confirm Dialog's CSS by wearing its class names. The stylesheet ships in full
|
|
3
|
+
// regardless of which JS plugins are bundled, so borrowing the classes inherits the dialog's whole
|
|
4
|
+
// look and sizing for free - while the JS below is a minimal, self-contained copy that never
|
|
5
|
+
// imports the (optional) Dialog plugin. Keep these names in sync with `plugins/dialog/constants.ts`
|
|
6
|
+
// and the confirm template.
|
|
7
|
+
const DIALOG_CLASS = 'ht-dialog';
|
|
8
|
+
const LOCK_CLASS = 'ht-license-lock';
|
|
9
|
+
const SCOPE_ID = 'licenseLock';
|
|
10
|
+
const SHORTCUTS_CONTEXT_NAME = `plugin:${SCOPE_ID}`;
|
|
11
|
+
const SHORTCUTS_GROUP = SCOPE_ID;
|
|
12
|
+
/**
|
|
13
|
+
* Mounts the license lock screen: a blocking, non-dismissable overlay covering the grid.
|
|
14
|
+
* It looks and sizes itself exactly like a confirm Dialog by wearing the dialog's own CSS class
|
|
15
|
+
* names (the stylesheet is always shipped in full, so the styling is inherited without duplicating
|
|
16
|
+
* it), but it is a self-contained Core-owned element - it never touches the Dialog PLUGIN, which is
|
|
17
|
+
* optional (it may be absent from a bundle) and, being a single shared surface an app uses for its
|
|
18
|
+
* own dialogs, could not tell its own lifecycle apart from the lock's. This lock owns its element,
|
|
19
|
+
* so showing it is unambiguous.
|
|
20
|
+
*
|
|
21
|
+
* Only the copy and behavior differ from a confirm dialog: it cannot be dismissed (no Close button,
|
|
22
|
+
* no Escape shortcut - the hard stop is final), and it sits above app dialogs. Its width is pinned
|
|
23
|
+
* to the table's workspace width on every render (the `.ht-dialog` box is otherwise `width: 100%`,
|
|
24
|
+
* which would span the whole root wrapper, not the grid - a minimal copy of the plugin's own
|
|
25
|
+
* sizing); its height is the grid box. It integrates with the focus manager as a modal scope and
|
|
26
|
+
* routes its Tab focus trap through the shortcut manager, exactly like the Dialog plugin.
|
|
27
|
+
*
|
|
28
|
+
* @param {HotInstance} hotInstance The root Handsontable instance.
|
|
29
|
+
* @param {LockContent} content The lock copy.
|
|
30
|
+
* @returns {void}
|
|
31
|
+
*/ export function mountLicenseLock(hotInstance, content) {
|
|
32
|
+
const host = hotInstance.rootOverlaysElement;
|
|
33
|
+
if (!host) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const focusScopeManager = hotInstance.getFocusScopeManager();
|
|
37
|
+
const shortcutManager = hotInstance.getShortcutManager();
|
|
38
|
+
const isRtl = hotInstance.isRtl();
|
|
39
|
+
const titleId = `${hotInstance.guid}-license-lock-title`;
|
|
40
|
+
const descriptionId = `${hotInstance.guid}-license-lock-description`;
|
|
41
|
+
// The exact class set the plugin's confirm dialog carries when shown, plus `ht-license-lock`.
|
|
42
|
+
const lockClassName = `${DIALOG_CLASS} ${DIALOG_CLASS}--confirm handsontable ${LOCK_CLASS} ` + `${DIALOG_CLASS}--background-solid ${DIALOG_CLASS}--show`;
|
|
43
|
+
// The confirm-dialog DOM, rebuilt with the dialog's class names (`ht-dialog--confirm`,
|
|
44
|
+
// `__content-wrapper`, `__content`, `__title`, `__description`, `__buttons`, `ht-button`) plus the
|
|
45
|
+
// `handsontable` class the dialog carries (the `.ht-button` base rules are scoped under it). The
|
|
46
|
+
// copy is assigned through `textContent` below, never interpolated into the markup.
|
|
47
|
+
const { refs } = html`
|
|
48
|
+
<div data-ref="lock" class="${lockClassName}"
|
|
49
|
+
role="alertdialog" aria-modal="true"
|
|
50
|
+
aria-labelledby="${titleId}" aria-describedby="${descriptionId}"
|
|
51
|
+
tabindex="-1" dir="${isRtl ? 'rtl' : 'ltr'}" style="display: block;">
|
|
52
|
+
<div class="${DIALOG_CLASS}__content-wrapper">
|
|
53
|
+
<div data-ref="inner" tabindex="-1" class="${DIALOG_CLASS}__content-wrapper-inner">
|
|
54
|
+
<div class="${DIALOG_CLASS}__content">
|
|
55
|
+
<h2 data-ref="title" id="${titleId}" class="${DIALOG_CLASS}__title"></h2>
|
|
56
|
+
<p data-ref="description" id="${descriptionId}" class="${DIALOG_CLASS}__description"></p>
|
|
57
|
+
</div>
|
|
58
|
+
<div class="${DIALOG_CLASS}__buttons">
|
|
59
|
+
<a data-ref="contactButton" class="ht-button ht-button--secondary" rel="noopener"></a>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
</div>
|
|
63
|
+
</div>
|
|
64
|
+
`;
|
|
65
|
+
const lock = refs.lock;
|
|
66
|
+
refs.title.textContent = content.title;
|
|
67
|
+
refs.description.textContent = content.description;
|
|
68
|
+
// A real ANCHOR wearing the button classes, not a button with a click handler. The action is a
|
|
69
|
+
// `mailto:` address, and neither scripted route is safe for one: `window.open(..., '_blank')`
|
|
70
|
+
// leaves an empty tab behind on Firefox and Safari once the mail client takes over, and assigning
|
|
71
|
+
// `location.href` is treated as a real navigation by several browsers when no mail handler is
|
|
72
|
+
// registered - which would unload the app, or the iframe, from under a lock that cannot be
|
|
73
|
+
// dismissed. A same-window anchor click is the one path browsers special-case, and it is what the
|
|
74
|
+
// bottom bar and the badge popover already use for the same addresses.
|
|
75
|
+
refs.contactButton.textContent = content.action.text;
|
|
76
|
+
// `setAttribute`, because the template's refs are plain `HTMLElement`s - no cast needed for one
|
|
77
|
+
// attribute.
|
|
78
|
+
refs.contactButton.setAttribute('href', content.action.href);
|
|
79
|
+
// Built as nodes, never interpolated: the copy is authored here, but keeping it out of `innerHTML`
|
|
80
|
+
// means no license sentence can ever become markup. The anchor joins the Tab trap for free -
|
|
81
|
+
// `getFocusableControls` below collects `a[href]` too.
|
|
82
|
+
if (content.docsLink) {
|
|
83
|
+
const link = hotInstance.rootDocument.createElement('a');
|
|
84
|
+
link.href = content.docsLink.href;
|
|
85
|
+
link.target = '_blank';
|
|
86
|
+
link.rel = 'noopener';
|
|
87
|
+
link.textContent = content.docsLink.text;
|
|
88
|
+
refs.description.appendChild(link);
|
|
89
|
+
refs.description.appendChild(hotInstance.rootDocument.createTextNode(content.docsLink.trailingText));
|
|
90
|
+
}
|
|
91
|
+
// Collects the action anchor and the optional documentation link, in document order.
|
|
92
|
+
const getFocusableControls = ()=>Array.from(lock.querySelectorAll('a[href], button'));
|
|
93
|
+
// Match the dialog's sizing: the `.ht-dialog` box is `width: 100%` of the root wrapper, so it is
|
|
94
|
+
// pinned to the table's workspace width on every render (a minimal copy of the plugin's
|
|
95
|
+
// `#onAfterViewRender`); the height is the grid box via the CSS `height: 100%`.
|
|
96
|
+
const syncWidth = ()=>{
|
|
97
|
+
const { view } = hotInstance;
|
|
98
|
+
const width = view.isHorizontallyScrollableByWindow() ? view.getTotalTableWidth() : view.getWorkspaceWidth();
|
|
99
|
+
lock.style.width = `${width}px`;
|
|
100
|
+
};
|
|
101
|
+
hotInstance.addHook('afterViewRender', syncWidth);
|
|
102
|
+
const shortcutsContext = shortcutManager.getContext(SHORTCUTS_CONTEXT_NAME) ?? shortcutManager.addContext(SHORTCUTS_CONTEXT_NAME);
|
|
103
|
+
// The modal focus trap: Tab cycles through the lock's own controls and never leaves. The focus
|
|
104
|
+
// scope switches the manager to this context while focus is inside the lock, so these shortcuts
|
|
105
|
+
// never fire for the grid and the grid's shortcuts never fire under the lock.
|
|
106
|
+
shortcutsContext.addShortcut({
|
|
107
|
+
keys: [
|
|
108
|
+
[
|
|
109
|
+
'Tab'
|
|
110
|
+
],
|
|
111
|
+
[
|
|
112
|
+
'Shift',
|
|
113
|
+
'Tab'
|
|
114
|
+
]
|
|
115
|
+
],
|
|
116
|
+
callback: (event)=>{
|
|
117
|
+
const controls = getFocusableControls();
|
|
118
|
+
const index = controls.indexOf(hotInstance.rootDocument.activeElement);
|
|
119
|
+
const delta = event.shiftKey ? -1 : 1;
|
|
120
|
+
controls[(index + delta + controls.length) % controls.length]?.focus();
|
|
121
|
+
},
|
|
122
|
+
group: SHORTCUTS_GROUP
|
|
123
|
+
});
|
|
124
|
+
focusScopeManager.registerScope(SCOPE_ID, lock, {
|
|
125
|
+
shortcutsContextName: SHORTCUTS_CONTEXT_NAME,
|
|
126
|
+
type: 'modal',
|
|
127
|
+
onActivate: (focusSource)=>{
|
|
128
|
+
const controls = getFocusableControls();
|
|
129
|
+
if (focusSource === 'tab_from_below') {
|
|
130
|
+
controls[controls.length - 1]?.focus();
|
|
131
|
+
} else {
|
|
132
|
+
// The ACTION, not the first control in document order: where a lock carries a documentation
|
|
133
|
+
// link, that link sits inside the description and so comes first in the DOM. Tab still
|
|
134
|
+
// cycles in document order - only the landing point is the button.
|
|
135
|
+
refs.contactButton.focus();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
host.appendChild(lock);
|
|
140
|
+
// The lock mounts during `init()`, before the grid's first render, so its width sync waits for
|
|
141
|
+
// `afterInit`.
|
|
142
|
+
//
|
|
143
|
+
// It does NOT take focus here. A grid can initialize while the user is typing somewhere else on the
|
|
144
|
+
// page (a login form above it, another grid), and grabbing the keyboard at construction would pull
|
|
145
|
+
// focus out of that field, scroll the page down to the lock, and - because `listen()` un-listens
|
|
146
|
+
// every other instance - take the keyboard away from a licensed grid too. Two blocked grids would
|
|
147
|
+
// fight over it. The Dialog plugin guards its own focus grab the same way, on whether the grid was
|
|
148
|
+
// already listening.
|
|
149
|
+
//
|
|
150
|
+
// Nothing is lost by waiting: the focus scope manager activates a scope, and calls `listen()`
|
|
151
|
+
// itself, on the first focusin or click inside the scope element. So the Tab trap engages the moment
|
|
152
|
+
// the user actually reaches the lock - by clicking it (it covers the whole grid) or by tabbing in
|
|
153
|
+
// through a focus catcher - and not one moment earlier.
|
|
154
|
+
hotInstance.addHookOnce('afterInit', ()=>{
|
|
155
|
+
syncWidth();
|
|
156
|
+
// The grid underneath is unusable, so it must not look selected. This moves no focus.
|
|
157
|
+
hotInstance.deselectCell();
|
|
158
|
+
});
|
|
159
|
+
}
|
|
@@ -1,4 +1,23 @@
|
|
|
1
1
|
import type { HotInstance } from '../core/types';
|
|
2
|
+
export declare const LICENSE_INFO_CLASS = "hot-display-license-info";
|
|
3
|
+
/**
|
|
4
|
+
* Mounts a license bar as the last element of the bottom slot and registers a focus scope so
|
|
5
|
+
* keyboard navigation (Tab/Shift+Tab) includes its links. Its one caller is the built-in
|
|
6
|
+
* notification below (a missing, invalid or expired key, and a soft-stopped trial).
|
|
7
|
+
*
|
|
8
|
+
* The bar is intentionally a foreign node, NOT registered with the LayoutManager: registering it would
|
|
9
|
+
* expose it to the user's `layout` setting (reorder/remove) and to `DomSlot.clear()`, but a license
|
|
10
|
+
* notice must always sit last and must not be user-removable. It carries the slot-item class and
|
|
11
|
+
* refreshes the slot-filled state by hand, exactly as the layout module documents foreign nodes do.
|
|
12
|
+
*
|
|
13
|
+
* At most one license bar exists at a time - a key is in exactly one lifecycle state - so the single
|
|
14
|
+
* `licenseNotification` scope is never contended.
|
|
15
|
+
*
|
|
16
|
+
* @param {HotInstance} hotInstance The root Handsontable instance.
|
|
17
|
+
* @param {HTMLElement} barElement The license bar element to mount into the bottom slot.
|
|
18
|
+
* @returns {void}
|
|
19
|
+
*/
|
|
20
|
+
export declare function mountBottomLicenseBar(hotInstance: HotInstance, barElement: HTMLElement): void;
|
|
2
21
|
/**
|
|
3
22
|
* Initializes the built-in license notification: injects the product info message as the last
|
|
4
23
|
* element of the bottom slot when the license is invalid, expired, or missing, and registers
|
|
@@ -2,14 +2,26 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
get LICENSE_INFO_CLASS () {
|
|
13
|
+
return LICENSE_INFO_CLASS;
|
|
14
|
+
},
|
|
15
|
+
get initLicenseNotification () {
|
|
8
16
|
return initLicenseNotification;
|
|
17
|
+
},
|
|
18
|
+
get mountBottomLicenseBar () {
|
|
19
|
+
return mountBottomLicenseBar;
|
|
9
20
|
}
|
|
10
21
|
});
|
|
11
22
|
const _mixed = require("../helpers/mixed");
|
|
12
23
|
const _constants = require("../core/layout/constants");
|
|
24
|
+
const _layoutManager = require("../core/layout/layoutManager");
|
|
13
25
|
const SCOPE_ID = 'licenseNotification';
|
|
14
26
|
const SHORTCUTS_CONTEXT_NAME = `plugin:${SCOPE_ID}`;
|
|
15
27
|
const LICENSE_INFO_CLASS = 'hot-display-license-info';
|
|
@@ -33,46 +45,61 @@ const LICENSE_INFO_CLASS = 'hot-display-license-info';
|
|
|
33
45
|
}
|
|
34
46
|
return Array.from(notification.querySelectorAll('a[href]'));
|
|
35
47
|
}
|
|
36
|
-
function
|
|
48
|
+
function mountBottomLicenseBar(hotInstance, barElement) {
|
|
37
49
|
const container = hotInstance.rootSlotBottomElement;
|
|
38
50
|
if (!container) {
|
|
39
51
|
return;
|
|
40
52
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
// `_injectProductInfo` appended this element into the bottom slot element and returned it. The
|
|
53
|
-
// notification is intentionally NOT registered with the LayoutManager: it must always sit last in
|
|
54
|
-
// the bottom slot and must not be removable or reorderable through the `layout` setting or
|
|
55
|
-
// `getLayoutManager().unregister`. Re-append it so it is the last child, and carry the shared
|
|
56
|
-
// slot-item class so it gets the same separator styling as registered slot items. Because it is a
|
|
57
|
-
// foreign (unregistered) node, `DomSlot` always inserts registered items before it, keeping it last
|
|
58
|
-
// as other contributors (for example pagination) register or reorder.
|
|
59
|
-
notificationElement.classList.add(_constants.SLOT_ITEM_CLASS);
|
|
60
|
-
container.appendChild(notificationElement);
|
|
61
|
-
// The scope is intentionally never unregistered: the license notification is created once during
|
|
62
|
-
// init, cannot be disabled, and lives for the whole instance lifetime. It is cleaned up when
|
|
53
|
+
// Append as the last child and carry the shared slot-item class so it gets the same separator
|
|
54
|
+
// styling as registered slot items. Because it is a foreign (unregistered) node, `DomSlot` always
|
|
55
|
+
// inserts registered items before it, keeping it last as other contributors (for example pagination)
|
|
56
|
+
// register or reorder.
|
|
57
|
+
barElement.classList.add(_constants.SLOT_ITEM_CLASS);
|
|
58
|
+
container.appendChild(barElement);
|
|
59
|
+
// The bar bypasses `DomSlot`, so the wrapper's slot-filled state class (kept in sync by the
|
|
60
|
+
// `LayoutManager` for registered items) has to be refreshed here explicitly.
|
|
61
|
+
(0, _layoutManager.refreshSlotFilledState)(_constants.LAYOUT_SLOTS.BOTTOM, container);
|
|
62
|
+
// The scope is intentionally never unregistered: the license bar is created once during init,
|
|
63
|
+
// cannot be disabled, and lives for the whole instance lifetime. It is cleaned up when
|
|
63
64
|
// `getFocusScopeManager().destroy()` runs on `hot.destroy()`.
|
|
64
|
-
hotInstance.getFocusScopeManager().registerScope(SCOPE_ID,
|
|
65
|
+
hotInstance.getFocusScopeManager().registerScope(SCOPE_ID, barElement, {
|
|
65
66
|
shortcutsContextName: SHORTCUTS_CONTEXT_NAME,
|
|
66
67
|
runOnlyIf: ()=>getNotificationElement(hotInstance) !== null,
|
|
67
68
|
onActivate: (focusSource)=>{
|
|
68
69
|
const focusableElements = getFocusableElements(hotInstance);
|
|
69
70
|
if (focusableElements.length > 0) {
|
|
70
71
|
if (focusSource === 'tab_from_above') {
|
|
71
|
-
focusableElements
|
|
72
|
+
focusableElements[0]?.focus();
|
|
72
73
|
} else if (focusSource === 'tab_from_below') {
|
|
73
|
-
focusableElements.
|
|
74
|
+
focusableElements[focusableElements.length - 1]?.focus();
|
|
74
75
|
}
|
|
75
76
|
}
|
|
76
77
|
}
|
|
77
78
|
});
|
|
78
79
|
}
|
|
80
|
+
function initLicenseNotification(hotInstance) {
|
|
81
|
+
const container = hotInstance.rootSlotBottomElement;
|
|
82
|
+
if (!container) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const licenseKey = hotInstance.getSettings().licenseKey;
|
|
86
|
+
// DO NOT wrap this in a `typeof process` guard (or any `process` existence check). The bundler
|
|
87
|
+
// replaces the whole `"28/08/2026"` expression with a string literal at build time,
|
|
88
|
+
// so the bare read never touches a runtime `process` object and cannot crash. A guard is NOT
|
|
89
|
+
// inlined - it survives as `typeof process !== 'undefined' && "..."`, which is `false` in every
|
|
90
|
+
// browser bundle, blanks the release date, and silently kills expired-key detection. That was the
|
|
91
|
+
// 18.0.0 regression this read restores; re-adding the guard reintroduces it.
|
|
92
|
+
const releaseDate = "28/08/2026" || '';
|
|
93
|
+
const notificationElement = (0, _mixed._injectProductInfo)({
|
|
94
|
+
className: LICENSE_INFO_CLASS,
|
|
95
|
+
key: licenseKey,
|
|
96
|
+
element: container,
|
|
97
|
+
releaseDate
|
|
98
|
+
});
|
|
99
|
+
if (!notificationElement) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
// `_injectProductInfo` already appended this element into the bottom slot and returned it;
|
|
103
|
+
// `mountBottomLicenseBar` re-appends it as the last child and wires the focus scope.
|
|
104
|
+
mountBottomLicenseBar(hotInstance, notificationElement);
|
|
105
|
+
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { _injectProductInfo } from '../helpers/mixed.mjs';
|
|
2
|
-
import { SLOT_ITEM_CLASS } from '../core/layout/constants.mjs';
|
|
2
|
+
import { LAYOUT_SLOTS, SLOT_ITEM_CLASS } from '../core/layout/constants.mjs';
|
|
3
|
+
import { refreshSlotFilledState } from '../core/layout/layoutManager.mjs';
|
|
3
4
|
const SCOPE_ID = 'licenseNotification';
|
|
4
5
|
const SHORTCUTS_CONTEXT_NAME = `plugin:${SCOPE_ID}`;
|
|
5
|
-
const LICENSE_INFO_CLASS = 'hot-display-license-info';
|
|
6
|
+
export const LICENSE_INFO_CLASS = 'hot-display-license-info';
|
|
6
7
|
/**
|
|
7
8
|
* Returns the license notification DOM element when present.
|
|
8
9
|
*
|
|
@@ -23,6 +24,54 @@ const LICENSE_INFO_CLASS = 'hot-display-license-info';
|
|
|
23
24
|
}
|
|
24
25
|
return Array.from(notification.querySelectorAll('a[href]'));
|
|
25
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Mounts a license bar as the last element of the bottom slot and registers a focus scope so
|
|
29
|
+
* keyboard navigation (Tab/Shift+Tab) includes its links. Its one caller is the built-in
|
|
30
|
+
* notification below (a missing, invalid or expired key, and a soft-stopped trial).
|
|
31
|
+
*
|
|
32
|
+
* The bar is intentionally a foreign node, NOT registered with the LayoutManager: registering it would
|
|
33
|
+
* expose it to the user's `layout` setting (reorder/remove) and to `DomSlot.clear()`, but a license
|
|
34
|
+
* notice must always sit last and must not be user-removable. It carries the slot-item class and
|
|
35
|
+
* refreshes the slot-filled state by hand, exactly as the layout module documents foreign nodes do.
|
|
36
|
+
*
|
|
37
|
+
* At most one license bar exists at a time - a key is in exactly one lifecycle state - so the single
|
|
38
|
+
* `licenseNotification` scope is never contended.
|
|
39
|
+
*
|
|
40
|
+
* @param {HotInstance} hotInstance The root Handsontable instance.
|
|
41
|
+
* @param {HTMLElement} barElement The license bar element to mount into the bottom slot.
|
|
42
|
+
* @returns {void}
|
|
43
|
+
*/ export function mountBottomLicenseBar(hotInstance, barElement) {
|
|
44
|
+
const container = hotInstance.rootSlotBottomElement;
|
|
45
|
+
if (!container) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
// Append as the last child and carry the shared slot-item class so it gets the same separator
|
|
49
|
+
// styling as registered slot items. Because it is a foreign (unregistered) node, `DomSlot` always
|
|
50
|
+
// inserts registered items before it, keeping it last as other contributors (for example pagination)
|
|
51
|
+
// register or reorder.
|
|
52
|
+
barElement.classList.add(SLOT_ITEM_CLASS);
|
|
53
|
+
container.appendChild(barElement);
|
|
54
|
+
// The bar bypasses `DomSlot`, so the wrapper's slot-filled state class (kept in sync by the
|
|
55
|
+
// `LayoutManager` for registered items) has to be refreshed here explicitly.
|
|
56
|
+
refreshSlotFilledState(LAYOUT_SLOTS.BOTTOM, container);
|
|
57
|
+
// The scope is intentionally never unregistered: the license bar is created once during init,
|
|
58
|
+
// cannot be disabled, and lives for the whole instance lifetime. It is cleaned up when
|
|
59
|
+
// `getFocusScopeManager().destroy()` runs on `hot.destroy()`.
|
|
60
|
+
hotInstance.getFocusScopeManager().registerScope(SCOPE_ID, barElement, {
|
|
61
|
+
shortcutsContextName: SHORTCUTS_CONTEXT_NAME,
|
|
62
|
+
runOnlyIf: ()=>getNotificationElement(hotInstance) !== null,
|
|
63
|
+
onActivate: (focusSource)=>{
|
|
64
|
+
const focusableElements = getFocusableElements(hotInstance);
|
|
65
|
+
if (focusableElements.length > 0) {
|
|
66
|
+
if (focusSource === 'tab_from_above') {
|
|
67
|
+
focusableElements[0]?.focus();
|
|
68
|
+
} else if (focusSource === 'tab_from_below') {
|
|
69
|
+
focusableElements[focusableElements.length - 1]?.focus();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
26
75
|
/**
|
|
27
76
|
* Initializes the built-in license notification: injects the product info message as the last
|
|
28
77
|
* element of the bottom slot when the license is invalid, expired, or missing, and registers
|
|
@@ -38,7 +87,13 @@ const LICENSE_INFO_CLASS = 'hot-display-license-info';
|
|
|
38
87
|
return;
|
|
39
88
|
}
|
|
40
89
|
const licenseKey = hotInstance.getSettings().licenseKey;
|
|
41
|
-
|
|
90
|
+
// DO NOT wrap this in a `typeof process` guard (or any `process` existence check). The bundler
|
|
91
|
+
// replaces the whole `"28/08/2026"` expression with a string literal at build time,
|
|
92
|
+
// so the bare read never touches a runtime `process` object and cannot crash. A guard is NOT
|
|
93
|
+
// inlined - it survives as `typeof process !== 'undefined' && "..."`, which is `false` in every
|
|
94
|
+
// browser bundle, blanks the release date, and silently kills expired-key detection. That was the
|
|
95
|
+
// 18.0.0 regression this read restores; re-adding the guard reintroduces it.
|
|
96
|
+
const releaseDate = "28/08/2026" || '';
|
|
42
97
|
const notificationElement = _injectProductInfo({
|
|
43
98
|
className: LICENSE_INFO_CLASS,
|
|
44
99
|
key: licenseKey,
|
|
@@ -48,30 +103,7 @@ const LICENSE_INFO_CLASS = 'hot-display-license-info';
|
|
|
48
103
|
if (!notificationElement) {
|
|
49
104
|
return;
|
|
50
105
|
}
|
|
51
|
-
// `_injectProductInfo` appended this element into the bottom slot
|
|
52
|
-
//
|
|
53
|
-
|
|
54
|
-
// `getLayoutManager().unregister`. Re-append it so it is the last child, and carry the shared
|
|
55
|
-
// slot-item class so it gets the same separator styling as registered slot items. Because it is a
|
|
56
|
-
// foreign (unregistered) node, `DomSlot` always inserts registered items before it, keeping it last
|
|
57
|
-
// as other contributors (for example pagination) register or reorder.
|
|
58
|
-
notificationElement.classList.add(SLOT_ITEM_CLASS);
|
|
59
|
-
container.appendChild(notificationElement);
|
|
60
|
-
// The scope is intentionally never unregistered: the license notification is created once during
|
|
61
|
-
// init, cannot be disabled, and lives for the whole instance lifetime. It is cleaned up when
|
|
62
|
-
// `getFocusScopeManager().destroy()` runs on `hot.destroy()`.
|
|
63
|
-
hotInstance.getFocusScopeManager().registerScope(SCOPE_ID, notificationElement, {
|
|
64
|
-
shortcutsContextName: SHORTCUTS_CONTEXT_NAME,
|
|
65
|
-
runOnlyIf: ()=>getNotificationElement(hotInstance) !== null,
|
|
66
|
-
onActivate: (focusSource)=>{
|
|
67
|
-
const focusableElements = getFocusableElements(hotInstance);
|
|
68
|
-
if (focusableElements.length > 0) {
|
|
69
|
-
if (focusSource === 'tab_from_above') {
|
|
70
|
-
focusableElements.at(0)?.focus();
|
|
71
|
-
} else if (focusSource === 'tab_from_below') {
|
|
72
|
-
focusableElements.at(-1)?.focus();
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
});
|
|
106
|
+
// `_injectProductInfo` already appended this element into the bottom slot and returned it;
|
|
107
|
+
// `mountBottomLicenseBar` re-appends it as the last child and wires the focus scope.
|
|
108
|
+
mountBottomLicenseBar(hotInstance, notificationElement);
|
|
77
109
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './movableMeta.js';
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { HotInstance } from '../core/types';
|
|
2
|
+
/**
|
|
3
|
+
* The cell-meta keys that travel with a cell moved by the `moveCells` feature. Shared between the
|
|
4
|
+
* MoveCells plugin (which moves the meta) and the UndoRedo `MoveCellsAction` (which must restore
|
|
5
|
+
* exactly this set — a key added in one place but missed in the other would silently stop being
|
|
6
|
+
* undone). It lives outside both plugins so that neither imports the other — registering just one
|
|
7
|
+
* of them through the tree-shakeable `base.ts` entry must not pull the other in.
|
|
8
|
+
*/
|
|
9
|
+
export declare const MOVABLE_META_KEYS: ReadonlyArray<string>;
|
|
10
|
+
/**
|
|
11
|
+
* A sparse record of one cell's own movable meta: the cell's visual coordinates plus only the
|
|
12
|
+
* movable keys the cell carries as its own properties.
|
|
13
|
+
*/
|
|
14
|
+
export interface MovableMetaEntry {
|
|
15
|
+
/**
|
|
16
|
+
* The visual row index of the cell.
|
|
17
|
+
*/
|
|
18
|
+
row: number;
|
|
19
|
+
/**
|
|
20
|
+
* The visual column index of the cell.
|
|
21
|
+
*/
|
|
22
|
+
col: number;
|
|
23
|
+
/**
|
|
24
|
+
* The cell's own movable meta keys and their values.
|
|
25
|
+
*/
|
|
26
|
+
meta: Record<string, unknown>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Collects the cells of a visual region that carry their own movable meta keys. The result is
|
|
30
|
+
* sparse — cells without any own movable key produce no entry — so a move allocates
|
|
31
|
+
* proportionally to the number of styled cells, not to the range area.
|
|
32
|
+
*
|
|
33
|
+
* @param {HotInstance} hot The Handsontable instance.
|
|
34
|
+
* @param {number} fromRow The visual top row of the region.
|
|
35
|
+
* @param {number} fromCol The visual start column of the region.
|
|
36
|
+
* @param {number} toRow The visual bottom row of the region.
|
|
37
|
+
* @param {number} toCol The visual end column of the region.
|
|
38
|
+
* @returns {MovableMetaEntry[]}
|
|
39
|
+
*/
|
|
40
|
+
export declare function collectMovableMeta(hot: HotInstance, fromRow: number, fromCol: number, toRow: number, toCol: number): MovableMetaEntry[];
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
get MOVABLE_META_KEYS () {
|
|
13
|
+
return MOVABLE_META_KEYS;
|
|
14
|
+
},
|
|
15
|
+
get collectMovableMeta () {
|
|
16
|
+
return collectMovableMeta;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
const _object = require("../helpers/object");
|
|
20
|
+
const MOVABLE_META_KEYS = [
|
|
21
|
+
'className'
|
|
22
|
+
];
|
|
23
|
+
function collectMovableMeta(hot, fromRow, fromCol, toRow, toCol) {
|
|
24
|
+
const entries = [];
|
|
25
|
+
for(let row = fromRow; row <= toRow; row++){
|
|
26
|
+
for(let col = fromCol; col <= toCol; col++){
|
|
27
|
+
// Transient: only the movable keys are copied out below and the meta object is discarded, so
|
|
28
|
+
// materializing one per visited cell would retain memory the viewport cannot evict.
|
|
29
|
+
const cellMeta = hot.getCellMetaTransient(row, col);
|
|
30
|
+
let meta = null;
|
|
31
|
+
for (const key of MOVABLE_META_KEYS){
|
|
32
|
+
if ((0, _object.hasOwnProperty)(cellMeta, key)) {
|
|
33
|
+
meta = meta ?? {};
|
|
34
|
+
meta[key] = cellMeta[key];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (meta !== null) {
|
|
38
|
+
entries.push({
|
|
39
|
+
row,
|
|
40
|
+
col,
|
|
41
|
+
meta
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return entries;
|
|
47
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { hasOwnProperty } from '../helpers/object.mjs';
|
|
2
|
+
/**
|
|
3
|
+
* The cell-meta keys that travel with a cell moved by the `moveCells` feature. Shared between the
|
|
4
|
+
* MoveCells plugin (which moves the meta) and the UndoRedo `MoveCellsAction` (which must restore
|
|
5
|
+
* exactly this set — a key added in one place but missed in the other would silently stop being
|
|
6
|
+
* undone). It lives outside both plugins so that neither imports the other — registering just one
|
|
7
|
+
* of them through the tree-shakeable `base.ts` entry must not pull the other in.
|
|
8
|
+
*/ export const MOVABLE_META_KEYS = [
|
|
9
|
+
'className'
|
|
10
|
+
];
|
|
11
|
+
/**
|
|
12
|
+
* Collects the cells of a visual region that carry their own movable meta keys. The result is
|
|
13
|
+
* sparse — cells without any own movable key produce no entry — so a move allocates
|
|
14
|
+
* proportionally to the number of styled cells, not to the range area.
|
|
15
|
+
*
|
|
16
|
+
* @param {HotInstance} hot The Handsontable instance.
|
|
17
|
+
* @param {number} fromRow The visual top row of the region.
|
|
18
|
+
* @param {number} fromCol The visual start column of the region.
|
|
19
|
+
* @param {number} toRow The visual bottom row of the region.
|
|
20
|
+
* @param {number} toCol The visual end column of the region.
|
|
21
|
+
* @returns {MovableMetaEntry[]}
|
|
22
|
+
*/ export function collectMovableMeta(hot, fromRow, fromCol, toRow, toCol) {
|
|
23
|
+
const entries = [];
|
|
24
|
+
for(let row = fromRow; row <= toRow; row++){
|
|
25
|
+
for(let col = fromCol; col <= toCol; col++){
|
|
26
|
+
// Transient: only the movable keys are copied out below and the meta object is discarded, so
|
|
27
|
+
// materializing one per visited cell would retain memory the viewport cannot evict.
|
|
28
|
+
const cellMeta = hot.getCellMetaTransient(row, col);
|
|
29
|
+
let meta = null;
|
|
30
|
+
for (const key of MOVABLE_META_KEYS){
|
|
31
|
+
if (hasOwnProperty(cellMeta, key)) {
|
|
32
|
+
meta = meta ?? {};
|
|
33
|
+
meta[key] = cellMeta[key];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (meta !== null) {
|
|
37
|
+
entries.push({
|
|
38
|
+
row,
|
|
39
|
+
col,
|
|
40
|
+
meta
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return entries;
|
|
46
|
+
}
|
package/utils/parseTable.js
CHANGED
|
@@ -76,7 +76,7 @@ function instanceToHTML(instance) {
|
|
|
76
76
|
cell = `<th>${instance.getRowHeader(row - columnModifier)}</th>`;
|
|
77
77
|
} else {
|
|
78
78
|
const cellData = data[row][column];
|
|
79
|
-
const { hidden, rowspan, colspan } = instance.
|
|
79
|
+
const { hidden, rowspan, colspan } = instance.getCellMetaTransient(row - columnModifier, column - rowModifier);
|
|
80
80
|
if (!hidden) {
|
|
81
81
|
const attrs = [];
|
|
82
82
|
if (rowspan) {
|
|
@@ -215,21 +215,30 @@ function replaceTdCellsWithTextContent(html) {
|
|
|
215
215
|
}
|
|
216
216
|
function htmlToGridSettings(element, rootDocument = document) {
|
|
217
217
|
const settingsObj = {};
|
|
218
|
-
const fragment = rootDocument.createDocumentFragment();
|
|
219
|
-
const tempElem = rootDocument.createElement('div');
|
|
220
|
-
fragment.appendChild(tempElem);
|
|
221
218
|
let checkElement = element;
|
|
219
|
+
// Root the sibling-node lookups below (currently only the generator `<meta>`) at the parsed
|
|
220
|
+
// markup. Stays `null` when a live element is passed in, which is what the previous
|
|
221
|
+
// implementation effectively did - the scratch element it searched was empty in that case.
|
|
222
|
+
let parsedRoot = null;
|
|
222
223
|
if (typeof checkElement === 'string') {
|
|
223
224
|
// Use replaceTdCellsWithTextContent so nested <td> (e.g. Excel shape cells) are matched correctly
|
|
224
225
|
const normalizedHTML = replaceTdCellsWithTextContent(checkElement);
|
|
225
|
-
|
|
226
|
-
|
|
226
|
+
// `DOMParser` builds a document with no browsing context, so reading the pasted markup cannot
|
|
227
|
+
// run any of it: no image fetch, no `onerror`, no script. Writing the same string into a
|
|
228
|
+
// detached element of `rootDocument` does run it - the element is detached, but the document
|
|
229
|
+
// owning it is not inert, which is how an `<img src=x onerror>` in a paste payload executed.
|
|
230
|
+
// The parsed nodes are only ever read from here. Importing them into `rootDocument` would
|
|
231
|
+
// make them live again, so never do that.
|
|
232
|
+
// eslint-disable-next-line no-restricted-globals
|
|
233
|
+
const Parser = rootDocument.defaultView?.DOMParser ?? DOMParser;
|
|
234
|
+
parsedRoot = new Parser().parseFromString(normalizedHTML, 'text/html');
|
|
235
|
+
checkElement = parsedRoot.querySelector('table');
|
|
227
236
|
}
|
|
228
237
|
if (!checkElement || !isHTMLTable(checkElement)) {
|
|
229
238
|
return;
|
|
230
239
|
}
|
|
231
240
|
const el = checkElement;
|
|
232
|
-
const generator =
|
|
241
|
+
const generator = parsedRoot?.querySelector('meta[name$="enerator"]') ?? null;
|
|
233
242
|
const hasRowHeaders = el.querySelector('tbody th') !== null;
|
|
234
243
|
const trElement = el.querySelector('tr');
|
|
235
244
|
const countCols = !trElement ? 0 : Array.from(trElement.cells).reduce((cols, cell)=>cols + cell.colSpan, 0) - (hasRowHeaders ? 1 : 0);
|
package/utils/parseTable.mjs
CHANGED
|
@@ -57,7 +57,7 @@ const regEscapedChars = new RegExp(Object.keys(ESCAPED_HTML_CHARS).map((key)=>`(
|
|
|
57
57
|
cell = `<th>${instance.getRowHeader(row - columnModifier)}</th>`;
|
|
58
58
|
} else {
|
|
59
59
|
const cellData = data[row][column];
|
|
60
|
-
const { hidden, rowspan, colspan } = instance.
|
|
60
|
+
const { hidden, rowspan, colspan } = instance.getCellMetaTransient(row - columnModifier, column - rowModifier);
|
|
61
61
|
if (!hidden) {
|
|
62
62
|
const attrs = [];
|
|
63
63
|
if (rowspan) {
|
|
@@ -217,21 +217,30 @@ const paragraphRegexp = /<p.*?>/g;
|
|
|
217
217
|
*/ // eslint-disable-next-line no-restricted-globals
|
|
218
218
|
export function htmlToGridSettings(element, rootDocument = document) {
|
|
219
219
|
const settingsObj = {};
|
|
220
|
-
const fragment = rootDocument.createDocumentFragment();
|
|
221
|
-
const tempElem = rootDocument.createElement('div');
|
|
222
|
-
fragment.appendChild(tempElem);
|
|
223
220
|
let checkElement = element;
|
|
221
|
+
// Root the sibling-node lookups below (currently only the generator `<meta>`) at the parsed
|
|
222
|
+
// markup. Stays `null` when a live element is passed in, which is what the previous
|
|
223
|
+
// implementation effectively did - the scratch element it searched was empty in that case.
|
|
224
|
+
let parsedRoot = null;
|
|
224
225
|
if (typeof checkElement === 'string') {
|
|
225
226
|
// Use replaceTdCellsWithTextContent so nested <td> (e.g. Excel shape cells) are matched correctly
|
|
226
227
|
const normalizedHTML = replaceTdCellsWithTextContent(checkElement);
|
|
227
|
-
|
|
228
|
-
|
|
228
|
+
// `DOMParser` builds a document with no browsing context, so reading the pasted markup cannot
|
|
229
|
+
// run any of it: no image fetch, no `onerror`, no script. Writing the same string into a
|
|
230
|
+
// detached element of `rootDocument` does run it - the element is detached, but the document
|
|
231
|
+
// owning it is not inert, which is how an `<img src=x onerror>` in a paste payload executed.
|
|
232
|
+
// The parsed nodes are only ever read from here. Importing them into `rootDocument` would
|
|
233
|
+
// make them live again, so never do that.
|
|
234
|
+
// eslint-disable-next-line no-restricted-globals
|
|
235
|
+
const Parser = rootDocument.defaultView?.DOMParser ?? DOMParser;
|
|
236
|
+
parsedRoot = new Parser().parseFromString(normalizedHTML, 'text/html');
|
|
237
|
+
checkElement = parsedRoot.querySelector('table');
|
|
229
238
|
}
|
|
230
239
|
if (!checkElement || !isHTMLTable(checkElement)) {
|
|
231
240
|
return;
|
|
232
241
|
}
|
|
233
242
|
const el = checkElement;
|
|
234
|
-
const generator =
|
|
243
|
+
const generator = parsedRoot?.querySelector('meta[name$="enerator"]') ?? null;
|
|
235
244
|
const hasRowHeaders = el.querySelector('tbody th') !== null;
|
|
236
245
|
const trElement = el.querySelector('tr');
|
|
237
246
|
const countCols = !trElement ? 0 : Array.from(trElement.cells).reduce((cols, cell)=>cols + cell.colSpan, 0) - (hasRowHeaders ? 1 : 0);
|