handsontable 16.1.0-next-abd8f2e-20250904 → 16.1.0-next-7cb4c1e-20250909

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.
@@ -348,12 +348,14 @@ class Viewport {
348
348
  const rowsCalculator = this.createRowsCalculator();
349
349
  const columnsCalculator = this.createColumnsCalculator();
350
350
  if (fastDraw && !wtSettings.getSetting('renderAllRows')) {
351
- const proposedRowsVisibleCalculator = rowsCalculator.getResultsFor('fullyVisible');
352
- fastDraw = this.areAllProposedVisibleRowsAlreadyRendered(proposedRowsVisibleCalculator);
351
+ const proposedFullyVisibleRowsCalculator = rowsCalculator.getResultsFor('fullyVisible');
352
+ const proposedPartiallyVisibleRowsCalculator = rowsCalculator.getResultsFor('partiallyVisible');
353
+ fastDraw = this.areAllProposedVisibleRowsAlreadyRendered(proposedFullyVisibleRowsCalculator, proposedPartiallyVisibleRowsCalculator);
353
354
  }
354
355
  if (fastDraw && !wtSettings.getSetting('renderAllColumns')) {
355
- const proposedColumnsVisibleCalculator = columnsCalculator.getResultsFor('fullyVisible');
356
- fastDraw = this.areAllProposedVisibleColumnsAlreadyRendered(proposedColumnsVisibleCalculator);
356
+ const proposedFullyVisibleColumnsCalculator = columnsCalculator.getResultsFor('fullyVisible');
357
+ const proposedPartiallyVisibleColumnsCalculator = columnsCalculator.getResultsFor('partiallyVisible');
358
+ fastDraw = this.areAllProposedVisibleColumnsAlreadyRendered(proposedFullyVisibleColumnsCalculator, proposedPartiallyVisibleColumnsCalculator);
357
359
  }
358
360
  if (!fastDraw) {
359
361
  this.rowsRenderCalculator = rowsCalculator.getResultsFor('rendered');
@@ -380,30 +382,35 @@ class Viewport {
380
382
  }
381
383
 
382
384
  /**
383
- * Returns information whether proposedRowsVisibleCalculator viewport
385
+ * Returns information whether proposedFullyVisibleRowsCalculator viewport
384
386
  * is contained inside rows rendered in previous draw (cached in rowsRenderCalculator).
385
387
  *
386
- * @param {ViewportRowsCalculator} proposedRowsVisibleCalculator The instance of the viewport calculator to compare with.
388
+ * @param {ViewportRowsCalculator} proposedFullyVisibleRowsCalculator The instance of the fully visible rows viewport calculator to compare with.
389
+ * @param {ViewportRowsCalculator} proposedPartiallyVisibleRowsCalculator The instance of the partially visible rows viewport calculator to compare with.
387
390
  * @returns {boolean} Returns `true` if all proposed visible rows are already rendered (meaning: redraw is not needed).
388
391
  * Returns `false` if at least one proposed visible row is not already rendered (meaning: redraw is needed).
389
392
  */
390
- areAllProposedVisibleRowsAlreadyRendered(proposedRowsVisibleCalculator) {
393
+ areAllProposedVisibleRowsAlreadyRendered(proposedFullyVisibleRowsCalculator, proposedPartiallyVisibleRowsCalculator) {
391
394
  if (!this.rowsVisibleCalculator) {
392
395
  return false;
393
396
  }
394
397
  let {
395
398
  startRow,
396
399
  endRow
397
- } = proposedRowsVisibleCalculator;
400
+ } = proposedFullyVisibleRowsCalculator;
401
+ const {
402
+ startRow: partiallyVisibleStartRow,
403
+ endRow: partiallyVisibleEndRow
404
+ } = proposedPartiallyVisibleRowsCalculator;
398
405
 
399
406
  // if there are no fully visible rows at all...
400
407
  if (startRow === null && endRow === null) {
401
- if (!proposedRowsVisibleCalculator.isVisibleInTrimmingContainer) {
408
+ if (!proposedFullyVisibleRowsCalculator.isVisibleInTrimmingContainer && !this.wtTable.isRowBeforeRenderedRows(partiallyVisibleStartRow) && !this.wtTable.isRowAfterRenderedRows(partiallyVisibleEndRow)) {
402
409
  return true;
403
410
  }
404
411
  // ...use partially visible rows calculator to determine what render type is needed
405
- startRow = this.rowsPartiallyVisibleCalculator.startRow;
406
- endRow = this.rowsPartiallyVisibleCalculator.endRow;
412
+ startRow = partiallyVisibleStartRow;
413
+ endRow = partiallyVisibleEndRow;
407
414
  }
408
415
  const {
409
416
  startRow: renderedStartRow,
@@ -429,30 +436,35 @@ class Viewport {
429
436
  }
430
437
 
431
438
  /**
432
- * Returns information whether proposedColumnsVisibleCalculator viewport
439
+ * Returns information whether proposedFullyVisibleColumnsCalculator viewport
433
440
  * is contained inside column rendered in previous draw (cached in columnsRenderCalculator).
434
441
  *
435
- * @param {ViewportRowsCalculator} proposedColumnsVisibleCalculator The instance of the viewport calculator to compare with.
442
+ * @param {ViewportRowsCalculator} proposedFullyVisibleColumnsCalculator The instance of the fully visible columns viewport calculator to compare with.
443
+ * @param {ViewportRowsCalculator} proposedPartiallyVisibleColumnsCalculator The instance of the partially visible columns viewport calculator to compare with.
436
444
  * @returns {boolean} Returns `true` if all proposed visible columns are already rendered (meaning: redraw is not needed).
437
445
  * Returns `false` if at least one proposed visible column is not already rendered (meaning: redraw is needed).
438
446
  */
439
- areAllProposedVisibleColumnsAlreadyRendered(proposedColumnsVisibleCalculator) {
447
+ areAllProposedVisibleColumnsAlreadyRendered(proposedFullyVisibleColumnsCalculator, proposedPartiallyVisibleColumnsCalculator) {
440
448
  if (!this.columnsVisibleCalculator) {
441
449
  return false;
442
450
  }
443
451
  let {
444
452
  startColumn,
445
453
  endColumn
446
- } = proposedColumnsVisibleCalculator;
454
+ } = proposedFullyVisibleColumnsCalculator;
455
+ const {
456
+ startColumn: partiallyVisibleStartColumn,
457
+ endColumn: partiallyVisibleEndColumn
458
+ } = proposedPartiallyVisibleColumnsCalculator;
447
459
 
448
460
  // if there are no fully visible columns at all...
449
461
  if (startColumn === null && endColumn === null) {
450
- if (!proposedColumnsVisibleCalculator.isVisibleInTrimmingContainer) {
462
+ if (!proposedFullyVisibleColumnsCalculator.isVisibleInTrimmingContainer && !this.wtTable.isColumnBeforeRenderedColumns(partiallyVisibleStartColumn) && !this.wtTable.isColumnAfterRenderedColumns(partiallyVisibleEndColumn)) {
451
463
  return true;
452
464
  }
453
465
  // ...use partially visible columns calculator to determine what render type is needed
454
- startColumn = this.columnsPartiallyVisibleCalculator.startColumn;
455
- endColumn = this.columnsPartiallyVisibleCalculator.endColumn;
466
+ startColumn = partiallyVisibleStartColumn;
467
+ endColumn = partiallyVisibleEndColumn;
456
468
  }
457
469
  const {
458
470
  startColumn: renderedStartColumn,
@@ -345,12 +345,14 @@ class Viewport {
345
345
  const rowsCalculator = this.createRowsCalculator();
346
346
  const columnsCalculator = this.createColumnsCalculator();
347
347
  if (fastDraw && !wtSettings.getSetting('renderAllRows')) {
348
- const proposedRowsVisibleCalculator = rowsCalculator.getResultsFor('fullyVisible');
349
- fastDraw = this.areAllProposedVisibleRowsAlreadyRendered(proposedRowsVisibleCalculator);
348
+ const proposedFullyVisibleRowsCalculator = rowsCalculator.getResultsFor('fullyVisible');
349
+ const proposedPartiallyVisibleRowsCalculator = rowsCalculator.getResultsFor('partiallyVisible');
350
+ fastDraw = this.areAllProposedVisibleRowsAlreadyRendered(proposedFullyVisibleRowsCalculator, proposedPartiallyVisibleRowsCalculator);
350
351
  }
351
352
  if (fastDraw && !wtSettings.getSetting('renderAllColumns')) {
352
- const proposedColumnsVisibleCalculator = columnsCalculator.getResultsFor('fullyVisible');
353
- fastDraw = this.areAllProposedVisibleColumnsAlreadyRendered(proposedColumnsVisibleCalculator);
353
+ const proposedFullyVisibleColumnsCalculator = columnsCalculator.getResultsFor('fullyVisible');
354
+ const proposedPartiallyVisibleColumnsCalculator = columnsCalculator.getResultsFor('partiallyVisible');
355
+ fastDraw = this.areAllProposedVisibleColumnsAlreadyRendered(proposedFullyVisibleColumnsCalculator, proposedPartiallyVisibleColumnsCalculator);
354
356
  }
355
357
  if (!fastDraw) {
356
358
  this.rowsRenderCalculator = rowsCalculator.getResultsFor('rendered');
@@ -377,30 +379,35 @@ class Viewport {
377
379
  }
378
380
 
379
381
  /**
380
- * Returns information whether proposedRowsVisibleCalculator viewport
382
+ * Returns information whether proposedFullyVisibleRowsCalculator viewport
381
383
  * is contained inside rows rendered in previous draw (cached in rowsRenderCalculator).
382
384
  *
383
- * @param {ViewportRowsCalculator} proposedRowsVisibleCalculator The instance of the viewport calculator to compare with.
385
+ * @param {ViewportRowsCalculator} proposedFullyVisibleRowsCalculator The instance of the fully visible rows viewport calculator to compare with.
386
+ * @param {ViewportRowsCalculator} proposedPartiallyVisibleRowsCalculator The instance of the partially visible rows viewport calculator to compare with.
384
387
  * @returns {boolean} Returns `true` if all proposed visible rows are already rendered (meaning: redraw is not needed).
385
388
  * Returns `false` if at least one proposed visible row is not already rendered (meaning: redraw is needed).
386
389
  */
387
- areAllProposedVisibleRowsAlreadyRendered(proposedRowsVisibleCalculator) {
390
+ areAllProposedVisibleRowsAlreadyRendered(proposedFullyVisibleRowsCalculator, proposedPartiallyVisibleRowsCalculator) {
388
391
  if (!this.rowsVisibleCalculator) {
389
392
  return false;
390
393
  }
391
394
  let {
392
395
  startRow,
393
396
  endRow
394
- } = proposedRowsVisibleCalculator;
397
+ } = proposedFullyVisibleRowsCalculator;
398
+ const {
399
+ startRow: partiallyVisibleStartRow,
400
+ endRow: partiallyVisibleEndRow
401
+ } = proposedPartiallyVisibleRowsCalculator;
395
402
 
396
403
  // if there are no fully visible rows at all...
397
404
  if (startRow === null && endRow === null) {
398
- if (!proposedRowsVisibleCalculator.isVisibleInTrimmingContainer) {
405
+ if (!proposedFullyVisibleRowsCalculator.isVisibleInTrimmingContainer && !this.wtTable.isRowBeforeRenderedRows(partiallyVisibleStartRow) && !this.wtTable.isRowAfterRenderedRows(partiallyVisibleEndRow)) {
399
406
  return true;
400
407
  }
401
408
  // ...use partially visible rows calculator to determine what render type is needed
402
- startRow = this.rowsPartiallyVisibleCalculator.startRow;
403
- endRow = this.rowsPartiallyVisibleCalculator.endRow;
409
+ startRow = partiallyVisibleStartRow;
410
+ endRow = partiallyVisibleEndRow;
404
411
  }
405
412
  const {
406
413
  startRow: renderedStartRow,
@@ -426,30 +433,35 @@ class Viewport {
426
433
  }
427
434
 
428
435
  /**
429
- * Returns information whether proposedColumnsVisibleCalculator viewport
436
+ * Returns information whether proposedFullyVisibleColumnsCalculator viewport
430
437
  * is contained inside column rendered in previous draw (cached in columnsRenderCalculator).
431
438
  *
432
- * @param {ViewportRowsCalculator} proposedColumnsVisibleCalculator The instance of the viewport calculator to compare with.
439
+ * @param {ViewportRowsCalculator} proposedFullyVisibleColumnsCalculator The instance of the fully visible columns viewport calculator to compare with.
440
+ * @param {ViewportRowsCalculator} proposedPartiallyVisibleColumnsCalculator The instance of the partially visible columns viewport calculator to compare with.
433
441
  * @returns {boolean} Returns `true` if all proposed visible columns are already rendered (meaning: redraw is not needed).
434
442
  * Returns `false` if at least one proposed visible column is not already rendered (meaning: redraw is needed).
435
443
  */
436
- areAllProposedVisibleColumnsAlreadyRendered(proposedColumnsVisibleCalculator) {
444
+ areAllProposedVisibleColumnsAlreadyRendered(proposedFullyVisibleColumnsCalculator, proposedPartiallyVisibleColumnsCalculator) {
437
445
  if (!this.columnsVisibleCalculator) {
438
446
  return false;
439
447
  }
440
448
  let {
441
449
  startColumn,
442
450
  endColumn
443
- } = proposedColumnsVisibleCalculator;
451
+ } = proposedFullyVisibleColumnsCalculator;
452
+ const {
453
+ startColumn: partiallyVisibleStartColumn,
454
+ endColumn: partiallyVisibleEndColumn
455
+ } = proposedPartiallyVisibleColumnsCalculator;
444
456
 
445
457
  // if there are no fully visible columns at all...
446
458
  if (startColumn === null && endColumn === null) {
447
- if (!proposedColumnsVisibleCalculator.isVisibleInTrimmingContainer) {
459
+ if (!proposedFullyVisibleColumnsCalculator.isVisibleInTrimmingContainer && !this.wtTable.isColumnBeforeRenderedColumns(partiallyVisibleStartColumn) && !this.wtTable.isColumnAfterRenderedColumns(partiallyVisibleEndColumn)) {
448
460
  return true;
449
461
  }
450
462
  // ...use partially visible columns calculator to determine what render type is needed
451
- startColumn = this.columnsPartiallyVisibleCalculator.startColumn;
452
- endColumn = this.columnsPartiallyVisibleCalculator.endColumn;
463
+ startColumn = partiallyVisibleStartColumn;
464
+ endColumn = partiallyVisibleEndColumn;
453
465
  }
454
466
  const {
455
467
  startColumn: renderedStartColumn,
package/CHANGELOG.md CHANGED
@@ -12,34 +12,34 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
12
12
  ## [16.1.0] - 2025-09-11
13
13
 
14
14
  ### Added
15
- - Add row pagination functionality [#11612](https://github.com/handsontable/handsontable/pull/11612)
16
- - Added Dialog Plugin: Core Modal System [#11754](https://github.com/handsontable/handsontable/pull/11754)
17
- - Implemented the `key`/`value` feature for the Autocomplete and Dropdown editors and the new `valueGetter` and `valueSetter` options. [#11773](https://github.com/handsontable/handsontable/pull/11773)
18
- - Add support for a new `initialState` option [#11777](https://github.com/handsontable/handsontable/pull/11777)
19
- - Added Dialog Loading Plugin [#11792](https://github.com/handsontable/handsontable/pull/11792)
15
+ - Introduced row pagination functionality. [#11612](https://github.com/handsontable/handsontable/pull/11612)
16
+ - Introduced a Dialog plugin. [#11754](https://github.com/handsontable/handsontable/pull/11754)
17
+ - Added support for object-based (`key`/`value`) source in Autocomplete and Dropdown editors, along with new `valueGetter` and `valueSetter` options. [#11773](https://github.com/handsontable/handsontable/pull/11773)
18
+ - Added a new `initialState` configuration option. [#11777](https://github.com/handsontable/handsontable/pull/11777)
19
+ - Introduced the Loading plugin. [#11792](https://github.com/handsontable/handsontable/pull/11792)
20
20
 
21
21
  ### Changed
22
- - Allow focus navigation between multiple selection layers [#11756](https://github.com/handsontable/handsontable/pull/11756)
23
- - Change the input name of the internal focus catcher element [#11770](https://github.com/handsontable/handsontable/pull/11770)
24
- - Added background color to holder element (`wtHolder`) [#11797](https://github.com/handsontable/handsontable/pull/11797)
22
+ - Enabled focus navigation between multiple selection layers. [#11756](https://github.com/handsontable/handsontable/pull/11756)
23
+ - Renamed the input element used as the internal focus catcher. [#11770](https://github.com/handsontable/handsontable/pull/11770)
24
+ - Added a background color to the `wtHolder` element. [#11797](https://github.com/handsontable/handsontable/pull/11797)
25
25
 
26
26
  ### Fixed
27
- - Fixed undo/redo actions with cell types other than `text` [#11656](https://github.com/handsontable/handsontable/pull/11656)
28
- - Fixed an issue with incorrect row and column resizing that occurs when the user double-clicks a column or row separator to auto-size it and then moves the mouse [#11671](https://github.com/handsontable/handsontable/pull/11671)
29
- - Fixed an issue with mouse wheel zooming on Windows [#11680](https://github.com/handsontable/handsontable/pull/11680)
30
- - Fixed an issue with autocomplete sorting and options highlighting [#11708](https://github.com/handsontable/handsontable/pull/11708)
31
- - Fix missing touchend entry handler that prevents editor to open on mobile devices [#11729](https://github.com/handsontable/handsontable/pull/11729)
32
- - Fixed an issue with rows being misaligned with row headers when using `autoRowSize`. [#11736](https://github.com/handsontable/handsontable/pull/11736)
33
- - Fixed an issues with visual layout inconsistencies with browser zoom and scaling [#11739](https://github.com/handsontable/handsontable/pull/11739)
34
- - Fixed an issue with root-wrapper height [#11769](https://github.com/handsontable/handsontable/pull/11769)
35
- - Fixed TypeError after undo opertation for nested rows data structure [#11793](https://github.com/handsontable/handsontable/pull/11793)
36
- - Fixed `rowHeights` option for merged cells [#11795](https://github.com/handsontable/handsontable/pull/11795)
37
- - Fixed themes visaul issues [#11805](https://github.com/handsontable/handsontable/pull/11805)
38
- - Fixed table misalignment when new data is loaded [#11809](https://github.com/handsontable/handsontable/pull/11809)
39
- - Angular: Fixed treeshaking mechanism (modularization) for angular-wrapper [#11738](https://github.com/handsontable/handsontable/pull/11738)
27
+ - Fixed undo/redo functionality for cell types other than `text`. [#11656](https://github.com/handsontable/handsontable/pull/11656)
28
+ - Fixed incorrect resizing behavior when auto-sizing rows or columns by double-clicking separators. [#11671](https://github.com/handsontable/handsontable/pull/11671)
29
+ - Fixed mouse wheel zooming issues on Windows. [#11680](https://github.com/handsontable/handsontable/pull/11680)
30
+ - Fixed autocomplete sorting and option highlighting issues. [#11708](https://github.com/handsontable/handsontable/pull/11708)
31
+ - Fixed a missing `touchend` handler that prevented editors from opening on mobile devices. [#11729](https://github.com/handsontable/handsontable/pull/11729)
32
+ - Fixed misalignment between rows and row headers when using `autoRowSize`. [#11736](https://github.com/handsontable/handsontable/pull/11736)
33
+ - Fixed layout inconsistencies caused by browser zoom and scaling. [#11739](https://github.com/handsontable/handsontable/pull/11739)
34
+ - Fixed an issue with the root-wrapper height calculation. [#11769](https://github.com/handsontable/handsontable/pull/11769)
35
+ - Fixed a `TypeError` being thrown after undoing operations on nested row structures. [#11793](https://github.com/handsontable/handsontable/pull/11793)
36
+ - Fixed `rowHeights` handling for merged cells. [#11795](https://github.com/handsontable/handsontable/pull/11795)
37
+ - Fixed visual issues across themes. [#11805](https://github.com/handsontable/handsontable/pull/11805)
38
+ - Fixed table misalignment after loading new data. [#11809](https://github.com/handsontable/handsontable/pull/11809)
39
+ - Angular: Fixed the tree-shaking mechanism for the Angular wrapper (`@handsontable/angular-wrapper`). [#11738](https://github.com/handsontable/handsontable/pull/11738)
40
40
 
41
41
  ### Security
42
- - Fixed the `critical` security vulnerabilities reported by `pnpm audit`. [#11798](https://github.com/handsontable/handsontable/pull/11798)
42
+ - Resolved critical vulnerabilities reported by `pnpm audit`. [#11798](https://github.com/handsontable/handsontable/pull/11798)
43
43
 
44
44
  ## [16.0.1] - 2025-07-10
45
45
 
package/base.js CHANGED
@@ -45,8 +45,8 @@ Handsontable.hooks = _hooks.Hooks.getSingleton();
45
45
  Handsontable.CellCoords = _src.CellCoords;
46
46
  Handsontable.CellRange = _src.CellRange;
47
47
  Handsontable.packageName = 'handsontable';
48
- Handsontable.buildDate = "04/09/2025 07:50:37";
49
- Handsontable.version = "16.1.0-next-abd8f2e-20250904";
48
+ Handsontable.buildDate = "09/09/2025 09:27:27";
49
+ Handsontable.version = "16.1.0-next-7cb4c1e-20250909";
50
50
  Handsontable.languages = {
51
51
  dictionaryKeys: _registry.dictionaryKeys,
52
52
  getLanguageDictionary: _registry.getLanguageDictionary,
package/base.mjs CHANGED
@@ -35,8 +35,8 @@ Handsontable.hooks = Hooks.getSingleton();
35
35
  Handsontable.CellCoords = CellCoords;
36
36
  Handsontable.CellRange = CellRange;
37
37
  Handsontable.packageName = 'handsontable';
38
- Handsontable.buildDate = "04/09/2025 07:50:42";
39
- Handsontable.version = "16.1.0-next-abd8f2e-20250904";
38
+ Handsontable.buildDate = "09/09/2025 09:27:33";
39
+ Handsontable.version = "16.1.0-next-7cb4c1e-20250909";
40
40
  Handsontable.languages = {
41
41
  dictionaryKeys,
42
42
  getLanguageDictionary,
package/core.js CHANGED
@@ -2536,7 +2536,7 @@ function Core(rootContainer, userSettings) {
2536
2536
  instance.useTheme(settings.themeName);
2537
2537
  }
2538
2538
  }
2539
- if (instance.stylesHandler.isClassicTheme()) {
2539
+ if ((0, _rootInstance.isRootInstance)(instance) && instance.stylesHandler.isClassicTheme()) {
2540
2540
  // eslint-disable-next-line max-len
2541
2541
  (0, _console.deprecatedWarn)('Handsontable classic theme is a legacy theme and will be removed in version 17.0. Please update your theme settings to ensure compatibility with future versions.');
2542
2542
  }
package/core.mjs CHANGED
@@ -2531,7 +2531,7 @@ export default function Core(rootContainer, userSettings) {
2531
2531
  instance.useTheme(settings.themeName);
2532
2532
  }
2533
2533
  }
2534
- if (instance.stylesHandler.isClassicTheme()) {
2534
+ if (isRootInstance(instance) && instance.stylesHandler.isClassicTheme()) {
2535
2535
  // eslint-disable-next-line max-len
2536
2536
  deprecatedWarn('Handsontable classic theme is a legacy theme and will be removed in version 17.0. Please update your theme settings to ensure compatibility with future versions.');
2537
2537
  }
@@ -26,8 +26,8 @@
26
26
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
27
27
  * USE OR INABILITY TO USE THIS SOFTWARE.
28
28
  *
29
- * Version: 16.1.0-next-abd8f2e-20250904
30
- * Release date: 11/09/2025 (built at 04/09/2025 07:51:05)
29
+ * Version: 16.1.0-next-7cb4c1e-20250909
30
+ * Release date: 11/09/2025 (built at 09/09/2025 09:27:55)
31
31
  */
32
32
  /**
33
33
  * Fix for bootstrap styles
@@ -26,8 +26,8 @@
26
26
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
27
27
  * USE OR INABILITY TO USE THIS SOFTWARE.
28
28
  *
29
- * Version: 16.1.0-next-abd8f2e-20250904
30
- * Release date: 11/09/2025 (built at 04/09/2025 07:51:05)
29
+ * Version: 16.1.0-next-7cb4c1e-20250909
30
+ * Release date: 11/09/2025 (built at 09/09/2025 09:27:55)
31
31
  */
32
32
  /**
33
33
  * Fix for bootstrap styles
@@ -25,8 +25,8 @@
25
25
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
26
26
  * USE OR INABILITY TO USE THIS SOFTWARE.
27
27
  *
28
- * Version: 16.1.0-next-abd8f2e-20250904
29
- * Release date: 11/09/2025 (built at 04/09/2025 07:50:47)
28
+ * Version: 16.1.0-next-7cb4c1e-20250909
29
+ * Release date: 11/09/2025 (built at 09/09/2025 09:27:37)
30
30
  */
31
31
  (function webpackUniversalModuleDefinition(root, factory) {
32
32
  if(typeof exports === 'object' && typeof module === 'object')
@@ -42877,8 +42877,8 @@ Handsontable.hooks = _hooks.Hooks.getSingleton();
42877
42877
  Handsontable.CellCoords = _src.CellCoords;
42878
42878
  Handsontable.CellRange = _src.CellRange;
42879
42879
  Handsontable.packageName = 'handsontable';
42880
- Handsontable.buildDate = "04/09/2025 07:50:47";
42881
- Handsontable.version = "16.1.0-next-abd8f2e-20250904";
42880
+ Handsontable.buildDate = "09/09/2025 09:27:37";
42881
+ Handsontable.version = "16.1.0-next-7cb4c1e-20250909";
42882
42882
  Handsontable.languages = {
42883
42883
  dictionaryKeys: _registry.dictionaryKeys,
42884
42884
  getLanguageDictionary: _registry.getLanguageDictionary,
@@ -45437,7 +45437,7 @@ function Core(rootContainer, userSettings) {
45437
45437
  instance.useTheme(settings.themeName);
45438
45438
  }
45439
45439
  }
45440
- if (instance.stylesHandler.isClassicTheme()) {
45440
+ if ((0, _rootInstance.isRootInstance)(instance) && instance.stylesHandler.isClassicTheme()) {
45441
45441
  // eslint-disable-next-line max-len
45442
45442
  (0, _console.deprecatedWarn)('Handsontable classic theme is a legacy theme and will be removed in version 17.0. Please update your theme settings to ensure compatibility with future versions.');
45443
45443
  }
@@ -54777,7 +54777,7 @@ const domMessages = {
54777
54777
  function _injectProductInfo(key, element) {
54778
54778
  const hasValidType = !isEmpty(key);
54779
54779
  const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
54780
- const hotVersion = "16.1.0-next-abd8f2e-20250904";
54780
+ const hotVersion = "16.1.0-next-7cb4c1e-20250909";
54781
54781
  let keyValidityDate;
54782
54782
  let consoleMessageState = 'invalid';
54783
54783
  let domMessageState = 'invalid';
@@ -84436,12 +84436,14 @@ class Viewport {
84436
84436
  const rowsCalculator = this.createRowsCalculator();
84437
84437
  const columnsCalculator = this.createColumnsCalculator();
84438
84438
  if (fastDraw && !wtSettings.getSetting('renderAllRows')) {
84439
- const proposedRowsVisibleCalculator = rowsCalculator.getResultsFor('fullyVisible');
84440
- fastDraw = this.areAllProposedVisibleRowsAlreadyRendered(proposedRowsVisibleCalculator);
84439
+ const proposedFullyVisibleRowsCalculator = rowsCalculator.getResultsFor('fullyVisible');
84440
+ const proposedPartiallyVisibleRowsCalculator = rowsCalculator.getResultsFor('partiallyVisible');
84441
+ fastDraw = this.areAllProposedVisibleRowsAlreadyRendered(proposedFullyVisibleRowsCalculator, proposedPartiallyVisibleRowsCalculator);
84441
84442
  }
84442
84443
  if (fastDraw && !wtSettings.getSetting('renderAllColumns')) {
84443
- const proposedColumnsVisibleCalculator = columnsCalculator.getResultsFor('fullyVisible');
84444
- fastDraw = this.areAllProposedVisibleColumnsAlreadyRendered(proposedColumnsVisibleCalculator);
84444
+ const proposedFullyVisibleColumnsCalculator = columnsCalculator.getResultsFor('fullyVisible');
84445
+ const proposedPartiallyVisibleColumnsCalculator = columnsCalculator.getResultsFor('partiallyVisible');
84446
+ fastDraw = this.areAllProposedVisibleColumnsAlreadyRendered(proposedFullyVisibleColumnsCalculator, proposedPartiallyVisibleColumnsCalculator);
84445
84447
  }
84446
84448
  if (!fastDraw) {
84447
84449
  this.rowsRenderCalculator = rowsCalculator.getResultsFor('rendered');
@@ -84468,30 +84470,35 @@ class Viewport {
84468
84470
  }
84469
84471
 
84470
84472
  /**
84471
- * Returns information whether proposedRowsVisibleCalculator viewport
84473
+ * Returns information whether proposedFullyVisibleRowsCalculator viewport
84472
84474
  * is contained inside rows rendered in previous draw (cached in rowsRenderCalculator).
84473
84475
  *
84474
- * @param {ViewportRowsCalculator} proposedRowsVisibleCalculator The instance of the viewport calculator to compare with.
84476
+ * @param {ViewportRowsCalculator} proposedFullyVisibleRowsCalculator The instance of the fully visible rows viewport calculator to compare with.
84477
+ * @param {ViewportRowsCalculator} proposedPartiallyVisibleRowsCalculator The instance of the partially visible rows viewport calculator to compare with.
84475
84478
  * @returns {boolean} Returns `true` if all proposed visible rows are already rendered (meaning: redraw is not needed).
84476
84479
  * Returns `false` if at least one proposed visible row is not already rendered (meaning: redraw is needed).
84477
84480
  */
84478
- areAllProposedVisibleRowsAlreadyRendered(proposedRowsVisibleCalculator) {
84481
+ areAllProposedVisibleRowsAlreadyRendered(proposedFullyVisibleRowsCalculator, proposedPartiallyVisibleRowsCalculator) {
84479
84482
  if (!this.rowsVisibleCalculator) {
84480
84483
  return false;
84481
84484
  }
84482
84485
  let {
84483
84486
  startRow,
84484
84487
  endRow
84485
- } = proposedRowsVisibleCalculator;
84488
+ } = proposedFullyVisibleRowsCalculator;
84489
+ const {
84490
+ startRow: partiallyVisibleStartRow,
84491
+ endRow: partiallyVisibleEndRow
84492
+ } = proposedPartiallyVisibleRowsCalculator;
84486
84493
 
84487
84494
  // if there are no fully visible rows at all...
84488
84495
  if (startRow === null && endRow === null) {
84489
- if (!proposedRowsVisibleCalculator.isVisibleInTrimmingContainer) {
84496
+ if (!proposedFullyVisibleRowsCalculator.isVisibleInTrimmingContainer && !this.wtTable.isRowBeforeRenderedRows(partiallyVisibleStartRow) && !this.wtTable.isRowAfterRenderedRows(partiallyVisibleEndRow)) {
84490
84497
  return true;
84491
84498
  }
84492
84499
  // ...use partially visible rows calculator to determine what render type is needed
84493
- startRow = this.rowsPartiallyVisibleCalculator.startRow;
84494
- endRow = this.rowsPartiallyVisibleCalculator.endRow;
84500
+ startRow = partiallyVisibleStartRow;
84501
+ endRow = partiallyVisibleEndRow;
84495
84502
  }
84496
84503
  const {
84497
84504
  startRow: renderedStartRow,
@@ -84517,30 +84524,35 @@ class Viewport {
84517
84524
  }
84518
84525
 
84519
84526
  /**
84520
- * Returns information whether proposedColumnsVisibleCalculator viewport
84527
+ * Returns information whether proposedFullyVisibleColumnsCalculator viewport
84521
84528
  * is contained inside column rendered in previous draw (cached in columnsRenderCalculator).
84522
84529
  *
84523
- * @param {ViewportRowsCalculator} proposedColumnsVisibleCalculator The instance of the viewport calculator to compare with.
84530
+ * @param {ViewportRowsCalculator} proposedFullyVisibleColumnsCalculator The instance of the fully visible columns viewport calculator to compare with.
84531
+ * @param {ViewportRowsCalculator} proposedPartiallyVisibleColumnsCalculator The instance of the partially visible columns viewport calculator to compare with.
84524
84532
  * @returns {boolean} Returns `true` if all proposed visible columns are already rendered (meaning: redraw is not needed).
84525
84533
  * Returns `false` if at least one proposed visible column is not already rendered (meaning: redraw is needed).
84526
84534
  */
84527
- areAllProposedVisibleColumnsAlreadyRendered(proposedColumnsVisibleCalculator) {
84535
+ areAllProposedVisibleColumnsAlreadyRendered(proposedFullyVisibleColumnsCalculator, proposedPartiallyVisibleColumnsCalculator) {
84528
84536
  if (!this.columnsVisibleCalculator) {
84529
84537
  return false;
84530
84538
  }
84531
84539
  let {
84532
84540
  startColumn,
84533
84541
  endColumn
84534
- } = proposedColumnsVisibleCalculator;
84542
+ } = proposedFullyVisibleColumnsCalculator;
84543
+ const {
84544
+ startColumn: partiallyVisibleStartColumn,
84545
+ endColumn: partiallyVisibleEndColumn
84546
+ } = proposedPartiallyVisibleColumnsCalculator;
84535
84547
 
84536
84548
  // if there are no fully visible columns at all...
84537
84549
  if (startColumn === null && endColumn === null) {
84538
- if (!proposedColumnsVisibleCalculator.isVisibleInTrimmingContainer) {
84550
+ if (!proposedFullyVisibleColumnsCalculator.isVisibleInTrimmingContainer && !this.wtTable.isColumnBeforeRenderedColumns(partiallyVisibleStartColumn) && !this.wtTable.isColumnAfterRenderedColumns(partiallyVisibleEndColumn)) {
84539
84551
  return true;
84540
84552
  }
84541
84553
  // ...use partially visible columns calculator to determine what render type is needed
84542
- startColumn = this.columnsPartiallyVisibleCalculator.startColumn;
84543
- endColumn = this.columnsPartiallyVisibleCalculator.endColumn;
84554
+ startColumn = partiallyVisibleStartColumn;
84555
+ endColumn = partiallyVisibleEndColumn;
84544
84556
  }
84545
84557
  const {
84546
84558
  startColumn: renderedStartColumn,
@@ -159361,7 +159373,7 @@ function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a),
159361
159373
  function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
159362
159374
  function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
159363
159375
  const PLUGIN_KEY = exports.PLUGIN_KEY = 'dialog';
159364
- const PLUGIN_PRIORITY = exports.PLUGIN_PRIORITY = 340;
159376
+ const PLUGIN_PRIORITY = exports.PLUGIN_PRIORITY = 360;
159365
159377
  const SHORTCUTS_GROUP = PLUGIN_KEY;
159366
159378
  const SHORTCUTS_CONTEXT_NAME = `plugin:${PLUGIN_KEY}`;
159367
159379
 
@@ -160290,9 +160302,7 @@ class Loading extends _base.BasePlugin {
160290
160302
  var _classPrivateFieldGet2;
160291
160303
  _classPrivateFieldSet(_dialogPlugin, this, this.hot.getPlugin('dialog'));
160292
160304
  if (!((_classPrivateFieldGet2 = _classPrivateFieldGet(_dialogPlugin, this)) !== null && _classPrivateFieldGet2 !== void 0 && _classPrivateFieldGet2.isEnabled())) {
160293
- this.hot.updateSettings({
160294
- dialog: true
160295
- });
160305
+ this.hot.getSettings().dialog = true;
160296
160306
  }
160297
160307
  this.hot.addHook('afterDialogFocus', () => _assertClassBrand(_Loading_brand, this, _onAfterDialogFocus).call(this));
160298
160308
  }
@@ -26,8 +26,8 @@
26
26
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
27
27
  * USE OR INABILITY TO USE THIS SOFTWARE.
28
28
  *
29
- * Version: 16.1.0-next-abd8f2e-20250904
30
- * Release date: 11/09/2025 (built at 04/09/2025 07:51:42)
29
+ * Version: 16.1.0-next-7cb4c1e-20250909
30
+ * Release date: 11/09/2025 (built at 09/09/2025 09:28:32)
31
31
  */.handsontable .table td,.handsontable .table th{border-top:none}.handsontable tr{background:#fff}.handsontable td{background-color:inherit}.handsontable .table caption+thead tr:first-child td,.handsontable .table caption+thead tr:first-child th,.handsontable .table colgroup+thead tr:first-child td,.handsontable .table colgroup+thead tr:first-child th,.handsontable .table thead:first-child tr:first-child td,.handsontable .table thead:first-child tr:first-child th{border-top:1px solid #ccc}.handsontable .table-bordered{border:0;border-collapse:separate}.handsontable .table-bordered td,.handsontable .table-bordered th{border-left:none}.handsontable .table-bordered td:first-child,.handsontable .table-bordered th:first-child{border-left:1px solid #ccc}.handsontable .table>tbody>tr>td,.handsontable .table>tbody>tr>th,.handsontable .table>tfoot>tr>td,.handsontable .table>tfoot>tr>th,.handsontable .table>thead>tr>td,.handsontable .table>thead>tr>th{line-height:21px;padding:0}.col-lg-1.handsontable,.col-lg-10.handsontable,.col-lg-11.handsontable,.col-lg-12.handsontable,.col-lg-2.handsontable,.col-lg-3.handsontable,.col-lg-4.handsontable,.col-lg-5.handsontable,.col-lg-6.handsontable,.col-lg-7.handsontable,.col-lg-8.handsontable,.col-lg-9.handsontable,.col-md-1.handsontable,.col-md-10.handsontable,.col-md-11.handsontable,.col-md-12.handsontable,.col-md-2.handsontable,.col-md-3.handsontable,.col-md-4.handsontable,.col-md-5.handsontable,.col-md-6.handsontable,.col-md-7.handsontable,.col-md-8.handsontable,.col-md-9.handsontable .col-sm-1.handsontable,.col-sm-10.handsontable,.col-sm-11.handsontable,.col-sm-12.handsontable,.col-sm-2.handsontable,.col-sm-3.handsontable,.col-sm-4.handsontable,.col-sm-5.handsontable,.col-sm-6.handsontable,.col-sm-7.handsontable,.col-sm-8.handsontable,.col-sm-9.handsontable .col-xs-1.handsontable,.col-xs-10.handsontable,.col-xs-11.handsontable,.col-xs-12.handsontable,.col-xs-2.handsontable,.col-xs-3.handsontable,.col-xs-4.handsontable,.col-xs-5.handsontable,.col-xs-6.handsontable,.col-xs-7.handsontable,.col-xs-8.handsontable,.col-xs-9.handsontable{padding-left:0;padding-right:0}.handsontable .table-striped>tbody>tr:nth-of-type(2n){background-color:#fff}.handsontable .hide{display:none}.handsontable .relative{position:relative}.handsontable .wtHider{position:relative;width:0}.handsontable .wtSpreader{height:auto;position:relative;width:0}.handsontable div,.handsontable input,.handsontable table,.handsontable tbody,.handsontable td,.handsontable textarea,.handsontable th,.handsontable thead{box-sizing:content-box;-webkit-box-sizing:content-box;-moz-box-sizing:content-box}.handsontable input,.handsontable textarea{min-height:auto}.handsontable table.htCore{border-collapse:separate;border-spacing:0;border-width:0;cursor:default;margin:0;max-height:none;max-width:none;outline-width:0;table-layout:fixed;width:0}.handsontable col,.handsontable col.rowHeader{width:50px}.handsontable td,.handsontable th{background-color:#fff;border-bottom:1px solid #ccc;border-left-width:0;border-right:1px solid #ccc;border-top-width:0;empty-cells:show;height:22px;line-height:21px;outline:none;outline-width:0;overflow:hidden;padding:0 4px;vertical-align:top;white-space:pre-wrap}[dir=rtl].handsontable td,[dir=rtl].handsontable th{border-left:1px solid #ccc;border-right-width:0}.handsontable th:last-child{border-bottom:1px solid #ccc;border-left:none;border-right:1px solid #ccc}[dir=rtl].handsontable th:last-child{border-left:1px solid #ccc;border-right:none}.handsontable .ht_clone_bottom_inline_start_corner td:first-of-type,.handsontable .ht_clone_inline_start td:first-of-type,.handsontable .ht_clone_top_inline_start_corner td:first-of-type,.handsontable th:first-child,.handsontable.ht-wrapper:not(.htFirstDatasetColumnNotRendered) td:first-of-type{border-left:1px solid #ccc}[dir=rtl].handsontable th:first-child,[dir=rtl].handsontable.ht-wrapper:not(.htFirstDatasetColumnNotRendered) td:first-of-type{border-right:1px solid #ccc}.handsontable .ht_clone_top th:nth-child(2){border-left-width:0;border-right:1px solid #ccc}[dir=rtl].handsontable .ht_clone_top th:nth-child(2){border-left:1px solid #ccc;border-right-width:0}.handsontable.htRowHeaders thead tr th:nth-child(2){border-left:1px solid #ccc}[dir=rtl].handsontable.htRowHeaders thead tr th:nth-child(2){border-right:1px solid #ccc}.handsontable tr:first-child td,.handsontable tr:first-child th{border-top:1px solid #ccc}.ht_master:not(.innerBorderInlineStart):not(.emptyColumns) tbody tr th,.ht_master:not(.innerBorderInlineStart):not(.emptyColumns) thead tr th:first-child,.ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable:not(.htGhostTable) tbody tr th,.ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable:not(.ht_clone_top):not(.htGhostTable) thead tr th:first-child{border-left:1px solid #ccc;border-right-width:0}[dir=rtl].ht_master:not(.innerBorderInlineStart):not(.emptyColumns) tbody tr th,[dir=rtl].ht_master:not(.innerBorderInlineStart):not(.emptyColumns) thead tr th:first-child,[dir=rtl].ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable:not(.htGhostTable) tbody tr th,[dir=rtl].ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable:not(.ht_clone_top):not(.htGhostTable) thead tr th:first-child{border-left-width:0;border-right:1px solid #ccc}.ht_master:not(.innerBorderTop):not(.innerBorderBottom) thead tr.lastChild th,.ht_master:not(.innerBorderTop):not(.innerBorderBottom) thead tr:last-child th,.ht_master:not(.innerBorderTop):not(.innerBorderBottom)~.handsontable thead tr.lastChild th,.ht_master:not(.innerBorderTop):not(.innerBorderBottom)~.handsontable thead tr:last-child th{border-bottom-width:0}.handsontable th{background-color:#f0f0f0;color:#222;font-weight:400;text-align:center;white-space:nowrap}.handsontable thead th{padding:0}.handsontable th.active{background-color:#ccc}.handsontable thead th .relative{padding:2px 4px}.handsontable span.colHeader{display:inline-block;line-height:1.1}.handsontable .wtBorder{font-size:0;position:absolute}.handsontable .wtBorder.hidden{display:none!important}.handsontable .wtBorder:first-child,.handsontable .wtBorder:nth-child(3){z-index:2}.handsontable .wtBorder:nth-child(2),.handsontable .wtBorder:nth-child(4){z-index:1}.handsontable .wtBorder.current{z-index:10}.handsontable .wtBorder.area{z-index:8}.handsontable .wtBorder.fill{z-index:6}.handsontable .wtBorder.corner{cursor:crosshair;font-size:0}.ht_clone_master{z-index:100}.ht_clone_inline_start{z-index:120}.ht_clone_bottom{z-index:130}.ht_clone_bottom_inline_start_corner{z-index:150}.ht_clone_top{z-index:160}.ht_clone_top_inline_start_corner{z-index:180}.handsontable col.hidden{width:0!important}.handsontable tr.hidden,.handsontable tr.hidden td,.handsontable tr.hidden th{display:none}.ht_clone_bottom,.ht_clone_inline_start,.ht_clone_top,.ht_master{overflow:hidden}.ht_master .wtHolder{overflow:auto}.handsontable .ht_clone_inline_start table.htCore>thead,.handsontable .ht_master table.htCore>tbody>tr>th,.handsontable .ht_master table.htCore>thead{visibility:hidden}.ht_clone_bottom .wtHolder,.ht_clone_inline_start .wtHolder,.ht_clone_top .wtHolder{overflow:hidden}.handsontable{color:#373737;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica Neue,Arial,sans-serif;font-size:13px;font-weight:400;position:relative;touch-action:manipulation}.handsontable a{color:#104acc}.handsontable.htAutoSize{left:-99000px;position:absolute;top:-99000px;visibility:hidden}.handsontable td.htInvalid{background-color:#ffbeba!important}.handsontable td.htNoWrap{white-space:nowrap}.handsontable td.invisibleSelection,.handsontable th.invisibleSelection{outline:none}.handsontable td.invisibleSelection::selection,.handsontable th.invisibleSelection::selection{background:hsla(0,0%,100%,0)}.hot-display-license-info{color:#373737;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica Neue,Arial,sans-serif;font-size:10px;font-weight:400;padding:5px 0 3px;text-align:left}.hot-display-license-info a{color:#104acc;font-size:10px}.ht-root-wrapper .htFocusCatcher{border:0;height:0;margin:0;opacity:0;padding:0;position:absolute;width:0;z-index:-1}.handsontable .htTextEllipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.handsontable .manualColumnResizer{cursor:col-resize;height:25px;position:absolute;top:0;width:5px;z-index:210}.handsontable .manualRowResizer{cursor:row-resize;height:5px;left:0;position:absolute;width:50px;z-index:210}.handsontable .manualColumnResizer.active,.handsontable .manualColumnResizer:hover,.handsontable .manualRowResizer.active,.handsontable .manualRowResizer:hover{background-color:#34a9db}.handsontable .manualColumnResizerGuide{background-color:#34a9db;border-left:none;border-right:1px dashed #777;display:none;margin-left:5px;margin-right:unset;position:absolute;right:unset;top:0;width:0}[dir=rtl].handsontable .manualColumnResizerGuide{border-left:1px dashed #777;border-right:none;left:unset;margin-left:unset;margin-right:5px}.handsontable .manualRowResizerGuide{background-color:#34a9db;border-bottom:1px dashed #777;bottom:0;display:none;height:0;left:0;margin-top:5px;position:absolute}.handsontable .manualColumnResizerGuide.active,.handsontable .manualRowResizerGuide.active{display:block;z-index:209}.handsontable td.area,.handsontable td.area-1,.handsontable td.area-2,.handsontable td.area-3,.handsontable td.area-4,.handsontable td.area-5,.handsontable td.area-6,.handsontable td.area-7{position:relative}.handsontable td.area-1:before,.handsontable td.area-2:before,.handsontable td.area-3:before,.handsontable td.area-4:before,.handsontable td.area-5:before,.handsontable td.area-6:before,.handsontable td.area-7:before,.handsontable td.area:before{background:#005eff;bottom:0;content:"";left:0;position:absolute;right:0;top:0}.handsontable td.area:before{opacity:.1}.handsontable td.area-1:before{opacity:.2}.handsontable td.area-2:before{opacity:.27}.handsontable td.area-3:before{opacity:.35}.handsontable td.area-4:before{opacity:.41}.handsontable td.area-5:before{opacity:.47}.handsontable td.area-6:before{opacity:.54}.handsontable td.area-7:before{opacity:.58}.handsontable tbody th.current,.handsontable thead th.current{box-shadow:inset 0 0 0 2px #4b89ff}.handsontable tbody th.ht__highlight,.handsontable thead th.ht__highlight{background-color:#dcdcdc}.handsontable tbody th.ht__active_highlight,.handsontable thead th.ht__active_highlight{background-color:#8eb0e7;color:#000}.handsontableInput{background-color:#fff;border:none;border-radius:0;box-shadow:inset 0 0 0 2px #5292f7;box-sizing:border-box!important;color:#000;display:block;font-family:inherit;font-size:inherit;line-height:21px;margin:0;outline-width:0;padding:1px 5px 0;resize:none}.handsontableInput:focus{outline:none}.handsontableInputHolder{left:0;position:absolute;top:0}.htSelectEditor{position:absolute;select{-webkit-appearance:menulist-button!important;border:2px solid #4b89ff;box-sizing:border-box!important;height:100%;width:100%}}.htSelectEditor select:focus{outline:none}.htSelectEditor .htAutocompleteArrow{display:none}.handsontable .htDimmed{color:#777}.handsontable .htSubmenu{position:relative}.handsontable .htSubmenu :after{color:#777;content:"▶";font-size:9px;position:absolute;right:5px}[dir=rtl].handsontable .htSubmenu :after{content:""}[dir=rtl].handsontable .htSubmenu :before{color:#777;content:"◀";font-size:9px;left:5px;position:absolute}.handsontable .htLeft{text-align:left}.handsontable .htCenter{text-align:center}.handsontable .htRight{text-align:right}.handsontable .htJustify{text-align:justify}.handsontable .htTop{vertical-align:top}.handsontable .htMiddle{vertical-align:middle}.handsontable .htBottom{vertical-align:bottom}.handsontable .htPlaceholder{color:#999}.handsontable.listbox{border:1px solid #ccc;margin:0}.handsontable.listbox.autocompleteEditor,.handsontable.listbox.dropdownEditor{border-width:0}.handsontable.listbox .ht_master table{background:#fff;border-collapse:separate}.handsontable.listbox.autocompleteEditor .ht_master table,.handsontable.listbox.dropdownEditor .ht_master table{border:1px solid #ccc}.handsontable.listbox td,.handsontable.listbox th,.handsontable.listbox tr:first-child td,.handsontable.listbox tr:first-child th,.handsontable.listbox tr:last-child th{border-color:transparent!important}.handsontable.listbox td,.handsontable.listbox th{text-overflow:ellipsis;white-space:nowrap}.handsontable.listbox td.htDimmed{color:inherit;cursor:default;font-style:inherit}.handsontable.listbox .wtBorder{visibility:hidden}.handsontable.listbox tr td.current,.handsontable.listbox tr:hover td{background:#eee}.ht_editor_hidden{z-index:-1}.ht_editor_visible{z-index:200}.handsontable td.htSearchResult{background:#fcedd9;color:#583707}.handsontable.mobile,.handsontable.mobile .wtHolder{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-overflow-scrolling:touch}.handsontable.mobile .handsontableInput:focus{-webkit-appearance:none;-webkit-box-shadow:inset 0 0 0 2px #5292f7;-moz-box-shadow:inset 0 0 0 2px #5292f7;box-shadow:inset 0 0 0 2px #5292f7}.handsontable .bottomSelectionHandle,.handsontable .bottomSelectionHandle-HitArea,.handsontable .topSelectionHandle,.handsontable .topSelectionHandle-HitArea{left:-10000px;right:unset;top:-10000px;z-index:9999}[dir=rtl].handsontable .bottomSelectionHandle,[dir=rtl].handsontable .bottomSelectionHandle-HitArea,[dir=rtl].handsontable .topSelectionHandle,[dir=rtl].handsontable .topSelectionHandle-HitArea{left:unset;right:-10000px}.handsontable.hide-tween{-webkit-animation:opacity-hide .3s;animation:opacity-hide .3s;animation-fill-mode:forwards;-webkit-animation-fill-mode:forwards}.handsontable.show-tween{-webkit-animation:opacity-show .3s;animation:opacity-show .3s;animation-fill-mode:forwards;-webkit-animation-fill-mode:forwards}.handsontable .htAutocompleteArrow{color:#bbb;cursor:default;float:right;font-size:10px;text-align:center;width:16px}[dir=rtl].handsontable .htAutocompleteArrow{float:left}.handsontable td.htInvalid .htAutocompleteArrow{color:#555}.handsontable td.htInvalid .htAutocompleteArrow:hover{color:#1a1a1a}.handsontable td .htAutocompleteArrow:hover{color:#777}.handsontable td.area .htAutocompleteArrow{color:#d3d3d3}.handsontable .htCheckboxRendererInput.noValue{opacity:.5}.handsontable .htCheckboxRendererLabel{cursor:pointer;display:inline-block;font-size:inherit;vertical-align:middle}.handsontable .htCheckboxRendererLabel.fullWidth{width:100%}.handsontable .collapsibleIndicator{background:#eee;border:1px solid #a6a6a6;border-radius:10px;-webkit-box-shadow:0 0 0 6px #eee;-moz-box-shadow:0 0 0 6px #eee;box-shadow:0 0 0 3px #eee;color:#222;cursor:pointer;font-size:10px;height:10px;left:unset;line-height:8px;position:absolute;right:5px;text-align:center;top:50%;transform:translateY(-50%);width:10px}[dir=rtl].handsontable .collapsibleIndicator{left:5px;right:unset}.handsontable[dir=ltr] thead th:has(.collapsibleIndicator) div.htRight span.colHeader{margin-right:20px}.handsontable[dir=rtl] thead th:has(.collapsibleIndicator) div.htLeft span.colHeader{margin-left:20px}.handsontable .columnSorting{position:relative}.handsontable[dir=ltr] div.htRight span[class*=ascending],.handsontable[dir=ltr] div.htRight span[class*=descending]{margin-left:-10px;margin-right:10px}.handsontable[dir=rtl] div.htLeft span[class*=ascending],.handsontable[dir=rtl] div.htLeft span[class*=descending]{margin-left:10px;margin-right:-10px}.handsontable[dir=ltr] div.htRight span[class*=ascending]:only-child,.handsontable[dir=ltr] div.htRight span[class*=descending]:only-child{margin-left:-15px;margin-right:15px}.handsontable[dir=rtl] div.htLeft span[class*=ascending]:only-child,.handsontable[dir=rtl] div.htLeft span[class*=descending]:only-child{margin-left:15px;margin-right:-15px}.handsontable .columnSorting.sortAction:hover{cursor:pointer;text-decoration:underline}.handsontable span.colHeader.columnSorting:before{background-position-x:right;background-repeat:no-repeat;background-size:contain;content:"";height:10px;left:unset;margin-top:-6px;padding-left:8px;padding-right:0;position:absolute;right:-9px;top:50%;width:5px}[dir=rtl].handsontable span.colHeader.columnSorting:before{background-position-x:left;left:-9px;padding-left:0;padding-right:8px;right:unset}.handsontable span.colHeader.columnSorting.ascending:before{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAMAAADJ7yrpAAAAKlBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKE86IAAAADXRSTlMABBEmRGprlJW72e77tTkTKwAAAFNJREFUeAHtzjkSgCAUBNHPgsoy97+ulGXRqJE5L+xkxoYt2UdsLb5bqFINz+aLuuLn5rIu2RkO3fZpWENimNgiw6iBYRTPMLJjGFxQZ1hxxb/xBI1qC8k39CdKAAAAAElFTkSuQmCC)}.handsontable span.colHeader.columnSorting.descending:before{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAMAAADJ7yrpAAAAKlBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKE86IAAAADXRSTlMABBEmRGprlJW72e77tTkTKwAAAFJJREFUeAHtzjkSgCAQRNFmQYUZ7n9dKUvru0TmvPAn3br0QfgdZ5xx6x+rQn23GqTYnq1FDcnuzZIO2WmedVqIRVxgGKEyjNgYRjKGkZ1hFIZ3I70LyM0VtU8AAAAASUVORK5CYII=)}.htGhostTable .htCore span.colHeader.columnSorting:not(.indicatorDisabled):before{content:"*";display:inline-block;padding-right:20px;position:relative}.handsontable.htGhostTable table thead th{border-bottom-width:0}.handsontable.htGhostTable table tbody tr td,.handsontable.htGhostTable table tbody tr th{border-top-width:0}.handsontable .htCommentCell{position:relative}.handsontable .htCommentCell:after{border-left:6px solid transparent;border-right:none;border-top:6px solid #000;content:"";left:unset;position:absolute;right:0;top:0}[dir=rtl].handsontable .htCommentCell:after{border-left:none;border-right:6px solid transparent;left:0;right:unset}.htCommentsContainer .htComments{display:none;position:absolute;z-index:1059}.htCommentsContainer .htCommentTextArea{-webkit-appearance:none;background-color:#fff;border:none;border-left:3px solid #ccc;box-shadow:0 1px 3px rgba(0,0,0,.118),0 1px 2px rgba(0,0,0,.239);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-size:12px;height:90px;outline:0!important;padding:5px;width:215px}[dir=rtl].htCommentsContainer .htCommentTextArea{border-left:none;border-right:3px solid #ccc}.htCommentsContainer .htCommentTextArea:focus{border-left:3px solid #5292f7;border-right:none;box-shadow:0 1px 3px rgba(0,0,0,.118),0 1px 2px rgba(0,0,0,.239),inset 0 0 0 1px #5292f7}[dir=rtl].htCommentsContainer .htCommentTextArea:focus{border-left:none;border-right:3px solid #5292f7}
32
32
  /*!
33
33
  * Handsontable ContextMenu