handsontable 0.0.0-next-df87bb0-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.

package/base.js CHANGED
@@ -45,8 +45,8 @@ Handsontable.hooks = _pluginHooks.default.getSingleton();
45
45
  Handsontable.CellCoords = _src.CellCoords;
46
46
  Handsontable.CellRange = _src.CellRange;
47
47
  Handsontable.packageName = 'handsontable';
48
- Handsontable.buildDate = "04/06/2024 06:50:11";
49
- Handsontable.version = "0.0.0-next-df87bb0-20240604";
48
+ Handsontable.buildDate = "05/06/2024 11:36:46";
49
+ Handsontable.version = "0.0.0-next-7230ce6-20240605";
50
50
  Handsontable.languages = {
51
51
  dictionaryKeys: _registry.dictionaryKeys,
52
52
  getLanguageDictionary: _registry.getLanguageDictionary,
package/base.mjs CHANGED
@@ -35,8 +35,8 @@ Handsontable.hooks = Hooks.getSingleton();
35
35
  Handsontable.CellCoords = CellCoords;
36
36
  Handsontable.CellRange = CellRange;
37
37
  Handsontable.packageName = 'handsontable';
38
- Handsontable.buildDate = "04/06/2024 06:50:17";
39
- Handsontable.version = "0.0.0-next-df87bb0-20240604";
38
+ Handsontable.buildDate = "05/06/2024 11:36:52";
39
+ Handsontable.version = "0.0.0-next-7230ce6-20240605";
40
40
  Handsontable.languages = {
41
41
  dictionaryKeys,
42
42
  getLanguageDictionary,
@@ -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-df87bb0-20240604
29
- * Release date: 16/04/2024 (built at 04/06/2024 06:50:21)
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
  /**
32
32
  * Fix for bootstrap styles
@@ -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-df87bb0-20240604
29
- * Release date: 16/04/2024 (built at 04/06/2024 06:50:21)
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
  /**
32
32
  * Fix for bootstrap styles
@@ -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-df87bb0-20240604
29
- * Release date: 16/04/2024 (built at 04/06/2024 06:50:21)
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')
@@ -42675,8 +42675,8 @@ Handsontable.hooks = _pluginHooks.default.getSingleton();
42675
42675
  Handsontable.CellCoords = _src.CellCoords;
42676
42676
  Handsontable.CellRange = _src.CellRange;
42677
42677
  Handsontable.packageName = 'handsontable';
42678
- Handsontable.buildDate = "04/06/2024 06:50:21";
42679
- Handsontable.version = "0.0.0-next-df87bb0-20240604";
42678
+ Handsontable.buildDate = "05/06/2024 11:36:56";
42679
+ Handsontable.version = "0.0.0-next-7230ce6-20240605";
42680
42680
  Handsontable.languages = {
42681
42681
  dictionaryKeys: _registry.dictionaryKeys,
42682
42682
  getLanguageDictionary: _registry.getLanguageDictionary,
@@ -53274,7 +53274,7 @@ const domMessages = {
53274
53274
  function _injectProductInfo(key, element) {
53275
53275
  const hasValidType = !isEmpty(key);
53276
53276
  const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
53277
- const hotVersion = "0.0.0-next-df87bb0-20240604";
53277
+ const hotVersion = "0.0.0-next-7230ce6-20240605";
53278
53278
  let keyValidityDate;
53279
53279
  let consoleMessageState = 'invalid';
53280
53280
  let domMessageState = 'invalid';
@@ -131643,36 +131643,42 @@ class MergeCells extends _base.BasePlugin {
131643
131643
  * @param {Array|boolean} settings The settings provided to the plugin.
131644
131644
  */
131645
131645
  generateFromSettings(settings) {
131646
- if (Array.isArray(settings)) {
131647
- const populatedNulls = [];
131648
- (0, _array.arrayEach)(settings, setting => {
131649
- if (!this.validateSetting(setting)) {
131650
- return;
131646
+ if (!Array.isArray(settings)) {
131647
+ return;
131648
+ }
131649
+ const validSettings = settings.filter(mergeCellInfo => this.validateSetting(mergeCellInfo));
131650
+ const nonOverlappingSettings = this.mergedCellsCollection.filterOverlappingMergeCells(validSettings);
131651
+ const populatedNulls = [];
131652
+ nonOverlappingSettings.forEach(mergeCellInfo => {
131653
+ const {
131654
+ row,
131655
+ col,
131656
+ rowspan,
131657
+ colspan
131658
+ } = mergeCellInfo;
131659
+ const from = this.hot._createCellCoords(row, col);
131660
+ const to = this.hot._createCellCoords(row + rowspan - 1, col + colspan - 1);
131661
+ const mergeRange = this.hot._createCellRange(from, from, to);
131662
+
131663
+ // Merging without data population.
131664
+ this.mergeRange(mergeRange, true, true);
131665
+ for (let r = row; r < row + rowspan; r++) {
131666
+ for (let c = col; c < col + colspan; c++) {
131667
+ // Not resetting a cell representing a merge area's value.
131668
+ if (r !== row || c !== col) {
131669
+ populatedNulls.push([r, c, null]);
131670
+ }
131651
131671
  }
131652
- const highlight = this.hot._createCellCoords(setting.row, setting.col);
131653
- const rangeEnd = this.hot._createCellCoords(setting.row + setting.rowspan - 1, setting.col + setting.colspan - 1);
131654
- const mergeRange = this.hot._createCellRange(highlight, highlight, rangeEnd);
131655
-
131656
- // Merging without data population.
131657
- this.mergeRange(mergeRange, true, true);
131658
- (0, _number.rangeEach)(setting.row, setting.row + setting.rowspan - 1, rowIndex => {
131659
- (0, _number.rangeEach)(setting.col, setting.col + setting.colspan - 1, columnIndex => {
131660
- // Not resetting a cell representing a merge area's value.
131661
- if ((rowIndex === setting.row && columnIndex === setting.col) === false) {
131662
- populatedNulls.push([rowIndex, columnIndex, null]);
131663
- }
131664
- });
131665
- });
131666
- });
131667
-
131668
- // There are no merged cells. Thus, no data population is needed.
131669
- if (populatedNulls.length === 0) {
131670
- return;
131671
131672
  }
131673
+ });
131672
131674
 
131673
- // TODO: Change the `source` argument to a more meaningful value, e.g. `${this.pluginName}.clearCells`.
131674
- this.hot.setDataAtCell(populatedNulls, undefined, undefined, this.pluginName);
131675
+ // There are no merged cells. Thus, no data population is needed.
131676
+ if (populatedNulls.length === 0) {
131677
+ return;
131675
131678
  }
131679
+
131680
+ // TODO: Change the `source` argument to a more meaningful value, e.g. `${this.pluginName}.clearCells`.
131681
+ this.hot.setDataAtCell(populatedNulls, undefined, undefined, this.pluginName);
131676
131682
  }
131677
131683
 
131678
131684
  /**
@@ -131778,7 +131784,7 @@ class MergeCells extends _base.BasePlugin {
131778
131784
  });
131779
131785
  });
131780
131786
  this.hot.setCellMeta(mergeParent.row, mergeParent.col, 'spanned', true);
131781
- const mergedCellAdded = this.mergedCellsCollection.add(mergeParent);
131787
+ const mergedCellAdded = this.mergedCellsCollection.add(mergeParent, auto);
131782
131788
  if (mergedCellAdded) {
131783
131789
  if (preventPopulation) {
131784
131790
  populationInfo = [mergeParent.row, mergeParent.col, clearedData];
@@ -132322,9 +132328,9 @@ function _addMergeActionsToContextMenu(defaultOptions) {
132322
132328
  */
132323
132329
  function _onAfterRenderer(TD, row, col) {
132324
132330
  const mergedCell = this.mergedCellsCollection.get(row, col);
132325
- // We shouldn't override data in the collection.
132326
- const mergedCellCopy = (0, _object.isObject)(mergedCell) ? (0, _object.clone)(mergedCell) : undefined;
132327
- if ((0, _object.isObject)(mergedCellCopy)) {
132331
+ if ((0, _object.isObject)(mergedCell)) {
132332
+ // We shouldn't override data in the collection.
132333
+ const mergedCellCopy = (0, _object.clone)(mergedCell);
132328
132334
  const {
132329
132335
  rowIndexMapper: rowMapper,
132330
132336
  columnIndexMapper: columnMapper
@@ -132349,8 +132355,10 @@ function _onAfterRenderer(TD, row, col) {
132349
132355
  mergedCellCopy.rowspan = Math.min(mergedCellCopy.rowspan, maxRowSpan);
132350
132356
  // The `colSpan` property for a `TD` element should be at most equal to number of rendered columns in the merge area.
132351
132357
  mergedCellCopy.colspan = Math.min(mergedCellCopy.colspan, maxColSpan);
132358
+ (0, _utils.applySpanProperties)(TD, mergedCellCopy, row, col);
132359
+ } else {
132360
+ (0, _utils.applySpanProperties)(TD, null, row, col);
132352
132361
  }
132353
- (0, _utils.applySpanProperties)(TD, mergedCellCopy, row, col);
132354
132362
  }
132355
132363
  /**
132356
132364
  * Clears the last selected coordinates before setting a new selection range.
@@ -132685,9 +132693,15 @@ class MergedCellsCollection {
132685
132693
  /**
132686
132694
  * Array of merged cells.
132687
132695
  *
132688
- * @type {Array}
132696
+ * @type {MergedCellCoords[]}
132689
132697
  */
132690
132698
  (0, _defineProperty2.default)(this, "mergedCells", []);
132699
+ /**
132700
+ * Matrix of cells (row, col) that points to the instances of the MergedCellCoords objects.
132701
+ *
132702
+ * @type {Array}
132703
+ */
132704
+ (0, _defineProperty2.default)(this, "mergedCellsMatrix", new Map());
132691
132705
  /**
132692
132706
  * The Handsontable instance.
132693
132707
  *
@@ -132719,16 +132733,11 @@ class MergedCellsCollection {
132719
132733
  * @returns {MergedCellCoords|boolean} Returns a wanted merged cell on success and `false` on failure.
132720
132734
  */
132721
132735
  get(row, column) {
132722
- const mergedCells = this.mergedCells;
132723
- let result = false;
132724
- (0, _array.arrayEach)(mergedCells, mergedCell => {
132725
- if (mergedCell.row <= row && mergedCell.row + mergedCell.rowspan - 1 >= row && mergedCell.col <= column && mergedCell.col + mergedCell.colspan - 1 >= column) {
132726
- result = mergedCell;
132727
- return false;
132728
- }
132729
- return true;
132730
- });
132731
- return result;
132736
+ var _this$mergedCellsMatr;
132737
+ if (!this.mergedCellsMatrix.has(row)) {
132738
+ return false;
132739
+ }
132740
+ return (_this$mergedCellsMatr = this.mergedCellsMatrix.get(row).get(column)) !== null && _this$mergedCellsMatr !== void 0 ? _this$mergedCellsMatr : false;
132732
132741
  }
132733
132742
 
132734
132743
  /**
@@ -132738,9 +132747,8 @@ class MergedCellsCollection {
132738
132747
  * @returns {MergedCellCoords|boolean}
132739
132748
  */
132740
132749
  getByRange(range) {
132741
- const mergedCells = this.mergedCells;
132742
132750
  let result = false;
132743
- (0, _array.arrayEach)(mergedCells, mergedCell => {
132751
+ (0, _array.arrayEach)(this.mergedCells, mergedCell => {
132744
132752
  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) {
132745
132753
  result = mergedCell;
132746
132754
  return result;
@@ -132750,6 +132758,59 @@ class MergedCellsCollection {
132750
132758
  return result;
132751
132759
  }
132752
132760
 
132761
+ /**
132762
+ * Filters merge cells objects provided by users from overlapping cells.
132763
+ *
132764
+ * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCellsInfo The merged cell information object.
132765
+ * Has to contain `row`, `col`, `colspan` and `rowspan` properties.
132766
+ * @returns {Array<{ row: number, col: number, rowspan: number, colspan: number }>}
132767
+ */
132768
+ filterOverlappingMergeCells(mergedCellsInfo) {
132769
+ const occupiedCells = new Set();
132770
+ this.mergedCells.forEach(mergedCell => {
132771
+ const {
132772
+ row,
132773
+ col,
132774
+ colspan,
132775
+ rowspan
132776
+ } = mergedCell;
132777
+ for (let r = row; r < row + rowspan; r++) {
132778
+ for (let c = col; c < col + colspan; c++) {
132779
+ occupiedCells.add(`r${r},c${c}`);
132780
+ }
132781
+ }
132782
+ });
132783
+ const filteredMergeCells = mergedCellsInfo.filter(mergedCell => {
132784
+ const {
132785
+ row,
132786
+ col,
132787
+ colspan,
132788
+ rowspan
132789
+ } = mergedCell;
132790
+ const localOccupiedCells = new Set();
132791
+ let isOverlapping = false;
132792
+ for (let r = row; r < row + rowspan; r++) {
132793
+ for (let c = col; c < col + colspan; c++) {
132794
+ const cellId = `r${r},c${c}`;
132795
+ if (occupiedCells.has(cellId)) {
132796
+ (0, _console.warn)(MergedCellsCollection.IS_OVERLAPPING_WARNING(mergedCell));
132797
+ isOverlapping = true;
132798
+ break;
132799
+ }
132800
+ localOccupiedCells.add(cellId);
132801
+ }
132802
+ if (isOverlapping) {
132803
+ break;
132804
+ }
132805
+ }
132806
+ if (!isOverlapping) {
132807
+ occupiedCells.add(...localOccupiedCells);
132808
+ }
132809
+ return !isOverlapping;
132810
+ });
132811
+ return filteredMergeCells;
132812
+ }
132813
+
132753
132814
  /**
132754
132815
  * Get a merged cell contained in the provided range.
132755
132816
  *
@@ -132759,7 +132820,6 @@ class MergedCellsCollection {
132759
132820
  */
132760
132821
  getWithinRange(range) {
132761
132822
  let countPartials = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
132762
- const mergedCells = this.mergedCells;
132763
132823
  const foundMergedCells = [];
132764
132824
  let testedRange = range;
132765
132825
  if (!testedRange.includesRange) {
@@ -132767,7 +132827,7 @@ class MergedCellsCollection {
132767
132827
  const to = this.hot._createCellCoords(testedRange.to.row, testedRange.to.col);
132768
132828
  testedRange = this.hot._createCellRange(from, from, to);
132769
132829
  }
132770
- (0, _array.arrayEach)(mergedCells, mergedCell => {
132830
+ (0, _array.arrayEach)(this.mergedCells, mergedCell => {
132771
132831
  const mergedCellTopLeft = this.hot._createCellCoords(mergedCell.row, mergedCell.col);
132772
132832
  const mergedCellBottomRight = this.hot._createCellCoords(mergedCell.row + mergedCell.rowspan - 1, mergedCell.col + mergedCell.colspan - 1);
132773
132833
  const mergedCellRange = this.hot._createCellRange(mergedCellTopLeft, mergedCellTopLeft, mergedCellBottomRight);
@@ -132786,22 +132846,24 @@ class MergedCellsCollection {
132786
132846
  * Add a merged cell to the container.
132787
132847
  *
132788
132848
  * @param {object} mergedCellInfo The merged cell information object. Has to contain `row`, `col`, `colspan` and `rowspan` properties.
132849
+ * @param {boolean} [auto=false] `true` if called internally by the plugin (usually in batch).
132789
132850
  * @returns {MergedCellCoords|boolean} Returns the new merged cell on success and `false` on failure.
132790
132851
  */
132791
132852
  add(mergedCellInfo) {
132792
- const mergedCells = this.mergedCells;
132853
+ let auto = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
132793
132854
  const row = mergedCellInfo.row;
132794
132855
  const column = mergedCellInfo.col;
132795
132856
  const rowspan = mergedCellInfo.rowspan;
132796
132857
  const colspan = mergedCellInfo.colspan;
132797
132858
  const newMergedCell = new _cellCoords.default(row, column, rowspan, colspan, this.hot._createCellCoords, this.hot._createCellRange);
132798
132859
  const alreadyExists = this.get(row, column);
132799
- const isOverlapping = this.isOverlapping(newMergedCell);
132860
+ const isOverlapping = auto ? false : this.isOverlapping(newMergedCell);
132800
132861
  if (!alreadyExists && !isOverlapping) {
132801
132862
  if (this.hot) {
132802
132863
  newMergedCell.normalize(this.hot);
132803
132864
  }
132804
- mergedCells.push(newMergedCell);
132865
+ this.mergedCells.push(newMergedCell);
132866
+ _assertClassBrand(_MergedCellsCollection_brand, this, _addMergedCellToMatrix).call(this, newMergedCell);
132805
132867
  return newMergedCell;
132806
132868
  }
132807
132869
  (0, _console.warn)(MergedCellsCollection.IS_OVERLAPPING_WARNING(newMergedCell));
@@ -132817,12 +132879,12 @@ class MergedCellsCollection {
132817
132879
  * @returns {MergedCellCoords|boolean} Returns the removed merged cell on success and `false` on failure.
132818
132880
  */
132819
132881
  remove(row, column) {
132820
- const mergedCells = this.mergedCells;
132821
- const wantedCollection = this.get(row, column);
132822
- const wantedCollectionIndex = wantedCollection ? this.mergedCells.indexOf(wantedCollection) : -1;
132823
- if (wantedCollection && wantedCollectionIndex !== -1) {
132824
- mergedCells.splice(wantedCollectionIndex, 1);
132825
- return wantedCollection;
132882
+ const mergedCell = this.get(row, column);
132883
+ const mergedCellIndex = mergedCell ? this.mergedCells.indexOf(mergedCell) : -1;
132884
+ if (mergedCell && mergedCellIndex !== -1) {
132885
+ this.mergedCells.splice(mergedCellIndex, 1);
132886
+ _assertClassBrand(_MergedCellsCollection_brand, this, _removeMergedCellFromMatrix).call(this, mergedCell);
132887
+ return mergedCell;
132826
132888
  }
132827
132889
  return false;
132828
132890
  }
@@ -132831,16 +132893,16 @@ class MergedCellsCollection {
132831
132893
  * Clear all the merged cells.
132832
132894
  */
132833
132895
  clear() {
132834
- const mergedCells = this.mergedCells;
132835
132896
  const mergedCellParentsToClear = [];
132836
132897
  const hiddenCollectionElements = [];
132837
- (0, _array.arrayEach)(mergedCells, mergedCell => {
132898
+ (0, _array.arrayEach)(this.mergedCells, mergedCell => {
132838
132899
  const TD = this.hot.getCell(mergedCell.row, mergedCell.col);
132839
132900
  if (TD) {
132840
132901
  mergedCellParentsToClear.push([TD, this.get(mergedCell.row, mergedCell.col), mergedCell.row, mergedCell.col]);
132841
132902
  }
132842
132903
  });
132843
132904
  this.mergedCells.length = 0;
132905
+ this.mergedCellsMatrix = new Map();
132844
132906
  (0, _array.arrayEach)(mergedCellParentsToClear, (mergedCell, i) => {
132845
132907
  (0, _number.rangeEach)(0, mergedCell.rowspan - 1, j => {
132846
132908
  (0, _number.rangeEach)(0, mergedCell.colspan - 1, k => {
@@ -132863,23 +132925,21 @@ class MergedCellsCollection {
132863
132925
  }
132864
132926
 
132865
132927
  /**
132866
- * Check if the provided merged cell overlaps with the others in the container.
132928
+ * Check if the provided merged cell overlaps with the others already added.
132867
132929
  *
132868
132930
  * @param {MergedCellCoords} mergedCell The merged cell to check against all others in the container.
132869
132931
  * @returns {boolean} `true` if the provided merged cell overlaps with the others, `false` otherwise.
132870
132932
  */
132871
132933
  isOverlapping(mergedCell) {
132872
- 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));
132873
- let result = false;
132874
- (0, _array.arrayEach)(this.mergedCells, col => {
132875
- 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));
132876
- if (currentRange.overlaps(mergedCellRange)) {
132877
- result = true;
132878
- return false;
132934
+ const mergedCellRange = mergedCell.getRange();
132935
+ for (let i = 0; i < this.mergedCells.length; i++) {
132936
+ const otherMergedCell = this.mergedCells[i];
132937
+ const otherMergedCellRange = otherMergedCell.getRange();
132938
+ if (otherMergedCellRange.overlaps(mergedCellRange)) {
132939
+ return true;
132879
132940
  }
132880
- return true;
132881
- });
132882
- return result;
132941
+ }
132942
+ return false;
132883
132943
  }
132884
132944
 
132885
132945
  /**
@@ -133014,15 +133074,24 @@ class MergedCellsCollection {
133014
133074
  default:
133015
133075
  }
133016
133076
  (0, _array.arrayEach)(this.mergedCells, currentMerge => {
133077
+ _assertClassBrand(_MergedCellsCollection_brand, this, _removeMergedCellFromMatrix).call(this, currentMerge);
133017
133078
  currentMerge.shift(shiftVector, index);
133079
+ _assertClassBrand(_MergedCellsCollection_brand, this, _addMergedCellToMatrix).call(this, currentMerge);
133018
133080
  });
133019
133081
  (0, _number.rangeEachReverse)(this.mergedCells.length - 1, 0, i => {
133020
133082
  const currentMerge = this.mergedCells[i];
133021
133083
  if (currentMerge && currentMerge.removed) {
133022
133084
  this.mergedCells.splice(this.mergedCells.indexOf(currentMerge), 1);
133085
+ _assertClassBrand(_MergedCellsCollection_brand, this, _removeMergedCellFromMatrix).call(this, currentMerge);
133023
133086
  }
133024
133087
  });
133025
133088
  }
133089
+
133090
+ /**
133091
+ * Adds a merged cell to the matrix.
133092
+ *
133093
+ * @param {MergedCellCoords} mergedCell The merged cell to add.
133094
+ */
133026
133095
  }
133027
133096
  function _getNonIntersectingIndexes(range, axis) {
133028
133097
  let scanDirection = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
@@ -133051,6 +133120,28 @@ function _getNonIntersectingIndexes(range, axis) {
133051
133120
  return Array.from(set);
133052
133121
  })));
133053
133122
  }
133123
+ function _addMergedCellToMatrix(mergedCell) {
133124
+ for (let row = mergedCell.row; row < mergedCell.row + mergedCell.rowspan; row++) {
133125
+ for (let col = mergedCell.col; col < mergedCell.col + mergedCell.colspan; col++) {
133126
+ if (!this.mergedCellsMatrix.has(row)) {
133127
+ this.mergedCellsMatrix.set(row, new Map());
133128
+ }
133129
+ this.mergedCellsMatrix.get(row).set(col, mergedCell);
133130
+ }
133131
+ }
133132
+ }
133133
+ /**
133134
+ * Removes a merged cell from the matrix.
133135
+ *
133136
+ * @param {MergedCellCoords} mergedCell The merged cell to remove.
133137
+ */
133138
+ function _removeMergedCellFromMatrix(mergedCell) {
133139
+ for (let row = mergedCell.row; row < mergedCell.row + mergedCell.rowspan; row++) {
133140
+ for (let col = mergedCell.col; col < mergedCell.col + mergedCell.colspan; col++) {
133141
+ this.mergedCellsMatrix.get(row).delete(col);
133142
+ }
133143
+ }
133144
+ }
133054
133145
  var _default = exports["default"] = MergedCellsCollection;
133055
133146
 
133056
133147
  /***/ }),
@@ -133062,14 +133153,21 @@ var _default = exports["default"] = MergedCellsCollection;
133062
133153
 
133063
133154
  var _interopRequireDefault = __webpack_require__(197);
133064
133155
  exports.__esModule = true;
133156
+ __webpack_require__(204);
133065
133157
  var _defineProperty2 = _interopRequireDefault(__webpack_require__(487));
133066
133158
  var _templateLiteralTag = __webpack_require__(477);
133159
+ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
133160
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
133161
+ function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
133162
+ function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
133163
+ 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"); }
133067
133164
  /**
133068
133165
  * The `MergedCellCoords` class represents a single merged cell.
133069
133166
  *
133070
133167
  * @private
133071
133168
  * @class MergedCellCoords
133072
133169
  */
133170
+ var _cellRange = /*#__PURE__*/new WeakMap();
133073
133171
  class MergedCellCoords {
133074
133172
  constructor(row, column, rowspan, colspan, cellCoordsFactory, cellRangeFactory) {
133075
133173
  /**
@@ -133114,6 +133212,12 @@ class MergedCellCoords {
133114
133212
  * @type {Function}
133115
133213
  */
133116
133214
  (0, _defineProperty2.default)(this, "cellRangeFactory", void 0);
133215
+ /**
133216
+ * The cached range coordinates of the merged cell.
133217
+ *
133218
+ * @type {CellRange}
133219
+ */
133220
+ _classPrivateFieldInitSpec(this, _cellRange, null);
133117
133221
  this.row = row;
133118
133222
  this.col = column;
133119
133223
  this.rowspan = rowspan;
@@ -133235,6 +133339,7 @@ class MergedCellCoords {
133235
133339
  if (this.col + this.colspan > totalColumns - 1) {
133236
133340
  this.colspan = totalColumns - this.col;
133237
133341
  }
133342
+ _classPrivateFieldSet(_cellRange, this, null);
133238
133343
  }
133239
133344
 
133240
133345
  /**
@@ -133299,6 +133404,7 @@ class MergedCellCoords {
133299
133404
  // removing the whole merge
133300
133405
  if (changeStart <= mergeStart && changeEnd >= mergeEnd) {
133301
133406
  this.removed = true;
133407
+ _classPrivateFieldSet(_cellRange, this, null);
133302
133408
  return false;
133303
133409
 
133304
133410
  // removing the merge partially, including the beginning
@@ -133318,6 +133424,7 @@ class MergedCellCoords {
133318
133424
  this[span] -= removedPart;
133319
133425
  }
133320
133426
  }
133427
+ _classPrivateFieldSet(_cellRange, this, null);
133321
133428
  return true;
133322
133429
  }
133323
133430
 
@@ -133368,7 +133475,10 @@ class MergedCellCoords {
133368
133475
  * @returns {CellRange}
133369
133476
  */
133370
133477
  getRange() {
133371
- return this.cellRangeFactory(this.cellCoordsFactory(this.row, this.col), this.cellCoordsFactory(this.row, this.col), this.cellCoordsFactory(this.getLastRow(), this.getLastColumn()));
133478
+ if (!_classPrivateFieldGet(_cellRange, this)) {
133479
+ _classPrivateFieldSet(_cellRange, this, this.cellRangeFactory(this.cellCoordsFactory(this.row, this.col), this.cellCoordsFactory(this.row, this.col), this.cellCoordsFactory(this.getLastRow(), this.getLastColumn())));
133480
+ }
133481
+ return _classPrivateFieldGet(_cellRange, this);
133372
133482
  }
133373
133483
  }
133374
133484
  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-df87bb0-20240604
29
- * Release date: 16/04/2024 (built at 04/06/2024 06:50:39)
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}
31
31
  /*!
32
32
  * Pikaday