handsontable 0.0.0-next-8752a62-20250304 → 0.0.0-next-2938fa2-20250304

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

@@ -199,7 +199,7 @@ class Viewport {
199
199
  * @returns {number}
200
200
  */
201
201
  getWorkspaceOffset() {
202
- return (0, _element.offset)(this.wtTable.TABLE);
202
+ return (0, _element.offset)(this.wtTable.holder);
203
203
  }
204
204
 
205
205
  /**
@@ -196,7 +196,7 @@ class Viewport {
196
196
  * @returns {number}
197
197
  */
198
198
  getWorkspaceOffset() {
199
- return offset(this.wtTable.TABLE);
199
+ return offset(this.wtTable.holder);
200
200
  }
201
201
 
202
202
  /**
package/base.js CHANGED
@@ -45,8 +45,8 @@ Handsontable.hooks = _hooks.Hooks.getSingleton();
45
45
  Handsontable.CellCoords = _src.CellCoords;
46
46
  Handsontable.CellRange = _src.CellRange;
47
47
  Handsontable.packageName = 'handsontable';
48
- Handsontable.buildDate = "04/03/2025 09:03:16";
49
- Handsontable.version = "0.0.0-next-8752a62-20250304";
48
+ Handsontable.buildDate = "04/03/2025 10:27:00";
49
+ Handsontable.version = "0.0.0-next-2938fa2-20250304";
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/03/2025 09:03:21";
39
- Handsontable.version = "0.0.0-next-8752a62-20250304";
38
+ Handsontable.buildDate = "04/03/2025 10:27:06";
39
+ Handsontable.version = "0.0.0-next-2938fa2-20250304";
40
40
  Handsontable.languages = {
41
41
  dictionaryKeys,
42
42
  getLanguageDictionary,
@@ -117,7 +117,7 @@ class DataMap {
117
117
  this.metaManager = metaManager;
118
118
  this.tableMeta = metaManager.getTableMeta();
119
119
  this.dataSource = data;
120
- this.duckSchema = this.createDuckSchema();
120
+ this.refreshDuckSchema();
121
121
  this.createMap();
122
122
  }
123
123
 
@@ -480,14 +480,10 @@ class DataMap {
480
480
  // List of removed indexes might be changed in the `beforeRemoveRow` hook. There may be new values.
481
481
  const numberOfRemovedIndexes = removedPhysicalIndexes.length;
482
482
  this.filterData(rowIndex, numberOfRemovedIndexes, removedPhysicalIndexes);
483
-
484
- // TODO: Function `removeRow` should validate fully, probably above.
485
483
  if (rowIndex < this.hot.countRows()) {
486
484
  this.hot.rowIndexMapper.removeIndexes(removedPhysicalIndexes);
487
- const customDefinedColumns = (0, _mixed.isDefined)(this.tableMeta.columns) || (0, _mixed.isDefined)(this.tableMeta.dataSchema);
488
-
489
- // All rows have been removed. There shouldn't be any columns.
490
- if (this.hot.rowIndexMapper.getNotTrimmedIndexesLength() === 0 && customDefinedColumns === false) {
485
+ const preserveColumns = (0, _mixed.isDefined)(this.tableMeta.columns) || (0, _mixed.isDefined)(this.tableMeta.dataSchema) || this.tableMeta.colHeaders;
486
+ if (this.hot.rowIndexMapper.getNotTrimmedIndexesLength() === 0 && !preserveColumns) {
491
487
  this.hot.columnIndexMapper.setIndexesSequence([]);
492
488
  }
493
489
  }
@@ -550,13 +546,9 @@ class DataMap {
550
546
  }
551
547
  }
552
548
  }
553
-
554
- // TODO: Function `removeCol` should validate fully, probably above.
555
549
  if (columnIndex < this.hot.countCols()) {
556
550
  this.hot.columnIndexMapper.removeIndexes(removedPhysicalIndexes);
557
-
558
- // All columns have been removed. There shouldn't be any rows.
559
- if (this.hot.columnIndexMapper.getNotTrimmedIndexesLength() === 0) {
551
+ if (!this.tableMeta.rowHeaders && this.hot.columnIndexMapper.getNotTrimmedIndexesLength() === 0) {
560
552
  this.hot.rowIndexMapper.setIndexesSequence([]);
561
553
  }
562
554
  }
@@ -113,7 +113,7 @@ class DataMap {
113
113
  this.metaManager = metaManager;
114
114
  this.tableMeta = metaManager.getTableMeta();
115
115
  this.dataSource = data;
116
- this.duckSchema = this.createDuckSchema();
116
+ this.refreshDuckSchema();
117
117
  this.createMap();
118
118
  }
119
119
 
@@ -476,14 +476,10 @@ class DataMap {
476
476
  // List of removed indexes might be changed in the `beforeRemoveRow` hook. There may be new values.
477
477
  const numberOfRemovedIndexes = removedPhysicalIndexes.length;
478
478
  this.filterData(rowIndex, numberOfRemovedIndexes, removedPhysicalIndexes);
479
-
480
- // TODO: Function `removeRow` should validate fully, probably above.
481
479
  if (rowIndex < this.hot.countRows()) {
482
480
  this.hot.rowIndexMapper.removeIndexes(removedPhysicalIndexes);
483
- const customDefinedColumns = isDefined(this.tableMeta.columns) || isDefined(this.tableMeta.dataSchema);
484
-
485
- // All rows have been removed. There shouldn't be any columns.
486
- if (this.hot.rowIndexMapper.getNotTrimmedIndexesLength() === 0 && customDefinedColumns === false) {
481
+ const preserveColumns = isDefined(this.tableMeta.columns) || isDefined(this.tableMeta.dataSchema) || this.tableMeta.colHeaders;
482
+ if (this.hot.rowIndexMapper.getNotTrimmedIndexesLength() === 0 && !preserveColumns) {
487
483
  this.hot.columnIndexMapper.setIndexesSequence([]);
488
484
  }
489
485
  }
@@ -546,13 +542,9 @@ class DataMap {
546
542
  }
547
543
  }
548
544
  }
549
-
550
- // TODO: Function `removeCol` should validate fully, probably above.
551
545
  if (columnIndex < this.hot.countCols()) {
552
546
  this.hot.columnIndexMapper.removeIndexes(removedPhysicalIndexes);
553
-
554
- // All columns have been removed. There shouldn't be any rows.
555
- if (this.hot.columnIndexMapper.getNotTrimmedIndexesLength() === 0) {
547
+ if (!this.tableMeta.rowHeaders && this.hot.columnIndexMapper.getNotTrimmedIndexesLength() === 0) {
556
548
  this.hot.rowIndexMapper.setIndexesSequence([]);
557
549
  }
558
550
  }
@@ -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-8752a62-20250304
29
- * Release date: 20/02/2025 (built at 04/03/2025 09:03:42)
28
+ * Version: 0.0.0-next-2938fa2-20250304
29
+ * Release date: 20/02/2025 (built at 04/03/2025 10:27:29)
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-8752a62-20250304
29
- * Release date: 20/02/2025 (built at 04/03/2025 09:03:42)
28
+ * Version: 0.0.0-next-2938fa2-20250304
29
+ * Release date: 20/02/2025 (built at 04/03/2025 10:27:29)
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-8752a62-20250304
29
- * Release date: 20/02/2025 (built at 04/03/2025 09:03:26)
28
+ * Version: 0.0.0-next-2938fa2-20250304
29
+ * Release date: 20/02/2025 (built at 04/03/2025 10:27:11)
30
30
  */
31
31
  (function webpackUniversalModuleDefinition(root, factory) {
32
32
  if(typeof exports === 'object' && typeof module === 'object')
@@ -42855,8 +42855,8 @@ Handsontable.hooks = _hooks.Hooks.getSingleton();
42855
42855
  Handsontable.CellCoords = _src.CellCoords;
42856
42856
  Handsontable.CellRange = _src.CellRange;
42857
42857
  Handsontable.packageName = 'handsontable';
42858
- Handsontable.buildDate = "04/03/2025 09:03:26";
42859
- Handsontable.version = "0.0.0-next-8752a62-20250304";
42858
+ Handsontable.buildDate = "04/03/2025 10:27:11";
42859
+ Handsontable.version = "0.0.0-next-2938fa2-20250304";
42860
42860
  Handsontable.languages = {
42861
42861
  dictionaryKeys: _registry.dictionaryKeys,
42862
42862
  getLanguageDictionary: _registry.getLanguageDictionary,
@@ -54175,7 +54175,7 @@ const domMessages = {
54175
54175
  function _injectProductInfo(key, element) {
54176
54176
  const hasValidType = !isEmpty(key);
54177
54177
  const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
54178
- const hotVersion = "0.0.0-next-8752a62-20250304";
54178
+ const hotVersion = "0.0.0-next-2938fa2-20250304";
54179
54179
  let keyValidityDate;
54180
54180
  let consoleMessageState = 'invalid';
54181
54181
  let domMessageState = 'invalid';
@@ -70223,6 +70223,15 @@ class TableView {
70223
70223
  return this._wt.wtTable.getHeight();
70224
70224
  }
70225
70225
 
70226
+ /**
70227
+ * Gets the table's offset.
70228
+ *
70229
+ * @returns {{ left: number, top: number }}
70230
+ */
70231
+ getTableOffset() {
70232
+ return this._wt.wtViewport.getWorkspaceOffset();
70233
+ }
70234
+
70226
70235
  /**
70227
70236
  * Gets the row header width. If there are multiple row headers, the width of
70228
70237
  * the sum of all of them is returned.
@@ -82757,7 +82766,7 @@ class Viewport {
82757
82766
  * @returns {number}
82758
82767
  */
82759
82768
  getWorkspaceOffset() {
82760
- return (0, _element.offset)(this.wtTable.TABLE);
82769
+ return (0, _element.offset)(this.wtTable.holder);
82761
82770
  }
82762
82771
 
82763
82772
  /**
@@ -89851,7 +89860,7 @@ class DataMap {
89851
89860
  this.metaManager = metaManager;
89852
89861
  this.tableMeta = metaManager.getTableMeta();
89853
89862
  this.dataSource = data;
89854
- this.duckSchema = this.createDuckSchema();
89863
+ this.refreshDuckSchema();
89855
89864
  this.createMap();
89856
89865
  }
89857
89866
 
@@ -90214,14 +90223,10 @@ class DataMap {
90214
90223
  // List of removed indexes might be changed in the `beforeRemoveRow` hook. There may be new values.
90215
90224
  const numberOfRemovedIndexes = removedPhysicalIndexes.length;
90216
90225
  this.filterData(rowIndex, numberOfRemovedIndexes, removedPhysicalIndexes);
90217
-
90218
- // TODO: Function `removeRow` should validate fully, probably above.
90219
90226
  if (rowIndex < this.hot.countRows()) {
90220
90227
  this.hot.rowIndexMapper.removeIndexes(removedPhysicalIndexes);
90221
- const customDefinedColumns = (0, _mixed.isDefined)(this.tableMeta.columns) || (0, _mixed.isDefined)(this.tableMeta.dataSchema);
90222
-
90223
- // All rows have been removed. There shouldn't be any columns.
90224
- if (this.hot.rowIndexMapper.getNotTrimmedIndexesLength() === 0 && customDefinedColumns === false) {
90228
+ const preserveColumns = (0, _mixed.isDefined)(this.tableMeta.columns) || (0, _mixed.isDefined)(this.tableMeta.dataSchema) || this.tableMeta.colHeaders;
90229
+ if (this.hot.rowIndexMapper.getNotTrimmedIndexesLength() === 0 && !preserveColumns) {
90225
90230
  this.hot.columnIndexMapper.setIndexesSequence([]);
90226
90231
  }
90227
90232
  }
@@ -90284,13 +90289,9 @@ class DataMap {
90284
90289
  }
90285
90290
  }
90286
90291
  }
90287
-
90288
- // TODO: Function `removeCol` should validate fully, probably above.
90289
90292
  if (columnIndex < this.hot.countCols()) {
90290
90293
  this.hot.columnIndexMapper.removeIndexes(removedPhysicalIndexes);
90291
-
90292
- // All columns have been removed. There shouldn't be any rows.
90293
- if (this.hot.columnIndexMapper.getNotTrimmedIndexesLength() === 0) {
90294
+ if (!this.tableMeta.rowHeaders && this.hot.columnIndexMapper.getNotTrimmedIndexesLength() === 0) {
90294
90295
  this.hot.rowIndexMapper.setIndexesSequence([]);
90295
90296
  }
90296
90297
  }
@@ -102319,21 +102320,16 @@ class AutocompleteEditor extends _handsontableEditor.HandsontableEditor {
102319
102320
  * @returns {boolean}
102320
102321
  */
102321
102322
  flipDropdownIfNeeded() {
102322
- const trimmingContainer = (0, _element.getTrimmingContainer)(this.hot.view._wt.wtTable.TABLE);
102323
- const isWindowAsScrollableElement = trimmingContainer === this.hot.rootWindow;
102324
- const preventOverflow = this.cellProperties.preventOverflow;
102325
- if (isWindowAsScrollableElement || !isWindowAsScrollableElement && (preventOverflow || preventOverflow === 'horizontal')) {
102326
- return false;
102323
+ const editorRect = this.getEditedCellRect();
102324
+ const editorHeight = editorRect.height;
102325
+ let spaceAbove = editorRect.top;
102326
+ if (this.hot.view.isVerticallyScrollableByWindow()) {
102327
+ const topOffset = this.hot.view.getTableOffset().top - this.hot.rootWindow.scrollY;
102328
+ spaceAbove = Math.max(spaceAbove + topOffset, 0);
102327
102329
  }
102328
- const textareaOffset = (0, _element.offset)(this.TEXTAREA);
102329
- const textareaHeight = (0, _element.outerHeight)(this.TEXTAREA);
102330
102330
  const dropdownHeight = this.getHeight();
102331
- const trimmingContainerScrollTop = trimmingContainer.scrollTop;
102332
- const headersHeight = (0, _element.outerHeight)(this.hot.view._wt.wtTable.THEAD);
102333
- const containerOffset = (0, _element.offset)(trimmingContainer);
102334
- const spaceAbove = textareaOffset.top - containerOffset.top - headersHeight + trimmingContainerScrollTop;
102335
- const spaceBelow = trimmingContainer.scrollHeight - spaceAbove - headersHeight - textareaHeight;
102336
- const flipNeeded = dropdownHeight > spaceBelow && spaceAbove > spaceBelow;
102331
+ const spaceBelow = this.hot.view.getWorkspaceHeight() - spaceAbove - editorHeight;
102332
+ const flipNeeded = dropdownHeight > spaceBelow && spaceAbove > spaceBelow + editorHeight;
102337
102333
  if (flipNeeded) {
102338
102334
  this.flipDropdown(dropdownHeight);
102339
102335
  } else {
@@ -152755,6 +152751,7 @@ class RemoveColumnAction extends _base.BaseAction {
152755
152751
  index,
152756
152752
  indexes,
152757
152753
  data,
152754
+ amount,
152758
152755
  headers,
152759
152756
  columnPositions,
152760
152757
  rowPositions,
@@ -152801,7 +152798,7 @@ class RemoveColumnAction extends _base.BaseAction {
152801
152798
  this.index = index;
152802
152799
  this.indexes = indexes;
152803
152800
  this.data = data;
152804
- this.amount = this.data[0].length;
152801
+ this.amount = amount;
152805
152802
  this.headers = headers;
152806
152803
  this.columnPositions = columnPositions.slice(0);
152807
152804
  this.rowPositions = rowPositions.slice(0);
@@ -152839,6 +152836,7 @@ class RemoveColumnAction extends _base.BaseAction {
152839
152836
  index: columnIndex,
152840
152837
  indexes,
152841
152838
  data: removedData,
152839
+ amount,
152842
152840
  headers,
152843
152841
  columnPositions: columnsMap,
152844
152842
  rowPositions: rowsMap,
@@ -26,8 +26,8 @@
26
26
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
27
27
  * USE OR INABILITY TO USE THIS SOFTWARE.
28
28
  *
29
- * Version: 0.0.0-next-8752a62-20250304
30
- * Release date: 20/02/2025 (built at 04/03/2025 09:04:16)
29
+ * Version: 0.0.0-next-2938fa2-20250304
30
+ * Release date: 20/02/2025 (built at 04/03/2025 10:28:05)
31
31
  */.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 .hide{display:none}.handsontable .relative{position:relative}.handsontable .wtHider{position:relative;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) tbody tr th,.ht_master:not(.innerBorderInlineStart):not(.emptyColumns) thead tr th:first-child,.ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable:not(.htGhostTable) tbody tr th,.ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable:not(.ht_clone_top):not(.htGhostTable) thead tr th:first-child{border-left:1px solid #ccc;border-right-width:0}[dir=rtl].ht_master:not(.innerBorderInlineStart):not(.emptyColumns) tbody tr th,[dir=rtl].ht_master:not(.innerBorderInlineStart):not(.emptyColumns) thead tr th:first-child,[dir=rtl].ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable:not(.htGhostTable) tbody tr th,[dir=rtl].ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable:not(.ht_clone_top):not(.htGhostTable) 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;position:relative;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 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;content:"";left:0;position:absolute;right:0;top:0}.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;box-sizing:border-box!important;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{position:absolute;select{-webkit-appearance:menulist-button!important;border:2px solid #4b89ff;box-sizing:border-box!important;height:100%;width:100%}}.htSelectEditor select:focus{outline:none}.htSelectEditor .htAutocompleteArrow{display: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.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.noValue{opacity:.5}.handsontable .htCheckboxRendererLabel{cursor:pointer;display:inline-block;font-size:inherit;vertical-align:middle}.handsontable .htCheckboxRendererLabel.fullWidth{width:100%}.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[dir=ltr] thead th:has(.collapsibleIndicator) div.htRight span.colHeader{margin-right:20px}.handsontable[dir=rtl] thead th:has(.collapsibleIndicator) div.htLeft span.colHeader{margin-left:20px}.handsontable .columnSorting{position:relative}.handsontable[dir=ltr] div.htRight span[class*=ascending],.handsontable[dir=ltr] div.htRight span[class*=descending]{margin-left:-10px;margin-right:10px}.handsontable[dir=rtl] div.htLeft span[class*=ascending],.handsontable[dir=rtl] div.htLeft span[class*=descending]{margin-left:10px;margin-right:-10px}.handsontable[dir=ltr] div.htRight span[class*=ascending]:only-child,.handsontable[dir=ltr] div.htRight span[class*=descending]:only-child{margin-left:-15px;margin-right:15px}.handsontable[dir=rtl] div.htLeft span[class*=ascending]:only-child,.handsontable[dir=rtl] div.htLeft span[class*=descending]:only-child{margin-left:15px;margin-right:-15px}.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.htGhostTable table thead th{border-bottom-width:0}.handsontable.htGhostTable table tbody tr td,.handsontable.htGhostTable table tbody tr th{border-top-width:0}.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}
32
32
  /*!
33
33
  * Handsontable ContextMenu