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

Sign up to get free protection for your applications and to get access to all the features.
@@ -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')
@@ -105,8 +105,8 @@ Handsontable.hooks = _pluginHooks.default.getSingleton();
105
105
  Handsontable.CellCoords = _src.CellCoords;
106
106
  Handsontable.CellRange = _src.CellRange;
107
107
  Handsontable.packageName = 'handsontable';
108
- Handsontable.buildDate = "27/11/2023 08:13:56";
109
- Handsontable.version = "14.0.0-next-23212d5-20231127";
108
+ Handsontable.buildDate = "28/11/2023 12:48:17";
109
+ Handsontable.version = "14.0.0-next-477622d-20231128";
110
110
  Handsontable.languages = {
111
111
  dictionaryKeys: _registry.dictionaryKeys,
112
112
  getLanguageDictionary: _registry.getLanguageDictionary,
@@ -8513,7 +8513,7 @@ const domMessages = {
8513
8513
  function _injectProductInfo(key, element) {
8514
8514
  const hasValidType = !isEmpty(key);
8515
8515
  const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
8516
- const hotVersion = "14.0.0-next-23212d5-20231127";
8516
+ const hotVersion = "14.0.0-next-477622d-20231128";
8517
8517
  let keyValidityDate;
8518
8518
  let consoleMessageState = 'invalid';
8519
8519
  let domMessageState = 'invalid';
@@ -8521,7 +8521,7 @@ function _injectProductInfo(key, element) {
8521
8521
  const schemaValidity = _checkKeySchema(key);
8522
8522
  if (hasValidType || isNonCommercial || schemaValidity) {
8523
8523
  if (schemaValidity) {
8524
- const releaseDate = (0, _moment.default)("22/11/2023", 'DD/MM/YYYY');
8524
+ const releaseDate = (0, _moment.default)("29/11/2023", 'DD/MM/YYYY');
8525
8525
  const releaseDays = Math.floor(releaseDate.toDate().getTime() / 8.64e7);
8526
8526
  const keyValidityDays = _extractTime(key);
8527
8527
  keyValidityDate = (0, _moment.default)((keyValidityDays + 1) * 8.64e7, 'x').format('MMMM DD, YYYY');
@@ -8971,6 +8971,8 @@ const A11Y_GRIDCELL = () => ['role', 'gridcell'];
8971
8971
  exports.A11Y_GRIDCELL = A11Y_GRIDCELL;
8972
8972
  const A11Y_ROWHEADER = () => ['role', 'rowheader'];
8973
8973
  exports.A11Y_ROWHEADER = A11Y_ROWHEADER;
8974
+ const A11Y_ROWGROUP = () => ['role', 'rowgroup'];
8975
+ exports.A11Y_ROWGROUP = A11Y_ROWGROUP;
8974
8976
  const A11Y_COLUMNHEADER = () => ['role', 'columnheader'];
8975
8977
  exports.A11Y_COLUMNHEADER = A11Y_COLUMNHEADER;
8976
8978
  const A11Y_ROW = () => ['role', 'row'];
@@ -14180,10 +14182,11 @@ function getListenersCounter() {
14180
14182
  __webpack_require__(78);
14181
14183
  var _interopRequireDefault = __webpack_require__(1);
14182
14184
  exports.__esModule = true;
14183
- var _classPrivateFieldGet5 = _interopRequireDefault(__webpack_require__(133));
14185
+ var _classPrivateFieldGet7 = _interopRequireDefault(__webpack_require__(133));
14184
14186
  var _classPrivateFieldSet2 = _interopRequireDefault(__webpack_require__(136));
14185
14187
  var _console = __webpack_require__(129);
14186
14188
  var _element = __webpack_require__(107);
14189
+ var _function = __webpack_require__(115);
14187
14190
  function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
14188
14191
  function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
14189
14192
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
@@ -14208,9 +14211,10 @@ var _hot = /*#__PURE__*/new WeakMap();
14208
14211
  var _focusMode = /*#__PURE__*/new WeakMap();
14209
14212
  var _refocusDelay = /*#__PURE__*/new WeakMap();
14210
14213
  var _refocusElementGetter = /*#__PURE__*/new WeakMap();
14211
- var _getCurrentHighlightCoords = /*#__PURE__*/new WeakSet();
14214
+ var _debouncedSelect = /*#__PURE__*/new WeakMap();
14212
14215
  var _getSelectedCell = /*#__PURE__*/new WeakSet();
14213
- var _manageFocus = /*#__PURE__*/new WeakSet();
14216
+ var _focusCell = /*#__PURE__*/new WeakSet();
14217
+ var _focusEditorElement = /*#__PURE__*/new WeakSet();
14214
14218
  var _onUpdateSettings = /*#__PURE__*/new WeakSet();
14215
14219
  class FocusManager {
14216
14220
  constructor(hotInstance) {
@@ -14218,29 +14222,23 @@ class FocusManager {
14218
14222
  /**
14219
14223
  * Update the manager configuration after calling `updateSettings`.
14220
14224
  *
14221
- * @private
14222
14225
  * @param {object} newSettings The new settings passed to the `updateSettings` method.
14223
14226
  */
14224
14227
  _classPrivateMethodInitSpec(this, _onUpdateSettings);
14225
14228
  /**
14226
- * Manage the browser's focus after cell selection.
14227
- *
14228
- * @private
14229
+ * Manage the browser's focus after cell selection end.
14229
14230
  */
14230
- _classPrivateMethodInitSpec(this, _manageFocus);
14231
+ _classPrivateMethodInitSpec(this, _focusEditorElement);
14231
14232
  /**
14232
- * Get and return the currently selected and highlighted cell/header element.
14233
- *
14234
- * @private
14235
- * @returns {HTMLTableCellElement}
14233
+ * Manage the browser's focus after each cell selection change.
14236
14234
  */
14237
- _classPrivateMethodInitSpec(this, _getSelectedCell);
14235
+ _classPrivateMethodInitSpec(this, _focusCell);
14238
14236
  /**
14239
- * Get the coordinates of the highlight of the currently selected cell/header.
14237
+ * Get and return the currently selected and highlighted cell/header element.
14240
14238
  *
14241
- * @returns {CellCoords}
14239
+ * @param {Function} callback Callback function to be called after the cell element is retrieved.
14242
14240
  */
14243
- _classPrivateMethodInitSpec(this, _getCurrentHighlightCoords);
14241
+ _classPrivateMethodInitSpec(this, _getSelectedCell);
14244
14242
  /**
14245
14243
  * The Handsontable instance.
14246
14244
  */
@@ -14256,7 +14254,7 @@ class FocusManager {
14256
14254
  * - 'mixed' - The browser's focus switches from the lastly selected cell element to the currently active editor's
14257
14255
  * `TEXTAREA` element after a delay defined in the manager.
14258
14256
  *
14259
- * @type {string}
14257
+ * @type {'cell' | 'mixed'}
14260
14258
  */
14261
14259
  _classPrivateFieldInitSpec(this, _focusMode, {
14262
14260
  writable: true,
@@ -14282,20 +14280,35 @@ class FocusManager {
14282
14280
  writable: true,
14283
14281
  value: null
14284
14282
  });
14283
+ /**
14284
+ * Map of the debounced `select` functions.
14285
+ *
14286
+ * @type {Map<number, Function>}
14287
+ */
14288
+ _classPrivateFieldInitSpec(this, _debouncedSelect, {
14289
+ writable: true,
14290
+ value: new Map()
14291
+ });
14285
14292
  const hotSettings = hotInstance.getSettings();
14286
14293
  (0, _classPrivateFieldSet2.default)(this, _hot, hotInstance);
14287
14294
  (0, _classPrivateFieldSet2.default)(this, _focusMode, hotSettings.imeFastEdit ? FOCUS_MODES.MIXED : FOCUS_MODES.CELL);
14288
- (0, _classPrivateFieldGet5.default)(this, _hot).addHook('afterUpdateSettings', function () {
14295
+ (0, _classPrivateFieldGet7.default)(this, _hot).addHook('afterUpdateSettings', function () {
14289
14296
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
14290
14297
  args[_key] = arguments[_key];
14291
14298
  }
14292
14299
  return _classPrivateMethodGet(_this, _onUpdateSettings, _onUpdateSettings2).call(_this, ...args);
14293
14300
  });
14294
- (0, _classPrivateFieldGet5.default)(this, _hot).addHook('afterSelection', function () {
14301
+ (0, _classPrivateFieldGet7.default)(this, _hot).addHook('afterSelection', function () {
14295
14302
  for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
14296
14303
  args[_key2] = arguments[_key2];
14297
14304
  }
14298
- return _classPrivateMethodGet(_this, _manageFocus, _manageFocus2).call(_this, ...args);
14305
+ return _classPrivateMethodGet(_this, _focusCell, _focusCell2).call(_this, ...args);
14306
+ });
14307
+ (0, _classPrivateFieldGet7.default)(this, _hot).addHook('afterSelectionEnd', function () {
14308
+ for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
14309
+ args[_key3] = arguments[_key3];
14310
+ }
14311
+ return _classPrivateMethodGet(_this, _focusEditorElement, _focusEditorElement2).call(_this, ...args);
14299
14312
  });
14300
14313
  }
14301
14314
 
@@ -14305,7 +14318,7 @@ class FocusManager {
14305
14318
  * @returns {'cell' | 'mixed'}
14306
14319
  */
14307
14320
  getFocusMode() {
14308
- return (0, _classPrivateFieldGet5.default)(this, _focusMode);
14321
+ return (0, _classPrivateFieldGet7.default)(this, _focusMode);
14309
14322
  }
14310
14323
 
14311
14324
  /**
@@ -14328,7 +14341,7 @@ class FocusManager {
14328
14341
  * @returns {number} Delay in milliseconds.
14329
14342
  */
14330
14343
  getRefocusDelay() {
14331
- return (0, _classPrivateFieldGet5.default)(this, _refocusDelay);
14344
+ return (0, _classPrivateFieldGet7.default)(this, _refocusDelay);
14332
14345
  }
14333
14346
 
14334
14347
  /**
@@ -14356,11 +14369,11 @@ class FocusManager {
14356
14369
  * @returns {HTMLTextAreaElement|HTMLElement|undefined}
14357
14370
  */
14358
14371
  getRefocusElement() {
14359
- if (typeof (0, _classPrivateFieldGet5.default)(this, _refocusElementGetter) === 'function') {
14360
- return (0, _classPrivateFieldGet5.default)(this, _refocusElementGetter).call(this);
14372
+ if (typeof (0, _classPrivateFieldGet7.default)(this, _refocusElementGetter) === 'function') {
14373
+ return (0, _classPrivateFieldGet7.default)(this, _refocusElementGetter).call(this);
14361
14374
  } else {
14362
14375
  var _classPrivateFieldGet2;
14363
- return (_classPrivateFieldGet2 = (0, _classPrivateFieldGet5.default)(this, _hot).getActiveEditor()) === null || _classPrivateFieldGet2 === void 0 ? void 0 : _classPrivateFieldGet2.TEXTAREA;
14376
+ return (_classPrivateFieldGet2 = (0, _classPrivateFieldGet7.default)(this, _hot).getActiveEditor()) === null || _classPrivateFieldGet2 === void 0 ? void 0 : _classPrivateFieldGet2.TEXTAREA;
14364
14377
  }
14365
14378
  }
14366
14379
 
@@ -14370,17 +14383,26 @@ class FocusManager {
14370
14383
  * @param {HTMLTableCellElement} [selectedCell] The highlighted cell/header element.
14371
14384
  */
14372
14385
  focusOnHighlightedCell(selectedCell) {
14373
- var _classPrivateFieldGet3;
14374
- const currentHighlightCoords = _classPrivateMethodGet(this, _getCurrentHighlightCoords, _getCurrentHighlightCoords2).call(this);
14375
- const currentlySelectedHighlight = selectedCell || _classPrivateMethodGet(this, _getSelectedCell, _getSelectedCell2).call(this);
14376
- let elementToBeFocused = (0, _classPrivateFieldGet5.default)(this, _hot).runHooks('modifyFocusedElement', currentHighlightCoords.row, currentHighlightCoords.col, currentlySelectedHighlight);
14377
- if (!(elementToBeFocused instanceof HTMLElement)) {
14378
- elementToBeFocused = currentlySelectedHighlight;
14379
- }
14380
- if (elementToBeFocused && !((_classPrivateFieldGet3 = (0, _classPrivateFieldGet5.default)(this, _hot).getActiveEditor()) !== null && _classPrivateFieldGet3 !== void 0 && _classPrivateFieldGet3.isOpened())) {
14381
- elementToBeFocused.focus({
14382
- preventScroll: true
14383
- });
14386
+ const focusElement = element => {
14387
+ var _classPrivateFieldGet3, _classPrivateFieldGet4;
14388
+ const currentHighlightCoords = (_classPrivateFieldGet3 = (0, _classPrivateFieldGet7.default)(this, _hot).getSelectedRangeLast()) === null || _classPrivateFieldGet3 === void 0 ? void 0 : _classPrivateFieldGet3.highlight;
14389
+ if (!currentHighlightCoords || !element) {
14390
+ return;
14391
+ }
14392
+ let elementToBeFocused = (0, _classPrivateFieldGet7.default)(this, _hot).runHooks('modifyFocusedElement', currentHighlightCoords.row, currentHighlightCoords.col, element);
14393
+ if (!(elementToBeFocused instanceof HTMLElement)) {
14394
+ elementToBeFocused = element;
14395
+ }
14396
+ if (elementToBeFocused && !((_classPrivateFieldGet4 = (0, _classPrivateFieldGet7.default)(this, _hot).getActiveEditor()) !== null && _classPrivateFieldGet4 !== void 0 && _classPrivateFieldGet4.isOpened())) {
14397
+ elementToBeFocused.focus({
14398
+ preventScroll: true
14399
+ });
14400
+ }
14401
+ };
14402
+ if (selectedCell) {
14403
+ focusElement(selectedCell);
14404
+ } else {
14405
+ _classPrivateMethodGet(this, _getSelectedCell, _getSelectedCell2).call(this, element => focusElement(element));
14384
14406
  }
14385
14407
  }
14386
14408
 
@@ -14388,49 +14410,63 @@ class FocusManager {
14388
14410
  * Set the focus to the active editor's `TEXTAREA` element after the provided delay. If no delay is provided, it
14389
14411
  * will be taken from the manager's configuration.
14390
14412
  *
14391
- * @param {number} delay Delay in milliseconds.
14413
+ * @param {number} [delay] Delay in milliseconds.
14392
14414
  */
14393
14415
  refocusToEditorTextarea() {
14394
- var _classPrivateFieldGet4;
14395
- let delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : (0, _classPrivateFieldGet5.default)(this, _refocusDelay);
14416
+ var _classPrivateFieldGet5;
14417
+ let delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : (0, _classPrivateFieldGet7.default)(this, _refocusDelay);
14396
14418
  const refocusElement = this.getRefocusElement();
14397
14419
 
14398
14420
  // Re-focus on the editor's `TEXTAREA` element (or a predefined element) if the `imeFastEdit` option is enabled.
14399
- if ((0, _classPrivateFieldGet5.default)(this, _hot).getSettings().imeFastEdit && !((_classPrivateFieldGet4 = (0, _classPrivateFieldGet5.default)(this, _hot).getActiveEditor()) !== null && _classPrivateFieldGet4 !== void 0 && _classPrivateFieldGet4.isOpened()) && !!refocusElement) {
14400
- (0, _classPrivateFieldGet5.default)(this, _hot)._registerTimeout(() => {
14401
- refocusElement.select();
14402
- }, delay);
14421
+ if ((0, _classPrivateFieldGet7.default)(this, _hot).getSettings().imeFastEdit && !((_classPrivateFieldGet5 = (0, _classPrivateFieldGet7.default)(this, _hot).getActiveEditor()) !== null && _classPrivateFieldGet5 !== void 0 && _classPrivateFieldGet5.isOpened()) && !!refocusElement) {
14422
+ if (!(0, _classPrivateFieldGet7.default)(this, _debouncedSelect).has(delay)) {
14423
+ (0, _classPrivateFieldGet7.default)(this, _debouncedSelect).set(delay, (0, _function.debounce)(() => {
14424
+ refocusElement.select();
14425
+ }, delay));
14426
+ }
14427
+ (0, _classPrivateFieldGet7.default)(this, _debouncedSelect).get(delay)();
14403
14428
  }
14404
14429
  }
14405
14430
  }
14406
14431
  exports.FocusManager = FocusManager;
14407
- function _getCurrentHighlightCoords2() {
14408
- const lastSelectedRange = (0, _classPrivateFieldGet5.default)(this, _hot).getSelectedRangeLast();
14409
- return lastSelectedRange.highlight;
14432
+ function _getSelectedCell2(callback) {
14433
+ var _classPrivateFieldGet6;
14434
+ const highlight = (_classPrivateFieldGet6 = (0, _classPrivateFieldGet7.default)(this, _hot).getSelectedRangeLast()) === null || _classPrivateFieldGet6 === void 0 ? void 0 : _classPrivateFieldGet6.highlight;
14435
+ if (!highlight) {
14436
+ callback(null);
14437
+ return;
14438
+ }
14439
+ const cell = (0, _classPrivateFieldGet7.default)(this, _hot).getCell(highlight.row, highlight.col, true);
14440
+ if (cell === null) {
14441
+ (0, _classPrivateFieldGet7.default)(this, _hot).addHookOnce('afterScroll', () => {
14442
+ callback((0, _classPrivateFieldGet7.default)(this, _hot).getCell(highlight.row, highlight.col, true));
14443
+ });
14444
+ } else {
14445
+ callback(cell);
14446
+ }
14410
14447
  }
14411
- function _getSelectedCell2() {
14412
- const selectedCellCoords = _classPrivateMethodGet(this, _getCurrentHighlightCoords, _getCurrentHighlightCoords2).call(this);
14413
- return (0, _classPrivateFieldGet5.default)(this, _hot).getCell(selectedCellCoords.row, selectedCellCoords.col, true);
14448
+ function _focusCell2() {
14449
+ _classPrivateMethodGet(this, _getSelectedCell, _getSelectedCell2).call(this, selectedCell => {
14450
+ const {
14451
+ activeElement
14452
+ } = (0, _classPrivateFieldGet7.default)(this, _hot).rootDocument;
14453
+
14454
+ // Blurring the `activeElement` removes the unwanted border around the focusable element (#6877)
14455
+ // and resets the `document.activeElement` property. The blurring should happen only when the
14456
+ // previously selected input element has not belonged to the Handsontable editor. If blurring is
14457
+ // triggered for all elements, there is a problem with the disappearing IME editor (#9672).
14458
+ if (activeElement && (0, _element.isOutsideInput)(activeElement)) {
14459
+ activeElement.blur();
14460
+ }
14461
+ this.focusOnHighlightedCell(selectedCell);
14462
+ });
14414
14463
  }
14415
- function _manageFocus2() {
14416
- const selectedCell = _classPrivateMethodGet(this, _getSelectedCell, _getSelectedCell2).call(this);
14417
- const {
14418
- activeElement
14419
- } = (0, _classPrivateFieldGet5.default)(this, _hot).rootDocument;
14420
-
14421
- // Blurring the `activeElement` removes the unwanted border around the focusable element (#6877)
14422
- // and resets the `document.activeElement` property. The blurring should happen only when the
14423
- // previously selected input element has not belonged to the Handsontable editor. If blurring is
14424
- // triggered for all elements, there is a problem with the disappearing IME editor (#9672).
14425
- if (activeElement && (0, _element.isOutsideInput)(activeElement)) {
14426
- activeElement.blur();
14427
- }
14428
- this.focusOnHighlightedCell(selectedCell);
14429
- if (this.getFocusMode() === FOCUS_MODES.MIXED && selectedCell.nodeName === 'TD') {
14430
- (0, _classPrivateFieldGet5.default)(this, _hot).addHookOnce('afterSelectionEnd', () => {
14464
+ function _focusEditorElement2() {
14465
+ _classPrivateMethodGet(this, _getSelectedCell, _getSelectedCell2).call(this, selectedCell => {
14466
+ if (this.getFocusMode() === FOCUS_MODES.MIXED && selectedCell.nodeName === 'TD') {
14431
14467
  this.refocusToEditorTextarea();
14432
- });
14433
- }
14468
+ }
14469
+ });
14434
14470
  }
14435
14471
  function _onUpdateSettings2(newSettings) {
14436
14472
  if (newSettings.imeFastEdit && this.getFocusMode() !== FOCUS_MODES.MIXED) {
@@ -15447,8 +15483,10 @@ var _src = _interopRequireDefault(__webpack_require__(147));
15447
15483
  var _mouseEventHandler = __webpack_require__(217);
15448
15484
  var _rootInstance = __webpack_require__(218);
15449
15485
  var _a11y = __webpack_require__(114);
15486
+ function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
15450
15487
  function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
15451
15488
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
15489
+ function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
15452
15490
  /**
15453
15491
  * @class TableView
15454
15492
  * @private
@@ -15460,11 +15498,25 @@ var _mouseDown = /*#__PURE__*/new WeakMap();
15460
15498
  var _table = /*#__PURE__*/new WeakMap();
15461
15499
  var _lastWidth = /*#__PURE__*/new WeakMap();
15462
15500
  var _lastHeight = /*#__PURE__*/new WeakMap();
15501
+ var _getAriaColcount = /*#__PURE__*/new WeakSet();
15502
+ var _updateAriaColcount = /*#__PURE__*/new WeakSet();
15463
15503
  class TableView {
15464
15504
  /**
15465
15505
  * @param {Hanstontable} hotInstance Instance of {@link Handsontable}.
15466
15506
  */
15467
15507
  constructor(hotInstance) {
15508
+ /**
15509
+ * Update the `aria-colcount` attribute by the provided value.
15510
+ *
15511
+ * @param {number} delta The number of columns to add or remove to the aria tag.
15512
+ */
15513
+ _classPrivateMethodInitSpec(this, _updateAriaColcount);
15514
+ /**
15515
+ * Return the value of the `aria-colcount` attribute.
15516
+ *
15517
+ * @returns {number} The value of the `aria-colcount` attribute.
15518
+ */
15519
+ _classPrivateMethodInitSpec(this, _getAriaColcount);
15468
15520
  /**
15469
15521
  * Instance of {@link Handsontable}.
15470
15522
  *
@@ -15701,7 +15753,7 @@ class TableView {
15701
15753
  }
15702
15754
  if (this.settings.ariaTags) {
15703
15755
  (0, _element.setAttribute)((0, _classPrivateFieldGet2.default)(this, _table), [(0, _a11y.A11Y_PRESENTATION)()]);
15704
- (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)()]);
15756
+ (0, _element.setAttribute)(rootElement, [(0, _a11y.A11Y_TREEGRID)(), (0, _a11y.A11Y_ROWCOUNT)(-1), (0, _a11y.A11Y_COLCOUNT)(this.hot.countCols()), (0, _a11y.A11Y_MULTISELECTABLE)()]);
15705
15757
  }
15706
15758
  this.THEAD = rootDocument.createElement('THEAD');
15707
15759
  (0, _classPrivateFieldGet2.default)(this, _table).appendChild(this.THEAD);
@@ -16094,6 +16146,13 @@ class TableView {
16094
16146
  }
16095
16147
  this.hot.runHooks('afterGetRowHeaderRenderers', headerRenderers);
16096
16148
  (0, _classPrivateFieldSet2.default)(this, _rowHeadersCount, headerRenderers.length);
16149
+ if (this.hot.getSettings().ariaTags) {
16150
+ // Update the aria-colcount attribute.
16151
+ // Only needs to be done once after initialization/data update.
16152
+ if (_classPrivateMethodGet(this, _getAriaColcount, _getAriaColcount2).call(this) === this.hot.countCols()) {
16153
+ _classPrivateMethodGet(this, _updateAriaColcount, _updateAriaColcount2).call(this, (0, _classPrivateFieldGet2.default)(this, _rowHeadersCount));
16154
+ }
16155
+ }
16097
16156
  return headerRenderers;
16098
16157
  },
16099
16158
  columnHeaders: () => {
@@ -16733,7 +16792,6 @@ class TableView {
16733
16792
  getRowHeadersCount() {
16734
16793
  return (0, _classPrivateFieldGet2.default)(this, _rowHeadersCount);
16735
16794
  }
16736
-
16737
16795
  /**
16738
16796
  * Destroys internal WalkOnTable's instance. Detaches all of the bonded listeners.
16739
16797
  *
@@ -16744,6 +16802,13 @@ class TableView {
16744
16802
  this.eventManager.destroy();
16745
16803
  }
16746
16804
  }
16805
+ function _getAriaColcount2() {
16806
+ return parseInt(this.hot.rootElement.getAttribute((0, _a11y.A11Y_COLCOUNT)()[0]), 10);
16807
+ }
16808
+ function _updateAriaColcount2(delta) {
16809
+ const colCount = _classPrivateMethodGet(this, _getAriaColcount, _getAriaColcount2).call(this) + delta;
16810
+ (0, _element.setAttribute)(this.hot.rootElement, ...(0, _a11y.A11Y_COLCOUNT)(colCount));
16811
+ }
16747
16812
  var _default = exports["default"] = TableView;
16748
16813
 
16749
16814
  /***/ }),
@@ -22380,7 +22445,7 @@ class ColumnHeadersRenderer extends _base.default {
22380
22445
  columnHeadersCount
22381
22446
  } = this.table;
22382
22447
  if (this.table.isAriaEnabled()) {
22383
- (0, _element.setAttribute)(this.rootNode, [(0, _a11y.A11Y_PRESENTATION)()]);
22448
+ (0, _element.setAttribute)(this.rootNode, [(0, _a11y.A11Y_ROWGROUP)()]);
22384
22449
  }
22385
22450
  for (let rowHeaderIndex = 0; rowHeaderIndex < columnHeadersCount; rowHeaderIndex += 1) {
22386
22451
  const {
@@ -22402,7 +22467,10 @@ class ColumnHeadersRenderer extends _base.default {
22402
22467
  // Remove all accessibility-related attributes for the header to start fresh.
22403
22468
  (0, _element.removeAttribute)(TH, [new RegExp('aria-(.*)'), new RegExp('role')]);
22404
22469
  if (this.table.isAriaEnabled()) {
22405
- (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)()] : [])]);
22470
+ (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)()] : [
22471
+ // Adding `role=row` to the corner headers to prevent
22472
+ // https://github.com/handsontable/dev-handsontable/issues/1574
22473
+ (0, _a11y.A11Y_ROW)()])]);
22406
22474
  }
22407
22475
  columnHeaderFunctions[rowHeaderIndex](sourceColumnIndex, TH, rowHeaderIndex);
22408
22476
  }
@@ -22554,7 +22622,7 @@ class RowsRenderer extends _base.default {
22554
22622
  the number of rendered rows by specifying the table height and/or turning off the "renderAllRows" option.`);
22555
22623
  }
22556
22624
  if (this.table.isAriaEnabled()) {
22557
- (0, _element.setAttribute)(this.rootNode, [(0, _a11y.A11Y_PRESENTATION)()]);
22625
+ (0, _element.setAttribute)(this.rootNode, [(0, _a11y.A11Y_ROWGROUP)()]);
22558
22626
  }
22559
22627
  this.orderView.setSize(rowsToRender).setOffset(this.table.renderedRowToSource(0)).start();
22560
22628
  for (let visibleRowIndex = 0; visibleRowIndex < rowsToRender; visibleRowIndex++) {
@@ -23625,8 +23693,8 @@ class Overlay {
23625
23693
  rootDocument,
23626
23694
  rootWindow
23627
23695
  } = this.domBindings;
23628
- const clone = rootDocument.createElement('DIV');
23629
- const clonedTable = rootDocument.createElement('TABLE');
23696
+ const clone = rootDocument.createElement('div');
23697
+ const clonedTable = rootDocument.createElement('table');
23630
23698
  const tableParent = wtTable.wtRootElement.parentNode;
23631
23699
  clone.className = `${_constants.CLONE_CLASS_NAMES.get(this.type)} handsontable`;
23632
23700
  clone.setAttribute('dir', this.isRtl() ? 'rtl' : 'ltr');
@@ -41619,7 +41687,9 @@ function replaceData(data, setDataMapFunction, callbackFunction, config) {
41619
41687
  hotInstance.render();
41620
41688
  }
41621
41689
  if (hotInstance.getSettings().ariaTags) {
41622
- (0, _element.setAttribute)(hotInstance.rootElement, [(0, _a11y.A11Y_ROWCOUNT)(hotInstance.countRows()), (0, _a11y.A11Y_COLCOUNT)(hotInstance.countCols())]);
41690
+ (0, _element.setAttribute)(hotInstance.rootElement, [(0, _a11y.A11Y_ROWCOUNT)(-1),
41691
+ // If run after initialization, add the number of row headers.
41692
+ (0, _a11y.A11Y_COLCOUNT)(hotInstance.countCols() + (hotInstance.view ? hotInstance.countRowHeaders() : 0))]);
41623
41693
  }
41624
41694
  }
41625
41695
 
@@ -47133,6 +47203,7 @@ exports.PasswordEditor = _passwordEditor.PasswordEditor;
47133
47203
  exports.__esModule = true;
47134
47204
  var _textEditor = __webpack_require__(335);
47135
47205
  var _element = __webpack_require__(107);
47206
+ var _a11y = __webpack_require__(114);
47136
47207
  const EDITOR_TYPE = exports.EDITOR_TYPE = 'password';
47137
47208
 
47138
47209
  /**
@@ -47152,6 +47223,9 @@ class PasswordEditor extends _textEditor.TextEditor {
47152
47223
  this.textareaStyle = this.TEXTAREA.style;
47153
47224
  this.textareaStyle.width = 0;
47154
47225
  this.textareaStyle.height = 0;
47226
+ if (this.hot.getSettings().ariaTags) {
47227
+ (0, _element.setAttribute)(this.TEXTAREA, [(0, _a11y.A11Y_HIDDEN)()]);
47228
+ }
47155
47229
  (0, _element.empty)(this.TEXTAREA_PARENT);
47156
47230
  this.TEXTAREA_PARENT.appendChild(this.TEXTAREA);
47157
47231
  }
@@ -47954,7 +48028,6 @@ function createInput(rootDocument) {
47954
48028
  const input = rootDocument.createElement('input');
47955
48029
  input.className = 'htCheckboxRendererInput';
47956
48030
  input.type = 'checkbox';
47957
- input.setAttribute('autocomplete', 'off');
47958
48031
  input.setAttribute('tabindex', '-1');
47959
48032
  return input.cloneNode(false);
47960
48033
  }
@@ -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}.handsontable .htAutocompleteArrow{color:#bbb;cursor:default;float:right;font-size:10px;text-align:center;width:16px}[dir=rtl].handsontable .htAutocompleteArrow{float:left}.handsontable td.htInvalid .htAutocompleteArrow{color:#555}.handsontable td.htInvalid .htAutocompleteArrow:hover{color:#1a1a1a}.handsontable td .htAutocompleteArrow:hover{color:#777}.handsontable td.area .htAutocompleteArrow{color:#d3d3d3}.handsontable .htCheckboxRendererInput{display:inline-block}.handsontable .htCheckboxRendererInput.noValue{opacity:.5}.handsontable .htCheckboxRendererLabel{cursor:pointer;display:inline-block;font-size:inherit;vertical-align:middle}.handsontable .htCheckboxRendererLabel.fullWidth{width:100%}.handsontable .htCommentCell{position:relative}.handsontable .htCommentCell:after{border-left:6px solid transparent;border-right:none;border-top:6px solid #000;content:"";left:unset;position:absolute;right:0;top:0}[dir=rtl].handsontable .htCommentCell:after{border-left:none;border-right:6px solid transparent;left:0;right:unset}.htCommentsContainer .htComments{display:none;position:absolute;z-index:1059}.htCommentsContainer .htCommentTextArea{-webkit-appearance:none;background-color:#fff;border:none;border-left:3px solid #ccc;box-shadow:0 1px 3px rgba(0,0,0,.118),0 1px 2px rgba(0,0,0,.239);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-size:12px;height:90px;outline:0!important;padding:5px;width:215px}[dir=rtl].htCommentsContainer .htCommentTextArea{border-left:none;border-right:3px solid #ccc}.htCommentsContainer .htCommentTextArea:focus{border-left:3px solid #5292f7;border-right:none;box-shadow:0 1px 3px rgba(0,0,0,.118),0 1px 2px rgba(0,0,0,.239),inset 0 0 0 1px #5292f7}[dir=rtl].htCommentsContainer .htCommentTextArea:focus{border-left:none;border-right:3px solid #5292f7}
31
31
  /*!
32
32
  * Handsontable ContextMenu