handsontable 0.0.0-next-f900323-20250306 → 0.0.0-next-b209352-20250310

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.

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 = "06/03/2025 08:11:31";
49
- Handsontable.version = "0.0.0-next-f900323-20250306";
48
+ Handsontable.buildDate = "10/03/2025 12:39:49";
49
+ Handsontable.version = "0.0.0-next-b209352-20250310";
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 = "06/03/2025 08:11:36";
39
- Handsontable.version = "0.0.0-next-f900323-20250306";
38
+ Handsontable.buildDate = "10/03/2025 12:39:55";
39
+ Handsontable.version = "0.0.0-next-b209352-20250310";
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-f900323-20250306
29
- * Release date: 20/02/2025 (built at 06/03/2025 08:11:59)
28
+ * Version: 0.0.0-next-b209352-20250310
29
+ * Release date: 20/02/2025 (built at 10/03/2025 12:40:17)
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-f900323-20250306
29
- * Release date: 20/02/2025 (built at 06/03/2025 08:11:59)
28
+ * Version: 0.0.0-next-b209352-20250310
29
+ * Release date: 20/02/2025 (built at 10/03/2025 12:40:17)
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-f900323-20250306
29
- * Release date: 20/02/2025 (built at 06/03/2025 08:11:41)
28
+ * Version: 0.0.0-next-b209352-20250310
29
+ * Release date: 20/02/2025 (built at 10/03/2025 12:40:00)
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 = "06/03/2025 08:11:41";
42859
- Handsontable.version = "0.0.0-next-f900323-20250306";
42858
+ Handsontable.buildDate = "10/03/2025 12:40:00";
42859
+ Handsontable.version = "0.0.0-next-b209352-20250310";
42860
42860
  Handsontable.languages = {
42861
42861
  dictionaryKeys: _registry.dictionaryKeys,
42862
42862
  getLanguageDictionary: _registry.getLanguageDictionary,
@@ -54181,7 +54181,7 @@ const domMessages = {
54181
54181
  function _injectProductInfo(key, element) {
54182
54182
  const hasValidType = !isEmpty(key);
54183
54183
  const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
54184
- const hotVersion = "0.0.0-next-f900323-20250306";
54184
+ const hotVersion = "0.0.0-next-b209352-20250310";
54185
54185
  let keyValidityDate;
54186
54186
  let consoleMessageState = 'invalid';
54187
54187
  let domMessageState = 'invalid';
@@ -122351,6 +122351,7 @@ class Menu {
122351
122351
  * and adjusts the width and height of the menu's holder and hider elements accordingly.
122352
122352
  */
122353
122353
  updateMenuDimensions() {
122354
+ const stylesHandler = this.hotMenu.view.getStylesHandler();
122354
122355
  const {
122355
122356
  wtTable
122356
122357
  } = this.hotMenu.view._wt;
@@ -122363,8 +122364,14 @@ class Menu {
122363
122364
  const currentRowHeight = itemCell ? (0, _element.outerHeight)(this.hotMenu.getCell(index, 0)) : 0;
122364
122365
  return accumulator + (value.name === _predefinedItems.SEPARATOR ? 1 : currentRowHeight);
122365
122366
  }, 0);
122366
- holderStyle.width = `${currentHiderWidth}px`;
122367
- holderStyle.height = `${realHeight}px`;
122367
+ if (stylesHandler.isClassicTheme()) {
122368
+ // Additional 3px to menu's size because of additional border around its `table.htCore`.
122369
+ holderStyle.width = `${currentHiderWidth + 3}px`;
122370
+ holderStyle.height = `${realHeight + 3}px`;
122371
+ } else {
122372
+ holderStyle.width = `${currentHiderWidth}px`;
122373
+ holderStyle.height = `${realHeight}px`;
122374
+ }
122368
122375
  hiderStyle.height = holderStyle.height;
122369
122376
  }
122370
122377
 
@@ -127593,6 +127600,7 @@ const SHORTCUTS_GROUP = PLUGIN_KEY;
127593
127600
  */
127594
127601
  var _menuFocusNavigator = /*#__PURE__*/new WeakMap();
127595
127602
  var _dropdownMenuTraces = /*#__PURE__*/new WeakMap();
127603
+ var _previousConditionStack = /*#__PURE__*/new WeakMap();
127596
127604
  var _Filters_brand = /*#__PURE__*/new WeakSet();
127597
127605
  class Filters extends _base.BasePlugin {
127598
127606
  static get PLUGIN_KEY() {
@@ -127664,6 +127672,13 @@ class Filters extends _base.BasePlugin {
127664
127672
  * @type {WeakSet<Menu>}
127665
127673
  */
127666
127674
  _classPrivateFieldInitSpec(this, _dropdownMenuTraces, new WeakSet());
127675
+ /**
127676
+ * Stores the previous state of the condition stack before the latest filter operation.
127677
+ * This is used in the `beforeFilter` plugin to allow performing the undo operation.
127678
+ *
127679
+ * @type {Array}
127680
+ */
127681
+ _classPrivateFieldInitSpec(this, _previousConditionStack, []);
127667
127682
  this.hot.addHook('afterGetColHeader', function () {
127668
127683
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
127669
127684
  args[_key] = arguments[_key];
@@ -128006,6 +128021,51 @@ class Filters extends _base.BasePlugin {
128006
128021
  }
128007
128022
  }
128008
128023
 
128024
+ /**
128025
+ * Imports filter conditions to all columns to the plugin. The method accepts
128026
+ * the array of conditions with the same structure as the {@link Filters#exportConditions} method returns.
128027
+ * Importing conditions will replace the current conditions. Once replaced, the state of the condition
128028
+ * will be reflected in the UI. To apply the changes and filter the table, call
128029
+ * the {@link Filters#filter} method eventually.
128030
+ *
128031
+ * @param {Array} conditions Array of conditions.
128032
+ */
128033
+ importConditions(conditions) {
128034
+ this.conditionCollection.importAllConditions(conditions);
128035
+ }
128036
+
128037
+ /* eslint-disable jsdoc/require-description-complete-sentence */
128038
+ /**
128039
+ * Exports filter conditions for all columns from the plugin.
128040
+ * The array represents the filter state for each column. For example:
128041
+ *
128042
+ * ```js
128043
+ * [
128044
+ * {
128045
+ * column: 1,
128046
+ * operation: 'conjunction',
128047
+ * conditions: [
128048
+ * { name: 'gt', args: [95] },
128049
+ * ]
128050
+ * },
128051
+ * {
128052
+ * column: 7,
128053
+ * operation: 'conjunction',
128054
+ * conditions: [
128055
+ * { name: 'contains', args: ['mike'] },
128056
+ * { name: 'begins_with', args: ['m'] },
128057
+ * ]
128058
+ * },
128059
+ * ]
128060
+ * ```
128061
+ *
128062
+ * @returns {Array}
128063
+ */
128064
+ /* eslint-enable jsdoc/require-description-complete-sentence */
128065
+ exportConditions() {
128066
+ return this.conditionCollection.exportAllConditions();
128067
+ }
128068
+
128009
128069
  /**
128010
128070
  * Filters data based on added filter conditions.
128011
128071
  *
@@ -128019,8 +128079,8 @@ class Filters extends _base.BasePlugin {
128019
128079
  const dataFilter = this._createDataFilter();
128020
128080
  const needToFilter = !this.conditionCollection.isEmpty();
128021
128081
  let visibleVisualRows = [];
128022
- const conditions = this.conditionCollection.exportAllConditions();
128023
- const allowFiltering = this.hot.runHooks('beforeFilter', conditions, this.conditionCollection.previousConditionStack);
128082
+ const conditions = this.exportConditions();
128083
+ const allowFiltering = this.hot.runHooks('beforeFilter', conditions, _classPrivateFieldGet(_previousConditionStack, this));
128024
128084
  if (allowFiltering !== false) {
128025
128085
  if (needToFilter) {
128026
128086
  const trimmedRows = [];
@@ -128043,11 +128103,13 @@ class Filters extends _base.BasePlugin {
128043
128103
  } else {
128044
128104
  this.filtersRowsMap.clear();
128045
128105
  }
128106
+ _classPrivateFieldSet(_previousConditionStack, this, this.exportConditions());
128107
+ this.hot.runHooks('afterFilter', conditions);
128108
+ this.hot.view.adjustElementsSize();
128109
+ this.hot.render();
128110
+ } else {
128111
+ this.importConditions(_classPrivateFieldGet(_previousConditionStack, this));
128046
128112
  }
128047
- this.hot.runHooks('afterFilter', conditions);
128048
- this.conditionCollection.setPreviousConditionStack(null);
128049
- this.hot.view.adjustElementsSize();
128050
- this.hot.render();
128051
128113
  if (this.hot.selection.isSelected()) {
128052
128114
  this.hot.selectCell(navigableHeaders ? -1 : 0, this.hot.getSelectedRangeLast().highlight.col);
128053
128115
  }
@@ -128410,7 +128472,6 @@ function _onActionBarSubmit(submitType) {
128410
128472
  }
128411
128473
  this.conditionUpdateObserver.flush();
128412
128474
  this.components.forEach(component => component.saveState(physicalIndex));
128413
- this.filtersRowsMap.clear();
128414
128475
  this.filter();
128415
128476
  }
128416
128477
  (_this$dropdownMenuPlu3 = this.dropdownMenuPlugin) === null || _this$dropdownMenuPlu3 === void 0 || _this$dropdownMenuPlu3.close();
@@ -128452,8 +128513,23 @@ function _updateComponents(conditionsState) {
128452
128513
  editedConditionStack: {
128453
128514
  conditions,
128454
128515
  column
128455
- }
128516
+ },
128517
+ conditionArgsChange
128456
128518
  } = conditionsState;
128519
+ if (Array.isArray(conditionArgsChange)) {
128520
+ // update the previous condition stack (only for 'by_value' condition) on each dataset
128521
+ // change to make the undo/redo work properly
128522
+ _classPrivateFieldSet(_previousConditionStack, this, _classPrivateFieldGet(_previousConditionStack, this).map(stack => {
128523
+ if (stack.column === column && conditions.length > 0) {
128524
+ stack.conditions.forEach(condition => {
128525
+ if (condition.name === 'by_value') {
128526
+ condition.args = [[...conditionArgsChange]];
128527
+ }
128528
+ });
128529
+ }
128530
+ return stack;
128531
+ }));
128532
+ }
128457
128533
  const conditionsByValue = conditions.filter(condition => condition.name === _constants2.CONDITION_BY_VALUE);
128458
128534
  const conditionsWithoutByValue = conditions.filter(condition => condition.name !== _constants2.CONDITION_BY_VALUE);
128459
128535
  if (conditionsByValue.length >= 2 || conditionsWithoutByValue.length >= 3) {
@@ -131897,13 +131973,6 @@ class ConditionCollection {
131897
131973
  * @type {LinkedPhysicalIndexToValueMap}
131898
131974
  */
131899
131975
  (0, _defineProperty2.default)(this, "filteringStates", new _translations.LinkedPhysicalIndexToValueMap());
131900
- /**
131901
- * Stores the previous state of the condition stack before the latest filter operation.
131902
- * This is used in the `beforeFilter` plugin to allow performing the undo operation.
131903
- *
131904
- * @type {null|Array}
131905
- */
131906
- (0, _defineProperty2.default)(this, "previousConditionStack", null);
131907
131976
  this.hot = hot;
131908
131977
  this.isMapRegistrable = isMapRegistrable;
131909
131978
  if (this.isMapRegistrable === true) {
@@ -131972,13 +132041,6 @@ class ConditionCollection {
131972
132041
  const localeForColumn = this.hot.getCellMeta(0, column).locale;
131973
132042
  const args = conditionDefinition.args.map(v => typeof v === 'string' ? v.toLocaleLowerCase(localeForColumn) : v);
131974
132043
  const name = conditionDefinition.name || conditionDefinition.command.key;
131975
-
131976
- // If there's no previous condition stack defined (which means the condition stack was not cleared after the
131977
- // previous filter operation or that there was no filter operation performed yet), store the current conditions as
131978
- // the previous condition stack.
131979
- if (this.previousConditionStack === null) {
131980
- this.setPreviousConditionStack(this.exportAllConditions());
131981
- }
131982
132044
  this.runLocalHooks('beforeAdd', column);
131983
132045
  const columnType = this.getOperation(column);
131984
132046
  if (columnType) {
@@ -132107,8 +132169,6 @@ class ConditionCollection {
132107
132169
  * @fires ConditionCollection#afterRemove
132108
132170
  */
132109
132171
  removeConditions(column) {
132110
- // Store the current conditions as the previous condition stack before it's cleared.
132111
- this.setPreviousConditionStack(this.exportAllConditions());
132112
132172
  this.runLocalHooks('beforeRemove', column);
132113
132173
  this.filteringStates.clearValue(column);
132114
132174
  this.runLocalHooks('afterRemove', column);
@@ -132142,16 +132202,6 @@ class ConditionCollection {
132142
132202
  return conditions.length > 0;
132143
132203
  }
132144
132204
 
132145
- /**
132146
- * Updates the `previousConditionStack` property with the provided stack.
132147
- * It is used to store the current conditions before they are modified, allowing for undo operations.
132148
- *
132149
- * @param {Array|null} previousConditionStack The stack of previous conditions.
132150
- */
132151
- setPreviousConditionStack(previousConditionStack) {
132152
- this.previousConditionStack = previousConditionStack;
132153
- }
132154
-
132155
132205
  /**
132156
132206
  * Destroy object.
132157
132207
  */
@@ -141304,12 +141354,11 @@ function _sumCellsHeights(row, rowspan) {
141304
141354
  } = this.hot;
141305
141355
  const stylesHandler = view.getStylesHandler();
141306
141356
  const defaultHeight = view.getDefaultRowHeight();
141307
- const autoRowSizePlugin = this.hot.getPlugin('autoRowSize');
141308
141357
  let height = 0;
141309
141358
  for (let i = row; i < row + rowspan; i++) {
141310
141359
  if (!rowIndexMapper.isHidden(i)) {
141311
- var _autoRowSizePlugin$ge;
141312
- height += (_autoRowSizePlugin$ge = autoRowSizePlugin === null || autoRowSizePlugin === void 0 ? void 0 : autoRowSizePlugin.getRowHeight(i)) !== null && _autoRowSizePlugin$ge !== void 0 ? _autoRowSizePlugin$ge : defaultHeight;
141360
+ var _this$hot$getRowHeigh;
141361
+ height += (_this$hot$getRowHeigh = this.hot.getRowHeight(i)) !== null && _this$hot$getRowHeigh !== void 0 ? _this$hot$getRowHeigh : defaultHeight;
141313
141362
  if (i === 0 && !stylesHandler.isClassicTheme()) {
141314
141363
  height += 1; // border-top-width
141315
141364
  }
@@ -152670,7 +152719,7 @@ class FiltersAction extends _base.BaseAction {
152670
152719
  undo(hot, undoneCallback) {
152671
152720
  const filters = hot.getPlugin('filters');
152672
152721
  hot.addHookOnce('afterViewRender', undoneCallback);
152673
- filters.conditionCollection.importAllConditions(this.previousConditionsStack);
152722
+ filters.importConditions(this.previousConditionsStack);
152674
152723
  filters.filter();
152675
152724
  }
152676
152725
 
@@ -152681,7 +152730,7 @@ class FiltersAction extends _base.BaseAction {
152681
152730
  redo(hot, redoneCallback) {
152682
152731
  const filters = hot.getPlugin('filters');
152683
152732
  hot.addHookOnce('afterViewRender', redoneCallback);
152684
- filters.conditionCollection.importAllConditions(this.conditionsStack);
152733
+ filters.importConditions(this.conditionsStack);
152685
152734
  filters.filter();
152686
152735
  }
152687
152736
  }
@@ -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-f900323-20250306
30
- * Release date: 20/02/2025 (built at 06/03/2025 08:12:33)
29
+ * Version: 0.0.0-next-b209352-20250310
30
+ * Release date: 20/02/2025 (built at 10/03/2025 12:40:52)
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