handsontable 18.0.0 → 18.1.0-rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/3rdparty/walkontable/src/axisSizing/axisSizeSource.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/axisSizeSource.d.ts +55 -0
- package/3rdparty/walkontable/src/axisSizing/axisSizeSource.js +15 -0
- package/3rdparty/walkontable/src/axisSizing/axisSizeSource.mjs +14 -0
- package/3rdparty/walkontable/src/axisSizing/boxModel.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/boxModel.d.ts +32 -0
- package/3rdparty/walkontable/src/axisSizing/boxModel.js +45 -0
- package/3rdparty/walkontable/src/axisSizing/boxModel.mjs +33 -0
- package/3rdparty/walkontable/src/axisSizing/columnUtils.d.mts +2 -0
- package/3rdparty/walkontable/src/{utils/column.d.ts → axisSizing/columnUtils.d.ts} +12 -10
- package/3rdparty/walkontable/src/axisSizing/columnUtils.js +142 -0
- package/3rdparty/walkontable/src/axisSizing/columnUtils.mjs +137 -0
- package/3rdparty/walkontable/src/axisSizing/defaultSizeSource.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/defaultSizeSource.d.ts +58 -0
- package/3rdparty/walkontable/src/axisSizing/defaultSizeSource.js +124 -0
- package/3rdparty/walkontable/src/axisSizing/defaultSizeSource.mjs +114 -0
- package/3rdparty/walkontable/src/axisSizing/oversizedRows.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/oversizedRows.d.ts +162 -0
- package/3rdparty/walkontable/src/axisSizing/oversizedRows.js +424 -0
- package/3rdparty/walkontable/src/axisSizing/oversizedRows.mjs +522 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/index.d.ts +130 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/index.js +251 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/index.mjs +257 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/prefixSumStrategy.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/prefixSumStrategy.d.ts +51 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/prefixSumStrategy.js +116 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/prefixSumStrategy.mjs +112 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/sparseStrategy.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/sparseStrategy.d.ts +53 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/sparseStrategy.js +199 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/sparseStrategy.mjs +196 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/strategy.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/strategy.d.ts +53 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/strategy.js +40 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/strategy.mjs +41 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/uniformStrategy.d.mts +1 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/uniformStrategy.d.ts +47 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/uniformStrategy.js +116 -0
- package/3rdparty/walkontable/src/axisSizing/positionCache/uniformStrategy.mjs +110 -0
- package/3rdparty/walkontable/src/axisSizing/rowUtils.d.mts +2 -0
- package/3rdparty/walkontable/src/{utils/row.d.ts → axisSizing/rowUtils.d.ts} +11 -9
- package/3rdparty/walkontable/src/axisSizing/rowUtils.js +106 -0
- package/3rdparty/walkontable/src/axisSizing/rowUtils.mjs +101 -0
- package/3rdparty/walkontable/src/axisSizing/sizeGetters.d.mts +2 -0
- package/3rdparty/walkontable/src/axisSizing/sizeGetters.d.ts +84 -0
- package/3rdparty/walkontable/src/axisSizing/sizeGetters.js +102 -0
- package/3rdparty/walkontable/src/axisSizing/sizeGetters.mjs +92 -0
- package/3rdparty/walkontable/src/calculator/axisCalculation.d.ts +1 -1
- package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.d.ts +10 -0
- package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.js +10 -1
- package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.mjs +10 -1
- package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.d.ts +9 -0
- package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.js +9 -1
- package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.mjs +9 -1
- package/3rdparty/walkontable/src/calculator/viewportColumns.d.ts +1 -1
- package/3rdparty/walkontable/src/calculator/viewportRows.d.ts +1 -1
- package/3rdparty/walkontable/src/cell/coords.js +4 -9
- package/3rdparty/walkontable/src/cell/coords.mjs +4 -9
- package/3rdparty/walkontable/src/cell/range.d.ts +10 -0
- package/3rdparty/walkontable/src/cell/range.js +19 -15
- package/3rdparty/walkontable/src/cell/range.mjs +16 -12
- package/3rdparty/walkontable/src/core/_base.d.ts +21 -21
- package/3rdparty/walkontable/src/core/_base.js +47 -147
- package/3rdparty/walkontable/src/core/_base.mjs +17 -147
- package/3rdparty/walkontable/src/core/clone.d.ts +4 -14
- package/3rdparty/walkontable/src/core/clone.js +40 -5
- package/3rdparty/walkontable/src/core/clone.mjs +10 -5
- package/3rdparty/walkontable/src/core/core.d.ts +1 -5
- package/3rdparty/walkontable/src/core/core.js +41 -47
- package/3rdparty/walkontable/src/core/core.mjs +12 -48
- package/3rdparty/walkontable/src/domMeasure/geometryReader.d.mts +1 -0
- package/3rdparty/walkontable/src/domMeasure/geometryReader.d.ts +172 -0
- package/3rdparty/walkontable/src/domMeasure/geometryReader.js +19 -0
- package/3rdparty/walkontable/src/domMeasure/geometryReader.mjs +16 -0
- package/3rdparty/walkontable/src/domMeasure/liveGeometryReader.d.mts +1 -0
- package/3rdparty/walkontable/src/domMeasure/liveGeometryReader.d.ts +134 -0
- package/3rdparty/walkontable/src/domMeasure/liveGeometryReader.js +195 -0
- package/3rdparty/walkontable/src/domMeasure/liveGeometryReader.mjs +193 -0
- package/3rdparty/walkontable/src/event.d.ts +25 -12
- package/3rdparty/walkontable/src/event.js +96 -236
- package/3rdparty/walkontable/src/event.mjs +95 -236
- package/3rdparty/walkontable/src/facade/core.d.ts +6 -6
- package/3rdparty/walkontable/src/index.d.ts +1 -1
- package/3rdparty/walkontable/src/index.js +10 -21
- package/3rdparty/walkontable/src/index.mjs +1 -1
- package/3rdparty/walkontable/src/overlay/index.d.ts +6 -6
- package/3rdparty/walkontable/src/overlay/index.js +11 -11
- package/3rdparty/walkontable/src/overlay/index.mjs +6 -6
- package/3rdparty/walkontable/src/overlay/overlays.d.ts +375 -0
- package/3rdparty/walkontable/src/overlay/overlays.js +605 -0
- package/3rdparty/walkontable/src/overlay/overlays.mjs +594 -0
- package/3rdparty/walkontable/src/overlay/{_base.d.ts → regions/_base.d.ts} +65 -16
- package/3rdparty/walkontable/src/overlay/{_base.js → regions/_base.js} +155 -50
- package/3rdparty/walkontable/src/overlay/{_base.mjs → regions/_base.mjs} +158 -47
- package/3rdparty/walkontable/src/overlay/regions/bottomInlineStartCornerOverlay.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/{bottomInlineStartCorner.d.ts → regions/bottomInlineStartCornerOverlay.d.ts} +5 -10
- package/3rdparty/walkontable/src/overlay/{bottomInlineStartCorner.js → regions/bottomInlineStartCornerOverlay.js} +18 -20
- package/3rdparty/walkontable/src/overlay/{bottomInlineStartCorner.mjs → regions/bottomInlineStartCornerOverlay.mjs} +18 -20
- package/3rdparty/walkontable/src/overlay/regions/bottomOverlay.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/{bottom.d.ts → regions/bottomOverlay.d.ts} +16 -11
- package/3rdparty/walkontable/src/overlay/{bottom.js → regions/bottomOverlay.js} +111 -66
- package/3rdparty/walkontable/src/overlay/{bottom.mjs → regions/bottomOverlay.mjs} +111 -66
- package/3rdparty/walkontable/src/overlay/regions/inlineStartOverlay.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/{inlineStart.d.ts → regions/inlineStartOverlay.d.ts} +17 -11
- package/3rdparty/walkontable/src/overlay/{inlineStart.js → regions/inlineStartOverlay.js} +120 -67
- package/3rdparty/walkontable/src/overlay/{inlineStart.mjs → regions/inlineStartOverlay.mjs} +120 -67
- package/3rdparty/walkontable/src/overlay/regions/topInlineStartCornerOverlay.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/{topInlineStartCorner.d.ts → regions/topInlineStartCornerOverlay.d.ts} +5 -10
- package/3rdparty/walkontable/src/overlay/{topInlineStartCorner.js → regions/topInlineStartCornerOverlay.js} +13 -16
- package/3rdparty/walkontable/src/overlay/{topInlineStartCorner.mjs → regions/topInlineStartCornerOverlay.mjs} +13 -16
- package/3rdparty/walkontable/src/overlay/regions/topOverlay.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/{top.d.ts → regions/topOverlay.d.ts} +32 -11
- package/3rdparty/walkontable/src/overlay/{top.js → regions/topOverlay.js} +161 -77
- package/3rdparty/walkontable/src/overlay/{top.mjs → regions/topOverlay.mjs} +161 -77
- package/3rdparty/walkontable/src/overlay/resizeMonitor.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/resizeMonitor.d.ts +49 -0
- package/3rdparty/walkontable/src/overlay/resizeMonitor.js +149 -0
- package/3rdparty/walkontable/src/overlay/resizeMonitor.mjs +148 -0
- package/3rdparty/walkontable/src/overlay/scroll/nativeScrollInput.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/scroll/nativeScrollInput.d.ts +62 -0
- package/3rdparty/walkontable/src/overlay/scroll/nativeScrollInput.js +283 -0
- package/3rdparty/walkontable/src/overlay/scroll/nativeScrollInput.mjs +288 -0
- package/3rdparty/walkontable/src/overlay/scroll/scrollSync.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/scroll/scrollSync.d.ts +176 -0
- package/3rdparty/walkontable/src/overlay/scroll/scrollSync.js +542 -0
- package/3rdparty/walkontable/src/overlay/scroll/scrollSync.mjs +550 -0
- package/3rdparty/walkontable/src/overlay/spreaderSize.d.mts +1 -0
- package/3rdparty/walkontable/src/overlay/spreaderSize.d.ts +67 -0
- package/3rdparty/walkontable/src/overlay/spreaderSize.js +173 -0
- package/3rdparty/walkontable/src/overlay/spreaderSize.mjs +174 -0
- package/3rdparty/walkontable/src/{stickyScrollStrategy.d.ts → overlay/strategies/stickyScrollStrategy.d.ts} +33 -21
- package/3rdparty/walkontable/src/{stickyScrollStrategy.js → overlay/strategies/stickyScrollStrategy.js} +65 -53
- package/3rdparty/walkontable/src/{stickyScrollStrategy.mjs → overlay/strategies/stickyScrollStrategy.mjs} +63 -50
- package/3rdparty/walkontable/src/ports.d.mts +1 -0
- package/3rdparty/walkontable/src/ports.d.ts +54 -0
- package/3rdparty/walkontable/src/ports.js +23 -0
- package/3rdparty/walkontable/src/ports.mjs +24 -0
- package/3rdparty/walkontable/src/{renderer → render}/_base.d.ts +1 -1
- package/3rdparty/walkontable/src/{renderer → render}/cells.js +1 -1
- package/3rdparty/walkontable/src/{renderer → render}/cells.mjs +1 -1
- package/3rdparty/walkontable/src/{renderer → render}/columnHeaders.d.ts +1 -0
- package/3rdparty/walkontable/src/{renderer → render}/columnHeaders.js +41 -1
- package/3rdparty/walkontable/src/{renderer → render}/columnHeaders.mjs +42 -2
- package/3rdparty/walkontable/src/render/index.d.mts +1 -0
- package/3rdparty/walkontable/src/{renderer → render}/index.d.ts +11 -3
- package/3rdparty/walkontable/src/{renderer → render}/index.js +13 -3
- package/3rdparty/walkontable/src/{renderer → render}/index.mjs +11 -1
- package/3rdparty/walkontable/src/{renderer → render}/rows.js +1 -1
- package/3rdparty/walkontable/src/{renderer → render}/rows.mjs +1 -1
- package/3rdparty/walkontable/src/render/tableRenderer.d.mts +1 -0
- package/3rdparty/walkontable/src/{renderer/table.d.ts → render/tableRenderer.d.ts} +12 -2
- package/3rdparty/walkontable/src/render/tableRenderer.js +375 -0
- package/3rdparty/walkontable/src/{renderer/table.mjs → render/tableRenderer.mjs} +152 -6
- package/3rdparty/walkontable/src/{scroll.d.ts → scroll/scroll.d.ts} +27 -10
- package/3rdparty/walkontable/src/{scroll.js → scroll/scroll.js} +104 -35
- package/3rdparty/walkontable/src/{scroll.mjs → scroll/scroll.mjs} +102 -32
- package/3rdparty/walkontable/src/selection/border/border.d.ts +313 -5
- package/3rdparty/walkontable/src/selection/border/border.js +861 -51
- package/3rdparty/walkontable/src/selection/border/border.mjs +863 -53
- package/3rdparty/walkontable/src/selection/border/types.d.ts +30 -0
- package/3rdparty/walkontable/src/selection/manager.js +242 -12
- package/3rdparty/walkontable/src/selection/manager.mjs +243 -13
- package/3rdparty/walkontable/src/selection/scanner.js +5 -12
- package/3rdparty/walkontable/src/selection/scanner.mjs +5 -12
- package/3rdparty/walkontable/src/settings/accessor.d.mts +2 -0
- package/3rdparty/walkontable/src/settings/accessor.d.ts +74 -0
- package/3rdparty/walkontable/src/settings/accessor.js +78 -0
- package/3rdparty/walkontable/src/settings/accessor.mjs +71 -0
- package/3rdparty/walkontable/src/settings/defaults.d.mts +1 -0
- package/3rdparty/walkontable/src/{settings.d.ts → settings/defaults.d.ts} +16 -77
- package/3rdparty/walkontable/src/settings/defaults.js +146 -0
- package/3rdparty/walkontable/src/settings/defaults.mjs +225 -0
- package/3rdparty/walkontable/src/settings/index.d.mts +1 -0
- package/3rdparty/walkontable/src/settings/index.d.ts +6 -0
- package/3rdparty/walkontable/src/settings/index.js +20 -0
- package/3rdparty/walkontable/src/settings/index.mjs +5 -0
- package/3rdparty/walkontable/src/table/baseTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/baseTable.d.ts +284 -0
- package/3rdparty/walkontable/src/table/baseTable.js +290 -0
- package/3rdparty/walkontable/src/table/baseTable.mjs +278 -0
- package/3rdparty/walkontable/src/table/cellAccess.d.mts +1 -0
- package/3rdparty/walkontable/src/table/cellAccess.d.ts +101 -0
- package/3rdparty/walkontable/src/table/cellAccess.js +238 -0
- package/3rdparty/walkontable/src/table/cellAccess.mjs +229 -0
- package/3rdparty/walkontable/src/table/domScaffold.d.mts +1 -0
- package/3rdparty/walkontable/src/table/domScaffold.d.ts +37 -0
- package/3rdparty/walkontable/src/table/domScaffold.js +145 -0
- package/3rdparty/walkontable/src/table/domScaffold.mjs +136 -0
- package/3rdparty/walkontable/src/table/drawCycle.d.mts +1 -0
- package/3rdparty/walkontable/src/table/drawCycle.d.ts +16 -0
- package/3rdparty/walkontable/src/table/drawCycle.js +405 -0
- package/3rdparty/walkontable/src/table/drawCycle.mjs +403 -0
- package/3rdparty/walkontable/src/table/rangeQuery/renderedRange.d.mts +1 -0
- package/3rdparty/walkontable/src/table/rangeQuery/renderedRange.d.ts +38 -0
- package/3rdparty/walkontable/src/table/rangeQuery/renderedRange.js +15 -0
- package/3rdparty/walkontable/src/table/rangeQuery/renderedRange.mjs +14 -0
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyColumnsStart.d.ts +1 -1
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyColumnsStart.js +1 -1
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyColumnsStart.mjs +1 -1
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsBottom.d.ts +1 -1
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsTop.d.ts +1 -1
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsTop.js +1 -1
- package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsTop.mjs +1 -1
- package/3rdparty/walkontable/src/table/rangeQuery/viewportPredicates.d.mts +2 -0
- package/3rdparty/walkontable/src/table/rangeQuery/viewportPredicates.d.ts +226 -0
- package/3rdparty/walkontable/src/table/rangeQuery/viewportPredicates.js +251 -0
- package/3rdparty/walkontable/src/table/rangeQuery/viewportPredicates.mjs +241 -0
- package/3rdparty/walkontable/src/table/rangeQuery/virtualRange.d.mts +1 -0
- package/3rdparty/walkontable/src/table/rangeQuery/virtualRange.d.ts +14 -0
- package/3rdparty/walkontable/src/table/rangeQuery/virtualRange.js +196 -0
- package/3rdparty/walkontable/src/table/rangeQuery/virtualRange.mjs +179 -0
- package/3rdparty/walkontable/src/table/regions/bottomInlineStartCornerTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/regions/bottomInlineStartCornerTable.d.ts +16 -0
- package/3rdparty/walkontable/src/table/{bottomInlineStartCorner.js → regions/bottomInlineStartCornerTable.js} +9 -12
- package/3rdparty/walkontable/src/table/regions/bottomInlineStartCornerTable.mjs +21 -0
- package/3rdparty/walkontable/src/table/regions/bottomTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/regions/bottomTable.d.ts +15 -0
- package/3rdparty/walkontable/src/table/regions/bottomTable.js +35 -0
- package/3rdparty/walkontable/src/table/regions/bottomTable.mjs +20 -0
- package/3rdparty/walkontable/src/table/regions/inlineStartTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/regions/inlineStartTable.d.ts +12 -0
- package/3rdparty/walkontable/src/table/regions/inlineStartTable.js +32 -0
- package/3rdparty/walkontable/src/table/regions/inlineStartTable.mjs +17 -0
- package/3rdparty/walkontable/src/table/regions/masterTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/{master.d.ts → regions/masterTable.d.ts} +4 -13
- package/3rdparty/walkontable/src/table/{master.js → regions/masterTable.js} +27 -57
- package/3rdparty/walkontable/src/table/{master.mjs → regions/masterTable.mjs} +26 -56
- package/3rdparty/walkontable/src/table/regions/topInlineStartCornerTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/regions/topInlineStartCornerTable.d.ts +16 -0
- package/3rdparty/walkontable/src/table/{topInlineStartCorner.js → regions/topInlineStartCornerTable.js} +9 -12
- package/3rdparty/walkontable/src/table/regions/topInlineStartCornerTable.mjs +21 -0
- package/3rdparty/walkontable/src/table/regions/topTable.d.mts +2 -0
- package/3rdparty/walkontable/src/table/regions/topTable.d.ts +15 -0
- package/3rdparty/walkontable/src/table/regions/topTable.js +35 -0
- package/3rdparty/walkontable/src/table/regions/topTable.mjs +20 -0
- package/3rdparty/walkontable/src/types.d.ts +7 -69
- package/3rdparty/walkontable/src/types.mjs +2 -1
- package/3rdparty/walkontable/src/utils/pointerToCoords.d.mts +1 -0
- package/3rdparty/walkontable/src/utils/{cellCoords.d.ts → pointerToCoords.d.ts} +24 -0
- package/3rdparty/walkontable/src/utils/pointerToCoords.js +181 -0
- package/3rdparty/walkontable/src/utils/pointerToCoords.mjs +186 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/gatherLayoutInput.d.mts +1 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/gatherLayoutInput.d.ts +40 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/gatherLayoutInput.js +139 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/gatherLayoutInput.mjs +131 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/layoutSnapshot.d.mts +1 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/layoutSnapshot.d.ts +133 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/layoutSnapshot.js +18 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/layoutSnapshot.mjs +18 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/resolveLayout.d.mts +1 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/resolveLayout.d.ts +17 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/resolveLayout.js +104 -0
- package/3rdparty/walkontable/src/viewport/boxLayout/resolveLayout.mjs +99 -0
- package/3rdparty/walkontable/src/viewport/calculatorFactory.d.mts +1 -0
- package/3rdparty/walkontable/src/viewport/calculatorFactory.d.ts +84 -0
- package/3rdparty/walkontable/src/viewport/calculatorFactory.js +588 -0
- package/3rdparty/walkontable/src/viewport/calculatorFactory.mjs +601 -0
- package/3rdparty/walkontable/src/viewport/viewport.d.ts +267 -0
- package/3rdparty/walkontable/src/viewport/viewport.js +363 -0
- package/3rdparty/walkontable/src/viewport/viewport.mjs +355 -0
- package/3rdparty/walkontable/src/viewport/workspaceSize.d.mts +1 -0
- package/3rdparty/walkontable/src/viewport/workspaceSize.d.ts +59 -0
- package/3rdparty/walkontable/src/viewport/workspaceSize.js +284 -0
- package/3rdparty/walkontable/src/viewport/workspaceSize.mjs +282 -0
- package/3rdparty/walkontable/src/wire.d.mts +1 -0
- package/3rdparty/walkontable/src/wire.d.ts +81 -0
- package/3rdparty/walkontable/src/wire.js +56 -0
- package/3rdparty/walkontable/src/wire.mjs +56 -0
- package/LICENSE.txt +1 -1
- package/README.md +2 -2
- package/base.d.ts +10 -2
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/cellTypes/checkboxType/accessors/valueSetter.d.ts +1 -1
- package/cellTypes/checkboxType/accessors/valueSetter.js +3 -1
- package/cellTypes/checkboxType/accessors/valueSetter.mjs +3 -1
- package/cellTypes/index.d.ts +3 -2
- package/cellTypes/index.js +9 -0
- package/cellTypes/index.mjs +5 -2
- package/cellTypes/intlDatetimeType/index.d.mts +1 -0
- package/cellTypes/intlDatetimeType/index.d.ts +1 -0
- package/cellTypes/intlDatetimeType/index.js +19 -0
- package/cellTypes/intlDatetimeType/index.mjs +1 -0
- package/cellTypes/intlDatetimeType/intlDatetimeType.d.mts +1 -0
- package/cellTypes/intlDatetimeType/intlDatetimeType.d.ts +16 -0
- package/cellTypes/intlDatetimeType/intlDatetimeType.js +31 -0
- package/cellTypes/intlDatetimeType/intlDatetimeType.mjs +15 -0
- package/cellTypes/multiSelectType/index.d.ts +1 -1
- package/cellTypes/multiSelectType/index.js +3 -0
- package/cellTypes/multiSelectType/index.mjs +1 -1
- package/cellTypes/multiSelectType/multiSelectType.d.ts +1 -0
- package/cellTypes/multiSelectType/multiSelectType.js +4 -0
- package/cellTypes/multiSelectType/multiSelectType.mjs +1 -0
- package/cellTypes/numericType/accessors/valueSetter.js +30 -2
- package/cellTypes/numericType/accessors/valueSetter.mjs +31 -3
- package/core/coordsMapper/rangeToRenderableMapper.js +5 -12
- package/core/coordsMapper/rangeToRenderableMapper.mjs +5 -12
- package/core/hooks/bucket.d.ts +40 -6
- package/core/hooks/bucket.js +113 -84
- package/core/hooks/bucket.mjs +118 -84
- package/core/hooks/constants.js +254 -16
- package/core/hooks/constants.mjs +254 -16
- package/core/hooks/index.js +28 -25
- package/core/hooks/index.mjs +28 -25
- package/core/layout/constants.d.ts +11 -0
- package/core/layout/constants.js +6 -0
- package/core/layout/constants.mjs +12 -0
- package/core/layout/domSlot.d.ts +3 -1
- package/core/layout/domSlot.js +21 -14
- package/core/layout/domSlot.mjs +21 -14
- package/core/layout/index.d.ts +2 -2
- package/core/layout/index.js +6 -0
- package/core/layout/index.mjs +2 -2
- package/core/layout/layoutManager.d.ts +13 -0
- package/core/layout/layoutManager.js +25 -13
- package/core/layout/layoutManager.mjs +26 -11
- package/core/settings.d.ts +59 -6
- package/core/types.d.ts +15 -1
- package/core/types.mjs +9 -0
- package/core.js +481 -85
- package/core.mjs +483 -87
- package/dataMap/dataMap.d.ts +3 -13
- package/dataMap/dataMap.js +101 -44
- package/dataMap/dataMap.mjs +102 -45
- package/dataMap/dataSource.js +4 -1
- package/dataMap/dataSource.mjs +4 -1
- package/dataMap/metaManager/index.d.ts +62 -8
- package/dataMap/metaManager/index.js +66 -0
- package/dataMap/metaManager/index.mjs +66 -0
- package/dataMap/metaManager/lazyFactoryMap.d.ts +68 -43
- package/dataMap/metaManager/lazyFactoryMap.js +490 -110
- package/dataMap/metaManager/lazyFactoryMap.mjs +504 -111
- package/dataMap/metaManager/metaLayers/cellMeta.d.ts +55 -8
- package/dataMap/metaManager/metaLayers/cellMeta.js +112 -17
- package/dataMap/metaManager/metaLayers/cellMeta.mjs +112 -17
- package/dataMap/metaManager/metaLayers/columnMeta.d.ts +2 -1
- package/dataMap/metaManager/metaLayers/columnMeta.js +1 -0
- package/dataMap/metaManager/metaLayers/columnMeta.mjs +1 -0
- package/dataMap/metaManager/metaSchema.js +712 -31
- package/dataMap/metaManager/metaSchema.mjs +712 -31
- package/dataMap/metaManager/mods/dynamicCellMeta.d.ts +24 -10
- package/dataMap/metaManager/mods/dynamicCellMeta.js +245 -28
- package/dataMap/metaManager/mods/dynamicCellMeta.mjs +246 -29
- package/dataMap/metaManager/mods/extendMetaProperties.js +4 -9
- package/dataMap/metaManager/mods/extendMetaProperties.mjs +4 -9
- package/dataMap/sourceDataValidator.d.ts +13 -21
- package/dataMap/sourceDataValidator.js +39 -29
- package/dataMap/sourceDataValidator.mjs +50 -33
- package/dist/handsontable.full.js +34553 -9903
- package/dist/handsontable.full.min.js +168 -112
- package/dist/handsontable.js +31541 -13409
- package/dist/handsontable.min.js +172 -116
- package/dist/languages/all.js +2 -1
- package/dist/languages/all.min.js +1 -1
- package/dist/languages/fa-IR.js +2 -1
- package/dist/languages/fa-IR.min.js +1 -1
- package/dist/themes/classic.js +9 -3
- package/dist/themes/classic.min.js +4 -4
- package/dist/themes/horizon.js +9 -3
- package/dist/themes/horizon.min.js +4 -4
- package/dist/themes/main.js +9 -3
- package/dist/themes/main.min.js +4 -4
- package/dist/themes/static/variables/colors/ant.js +3 -3
- package/dist/themes/static/variables/colors/ant.min.js +3 -3
- package/dist/themes/static/variables/colors/classic.js +3 -3
- package/dist/themes/static/variables/colors/classic.min.js +3 -3
- package/dist/themes/static/variables/colors/horizon.js +3 -3
- package/dist/themes/static/variables/colors/horizon.min.js +3 -3
- package/dist/themes/static/variables/colors/main.js +3 -3
- package/dist/themes/static/variables/colors/main.min.js +3 -3
- package/dist/themes/static/variables/colors/material.js +3 -3
- package/dist/themes/static/variables/colors/material.min.js +3 -3
- package/dist/themes/static/variables/colors/shadcn.js +3 -3
- package/dist/themes/static/variables/colors/shadcn.min.js +3 -3
- package/dist/themes/static/variables/density.js +3 -3
- package/dist/themes/static/variables/density.min.js +3 -3
- package/dist/themes/static/variables/helpers/iconsMap.js +4 -9
- package/dist/themes/static/variables/helpers/iconsMap.min.js +4 -9
- package/dist/themes/static/variables/icons/horizon.js +3 -3
- package/dist/themes/static/variables/icons/horizon.min.js +3 -3
- package/dist/themes/static/variables/icons/main.js +3 -3
- package/dist/themes/static/variables/icons/main.min.js +3 -3
- package/dist/themes/static/variables/sizing.js +3 -3
- package/dist/themes/static/variables/sizing.min.js +3 -3
- package/dist/themes/static/variables/tokens/classic.js +9 -3
- package/dist/themes/static/variables/tokens/classic.min.js +4 -4
- package/dist/themes/static/variables/tokens/horizon.js +9 -3
- package/dist/themes/static/variables/tokens/horizon.min.js +4 -4
- package/dist/themes/static/variables/tokens/main.js +9 -3
- package/dist/themes/static/variables/tokens/main.min.js +4 -4
- package/editorManager.js +1 -3
- package/editorManager.mjs +1 -3
- package/editors/autocompleteEditor/autocompleteEditor.js +48 -22
- package/editors/autocompleteEditor/autocompleteEditor.mjs +48 -22
- package/editors/baseEditor/baseEditor.d.ts +15 -3
- package/editors/baseEditor/baseEditor.js +6 -6
- package/editors/baseEditor/baseEditor.mjs +16 -6
- package/editors/factory.js +5 -2
- package/editors/factory.mjs +5 -2
- package/editors/index.d.ts +3 -2
- package/editors/index.js +8 -0
- package/editors/index.mjs +3 -1
- package/editors/intlDatetimeEditor/index.d.mts +1 -0
- package/editors/intlDatetimeEditor/index.d.ts +1 -0
- package/editors/intlDatetimeEditor/index.js +19 -0
- package/editors/intlDatetimeEditor/index.mjs +1 -0
- package/editors/intlDatetimeEditor/intlDatetimeEditor.d.mts +1 -0
- package/editors/intlDatetimeEditor/intlDatetimeEditor.d.ts +42 -0
- package/editors/intlDatetimeEditor/intlDatetimeEditor.js +108 -0
- package/editors/intlDatetimeEditor/intlDatetimeEditor.mjs +93 -0
- package/editors/multiSelectEditor/controllers/dropdownController.js +5 -12
- package/editors/multiSelectEditor/controllers/dropdownController.mjs +5 -12
- package/editors/multiSelectEditor/controllers/inputController.js +1 -3
- package/editors/multiSelectEditor/controllers/inputController.mjs +1 -3
- package/editors/multiSelectEditor/multiSelectEditor.js +16 -21
- package/editors/multiSelectEditor/multiSelectEditor.mjs +17 -22
- package/editors/passwordEditor/passwordEditor.js +5 -12
- package/editors/passwordEditor/passwordEditor.mjs +5 -12
- package/editors/registry.js +4 -9
- package/editors/registry.mjs +4 -9
- package/editors/textEditor/textEditor.js +1 -1
- package/editors/textEditor/textEditor.mjs +2 -2
- package/eventManager.d.ts +3 -3
- package/focusManager/grid.d.ts +28 -0
- package/focusManager/grid.js +84 -14
- package/focusManager/grid.mjs +80 -15
- package/focusManager/scopeManager.js +1 -1
- package/focusManager/scopeManager.mjs +2 -2
- package/handsontable-non-commercial-license.pdf +0 -0
- package/helpers/array.d.ts +25 -0
- package/helpers/array.js +41 -4
- package/helpers/array.mjs +56 -4
- package/helpers/dateTime.d.ts +14 -0
- package/helpers/dateTime.js +74 -2
- package/helpers/dateTime.mjs +73 -2
- package/helpers/dom/cellCoords.js +156 -13
- package/helpers/dom/cellCoords.mjs +156 -13
- package/helpers/dom/element.d.ts +27 -3
- package/helpers/dom/element.js +92 -16
- package/helpers/dom/element.mjs +107 -17
- package/helpers/dom/event.d.ts +58 -0
- package/helpers/dom/event.js +39 -0
- package/helpers/dom/event.mjs +63 -0
- package/helpers/errors.d.ts +5 -0
- package/helpers/errors.js +10 -6
- package/helpers/errors.mjs +10 -6
- package/helpers/feature.d.ts +19 -0
- package/helpers/feature.js +21 -0
- package/helpers/feature.mjs +30 -0
- package/helpers/function.d.ts +1 -1
- package/helpers/function.js +4 -1
- package/helpers/function.mjs +4 -1
- package/helpers/mixed.d.ts +103 -0
- package/helpers/mixed.js +373 -4
- package/helpers/mixed.mjs +413 -4
- package/helpers/moves.js +2 -1
- package/helpers/moves.mjs +2 -1
- package/helpers/number.d.ts +22 -0
- package/helpers/number.js +49 -0
- package/helpers/number.mjs +66 -0
- package/i18n/languages/ar-AR.js +8 -19
- package/i18n/languages/cs-CZ.js +8 -19
- package/i18n/languages/de-CH.js +8 -19
- package/i18n/languages/de-DE.js +8 -19
- package/i18n/languages/en-US.js +8 -19
- package/i18n/languages/es-MX.js +8 -19
- package/i18n/languages/fa-IR.d.ts +1 -0
- package/i18n/languages/fa-IR.js +9 -19
- package/i18n/languages/fa-IR.mjs +1 -0
- package/i18n/languages/fr-FR.js +8 -19
- package/i18n/languages/hr-HR.js +8 -19
- package/i18n/languages/it-IT.js +8 -19
- package/i18n/languages/ja-JP.js +8 -19
- package/i18n/languages/ko-KR.js +8 -19
- package/i18n/languages/lv-LV.js +8 -19
- package/i18n/languages/nb-NO.js +8 -19
- package/i18n/languages/nl-NL.js +8 -19
- package/i18n/languages/pl-PL.js +8 -19
- package/i18n/languages/pt-BR.js +8 -19
- package/i18n/languages/ru-RU.js +8 -19
- package/i18n/languages/sr-SP.js +8 -19
- package/i18n/languages/zh-CN.js +8 -19
- package/i18n/languages/zh-TW.js +8 -19
- package/i18n/registry.js +8 -19
- package/index.d.ts +2 -2
- package/index.js +8 -19
- package/languages/all.js +2 -1
- package/languages/fa-IR.js +2 -1
- package/languages/fa-IR.mjs +1 -0
- package/languages/index.js +2 -1
- package/package.json +61 -1
- package/plugins/autoColumnSize/autoColumnSize.d.ts +24 -1
- package/plugins/autoColumnSize/autoColumnSize.js +506 -94
- package/plugins/autoColumnSize/autoColumnSize.mjs +513 -95
- package/plugins/autoRowSize/autoRowSize.d.ts +40 -5
- package/plugins/autoRowSize/autoRowSize.js +73 -36
- package/plugins/autoRowSize/autoRowSize.mjs +103 -41
- package/plugins/autofill/autofill.js +35 -24
- package/plugins/autofill/autofill.mjs +35 -24
- package/plugins/base/base.d.ts +10 -0
- package/plugins/base/base.js +5 -12
- package/plugins/base/base.mjs +5 -12
- package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +4 -9
- package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +4 -9
- package/plugins/collapsibleColumns/collapsibleColumns.d.ts +4 -0
- package/plugins/collapsibleColumns/collapsibleColumns.js +94 -20
- package/plugins/collapsibleColumns/collapsibleColumns.mjs +98 -20
- package/plugins/columnSorting/columnSorting.d.ts +31 -2
- package/plugins/columnSorting/columnSorting.js +153 -33
- package/plugins/columnSorting/columnSorting.mjs +155 -35
- package/plugins/columnSorting/columnStatesManager.d.ts +1 -1
- package/plugins/columnSorting/columnStatesManager.js +1 -7
- package/plugins/columnSorting/columnStatesManager.mjs +1 -7
- package/plugins/columnSorting/domHelpers.d.ts +3 -0
- package/plugins/columnSorting/domHelpers.js +9 -0
- package/plugins/columnSorting/domHelpers.mjs +3 -3
- package/plugins/columnSorting/rootComparator.js +21 -16
- package/plugins/columnSorting/rootComparator.mjs +21 -16
- package/plugins/columnSorting/sortFunction/checkbox.js +7 -5
- package/plugins/columnSorting/sortFunction/checkbox.mjs +7 -5
- package/plugins/columnSorting/sortFunction/default.js +15 -4
- package/plugins/columnSorting/sortFunction/default.mjs +15 -4
- package/plugins/columnSorting/sortFunction/intlDatetime.d.mts +1 -0
- package/plugins/columnSorting/sortFunction/intlDatetime.d.ts +10 -0
- package/plugins/columnSorting/sortFunction/intlDatetime.js +23 -0
- package/plugins/columnSorting/sortFunction/intlDatetime.mjs +12 -0
- package/plugins/columnSorting/sortService/registry.js +2 -0
- package/plugins/columnSorting/sortService/registry.mjs +2 -0
- package/plugins/columnSorting/utils.d.ts +8 -0
- package/plugins/columnSorting/utils.js +37 -45
- package/plugins/columnSorting/utils.mjs +42 -47
- package/plugins/columnSummary/columnSummary.js +13 -14
- package/plugins/columnSummary/columnSummary.mjs +13 -14
- package/plugins/columnSummary/endpoints.d.ts +69 -2
- package/plugins/columnSummary/endpoints.js +176 -29
- package/plugins/columnSummary/endpoints.mjs +176 -29
- package/plugins/comments/commentEditor.js +5 -10
- package/plugins/comments/commentEditor.mjs +6 -11
- package/plugins/comments/comments.js +5 -12
- package/plugins/comments/comments.mjs +5 -12
- package/plugins/comments/contextMenuItem/addEditComment.js +8 -19
- package/plugins/comments/contextMenuItem/readOnlyComment.js +8 -19
- package/plugins/comments/contextMenuItem/removeComment.js +8 -19
- package/plugins/comments/editorResizeObserver.js +5 -12
- package/plugins/comments/editorResizeObserver.mjs +5 -12
- package/plugins/contextMenu/contextMenu.d.ts +12 -1
- package/plugins/contextMenu/contextMenu.js +34 -15
- package/plugins/contextMenu/contextMenu.mjs +34 -15
- package/plugins/contextMenu/index.d.ts +1 -1
- package/plugins/contextMenu/menu/menu.d.ts +22 -1
- package/plugins/contextMenu/menu/menu.js +216 -15
- package/plugins/contextMenu/menu/menu.mjs +217 -16
- package/plugins/contextMenu/menu/positioner.js +4 -9
- package/plugins/contextMenu/menu/positioner.mjs +4 -9
- package/plugins/contextMenu/predefinedItems/alignment.js +22 -33
- package/plugins/contextMenu/predefinedItems/alignment.mjs +14 -14
- package/plugins/contextMenu/predefinedItems/clearColumn.js +9 -20
- package/plugins/contextMenu/predefinedItems/clearColumn.mjs +1 -1
- package/plugins/contextMenu/predefinedItems/columnLeft.js +8 -19
- package/plugins/contextMenu/predefinedItems/columnRight.js +8 -19
- package/plugins/contextMenu/predefinedItems/index.js +8 -19
- package/plugins/contextMenu/predefinedItems/readOnly.js +11 -22
- package/plugins/contextMenu/predefinedItems/readOnly.mjs +3 -3
- package/plugins/contextMenu/predefinedItems/redo.js +8 -19
- package/plugins/contextMenu/predefinedItems/removeColumn.js +8 -19
- package/plugins/contextMenu/predefinedItems/removeRow.js +8 -19
- package/plugins/contextMenu/predefinedItems/rowAbove.js +8 -19
- package/plugins/contextMenu/predefinedItems/rowBelow.js +8 -19
- package/plugins/contextMenu/predefinedItems/undo.js +8 -19
- package/plugins/contextMenu/utils.js +1 -1
- package/plugins/contextMenu/utils.mjs +1 -1
- package/plugins/copyPaste/contextMenuItem/cut.js +8 -19
- package/plugins/copyPaste/copyPaste.js +62 -20
- package/plugins/copyPaste/copyPaste.mjs +63 -21
- package/plugins/copyPaste/copyableRanges.js +11 -14
- package/plugins/copyPaste/copyableRanges.mjs +11 -14
- package/plugins/copyPaste/pasteEvent.d.ts +1 -1
- package/plugins/customBorders/contextMenuItem/bottom.js +8 -19
- package/plugins/customBorders/contextMenuItem/left.js +8 -19
- package/plugins/customBorders/contextMenuItem/noBorders.js +8 -19
- package/plugins/customBorders/contextMenuItem/right.js +8 -19
- package/plugins/customBorders/contextMenuItem/top.js +8 -19
- package/plugins/customBorders/customBorders.d.ts +21 -40
- package/plugins/customBorders/customBorders.js +1084 -223
- package/plugins/customBorders/customBorders.mjs +1078 -206
- package/plugins/customBorders/utils.d.ts +71 -0
- package/plugins/customBorders/utils.js +63 -0
- package/plugins/customBorders/utils.mjs +101 -0
- package/plugins/dataProvider/dataProvider.js +35 -38
- package/plugins/dataProvider/dataProvider.mjs +27 -19
- package/plugins/dataProvider/query/crud.js +1 -1
- package/plugins/dataProvider/query/crud.mjs +1 -1
- package/plugins/dialog/dialog.js +15 -33
- package/plugins/dialog/dialog.mjs +7 -14
- package/plugins/dialog/ui.js +5 -12
- package/plugins/dialog/ui.mjs +5 -12
- package/plugins/dragToScroll/autoScroller.js +4 -9
- package/plugins/dragToScroll/autoScroller.mjs +4 -9
- package/plugins/dragToScroll/dragToScroll.d.ts +2 -2
- package/plugins/dragToScroll/dragToScroll.js +155 -26
- package/plugins/dragToScroll/dragToScroll.mjs +156 -27
- package/plugins/dragToScroll/scrollTimer.js +4 -9
- package/plugins/dragToScroll/scrollTimer.mjs +4 -9
- package/plugins/dropdownMenu/dropdownMenu.d.ts +5 -1
- package/plugins/dropdownMenu/dropdownMenu.js +50 -15
- package/plugins/dropdownMenu/dropdownMenu.mjs +51 -16
- package/plugins/dropdownMenu/index.d.ts +1 -0
- package/plugins/emptyDataState/emptyDataState.js +15 -33
- package/plugins/emptyDataState/emptyDataState.mjs +7 -14
- package/plugins/emptyDataState/ui.js +4 -9
- package/plugins/emptyDataState/ui.mjs +4 -9
- package/plugins/exportFile/dataProvider.js +5 -1
- package/plugins/exportFile/dataProvider.mjs +5 -1
- package/plugins/exportFile/exportFile.js +13 -31
- package/plugins/exportFile/exportFile.mjs +5 -12
- package/plugins/exportFile/types/csv.js +1 -3
- package/plugins/exportFile/types/csv.mjs +1 -3
- package/plugins/exportFile/types/xlsx/cell-style.js +4 -2
- package/plugins/exportFile/types/xlsx/cell-style.mjs +4 -2
- package/plugins/exportFile/types/xlsx/date-utils.d.ts +15 -0
- package/plugins/exportFile/types/xlsx/date-utils.js +31 -0
- package/plugins/exportFile/types/xlsx/date-utils.mjs +36 -0
- package/plugins/exportFile/types/xlsx.js +10 -3
- package/plugins/exportFile/types/xlsx.mjs +11 -4
- package/plugins/filters/component/_base.d.ts +1 -2
- package/plugins/filters/component/_base.js +1 -2
- package/plugins/filters/component/_base.mjs +1 -2
- package/plugins/filters/component/actionBar.js +9 -22
- package/plugins/filters/component/actionBar.mjs +1 -3
- package/plugins/filters/component/condition.d.ts +1 -0
- package/plugins/filters/component/condition.js +11 -22
- package/plugins/filters/component/condition.mjs +3 -3
- package/plugins/filters/component/operators.js +1 -3
- package/plugins/filters/component/operators.mjs +1 -3
- package/plugins/filters/component/value.d.ts +5 -6
- package/plugins/filters/component/value.js +62 -56
- package/plugins/filters/component/value.mjs +55 -38
- package/plugins/filters/condition/beginsWith.js +8 -19
- package/plugins/filters/condition/between.js +8 -19
- package/plugins/filters/condition/contains.js +8 -19
- package/plugins/filters/condition/date/after.js +10 -20
- package/plugins/filters/condition/date/after.mjs +2 -1
- package/plugins/filters/condition/date/afterOrEqual.js +10 -20
- package/plugins/filters/condition/date/afterOrEqual.mjs +2 -1
- package/plugins/filters/condition/date/before.js +10 -20
- package/plugins/filters/condition/date/before.mjs +2 -1
- package/plugins/filters/condition/date/beforeOrEqual.js +10 -20
- package/plugins/filters/condition/date/beforeOrEqual.mjs +2 -1
- package/plugins/filters/condition/date/today.js +8 -19
- package/plugins/filters/condition/date/tomorrow.js +8 -19
- package/plugins/filters/condition/date/yesterday.js +8 -19
- package/plugins/filters/condition/empty.js +8 -19
- package/plugins/filters/condition/endsWith.js +8 -19
- package/plugins/filters/condition/equal.d.ts +7 -0
- package/plugins/filters/condition/equal.js +12 -19
- package/plugins/filters/condition/equal.mjs +10 -0
- package/plugins/filters/condition/greaterThan.js +8 -19
- package/plugins/filters/condition/greaterThanOrEqual.js +8 -19
- package/plugins/filters/condition/intlDate/after.js +8 -19
- package/plugins/filters/condition/intlDate/afterOrEqual.js +8 -19
- package/plugins/filters/condition/intlDate/before.js +8 -19
- package/plugins/filters/condition/intlDate/beforeOrEqual.js +8 -19
- package/plugins/filters/condition/intlDate/between.js +8 -19
- package/plugins/filters/condition/intlDate/today.js +8 -19
- package/plugins/filters/condition/intlDate/tomorrow.js +8 -19
- package/plugins/filters/condition/intlDate/yesterday.js +8 -19
- package/plugins/filters/condition/intlDatetime/after.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/after.d.ts +18 -0
- package/plugins/filters/condition/intlDatetime/after.js +66 -0
- package/plugins/filters/condition/intlDatetime/after.mjs +22 -0
- package/plugins/filters/condition/intlDatetime/afterOrEqual.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/afterOrEqual.d.ts +18 -0
- package/plugins/filters/condition/intlDatetime/afterOrEqual.js +66 -0
- package/plugins/filters/condition/intlDatetime/afterOrEqual.mjs +22 -0
- package/plugins/filters/condition/intlDatetime/before.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/before.d.ts +18 -0
- package/plugins/filters/condition/intlDatetime/before.js +66 -0
- package/plugins/filters/condition/intlDatetime/before.mjs +22 -0
- package/plugins/filters/condition/intlDatetime/beforeOrEqual.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/beforeOrEqual.d.ts +18 -0
- package/plugins/filters/condition/intlDatetime/beforeOrEqual.js +66 -0
- package/plugins/filters/condition/intlDatetime/beforeOrEqual.mjs +22 -0
- package/plugins/filters/condition/intlDatetime/between.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/between.d.ts +18 -0
- package/plugins/filters/condition/intlDatetime/between.js +67 -0
- package/plugins/filters/condition/intlDatetime/between.mjs +23 -0
- package/plugins/filters/condition/intlDatetime/today.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/today.d.ts +17 -0
- package/plugins/filters/condition/intlDatetime/today.js +65 -0
- package/plugins/filters/condition/intlDatetime/today.mjs +20 -0
- package/plugins/filters/condition/intlDatetime/tomorrow.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/tomorrow.d.ts +17 -0
- package/plugins/filters/condition/intlDatetime/tomorrow.js +66 -0
- package/plugins/filters/condition/intlDatetime/tomorrow.mjs +21 -0
- package/plugins/filters/condition/intlDatetime/yesterday.d.mts +1 -0
- package/plugins/filters/condition/intlDatetime/yesterday.d.ts +17 -0
- package/plugins/filters/condition/intlDatetime/yesterday.js +66 -0
- package/plugins/filters/condition/intlDatetime/yesterday.mjs +21 -0
- package/plugins/filters/condition/intlTime/after.js +8 -19
- package/plugins/filters/condition/intlTime/afterOrEqual.js +8 -19
- package/plugins/filters/condition/intlTime/before.js +8 -19
- package/plugins/filters/condition/intlTime/beforeOrEqual.js +8 -19
- package/plugins/filters/condition/intlTime/between.js +8 -19
- package/plugins/filters/condition/lessThan.js +8 -19
- package/plugins/filters/condition/lessThanOrEqual.js +8 -19
- package/plugins/filters/condition/none.js +8 -19
- package/plugins/filters/condition/notBetween.js +8 -19
- package/plugins/filters/condition/notContains.js +8 -19
- package/plugins/filters/condition/notEmpty.js +8 -19
- package/plugins/filters/condition/notEqual.js +8 -19
- package/plugins/filters/conditionCollection.js +4 -7
- package/plugins/filters/conditionCollection.mjs +4 -7
- package/plugins/filters/conditionUpdateObserver.d.ts +2 -2
- package/plugins/filters/conditionUpdateObserver.js +144 -52
- package/plugins/filters/conditionUpdateObserver.mjs +144 -52
- package/plugins/filters/constants.d.ts +1 -0
- package/plugins/filters/constants.js +31 -0
- package/plugins/filters/constants.mjs +28 -0
- package/plugins/filters/dataFilter.d.ts +4 -12
- package/plugins/filters/dataFilter.js +7 -19
- package/plugins/filters/dataFilter.mjs +8 -20
- package/plugins/filters/filters.d.ts +33 -9
- package/plugins/filters/filters.js +104 -62
- package/plugins/filters/filters.mjs +97 -44
- package/plugins/filters/logicalOperations/conjunction.js +8 -19
- package/plugins/filters/logicalOperations/disjunction.js +8 -19
- package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +8 -19
- package/plugins/filters/sortComparators.d.ts +9 -2
- package/plugins/filters/sortComparators.js +34 -1
- package/plugins/filters/sortComparators.mjs +38 -3
- package/plugins/filters/ui/_base.js +8 -19
- package/plugins/filters/ui/input.d.ts +4 -0
- package/plugins/filters/ui/input.js +23 -18
- package/plugins/filters/ui/input.mjs +23 -18
- package/plugins/filters/ui/link.js +4 -9
- package/plugins/filters/ui/link.mjs +4 -9
- package/plugins/filters/ui/multipleSelect.js +40 -35
- package/plugins/filters/ui/multipleSelect.mjs +32 -16
- package/plugins/filters/ui/radioInput.js +4 -9
- package/plugins/filters/ui/radioInput.mjs +4 -9
- package/plugins/filters/ui/select.js +14 -32
- package/plugins/filters/ui/select.mjs +6 -13
- package/plugins/formulas/engine/register.d.ts +5 -4
- package/plugins/formulas/engine/register.js +5 -2
- package/plugins/formulas/engine/register.mjs +9 -5
- package/plugins/formulas/engine/settings.d.ts +2 -6
- package/plugins/formulas/engine/settings.js +29 -4
- package/plugins/formulas/engine/settings.mjs +29 -4
- package/plugins/formulas/engine/types.d.ts +12 -2
- package/plugins/formulas/formulas.d.ts +39 -0
- package/plugins/formulas/formulas.js +748 -55
- package/plugins/formulas/formulas.mjs +752 -57
- package/plugins/formulas/hyperlinkUrl.d.mts +1 -0
- package/plugins/formulas/hyperlinkUrl.d.ts +12 -0
- package/plugins/formulas/hyperlinkUrl.js +32 -0
- package/plugins/formulas/hyperlinkUrl.mjs +32 -0
- package/plugins/formulas/indexSyncer/axisSyncer.d.ts +1 -0
- package/plugins/formulas/indexSyncer/axisSyncer.js +77 -27
- package/plugins/formulas/indexSyncer/axisSyncer.mjs +77 -27
- package/plugins/formulas/indexSyncer/index.js +4 -9
- package/plugins/formulas/indexSyncer/index.mjs +4 -9
- package/plugins/formulas/utils.d.ts +9 -0
- package/plugins/formulas/utils.js +21 -0
- package/plugins/formulas/utils.mjs +25 -0
- package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +8 -19
- package/plugins/hiddenColumns/contextMenuItem/showColumn.js +14 -20
- package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +6 -1
- package/plugins/hiddenColumns/hiddenColumns.js +11 -15
- package/plugins/hiddenColumns/hiddenColumns.mjs +11 -15
- package/plugins/hiddenRows/contextMenuItem/hideRow.js +8 -19
- package/plugins/hiddenRows/contextMenuItem/showRow.js +14 -20
- package/plugins/hiddenRows/contextMenuItem/showRow.mjs +6 -1
- package/plugins/hiddenRows/hiddenRows.js +11 -15
- package/plugins/hiddenRows/hiddenRows.mjs +11 -15
- package/plugins/index.d.ts +5 -1
- package/plugins/index.js +10 -0
- package/plugins/index.mjs +5 -1
- package/plugins/loading/loading.js +13 -31
- package/plugins/loading/loading.mjs +5 -12
- package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +8 -19
- package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +8 -19
- package/plugins/manualColumnFreeze/manualColumnFreeze.js +5 -12
- package/plugins/manualColumnFreeze/manualColumnFreeze.mjs +5 -12
- package/plugins/manualColumnMove/manualColumnMove.d.ts +10 -0
- package/plugins/manualColumnMove/manualColumnMove.js +128 -33
- package/plugins/manualColumnMove/manualColumnMove.mjs +129 -34
- package/plugins/manualColumnResize/manualColumnResize.d.ts +12 -1
- package/plugins/manualColumnResize/manualColumnResize.js +28 -17
- package/plugins/manualColumnResize/manualColumnResize.mjs +28 -17
- package/plugins/manualRowMove/manualRowMove.js +5 -12
- package/plugins/manualRowMove/manualRowMove.mjs +5 -12
- package/plugins/manualRowResize/manualRowResize.d.ts +13 -2
- package/plugins/manualRowResize/manualRowResize.js +29 -18
- package/plugins/manualRowResize/manualRowResize.mjs +29 -18
- package/plugins/mergeCells/cellCoords.d.ts +8 -0
- package/plugins/mergeCells/cellCoords.js +15 -9
- package/plugins/mergeCells/cellCoords.mjs +15 -9
- package/plugins/mergeCells/cellsCollection.d.ts +46 -2
- package/plugins/mergeCells/cellsCollection.js +190 -71
- package/plugins/mergeCells/cellsCollection.mjs +190 -71
- package/plugins/mergeCells/contextMenuItem/toggleMerge.js +8 -19
- package/plugins/mergeCells/focusOrder.d.ts +26 -20
- package/plugins/mergeCells/focusOrder.js +363 -189
- package/plugins/mergeCells/focusOrder.mjs +368 -184
- package/plugins/mergeCells/mergeCells.d.ts +13 -8
- package/plugins/mergeCells/mergeCells.js +327 -76
- package/plugins/mergeCells/mergeCells.mjs +327 -76
- package/plugins/moveCells/helpers.d.mts +1 -0
- package/plugins/moveCells/helpers.d.ts +21 -0
- package/plugins/moveCells/helpers.js +20 -0
- package/plugins/moveCells/helpers.mjs +15 -0
- package/plugins/moveCells/index.d.mts +1 -0
- package/plugins/moveCells/index.d.ts +1 -0
- package/plugins/moveCells/index.js +22 -0
- package/plugins/moveCells/index.mjs +1 -0
- package/plugins/moveCells/moveCells.d.mts +1 -0
- package/plugins/moveCells/moveCells.d.ts +80 -0
- package/plugins/moveCells/moveCells.js +595 -0
- package/plugins/moveCells/moveCells.mjs +580 -0
- package/plugins/multiColumnSorting/multiColumnSorting.d.ts +8 -8
- package/plugins/multiColumnSorting/multiColumnSorting.js +11 -16
- package/plugins/multiColumnSorting/multiColumnSorting.mjs +11 -16
- package/plugins/multiColumnSorting/rootComparator.js +26 -19
- package/plugins/multiColumnSorting/rootComparator.mjs +26 -19
- package/plugins/multipleSelectionHandles/multipleSelectionHandles.d.ts +19 -4
- package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +266 -58
- package/plugins/multipleSelectionHandles/multipleSelectionHandles.mjs +266 -58
- package/plugins/nestedHeaders/nestedHeaders.d.ts +10 -1
- package/plugins/nestedHeaders/nestedHeaders.js +227 -35
- package/plugins/nestedHeaders/nestedHeaders.mjs +227 -35
- package/plugins/nestedHeaders/stateManager/columnArrangement.d.mts +1 -0
- package/plugins/nestedHeaders/stateManager/columnArrangement.d.ts +37 -0
- package/plugins/nestedHeaders/stateManager/columnArrangement.js +35 -0
- package/plugins/nestedHeaders/stateManager/columnArrangement.mjs +30 -0
- package/plugins/nestedHeaders/stateManager/deriveSettings.d.mts +1 -0
- package/plugins/nestedHeaders/stateManager/deriveSettings.d.ts +57 -0
- package/plugins/nestedHeaders/stateManager/deriveSettings.js +115 -0
- package/plugins/nestedHeaders/stateManager/deriveSettings.mjs +135 -0
- package/plugins/nestedHeaders/stateManager/headersTree.d.ts +14 -1
- package/plugins/nestedHeaders/stateManager/headersTree.js +4 -9
- package/plugins/nestedHeaders/stateManager/headersTree.mjs +4 -9
- package/plugins/nestedHeaders/stateManager/index.d.ts +76 -13
- package/plugins/nestedHeaders/stateManager/index.js +386 -50
- package/plugins/nestedHeaders/stateManager/index.mjs +387 -51
- package/plugins/nestedHeaders/stateManager/matrixGenerator.js +3 -2
- package/plugins/nestedHeaders/stateManager/matrixGenerator.mjs +3 -2
- package/plugins/nestedHeaders/stateManager/settingsNormalizer.js +5 -1
- package/plugins/nestedHeaders/stateManager/settingsNormalizer.mjs +5 -1
- package/plugins/nestedHeaders/stateManager/sourceSettings.d.ts +23 -6
- package/plugins/nestedHeaders/stateManager/sourceSettings.js +24 -13
- package/plugins/nestedHeaders/stateManager/sourceSettings.mjs +24 -13
- package/plugins/nestedHeaders/stateManager/utils.d.ts +17 -1
- package/plugins/nestedHeaders/stateManager/utils.js +6 -1
- package/plugins/nestedHeaders/stateManager/utils.mjs +6 -1
- package/plugins/nestedHeaders/utils/ghostTable.js +1 -3
- package/plugins/nestedHeaders/utils/ghostTable.mjs +1 -3
- package/plugins/nestedRows/data/dataManager.d.ts +4 -1
- package/plugins/nestedRows/data/dataManager.js +10 -4
- package/plugins/nestedRows/data/dataManager.mjs +10 -4
- package/plugins/nestedRows/nestedRows.d.ts +127 -1
- package/plugins/nestedRows/nestedRows.js +332 -17
- package/plugins/nestedRows/nestedRows.mjs +332 -17
- package/plugins/nestedRows/ui/collapsing.d.ts +58 -0
- package/plugins/nestedRows/ui/collapsing.js +234 -40
- package/plugins/nestedRows/ui/collapsing.mjs +234 -40
- package/plugins/nestedRows/ui/contextMenu.js +12 -28
- package/plugins/nestedRows/ui/contextMenu.mjs +4 -9
- package/plugins/notification/notification.js +13 -31
- package/plugins/notification/notification.mjs +5 -12
- package/plugins/notification/ui.js +4 -9
- package/plugins/notification/ui.mjs +4 -9
- package/plugins/pagination/pagination.js +7 -14
- package/plugins/pagination/pagination.mjs +7 -14
- package/plugins/pagination/ui.js +13 -31
- package/plugins/pagination/ui.mjs +5 -12
- package/plugins/search/search.js +27 -11
- package/plugins/search/search.mjs +27 -11
- package/plugins/selectionHandles/helpers.d.mts +1 -0
- package/plugins/selectionHandles/helpers.d.ts +17 -0
- package/plugins/selectionHandles/helpers.js +16 -0
- package/plugins/selectionHandles/helpers.mjs +11 -0
- package/plugins/selectionHandles/index.d.mts +1 -0
- package/plugins/selectionHandles/index.d.ts +1 -0
- package/plugins/selectionHandles/index.js +22 -0
- package/plugins/selectionHandles/index.mjs +1 -0
- package/plugins/selectionHandles/selectionHandles.d.mts +1 -0
- package/plugins/selectionHandles/selectionHandles.d.ts +52 -0
- package/plugins/selectionHandles/selectionHandles.js +335 -0
- package/plugins/selectionHandles/selectionHandles.mjs +316 -0
- package/plugins/stretchColumns/calculator.js +5 -12
- package/plugins/stretchColumns/calculator.mjs +5 -12
- package/plugins/stretchColumns/strategies/last.js +4 -9
- package/plugins/stretchColumns/strategies/last.mjs +4 -9
- package/plugins/stretchColumns/stretchColumns.js +4 -9
- package/plugins/stretchColumns/stretchColumns.mjs +4 -9
- package/plugins/touchScroll/touchScroll.js +4 -9
- package/plugins/touchScroll/touchScroll.mjs +4 -9
- package/plugins/trimRows/trimRows.d.ts +1 -1
- package/plugins/trimRows/trimRows.js +10 -11
- package/plugins/trimRows/trimRows.mjs +10 -11
- package/plugins/types.d.ts +4 -0
- package/plugins/undoRedo/actions/cellAlignment.js +1 -1
- package/plugins/undoRedo/actions/cellAlignment.mjs +1 -1
- package/plugins/undoRedo/actions/createColumn.js +4 -1
- package/plugins/undoRedo/actions/createColumn.mjs +4 -1
- package/plugins/undoRedo/actions/createRow.js +4 -1
- package/plugins/undoRedo/actions/createRow.mjs +4 -1
- package/plugins/undoRedo/actions/fixedCounts.d.mts +1 -0
- package/plugins/undoRedo/actions/fixedCounts.d.ts +36 -0
- package/plugins/undoRedo/actions/fixedCounts.js +63 -0
- package/plugins/undoRedo/actions/fixedCounts.mjs +62 -0
- package/plugins/undoRedo/actions/index.js +2 -0
- package/plugins/undoRedo/actions/index.mjs +2 -0
- package/plugins/undoRedo/actions/moveCells.d.mts +1 -0
- package/plugins/undoRedo/actions/moveCells.d.ts +104 -0
- package/plugins/undoRedo/actions/moveCells.js +225 -0
- package/plugins/undoRedo/actions/moveCells.mjs +227 -0
- package/plugins/undoRedo/actions/removeColumn.d.ts +18 -2
- package/plugins/undoRedo/actions/removeColumn.js +11 -4
- package/plugins/undoRedo/actions/removeColumn.mjs +12 -5
- package/plugins/undoRedo/actions/removeRow.js +2 -57
- package/plugins/undoRedo/actions/removeRow.mjs +2 -57
- package/plugins/undoRedo/undoRedo.d.ts +26 -0
- package/plugins/undoRedo/undoRedo.js +40 -11
- package/plugins/undoRedo/undoRedo.mjs +40 -11
- package/plugins/undoRedo/utils.d.ts +29 -0
- package/plugins/undoRedo/utils.js +55 -3
- package/plugins/undoRedo/utils.mjs +59 -0
- package/renderSizeProbe.d.mts +1 -0
- package/renderSizeProbe.d.ts +60 -0
- package/renderSizeProbe.js +161 -0
- package/renderSizeProbe.mjs +174 -0
- package/renderers/checkboxRenderer/checkboxRenderer.js +9 -4
- package/renderers/checkboxRenderer/checkboxRenderer.mjs +9 -4
- package/renderers/index.d.ts +3 -2
- package/renderers/index.js +8 -0
- package/renderers/index.mjs +3 -1
- package/renderers/intlDatetimeRenderer/index.d.mts +1 -0
- package/renderers/intlDatetimeRenderer/index.d.ts +1 -0
- package/renderers/intlDatetimeRenderer/index.js +22 -0
- package/renderers/intlDatetimeRenderer/index.mjs +1 -0
- package/renderers/intlDatetimeRenderer/intlDatetimeRenderer.d.mts +1 -0
- package/renderers/intlDatetimeRenderer/intlDatetimeRenderer.d.ts +26 -0
- package/renderers/intlDatetimeRenderer/intlDatetimeRenderer.js +82 -0
- package/renderers/intlDatetimeRenderer/intlDatetimeRenderer.mjs +67 -0
- package/renderers/multiSelectRenderer/multiSelectRenderer.js +2 -3
- package/renderers/multiSelectRenderer/multiSelectRenderer.mjs +2 -3
- package/renderers/multiSelectRenderer/utils/utils.d.ts +1 -1
- package/renderers/multiSelectRenderer/utils/utils.js +11 -8
- package/renderers/multiSelectRenderer/utils/utils.mjs +11 -8
- package/renderers/renderCell.d.mts +1 -0
- package/renderers/renderCell.d.ts +37 -0
- package/renderers/renderCell.js +43 -0
- package/renderers/renderCell.mjs +48 -0
- package/selection/highlight/highlight.js +1 -3
- package/selection/highlight/highlight.mjs +1 -3
- package/selection/highlight/types/areaLayered.d.ts +3 -1
- package/selection/highlight/types/areaLayered.js +4 -2
- package/selection/highlight/types/areaLayered.mjs +6 -2
- package/selection/highlight/types/focus.d.ts +3 -1
- package/selection/highlight/types/focus.js +3 -2
- package/selection/highlight/types/focus.mjs +5 -2
- package/selection/mouseEventHandler.js +29 -26
- package/selection/mouseEventHandler.mjs +29 -26
- package/selection/moveCells.d.mts +1 -0
- package/selection/moveCells.d.ts +15 -0
- package/selection/moveCells.js +13 -0
- package/selection/moveCells.mjs +9 -0
- package/selection/selection.d.ts +56 -2
- package/selection/selection.js +162 -36
- package/selection/selection.mjs +154 -17
- package/selection/transformation/_base.js +5 -12
- package/selection/transformation/_base.mjs +5 -12
- package/selection/types.d.ts +3 -0
- package/settings.d.ts +24 -3
- package/shortcuts/context.d.ts +4 -0
- package/shortcuts/context.js +16 -8
- package/shortcuts/context.mjs +20 -8
- package/shortcuts/contexts/commands/populateSelectedCellsData.js +1 -1
- package/shortcuts/contexts/commands/populateSelectedCellsData.mjs +1 -1
- package/styles/handsontable.css +504 -158
- package/styles/handsontable.min.css +4 -4
- package/styles/handsontableStyles.js +1 -1
- package/styles/handsontableStyles.mjs +1 -1
- package/styles/ht-icons-horizon.css +1 -10
- package/styles/ht-icons-horizon.min.css +4 -4
- package/styles/ht-icons-main.css +1 -10
- package/styles/ht-icons-main.min.css +4 -4
- package/styles/ht-theme-classic-no-icons.css +6 -0
- package/styles/ht-theme-classic-no-icons.min.css +4 -4
- package/styles/ht-theme-classic.css +7 -10
- package/styles/ht-theme-classic.min.css +4 -4
- package/styles/ht-theme-horizon-no-icons.css +6 -0
- package/styles/ht-theme-horizon-no-icons.min.css +4 -4
- package/styles/ht-theme-horizon.css +7 -10
- package/styles/ht-theme-horizon.min.css +4 -4
- package/styles/ht-theme-main-no-icons.css +6 -0
- package/styles/ht-theme-main-no-icons.min.css +4 -4
- package/styles/ht-theme-main.css +7 -10
- package/styles/ht-theme-main.min.css +4 -4
- package/tableView.d.ts +17 -4
- package/tableView.js +211 -53
- package/tableView.mjs +212 -54
- package/themes/engine/builder.js +5 -12
- package/themes/engine/builder.mjs +5 -12
- package/themes/engine/index.d.ts +2 -1
- package/themes/engine/index.js +3 -0
- package/themes/engine/index.mjs +1 -1
- package/themes/engine/manager.d.ts +75 -3
- package/themes/engine/manager.js +247 -18
- package/themes/engine/manager.mjs +254 -18
- package/themes/engine/utils/cssVariables.d.ts +18 -1
- package/themes/engine/utils/cssVariables.js +27 -11
- package/themes/engine/utils/cssVariables.mjs +28 -11
- package/themes/engine/utils/validation.js +7 -0
- package/themes/engine/utils/validation.mjs +7 -0
- package/themes/static/variables/helpers/iconsMap.js +1 -6
- package/themes/static/variables/helpers/iconsMap.mjs +1 -6
- package/themes/static/variables/tokens/classic.js +6 -0
- package/themes/static/variables/tokens/classic.mjs +6 -0
- package/themes/static/variables/tokens/horizon.js +6 -0
- package/themes/static/variables/tokens/horizon.mjs +6 -0
- package/themes/static/variables/tokens/main.js +6 -0
- package/themes/static/variables/tokens/main.mjs +6 -0
- package/themes/types.d.ts +1 -1
- package/translations/changesObservable/observable.js +4 -9
- package/translations/changesObservable/observable.mjs +4 -9
- package/translations/changesObservable/observer.js +4 -9
- package/translations/changesObservable/observer.mjs +4 -9
- package/translations/indexMapper.d.ts +14 -9
- package/translations/indexMapper.js +109 -49
- package/translations/indexMapper.mjs +109 -49
- package/translations/mapCollections/aggregatedCollection.js +20 -35
- package/translations/mapCollections/aggregatedCollection.mjs +20 -35
- package/translations/mapCollections/mapCollection.d.ts +10 -4
- package/translations/mapCollections/mapCollection.js +2 -2
- package/translations/mapCollections/mapCollection.mjs +2 -2
- package/translations/maps/booleanMap.d.mts +1 -0
- package/translations/maps/booleanMap.d.ts +86 -0
- package/translations/maps/booleanMap.js +293 -0
- package/translations/maps/booleanMap.mjs +301 -0
- package/translations/maps/hidingMap.d.ts +5 -2
- package/translations/maps/hidingMap.js +8 -3
- package/translations/maps/hidingMap.mjs +8 -3
- package/translations/maps/index.d.ts +5 -2
- package/translations/maps/index.js +7 -3
- package/translations/maps/index.mjs +10 -2
- package/translations/maps/indexMap.d.ts +26 -2
- package/translations/maps/indexMap.js +73 -6
- package/translations/maps/indexMap.mjs +73 -6
- package/translations/maps/indexesSequence.d.ts +53 -2
- package/translations/maps/indexesSequence.js +218 -3
- package/translations/maps/indexesSequence.mjs +226 -3
- package/translations/maps/trimmingMap.d.ts +5 -2
- package/translations/maps/trimmingMap.js +8 -3
- package/translations/maps/trimmingMap.mjs +8 -3
- package/translations/maps/utils/actionsOnIndexes.js +20 -1
- package/translations/maps/utils/actionsOnIndexes.mjs +20 -1
- package/translations/maps/utils/indexesSequence.js +12 -3
- package/translations/maps/utils/indexesSequence.mjs +12 -3
- package/translations/maps/utils/physicallyIndexed.js +12 -1
- package/translations/maps/utils/physicallyIndexed.mjs +12 -1
- package/utils/entitlementLicenseKey/classify.d.mts +1 -0
- package/utils/entitlementLicenseKey/classify.d.ts +34 -0
- package/utils/entitlementLicenseKey/classify.js +97 -0
- package/utils/entitlementLicenseKey/classify.mjs +96 -0
- package/utils/entitlementLicenseKey/constants.d.mts +1 -0
- package/utils/entitlementLicenseKey/constants.d.ts +69 -0
- package/utils/entitlementLicenseKey/constants.js +54 -0
- package/utils/entitlementLicenseKey/constants.mjs +66 -0
- package/utils/entitlementLicenseKey/detectFormat.d.mts +1 -0
- package/utils/entitlementLicenseKey/detectFormat.d.ts +23 -0
- package/utils/entitlementLicenseKey/detectFormat.js +60 -0
- package/utils/entitlementLicenseKey/detectFormat.mjs +60 -0
- package/utils/entitlementLicenseKey/encoding.d.mts +1 -0
- package/utils/entitlementLicenseKey/encoding.d.ts +58 -0
- package/utils/entitlementLicenseKey/encoding.js +161 -0
- package/utils/entitlementLicenseKey/encoding.mjs +172 -0
- package/utils/entitlementLicenseKey/extractKeyData.d.mts +1 -0
- package/utils/entitlementLicenseKey/extractKeyData.d.ts +47 -0
- package/utils/entitlementLicenseKey/extractKeyData.js +213 -0
- package/utils/entitlementLicenseKey/extractKeyData.mjs +232 -0
- package/utils/entitlementLicenseKey/grants.d.mts +1 -0
- package/utils/entitlementLicenseKey/grants.d.ts +54 -0
- package/utils/entitlementLicenseKey/grants.js +68 -0
- package/utils/entitlementLicenseKey/grants.mjs +84 -0
- package/utils/entitlementLicenseKey/index.d.mts +1 -0
- package/utils/entitlementLicenseKey/index.d.ts +8 -0
- package/utils/entitlementLicenseKey/index.js +53 -0
- package/utils/entitlementLicenseKey/index.mjs +6 -0
- package/utils/entitlementLicenseKey/sha512.d.mts +1 -0
- package/utils/entitlementLicenseKey/sha512.d.ts +11 -0
- package/utils/entitlementLicenseKey/sha512.js +328 -0
- package/utils/entitlementLicenseKey/sha512.mjs +327 -0
- package/utils/entitlementLicenseKey/types.d.mts +1 -0
- package/utils/entitlementLicenseKey/types.d.ts +84 -0
- package/utils/entitlementLicenseKey/types.js +8 -0
- package/utils/entitlementLicenseKey/types.mjs +10 -0
- package/utils/ghostTable.d.ts +1 -0
- package/utils/ghostTable.js +58 -11
- package/utils/ghostTable.mjs +58 -11
- package/utils/interval.js +5 -12
- package/utils/interval.mjs +5 -12
- package/utils/licenseBranding/badge.d.mts +1 -0
- package/utils/licenseBranding/badge.d.ts +21 -0
- package/utils/licenseBranding/badge.js +237 -0
- package/utils/licenseBranding/badge.mjs +244 -0
- package/utils/licenseBranding/content.d.mts +1 -0
- package/utils/licenseBranding/content.d.ts +54 -0
- package/utils/licenseBranding/content.js +93 -0
- package/utils/licenseBranding/content.mjs +79 -0
- package/utils/licenseBranding/index.d.mts +1 -0
- package/utils/licenseBranding/index.d.ts +14 -0
- package/utils/licenseBranding/index.js +55 -0
- package/utils/licenseBranding/index.mjs +56 -0
- package/utils/licenseBranding/lockScreen.d.mts +1 -0
- package/utils/licenseBranding/lockScreen.d.ts +23 -0
- package/utils/licenseBranding/lockScreen.js +150 -0
- package/utils/licenseBranding/lockScreen.mjs +159 -0
- package/utils/licenseNotification.d.ts +19 -0
- package/utils/licenseNotification.js +56 -29
- package/utils/licenseNotification.mjs +61 -29
- package/utils/movableMeta.d.mts +1 -0
- package/utils/movableMeta.d.ts +40 -0
- package/utils/movableMeta.js +47 -0
- package/utils/movableMeta.mjs +46 -0
- package/utils/parseTable.js +1 -1
- package/utils/parseTable.mjs +1 -1
- package/utils/samplesGenerator.d.ts +41 -14
- package/utils/samplesGenerator.js +112 -42
- package/utils/samplesGenerator.mjs +112 -42
- package/utils/stylesHandler.d.ts +13 -0
- package/utils/stylesHandler.js +60 -14
- package/utils/stylesHandler.mjs +60 -14
- package/validators/autocompleteValidator/autocompleteValidator.js +3 -0
- package/validators/autocompleteValidator/autocompleteValidator.mjs +3 -0
- package/validators/index.d.ts +3 -2
- package/validators/index.js +8 -0
- package/validators/index.mjs +3 -1
- package/validators/intlDatetimeValidator/index.d.mts +1 -0
- package/validators/intlDatetimeValidator/index.d.ts +1 -0
- package/validators/intlDatetimeValidator/index.js +25 -0
- package/validators/intlDatetimeValidator/index.mjs +1 -0
- package/validators/intlDatetimeValidator/intlDatetimeValidator.d.mts +1 -0
- package/validators/intlDatetimeValidator/intlDatetimeValidator.d.ts +28 -0
- package/validators/intlDatetimeValidator/intlDatetimeValidator.js +49 -0
- package/validators/intlDatetimeValidator/intlDatetimeValidator.mjs +37 -0
- package/3rdparty/walkontable/src/overlay/bottom.d.mts +0 -1
- package/3rdparty/walkontable/src/overlay/bottomInlineStartCorner.d.mts +0 -1
- package/3rdparty/walkontable/src/overlay/inlineStart.d.mts +0 -1
- package/3rdparty/walkontable/src/overlay/top.d.mts +0 -1
- package/3rdparty/walkontable/src/overlay/topInlineStartCorner.d.mts +0 -1
- package/3rdparty/walkontable/src/overlays.d.ts +0 -329
- package/3rdparty/walkontable/src/overlays.js +0 -870
- package/3rdparty/walkontable/src/overlays.mjs +0 -860
- package/3rdparty/walkontable/src/renderer/table.d.mts +0 -1
- package/3rdparty/walkontable/src/renderer/table.js +0 -229
- package/3rdparty/walkontable/src/settings.d.mts +0 -2
- package/3rdparty/walkontable/src/settings.js +0 -196
- package/3rdparty/walkontable/src/settings.mjs +0 -263
- package/3rdparty/walkontable/src/table/bottom.d.mts +0 -2
- package/3rdparty/walkontable/src/table/bottom.d.ts +0 -19
- package/3rdparty/walkontable/src/table/bottom.js +0 -38
- package/3rdparty/walkontable/src/table/bottom.mjs +0 -23
- package/3rdparty/walkontable/src/table/bottomInlineStartCorner.d.mts +0 -2
- package/3rdparty/walkontable/src/table/bottomInlineStartCorner.d.ts +0 -20
- package/3rdparty/walkontable/src/table/bottomInlineStartCorner.mjs +0 -24
- package/3rdparty/walkontable/src/table/inlineStart.d.mts +0 -2
- package/3rdparty/walkontable/src/table/inlineStart.d.ts +0 -16
- package/3rdparty/walkontable/src/table/inlineStart.js +0 -35
- package/3rdparty/walkontable/src/table/inlineStart.mjs +0 -20
- package/3rdparty/walkontable/src/table/master.d.mts +0 -2
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.d.mts +0 -2
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.d.ts +0 -75
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +0 -122
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +0 -112
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.d.mts +0 -2
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.d.ts +0 -75
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +0 -122
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +0 -112
- package/3rdparty/walkontable/src/table/top.d.mts +0 -2
- package/3rdparty/walkontable/src/table/top.d.ts +0 -19
- package/3rdparty/walkontable/src/table/top.js +0 -38
- package/3rdparty/walkontable/src/table/top.mjs +0 -23
- package/3rdparty/walkontable/src/table/topInlineStartCorner.d.mts +0 -2
- package/3rdparty/walkontable/src/table/topInlineStartCorner.d.ts +0 -20
- package/3rdparty/walkontable/src/table/topInlineStartCorner.mjs +0 -24
- package/3rdparty/walkontable/src/table.d.mts +0 -2
- package/3rdparty/walkontable/src/table.d.ts +0 -741
- package/3rdparty/walkontable/src/table.js +0 -1120
- package/3rdparty/walkontable/src/table.mjs +0 -1105
- package/3rdparty/walkontable/src/utils/cellCoords.d.mts +0 -1
- package/3rdparty/walkontable/src/utils/cellCoords.js +0 -54
- package/3rdparty/walkontable/src/utils/cellCoords.mjs +0 -54
- package/3rdparty/walkontable/src/utils/column.d.mts +0 -2
- package/3rdparty/walkontable/src/utils/column.js +0 -75
- package/3rdparty/walkontable/src/utils/column.mjs +0 -70
- package/3rdparty/walkontable/src/utils/positionCache.d.mts +0 -1
- package/3rdparty/walkontable/src/utils/positionCache.d.ts +0 -91
- package/3rdparty/walkontable/src/utils/positionCache.js +0 -193
- package/3rdparty/walkontable/src/utils/positionCache.mjs +0 -194
- package/3rdparty/walkontable/src/utils/row.d.mts +0 -2
- package/3rdparty/walkontable/src/utils/row.js +0 -46
- package/3rdparty/walkontable/src/utils/row.mjs +0 -41
- package/3rdparty/walkontable/src/viewport.d.ts +0 -254
- package/3rdparty/walkontable/src/viewport.js +0 -533
- package/3rdparty/walkontable/src/viewport.mjs +0 -523
- /package/3rdparty/walkontable/src/{renderer → axisSizing/positionCache}/index.d.mts +0 -0
- /package/3rdparty/walkontable/src/{overlays.d.mts → overlay/overlays.d.mts} +0 -0
- /package/3rdparty/walkontable/src/overlay/{_base.d.mts → regions/_base.d.mts} +0 -0
- /package/3rdparty/walkontable/src/{stickyScrollStrategy.d.mts → overlay/strategies/stickyScrollStrategy.d.mts} +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/_base.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/_base.js +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/_base.mjs +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/cells.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/cells.d.ts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/colGroup.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/colGroup.d.ts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/colGroup.js +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/colGroup.mjs +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/columnHeaderRows.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/columnHeaderRows.d.ts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/columnHeaderRows.js +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/columnHeaderRows.mjs +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/columnHeaders.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/rowHeaders.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/rowHeaders.d.ts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/rowHeaders.js +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/rowHeaders.mjs +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/rows.d.mts +0 -0
- /package/3rdparty/walkontable/src/{renderer → render}/rows.d.ts +0 -0
- /package/3rdparty/walkontable/src/{scroll.d.mts → scroll/scroll.d.mts} +0 -0
- /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyColumnsStart.d.mts +0 -0
- /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsBottom.d.mts +0 -0
- /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsBottom.js +0 -0
- /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsBottom.mjs +0 -0
- /package/3rdparty/walkontable/src/table/{mixin → rangeQuery}/stickyRowsTop.d.mts +0 -0
- /package/3rdparty/walkontable/src/{viewport.d.mts → viewport/viewport.d.mts} +0 -0
package/helpers/mixed.mjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { toSingleLine } from './templateLiteralTag.mjs';
|
|
2
|
+
import { isEntitlementKey, extractEntitlementKeyData, getProductEntitlement, classifyEntitlement, resolveChannels, getLicenseGrants, UNRESTRICTED_GRANTS, HANDSONTABLE_PRODUCT } from '../utils/entitlementLicenseKey/index.mjs';
|
|
2
3
|
/**
|
|
3
4
|
* Converts any value to string.
|
|
4
5
|
*
|
|
@@ -64,6 +65,19 @@ const _norm = (v)=>`${v}`.replace(/\-/g, '');
|
|
|
64
65
|
const _extractTime = (v)=>_hd(_ss(_norm(v), _hd('12'), _cp('\x46'))) / (_hd(_ss(_norm(v), _cp('\x42'), ~~![][_m])) || 9);
|
|
65
66
|
const _ignored = ()=>typeof location !== 'undefined' && /^([a-z0-9\-]+\.)?\x68\x61\x6E\x64\x73\x6F\x6E\x74\x61\x62\x6C\x65\x2E\x63\x6F\x6D$/i.test(location.host);
|
|
66
67
|
let _notified = false;
|
|
68
|
+
// The entitlement-key console message is deduplicated PER KEY, and deliberately SEPARATE from the
|
|
69
|
+
// legacy `_notified` flag above - do NOT merge them. Two reasons for each half:
|
|
70
|
+
//
|
|
71
|
+
// Separate from `_notified`, because the frozen legacy path sets it even when it prints nothing (a
|
|
72
|
+
// non-commercial key's console message is empty), so a shared flag would let a silent non-commercial
|
|
73
|
+
// grid initialized first suppress a later entitlement key's warning.
|
|
74
|
+
//
|
|
75
|
+
// Keyed by the key string rather than a single boolean, because these messages have severity tiers
|
|
76
|
+
// the legacy path never had: a notice window prints `warn`, every stop prints `error`. With one flag,
|
|
77
|
+
// a page whose first grid holds a trial in its notice period would print that warning and silence the
|
|
78
|
+
// expired license on the second grid entirely - a `warn` masking an `error`. Per key, each distinct
|
|
79
|
+
// license still speaks exactly once, and two grids sharing one key still print once between them.
|
|
80
|
+
const _entitlementNotified = new Set();
|
|
67
81
|
const consoleMessages = {
|
|
68
82
|
invalid: ()=>toSingleLine`
|
|
69
83
|
The license key for Handsontable is invalid.\x20
|
|
@@ -97,10 +111,191 @@ const domMessages = {
|
|
|
97
111
|
the documentation or contact us at <a href="mailto:support@handsontable.com">support@handsontable.com</a>.`,
|
|
98
112
|
non_commercial: ()=>''
|
|
99
113
|
};
|
|
114
|
+
/**
|
|
115
|
+
* Builds the "expires ..." clause of a trial message from a day count. Shared with the badge
|
|
116
|
+
* popover (`utils/licenseBranding/content.ts`), which prints the same sentence.
|
|
117
|
+
*
|
|
118
|
+
* Two counts need their own wording. `1` takes the singular unit, so the message does not read
|
|
119
|
+
* "expires in 1 days". `0` is the LAST LICENSED DAY - the named day is licensed in full - and it
|
|
120
|
+
* reads "expires today", because "expires in 0 days" describes a license that has already lapsed.
|
|
121
|
+
* The specification pins the wording for the general case only; the two edges are ours.
|
|
122
|
+
*
|
|
123
|
+
* @param {number|null|undefined} days The whole days left until the last licensed day.
|
|
124
|
+
* @returns {string}
|
|
125
|
+
*/ export function _formatExpiryClause(days) {
|
|
126
|
+
if (days === 0) {
|
|
127
|
+
return 'expires today';
|
|
128
|
+
}
|
|
129
|
+
return `expires in ${days} ${days === 1 ? 'day' : 'days'}`;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Marks a date as the UTC calendar day it is. Every message that prints a
|
|
133
|
+
* `usage_until` date carries the marker, because the day is compared against
|
|
134
|
+
* the clock in UTC and a reader in another timezone would otherwise read it as
|
|
135
|
+
* their own. A `release_until` date carries no marker - no clock takes part in
|
|
136
|
+
* the maintenance check.
|
|
137
|
+
*
|
|
138
|
+
* @param {string|undefined} isoDate The date the key carries.
|
|
139
|
+
* @returns {string}
|
|
140
|
+
*/ function _utcDay(isoDate) {
|
|
141
|
+
return `${isoDate} (UTC)`;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* License sentences the specification repeats verbatim across surfaces - the bottom bar (here), the
|
|
145
|
+
* badge popover, and the hard-stop lock screen (`utils/licenseBranding/content.ts`). Keeping one
|
|
146
|
+
* constant per sentence means a legal or marketing wording change lands on every surface at once,
|
|
147
|
+
* instead of drifting when only one copy is updated.
|
|
148
|
+
*/ export const _LICENSE_EXPIRED_TITLE = 'Your Handsontable license key has expired.';
|
|
149
|
+
export const _PURCHASE_LICENSE_TEXT = 'To continue using Handsontable, you need to purchase a license.';
|
|
150
|
+
/**
|
|
151
|
+
* The message a lapsed subscription prints, from its first day past the term onwards.
|
|
152
|
+
*
|
|
153
|
+
* @param {EntitlementMessageParams} params The message parameters.
|
|
154
|
+
* @returns {string}
|
|
155
|
+
*/ function _subscriptionExpiredMessage({ licensedUntil }) {
|
|
156
|
+
return toSingleLine`
|
|
157
|
+
Your Handsontable subscription license expired on ${_utcDay(licensedUntil)}. To continue using the\x20
|
|
158
|
+
software, contact sales@handsontable.com to purchase a valid license key.`;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* The console notification for each lifecycle state that talks to the
|
|
162
|
+
* developer, transcribed from the license specification. Silent states (a
|
|
163
|
+
* license comfortably inside its term, a build covered by its maintenance date)
|
|
164
|
+
* have no entry, and neither does a hard-stopped non-trial license: its
|
|
165
|
+
* soft-stop message persists instead.
|
|
166
|
+
*/ const entitlementConsoleNotifications = {
|
|
167
|
+
trial_notice: {
|
|
168
|
+
severity: 'warn',
|
|
169
|
+
message: ({ daysRemaining })=>toSingleLine`
|
|
170
|
+
Your Handsontable license key ${_formatExpiryClause(daysRemaining)}.\x20
|
|
171
|
+
${_PURCHASE_LICENSE_TEXT}`
|
|
172
|
+
},
|
|
173
|
+
trial_soft_stop: {
|
|
174
|
+
severity: 'error',
|
|
175
|
+
message: ({ licensedUntil })=>toSingleLine`
|
|
176
|
+
Your Handsontable trial license key expired on ${_utcDay(licensedUntil)}.\x20
|
|
177
|
+
${_PURCHASE_LICENSE_TEXT}`
|
|
178
|
+
},
|
|
179
|
+
trial_hard_stop: {
|
|
180
|
+
severity: 'error',
|
|
181
|
+
message: ({ licensedUntil })=>toSingleLine`
|
|
182
|
+
Your Handsontable trial license key expired on ${_utcDay(licensedUntil)}. You may no longer use\x20
|
|
183
|
+
Handsontable under the trial license. To continue using the software, contact\x20
|
|
184
|
+
sales@handsontable.com to purchase a valid license.`
|
|
185
|
+
},
|
|
186
|
+
usage_notice: {
|
|
187
|
+
severity: 'warn',
|
|
188
|
+
message: ({ licensedUntil })=>toSingleLine`
|
|
189
|
+
Your Handsontable subscription license expires on ${_utcDay(licensedUntil)}.\x20
|
|
190
|
+
To renew your license, contact sales@handsontable.com.`
|
|
191
|
+
},
|
|
192
|
+
usage_soft_stop: {
|
|
193
|
+
severity: 'error',
|
|
194
|
+
message: _subscriptionExpiredMessage
|
|
195
|
+
},
|
|
196
|
+
// Past its grace period, a non-trial license keeps saying exactly what it said inside it: 18.1
|
|
197
|
+
// never blocks a paying customer, so the soft-stop message persists instead of escalating.
|
|
198
|
+
usage_hard_stop: {
|
|
199
|
+
severity: 'error',
|
|
200
|
+
message: _subscriptionExpiredMessage
|
|
201
|
+
},
|
|
202
|
+
release_expired: {
|
|
203
|
+
severity: 'error',
|
|
204
|
+
message: ({ licensedUntil, hotVersion })=>toSingleLine`
|
|
205
|
+
The license key for Handsontable expired on ${licensedUntil}, and is not valid for the installed\x20
|
|
206
|
+
version ${hotVersion}. Renew your license key or downgrade to a version released on or before\x20
|
|
207
|
+
${licensedUntil}. If you need any help, contact us at sales@handsontable.com.`
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
/**
|
|
211
|
+
* The bottom-bar (DOM) copy for the states that show one: the soft-stopped
|
|
212
|
+
* trial and a build past its maintenance date. Three states render the
|
|
213
|
+
* Core-owned lock screen instead of a bar (see `_BLOCKING_MODAL_STATES` below
|
|
214
|
+
* and `utils/licenseBranding/lockScreen.ts`), and a non-trial license never
|
|
215
|
+
* renders a bar - it is developer-facing only in 18.1.
|
|
216
|
+
*/ const entitlementDomMessages = {
|
|
217
|
+
trial_soft_stop: ()=>toSingleLine`
|
|
218
|
+
${_LICENSE_EXPIRED_TITLE} ${_PURCHASE_LICENSE_TEXT}\x20
|
|
219
|
+
<a href="mailto:sales@handsontable.com">Contact Sales</a>.`,
|
|
220
|
+
release_expired: ({ licensedUntil, hotVersion })=>toSingleLine`
|
|
221
|
+
The license key for Handsontable expired on ${licensedUntil}, and is not valid for the installed\x20
|
|
222
|
+
version ${hotVersion}. <a href="https://handsontable.com/pricing" target="_blank">Renew</a> your license\x20
|
|
223
|
+
key or downgrade to a version released on or before ${licensedUntil}. If you need any help, contact us\x20
|
|
224
|
+
at <a href="mailto:sales@handsontable.com">sales@handsontable.com</a>.`
|
|
225
|
+
};
|
|
226
|
+
/**
|
|
227
|
+
* The states that render the Core-owned blocking modal (`utils/licenseBranding/lockScreen.ts`)
|
|
228
|
+
* INSTEAD of a bottom bar: a lapsed trial, a key that cannot be read, and a key that was never set.
|
|
229
|
+
* The last two spellings are shared by the legacy emitter's own state vocabulary below and by
|
|
230
|
+
* `LicenseStateKey`, so one list governs both paths.
|
|
231
|
+
*
|
|
232
|
+
* MUST list every key of `LOCK_CONTENT` (`utils/licenseBranding/content.ts`), the routing table for
|
|
233
|
+
* the modal - `licenseBranding.unit.js` asserts the two agree. `trial_hard_stop` shows no bar today
|
|
234
|
+
* only because `entitlementDomMessages` happens to have no entry for it; naming it here makes the
|
|
235
|
+
* withdrawal deliberate, so adding hard-stop bar copy later cannot put a bar underneath a
|
|
236
|
+
* non-dismissable lock. The list is NOT imported from `content.ts`: that module imports the shared
|
|
237
|
+
* copy constants from here, and the dependency must not become a cycle.
|
|
238
|
+
*
|
|
239
|
+
* The console message is unaffected - it still prints for these states. Only the bottom bar is
|
|
240
|
+
* withdrawn, because the modal now carries its sentences and two license surfaces saying the same
|
|
241
|
+
* thing at once would be noise.
|
|
242
|
+
*
|
|
243
|
+
* Frozen, and underscore-prefixed like every other license symbol here: `index.ts` copies every
|
|
244
|
+
* non-underscore export of this module onto the public `Handsontable.helper`, and a live array
|
|
245
|
+
* there could be emptied from a console to switch the blocking off at runtime.
|
|
246
|
+
*
|
|
247
|
+
* @type {readonly string[]}
|
|
248
|
+
*/ export const _BLOCKING_MODAL_STATES = Object.freeze([
|
|
249
|
+
'trial_hard_stop',
|
|
250
|
+
'invalid',
|
|
251
|
+
'missing'
|
|
252
|
+
]);
|
|
253
|
+
/**
|
|
254
|
+
* Tells whether a license state speaks through the blocking modal rather than the bottom bar.
|
|
255
|
+
*
|
|
256
|
+
* @param {string} state The license state, in either path's vocabulary.
|
|
257
|
+
* @returns {boolean}
|
|
258
|
+
*/ function _rendersBlockingModal(state) {
|
|
259
|
+
return _BLOCKING_MODAL_STATES.indexOf(state) !== -1;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Strips surrounding whitespace from a license key.
|
|
263
|
+
*
|
|
264
|
+
* A key pasted out of an email or a chat window commonly carries a trailing space or newline. The
|
|
265
|
+
* legacy 25-character alphabet has no whitespace in it, so an untrimmed key fails the checksum and
|
|
266
|
+
* reads as `invalid` - which, from 18.1 on, BLOCKS the grid. A paying customer must not be locked
|
|
267
|
+
* out by a stray space.
|
|
268
|
+
*
|
|
269
|
+
* Applied at the head of BOTH license entry points (`_injectProductInfo` and `_getLicenseState`),
|
|
270
|
+
* never inside either one: the classifier's whole contract is that it reaches the same verdict as
|
|
271
|
+
* the frozen emitter, so trimming for one and not the other would desync them (the emitter would
|
|
272
|
+
* say `invalid` and withhold the bar while the classifier said `legacy_valid` and withheld the lock,
|
|
273
|
+
* leaving the key silently unreported). The frozen interior of the emitter is untouched - this
|
|
274
|
+
* normalizes its input, exactly like the entitlement reader's own `trim()` in `detectFormat.ts`.
|
|
275
|
+
*
|
|
276
|
+
* @param {string} [key] The license key from the grid settings.
|
|
277
|
+
* @returns {string|undefined} The key without surrounding whitespace.
|
|
278
|
+
*/ function _trimKey(key) {
|
|
279
|
+
return typeof key === 'string' ? key.trim() : key;
|
|
280
|
+
}
|
|
100
281
|
export function _injectProductInfo({ className, key, element, releaseDate }) {
|
|
282
|
+
// Reassigning the parameter, exactly as the frozen body below does with `_norm`: the legacy branch
|
|
283
|
+
// needs `key` to stay one mutable binding.
|
|
284
|
+
key = _trimKey(key);
|
|
285
|
+
// An entitlement key is routed to its own path BEFORE any legacy normalization runs. The legacy
|
|
286
|
+
// branch below is left exactly as-is, so every existing key keeps behaving the same. The shape
|
|
287
|
+
// test is two string scans, so a legacy key pays almost nothing for it.
|
|
288
|
+
if (isEntitlementKey(key)) {
|
|
289
|
+
return _injectEntitlementProductInfo({
|
|
290
|
+
className,
|
|
291
|
+
key,
|
|
292
|
+
element,
|
|
293
|
+
releaseDate
|
|
294
|
+
});
|
|
295
|
+
}
|
|
101
296
|
const hasValidType = !isEmpty(key);
|
|
102
297
|
const isNonCommercial = typeof key === 'string' && (key.toLowerCase() === 'non-commercial-and-evaluation' || key.toLowerCase() === 'ht68e-1f2b7-47158-70b05-0842f');
|
|
103
|
-
const hotVersion = "18.
|
|
298
|
+
const hotVersion = "18.1.0-rc1";
|
|
104
299
|
let keyValidityDate;
|
|
105
300
|
let consoleMessageState = 'invalid';
|
|
106
301
|
let domMessageState = 'invalid';
|
|
@@ -111,7 +306,7 @@ export function _injectProductInfo({ className, key, element, releaseDate }) {
|
|
|
111
306
|
domMessageState = 'valid';
|
|
112
307
|
} else if (hasValidType || schemaValidity) {
|
|
113
308
|
if (schemaValidity) {
|
|
114
|
-
const resolvedReleaseDate = releaseDate ?? "
|
|
309
|
+
const resolvedReleaseDate = releaseDate ?? "24/08/2026" ?? '';
|
|
115
310
|
const [dd, mm, yyyy] = resolvedReleaseDate.split('/').map(Number);
|
|
116
311
|
const releaseDays = Math.floor(Date.UTC(yyyy, mm - 1, dd) / 8.64e7);
|
|
117
312
|
const keyValidityDays = _extractTime(key);
|
|
@@ -153,7 +348,7 @@ export function _injectProductInfo({ className, key, element, releaseDate }) {
|
|
|
153
348
|
}
|
|
154
349
|
_notified = true;
|
|
155
350
|
}
|
|
156
|
-
if (domMessageState !== 'valid' && element) {
|
|
351
|
+
if (domMessageState !== 'valid' && !_rendersBlockingModal(domMessageState) && element) {
|
|
157
352
|
const message = domMessages[domMessageState]({
|
|
158
353
|
keyValidityDate,
|
|
159
354
|
hotVersion
|
|
@@ -174,6 +369,220 @@ export function _injectProductInfo({ className, key, element, releaseDate }) {
|
|
|
174
369
|
}
|
|
175
370
|
return null;
|
|
176
371
|
}
|
|
372
|
+
/* eslint-enable dot-notation, no-useless-escape, max-len, no-bitwise, computed-property-spacing, jsdoc/require-jsdoc, no-restricted-globals, no-console, prefer-const, no-unused-expressions, no-plusplus, space-infix-ops, comma-spacing, no-nested-ternary */ // ^ Everything ABOVE this line is the frozen legacy path, which needs those exemptions. Everything
|
|
373
|
+
// BELOW is ordinary new code and is linted normally - most importantly `no-restricted-globals`, so a
|
|
374
|
+
// bare `document` in the entitlement DOM builder is an error rather than a silent regression.
|
|
375
|
+
/**
|
|
376
|
+
* Formats an epoch-millisecond timestamp as the bare "YYYY-MM-DD" UTC calendar date every license
|
|
377
|
+
* message prints. An entitlement key carries its dates as such strings already - this is only used
|
|
378
|
+
* for the one date the legacy path derives from a timestamp.
|
|
379
|
+
*
|
|
380
|
+
* @param {number} timestamp The time to format, in epoch milliseconds.
|
|
381
|
+
* @returns {string}
|
|
382
|
+
*/ export function _formatIsoDate(timestamp) {
|
|
383
|
+
return new Date(timestamp).toISOString().slice(0, 10);
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Converts the build release date ("dd/mm/yyyy", as injected at build time) into the bare
|
|
387
|
+
* "YYYY-MM-DD" string a `release_until` date is compared against. The comparison is text against
|
|
388
|
+
* text - no clock takes part, so it holds on an airgapped machine and cannot differ between two
|
|
389
|
+
* timezones. Returns '' when the build date is unavailable, which the classification reads as
|
|
390
|
+
* "unknown" and fails open on.
|
|
391
|
+
*
|
|
392
|
+
* @param {string} releaseDate The build release date in "dd/mm/yyyy".
|
|
393
|
+
* @returns {string}
|
|
394
|
+
*/ function _releaseDateToIsoDate(releaseDate) {
|
|
395
|
+
const [dd, mm, yyyy] = `${releaseDate}`.split('/');
|
|
396
|
+
if (!dd || !mm || !yyyy) {
|
|
397
|
+
return '';
|
|
398
|
+
}
|
|
399
|
+
return `${yyyy}-${mm.padStart(2, '0')}-${dd.padStart(2, '0')}`;
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Both notification channels open - what every key outside the entitlement format gets, since only
|
|
403
|
+
* an entitlement key can carry the flags that close one.
|
|
404
|
+
*
|
|
405
|
+
* @type {LicenseChannels}
|
|
406
|
+
*/ const OPEN_CHANNELS = Object.freeze({
|
|
407
|
+
console: true,
|
|
408
|
+
ui: true
|
|
409
|
+
});
|
|
410
|
+
/**
|
|
411
|
+
* Builds the lifecycle facet for a state outside the entitlement format (the legacy 25-character
|
|
412
|
+
* family, a missing key, the non-commercial key, or an unreadable entitlement key).
|
|
413
|
+
*
|
|
414
|
+
* @param {string} state The state outside the entitlement format.
|
|
415
|
+
* @param {string|null} [licensedUntil] The expiration date ("YYYY-MM-DD") of a legacy expired key.
|
|
416
|
+
* @returns {LicenseLifecycleFacet}
|
|
417
|
+
*/ function _nonEntitlementLifecycle(state, licensedUntil = null) {
|
|
418
|
+
return {
|
|
419
|
+
state,
|
|
420
|
+
isTrial: false,
|
|
421
|
+
daysRemaining: null,
|
|
422
|
+
licensedUntil
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Classifies a legacy license key into its lifecycle state. This mirrors - read-only - the exact
|
|
427
|
+
* checks of the frozen legacy branch of `_injectProductInfo` (the non-commercial comparison, the
|
|
428
|
+
* empty-key test, the key schema checksum, and the release-days versus validity-days comparison),
|
|
429
|
+
* so the branding UI sees the same state the legacy console/DOM messaging acts on. The legacy
|
|
430
|
+
* emitter itself is untouched.
|
|
431
|
+
*
|
|
432
|
+
* @param {string} [key] The license key from the grid settings.
|
|
433
|
+
* @param {string} [releaseDate] The build release date ("dd/mm/yyyy").
|
|
434
|
+
* @returns {LicenseLifecycleFacet}
|
|
435
|
+
*/ function _classifyLegacyKey(key, releaseDate) {
|
|
436
|
+
const isNonCommercial = typeof key === 'string' && (key.toLowerCase() === 'non-commercial-and-evaluation' || key.toLowerCase() === 'ht68e-1f2b7-47158-70b05-0842f');
|
|
437
|
+
if (isNonCommercial) {
|
|
438
|
+
return _nonEntitlementLifecycle('non_commercial');
|
|
439
|
+
}
|
|
440
|
+
if (isEmpty(key)) {
|
|
441
|
+
return _nonEntitlementLifecycle('missing');
|
|
442
|
+
}
|
|
443
|
+
const normalizedKey = _norm(key || '');
|
|
444
|
+
if (!_checkKeySchema(normalizedKey)) {
|
|
445
|
+
return _nonEntitlementLifecycle('invalid');
|
|
446
|
+
}
|
|
447
|
+
// `??`, exactly as the frozen emitter above resolves it - reaching the same verdict it does is
|
|
448
|
+
// this function's whole contract. With `||`, an explicitly empty `releaseDate` would fall through
|
|
449
|
+
// to the build-time value here while the emitter keeps the empty string, and the two would
|
|
450
|
+
// disagree about one key: the emitter reads no date at all (so the key is valid) while this reads
|
|
451
|
+
// the build date (so the key may be expired).
|
|
452
|
+
const resolvedReleaseDate = releaseDate ?? "24/08/2026" ?? '';
|
|
453
|
+
const [dd, mm, yyyy] = resolvedReleaseDate.split('/').map(Number);
|
|
454
|
+
const releaseDays = Math.floor(Date.UTC(yyyy, mm - 1, dd) / 8.64e7);
|
|
455
|
+
const keyValidityDays = _extractTime(normalizedKey);
|
|
456
|
+
if (releaseDays > keyValidityDays) {
|
|
457
|
+
return _nonEntitlementLifecycle('legacy_expired', _formatIsoDate((keyValidityDays + 1) * 8.64e7));
|
|
458
|
+
}
|
|
459
|
+
return _nonEntitlementLifecycle('legacy_valid');
|
|
460
|
+
}
|
|
461
|
+
/**
|
|
462
|
+
* Resolves the full license state (lifecycle + channels + grants) of a license key. This is the
|
|
463
|
+
* single entry point shared by the console/DOM notification and the branding UI, so the key is
|
|
464
|
+
* classified once. A key outside the entitlement format, and an unreadable one, resolve to
|
|
465
|
+
* UNRESTRICTED grants on purpose: introducing capability gating must never take a feature away from
|
|
466
|
+
* an existing customer, and an invalid key nags - it does not strip features.
|
|
467
|
+
*
|
|
468
|
+
* @param {string} [rawKey] The license key from the grid settings, trimmed here before any classification.
|
|
469
|
+
* @param {string} [releaseDate] The build release date ("dd/mm/yyyy").
|
|
470
|
+
* @returns {LicenseStateDescriptor}
|
|
471
|
+
*/ export function _getLicenseState(rawKey, releaseDate) {
|
|
472
|
+
// The same trim the emitter applies, and for the same reason: this function must reach the emitter's
|
|
473
|
+
// verdict, so both have to see the same key.
|
|
474
|
+
const key = _trimKey(rawKey);
|
|
475
|
+
// The `*.handsontable.com` bypass applies to the whole license state, not just the console path.
|
|
476
|
+
// This is the single point that both consumers (the console/DOM notification and the branding UI)
|
|
477
|
+
// read, so honoring the bypass here keeps them consistent - without it, the app-blocking hard-stop
|
|
478
|
+
// lock would render on Handsontable's own site.
|
|
479
|
+
if (_ignored()) {
|
|
480
|
+
return {
|
|
481
|
+
lifecycle: _nonEntitlementLifecycle('legacy_valid'),
|
|
482
|
+
channels: OPEN_CHANNELS,
|
|
483
|
+
grants: UNRESTRICTED_GRANTS
|
|
484
|
+
};
|
|
485
|
+
}
|
|
486
|
+
if (!isEntitlementKey(key)) {
|
|
487
|
+
return {
|
|
488
|
+
lifecycle: _classifyLegacyKey(key, releaseDate),
|
|
489
|
+
channels: OPEN_CHANNELS,
|
|
490
|
+
grants: UNRESTRICTED_GRANTS
|
|
491
|
+
};
|
|
492
|
+
}
|
|
493
|
+
const keyData = extractEntitlementKeyData(key);
|
|
494
|
+
// A key that grants no Handsontable license - an HyperFormula-only key, for example - is not a
|
|
495
|
+
// Handsontable license, so it messages as invalid. Another product's entry never invalidates the
|
|
496
|
+
// key on its own: one install can be licensed for one product and not for another.
|
|
497
|
+
const entitlement = keyData === null ? null : getProductEntitlement(keyData, HANDSONTABLE_PRODUCT);
|
|
498
|
+
// The grants of an unreadable or foreign key stay UNRESTRICTED - this case must NOT fall through
|
|
499
|
+
// to `getLicenseGrants`, or an invalid key would report Handsontable as not-granted, the opposite
|
|
500
|
+
// of the guarantee that an invalid key unlocks everything.
|
|
501
|
+
if (keyData === null || entitlement === null) {
|
|
502
|
+
return {
|
|
503
|
+
lifecycle: _nonEntitlementLifecycle('invalid'),
|
|
504
|
+
channels: OPEN_CHANNELS,
|
|
505
|
+
grants: UNRESTRICTED_GRANTS
|
|
506
|
+
};
|
|
507
|
+
}
|
|
508
|
+
// `||`, not `??`: a caller resolving the build constant in a broken way passes '' (not
|
|
509
|
+
// undefined), and the empty string must still fall back to the build-time value.
|
|
510
|
+
const resolvedReleaseDate = releaseDate || "24/08/2026" || '';
|
|
511
|
+
const lifecycle = classifyEntitlement(entitlement, {
|
|
512
|
+
now: Date.now(),
|
|
513
|
+
buildDate: _releaseDateToIsoDate(resolvedReleaseDate)
|
|
514
|
+
});
|
|
515
|
+
return {
|
|
516
|
+
lifecycle,
|
|
517
|
+
channels: resolveChannels(entitlement),
|
|
518
|
+
grants: getLicenseGrants(keyData)
|
|
519
|
+
};
|
|
520
|
+
}
|
|
521
|
+
/**
|
|
522
|
+
* Emits the console and DOM notifications for an entitlement license key. The console message fires
|
|
523
|
+
* at most once per page and per key (via the entitlement-only `_entitlementNotified` set, kept
|
|
524
|
+
* separate from the legacy `_notified`) and picks warn/error by state; the DOM bottom bar is shown for the
|
|
525
|
+
* soft-stopped trial and for a build past its maintenance date. A key carrying `no-console-warns` or
|
|
526
|
+
* `no-ui-warns` keeps that channel shut, and the `*.handsontable.com` bypass silences both, exactly
|
|
527
|
+
* like the legacy path.
|
|
528
|
+
*
|
|
529
|
+
* @param {object} params The notification parameters.
|
|
530
|
+
* @param {string} [params.className] The notification element class name.
|
|
531
|
+
* @param {string} [params.key] The entitlement license key.
|
|
532
|
+
* @param {HTMLElement} [params.element] The container to append the bar into.
|
|
533
|
+
* @param {string} [params.releaseDate] The build release date ("dd/mm/yyyy").
|
|
534
|
+
* @returns {HTMLElement|null} The appended bar element, or `null` when none is shown.
|
|
535
|
+
*/ function _injectEntitlementProductInfo({ className, key, element, releaseDate }) {
|
|
536
|
+
if (_ignored()) {
|
|
537
|
+
return null;
|
|
538
|
+
}
|
|
539
|
+
const { lifecycle, channels } = _getLicenseState(key, releaseDate);
|
|
540
|
+
const { state } = lifecycle;
|
|
541
|
+
const params = {
|
|
542
|
+
daysRemaining: lifecycle.daysRemaining,
|
|
543
|
+
licensedUntil: lifecycle.licensedUntil ?? undefined,
|
|
544
|
+
hotVersion: "18.1.0-rc1"
|
|
545
|
+
};
|
|
546
|
+
if (channels.console && !_entitlementNotified.has(key ?? '')) {
|
|
547
|
+
// An unreadable key reuses the frozen legacy copy - it is the same failure, and the
|
|
548
|
+
// specification leaves the wording of the invalid-key message open.
|
|
549
|
+
const notification = state === 'invalid' ? {
|
|
550
|
+
severity: 'warn',
|
|
551
|
+
message: ()=>consoleMessages.invalid({})
|
|
552
|
+
} : entitlementConsoleNotifications[state];
|
|
553
|
+
if (notification) {
|
|
554
|
+
// The global `console`, not the `helpers/console` wrappers: importing them would put this
|
|
555
|
+
// module - the leaf that `function`, `object`, `string` and `dateTime` all import - at the top
|
|
556
|
+
// of a cycle (`console` imports `substitute` from `string`, and `string` imports from here).
|
|
557
|
+
// The frozen legacy path prints the same way. Disabled per line, not per file - the blanket
|
|
558
|
+
// exemptions end above, so everything else here is linted normally.
|
|
559
|
+
// eslint-disable-next-line no-console, no-restricted-globals
|
|
560
|
+
console[notification.severity](notification.message(params));
|
|
561
|
+
_entitlementNotified.add(key ?? '');
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
if (!channels.ui || !element || _rendersBlockingModal(state)) {
|
|
565
|
+
return null;
|
|
566
|
+
}
|
|
567
|
+
const buildDomMessage = entitlementDomMessages[state];
|
|
568
|
+
if (!buildDomMessage) {
|
|
569
|
+
return null;
|
|
570
|
+
}
|
|
571
|
+
// Use the target element's own document so an iframe-hosted grid builds its bar nodes in the
|
|
572
|
+
// right realm (the global `document` would be the loading window's).
|
|
573
|
+
const ownerDocument = element.ownerDocument;
|
|
574
|
+
const messageNode = ownerDocument.createElement('div');
|
|
575
|
+
const innerNode = ownerDocument.createElement('div');
|
|
576
|
+
messageNode.className = `handsontable ${className}`;
|
|
577
|
+
innerNode.className = `${className}_inner`;
|
|
578
|
+
innerNode.innerHTML = buildDomMessage(params);
|
|
579
|
+
messageNode.appendChild(innerNode);
|
|
580
|
+
element.appendChild(messageNode);
|
|
581
|
+
return messageNode;
|
|
582
|
+
}
|
|
583
|
+
/* eslint-disable dot-notation, no-useless-escape, max-len, no-bitwise, computed-property-spacing, jsdoc/require-jsdoc, prefer-const, no-unused-expressions, no-plusplus, space-infix-ops, comma-spacing, no-nested-ternary */ // The last of the frozen legacy validation: the obfuscated 25-character key-schema checksum. It
|
|
584
|
+
// carries the same exemptions as the emitter at the top of the file, re-opened here so the ordinary
|
|
585
|
+
// code between the two is linted normally.
|
|
177
586
|
function _checkKeySchema(v) {
|
|
178
587
|
let z = [][_m];
|
|
179
588
|
let p = z;
|
|
@@ -184,4 +593,4 @@ function _checkKeySchema(v) {
|
|
|
184
593
|
--j < ''[_m] ? p = p | (_pi(`${_pi(_hd(c) + (_hd(_ss(v, Math.abs(j), 2)) + String([])).padStart(2, '0'))}`) % 97 || 2) >> 1 : c = _ss(v, j, !j ? 6 : i[_m] === 1 ? 9 : 8);
|
|
185
594
|
}
|
|
186
595
|
return p === z;
|
|
187
|
-
}
|
|
596
|
+
}
|
package/helpers/moves.js
CHANGED
|
@@ -17,7 +17,8 @@ Object.defineProperty(exports, "getMoves", {
|
|
|
17
17
|
* @param {number} numberOfIndexes Number of indexes in a dataset.
|
|
18
18
|
* @returns {number} Index informing where to move the first element.
|
|
19
19
|
*/ function getMoveLine(movedIndexes, finalIndex, numberOfIndexes) {
|
|
20
|
-
const
|
|
20
|
+
const movedIndexesLookup = new Set(movedIndexes);
|
|
21
|
+
const notMovedElements = Array.from(Array(numberOfIndexes).keys()).filter((index)=>movedIndexesLookup.has(index) === false);
|
|
21
22
|
if (finalIndex === 0) {
|
|
22
23
|
return notMovedElements[finalIndex] ?? 0; // Moving before the first dataset's element.
|
|
23
24
|
}
|
package/helpers/moves.mjs
CHANGED
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
* @param {number} numberOfIndexes Number of indexes in a dataset.
|
|
8
8
|
* @returns {number} Index informing where to move the first element.
|
|
9
9
|
*/ function getMoveLine(movedIndexes, finalIndex, numberOfIndexes) {
|
|
10
|
-
const
|
|
10
|
+
const movedIndexesLookup = new Set(movedIndexes);
|
|
11
|
+
const notMovedElements = Array.from(Array(numberOfIndexes).keys()).filter((index)=>movedIndexesLookup.has(index) === false);
|
|
11
12
|
if (finalIndex === 0) {
|
|
12
13
|
return notMovedElements[finalIndex] ?? 0; // Moving before the first dataset's element.
|
|
13
14
|
}
|
package/helpers/number.d.ts
CHANGED
|
@@ -103,6 +103,28 @@ export declare function clamp(value: number, minValue: number, maxValue: number)
|
|
|
103
103
|
export declare function getParsedNumber(numericData: string, options?: {
|
|
104
104
|
decimalSeparator?: '.' | ',';
|
|
105
105
|
}): number | null;
|
|
106
|
+
/**
|
|
107
|
+
* Whether converting a plain numeric string to its parsed JS number loses information.
|
|
108
|
+
* Two situations count as lossy: trailing fractional zeros (e.g. `9.0` → `9`) and precision
|
|
109
|
+
* beyond `Number.MAX_SAFE_INTEGER` (e.g. `12345678901234567.8` → `12345678901234568`).
|
|
110
|
+
*
|
|
111
|
+
* Both the input and `String(parsedNumber)` are normalized to plain decimal notation before
|
|
112
|
+
* comparing, so purely cosmetic differences (leading zeros, a leading `+`, `.5`/`5.`, and
|
|
113
|
+
* scientific notation on either side — `1e2` vs `100`, `0.0000001` vs `1e-7`) are not treated
|
|
114
|
+
* as loss. A plain `-0` is not loss either — the parsed number `-0` keeps the sign even though
|
|
115
|
+
* `String(-0)` drops it. A mantissa trailing zero that a positive exponent shifts onto or left of the
|
|
116
|
+
* decimal point (`1.0e2` → `100`, `1.10e2` → `110`) survives as an integer digit of the exact
|
|
117
|
+
* value, so it is not loss either; only zeros that stay fractional after the shift
|
|
118
|
+
* (`1.10e1` → `11.0`) are dropped by parsing and count as lossy.
|
|
119
|
+
*
|
|
120
|
+
* Intended only for the plain float path. Thousands-grouped inputs (e.g. `7.000`) are resolved
|
|
121
|
+
* by the caller before this runs and must not be passed here.
|
|
122
|
+
*
|
|
123
|
+
* @param {string} rawInput The raw user input string.
|
|
124
|
+
* @param {number} parsedNumber The number produced from `rawInput` by `getParsedNumber`.
|
|
125
|
+
* @returns {boolean}
|
|
126
|
+
*/
|
|
127
|
+
export declare function isLossyNumericConversion(rawInput: string, parsedNumber: number): boolean;
|
|
106
128
|
/**
|
|
107
129
|
* Check if the provided argument is an unsigned number.
|
|
108
130
|
*
|
package/helpers/number.js
CHANGED
|
@@ -43,6 +43,9 @@ _export(exports, {
|
|
|
43
43
|
get isDotThousandsGroupedInteger () {
|
|
44
44
|
return isDotThousandsGroupedInteger;
|
|
45
45
|
},
|
|
46
|
+
get isLossyNumericConversion () {
|
|
47
|
+
return isLossyNumericConversion;
|
|
48
|
+
},
|
|
46
49
|
get isNumeric () {
|
|
47
50
|
return isNumeric;
|
|
48
51
|
},
|
|
@@ -173,6 +176,52 @@ function getParsedNumber(numericData, options = {}) {
|
|
|
173
176
|
}
|
|
174
177
|
return null;
|
|
175
178
|
}
|
|
179
|
+
/**
|
|
180
|
+
* Converts a decimal or scientific-notation numeric string to its plain decimal form
|
|
181
|
+
* (`1e2` → `100`, `1e-7` → `0.0000001`). Leading zeros and a leading `+` are dropped, and the
|
|
182
|
+
* `.5`/`5.` shorthands gain the missing digit. Trailing fractional zeros are kept — they carry
|
|
183
|
+
* the information [[isLossyNumericConversion]] detects. A string that does not match the plain
|
|
184
|
+
* number grammar is returned trimmed but otherwise unchanged.
|
|
185
|
+
*
|
|
186
|
+
* @param {string} numericText The numeric string to normalize.
|
|
187
|
+
* @returns {string}
|
|
188
|
+
*/ function toPlainDecimalString(numericText) {
|
|
189
|
+
const match = /^([+-]?)(\d*)(?:\.(\d*))?(?:e([+-]?\d+))?$/i.exec(numericText.trim());
|
|
190
|
+
if (match === null || match[2] === '' && (match[3] ?? '') === '') {
|
|
191
|
+
return numericText.trim();
|
|
192
|
+
}
|
|
193
|
+
const sign = match[1] === '-' ? '-' : '';
|
|
194
|
+
const integerDigits = match[2];
|
|
195
|
+
const fractionDigits = match[3] ?? '';
|
|
196
|
+
const exponent = Number.parseInt(match[4] ?? '0', 10);
|
|
197
|
+
// A double tops out near 1e308, so an exponent this large can never describe a finite
|
|
198
|
+
// number. The exponent is also the only unbounded driver of the two expansions below
|
|
199
|
+
// (the digits themselves only ever shrink or keep the string length): without this bound
|
|
200
|
+
// they allocate an enormous string or throw `RangeError: Invalid string length` for
|
|
201
|
+
// inputs like `1e999999999`. Bounding the exponent alone — not the digit count — keeps
|
|
202
|
+
// long leading-zero literals (`000…0005`) normalizing, so they do not read as lossy.
|
|
203
|
+
if (Math.abs(exponent) > 1000) {
|
|
204
|
+
return numericText.trim();
|
|
205
|
+
}
|
|
206
|
+
let digits = `${integerDigits}${fractionDigits}`;
|
|
207
|
+
let pointIndex = integerDigits.length + exponent;
|
|
208
|
+
if (pointIndex > digits.length) {
|
|
209
|
+
digits = digits.padEnd(pointIndex, '0');
|
|
210
|
+
}
|
|
211
|
+
if (pointIndex < 1) {
|
|
212
|
+
digits = `${'0'.repeat(1 - pointIndex)}${digits}`;
|
|
213
|
+
pointIndex = 1;
|
|
214
|
+
}
|
|
215
|
+
const integerPart = digits.slice(0, pointIndex).replace(/^0+(?=\d)/, '');
|
|
216
|
+
const fractionPart = digits.slice(pointIndex);
|
|
217
|
+
return `${sign}${integerPart}${fractionPart.length > 0 ? `.${fractionPart}` : ''}`;
|
|
218
|
+
}
|
|
219
|
+
function isLossyNumericConversion(rawInput, parsedNumber) {
|
|
220
|
+
// `String(-0)` drops the sign (`"0"`), but the number `-0` stores the sign exactly, so a
|
|
221
|
+
// plain `-0` input round-trips without loss and must not read as lossy.
|
|
222
|
+
const parsedNumberText = Object.is(parsedNumber, -0) ? '-0' : String(parsedNumber);
|
|
223
|
+
return toPlainDecimalString(rawInput.replace(',', '.')) !== toPlainDecimalString(parsedNumberText);
|
|
224
|
+
}
|
|
176
225
|
function isUnsignedNumber(value) {
|
|
177
226
|
return Number.isInteger(value) && typeof value === 'number' && value >= 0;
|
|
178
227
|
}
|
package/helpers/number.mjs
CHANGED
|
@@ -192,6 +192,72 @@
|
|
|
192
192
|
}
|
|
193
193
|
return null;
|
|
194
194
|
}
|
|
195
|
+
/**
|
|
196
|
+
* Converts a decimal or scientific-notation numeric string to its plain decimal form
|
|
197
|
+
* (`1e2` → `100`, `1e-7` → `0.0000001`). Leading zeros and a leading `+` are dropped, and the
|
|
198
|
+
* `.5`/`5.` shorthands gain the missing digit. Trailing fractional zeros are kept — they carry
|
|
199
|
+
* the information [[isLossyNumericConversion]] detects. A string that does not match the plain
|
|
200
|
+
* number grammar is returned trimmed but otherwise unchanged.
|
|
201
|
+
*
|
|
202
|
+
* @param {string} numericText The numeric string to normalize.
|
|
203
|
+
* @returns {string}
|
|
204
|
+
*/ function toPlainDecimalString(numericText) {
|
|
205
|
+
const match = /^([+-]?)(\d*)(?:\.(\d*))?(?:e([+-]?\d+))?$/i.exec(numericText.trim());
|
|
206
|
+
if (match === null || match[2] === '' && (match[3] ?? '') === '') {
|
|
207
|
+
return numericText.trim();
|
|
208
|
+
}
|
|
209
|
+
const sign = match[1] === '-' ? '-' : '';
|
|
210
|
+
const integerDigits = match[2];
|
|
211
|
+
const fractionDigits = match[3] ?? '';
|
|
212
|
+
const exponent = Number.parseInt(match[4] ?? '0', 10);
|
|
213
|
+
// A double tops out near 1e308, so an exponent this large can never describe a finite
|
|
214
|
+
// number. The exponent is also the only unbounded driver of the two expansions below
|
|
215
|
+
// (the digits themselves only ever shrink or keep the string length): without this bound
|
|
216
|
+
// they allocate an enormous string or throw `RangeError: Invalid string length` for
|
|
217
|
+
// inputs like `1e999999999`. Bounding the exponent alone — not the digit count — keeps
|
|
218
|
+
// long leading-zero literals (`000…0005`) normalizing, so they do not read as lossy.
|
|
219
|
+
if (Math.abs(exponent) > 1000) {
|
|
220
|
+
return numericText.trim();
|
|
221
|
+
}
|
|
222
|
+
let digits = `${integerDigits}${fractionDigits}`;
|
|
223
|
+
let pointIndex = integerDigits.length + exponent;
|
|
224
|
+
if (pointIndex > digits.length) {
|
|
225
|
+
digits = digits.padEnd(pointIndex, '0');
|
|
226
|
+
}
|
|
227
|
+
if (pointIndex < 1) {
|
|
228
|
+
digits = `${'0'.repeat(1 - pointIndex)}${digits}`;
|
|
229
|
+
pointIndex = 1;
|
|
230
|
+
}
|
|
231
|
+
const integerPart = digits.slice(0, pointIndex).replace(/^0+(?=\d)/, '');
|
|
232
|
+
const fractionPart = digits.slice(pointIndex);
|
|
233
|
+
return `${sign}${integerPart}${fractionPart.length > 0 ? `.${fractionPart}` : ''}`;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Whether converting a plain numeric string to its parsed JS number loses information.
|
|
237
|
+
* Two situations count as lossy: trailing fractional zeros (e.g. `9.0` → `9`) and precision
|
|
238
|
+
* beyond `Number.MAX_SAFE_INTEGER` (e.g. `12345678901234567.8` → `12345678901234568`).
|
|
239
|
+
*
|
|
240
|
+
* Both the input and `String(parsedNumber)` are normalized to plain decimal notation before
|
|
241
|
+
* comparing, so purely cosmetic differences (leading zeros, a leading `+`, `.5`/`5.`, and
|
|
242
|
+
* scientific notation on either side — `1e2` vs `100`, `0.0000001` vs `1e-7`) are not treated
|
|
243
|
+
* as loss. A plain `-0` is not loss either — the parsed number `-0` keeps the sign even though
|
|
244
|
+
* `String(-0)` drops it. A mantissa trailing zero that a positive exponent shifts onto or left of the
|
|
245
|
+
* decimal point (`1.0e2` → `100`, `1.10e2` → `110`) survives as an integer digit of the exact
|
|
246
|
+
* value, so it is not loss either; only zeros that stay fractional after the shift
|
|
247
|
+
* (`1.10e1` → `11.0`) are dropped by parsing and count as lossy.
|
|
248
|
+
*
|
|
249
|
+
* Intended only for the plain float path. Thousands-grouped inputs (e.g. `7.000`) are resolved
|
|
250
|
+
* by the caller before this runs and must not be passed here.
|
|
251
|
+
*
|
|
252
|
+
* @param {string} rawInput The raw user input string.
|
|
253
|
+
* @param {number} parsedNumber The number produced from `rawInput` by `getParsedNumber`.
|
|
254
|
+
* @returns {boolean}
|
|
255
|
+
*/ export function isLossyNumericConversion(rawInput, parsedNumber) {
|
|
256
|
+
// `String(-0)` drops the sign (`"0"`), but the number `-0` stores the sign exactly, so a
|
|
257
|
+
// plain `-0` input round-trips without loss and must not read as lossy.
|
|
258
|
+
const parsedNumberText = Object.is(parsedNumber, -0) ? '-0' : String(parsedNumber);
|
|
259
|
+
return toPlainDecimalString(rawInput.replace(',', '.')) !== toPlainDecimalString(parsedNumberText);
|
|
260
|
+
}
|
|
195
261
|
/**
|
|
196
262
|
* Check if the provided argument is an unsigned number.
|
|
197
263
|
*
|