handsontable 0.0.0-next-c3d40ad-20241127 → 0.0.0-next-ee5ee21-20241202

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-c3d40ad-20241127
29
- * Release date: 17/10/2024 (built at 27/11/2024 10:03:20)
28
+ * Version: 0.0.0-next-ee5ee21-20241202
29
+ * Release date: 17/10/2024 (built at 02/12/2024 12:57:05)
30
30
  */
31
31
  (function webpackUniversalModuleDefinition(root, factory) {
32
32
  if(typeof exports === 'object' && typeof module === 'object')
@@ -107,8 +107,8 @@ Handsontable.hooks = _hooks.Hooks.getSingleton();
107
107
  Handsontable.CellCoords = _src.CellCoords;
108
108
  Handsontable.CellRange = _src.CellRange;
109
109
  Handsontable.packageName = 'handsontable';
110
- Handsontable.buildDate = "27/11/2024 10:03:20";
111
- Handsontable.version = "0.0.0-next-c3d40ad-20241127";
110
+ Handsontable.buildDate = "02/12/2024 12:57:05";
111
+ Handsontable.version = "0.0.0-next-ee5ee21-20241202";
112
112
  Handsontable.languages = {
113
113
  dictionaryKeys: _registry.dictionaryKeys,
114
114
  getLanguageDictionary: _registry.getLanguageDictionary,
@@ -10009,7 +10009,7 @@ const domMessages = {
10009
10009
  function _injectProductInfo(key, element) {
10010
10010
  const hasValidType = !isEmpty(key);
10011
10011
  const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
10012
- const hotVersion = "0.0.0-next-c3d40ad-20241127";
10012
+ const hotVersion = "0.0.0-next-ee5ee21-20241202";
10013
10013
  let keyValidityDate;
10014
10014
  let consoleMessageState = 'invalid';
10015
10015
  let domMessageState = 'invalid';
@@ -22400,8 +22400,6 @@ class Overlays {
22400
22400
  const isOverflowHidden = rootWindow.getComputedStyle(wtTable.wtRootElement.parentNode).getPropertyValue('overflow') === 'hidden';
22401
22401
  this.scrollableElement = isOverflowHidden ? wtTable.holder : (0, _element.getScrollableElement)(wtTable.TABLE);
22402
22402
  this.initOverlays();
22403
- this.hasScrollbarBottom = false;
22404
- this.hasScrollbarRight = false;
22405
22403
  this.destroyed = false;
22406
22404
  this.keyPressed = false;
22407
22405
  this.spreaderLastSize = {
@@ -22879,24 +22877,6 @@ class Overlays {
22879
22877
  // we need to adjust the hider dimensions by the header border size. (https://github.com/handsontable/dev-handsontable/issues/1772)
22880
22878
  hiderStyle.width = `${proposedHiderWidth + rowHeaderBorderCompensation}px`;
22881
22879
  hiderStyle.height = `${proposedHiderHeight + columnHeaderBorderCompensation}px`;
22882
- if (this.scrollbarSize > 0) {
22883
- // todo refactoring, looking as a part of logic which should be moved outside the class
22884
- const {
22885
- scrollHeight: rootElemScrollHeight,
22886
- scrollWidth: rootElemScrollWidth
22887
- } = wtTable.wtRootElement;
22888
- const {
22889
- scrollHeight: holderScrollHeight,
22890
- scrollWidth: holderScrollWidth
22891
- } = wtTable.holder;
22892
- this.hasScrollbarRight = rootElemScrollHeight < holderScrollHeight;
22893
- this.hasScrollbarBottom = rootElemScrollWidth < holderScrollWidth;
22894
- if (this.hasScrollbarRight && wtTable.hider.scrollWidth + this.scrollbarSize > rootElemScrollWidth) {
22895
- this.hasScrollbarBottom = true;
22896
- } else if (this.hasScrollbarBottom && wtTable.hider.scrollHeight + this.scrollbarSize > rootElemScrollHeight) {
22897
- this.hasScrollbarRight = true;
22898
- }
22899
- }
22900
22880
  this.topOverlay.adjustElementsSize();
22901
22881
  this.inlineStartOverlay.adjustElementsSize();
22902
22882
  this.bottomOverlay.adjustElementsSize();
@@ -27646,14 +27626,13 @@ class BottomOverlay extends _base.Overlay {
27646
27626
  rootDocument,
27647
27627
  rootWindow
27648
27628
  } = this.domBindings;
27649
- const scrollbarWidth = (0, _element.getScrollbarWidth)(rootDocument);
27650
27629
  const overlayRoot = this.clone.wtTable.holder.parentNode;
27651
27630
  const overlayRootStyle = overlayRoot.style;
27652
27631
  const preventOverflow = this.wtSettings.getSetting('preventOverflow');
27653
27632
  if (this.trimmingContainer !== rootWindow || preventOverflow === 'horizontal') {
27654
27633
  let width = wtViewport.getWorkspaceWidth();
27655
- if (this.wot.wtOverlays.hasScrollbarRight) {
27656
- width -= scrollbarWidth;
27634
+ if (wtViewport.hasVerticalScroll()) {
27635
+ width -= (0, _element.getScrollbarWidth)(rootDocument);
27657
27636
  }
27658
27637
  width = Math.min(width, wtTable.wtRootElement.scrollWidth);
27659
27638
  overlayRootStyle.width = `${width}px`;
@@ -27662,7 +27641,7 @@ class BottomOverlay extends _base.Overlay {
27662
27641
  }
27663
27642
  this.clone.wtTable.holder.style.width = overlayRootStyle.width;
27664
27643
  let tableHeight = (0, _element.outerHeight)(this.clone.wtTable.TABLE);
27665
- if (!this.wot.wtTable.hasDefinedSize()) {
27644
+ if (!wtTable.hasDefinedSize()) {
27666
27645
  tableHeight = 0;
27667
27646
  }
27668
27647
  overlayRootStyle.height = `${tableHeight}px`;
@@ -28128,20 +28107,20 @@ class InlineStartOverlay extends _base.Overlay {
28128
28107
  */
28129
28108
  adjustRootElementSize() {
28130
28109
  const {
28131
- wtTable
28110
+ wtTable,
28111
+ wtViewport
28132
28112
  } = this.wot;
28133
28113
  const {
28134
28114
  rootDocument,
28135
28115
  rootWindow
28136
28116
  } = this.domBindings;
28137
- const scrollbarHeight = (0, _element.getScrollbarWidth)(rootDocument);
28138
28117
  const overlayRoot = this.clone.wtTable.holder.parentNode;
28139
28118
  const overlayRootStyle = overlayRoot.style;
28140
28119
  const preventOverflow = this.wtSettings.getSetting('preventOverflow');
28141
28120
  if (this.trimmingContainer !== rootWindow || preventOverflow === 'vertical') {
28142
- let height = this.wot.wtViewport.getWorkspaceHeight();
28143
- if (this.wot.wtOverlays.hasScrollbarBottom) {
28144
- height -= scrollbarHeight;
28121
+ let height = wtViewport.getWorkspaceHeight();
28122
+ if (wtViewport.hasHorizontalScroll()) {
28123
+ height -= (0, _element.getScrollbarWidth)(rootDocument);
28145
28124
  }
28146
28125
  height = Math.min(height, wtTable.wtRootElement.scrollHeight);
28147
28126
  overlayRootStyle.height = `${height}px`;
@@ -30493,20 +30472,20 @@ class TopOverlay extends _base.Overlay {
30493
30472
  */
30494
30473
  adjustRootElementSize() {
30495
30474
  const {
30496
- wtTable
30475
+ wtTable,
30476
+ wtViewport
30497
30477
  } = this.wot;
30498
30478
  const {
30499
30479
  rootDocument,
30500
30480
  rootWindow
30501
30481
  } = this.domBindings;
30502
- const scrollbarWidth = (0, _element.getScrollbarWidth)(rootDocument);
30503
30482
  const overlayRoot = this.clone.wtTable.holder.parentNode;
30504
30483
  const overlayRootStyle = overlayRoot.style;
30505
30484
  const preventOverflow = this.wtSettings.getSetting('preventOverflow');
30506
30485
  if (this.trimmingContainer !== rootWindow || preventOverflow === 'horizontal') {
30507
- let width = this.wot.wtViewport.getWorkspaceWidth();
30508
- if (this.wot.wtOverlays.hasScrollbarRight) {
30509
- width -= scrollbarWidth;
30486
+ let width = wtViewport.getWorkspaceWidth();
30487
+ if (wtViewport.hasVerticalScroll()) {
30488
+ width -= (0, _element.getScrollbarWidth)(rootDocument);
30510
30489
  }
30511
30490
  width = Math.min(width, wtTable.wtRootElement.scrollWidth);
30512
30491
  overlayRootStyle.width = `${width}px`;
@@ -30515,7 +30494,7 @@ class TopOverlay extends _base.Overlay {
30515
30494
  }
30516
30495
  this.clone.wtTable.holder.style.width = overlayRootStyle.width;
30517
30496
  let tableHeight = (0, _element.outerHeight)(this.clone.wtTable.TABLE);
30518
- if (!this.wot.wtTable.hasDefinedSize()) {
30497
+ if (!wtTable.hasDefinedSize()) {
30519
30498
  tableHeight = 0;
30520
30499
  }
30521
30500
  overlayRootStyle.height = `${tableHeight}px`;
@@ -49009,7 +48988,7 @@ function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDown, call
49009
48988
  // keyCode 229 aka 'uninitialized' doesn't take into account with editors. This key code is
49010
48989
  // produced when unfinished character is entering using the IME editor. It is fired on macOS,
49011
48990
  // Windows and linux (ubuntu) with installed ibus-pinyin package.
49012
- if (event.keyCode === 229 || result === false || (0, _event.isImmediatePropagationStopped)(event)) {
48991
+ if (result === false || event.keyCode === 229 || typeof event.key !== 'string' || (0, _event.isImmediatePropagationStopped)(event)) {
49013
48992
  return;
49014
48993
  }
49015
48994
  const pressedKey = (0, _utils.normalizeEventKey)(event);
@@ -49033,7 +49012,7 @@ function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDown, call
49033
49012
  * @param {KeyboardEvent} event The event object
49034
49013
  */
49035
49014
  const onkeydownForModKeys = event => {
49036
- if (event.key) {
49015
+ if (typeof event.key === 'string') {
49037
49016
  const pressedKey = (0, _utils.normalizeEventKey)(event);
49038
49017
  if (isModifierKey(pressedKey)) {
49039
49018
  modifierKeysObserver.press(pressedKey);
@@ -49048,7 +49027,7 @@ function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDown, call
49048
49027
  * @param {KeyboardEvent} event The event object
49049
49028
  */
49050
49029
  const onkeyupForModKeys = event => {
49051
- if (event.key) {
49030
+ if (typeof event.key === 'string') {
49052
49031
  const pressedKey = (0, _utils.normalizeEventKey)(event);
49053
49032
  if (isModifierKey(pressedKey)) {
49054
49033
  modifierKeysObserver.release(pressedKey);
@@ -49720,6 +49699,7 @@ function getComputedStyle(element) {
49720
49699
  * @property {number} maxWidth The maximum width of the element.
49721
49700
  * @property {number} minHeight The minimum height of the element.
49722
49701
  * @property {number} maxHeight The maximum height of the element.
49702
+ * @property {function(HTMLElement): string} textContent The function that returns the text content to measure.
49723
49703
  */
49724
49704
  /**
49725
49705
  * @typedef InputElementResizer
@@ -49731,14 +49711,18 @@ function getComputedStyle(element) {
49731
49711
  * Creates an input element resizer.
49732
49712
  *
49733
49713
  * @param {Document} ownerDocument The document to create the resizer for.
49714
+ * @param {InputElementResizerConfig} initialOptions The configuration to extend the defaults with.
49734
49715
  * @returns {InputElementResizer}
49735
49716
  */
49736
49717
  function createInputElementResizer(ownerDocument) {
49718
+ let initialOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
49737
49719
  const defaults = {
49738
49720
  minHeight: 200,
49739
49721
  maxHeight: 300,
49740
49722
  minWidth: 100,
49741
- maxWidth: 300
49723
+ maxWidth: 300,
49724
+ textContent: element => element.value,
49725
+ ...initialOptions
49742
49726
  };
49743
49727
  const body = ownerDocument.body;
49744
49728
  const textHolder = ownerDocument.createTextNode('');
@@ -49749,7 +49733,7 @@ function createInputElementResizer(ownerDocument) {
49749
49733
  * Resizes the element.
49750
49734
  */
49751
49735
  function resize() {
49752
- textHolder.textContent = observedElement.value;
49736
+ textHolder.textContent = defaults.textContent(observedElement);
49753
49737
  // Won't expand the element size for displaying body as for example, `grid`, `inline-grid` or `flex` with
49754
49738
  // `flex-direction` set as `column`.
49755
49739
  textContainer.style.position = 'absolute';
@@ -51575,8 +51559,11 @@ exports.PasswordEditor = _passwordEditor.PasswordEditor;
51575
51559
  "use strict";
51576
51560
 
51577
51561
 
51562
+ var _interopRequireDefault = __webpack_require__(1);
51578
51563
  exports.__esModule = true;
51564
+ var _defineProperty2 = _interopRequireDefault(__webpack_require__(173));
51579
51565
  var _textEditor = __webpack_require__(419);
51566
+ var _autoResize = __webpack_require__(421);
51580
51567
  var _element = __webpack_require__(158);
51581
51568
  const EDITOR_TYPE = exports.EDITOR_TYPE = 'password';
51582
51569
 
@@ -51585,6 +51572,19 @@ const EDITOR_TYPE = exports.EDITOR_TYPE = 'password';
51585
51572
  * @class PasswordEditor
51586
51573
  */
51587
51574
  class PasswordEditor extends _textEditor.TextEditor {
51575
+ constructor() {
51576
+ super(...arguments);
51577
+ /**
51578
+ * Autoresize instance for resizing the editor to the size of the entered text. Its overwrites the default
51579
+ * resizer of the TextEditor.
51580
+ *
51581
+ * @private
51582
+ * @type {Function}
51583
+ */
51584
+ (0, _defineProperty2.default)(this, "autoResize", (0, _autoResize.createInputElementResizer)(this.hot.rootDocument, {
51585
+ textContent: element => '•'.repeat(element.value.length)
51586
+ }));
51587
+ }
51588
51588
  static get EDITOR_TYPE() {
51589
51589
  return EDITOR_TYPE;
51590
51590
  }
@@ -60762,7 +60762,7 @@ class Comments extends _base.BasePlugin {
60762
60762
  stopPropagation: true,
60763
60763
  runOnlyIf: () => {
60764
60764
  var _this$hot$getSelected;
60765
- return ((_this$hot$getSelected = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected === void 0 ? void 0 : _this$hot$getSelected.highlight.isCell()) && !_classPrivateFieldGet(_editor, this).isVisible();
60765
+ return (_this$hot$getSelected = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected === void 0 ? void 0 : _this$hot$getSelected.highlight.isCell();
60766
60766
  },
60767
60767
  group: SHORTCUTS_GROUP
60768
60768
  });
@@ -61252,7 +61252,7 @@ function _onEditorResize(width, height) {
61252
61252
  * @param {Event} event The keydown event.
61253
61253
  */
61254
61254
  function _onAfterDocumentKeyDown(event) {
61255
- if (_classPrivateFieldGet(_editor, this).isVisible()) {
61255
+ if (_classPrivateFieldGet(_editor, this).isFocused()) {
61256
61256
  (0, _event.stopImmediatePropagation)(event);
61257
61257
  }
61258
61258
  }
@@ -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-c3d40ad-20241127
29
- * Release date: 17/10/2024 (built at 27/11/2024 10:03:36)
28
+ * Version: 0.0.0-next-ee5ee21-20241202
29
+ * Release date: 17/10/2024 (built at 02/12/2024 12:57:22)
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) 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;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;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;border:2px solid #4b89ff;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.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 .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 .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