handsontable 14.0.0-next-23212d5-20231127 → 14.0.0-next-477622d-20231128

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.
@@ -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: 14.0.0-next-23212d5-20231127
29
- * Release date: 22/11/2023 (built at 27/11/2023 08:13:56)
28
+ * Version: 14.0.0-next-477622d-20231128
29
+ * Release date: 29/11/2023 (built at 28/11/2023 12:48:17)
30
30
  */
31
31
  (function webpackUniversalModuleDefinition(root, factory) {
32
32
  if(typeof exports === 'object' && typeof module === 'object')
@@ -43033,8 +43033,8 @@ Handsontable.hooks = _pluginHooks.default.getSingleton();
43033
43033
  Handsontable.CellCoords = _src.CellCoords;
43034
43034
  Handsontable.CellRange = _src.CellRange;
43035
43035
  Handsontable.packageName = 'handsontable';
43036
- Handsontable.buildDate = "27/11/2023 08:13:56";
43037
- Handsontable.version = "14.0.0-next-23212d5-20231127";
43036
+ Handsontable.buildDate = "28/11/2023 12:48:17";
43037
+ Handsontable.version = "14.0.0-next-477622d-20231128";
43038
43038
  Handsontable.languages = {
43039
43039
  dictionaryKeys: _registry.dictionaryKeys,
43040
43040
  getLanguageDictionary: _registry.getLanguageDictionary,
@@ -53154,7 +53154,7 @@ const domMessages = {
53154
53154
  function _injectProductInfo(key, element) {
53155
53155
  const hasValidType = !isEmpty(key);
53156
53156
  const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
53157
- const hotVersion = "14.0.0-next-23212d5-20231127";
53157
+ const hotVersion = "14.0.0-next-477622d-20231128";
53158
53158
  let keyValidityDate;
53159
53159
  let consoleMessageState = 'invalid';
53160
53160
  let domMessageState = 'invalid';
@@ -53162,7 +53162,7 @@ function _injectProductInfo(key, element) {
53162
53162
  const schemaValidity = _checkKeySchema(key);
53163
53163
  if (hasValidType || isNonCommercial || schemaValidity) {
53164
53164
  if (schemaValidity) {
53165
- const releaseDate = (0, _moment.default)("22/11/2023", 'DD/MM/YYYY');
53165
+ const releaseDate = (0, _moment.default)("29/11/2023", 'DD/MM/YYYY');
53166
53166
  const releaseDays = Math.floor(releaseDate.toDate().getTime() / 8.64e7);
53167
53167
  const keyValidityDays = _extractTime(key);
53168
53168
  keyValidityDate = (0, _moment.default)((keyValidityDays + 1) * 8.64e7, 'x').format('MMMM DD, YYYY');
@@ -60406,6 +60406,8 @@ const A11Y_GRIDCELL = () => ['role', 'gridcell'];
60406
60406
  exports.A11Y_GRIDCELL = A11Y_GRIDCELL;
60407
60407
  const A11Y_ROWHEADER = () => ['role', 'rowheader'];
60408
60408
  exports.A11Y_ROWHEADER = A11Y_ROWHEADER;
60409
+ const A11Y_ROWGROUP = () => ['role', 'rowgroup'];
60410
+ exports.A11Y_ROWGROUP = A11Y_ROWGROUP;
60409
60411
  const A11Y_COLUMNHEADER = () => ['role', 'columnheader'];
60410
60412
  exports.A11Y_COLUMNHEADER = A11Y_COLUMNHEADER;
60411
60413
  const A11Y_ROW = () => ['role', 'row'];
@@ -65615,10 +65617,11 @@ function getListenersCounter() {
65615
65617
  __webpack_require__(275);
65616
65618
  var _interopRequireDefault = __webpack_require__(198);
65617
65619
  exports.__esModule = true;
65618
- var _classPrivateFieldGet5 = _interopRequireDefault(__webpack_require__(466));
65620
+ var _classPrivateFieldGet7 = _interopRequireDefault(__webpack_require__(466));
65619
65621
  var _classPrivateFieldSet2 = _interopRequireDefault(__webpack_require__(469));
65620
65622
  var _console = __webpack_require__(462);
65621
65623
  var _element = __webpack_require__(304);
65624
+ var _function = __webpack_require__(448);
65622
65625
  function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
65623
65626
  function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
65624
65627
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
@@ -65643,9 +65646,10 @@ var _hot = /*#__PURE__*/new WeakMap();
65643
65646
  var _focusMode = /*#__PURE__*/new WeakMap();
65644
65647
  var _refocusDelay = /*#__PURE__*/new WeakMap();
65645
65648
  var _refocusElementGetter = /*#__PURE__*/new WeakMap();
65646
- var _getCurrentHighlightCoords = /*#__PURE__*/new WeakSet();
65649
+ var _debouncedSelect = /*#__PURE__*/new WeakMap();
65647
65650
  var _getSelectedCell = /*#__PURE__*/new WeakSet();
65648
- var _manageFocus = /*#__PURE__*/new WeakSet();
65651
+ var _focusCell = /*#__PURE__*/new WeakSet();
65652
+ var _focusEditorElement = /*#__PURE__*/new WeakSet();
65649
65653
  var _onUpdateSettings = /*#__PURE__*/new WeakSet();
65650
65654
  class FocusManager {
65651
65655
  constructor(hotInstance) {
@@ -65653,29 +65657,23 @@ class FocusManager {
65653
65657
  /**
65654
65658
  * Update the manager configuration after calling `updateSettings`.
65655
65659
  *
65656
- * @private
65657
65660
  * @param {object} newSettings The new settings passed to the `updateSettings` method.
65658
65661
  */
65659
65662
  _classPrivateMethodInitSpec(this, _onUpdateSettings);
65660
65663
  /**
65661
- * Manage the browser's focus after cell selection.
65662
- *
65663
- * @private
65664
+ * Manage the browser's focus after cell selection end.
65664
65665
  */
65665
- _classPrivateMethodInitSpec(this, _manageFocus);
65666
+ _classPrivateMethodInitSpec(this, _focusEditorElement);
65666
65667
  /**
65667
- * Get and return the currently selected and highlighted cell/header element.
65668
- *
65669
- * @private
65670
- * @returns {HTMLTableCellElement}
65668
+ * Manage the browser's focus after each cell selection change.
65671
65669
  */
65672
- _classPrivateMethodInitSpec(this, _getSelectedCell);
65670
+ _classPrivateMethodInitSpec(this, _focusCell);
65673
65671
  /**
65674
- * Get the coordinates of the highlight of the currently selected cell/header.
65672
+ * Get and return the currently selected and highlighted cell/header element.
65675
65673
  *
65676
- * @returns {CellCoords}
65674
+ * @param {Function} callback Callback function to be called after the cell element is retrieved.
65677
65675
  */
65678
- _classPrivateMethodInitSpec(this, _getCurrentHighlightCoords);
65676
+ _classPrivateMethodInitSpec(this, _getSelectedCell);
65679
65677
  /**
65680
65678
  * The Handsontable instance.
65681
65679
  */
@@ -65691,7 +65689,7 @@ class FocusManager {
65691
65689
  * - 'mixed' - The browser's focus switches from the lastly selected cell element to the currently active editor's
65692
65690
  * `TEXTAREA` element after a delay defined in the manager.
65693
65691
  *
65694
- * @type {string}
65692
+ * @type {'cell' | 'mixed'}
65695
65693
  */
65696
65694
  _classPrivateFieldInitSpec(this, _focusMode, {
65697
65695
  writable: true,
@@ -65717,20 +65715,35 @@ class FocusManager {
65717
65715
  writable: true,
65718
65716
  value: null
65719
65717
  });
65718
+ /**
65719
+ * Map of the debounced `select` functions.
65720
+ *
65721
+ * @type {Map<number, Function>}
65722
+ */
65723
+ _classPrivateFieldInitSpec(this, _debouncedSelect, {
65724
+ writable: true,
65725
+ value: new Map()
65726
+ });
65720
65727
  const hotSettings = hotInstance.getSettings();
65721
65728
  (0, _classPrivateFieldSet2.default)(this, _hot, hotInstance);
65722
65729
  (0, _classPrivateFieldSet2.default)(this, _focusMode, hotSettings.imeFastEdit ? FOCUS_MODES.MIXED : FOCUS_MODES.CELL);
65723
- (0, _classPrivateFieldGet5.default)(this, _hot).addHook('afterUpdateSettings', function () {
65730
+ (0, _classPrivateFieldGet7.default)(this, _hot).addHook('afterUpdateSettings', function () {
65724
65731
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
65725
65732
  args[_key] = arguments[_key];
65726
65733
  }
65727
65734
  return _classPrivateMethodGet(_this, _onUpdateSettings, _onUpdateSettings2).call(_this, ...args);
65728
65735
  });
65729
- (0, _classPrivateFieldGet5.default)(this, _hot).addHook('afterSelection', function () {
65736
+ (0, _classPrivateFieldGet7.default)(this, _hot).addHook('afterSelection', function () {
65730
65737
  for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
65731
65738
  args[_key2] = arguments[_key2];
65732
65739
  }
65733
- return _classPrivateMethodGet(_this, _manageFocus, _manageFocus2).call(_this, ...args);
65740
+ return _classPrivateMethodGet(_this, _focusCell, _focusCell2).call(_this, ...args);
65741
+ });
65742
+ (0, _classPrivateFieldGet7.default)(this, _hot).addHook('afterSelectionEnd', function () {
65743
+ for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
65744
+ args[_key3] = arguments[_key3];
65745
+ }
65746
+ return _classPrivateMethodGet(_this, _focusEditorElement, _focusEditorElement2).call(_this, ...args);
65734
65747
  });
65735
65748
  }
65736
65749
 
@@ -65740,7 +65753,7 @@ class FocusManager {
65740
65753
  * @returns {'cell' | 'mixed'}
65741
65754
  */
65742
65755
  getFocusMode() {
65743
- return (0, _classPrivateFieldGet5.default)(this, _focusMode);
65756
+ return (0, _classPrivateFieldGet7.default)(this, _focusMode);
65744
65757
  }
65745
65758
 
65746
65759
  /**
@@ -65763,7 +65776,7 @@ class FocusManager {
65763
65776
  * @returns {number} Delay in milliseconds.
65764
65777
  */
65765
65778
  getRefocusDelay() {
65766
- return (0, _classPrivateFieldGet5.default)(this, _refocusDelay);
65779
+ return (0, _classPrivateFieldGet7.default)(this, _refocusDelay);
65767
65780
  }
65768
65781
 
65769
65782
  /**
@@ -65791,11 +65804,11 @@ class FocusManager {
65791
65804
  * @returns {HTMLTextAreaElement|HTMLElement|undefined}
65792
65805
  */
65793
65806
  getRefocusElement() {
65794
- if (typeof (0, _classPrivateFieldGet5.default)(this, _refocusElementGetter) === 'function') {
65795
- return (0, _classPrivateFieldGet5.default)(this, _refocusElementGetter).call(this);
65807
+ if (typeof (0, _classPrivateFieldGet7.default)(this, _refocusElementGetter) === 'function') {
65808
+ return (0, _classPrivateFieldGet7.default)(this, _refocusElementGetter).call(this);
65796
65809
  } else {
65797
65810
  var _classPrivateFieldGet2;
65798
- return (_classPrivateFieldGet2 = (0, _classPrivateFieldGet5.default)(this, _hot).getActiveEditor()) === null || _classPrivateFieldGet2 === void 0 ? void 0 : _classPrivateFieldGet2.TEXTAREA;
65811
+ return (_classPrivateFieldGet2 = (0, _classPrivateFieldGet7.default)(this, _hot).getActiveEditor()) === null || _classPrivateFieldGet2 === void 0 ? void 0 : _classPrivateFieldGet2.TEXTAREA;
65799
65812
  }
65800
65813
  }
65801
65814
 
@@ -65805,17 +65818,26 @@ class FocusManager {
65805
65818
  * @param {HTMLTableCellElement} [selectedCell] The highlighted cell/header element.
65806
65819
  */
65807
65820
  focusOnHighlightedCell(selectedCell) {
65808
- var _classPrivateFieldGet3;
65809
- const currentHighlightCoords = _classPrivateMethodGet(this, _getCurrentHighlightCoords, _getCurrentHighlightCoords2).call(this);
65810
- const currentlySelectedHighlight = selectedCell || _classPrivateMethodGet(this, _getSelectedCell, _getSelectedCell2).call(this);
65811
- let elementToBeFocused = (0, _classPrivateFieldGet5.default)(this, _hot).runHooks('modifyFocusedElement', currentHighlightCoords.row, currentHighlightCoords.col, currentlySelectedHighlight);
65812
- if (!(elementToBeFocused instanceof HTMLElement)) {
65813
- elementToBeFocused = currentlySelectedHighlight;
65814
- }
65815
- if (elementToBeFocused && !((_classPrivateFieldGet3 = (0, _classPrivateFieldGet5.default)(this, _hot).getActiveEditor()) !== null && _classPrivateFieldGet3 !== void 0 && _classPrivateFieldGet3.isOpened())) {
65816
- elementToBeFocused.focus({
65817
- preventScroll: true
65818
- });
65821
+ const focusElement = element => {
65822
+ var _classPrivateFieldGet3, _classPrivateFieldGet4;
65823
+ const currentHighlightCoords = (_classPrivateFieldGet3 = (0, _classPrivateFieldGet7.default)(this, _hot).getSelectedRangeLast()) === null || _classPrivateFieldGet3 === void 0 ? void 0 : _classPrivateFieldGet3.highlight;
65824
+ if (!currentHighlightCoords || !element) {
65825
+ return;
65826
+ }
65827
+ let elementToBeFocused = (0, _classPrivateFieldGet7.default)(this, _hot).runHooks('modifyFocusedElement', currentHighlightCoords.row, currentHighlightCoords.col, element);
65828
+ if (!(elementToBeFocused instanceof HTMLElement)) {
65829
+ elementToBeFocused = element;
65830
+ }
65831
+ if (elementToBeFocused && !((_classPrivateFieldGet4 = (0, _classPrivateFieldGet7.default)(this, _hot).getActiveEditor()) !== null && _classPrivateFieldGet4 !== void 0 && _classPrivateFieldGet4.isOpened())) {
65832
+ elementToBeFocused.focus({
65833
+ preventScroll: true
65834
+ });
65835
+ }
65836
+ };
65837
+ if (selectedCell) {
65838
+ focusElement(selectedCell);
65839
+ } else {
65840
+ _classPrivateMethodGet(this, _getSelectedCell, _getSelectedCell2).call(this, element => focusElement(element));
65819
65841
  }
65820
65842
  }
65821
65843
 
@@ -65823,49 +65845,63 @@ class FocusManager {
65823
65845
  * Set the focus to the active editor's `TEXTAREA` element after the provided delay. If no delay is provided, it
65824
65846
  * will be taken from the manager's configuration.
65825
65847
  *
65826
- * @param {number} delay Delay in milliseconds.
65848
+ * @param {number} [delay] Delay in milliseconds.
65827
65849
  */
65828
65850
  refocusToEditorTextarea() {
65829
- var _classPrivateFieldGet4;
65830
- let delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : (0, _classPrivateFieldGet5.default)(this, _refocusDelay);
65851
+ var _classPrivateFieldGet5;
65852
+ let delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : (0, _classPrivateFieldGet7.default)(this, _refocusDelay);
65831
65853
  const refocusElement = this.getRefocusElement();
65832
65854
 
65833
65855
  // Re-focus on the editor's `TEXTAREA` element (or a predefined element) if the `imeFastEdit` option is enabled.
65834
- if ((0, _classPrivateFieldGet5.default)(this, _hot).getSettings().imeFastEdit && !((_classPrivateFieldGet4 = (0, _classPrivateFieldGet5.default)(this, _hot).getActiveEditor()) !== null && _classPrivateFieldGet4 !== void 0 && _classPrivateFieldGet4.isOpened()) && !!refocusElement) {
65835
- (0, _classPrivateFieldGet5.default)(this, _hot)._registerTimeout(() => {
65836
- refocusElement.select();
65837
- }, delay);
65856
+ if ((0, _classPrivateFieldGet7.default)(this, _hot).getSettings().imeFastEdit && !((_classPrivateFieldGet5 = (0, _classPrivateFieldGet7.default)(this, _hot).getActiveEditor()) !== null && _classPrivateFieldGet5 !== void 0 && _classPrivateFieldGet5.isOpened()) && !!refocusElement) {
65857
+ if (!(0, _classPrivateFieldGet7.default)(this, _debouncedSelect).has(delay)) {
65858
+ (0, _classPrivateFieldGet7.default)(this, _debouncedSelect).set(delay, (0, _function.debounce)(() => {
65859
+ refocusElement.select();
65860
+ }, delay));
65861
+ }
65862
+ (0, _classPrivateFieldGet7.default)(this, _debouncedSelect).get(delay)();
65838
65863
  }
65839
65864
  }
65840
65865
  }
65841
65866
  exports.FocusManager = FocusManager;
65842
- function _getCurrentHighlightCoords2() {
65843
- const lastSelectedRange = (0, _classPrivateFieldGet5.default)(this, _hot).getSelectedRangeLast();
65844
- return lastSelectedRange.highlight;
65867
+ function _getSelectedCell2(callback) {
65868
+ var _classPrivateFieldGet6;
65869
+ const highlight = (_classPrivateFieldGet6 = (0, _classPrivateFieldGet7.default)(this, _hot).getSelectedRangeLast()) === null || _classPrivateFieldGet6 === void 0 ? void 0 : _classPrivateFieldGet6.highlight;
65870
+ if (!highlight) {
65871
+ callback(null);
65872
+ return;
65873
+ }
65874
+ const cell = (0, _classPrivateFieldGet7.default)(this, _hot).getCell(highlight.row, highlight.col, true);
65875
+ if (cell === null) {
65876
+ (0, _classPrivateFieldGet7.default)(this, _hot).addHookOnce('afterScroll', () => {
65877
+ callback((0, _classPrivateFieldGet7.default)(this, _hot).getCell(highlight.row, highlight.col, true));
65878
+ });
65879
+ } else {
65880
+ callback(cell);
65881
+ }
65845
65882
  }
65846
- function _getSelectedCell2() {
65847
- const selectedCellCoords = _classPrivateMethodGet(this, _getCurrentHighlightCoords, _getCurrentHighlightCoords2).call(this);
65848
- return (0, _classPrivateFieldGet5.default)(this, _hot).getCell(selectedCellCoords.row, selectedCellCoords.col, true);
65883
+ function _focusCell2() {
65884
+ _classPrivateMethodGet(this, _getSelectedCell, _getSelectedCell2).call(this, selectedCell => {
65885
+ const {
65886
+ activeElement
65887
+ } = (0, _classPrivateFieldGet7.default)(this, _hot).rootDocument;
65888
+
65889
+ // Blurring the `activeElement` removes the unwanted border around the focusable element (#6877)
65890
+ // and resets the `document.activeElement` property. The blurring should happen only when the
65891
+ // previously selected input element has not belonged to the Handsontable editor. If blurring is
65892
+ // triggered for all elements, there is a problem with the disappearing IME editor (#9672).
65893
+ if (activeElement && (0, _element.isOutsideInput)(activeElement)) {
65894
+ activeElement.blur();
65895
+ }
65896
+ this.focusOnHighlightedCell(selectedCell);
65897
+ });
65849
65898
  }
65850
- function _manageFocus2() {
65851
- const selectedCell = _classPrivateMethodGet(this, _getSelectedCell, _getSelectedCell2).call(this);
65852
- const {
65853
- activeElement
65854
- } = (0, _classPrivateFieldGet5.default)(this, _hot).rootDocument;
65855
-
65856
- // Blurring the `activeElement` removes the unwanted border around the focusable element (#6877)
65857
- // and resets the `document.activeElement` property. The blurring should happen only when the
65858
- // previously selected input element has not belonged to the Handsontable editor. If blurring is
65859
- // triggered for all elements, there is a problem with the disappearing IME editor (#9672).
65860
- if (activeElement && (0, _element.isOutsideInput)(activeElement)) {
65861
- activeElement.blur();
65862
- }
65863
- this.focusOnHighlightedCell(selectedCell);
65864
- if (this.getFocusMode() === FOCUS_MODES.MIXED && selectedCell.nodeName === 'TD') {
65865
- (0, _classPrivateFieldGet5.default)(this, _hot).addHookOnce('afterSelectionEnd', () => {
65899
+ function _focusEditorElement2() {
65900
+ _classPrivateMethodGet(this, _getSelectedCell, _getSelectedCell2).call(this, selectedCell => {
65901
+ if (this.getFocusMode() === FOCUS_MODES.MIXED && selectedCell.nodeName === 'TD') {
65866
65902
  this.refocusToEditorTextarea();
65867
- });
65868
- }
65903
+ }
65904
+ });
65869
65905
  }
65870
65906
  function _onUpdateSettings2(newSettings) {
65871
65907
  if (newSettings.imeFastEdit && this.getFocusMode() !== FOCUS_MODES.MIXED) {
@@ -66882,8 +66918,10 @@ var _src = _interopRequireDefault(__webpack_require__(480));
66882
66918
  var _mouseEventHandler = __webpack_require__(550);
66883
66919
  var _rootInstance = __webpack_require__(551);
66884
66920
  var _a11y = __webpack_require__(447);
66921
+ function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
66885
66922
  function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
66886
66923
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
66924
+ function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
66887
66925
  /**
66888
66926
  * @class TableView
66889
66927
  * @private
@@ -66895,11 +66933,25 @@ var _mouseDown = /*#__PURE__*/new WeakMap();
66895
66933
  var _table = /*#__PURE__*/new WeakMap();
66896
66934
  var _lastWidth = /*#__PURE__*/new WeakMap();
66897
66935
  var _lastHeight = /*#__PURE__*/new WeakMap();
66936
+ var _getAriaColcount = /*#__PURE__*/new WeakSet();
66937
+ var _updateAriaColcount = /*#__PURE__*/new WeakSet();
66898
66938
  class TableView {
66899
66939
  /**
66900
66940
  * @param {Hanstontable} hotInstance Instance of {@link Handsontable}.
66901
66941
  */
66902
66942
  constructor(hotInstance) {
66943
+ /**
66944
+ * Update the `aria-colcount` attribute by the provided value.
66945
+ *
66946
+ * @param {number} delta The number of columns to add or remove to the aria tag.
66947
+ */
66948
+ _classPrivateMethodInitSpec(this, _updateAriaColcount);
66949
+ /**
66950
+ * Return the value of the `aria-colcount` attribute.
66951
+ *
66952
+ * @returns {number} The value of the `aria-colcount` attribute.
66953
+ */
66954
+ _classPrivateMethodInitSpec(this, _getAriaColcount);
66903
66955
  /**
66904
66956
  * Instance of {@link Handsontable}.
66905
66957
  *
@@ -67136,7 +67188,7 @@ class TableView {
67136
67188
  }
67137
67189
  if (this.settings.ariaTags) {
67138
67190
  (0, _element.setAttribute)((0, _classPrivateFieldGet2.default)(this, _table), [(0, _a11y.A11Y_PRESENTATION)()]);
67139
- (0, _element.setAttribute)(rootElement, [(0, _a11y.A11Y_TREEGRID)(), (0, _a11y.A11Y_ROWCOUNT)(this.hot.countRows()), (0, _a11y.A11Y_COLCOUNT)(this.hot.countCols()), (0, _a11y.A11Y_MULTISELECTABLE)()]);
67191
+ (0, _element.setAttribute)(rootElement, [(0, _a11y.A11Y_TREEGRID)(), (0, _a11y.A11Y_ROWCOUNT)(-1), (0, _a11y.A11Y_COLCOUNT)(this.hot.countCols()), (0, _a11y.A11Y_MULTISELECTABLE)()]);
67140
67192
  }
67141
67193
  this.THEAD = rootDocument.createElement('THEAD');
67142
67194
  (0, _classPrivateFieldGet2.default)(this, _table).appendChild(this.THEAD);
@@ -67529,6 +67581,13 @@ class TableView {
67529
67581
  }
67530
67582
  this.hot.runHooks('afterGetRowHeaderRenderers', headerRenderers);
67531
67583
  (0, _classPrivateFieldSet2.default)(this, _rowHeadersCount, headerRenderers.length);
67584
+ if (this.hot.getSettings().ariaTags) {
67585
+ // Update the aria-colcount attribute.
67586
+ // Only needs to be done once after initialization/data update.
67587
+ if (_classPrivateMethodGet(this, _getAriaColcount, _getAriaColcount2).call(this) === this.hot.countCols()) {
67588
+ _classPrivateMethodGet(this, _updateAriaColcount, _updateAriaColcount2).call(this, (0, _classPrivateFieldGet2.default)(this, _rowHeadersCount));
67589
+ }
67590
+ }
67532
67591
  return headerRenderers;
67533
67592
  },
67534
67593
  columnHeaders: () => {
@@ -68168,7 +68227,6 @@ class TableView {
68168
68227
  getRowHeadersCount() {
68169
68228
  return (0, _classPrivateFieldGet2.default)(this, _rowHeadersCount);
68170
68229
  }
68171
-
68172
68230
  /**
68173
68231
  * Destroys internal WalkOnTable's instance. Detaches all of the bonded listeners.
68174
68232
  *
@@ -68179,6 +68237,13 @@ class TableView {
68179
68237
  this.eventManager.destroy();
68180
68238
  }
68181
68239
  }
68240
+ function _getAriaColcount2() {
68241
+ return parseInt(this.hot.rootElement.getAttribute((0, _a11y.A11Y_COLCOUNT)()[0]), 10);
68242
+ }
68243
+ function _updateAriaColcount2(delta) {
68244
+ const colCount = _classPrivateMethodGet(this, _getAriaColcount, _getAriaColcount2).call(this) + delta;
68245
+ (0, _element.setAttribute)(this.hot.rootElement, ...(0, _a11y.A11Y_COLCOUNT)(colCount));
68246
+ }
68182
68247
  var _default = exports["default"] = TableView;
68183
68248
 
68184
68249
  /***/ }),
@@ -73815,7 +73880,7 @@ class ColumnHeadersRenderer extends _base.default {
73815
73880
  columnHeadersCount
73816
73881
  } = this.table;
73817
73882
  if (this.table.isAriaEnabled()) {
73818
- (0, _element.setAttribute)(this.rootNode, [(0, _a11y.A11Y_PRESENTATION)()]);
73883
+ (0, _element.setAttribute)(this.rootNode, [(0, _a11y.A11Y_ROWGROUP)()]);
73819
73884
  }
73820
73885
  for (let rowHeaderIndex = 0; rowHeaderIndex < columnHeadersCount; rowHeaderIndex += 1) {
73821
73886
  const {
@@ -73837,7 +73902,10 @@ class ColumnHeadersRenderer extends _base.default {
73837
73902
  // Remove all accessibility-related attributes for the header to start fresh.
73838
73903
  (0, _element.removeAttribute)(TH, [new RegExp('aria-(.*)'), new RegExp('role')]);
73839
73904
  if (this.table.isAriaEnabled()) {
73840
- (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_COLINDEX)(renderedColumnIndex + 1 + this.table.rowHeadersCount), (0, _a11y.A11Y_TABINDEX)(-1), (0, _a11y.A11Y_COLUMNHEADER)(), ...(renderedColumnIndex >= 0 ? [(0, _a11y.A11Y_SCOPE_COL)()] : [])]);
73905
+ (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_COLINDEX)(renderedColumnIndex + 1 + this.table.rowHeadersCount), (0, _a11y.A11Y_TABINDEX)(-1), (0, _a11y.A11Y_COLUMNHEADER)(), ...(renderedColumnIndex >= 0 ? [(0, _a11y.A11Y_SCOPE_COL)()] : [
73906
+ // Adding `role=row` to the corner headers to prevent
73907
+ // https://github.com/handsontable/dev-handsontable/issues/1574
73908
+ (0, _a11y.A11Y_ROW)()])]);
73841
73909
  }
73842
73910
  columnHeaderFunctions[rowHeaderIndex](sourceColumnIndex, TH, rowHeaderIndex);
73843
73911
  }
@@ -73989,7 +74057,7 @@ class RowsRenderer extends _base.default {
73989
74057
  the number of rendered rows by specifying the table height and/or turning off the "renderAllRows" option.`);
73990
74058
  }
73991
74059
  if (this.table.isAriaEnabled()) {
73992
- (0, _element.setAttribute)(this.rootNode, [(0, _a11y.A11Y_PRESENTATION)()]);
74060
+ (0, _element.setAttribute)(this.rootNode, [(0, _a11y.A11Y_ROWGROUP)()]);
73993
74061
  }
73994
74062
  this.orderView.setSize(rowsToRender).setOffset(this.table.renderedRowToSource(0)).start();
73995
74063
  for (let visibleRowIndex = 0; visibleRowIndex < rowsToRender; visibleRowIndex++) {
@@ -75060,8 +75128,8 @@ class Overlay {
75060
75128
  rootDocument,
75061
75129
  rootWindow
75062
75130
  } = this.domBindings;
75063
- const clone = rootDocument.createElement('DIV');
75064
- const clonedTable = rootDocument.createElement('TABLE');
75131
+ const clone = rootDocument.createElement('div');
75132
+ const clonedTable = rootDocument.createElement('table');
75065
75133
  const tableParent = wtTable.wtRootElement.parentNode;
75066
75134
  clone.className = `${_constants.CLONE_CLASS_NAMES.get(this.type)} handsontable`;
75067
75135
  clone.setAttribute('dir', this.isRtl() ? 'rtl' : 'ltr');
@@ -93054,7 +93122,9 @@ function replaceData(data, setDataMapFunction, callbackFunction, config) {
93054
93122
  hotInstance.render();
93055
93123
  }
93056
93124
  if (hotInstance.getSettings().ariaTags) {
93057
- (0, _element.setAttribute)(hotInstance.rootElement, [(0, _a11y.A11Y_ROWCOUNT)(hotInstance.countRows()), (0, _a11y.A11Y_COLCOUNT)(hotInstance.countCols())]);
93125
+ (0, _element.setAttribute)(hotInstance.rootElement, [(0, _a11y.A11Y_ROWCOUNT)(-1),
93126
+ // If run after initialization, add the number of row headers.
93127
+ (0, _a11y.A11Y_COLCOUNT)(hotInstance.countCols() + (hotInstance.view ? hotInstance.countRowHeaders() : 0))]);
93058
93128
  }
93059
93129
  }
93060
93130
 
@@ -99857,6 +99927,7 @@ exports.PasswordEditor = _passwordEditor.PasswordEditor;
99857
99927
  exports.__esModule = true;
99858
99928
  var _textEditor = __webpack_require__(668);
99859
99929
  var _element = __webpack_require__(304);
99930
+ var _a11y = __webpack_require__(447);
99860
99931
  const EDITOR_TYPE = exports.EDITOR_TYPE = 'password';
99861
99932
 
99862
99933
  /**
@@ -99876,6 +99947,9 @@ class PasswordEditor extends _textEditor.TextEditor {
99876
99947
  this.textareaStyle = this.TEXTAREA.style;
99877
99948
  this.textareaStyle.width = 0;
99878
99949
  this.textareaStyle.height = 0;
99950
+ if (this.hot.getSettings().ariaTags) {
99951
+ (0, _element.setAttribute)(this.TEXTAREA, [(0, _a11y.A11Y_HIDDEN)()]);
99952
+ }
99879
99953
  (0, _element.empty)(this.TEXTAREA_PARENT);
99880
99954
  this.TEXTAREA_PARENT.appendChild(this.TEXTAREA);
99881
99955
  }
@@ -100678,7 +100752,6 @@ function createInput(rootDocument) {
100678
100752
  const input = rootDocument.createElement('input');
100679
100753
  input.className = 'htCheckboxRendererInput';
100680
100754
  input.type = 'checkbox';
100681
- input.setAttribute('autocomplete', 'off');
100682
100755
  input.setAttribute('tabindex', '-1');
100683
100756
  return input.cloneNode(false);
100684
100757
  }
@@ -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: 14.0.0-next-23212d5-20231127
29
- * Release date: 22/11/2023 (built at 27/11/2023 08:14:13)
28
+ * Version: 14.0.0-next-477622d-20231128
29
+ * Release date: 29/11/2023 (built at 28/11/2023 12:48:34)
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,.handsontable th:nth-child(2){border-left:1px solid #ccc}[dir=rtl].handsontable td:first-of-type,[dir=rtl].handsontable th:first-child,[dir=rtl].handsontable th:nth-child(2){border-right:1px solid #ccc}.handsontable .ht_clone_top th:nth-child(2){border-left-width:0;border-right:1px solid #ccc}[dir=rtl].handsontable .ht_clone_top th:nth-child(2){border-left:1px solid #ccc;border-right-width:0}.handsontable.htRowHeaders thead tr th:nth-child(2){border-left:1px solid #ccc}[dir=rtl].handsontable.htRowHeaders thead tr th:nth-child(2){border-right:1px solid #ccc}.handsontable tr:first-child td,.handsontable tr:first-child th{border-top:1px solid #ccc}.ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable tbody tr th,.ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable:not(.ht_clone_top) thead tr th:first-child{border-left:1px solid #ccc;border-right-width:0}[dir=rtl].ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable tbody tr th,[dir=rtl].ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable:not(.ht_clone_top) thead tr th:first-child{border-left-width:0;border-right:1px solid #ccc}.ht_master:not(.innerBorderTop):not(.innerBorderBottom) thead tr.lastChild th,.ht_master:not(.innerBorderTop):not(.innerBorderBottom) thead tr:last-child th,.ht_master:not(.innerBorderTop):not(.innerBorderBottom)~.handsontable thead tr.lastChild th,.ht_master:not(.innerBorderTop):not(.innerBorderBottom)~.handsontable thead tr:last-child th{border-bottom-width:0}.handsontable th{background-color:#f0f0f0;color:#222;font-weight:400;text-align:center;white-space:nowrap}.handsontable thead th{padding:0}.handsontable th.active{background-color:#ccc}.handsontable thead th .relative{padding:2px 4px}.handsontable span.colHeader{display:inline-block;line-height:1.1}.handsontable .wtBorder{font-size:0;position:absolute}.handsontable .wtBorder.hidden{display:none!important}.handsontable .wtBorder.current{z-index:10}.handsontable .wtBorder.area{z-index:8}.handsontable .wtBorder.fill{z-index:6}.handsontable .wtBorder.corner{cursor:crosshair;font-size:0}.ht_clone_master{z-index:100}.ht_clone_inline_start{z-index:120}.ht_clone_bottom{z-index:130}.ht_clone_bottom_inline_start_corner{z-index:150}.ht_clone_top{z-index:160}.ht_clone_top_inline_start_corner{z-index:180}.handsontable col.hidden{width:0!important}.handsontable tr.hidden,.handsontable tr.hidden td,.handsontable tr.hidden th{display:none}.ht_clone_bottom,.ht_clone_inline_start,.ht_clone_top,.ht_master{overflow:hidden}.ht_master .wtHolder{overflow:auto}.handsontable .ht_clone_inline_start thead,.handsontable .ht_master thead,.handsontable .ht_master tr th{visibility:hidden}.ht_clone_bottom .wtHolder,.ht_clone_inline_start .wtHolder,.ht_clone_top .wtHolder{overflow:hidden}.handsontable{color:#373737;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica Neue,Arial,sans-serif;font-size:13px;font-weight:400;touch-action:manipulation}.handsontable a{color:#104acc}.handsontable.htAutoSize{left:-99000px;position:absolute;top:-99000px;visibility:hidden}.handsontable td.htInvalid{background-color:#ffbeba!important}.handsontable td.htNoWrap{white-space:nowrap}.handsontable td.invisibleSelection,.handsontable th.invisibleSelection{outline:none}.handsontable td.invisibleSelection::selection,.handsontable th.invisibleSelection::selection{background:hsla(0,0%,100%,0)}.hot-display-license-info{color:#373737;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica Neue,Arial,sans-serif;font-size:10px;font-weight:400;padding:5px 0 3px;text-align:left}.hot-display-license-info a{color:#104acc;font-size:10px}.handsontable .htFocusCatcher{border:0;height:0;margin:0;opacity:0;padding:0;position:absolute;width:0;z-index:-1}.handsontable .manualColumnResizer{cursor:col-resize;height:25px;position:absolute;top:0;width:5px;z-index:210}.handsontable .manualRowResizer{cursor:row-resize;height:5px;left:0;position:absolute;width:50px;z-index:210}.handsontable .manualColumnResizer.active,.handsontable .manualColumnResizer:hover,.handsontable .manualRowResizer.active,.handsontable .manualRowResizer:hover{background-color:#34a9db}.handsontable .manualColumnResizerGuide{background-color:#34a9db;border-left:none;border-right:1px dashed #777;display:none;margin-left:5px;margin-right:unset;position:absolute;right:unset;top:0;width:0}[dir=rtl].handsontable .manualColumnResizerGuide{border-left:1px dashed #777;border-right:none;left:unset;margin-left:unset;margin-right:5px}.handsontable .manualRowResizerGuide{background-color:#34a9db;border-bottom:1px dashed #777;bottom:0;display:none;height:0;left:0;margin-top:5px;position:absolute}.handsontable .manualColumnResizerGuide.active,.handsontable .manualRowResizerGuide.active{display:block;z-index:209}.handsontable .columnSorting{position:relative}.handsontable .columnSorting.sortAction:hover{cursor:pointer;text-decoration:underline}.handsontable span.colHeader.columnSorting:before{background-position-x:right;background-repeat:no-repeat;background-size:contain;content:"";height:10px;left:unset;margin-top:-6px;padding-left:8px;padding-right:0;position:absolute;right:-9px;top:50%;width:5px}[dir=rtl].handsontable span.colHeader.columnSorting:before{background-position-x:left;left:-9px;padding-left:0;padding-right:8px;right:unset}.handsontable span.colHeader.columnSorting.ascending:before{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAMAAADJ7yrpAAAAKlBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKE86IAAAADXRSTlMABBEmRGprlJW72e77tTkTKwAAAFNJREFUeAHtzjkSgCAUBNHPgsoy97+ulGXRqJE5L+xkxoYt2UdsLb5bqFINz+aLuuLn5rIu2RkO3fZpWENimNgiw6iBYRTPMLJjGFxQZ1hxxb/xBI1qC8k39CdKAAAAAElFTkSuQmCC)}.handsontable span.colHeader.columnSorting.descending:before{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAMAAADJ7yrpAAAAKlBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKE86IAAAADXRSTlMABBEmRGprlJW72e77tTkTKwAAAFJJREFUeAHtzjkSgCAQRNFmQYUZ7n9dKUvru0TmvPAn3br0QfgdZ5xx6x+rQn23GqTYnq1FDcnuzZIO2WmedVqIRVxgGKEyjNgYRjKGkZ1hFIZ3I70LyM0VtU8AAAAASUVORK5CYII=)}.htGhostTable .htCore span.colHeader.columnSorting:not(.indicatorDisabled):before{content:"*";display:inline-block;padding-right:20px;position:relative}.handsontable td.area,.handsontable td.area-1,.handsontable td.area-2,.handsontable td.area-3,.handsontable td.area-4,.handsontable td.area-5,.handsontable td.area-6,.handsontable td.area-7{position:relative}.handsontable td.area-1:before,.handsontable td.area-2:before,.handsontable td.area-3:before,.handsontable td.area-4:before,.handsontable td.area-5:before,.handsontable td.area-6:before,.handsontable td.area-7:before,.handsontable td.area:before{background:#005eff;bottom:0;bottom:-100%\9;content:"";left:0;position:absolute;right:0;top:0}@media (-ms-high-contrast:none),screen and (-ms-high-contrast:active){.handsontable td.area-1:before,.handsontable td.area-2:before,.handsontable td.area-3:before,.handsontable td.area-4:before,.handsontable td.area-5:before,.handsontable td.area-6:before,.handsontable td.area-7:before,.handsontable td.area:before{bottom:-100%}}.handsontable td.area:before{opacity:.1}.handsontable td.area-1:before{opacity:.2}.handsontable td.area-2:before{opacity:.27}.handsontable td.area-3:before{opacity:.35}.handsontable td.area-4:before{opacity:.41}.handsontable td.area-5:before{opacity:.47}.handsontable td.area-6:before{opacity:.54}.handsontable td.area-7:before{opacity:.58}.handsontable tbody th.current,.handsontable thead th.current{box-shadow:inset 0 0 0 2px #4b89ff}.handsontable tbody th.ht__highlight,.handsontable thead th.ht__highlight{background-color:#dcdcdc}.handsontable tbody th.ht__active_highlight,.handsontable thead th.ht__active_highlight{background-color:#8eb0e7;color:#000}.handsontableInput{background-color:#fff;border:none;border-radius:0;box-shadow:inset 0 0 0 2px #5292f7;color:#000;display:block;font-family:inherit;font-size:inherit;line-height:21px;margin:0;outline-width:0;padding:1px 5px 0;resize:none}.handsontableInput:focus{outline:none}.handsontableInputHolder{left:0;position:absolute;top:0}.htSelectEditor{-webkit-appearance:menulist-button!important;position:absolute;width:auto}.htSelectEditor:focus{outline:none}.handsontable .htDimmed{color:#777}.handsontable .htSubmenu{position:relative}.handsontable .htSubmenu :after{color:#777;content:"▶";font-size:9px;position:absolute;right:5px}[dir=rtl].handsontable .htSubmenu :after{content:""}[dir=rtl].handsontable .htSubmenu :before{color:#777;content:"◀";font-size:9px;left:5px;position:absolute}.handsontable .htLeft{text-align:left}.handsontable .htCenter{text-align:center}.handsontable .htRight{text-align:right}.handsontable .htJustify{text-align:justify}.handsontable .htTop{vertical-align:top}.handsontable .htMiddle{vertical-align:middle}.handsontable .htBottom{vertical-align:bottom}.handsontable .htPlaceholder{color:#999}.handsontable.listbox{margin:0}.handsontable.listbox .ht_master table{background:#fff;border:1px solid #ccc;border-collapse:separate}.handsontable.listbox td,.handsontable.listbox th,.handsontable.listbox tr:first-child td,.handsontable.listbox tr:first-child th,.handsontable.listbox tr:last-child th{border-color:transparent!important}.handsontable.listbox td,.handsontable.listbox th{text-overflow:ellipsis;white-space:nowrap}.handsontable.listbox td.htDimmed{color:inherit;cursor:default;font-style:inherit}.handsontable.listbox .wtBorder{visibility:hidden}.handsontable.listbox tr td.current,.handsontable.listbox tr:hover td{background:#eee}.ht_editor_hidden{z-index:-1}.ht_editor_visible{z-index:200}.handsontable td.htSearchResult{background:#fcedd9;color:#583707}.handsontable .collapsibleIndicator{background:#eee;border:1px solid #a6a6a6;border-radius:10px;-webkit-box-shadow:0 0 0 6px #eee;-moz-box-shadow:0 0 0 6px #eee;box-shadow:0 0 0 3px #eee;color:#222;cursor:pointer;font-size:10px;height:10px;left:unset;line-height:8px;position:absolute;right:5px;text-align:center;top:50%;transform:translateY(-50%);width:10px}[dir=rtl].handsontable .collapsibleIndicator{left:5px;right:unset}.handsontable.mobile,.handsontable.mobile .wtHolder{-webkit-touch-callout:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-overflow-scrolling:touch;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.handsontable.mobile .handsontableInput:focus{-webkit-appearance:none;-webkit-box-shadow:inset 0 0 0 2px #5292f7;-moz-box-shadow:inset 0 0 0 2px #5292f7;box-shadow:inset 0 0 0 2px #5292f7}.handsontable .bottomSelectionHandle,.handsontable .bottomSelectionHandle-HitArea,.handsontable .topSelectionHandle,.handsontable .topSelectionHandle-HitArea{left:-10000px;right:unset;top:-10000px;z-index:9999}[dir=rtl].handsontable .bottomSelectionHandle,[dir=rtl].handsontable .bottomSelectionHandle-HitArea,[dir=rtl].handsontable .topSelectionHandle,[dir=rtl].handsontable .topSelectionHandle-HitArea{left:unset;right:-10000px}.handsontable.hide-tween{-webkit-animation:opacity-hide .3s;animation:opacity-hide .3s;animation-fill-mode:forwards;-webkit-animation-fill-mode:forwards}.handsontable.show-tween{-webkit-animation:opacity-show .3s;animation:opacity-show .3s;animation-fill-mode:forwards;-webkit-animation-fill-mode:forwards}
31
31
  /*!
32
32
  * Pikaday