handsontable 0.0.0-next-827c165-20240604 → 0.0.0-next-7230ce6-20240605

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of handsontable might be problematic. Click here for more details.

@@ -25,8 +25,8 @@
25
25
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
26
26
  * USE OR INABILITY TO USE THIS SOFTWARE.
27
27
  *
28
- * Version: 0.0.0-next-827c165-20240604
29
- * Release date: 16/04/2024 (built at 04/06/2024 07:44:55)
28
+ * Version: 0.0.0-next-7230ce6-20240605
29
+ * Release date: 16/04/2024 (built at 05/06/2024 11:36:56)
30
30
  */
31
31
  (function webpackUniversalModuleDefinition(root, factory) {
32
32
  if(typeof exports === 'object' && typeof module === 'object')
@@ -107,8 +107,8 @@ Handsontable.hooks = _pluginHooks.default.getSingleton();
107
107
  Handsontable.CellCoords = _src.CellCoords;
108
108
  Handsontable.CellRange = _src.CellRange;
109
109
  Handsontable.packageName = 'handsontable';
110
- Handsontable.buildDate = "04/06/2024 07:44:55";
111
- Handsontable.version = "0.0.0-next-827c165-20240604";
110
+ Handsontable.buildDate = "05/06/2024 11:36:56";
111
+ Handsontable.version = "0.0.0-next-7230ce6-20240605";
112
112
  Handsontable.languages = {
113
113
  dictionaryKeys: _registry.dictionaryKeys,
114
114
  getLanguageDictionary: _registry.getLanguageDictionary,
@@ -9129,7 +9129,7 @@ const domMessages = {
9129
9129
  function _injectProductInfo(key, element) {
9130
9130
  const hasValidType = !isEmpty(key);
9131
9131
  const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
9132
- const hotVersion = "0.0.0-next-827c165-20240604";
9132
+ const hotVersion = "0.0.0-next-7230ce6-20240605";
9133
9133
  let keyValidityDate;
9134
9134
  let consoleMessageState = 'invalid';
9135
9135
  let domMessageState = 'invalid';
@@ -79743,36 +79743,42 @@ class MergeCells extends _base.BasePlugin {
79743
79743
  * @param {Array|boolean} settings The settings provided to the plugin.
79744
79744
  */
79745
79745
  generateFromSettings(settings) {
79746
- if (Array.isArray(settings)) {
79747
- const populatedNulls = [];
79748
- (0, _array.arrayEach)(settings, setting => {
79749
- if (!this.validateSetting(setting)) {
79750
- return;
79746
+ if (!Array.isArray(settings)) {
79747
+ return;
79748
+ }
79749
+ const validSettings = settings.filter(mergeCellInfo => this.validateSetting(mergeCellInfo));
79750
+ const nonOverlappingSettings = this.mergedCellsCollection.filterOverlappingMergeCells(validSettings);
79751
+ const populatedNulls = [];
79752
+ nonOverlappingSettings.forEach(mergeCellInfo => {
79753
+ const {
79754
+ row,
79755
+ col,
79756
+ rowspan,
79757
+ colspan
79758
+ } = mergeCellInfo;
79759
+ const from = this.hot._createCellCoords(row, col);
79760
+ const to = this.hot._createCellCoords(row + rowspan - 1, col + colspan - 1);
79761
+ const mergeRange = this.hot._createCellRange(from, from, to);
79762
+
79763
+ // Merging without data population.
79764
+ this.mergeRange(mergeRange, true, true);
79765
+ for (let r = row; r < row + rowspan; r++) {
79766
+ for (let c = col; c < col + colspan; c++) {
79767
+ // Not resetting a cell representing a merge area's value.
79768
+ if (r !== row || c !== col) {
79769
+ populatedNulls.push([r, c, null]);
79770
+ }
79751
79771
  }
79752
- const highlight = this.hot._createCellCoords(setting.row, setting.col);
79753
- const rangeEnd = this.hot._createCellCoords(setting.row + setting.rowspan - 1, setting.col + setting.colspan - 1);
79754
- const mergeRange = this.hot._createCellRange(highlight, highlight, rangeEnd);
79755
-
79756
- // Merging without data population.
79757
- this.mergeRange(mergeRange, true, true);
79758
- (0, _number.rangeEach)(setting.row, setting.row + setting.rowspan - 1, rowIndex => {
79759
- (0, _number.rangeEach)(setting.col, setting.col + setting.colspan - 1, columnIndex => {
79760
- // Not resetting a cell representing a merge area's value.
79761
- if ((rowIndex === setting.row && columnIndex === setting.col) === false) {
79762
- populatedNulls.push([rowIndex, columnIndex, null]);
79763
- }
79764
- });
79765
- });
79766
- });
79767
-
79768
- // There are no merged cells. Thus, no data population is needed.
79769
- if (populatedNulls.length === 0) {
79770
- return;
79771
79772
  }
79773
+ });
79772
79774
 
79773
- // TODO: Change the `source` argument to a more meaningful value, e.g. `${this.pluginName}.clearCells`.
79774
- this.hot.setDataAtCell(populatedNulls, undefined, undefined, this.pluginName);
79775
+ // There are no merged cells. Thus, no data population is needed.
79776
+ if (populatedNulls.length === 0) {
79777
+ return;
79775
79778
  }
79779
+
79780
+ // TODO: Change the `source` argument to a more meaningful value, e.g. `${this.pluginName}.clearCells`.
79781
+ this.hot.setDataAtCell(populatedNulls, undefined, undefined, this.pluginName);
79776
79782
  }
79777
79783
 
79778
79784
  /**
@@ -79878,7 +79884,7 @@ class MergeCells extends _base.BasePlugin {
79878
79884
  });
79879
79885
  });
79880
79886
  this.hot.setCellMeta(mergeParent.row, mergeParent.col, 'spanned', true);
79881
- const mergedCellAdded = this.mergedCellsCollection.add(mergeParent);
79887
+ const mergedCellAdded = this.mergedCellsCollection.add(mergeParent, auto);
79882
79888
  if (mergedCellAdded) {
79883
79889
  if (preventPopulation) {
79884
79890
  populationInfo = [mergeParent.row, mergeParent.col, clearedData];
@@ -80422,9 +80428,9 @@ function _addMergeActionsToContextMenu(defaultOptions) {
80422
80428
  */
80423
80429
  function _onAfterRenderer(TD, row, col) {
80424
80430
  const mergedCell = this.mergedCellsCollection.get(row, col);
80425
- // We shouldn't override data in the collection.
80426
- const mergedCellCopy = (0, _object.isObject)(mergedCell) ? (0, _object.clone)(mergedCell) : undefined;
80427
- if ((0, _object.isObject)(mergedCellCopy)) {
80431
+ if ((0, _object.isObject)(mergedCell)) {
80432
+ // We shouldn't override data in the collection.
80433
+ const mergedCellCopy = (0, _object.clone)(mergedCell);
80428
80434
  const {
80429
80435
  rowIndexMapper: rowMapper,
80430
80436
  columnIndexMapper: columnMapper
@@ -80449,8 +80455,10 @@ function _onAfterRenderer(TD, row, col) {
80449
80455
  mergedCellCopy.rowspan = Math.min(mergedCellCopy.rowspan, maxRowSpan);
80450
80456
  // The `colSpan` property for a `TD` element should be at most equal to number of rendered columns in the merge area.
80451
80457
  mergedCellCopy.colspan = Math.min(mergedCellCopy.colspan, maxColSpan);
80458
+ (0, _utils.applySpanProperties)(TD, mergedCellCopy, row, col);
80459
+ } else {
80460
+ (0, _utils.applySpanProperties)(TD, null, row, col);
80452
80461
  }
80453
- (0, _utils.applySpanProperties)(TD, mergedCellCopy, row, col);
80454
80462
  }
80455
80463
  /**
80456
80464
  * Clears the last selected coordinates before setting a new selection range.
@@ -80785,9 +80793,15 @@ class MergedCellsCollection {
80785
80793
  /**
80786
80794
  * Array of merged cells.
80787
80795
  *
80788
- * @type {Array}
80796
+ * @type {MergedCellCoords[]}
80789
80797
  */
80790
80798
  (0, _defineProperty2.default)(this, "mergedCells", []);
80799
+ /**
80800
+ * Matrix of cells (row, col) that points to the instances of the MergedCellCoords objects.
80801
+ *
80802
+ * @type {Array}
80803
+ */
80804
+ (0, _defineProperty2.default)(this, "mergedCellsMatrix", new Map());
80791
80805
  /**
80792
80806
  * The Handsontable instance.
80793
80807
  *
@@ -80819,16 +80833,11 @@ class MergedCellsCollection {
80819
80833
  * @returns {MergedCellCoords|boolean} Returns a wanted merged cell on success and `false` on failure.
80820
80834
  */
80821
80835
  get(row, column) {
80822
- const mergedCells = this.mergedCells;
80823
- let result = false;
80824
- (0, _array.arrayEach)(mergedCells, mergedCell => {
80825
- if (mergedCell.row <= row && mergedCell.row + mergedCell.rowspan - 1 >= row && mergedCell.col <= column && mergedCell.col + mergedCell.colspan - 1 >= column) {
80826
- result = mergedCell;
80827
- return false;
80828
- }
80829
- return true;
80830
- });
80831
- return result;
80836
+ var _this$mergedCellsMatr;
80837
+ if (!this.mergedCellsMatrix.has(row)) {
80838
+ return false;
80839
+ }
80840
+ return (_this$mergedCellsMatr = this.mergedCellsMatrix.get(row).get(column)) !== null && _this$mergedCellsMatr !== void 0 ? _this$mergedCellsMatr : false;
80832
80841
  }
80833
80842
 
80834
80843
  /**
@@ -80838,9 +80847,8 @@ class MergedCellsCollection {
80838
80847
  * @returns {MergedCellCoords|boolean}
80839
80848
  */
80840
80849
  getByRange(range) {
80841
- const mergedCells = this.mergedCells;
80842
80850
  let result = false;
80843
- (0, _array.arrayEach)(mergedCells, mergedCell => {
80851
+ (0, _array.arrayEach)(this.mergedCells, mergedCell => {
80844
80852
  if (mergedCell.row <= range.from.row && mergedCell.row + mergedCell.rowspan - 1 >= range.to.row && mergedCell.col <= range.from.col && mergedCell.col + mergedCell.colspan - 1 >= range.to.col) {
80845
80853
  result = mergedCell;
80846
80854
  return result;
@@ -80850,6 +80858,59 @@ class MergedCellsCollection {
80850
80858
  return result;
80851
80859
  }
80852
80860
 
80861
+ /**
80862
+ * Filters merge cells objects provided by users from overlapping cells.
80863
+ *
80864
+ * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCellsInfo The merged cell information object.
80865
+ * Has to contain `row`, `col`, `colspan` and `rowspan` properties.
80866
+ * @returns {Array<{ row: number, col: number, rowspan: number, colspan: number }>}
80867
+ */
80868
+ filterOverlappingMergeCells(mergedCellsInfo) {
80869
+ const occupiedCells = new Set();
80870
+ this.mergedCells.forEach(mergedCell => {
80871
+ const {
80872
+ row,
80873
+ col,
80874
+ colspan,
80875
+ rowspan
80876
+ } = mergedCell;
80877
+ for (let r = row; r < row + rowspan; r++) {
80878
+ for (let c = col; c < col + colspan; c++) {
80879
+ occupiedCells.add(`r${r},c${c}`);
80880
+ }
80881
+ }
80882
+ });
80883
+ const filteredMergeCells = mergedCellsInfo.filter(mergedCell => {
80884
+ const {
80885
+ row,
80886
+ col,
80887
+ colspan,
80888
+ rowspan
80889
+ } = mergedCell;
80890
+ const localOccupiedCells = new Set();
80891
+ let isOverlapping = false;
80892
+ for (let r = row; r < row + rowspan; r++) {
80893
+ for (let c = col; c < col + colspan; c++) {
80894
+ const cellId = `r${r},c${c}`;
80895
+ if (occupiedCells.has(cellId)) {
80896
+ (0, _console.warn)(MergedCellsCollection.IS_OVERLAPPING_WARNING(mergedCell));
80897
+ isOverlapping = true;
80898
+ break;
80899
+ }
80900
+ localOccupiedCells.add(cellId);
80901
+ }
80902
+ if (isOverlapping) {
80903
+ break;
80904
+ }
80905
+ }
80906
+ if (!isOverlapping) {
80907
+ occupiedCells.add(...localOccupiedCells);
80908
+ }
80909
+ return !isOverlapping;
80910
+ });
80911
+ return filteredMergeCells;
80912
+ }
80913
+
80853
80914
  /**
80854
80915
  * Get a merged cell contained in the provided range.
80855
80916
  *
@@ -80859,7 +80920,6 @@ class MergedCellsCollection {
80859
80920
  */
80860
80921
  getWithinRange(range) {
80861
80922
  let countPartials = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
80862
- const mergedCells = this.mergedCells;
80863
80923
  const foundMergedCells = [];
80864
80924
  let testedRange = range;
80865
80925
  if (!testedRange.includesRange) {
@@ -80867,7 +80927,7 @@ class MergedCellsCollection {
80867
80927
  const to = this.hot._createCellCoords(testedRange.to.row, testedRange.to.col);
80868
80928
  testedRange = this.hot._createCellRange(from, from, to);
80869
80929
  }
80870
- (0, _array.arrayEach)(mergedCells, mergedCell => {
80930
+ (0, _array.arrayEach)(this.mergedCells, mergedCell => {
80871
80931
  const mergedCellTopLeft = this.hot._createCellCoords(mergedCell.row, mergedCell.col);
80872
80932
  const mergedCellBottomRight = this.hot._createCellCoords(mergedCell.row + mergedCell.rowspan - 1, mergedCell.col + mergedCell.colspan - 1);
80873
80933
  const mergedCellRange = this.hot._createCellRange(mergedCellTopLeft, mergedCellTopLeft, mergedCellBottomRight);
@@ -80886,22 +80946,24 @@ class MergedCellsCollection {
80886
80946
  * Add a merged cell to the container.
80887
80947
  *
80888
80948
  * @param {object} mergedCellInfo The merged cell information object. Has to contain `row`, `col`, `colspan` and `rowspan` properties.
80949
+ * @param {boolean} [auto=false] `true` if called internally by the plugin (usually in batch).
80889
80950
  * @returns {MergedCellCoords|boolean} Returns the new merged cell on success and `false` on failure.
80890
80951
  */
80891
80952
  add(mergedCellInfo) {
80892
- const mergedCells = this.mergedCells;
80953
+ let auto = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
80893
80954
  const row = mergedCellInfo.row;
80894
80955
  const column = mergedCellInfo.col;
80895
80956
  const rowspan = mergedCellInfo.rowspan;
80896
80957
  const colspan = mergedCellInfo.colspan;
80897
80958
  const newMergedCell = new _cellCoords.default(row, column, rowspan, colspan, this.hot._createCellCoords, this.hot._createCellRange);
80898
80959
  const alreadyExists = this.get(row, column);
80899
- const isOverlapping = this.isOverlapping(newMergedCell);
80960
+ const isOverlapping = auto ? false : this.isOverlapping(newMergedCell);
80900
80961
  if (!alreadyExists && !isOverlapping) {
80901
80962
  if (this.hot) {
80902
80963
  newMergedCell.normalize(this.hot);
80903
80964
  }
80904
- mergedCells.push(newMergedCell);
80965
+ this.mergedCells.push(newMergedCell);
80966
+ _assertClassBrand(_MergedCellsCollection_brand, this, _addMergedCellToMatrix).call(this, newMergedCell);
80905
80967
  return newMergedCell;
80906
80968
  }
80907
80969
  (0, _console.warn)(MergedCellsCollection.IS_OVERLAPPING_WARNING(newMergedCell));
@@ -80917,12 +80979,12 @@ class MergedCellsCollection {
80917
80979
  * @returns {MergedCellCoords|boolean} Returns the removed merged cell on success and `false` on failure.
80918
80980
  */
80919
80981
  remove(row, column) {
80920
- const mergedCells = this.mergedCells;
80921
- const wantedCollection = this.get(row, column);
80922
- const wantedCollectionIndex = wantedCollection ? this.mergedCells.indexOf(wantedCollection) : -1;
80923
- if (wantedCollection && wantedCollectionIndex !== -1) {
80924
- mergedCells.splice(wantedCollectionIndex, 1);
80925
- return wantedCollection;
80982
+ const mergedCell = this.get(row, column);
80983
+ const mergedCellIndex = mergedCell ? this.mergedCells.indexOf(mergedCell) : -1;
80984
+ if (mergedCell && mergedCellIndex !== -1) {
80985
+ this.mergedCells.splice(mergedCellIndex, 1);
80986
+ _assertClassBrand(_MergedCellsCollection_brand, this, _removeMergedCellFromMatrix).call(this, mergedCell);
80987
+ return mergedCell;
80926
80988
  }
80927
80989
  return false;
80928
80990
  }
@@ -80931,16 +80993,16 @@ class MergedCellsCollection {
80931
80993
  * Clear all the merged cells.
80932
80994
  */
80933
80995
  clear() {
80934
- const mergedCells = this.mergedCells;
80935
80996
  const mergedCellParentsToClear = [];
80936
80997
  const hiddenCollectionElements = [];
80937
- (0, _array.arrayEach)(mergedCells, mergedCell => {
80998
+ (0, _array.arrayEach)(this.mergedCells, mergedCell => {
80938
80999
  const TD = this.hot.getCell(mergedCell.row, mergedCell.col);
80939
81000
  if (TD) {
80940
81001
  mergedCellParentsToClear.push([TD, this.get(mergedCell.row, mergedCell.col), mergedCell.row, mergedCell.col]);
80941
81002
  }
80942
81003
  });
80943
81004
  this.mergedCells.length = 0;
81005
+ this.mergedCellsMatrix = new Map();
80944
81006
  (0, _array.arrayEach)(mergedCellParentsToClear, (mergedCell, i) => {
80945
81007
  (0, _number.rangeEach)(0, mergedCell.rowspan - 1, j => {
80946
81008
  (0, _number.rangeEach)(0, mergedCell.colspan - 1, k => {
@@ -80963,23 +81025,21 @@ class MergedCellsCollection {
80963
81025
  }
80964
81026
 
80965
81027
  /**
80966
- * Check if the provided merged cell overlaps with the others in the container.
81028
+ * Check if the provided merged cell overlaps with the others already added.
80967
81029
  *
80968
81030
  * @param {MergedCellCoords} mergedCell The merged cell to check against all others in the container.
80969
81031
  * @returns {boolean} `true` if the provided merged cell overlaps with the others, `false` otherwise.
80970
81032
  */
80971
81033
  isOverlapping(mergedCell) {
80972
- const mergedCellRange = this.hot._createCellRange(this.hot._createCellCoords(0, 0), this.hot._createCellCoords(mergedCell.row, mergedCell.col), this.hot._createCellCoords(mergedCell.row + mergedCell.rowspan - 1, mergedCell.col + mergedCell.colspan - 1));
80973
- let result = false;
80974
- (0, _array.arrayEach)(this.mergedCells, col => {
80975
- const currentRange = this.hot._createCellRange(this.hot._createCellCoords(0, 0), this.hot._createCellCoords(col.row, col.col), this.hot._createCellCoords(col.row + col.rowspan - 1, col.col + col.colspan - 1));
80976
- if (currentRange.overlaps(mergedCellRange)) {
80977
- result = true;
80978
- return false;
81034
+ const mergedCellRange = mergedCell.getRange();
81035
+ for (let i = 0; i < this.mergedCells.length; i++) {
81036
+ const otherMergedCell = this.mergedCells[i];
81037
+ const otherMergedCellRange = otherMergedCell.getRange();
81038
+ if (otherMergedCellRange.overlaps(mergedCellRange)) {
81039
+ return true;
80979
81040
  }
80980
- return true;
80981
- });
80982
- return result;
81041
+ }
81042
+ return false;
80983
81043
  }
80984
81044
 
80985
81045
  /**
@@ -81114,15 +81174,24 @@ class MergedCellsCollection {
81114
81174
  default:
81115
81175
  }
81116
81176
  (0, _array.arrayEach)(this.mergedCells, currentMerge => {
81177
+ _assertClassBrand(_MergedCellsCollection_brand, this, _removeMergedCellFromMatrix).call(this, currentMerge);
81117
81178
  currentMerge.shift(shiftVector, index);
81179
+ _assertClassBrand(_MergedCellsCollection_brand, this, _addMergedCellToMatrix).call(this, currentMerge);
81118
81180
  });
81119
81181
  (0, _number.rangeEachReverse)(this.mergedCells.length - 1, 0, i => {
81120
81182
  const currentMerge = this.mergedCells[i];
81121
81183
  if (currentMerge && currentMerge.removed) {
81122
81184
  this.mergedCells.splice(this.mergedCells.indexOf(currentMerge), 1);
81185
+ _assertClassBrand(_MergedCellsCollection_brand, this, _removeMergedCellFromMatrix).call(this, currentMerge);
81123
81186
  }
81124
81187
  });
81125
81188
  }
81189
+
81190
+ /**
81191
+ * Adds a merged cell to the matrix.
81192
+ *
81193
+ * @param {MergedCellCoords} mergedCell The merged cell to add.
81194
+ */
81126
81195
  }
81127
81196
  function _getNonIntersectingIndexes(range, axis) {
81128
81197
  let scanDirection = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
@@ -81151,6 +81220,28 @@ function _getNonIntersectingIndexes(range, axis) {
81151
81220
  return Array.from(set);
81152
81221
  })));
81153
81222
  }
81223
+ function _addMergedCellToMatrix(mergedCell) {
81224
+ for (let row = mergedCell.row; row < mergedCell.row + mergedCell.rowspan; row++) {
81225
+ for (let col = mergedCell.col; col < mergedCell.col + mergedCell.colspan; col++) {
81226
+ if (!this.mergedCellsMatrix.has(row)) {
81227
+ this.mergedCellsMatrix.set(row, new Map());
81228
+ }
81229
+ this.mergedCellsMatrix.get(row).set(col, mergedCell);
81230
+ }
81231
+ }
81232
+ }
81233
+ /**
81234
+ * Removes a merged cell from the matrix.
81235
+ *
81236
+ * @param {MergedCellCoords} mergedCell The merged cell to remove.
81237
+ */
81238
+ function _removeMergedCellFromMatrix(mergedCell) {
81239
+ for (let row = mergedCell.row; row < mergedCell.row + mergedCell.rowspan; row++) {
81240
+ for (let col = mergedCell.col; col < mergedCell.col + mergedCell.colspan; col++) {
81241
+ this.mergedCellsMatrix.get(row).delete(col);
81242
+ }
81243
+ }
81244
+ }
81154
81245
  var _default = exports["default"] = MergedCellsCollection;
81155
81246
 
81156
81247
  /***/ }),
@@ -81162,14 +81253,21 @@ var _default = exports["default"] = MergedCellsCollection;
81162
81253
 
81163
81254
  var _interopRequireDefault = __webpack_require__(1);
81164
81255
  exports.__esModule = true;
81256
+ __webpack_require__(8);
81165
81257
  var _defineProperty2 = _interopRequireDefault(__webpack_require__(153));
81166
81258
  var _templateLiteralTag = __webpack_require__(143);
81259
+ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
81260
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
81261
+ function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
81262
+ function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
81263
+ function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
81167
81264
  /**
81168
81265
  * The `MergedCellCoords` class represents a single merged cell.
81169
81266
  *
81170
81267
  * @private
81171
81268
  * @class MergedCellCoords
81172
81269
  */
81270
+ var _cellRange = /*#__PURE__*/new WeakMap();
81173
81271
  class MergedCellCoords {
81174
81272
  constructor(row, column, rowspan, colspan, cellCoordsFactory, cellRangeFactory) {
81175
81273
  /**
@@ -81214,6 +81312,12 @@ class MergedCellCoords {
81214
81312
  * @type {Function}
81215
81313
  */
81216
81314
  (0, _defineProperty2.default)(this, "cellRangeFactory", void 0);
81315
+ /**
81316
+ * The cached range coordinates of the merged cell.
81317
+ *
81318
+ * @type {CellRange}
81319
+ */
81320
+ _classPrivateFieldInitSpec(this, _cellRange, null);
81217
81321
  this.row = row;
81218
81322
  this.col = column;
81219
81323
  this.rowspan = rowspan;
@@ -81335,6 +81439,7 @@ class MergedCellCoords {
81335
81439
  if (this.col + this.colspan > totalColumns - 1) {
81336
81440
  this.colspan = totalColumns - this.col;
81337
81441
  }
81442
+ _classPrivateFieldSet(_cellRange, this, null);
81338
81443
  }
81339
81444
 
81340
81445
  /**
@@ -81399,6 +81504,7 @@ class MergedCellCoords {
81399
81504
  // removing the whole merge
81400
81505
  if (changeStart <= mergeStart && changeEnd >= mergeEnd) {
81401
81506
  this.removed = true;
81507
+ _classPrivateFieldSet(_cellRange, this, null);
81402
81508
  return false;
81403
81509
 
81404
81510
  // removing the merge partially, including the beginning
@@ -81418,6 +81524,7 @@ class MergedCellCoords {
81418
81524
  this[span] -= removedPart;
81419
81525
  }
81420
81526
  }
81527
+ _classPrivateFieldSet(_cellRange, this, null);
81421
81528
  return true;
81422
81529
  }
81423
81530
 
@@ -81468,7 +81575,10 @@ class MergedCellCoords {
81468
81575
  * @returns {CellRange}
81469
81576
  */
81470
81577
  getRange() {
81471
- return this.cellRangeFactory(this.cellCoordsFactory(this.row, this.col), this.cellCoordsFactory(this.row, this.col), this.cellCoordsFactory(this.getLastRow(), this.getLastColumn()));
81578
+ if (!_classPrivateFieldGet(_cellRange, this)) {
81579
+ _classPrivateFieldSet(_cellRange, this, this.cellRangeFactory(this.cellCoordsFactory(this.row, this.col), this.cellCoordsFactory(this.row, this.col), this.cellCoordsFactory(this.getLastRow(), this.getLastColumn())));
81580
+ }
81581
+ return _classPrivateFieldGet(_cellRange, this);
81472
81582
  }
81473
81583
  }
81474
81584
  var _default = exports["default"] = MergedCellCoords;
@@ -25,8 +25,8 @@
25
25
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
26
26
  * USE OR INABILITY TO USE THIS SOFTWARE.
27
27
  *
28
- * Version: 0.0.0-next-827c165-20240604
29
- * Release date: 16/04/2024 (built at 04/06/2024 07:45:14)
28
+ * Version: 0.0.0-next-7230ce6-20240605
29
+ * Release date: 16/04/2024 (built at 05/06/2024 11:37:15)
30
30
  */.handsontable .table td,.handsontable .table th{border-top:none}.handsontable tr{background:#fff}.handsontable td{background-color:inherit}.handsontable .table caption+thead tr:first-child td,.handsontable .table caption+thead tr:first-child th,.handsontable .table colgroup+thead tr:first-child td,.handsontable .table colgroup+thead tr:first-child th,.handsontable .table thead:first-child tr:first-child td,.handsontable .table thead:first-child tr:first-child th{border-top:1px solid #ccc}.handsontable .table-bordered{border:0;border-collapse:separate}.handsontable .table-bordered td,.handsontable .table-bordered th{border-left:none}.handsontable .table-bordered td:first-child,.handsontable .table-bordered th:first-child{border-left:1px solid #ccc}.handsontable .table>tbody>tr>td,.handsontable .table>tbody>tr>th,.handsontable .table>tfoot>tr>td,.handsontable .table>tfoot>tr>th,.handsontable .table>thead>tr>td,.handsontable .table>thead>tr>th{line-height:21px;padding:0}.col-lg-1.handsontable,.col-lg-10.handsontable,.col-lg-11.handsontable,.col-lg-12.handsontable,.col-lg-2.handsontable,.col-lg-3.handsontable,.col-lg-4.handsontable,.col-lg-5.handsontable,.col-lg-6.handsontable,.col-lg-7.handsontable,.col-lg-8.handsontable,.col-lg-9.handsontable,.col-md-1.handsontable,.col-md-10.handsontable,.col-md-11.handsontable,.col-md-12.handsontable,.col-md-2.handsontable,.col-md-3.handsontable,.col-md-4.handsontable,.col-md-5.handsontable,.col-md-6.handsontable,.col-md-7.handsontable,.col-md-8.handsontable,.col-md-9.handsontable .col-sm-1.handsontable,.col-sm-10.handsontable,.col-sm-11.handsontable,.col-sm-12.handsontable,.col-sm-2.handsontable,.col-sm-3.handsontable,.col-sm-4.handsontable,.col-sm-5.handsontable,.col-sm-6.handsontable,.col-sm-7.handsontable,.col-sm-8.handsontable,.col-sm-9.handsontable .col-xs-1.handsontable,.col-xs-10.handsontable,.col-xs-11.handsontable,.col-xs-12.handsontable,.col-xs-2.handsontable,.col-xs-3.handsontable,.col-xs-4.handsontable,.col-xs-5.handsontable,.col-xs-6.handsontable,.col-xs-7.handsontable,.col-xs-8.handsontable,.col-xs-9.handsontable{padding-left:0;padding-right:0}.handsontable .table-striped>tbody>tr:nth-of-type(2n){background-color:#fff}.handsontable{position:relative}.handsontable .hide{display:none}.handsontable .relative{position:relative}.handsontable .wtHider{width:0}.handsontable .wtSpreader{height:auto;position:relative;width:0}.handsontable div,.handsontable input,.handsontable table,.handsontable tbody,.handsontable td,.handsontable textarea,.handsontable th,.handsontable thead{box-sizing:content-box;-webkit-box-sizing:content-box;-moz-box-sizing:content-box}.handsontable input,.handsontable textarea{min-height:auto}.handsontable table.htCore{border-collapse:separate;border-spacing:0;border-width:0;cursor:default;margin:0;max-height:none;max-width:none;outline-width:0;table-layout:fixed;width:0}.handsontable col,.handsontable col.rowHeader{width:50px}.handsontable td,.handsontable th{background-color:#fff;border-bottom:1px solid #ccc;border-left-width:0;border-right:1px solid #ccc;border-top-width:0;empty-cells:show;height:22px;line-height:21px;outline:none;outline-width:0;overflow:hidden;padding:0 4px;vertical-align:top;white-space:pre-wrap}[dir=rtl].handsontable td,[dir=rtl].handsontable th{border-left:1px solid #ccc;border-right-width:0}.handsontable th:last-child{border-bottom:1px solid #ccc;border-left:none;border-right:1px solid #ccc}[dir=rtl].handsontable th:last-child{border-left:1px solid #ccc;border-right:none}.handsontable td:first-of-type,.handsontable th:first-child{border-left:1px solid #ccc}[dir=rtl].handsontable td:first-of-type,[dir=rtl].handsontable th:first-child{border-right:1px solid #ccc}.handsontable .ht_clone_top th:nth-child(2){border-left-width:0;border-right:1px solid #ccc}[dir=rtl].handsontable .ht_clone_top th:nth-child(2){border-left:1px solid #ccc;border-right-width:0}.handsontable.htRowHeaders thead tr th:nth-child(2){border-left:1px solid #ccc}[dir=rtl].handsontable.htRowHeaders thead tr th:nth-child(2){border-right:1px solid #ccc}.handsontable tr:first-child td,.handsontable tr:first-child th{border-top:1px solid #ccc}.ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable tbody tr th,.ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable:not(.ht_clone_top) thead tr th:first-child{border-left:1px solid #ccc;border-right-width:0}[dir=rtl].ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable tbody tr th,[dir=rtl].ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable:not(.ht_clone_top) thead tr th:first-child{border-left-width:0;border-right:1px solid #ccc}.ht_master:not(.innerBorderTop):not(.innerBorderBottom) thead tr.lastChild th,.ht_master:not(.innerBorderTop):not(.innerBorderBottom) thead tr:last-child th,.ht_master:not(.innerBorderTop):not(.innerBorderBottom)~.handsontable thead tr.lastChild th,.ht_master:not(.innerBorderTop):not(.innerBorderBottom)~.handsontable thead tr:last-child th{border-bottom-width:0}.handsontable th{background-color:#f0f0f0;color:#222;font-weight:400;text-align:center;white-space:nowrap}.handsontable thead th{padding:0}.handsontable th.active{background-color:#ccc}.handsontable thead th .relative{padding:2px 4px}.handsontable span.colHeader{display:inline-block;line-height:1.1}.handsontable .wtBorder{font-size:0;position:absolute}.handsontable .wtBorder.hidden{display:none!important}.handsontable .wtBorder.current{z-index:10}.handsontable .wtBorder.area{z-index:8}.handsontable .wtBorder.fill{z-index:6}.handsontable .wtBorder.corner{cursor:crosshair;font-size:0}.ht_clone_master{z-index:100}.ht_clone_inline_start{z-index:120}.ht_clone_bottom{z-index:130}.ht_clone_bottom_inline_start_corner{z-index:150}.ht_clone_top{z-index:160}.ht_clone_top_inline_start_corner{z-index:180}.handsontable col.hidden{width:0!important}.handsontable tr.hidden,.handsontable tr.hidden td,.handsontable tr.hidden th{display:none}.ht_clone_bottom,.ht_clone_inline_start,.ht_clone_top,.ht_master{overflow:hidden}.ht_master .wtHolder{overflow:auto}.handsontable .ht_clone_inline_start table.htCore>thead,.handsontable .ht_master table.htCore>tbody>tr>th,.handsontable .ht_master table.htCore>thead{visibility:hidden}.ht_clone_bottom .wtHolder,.ht_clone_inline_start .wtHolder,.ht_clone_top .wtHolder{overflow:hidden}.handsontable{color:#373737;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica Neue,Arial,sans-serif;font-size:13px;font-weight:400;touch-action:manipulation}.handsontable a{color:#104acc}.handsontable.htAutoSize{left:-99000px;position:absolute;top:-99000px;visibility:hidden}.handsontable td.htInvalid{background-color:#ffbeba!important}.handsontable td.htNoWrap{white-space:nowrap}.handsontable td.invisibleSelection,.handsontable th.invisibleSelection{outline:none}.handsontable td.invisibleSelection::selection,.handsontable th.invisibleSelection::selection{background:hsla(0,0%,100%,0)}.hot-display-license-info{color:#373737;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica Neue,Arial,sans-serif;font-size:10px;font-weight:400;padding:5px 0 3px;text-align:left}.hot-display-license-info a{color:#104acc;font-size:10px}.handsontable .htFocusCatcher{border:0;height:0;margin:0;opacity:0;padding:0;position:absolute;width:0;z-index:-1}.handsontable .manualColumnResizer{cursor:col-resize;height:25px;position:absolute;top:0;width:5px;z-index:210}.handsontable .manualRowResizer{cursor:row-resize;height:5px;left:0;position:absolute;width:50px;z-index:210}.handsontable .manualColumnResizer.active,.handsontable .manualColumnResizer:hover,.handsontable .manualRowResizer.active,.handsontable .manualRowResizer:hover{background-color:#34a9db}.handsontable .manualColumnResizerGuide{background-color:#34a9db;border-left:none;border-right:1px dashed #777;display:none;margin-left:5px;margin-right:unset;position:absolute;right:unset;top:0;width:0}[dir=rtl].handsontable .manualColumnResizerGuide{border-left:1px dashed #777;border-right:none;left:unset;margin-left:unset;margin-right:5px}.handsontable .manualRowResizerGuide{background-color:#34a9db;border-bottom:1px dashed #777;bottom:0;display:none;height:0;left:0;margin-top:5px;position:absolute}.handsontable .manualColumnResizerGuide.active,.handsontable .manualRowResizerGuide.active{display:block;z-index:209}.handsontable .columnSorting{position:relative}.handsontable .columnSorting.sortAction:hover{cursor:pointer;text-decoration:underline}.handsontable span.colHeader.columnSorting:before{background-position-x:right;background-repeat:no-repeat;background-size:contain;content:"";height:10px;left:unset;margin-top:-6px;padding-left:8px;padding-right:0;position:absolute;right:-9px;top:50%;width:5px}[dir=rtl].handsontable span.colHeader.columnSorting:before{background-position-x:left;left:-9px;padding-left:0;padding-right:8px;right:unset}.handsontable span.colHeader.columnSorting.ascending:before{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAMAAADJ7yrpAAAAKlBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKE86IAAAADXRSTlMABBEmRGprlJW72e77tTkTKwAAAFNJREFUeAHtzjkSgCAUBNHPgsoy97+ulGXRqJE5L+xkxoYt2UdsLb5bqFINz+aLuuLn5rIu2RkO3fZpWENimNgiw6iBYRTPMLJjGFxQZ1hxxb/xBI1qC8k39CdKAAAAAElFTkSuQmCC)}.handsontable span.colHeader.columnSorting.descending:before{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAMAAADJ7yrpAAAAKlBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKE86IAAAADXRSTlMABBEmRGprlJW72e77tTkTKwAAAFJJREFUeAHtzjkSgCAQRNFmQYUZ7n9dKUvru0TmvPAn3br0QfgdZ5xx6x+rQn23GqTYnq1FDcnuzZIO2WmedVqIRVxgGKEyjNgYRjKGkZ1hFIZ3I70LyM0VtU8AAAAASUVORK5CYII=)}.htGhostTable .htCore span.colHeader.columnSorting:not(.indicatorDisabled):before{content:"*";display:inline-block;padding-right:20px;position:relative}.handsontable td.area,.handsontable td.area-1,.handsontable td.area-2,.handsontable td.area-3,.handsontable td.area-4,.handsontable td.area-5,.handsontable td.area-6,.handsontable td.area-7{position:relative}.handsontable td.area-1:before,.handsontable td.area-2:before,.handsontable td.area-3:before,.handsontable td.area-4:before,.handsontable td.area-5:before,.handsontable td.area-6:before,.handsontable td.area-7:before,.handsontable td.area:before{background:#005eff;bottom:0;bottom:-100%\9;content:"";left:0;position:absolute;right:0;top:0}@media (-ms-high-contrast:none),screen and (-ms-high-contrast:active){.handsontable td.area-1:before,.handsontable td.area-2:before,.handsontable td.area-3:before,.handsontable td.area-4:before,.handsontable td.area-5:before,.handsontable td.area-6:before,.handsontable td.area-7:before,.handsontable td.area:before{bottom:-100%}}.handsontable td.area:before{opacity:.1}.handsontable td.area-1:before{opacity:.2}.handsontable td.area-2:before{opacity:.27}.handsontable td.area-3:before{opacity:.35}.handsontable td.area-4:before{opacity:.41}.handsontable td.area-5:before{opacity:.47}.handsontable td.area-6:before{opacity:.54}.handsontable td.area-7:before{opacity:.58}.handsontable tbody th.current,.handsontable thead th.current{box-shadow:inset 0 0 0 2px #4b89ff}.handsontable tbody th.ht__highlight,.handsontable thead th.ht__highlight{background-color:#dcdcdc}.handsontable tbody th.ht__active_highlight,.handsontable thead th.ht__active_highlight{background-color:#8eb0e7;color:#000}.handsontableInput{background-color:#fff;border:none;border-radius:0;box-shadow:inset 0 0 0 2px #5292f7;color:#000;display:block;font-family:inherit;font-size:inherit;line-height:21px;margin:0;outline-width:0;padding:1px 5px 0;resize:none}.handsontableInput:focus{outline:none}.handsontableInputHolder{left:0;position:absolute;top:0}.htSelectEditor{-webkit-appearance:menulist-button!important;position:absolute;width:auto}.htSelectEditor:focus{outline:none}.handsontable .htDimmed{color:#777}.handsontable .htSubmenu{position:relative}.handsontable .htSubmenu :after{color:#777;content:"▶";font-size:9px;position:absolute;right:5px}[dir=rtl].handsontable .htSubmenu :after{content:""}[dir=rtl].handsontable .htSubmenu :before{color:#777;content:"◀";font-size:9px;left:5px;position:absolute}.handsontable .htLeft{text-align:left}.handsontable .htCenter{text-align:center}.handsontable .htRight{text-align:right}.handsontable .htJustify{text-align:justify}.handsontable .htTop{vertical-align:top}.handsontable .htMiddle{vertical-align:middle}.handsontable .htBottom{vertical-align:bottom}.handsontable .htPlaceholder{color:#999}.handsontable.listbox{margin:0}.handsontable.listbox .ht_master table{background:#fff;border:1px solid #ccc;border-collapse:separate}.handsontable.listbox td,.handsontable.listbox th,.handsontable.listbox tr:first-child td,.handsontable.listbox tr:first-child th,.handsontable.listbox tr:last-child th{border-color:transparent!important}.handsontable.listbox td,.handsontable.listbox th{text-overflow:ellipsis;white-space:nowrap}.handsontable.listbox td.htDimmed{color:inherit;cursor:default;font-style:inherit}.handsontable.listbox .wtBorder{visibility:hidden}.handsontable.listbox tr td.current,.handsontable.listbox tr:hover td{background:#eee}.ht_editor_hidden{z-index:-1}.ht_editor_visible{z-index:200}.handsontable td.htSearchResult{background:#fcedd9;color:#583707}.handsontable .collapsibleIndicator{background:#eee;border:1px solid #a6a6a6;border-radius:10px;-webkit-box-shadow:0 0 0 6px #eee;-moz-box-shadow:0 0 0 6px #eee;box-shadow:0 0 0 3px #eee;color:#222;cursor:pointer;font-size:10px;height:10px;left:unset;line-height:8px;position:absolute;right:5px;text-align:center;top:50%;transform:translateY(-50%);width:10px}[dir=rtl].handsontable .collapsibleIndicator{left:5px;right:unset}.handsontable.mobile,.handsontable.mobile .wtHolder{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-overflow-scrolling:touch}.handsontable.mobile .handsontableInput:focus{-webkit-appearance:none;-webkit-box-shadow:inset 0 0 0 2px #5292f7;-moz-box-shadow:inset 0 0 0 2px #5292f7;box-shadow:inset 0 0 0 2px #5292f7}.handsontable .bottomSelectionHandle,.handsontable .bottomSelectionHandle-HitArea,.handsontable .topSelectionHandle,.handsontable .topSelectionHandle-HitArea{left:-10000px;right:unset;top:-10000px;z-index:9999}[dir=rtl].handsontable .bottomSelectionHandle,[dir=rtl].handsontable .bottomSelectionHandle-HitArea,[dir=rtl].handsontable .topSelectionHandle,[dir=rtl].handsontable .topSelectionHandle-HitArea{left:unset;right:-10000px}.handsontable.hide-tween{-webkit-animation:opacity-hide .3s;animation:opacity-hide .3s;animation-fill-mode:forwards;-webkit-animation-fill-mode:forwards}.handsontable.show-tween{-webkit-animation:opacity-show .3s;animation:opacity-show .3s;animation-fill-mode:forwards;-webkit-animation-fill-mode:forwards}.handsontable .htAutocompleteArrow{color:#bbb;cursor:default;float:right;font-size:10px;text-align:center;width:16px}[dir=rtl].handsontable .htAutocompleteArrow{float:left}.handsontable td.htInvalid .htAutocompleteArrow{color:#555}.handsontable td.htInvalid .htAutocompleteArrow:hover{color:#1a1a1a}.handsontable td .htAutocompleteArrow:hover{color:#777}.handsontable td.area .htAutocompleteArrow{color:#d3d3d3}.handsontable .htCheckboxRendererInput{display:inline-block}.handsontable .htCheckboxRendererInput.noValue{opacity:.5}.handsontable .htCheckboxRendererLabel{cursor:pointer;display:inline-block;font-size:inherit;vertical-align:middle}.handsontable .htCheckboxRendererLabel.fullWidth{width:100%}.handsontable .htCommentCell{position:relative}.handsontable .htCommentCell:after{border-left:6px solid transparent;border-right:none;border-top:6px solid #000;content:"";left:unset;position:absolute;right:0;top:0}[dir=rtl].handsontable .htCommentCell:after{border-left:none;border-right:6px solid transparent;left:0;right:unset}.htCommentsContainer .htComments{display:none;position:absolute;z-index:1059}.htCommentsContainer .htCommentTextArea{-webkit-appearance:none;background-color:#fff;border:none;border-left:3px solid #ccc;box-shadow:0 1px 3px rgba(0,0,0,.118),0 1px 2px rgba(0,0,0,.239);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-size:12px;height:90px;outline:0!important;padding:5px;width:215px}[dir=rtl].htCommentsContainer .htCommentTextArea{border-left:none;border-right:3px solid #ccc}.htCommentsContainer .htCommentTextArea:focus{border-left:3px solid #5292f7;border-right:none;box-shadow:0 1px 3px rgba(0,0,0,.118),0 1px 2px rgba(0,0,0,.239),inset 0 0 0 1px #5292f7}[dir=rtl].htCommentsContainer .htCommentTextArea:focus{border-left:none;border-right:3px solid #5292f7}
31
31
  /*!
32
32
  * Handsontable ContextMenu