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')
@@ -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