handsontable 0.0.0-next-827c165-20240604 → 0.0.0-next-4a6df4e-20240606

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-4a6df4e-20240606
29
+ * Release date: 16/04/2024 (built at 06/06/2024 08:24:33)
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 = "06/06/2024 08:24:33";
111
+ Handsontable.version = "0.0.0-next-4a6df4e-20240606";
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-4a6df4e-20240606";
9133
9133
  let keyValidityDate;
9134
9134
  let consoleMessageState = 'invalid';
9135
9135
  let domMessageState = 'invalid';
@@ -35768,27 +35768,21 @@ class Transformation {
35768
35768
  const topStartCorner = cellRange.getTopStartCorner();
35769
35769
  const topEndCorner = cellRange.getTopEndCorner();
35770
35770
  const bottomEndCorner = cellRange.getBottomEndCorner();
35771
- const restDelta = {
35772
- row: coords.row - highlightRow,
35773
- col: coords.col - highlightColumn
35774
- };
35775
- if (delta.col < 0) {
35776
- if (toColumn >= highlightColumn && coords.col < highlightColumn) {
35777
- coords.col = _assertClassBrand(_Transformation_brand, this, _findFirstNonHiddenZeroBasedColumn).call(this, topStartCorner.col, topEndCorner.col) + restDelta.col;
35778
- }
35779
- } else if (delta.col > 0) {
35780
- if (toColumn <= highlightColumn && coords.col > highlightColumn) {
35781
- coords.col = _assertClassBrand(_Transformation_brand, this, _findFirstNonHiddenZeroBasedColumn).call(this, topEndCorner.col, topStartCorner.col) + restDelta.col;
35782
- }
35783
- }
35784
- if (delta.row < 0) {
35785
- if (toRow >= highlightRow && coords.row < highlightRow) {
35786
- coords.row = _assertClassBrand(_Transformation_brand, this, _findFirstNonHiddenZeroBasedRow).call(this, topStartCorner.row, bottomEndCorner.row) + restDelta.row;
35787
- }
35788
- } else if (delta.row > 0) {
35789
- if (toRow <= highlightRow && coords.row > highlightRow) {
35790
- coords.row = _assertClassBrand(_Transformation_brand, this, _findFirstNonHiddenZeroBasedRow).call(this, bottomEndCorner.row, topStartCorner.row) + restDelta.row;
35791
- }
35771
+ if (delta.col < 0 && toColumn >= highlightColumn && coords.col < highlightColumn) {
35772
+ const columnRestDelta = coords.col - highlightColumn;
35773
+ coords.col = _assertClassBrand(_Transformation_brand, this, _findFirstNonHiddenZeroBasedColumn).call(this, topStartCorner.col, topEndCorner.col) + columnRestDelta;
35774
+ } else if (delta.col > 0 && toColumn <= highlightColumn && coords.col > highlightColumn) {
35775
+ const endColumnIndex = _assertClassBrand(_Transformation_brand, this, _findFirstNonHiddenZeroBasedColumn).call(this, topEndCorner.col, topStartCorner.col);
35776
+ const columnRestDelta = Math.max(coords.col - endColumnIndex, 1);
35777
+ coords.col = endColumnIndex + columnRestDelta;
35778
+ }
35779
+ if (delta.row < 0 && toRow >= highlightRow && coords.row < highlightRow) {
35780
+ const rowRestDelta = coords.row - highlightRow;
35781
+ coords.row = _assertClassBrand(_Transformation_brand, this, _findFirstNonHiddenZeroBasedRow).call(this, topStartCorner.row, bottomEndCorner.row) + rowRestDelta;
35782
+ } else if (delta.row > 0 && toRow <= highlightRow && coords.row > highlightRow) {
35783
+ const bottomRowIndex = _assertClassBrand(_Transformation_brand, this, _findFirstNonHiddenZeroBasedRow).call(this, bottomEndCorner.row, topStartCorner.row);
35784
+ const rowRestDelta = Math.max(coords.row - bottomRowIndex, 1);
35785
+ coords.row = bottomRowIndex + rowRestDelta;
35792
35786
  }
35793
35787
  const {
35794
35788
  rowDir,
@@ -79743,36 +79737,42 @@ class MergeCells extends _base.BasePlugin {
79743
79737
  * @param {Array|boolean} settings The settings provided to the plugin.
79744
79738
  */
79745
79739
  generateFromSettings(settings) {
79746
- if (Array.isArray(settings)) {
79747
- const populatedNulls = [];
79748
- (0, _array.arrayEach)(settings, setting => {
79749
- if (!this.validateSetting(setting)) {
79750
- return;
79740
+ if (!Array.isArray(settings)) {
79741
+ return;
79742
+ }
79743
+ const validSettings = settings.filter(mergeCellInfo => this.validateSetting(mergeCellInfo));
79744
+ const nonOverlappingSettings = this.mergedCellsCollection.filterOverlappingMergeCells(validSettings);
79745
+ const populatedNulls = [];
79746
+ nonOverlappingSettings.forEach(mergeCellInfo => {
79747
+ const {
79748
+ row,
79749
+ col,
79750
+ rowspan,
79751
+ colspan
79752
+ } = mergeCellInfo;
79753
+ const from = this.hot._createCellCoords(row, col);
79754
+ const to = this.hot._createCellCoords(row + rowspan - 1, col + colspan - 1);
79755
+ const mergeRange = this.hot._createCellRange(from, from, to);
79756
+
79757
+ // Merging without data population.
79758
+ this.mergeRange(mergeRange, true, true);
79759
+ for (let r = row; r < row + rowspan; r++) {
79760
+ for (let c = col; c < col + colspan; c++) {
79761
+ // Not resetting a cell representing a merge area's value.
79762
+ if (r !== row || c !== col) {
79763
+ populatedNulls.push([r, c, null]);
79764
+ }
79751
79765
  }
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
79766
  }
79767
+ });
79772
79768
 
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);
79769
+ // There are no merged cells. Thus, no data population is needed.
79770
+ if (populatedNulls.length === 0) {
79771
+ return;
79775
79772
  }
79773
+
79774
+ // TODO: Change the `source` argument to a more meaningful value, e.g. `${this.pluginName}.clearCells`.
79775
+ this.hot.setDataAtCell(populatedNulls, undefined, undefined, this.pluginName);
79776
79776
  }
79777
79777
 
79778
79778
  /**
@@ -79878,7 +79878,7 @@ class MergeCells extends _base.BasePlugin {
79878
79878
  });
79879
79879
  });
79880
79880
  this.hot.setCellMeta(mergeParent.row, mergeParent.col, 'spanned', true);
79881
- const mergedCellAdded = this.mergedCellsCollection.add(mergeParent);
79881
+ const mergedCellAdded = this.mergedCellsCollection.add(mergeParent, auto);
79882
79882
  if (mergedCellAdded) {
79883
79883
  if (preventPopulation) {
79884
79884
  populationInfo = [mergeParent.row, mergeParent.col, clearedData];
@@ -80422,9 +80422,9 @@ function _addMergeActionsToContextMenu(defaultOptions) {
80422
80422
  */
80423
80423
  function _onAfterRenderer(TD, row, col) {
80424
80424
  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)) {
80425
+ if ((0, _object.isObject)(mergedCell)) {
80426
+ // We shouldn't override data in the collection.
80427
+ const mergedCellCopy = (0, _object.clone)(mergedCell);
80428
80428
  const {
80429
80429
  rowIndexMapper: rowMapper,
80430
80430
  columnIndexMapper: columnMapper
@@ -80449,8 +80449,10 @@ function _onAfterRenderer(TD, row, col) {
80449
80449
  mergedCellCopy.rowspan = Math.min(mergedCellCopy.rowspan, maxRowSpan);
80450
80450
  // The `colSpan` property for a `TD` element should be at most equal to number of rendered columns in the merge area.
80451
80451
  mergedCellCopy.colspan = Math.min(mergedCellCopy.colspan, maxColSpan);
80452
+ (0, _utils.applySpanProperties)(TD, mergedCellCopy, row, col);
80453
+ } else {
80454
+ (0, _utils.applySpanProperties)(TD, null, row, col);
80452
80455
  }
80453
- (0, _utils.applySpanProperties)(TD, mergedCellCopy, row, col);
80454
80456
  }
80455
80457
  /**
80456
80458
  * Clears the last selected coordinates before setting a new selection range.
@@ -80785,9 +80787,15 @@ class MergedCellsCollection {
80785
80787
  /**
80786
80788
  * Array of merged cells.
80787
80789
  *
80788
- * @type {Array}
80790
+ * @type {MergedCellCoords[]}
80789
80791
  */
80790
80792
  (0, _defineProperty2.default)(this, "mergedCells", []);
80793
+ /**
80794
+ * Matrix of cells (row, col) that points to the instances of the MergedCellCoords objects.
80795
+ *
80796
+ * @type {Array}
80797
+ */
80798
+ (0, _defineProperty2.default)(this, "mergedCellsMatrix", new Map());
80791
80799
  /**
80792
80800
  * The Handsontable instance.
80793
80801
  *
@@ -80819,16 +80827,11 @@ class MergedCellsCollection {
80819
80827
  * @returns {MergedCellCoords|boolean} Returns a wanted merged cell on success and `false` on failure.
80820
80828
  */
80821
80829
  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;
80830
+ var _this$mergedCellsMatr;
80831
+ if (!this.mergedCellsMatrix.has(row)) {
80832
+ return false;
80833
+ }
80834
+ return (_this$mergedCellsMatr = this.mergedCellsMatrix.get(row).get(column)) !== null && _this$mergedCellsMatr !== void 0 ? _this$mergedCellsMatr : false;
80832
80835
  }
80833
80836
 
80834
80837
  /**
@@ -80838,9 +80841,8 @@ class MergedCellsCollection {
80838
80841
  * @returns {MergedCellCoords|boolean}
80839
80842
  */
80840
80843
  getByRange(range) {
80841
- const mergedCells = this.mergedCells;
80842
80844
  let result = false;
80843
- (0, _array.arrayEach)(mergedCells, mergedCell => {
80845
+ (0, _array.arrayEach)(this.mergedCells, mergedCell => {
80844
80846
  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
80847
  result = mergedCell;
80846
80848
  return result;
@@ -80850,6 +80852,59 @@ class MergedCellsCollection {
80850
80852
  return result;
80851
80853
  }
80852
80854
 
80855
+ /**
80856
+ * Filters merge cells objects provided by users from overlapping cells.
80857
+ *
80858
+ * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCellsInfo The merged cell information object.
80859
+ * Has to contain `row`, `col`, `colspan` and `rowspan` properties.
80860
+ * @returns {Array<{ row: number, col: number, rowspan: number, colspan: number }>}
80861
+ */
80862
+ filterOverlappingMergeCells(mergedCellsInfo) {
80863
+ const occupiedCells = new Set();
80864
+ this.mergedCells.forEach(mergedCell => {
80865
+ const {
80866
+ row,
80867
+ col,
80868
+ colspan,
80869
+ rowspan
80870
+ } = mergedCell;
80871
+ for (let r = row; r < row + rowspan; r++) {
80872
+ for (let c = col; c < col + colspan; c++) {
80873
+ occupiedCells.add(`r${r},c${c}`);
80874
+ }
80875
+ }
80876
+ });
80877
+ const filteredMergeCells = mergedCellsInfo.filter(mergedCell => {
80878
+ const {
80879
+ row,
80880
+ col,
80881
+ colspan,
80882
+ rowspan
80883
+ } = mergedCell;
80884
+ const localOccupiedCells = new Set();
80885
+ let isOverlapping = false;
80886
+ for (let r = row; r < row + rowspan; r++) {
80887
+ for (let c = col; c < col + colspan; c++) {
80888
+ const cellId = `r${r},c${c}`;
80889
+ if (occupiedCells.has(cellId)) {
80890
+ (0, _console.warn)(MergedCellsCollection.IS_OVERLAPPING_WARNING(mergedCell));
80891
+ isOverlapping = true;
80892
+ break;
80893
+ }
80894
+ localOccupiedCells.add(cellId);
80895
+ }
80896
+ if (isOverlapping) {
80897
+ break;
80898
+ }
80899
+ }
80900
+ if (!isOverlapping) {
80901
+ occupiedCells.add(...localOccupiedCells);
80902
+ }
80903
+ return !isOverlapping;
80904
+ });
80905
+ return filteredMergeCells;
80906
+ }
80907
+
80853
80908
  /**
80854
80909
  * Get a merged cell contained in the provided range.
80855
80910
  *
@@ -80859,7 +80914,6 @@ class MergedCellsCollection {
80859
80914
  */
80860
80915
  getWithinRange(range) {
80861
80916
  let countPartials = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
80862
- const mergedCells = this.mergedCells;
80863
80917
  const foundMergedCells = [];
80864
80918
  let testedRange = range;
80865
80919
  if (!testedRange.includesRange) {
@@ -80867,7 +80921,7 @@ class MergedCellsCollection {
80867
80921
  const to = this.hot._createCellCoords(testedRange.to.row, testedRange.to.col);
80868
80922
  testedRange = this.hot._createCellRange(from, from, to);
80869
80923
  }
80870
- (0, _array.arrayEach)(mergedCells, mergedCell => {
80924
+ (0, _array.arrayEach)(this.mergedCells, mergedCell => {
80871
80925
  const mergedCellTopLeft = this.hot._createCellCoords(mergedCell.row, mergedCell.col);
80872
80926
  const mergedCellBottomRight = this.hot._createCellCoords(mergedCell.row + mergedCell.rowspan - 1, mergedCell.col + mergedCell.colspan - 1);
80873
80927
  const mergedCellRange = this.hot._createCellRange(mergedCellTopLeft, mergedCellTopLeft, mergedCellBottomRight);
@@ -80886,22 +80940,24 @@ class MergedCellsCollection {
80886
80940
  * Add a merged cell to the container.
80887
80941
  *
80888
80942
  * @param {object} mergedCellInfo The merged cell information object. Has to contain `row`, `col`, `colspan` and `rowspan` properties.
80943
+ * @param {boolean} [auto=false] `true` if called internally by the plugin (usually in batch).
80889
80944
  * @returns {MergedCellCoords|boolean} Returns the new merged cell on success and `false` on failure.
80890
80945
  */
80891
80946
  add(mergedCellInfo) {
80892
- const mergedCells = this.mergedCells;
80947
+ let auto = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
80893
80948
  const row = mergedCellInfo.row;
80894
80949
  const column = mergedCellInfo.col;
80895
80950
  const rowspan = mergedCellInfo.rowspan;
80896
80951
  const colspan = mergedCellInfo.colspan;
80897
80952
  const newMergedCell = new _cellCoords.default(row, column, rowspan, colspan, this.hot._createCellCoords, this.hot._createCellRange);
80898
80953
  const alreadyExists = this.get(row, column);
80899
- const isOverlapping = this.isOverlapping(newMergedCell);
80954
+ const isOverlapping = auto ? false : this.isOverlapping(newMergedCell);
80900
80955
  if (!alreadyExists && !isOverlapping) {
80901
80956
  if (this.hot) {
80902
80957
  newMergedCell.normalize(this.hot);
80903
80958
  }
80904
- mergedCells.push(newMergedCell);
80959
+ this.mergedCells.push(newMergedCell);
80960
+ _assertClassBrand(_MergedCellsCollection_brand, this, _addMergedCellToMatrix).call(this, newMergedCell);
80905
80961
  return newMergedCell;
80906
80962
  }
80907
80963
  (0, _console.warn)(MergedCellsCollection.IS_OVERLAPPING_WARNING(newMergedCell));
@@ -80917,12 +80973,12 @@ class MergedCellsCollection {
80917
80973
  * @returns {MergedCellCoords|boolean} Returns the removed merged cell on success and `false` on failure.
80918
80974
  */
80919
80975
  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;
80976
+ const mergedCell = this.get(row, column);
80977
+ const mergedCellIndex = mergedCell ? this.mergedCells.indexOf(mergedCell) : -1;
80978
+ if (mergedCell && mergedCellIndex !== -1) {
80979
+ this.mergedCells.splice(mergedCellIndex, 1);
80980
+ _assertClassBrand(_MergedCellsCollection_brand, this, _removeMergedCellFromMatrix).call(this, mergedCell);
80981
+ return mergedCell;
80926
80982
  }
80927
80983
  return false;
80928
80984
  }
@@ -80931,16 +80987,16 @@ class MergedCellsCollection {
80931
80987
  * Clear all the merged cells.
80932
80988
  */
80933
80989
  clear() {
80934
- const mergedCells = this.mergedCells;
80935
80990
  const mergedCellParentsToClear = [];
80936
80991
  const hiddenCollectionElements = [];
80937
- (0, _array.arrayEach)(mergedCells, mergedCell => {
80992
+ (0, _array.arrayEach)(this.mergedCells, mergedCell => {
80938
80993
  const TD = this.hot.getCell(mergedCell.row, mergedCell.col);
80939
80994
  if (TD) {
80940
80995
  mergedCellParentsToClear.push([TD, this.get(mergedCell.row, mergedCell.col), mergedCell.row, mergedCell.col]);
80941
80996
  }
80942
80997
  });
80943
80998
  this.mergedCells.length = 0;
80999
+ this.mergedCellsMatrix = new Map();
80944
81000
  (0, _array.arrayEach)(mergedCellParentsToClear, (mergedCell, i) => {
80945
81001
  (0, _number.rangeEach)(0, mergedCell.rowspan - 1, j => {
80946
81002
  (0, _number.rangeEach)(0, mergedCell.colspan - 1, k => {
@@ -80963,23 +81019,21 @@ class MergedCellsCollection {
80963
81019
  }
80964
81020
 
80965
81021
  /**
80966
- * Check if the provided merged cell overlaps with the others in the container.
81022
+ * Check if the provided merged cell overlaps with the others already added.
80967
81023
  *
80968
81024
  * @param {MergedCellCoords} mergedCell The merged cell to check against all others in the container.
80969
81025
  * @returns {boolean} `true` if the provided merged cell overlaps with the others, `false` otherwise.
80970
81026
  */
80971
81027
  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;
81028
+ const mergedCellRange = mergedCell.getRange();
81029
+ for (let i = 0; i < this.mergedCells.length; i++) {
81030
+ const otherMergedCell = this.mergedCells[i];
81031
+ const otherMergedCellRange = otherMergedCell.getRange();
81032
+ if (otherMergedCellRange.overlaps(mergedCellRange)) {
81033
+ return true;
80979
81034
  }
80980
- return true;
80981
- });
80982
- return result;
81035
+ }
81036
+ return false;
80983
81037
  }
80984
81038
 
80985
81039
  /**
@@ -81114,15 +81168,24 @@ class MergedCellsCollection {
81114
81168
  default:
81115
81169
  }
81116
81170
  (0, _array.arrayEach)(this.mergedCells, currentMerge => {
81171
+ _assertClassBrand(_MergedCellsCollection_brand, this, _removeMergedCellFromMatrix).call(this, currentMerge);
81117
81172
  currentMerge.shift(shiftVector, index);
81173
+ _assertClassBrand(_MergedCellsCollection_brand, this, _addMergedCellToMatrix).call(this, currentMerge);
81118
81174
  });
81119
81175
  (0, _number.rangeEachReverse)(this.mergedCells.length - 1, 0, i => {
81120
81176
  const currentMerge = this.mergedCells[i];
81121
81177
  if (currentMerge && currentMerge.removed) {
81122
81178
  this.mergedCells.splice(this.mergedCells.indexOf(currentMerge), 1);
81179
+ _assertClassBrand(_MergedCellsCollection_brand, this, _removeMergedCellFromMatrix).call(this, currentMerge);
81123
81180
  }
81124
81181
  });
81125
81182
  }
81183
+
81184
+ /**
81185
+ * Adds a merged cell to the matrix.
81186
+ *
81187
+ * @param {MergedCellCoords} mergedCell The merged cell to add.
81188
+ */
81126
81189
  }
81127
81190
  function _getNonIntersectingIndexes(range, axis) {
81128
81191
  let scanDirection = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
@@ -81151,6 +81214,28 @@ function _getNonIntersectingIndexes(range, axis) {
81151
81214
  return Array.from(set);
81152
81215
  })));
81153
81216
  }
81217
+ function _addMergedCellToMatrix(mergedCell) {
81218
+ for (let row = mergedCell.row; row < mergedCell.row + mergedCell.rowspan; row++) {
81219
+ for (let col = mergedCell.col; col < mergedCell.col + mergedCell.colspan; col++) {
81220
+ if (!this.mergedCellsMatrix.has(row)) {
81221
+ this.mergedCellsMatrix.set(row, new Map());
81222
+ }
81223
+ this.mergedCellsMatrix.get(row).set(col, mergedCell);
81224
+ }
81225
+ }
81226
+ }
81227
+ /**
81228
+ * Removes a merged cell from the matrix.
81229
+ *
81230
+ * @param {MergedCellCoords} mergedCell The merged cell to remove.
81231
+ */
81232
+ function _removeMergedCellFromMatrix(mergedCell) {
81233
+ for (let row = mergedCell.row; row < mergedCell.row + mergedCell.rowspan; row++) {
81234
+ for (let col = mergedCell.col; col < mergedCell.col + mergedCell.colspan; col++) {
81235
+ this.mergedCellsMatrix.get(row).delete(col);
81236
+ }
81237
+ }
81238
+ }
81154
81239
  var _default = exports["default"] = MergedCellsCollection;
81155
81240
 
81156
81241
  /***/ }),
@@ -81162,14 +81247,21 @@ var _default = exports["default"] = MergedCellsCollection;
81162
81247
 
81163
81248
  var _interopRequireDefault = __webpack_require__(1);
81164
81249
  exports.__esModule = true;
81250
+ __webpack_require__(8);
81165
81251
  var _defineProperty2 = _interopRequireDefault(__webpack_require__(153));
81166
81252
  var _templateLiteralTag = __webpack_require__(143);
81253
+ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
81254
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
81255
+ function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
81256
+ function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
81257
+ 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
81258
  /**
81168
81259
  * The `MergedCellCoords` class represents a single merged cell.
81169
81260
  *
81170
81261
  * @private
81171
81262
  * @class MergedCellCoords
81172
81263
  */
81264
+ var _cellRange = /*#__PURE__*/new WeakMap();
81173
81265
  class MergedCellCoords {
81174
81266
  constructor(row, column, rowspan, colspan, cellCoordsFactory, cellRangeFactory) {
81175
81267
  /**
@@ -81214,6 +81306,12 @@ class MergedCellCoords {
81214
81306
  * @type {Function}
81215
81307
  */
81216
81308
  (0, _defineProperty2.default)(this, "cellRangeFactory", void 0);
81309
+ /**
81310
+ * The cached range coordinates of the merged cell.
81311
+ *
81312
+ * @type {CellRange}
81313
+ */
81314
+ _classPrivateFieldInitSpec(this, _cellRange, null);
81217
81315
  this.row = row;
81218
81316
  this.col = column;
81219
81317
  this.rowspan = rowspan;
@@ -81335,6 +81433,7 @@ class MergedCellCoords {
81335
81433
  if (this.col + this.colspan > totalColumns - 1) {
81336
81434
  this.colspan = totalColumns - this.col;
81337
81435
  }
81436
+ _classPrivateFieldSet(_cellRange, this, null);
81338
81437
  }
81339
81438
 
81340
81439
  /**
@@ -81399,6 +81498,7 @@ class MergedCellCoords {
81399
81498
  // removing the whole merge
81400
81499
  if (changeStart <= mergeStart && changeEnd >= mergeEnd) {
81401
81500
  this.removed = true;
81501
+ _classPrivateFieldSet(_cellRange, this, null);
81402
81502
  return false;
81403
81503
 
81404
81504
  // removing the merge partially, including the beginning
@@ -81418,6 +81518,7 @@ class MergedCellCoords {
81418
81518
  this[span] -= removedPart;
81419
81519
  }
81420
81520
  }
81521
+ _classPrivateFieldSet(_cellRange, this, null);
81421
81522
  return true;
81422
81523
  }
81423
81524
 
@@ -81468,7 +81569,10 @@ class MergedCellCoords {
81468
81569
  * @returns {CellRange}
81469
81570
  */
81470
81571
  getRange() {
81471
- return this.cellRangeFactory(this.cellCoordsFactory(this.row, this.col), this.cellCoordsFactory(this.row, this.col), this.cellCoordsFactory(this.getLastRow(), this.getLastColumn()));
81572
+ if (!_classPrivateFieldGet(_cellRange, this)) {
81573
+ _classPrivateFieldSet(_cellRange, this, this.cellRangeFactory(this.cellCoordsFactory(this.row, this.col), this.cellCoordsFactory(this.row, this.col), this.cellCoordsFactory(this.getLastRow(), this.getLastColumn())));
81574
+ }
81575
+ return _classPrivateFieldGet(_cellRange, this);
81472
81576
  }
81473
81577
  }
81474
81578
  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-4a6df4e-20240606
29
+ * Release date: 16/04/2024 (built at 06/06/2024 08:24:50)
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