handsontable 0.0.0-next-ff10728-20250410 → 0.0.0-next-d9b3885-20250415

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.

Potentially problematic release.


This version of handsontable might be problematic. Click here for more details.

Files changed (122) hide show
  1. package/3rdparty/walkontable/src/cell/range.js +14 -0
  2. package/3rdparty/walkontable/src/cell/range.mjs +14 -0
  3. package/3rdparty/walkontable/src/renderer/rowHeaders.js +4 -1
  4. package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +4 -1
  5. package/3rdparty/walkontable/src/selection/border/border.js +5 -0
  6. package/3rdparty/walkontable/src/selection/border/border.mjs +5 -0
  7. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +3 -4
  8. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +3 -4
  9. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +8 -10
  10. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +8 -10
  11. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +3 -4
  12. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +3 -4
  13. package/3rdparty/walkontable/src/table.js +5 -2
  14. package/3rdparty/walkontable/src/table.mjs +5 -2
  15. package/CHANGELOG.md +39 -0
  16. package/base.js +2 -2
  17. package/base.mjs +2 -2
  18. package/core/focusCatcher/focusDetector.js +1 -1
  19. package/core/focusCatcher/focusDetector.mjs +2 -2
  20. package/core/hooks/constants.js +266 -0
  21. package/core/hooks/constants.mjs +266 -0
  22. package/core/hooks/index.d.ts +1 -0
  23. package/core.d.ts +0 -1
  24. package/core.js +71 -25
  25. package/core.mjs +72 -26
  26. package/dataMap/dataMap.js +0 -7
  27. package/dataMap/dataMap.mjs +0 -7
  28. package/dataMap/metaManager/metaSchema.js +28 -0
  29. package/dataMap/metaManager/metaSchema.mjs +28 -0
  30. package/dist/handsontable.css +3 -3
  31. package/dist/handsontable.full.css +3 -3
  32. package/dist/handsontable.full.js +1375 -350
  33. package/dist/handsontable.full.min.css +3 -3
  34. package/dist/handsontable.full.min.js +17 -17
  35. package/dist/handsontable.js +1375 -350
  36. package/dist/handsontable.min.css +3 -3
  37. package/dist/handsontable.min.js +18 -18
  38. package/editorManager.js +1 -7
  39. package/editorManager.mjs +1 -7
  40. package/editors/autocompleteEditor/autocompleteEditor.js +14 -4
  41. package/editors/autocompleteEditor/autocompleteEditor.mjs +14 -4
  42. package/editors/textEditor/textEditor.js +1 -1
  43. package/editors/textEditor/textEditor.mjs +2 -2
  44. package/helpers/browser.js +1 -1
  45. package/helpers/browser.mjs +1 -1
  46. package/helpers/dom/element.js +2 -2
  47. package/helpers/dom/element.mjs +1 -1
  48. package/helpers/mixed.js +2 -2
  49. package/helpers/mixed.mjs +2 -2
  50. package/helpers/object.js +3 -0
  51. package/helpers/object.mjs +3 -0
  52. package/package.json +1 -1
  53. package/plugins/autoColumnSize/autoColumnSize.js +48 -1
  54. package/plugins/autoColumnSize/autoColumnSize.mjs +48 -1
  55. package/plugins/autoRowSize/autoRowSize.js +46 -6
  56. package/plugins/autoRowSize/autoRowSize.mjs +46 -6
  57. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +13 -0
  58. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +13 -0
  59. package/plugins/collapsibleColumns/collapsibleColumns.js +31 -0
  60. package/plugins/collapsibleColumns/collapsibleColumns.mjs +31 -0
  61. package/plugins/columnSorting/columnSorting.js +0 -4
  62. package/plugins/columnSorting/columnSorting.mjs +0 -4
  63. package/plugins/columnSummary/columnSummary.js +33 -0
  64. package/plugins/columnSummary/columnSummary.mjs +33 -0
  65. package/plugins/comments/comments.js +54 -0
  66. package/plugins/comments/comments.mjs +54 -0
  67. package/plugins/contextMenu/menu/defaultShortcutsList.js +2 -2
  68. package/plugins/contextMenu/menu/defaultShortcutsList.mjs +2 -2
  69. package/plugins/contextMenu/menu/menu.js +1 -0
  70. package/plugins/contextMenu/menu/menu.mjs +1 -0
  71. package/plugins/contextMenu/menu/positioner.js +10 -2
  72. package/plugins/contextMenu/menu/positioner.mjs +10 -2
  73. package/plugins/copyPaste/copyPaste.js +12 -15
  74. package/plugins/copyPaste/copyPaste.mjs +13 -16
  75. package/plugins/copyPaste/pasteEvent.js +3 -0
  76. package/plugins/copyPaste/pasteEvent.mjs +3 -0
  77. package/plugins/dropdownMenu/dropdownMenu.js +15 -0
  78. package/plugins/dropdownMenu/dropdownMenu.mjs +15 -0
  79. package/plugins/exportFile/exportFile.js +58 -0
  80. package/plugins/exportFile/exportFile.mjs +58 -0
  81. package/plugins/filters/filters.js +99 -24
  82. package/plugins/filters/filters.mjs +99 -24
  83. package/plugins/filters/ui/multipleSelect.js +7 -1
  84. package/plugins/filters/ui/multipleSelect.mjs +7 -1
  85. package/plugins/hiddenColumns/hiddenColumns.js +65 -1
  86. package/plugins/hiddenColumns/hiddenColumns.mjs +65 -1
  87. package/plugins/hiddenRows/hiddenRows.js +65 -1
  88. package/plugins/hiddenRows/hiddenRows.mjs +65 -1
  89. package/plugins/manualColumnResize/manualColumnResize.js +4 -6
  90. package/plugins/manualColumnResize/manualColumnResize.mjs +4 -6
  91. package/plugins/manualRowResize/manualRowResize.js +4 -6
  92. package/plugins/manualRowResize/manualRowResize.mjs +4 -6
  93. package/plugins/mergeCells/mergeCells.js +26 -29
  94. package/plugins/mergeCells/mergeCells.mjs +26 -29
  95. package/plugins/mergeCells/renderer.js +15 -0
  96. package/plugins/mergeCells/renderer.mjs +15 -0
  97. package/plugins/mergeCells/utils.js +31 -0
  98. package/plugins/mergeCells/utils.mjs +27 -0
  99. package/plugins/nestedHeaders/nestedHeaders.js +25 -0
  100. package/plugins/nestedHeaders/nestedHeaders.mjs +25 -0
  101. package/plugins/nestedRows/data/dataManager.js +2 -2
  102. package/plugins/nestedRows/data/dataManager.mjs +2 -2
  103. package/plugins/stretchColumns/stretchColumns.js +13 -0
  104. package/plugins/stretchColumns/stretchColumns.mjs +13 -0
  105. package/plugins/trimRows/trimRows.js +61 -0
  106. package/plugins/trimRows/trimRows.mjs +61 -0
  107. package/plugins/undoRedo/actions/removeColumn.js +19 -14
  108. package/plugins/undoRedo/actions/removeColumn.mjs +19 -14
  109. package/plugins/undoRedo/actions/removeRow.js +12 -4
  110. package/plugins/undoRedo/actions/removeRow.mjs +12 -4
  111. package/selection/selection.js +3 -1
  112. package/selection/selection.mjs +3 -1
  113. package/styles/handsontable.css +14 -15
  114. package/styles/handsontable.min.css +3 -3
  115. package/styles/ht-theme-horizon.css +2 -2
  116. package/styles/ht-theme-horizon.min.css +2 -2
  117. package/styles/ht-theme-main.css +2 -2
  118. package/styles/ht-theme-main.min.css +2 -2
  119. package/tableView.js +5 -8
  120. package/tableView.mjs +5 -8
  121. package/utils/ghostTable.js +3 -0
  122. package/utils/ghostTable.mjs +3 -0
@@ -25,8 +25,8 @@
25
25
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
26
26
  * USE OR INABILITY TO USE THIS SOFTWARE.
27
27
  *
28
- * Version: 0.0.0-next-ff10728-20250410
29
- * Release date: 20/02/2025 (built at 10/04/2025 06:43:56)
28
+ * Version: 0.0.0-next-d9b3885-20250415
29
+ * Release date: 19/03/2025 (built at 15/04/2025 10:06:49)
30
30
  */
31
31
  (function webpackUniversalModuleDefinition(root, factory) {
32
32
  if(typeof exports === 'object' && typeof module === 'object')
@@ -42681,7 +42681,7 @@ exports.CellRange = _base.CellRange;
42681
42681
  var _registry = __webpack_require__(764);
42682
42682
  var _eventManager = _interopRequireWildcard(__webpack_require__(522));
42683
42683
  var _translations = __webpack_require__(625);
42684
- var _jquery = _interopRequireDefault(__webpack_require__(1099));
42684
+ var _jquery = _interopRequireDefault(__webpack_require__(1100));
42685
42685
  var _ghostTable = _interopRequireDefault(__webpack_require__(843));
42686
42686
  var parseTableHelpers = _interopRequireWildcard(__webpack_require__(524));
42687
42687
  var arrayHelpers = _interopRequireWildcard(__webpack_require__(495));
@@ -42855,8 +42855,8 @@ Handsontable.hooks = _hooks.Hooks.getSingleton();
42855
42855
  Handsontable.CellCoords = _src.CellCoords;
42856
42856
  Handsontable.CellRange = _src.CellRange;
42857
42857
  Handsontable.packageName = 'handsontable';
42858
- Handsontable.buildDate = "10/04/2025 06:43:56";
42859
- Handsontable.version = "0.0.0-next-ff10728-20250410";
42858
+ Handsontable.buildDate = "15/04/2025 10:06:49";
42859
+ Handsontable.version = "0.0.0-next-d9b3885-20250415";
42860
42860
  Handsontable.languages = {
42861
42861
  dictionaryKeys: _registry.dictionaryKeys,
42862
42862
  getLanguageDictionary: _registry.getLanguageDictionary,
@@ -42963,6 +42963,12 @@ const deprecationWarns = new Set();
42963
42963
  * by using React's `ref` feature (read more on the [Instance methods](@/guides/getting-started/react-methods/react-methods.md) page).
42964
42964
  * :::
42965
42965
  *
42966
+ * ::: only-for angular
42967
+ * To use these methods, associate a Handsontable instance with your instance
42968
+ * of the [`HotTable` component](@/guides/getting-started/installation/installation.md#5-use-the-hottable-component),
42969
+ * by using `@ViewChild` decorator (read more on the [Instance access](@/guides/getting-started/angular-hot-instance/angular-hot-instance.md) page).
42970
+ * :::
42971
+ *
42966
42972
  * ## How to call a method
42967
42973
  *
42968
42974
  * ::: only-for javascript
@@ -42993,6 +42999,39 @@ const deprecationWarns = new Set();
42993
42999
  * ```
42994
43000
  * :::
42995
43001
  *
43002
+ * ::: only-for angular
43003
+ * ```ts
43004
+ * import { Component, ViewChild, AfterViewInit } from "@angular/core";
43005
+ * import {
43006
+ * GridSettings,
43007
+ * HotTableComponent,
43008
+ * HotTableModule,
43009
+ * } from "@handsontable/angular-wrapper";
43010
+ *
43011
+ * `@Component`({
43012
+ * standalone: true,
43013
+ * imports: [HotTableModule],
43014
+ * template: ` <div class="ht-theme-main">
43015
+ * <hot-table [settings]="gridSettings" />
43016
+ * </div>`,
43017
+ * })
43018
+ * export class ExampleComponent implements AfterViewInit {
43019
+ * `@ViewChild`(HotTableComponent, { static: false })
43020
+ * readonly hotTable!: HotTableComponent;
43021
+ *
43022
+ * readonly gridSettings = <GridSettings>{
43023
+ * columns: [{}],
43024
+ * };
43025
+ *
43026
+ * ngAfterViewInit(): void {
43027
+ * // Access the Handsontable instance
43028
+ * // Call a method
43029
+ * this.hotTable?.hotInstance?.setDataAtCell(0, 0, "new value");
43030
+ * }
43031
+ * }
43032
+ * ```
43033
+ * :::
43034
+ *
42996
43035
  * @param {HTMLElement} rootElement The element to which the Handsontable instance is injected.
42997
43036
  * @param {object} userSettings The user defined options.
42998
43037
  * @param {boolean} [rootInstanceSymbol=false] Indicates if the instance is root of all later instances created.
@@ -43110,7 +43149,6 @@ function Core(rootElement, userSettings) {
43110
43149
  const globalMeta = metaManager.getGlobalMeta();
43111
43150
  const pluginsRegistry = (0, _uniqueMap.createUniqueMap)();
43112
43151
  this.container = this.rootDocument.createElement('div');
43113
- this.renderCall = false;
43114
43152
  rootElement.insertBefore(this.container, rootElement.firstChild);
43115
43153
  if ((0, _rootInstance.isRootInstance)(this)) {
43116
43154
  (0, _mixed._injectProductInfo)(userSettings.licenseKey, rootElement);
@@ -43142,6 +43180,9 @@ function Core(rootElement, userSettings) {
43142
43180
  this.rowIndexMapper.addLocalHook('indexesSequenceChange', source => {
43143
43181
  instance.runHooks('afterRowSequenceChange', source);
43144
43182
  });
43183
+ eventManager.addEventListener(this.rootDocument.documentElement, 'compositionstart', event => {
43184
+ instance.runHooks('beforeCompositionStart', event);
43185
+ });
43145
43186
  dataSource = new _dataSource.default(instance);
43146
43187
  if (!this.rootElement.id || this.rootElement.id.substring(0, 3) === 'ht_') {
43147
43188
  this.rootElement.id = this.guid; // if root element does not have an id, assign a random id
@@ -43221,6 +43262,7 @@ function Core(rootElement, userSettings) {
43221
43262
  let {
43222
43263
  hiddenIndexesChanged
43223
43264
  } = _ref;
43265
+ this.forceFullRender = true;
43224
43266
  if (hiddenIndexesChanged) {
43225
43267
  this.selection.commit();
43226
43268
  }
@@ -43504,13 +43546,6 @@ function Core(rootElement, userSettings) {
43504
43546
  }
43505
43547
  }
43506
43548
  const totalRows = instance.countRows();
43507
- if (totalRows === 0) {
43508
- selection.deselect();
43509
- } else if (source === 'ContextMenu.removeRow') {
43510
- selection.refresh();
43511
- } else {
43512
- selection.shiftRows(groupIndex, -groupAmount);
43513
- }
43514
43549
  const fixedRowsTop = tableMeta.fixedRowsTop;
43515
43550
  if (fixedRowsTop >= calcIndex + 1) {
43516
43551
  tableMeta.fixedRowsTop -= Math.min(groupAmount, fixedRowsTop - calcIndex);
@@ -43519,6 +43554,13 @@ function Core(rootElement, userSettings) {
43519
43554
  if (fixedRowsBottom && calcIndex >= totalRows - fixedRowsBottom) {
43520
43555
  tableMeta.fixedRowsBottom -= Math.min(groupAmount, fixedRowsBottom);
43521
43556
  }
43557
+ if (totalRows === 0) {
43558
+ selection.deselect();
43559
+ } else if (source === 'ContextMenu.removeRow') {
43560
+ selection.refresh();
43561
+ } else {
43562
+ selection.shiftRows(groupIndex, -groupAmount);
43563
+ }
43522
43564
  offset += groupAmount;
43523
43565
  });
43524
43566
  };
@@ -43928,8 +43970,7 @@ function Core(rootElement, userSettings) {
43928
43970
  (0, _index.installFocusCatcher)(instance);
43929
43971
  }
43930
43972
  instance.runHooks('init');
43931
- this.forceFullRender = true; // used when data was changed
43932
- this.view.render();
43973
+ this.render();
43933
43974
 
43934
43975
  // Run the logic only if it's the table's initialization and the root element is not visible.
43935
43976
  if (!!firstRun && instance.rootElement.offsetParent === null) {
@@ -44102,13 +44143,11 @@ function Core(rootElement, userSettings) {
44102
44143
  datamap.set(changes[i][0], changes[i][1], changes[i][3]);
44103
44144
  }
44104
44145
  const hasChanges = changes.length > 0;
44105
- instance.forceFullRender = true; // used when data was changed or when all cells need to be re-rendered
44106
-
44107
44146
  if (hasChanges) {
44108
44147
  grid.adjustRowsAndCols();
44109
44148
  instance.runHooks('beforeChangeRender', changes, source);
44110
44149
  editorManager.closeEditor();
44111
- instance.view.render();
44150
+ instance.render();
44112
44151
  editorManager.prepareEditor();
44113
44152
  instance.view.adjustElementsSize();
44114
44153
  instance.runHooks('afterChange', changes, source || 'edit');
@@ -44117,7 +44156,7 @@ function Core(rootElement, userSettings) {
44117
44156
  activeEditor.refreshValue();
44118
44157
  }
44119
44158
  } else {
44120
- instance.view.render();
44159
+ instance.render();
44121
44160
  }
44122
44161
  }
44123
44162
 
@@ -44267,9 +44306,22 @@ function Core(rootElement, userSettings) {
44267
44306
  ...tableMeta
44268
44307
  };
44269
44308
  }
44270
- if (cellProperties.type === 'numeric' && typeof newValue === 'string' && (0, _number.isNumericLike)(newValue)) {
44309
+ const {
44310
+ type,
44311
+ checkedTemplate,
44312
+ uncheckedTemplate
44313
+ } = cellProperties;
44314
+ if (type === 'numeric' && typeof newValue === 'string' && (0, _number.isNumericLike)(newValue)) {
44271
44315
  filteredChanges[i][3] = getParsedNumber(newValue);
44272
44316
  }
44317
+ if (type === 'checkbox') {
44318
+ const stringifiedValue = (0, _mixed.stringify)(newValue);
44319
+ const isChecked = stringifiedValue === (0, _mixed.stringify)(checkedTemplate);
44320
+ const isUnchecked = stringifiedValue === (0, _mixed.stringify)(uncheckedTemplate);
44321
+ if (isChecked || isUnchecked) {
44322
+ filteredChanges[i][3] = isChecked ? checkedTemplate : uncheckedTemplate;
44323
+ }
44324
+ }
44273
44325
  }
44274
44326
  return filteredChanges;
44275
44327
  }
@@ -44671,11 +44723,7 @@ function Core(rootElement, userSettings) {
44671
44723
  const nextValue = this.renderSuspendedCounter - 1;
44672
44724
  this.renderSuspendedCounter = Math.max(nextValue, 0);
44673
44725
  if (!this.isRenderSuspended() && nextValue === this.renderSuspendedCounter) {
44674
- if (this.renderCall) {
44675
- this.render();
44676
- } else {
44677
- instance.view.render();
44678
- }
44726
+ instance.view.render();
44679
44727
  }
44680
44728
  };
44681
44729
 
@@ -44691,9 +44739,8 @@ function Core(rootElement, userSettings) {
44691
44739
  */
44692
44740
  this.render = function () {
44693
44741
  if (this.view) {
44694
- this.renderCall = true;
44695
- this.forceFullRender = true; // used when data was changed or when all cells need to be re-rendered
44696
-
44742
+ // used when data was changed or when all cells need to be re-rendered (slow render)
44743
+ this.forceFullRender = true;
44697
44744
  if (!this.isRenderSuspended()) {
44698
44745
  instance.view.render();
44699
44746
  }
@@ -45306,8 +45353,7 @@ function Core(rootElement, userSettings) {
45306
45353
  }
45307
45354
  grid.adjustRowsAndCols();
45308
45355
  if (instance.view && !firstRun) {
45309
- instance.forceFullRender = true; // used when data was changed
45310
- instance.view.render();
45356
+ instance.render();
45311
45357
  instance.view._wt.wtOverlays.adjustElementsSize();
45312
45358
  }
45313
45359
  if (!init && instance.view && (currentHeight === '' || height === '' || height === undefined) && currentHeight !== height) {
@@ -51419,8 +51465,8 @@ exports.isChildOf = isChildOf;
51419
51465
  exports.isDetached = isDetached;
51420
51466
  exports.isHTMLElement = isHTMLElement;
51421
51467
  exports.isInput = isInput;
51468
+ exports.isInternalElement = isInternalElement;
51422
51469
  exports.isOutsideInput = isOutsideInput;
51423
- exports.isThisHotChild = isThisHotChild;
51424
51470
  exports.isVisible = isVisible;
51425
51471
  exports.makeElementContentEditableAndSelectItsContent = makeElementContentEditableAndSelectItsContent;
51426
51472
  exports.matchesCSSRules = matchesCSSRules;
@@ -51481,7 +51527,7 @@ function getParent(element) {
51481
51527
  * @param {HTMLElement} thisHotContainer The Handsontable container.
51482
51528
  * @returns {boolean}
51483
51529
  */
51484
- function isThisHotChild(element, thisHotContainer) {
51530
+ function isInternalElement(element, thisHotContainer) {
51485
51531
  const closestHandsontableContainer = element.closest('.handsontable');
51486
51532
  return !!closestHandsontableContainer && (closestHandsontableContainer.parentNode === thisHotContainer || closestHandsontableContainer === thisHotContainer);
51487
51533
  }
@@ -54188,7 +54234,7 @@ const domMessages = {
54188
54234
  function _injectProductInfo(key, element) {
54189
54235
  const hasValidType = !isEmpty(key);
54190
54236
  const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
54191
- const hotVersion = "0.0.0-next-ff10728-20250410";
54237
+ const hotVersion = "0.0.0-next-d9b3885-20250415";
54192
54238
  let keyValidityDate;
54193
54239
  let consoleMessageState = 'invalid';
54194
54240
  let domMessageState = 'invalid';
@@ -54196,7 +54242,7 @@ function _injectProductInfo(key, element) {
54196
54242
  const schemaValidity = _checkKeySchema(key);
54197
54243
  if (hasValidType || isNonCommercial || schemaValidity) {
54198
54244
  if (schemaValidity) {
54199
- const releaseDate = (0, _moment.default)("20/02/2025", 'DD/MM/YYYY');
54245
+ const releaseDate = (0, _moment.default)("19/03/2025", 'DD/MM/YYYY');
54200
54246
  const releaseDays = Math.floor(releaseDate.toDate().getTime() / 8.64e7);
54201
54247
  const keyValidityDays = _extractTime(key);
54202
54248
  keyValidityDate = (0, _moment.default)((keyValidityDays + 1) * 8.64e7, 'x').format('MMMM DD, YYYY');
@@ -61903,7 +61949,7 @@ const platforms = {
61903
61949
  mac: tester(platform => /^Mac/.test(platform)),
61904
61950
  win: tester(platform => /^Win/.test(platform)),
61905
61951
  linux: tester(platform => /^Linux/.test(platform)),
61906
- ios: tester(ua => /iPhone|iPad|iPod/i.test(ua))
61952
+ ios: tester(platform => /iPhone|iPad|iPod/i.test(platform))
61907
61953
  };
61908
61954
 
61909
61955
  /**
@@ -62331,6 +62377,9 @@ function getProperty(object, name) {
62331
62377
  * @param {*} value Value to be assigned at the provided property.
62332
62378
  */
62333
62379
  function setProperty(object, name, value) {
62380
+ if (typeof name !== 'string') {
62381
+ return;
62382
+ }
62334
62383
  const names = name.split('.');
62335
62384
  let workingObject = object;
62336
62385
  names.forEach((propName, index) => {
@@ -62697,13 +62746,7 @@ class EditorManager {
62697
62746
  this.selection = _selection;
62698
62747
  this.eventManager = new _eventManager.default(hotInstance);
62699
62748
  this.hot.addHook('afterDocumentKeyDown', event => _assertClassBrand(_EditorManager_brand, this, _onAfterDocumentKeyDown).call(this, event));
62700
-
62701
- // Open editor when text composition is started (IME editor)
62702
- this.eventManager.addEventListener(this.hot.rootDocument.documentElement, 'compositionstart', event => {
62703
- if (!this.destroyed && this.hot.isListening()) {
62704
- this.openEditor('', event);
62705
- }
62706
- });
62749
+ this.hot.addHook('beforeCompositionStart', event => _assertClassBrand(_EditorManager_brand, this, _onAfterDocumentKeyDown).call(this, event));
62707
62750
  this.hot.view._wt.update('onCellDblClick', (event, coords, elem) => _assertClassBrand(_EditorManager_brand, this, _onCellDblClick).call(this, event, coords, elem));
62708
62751
  }
62709
62752
 
@@ -63892,6 +63935,22 @@ exports.__esModule = true;
63892
63935
  * />
63893
63936
  * :::
63894
63937
  *
63938
+ * ::: only-for angular
63939
+ * ```ts
63940
+ * settings = {
63941
+ * afterChange: (changes, source) => {
63942
+ * changes?.forEach(([row, prop, oldValue, newValue]) => {
63943
+ * // Some logic...
63944
+ * });
63945
+ * },
63946
+ * };
63947
+ * ```
63948
+ *
63949
+ * ```html
63950
+ * <hot-table [settings]="settings" />
63951
+ * ```
63952
+ * :::
63953
+ *
63895
63954
  * ::: only-for javascript
63896
63955
  * ```js
63897
63956
  * // using events as plugin hooks
@@ -63996,6 +64055,22 @@ const REGISTERED_HOOKS = exports.REGISTERED_HOOKS = [/* eslint-disable jsdoc/req
63996
64055
  * />
63997
64056
  * ```
63998
64057
  * :::
64058
+ *
64059
+ * ::: only-for angular
64060
+ * ```ts
64061
+ * settings = {
64062
+ * afterChange: (changes, source) => {
64063
+ * changes?.forEach(([row, prop, oldValue, newValue]) => {
64064
+ * // Some logic...
64065
+ * });
64066
+ * },
64067
+ * };
64068
+ * ```
64069
+ *
64070
+ * ```html
64071
+ * <hot-table [settings]="settings"></hot-table>
64072
+ * ```
64073
+ * :::
63999
64074
  */
64000
64075
  'afterChange',
64001
64076
  /**
@@ -64099,6 +64174,21 @@ const REGISTERED_HOOKS = exports.REGISTERED_HOOKS = [/* eslint-disable jsdoc/req
64099
64174
  * />
64100
64175
  * ```
64101
64176
  * :::
64177
+ *
64178
+ * ::: only-for angular
64179
+ * ```ts
64180
+ * settings = {
64181
+ * beforeCreateCol: (data, coords) => {
64182
+ * // Return `false` to cancel column inserting.
64183
+ * return false;
64184
+ * },
64185
+ * };
64186
+ * ```
64187
+ *
64188
+ * ```html
64189
+ * <hot-table [settings]="settings"></hot-table>
64190
+ * ```
64191
+ * :::
64102
64192
  */
64103
64193
  'beforeCreateCol',
64104
64194
  /**
@@ -64179,6 +64269,14 @@ const REGISTERED_HOOKS = exports.REGISTERED_HOOKS = [/* eslint-disable jsdoc/req
64179
64269
  * @returns {string[]|undefined} Can return an `Array` of `String`s. Each of these strings will act like class names to be removed from all the cells in the table.
64180
64270
  */
64181
64271
  'beforeRemoveCellClassNames',
64272
+ /**
64273
+ * Hook fired after `compositionstart` event is handled.
64274
+ *
64275
+ * @event Hooks#beforeCompositionStart
64276
+ * @since 15.3.0
64277
+ * @param {Event} event A native `composition` event object.
64278
+ */
64279
+ 'beforeCompositionStart',
64182
64280
  /**
64183
64281
  * Fired after getting the cell settings.
64184
64282
  *
@@ -64474,6 +64572,31 @@ const REGISTERED_HOOKS = exports.REGISTERED_HOOKS = [/* eslint-disable jsdoc/req
64474
64572
  * }}
64475
64573
  * />
64476
64574
  * ```
64575
+ * :::
64576
+ *
64577
+ * ::: only-for angular
64578
+ * ```ts
64579
+ * settings = {
64580
+ * afterSelection: (
64581
+ * row,
64582
+ * column,
64583
+ * row2,
64584
+ * column2,
64585
+ * preventScrolling,
64586
+ * selectionLayerLevel
64587
+ * ) => {
64588
+ * // If set to `false` (default): when cell selection is outside the viewport,
64589
+ * // Handsontable scrolls the viewport to cell selection's end corner.
64590
+ * // If set to `true`: when cell selection is outside the viewport,
64591
+ * // Handsontable doesn't scroll to cell selection's end corner.
64592
+ * preventScrolling.value = true;
64593
+ * },
64594
+ * };
64595
+ * ```
64596
+ *
64597
+ * ```html
64598
+ * <hot-table [settings]="settings"></hot-table>
64599
+ * ```
64477
64600
  * :::
64478
64601
  */
64479
64602
  'afterSelection',
@@ -64513,6 +64636,28 @@ const REGISTERED_HOOKS = exports.REGISTERED_HOOKS = [/* eslint-disable jsdoc/req
64513
64636
  * />
64514
64637
  * ```
64515
64638
  * :::
64639
+ *
64640
+ * ::: only-for angular
64641
+ * ```ts
64642
+ * settings = {
64643
+ * afterSelectionByProp: (
64644
+ * row,
64645
+ * column,
64646
+ * row2,
64647
+ * column2,
64648
+ * preventScrolling,
64649
+ * selectionLayerLevel
64650
+ * ) => {
64651
+ * // Setting if prevent scrolling after selection
64652
+ * preventScrolling.value = true;
64653
+ * },
64654
+ * };
64655
+ * ```
64656
+ *
64657
+ * ```html
64658
+ * <hot-table [settings]="settings"></hot-table>
64659
+ * ```
64660
+ * :::
64516
64661
  */
64517
64662
  'afterSelectionByProp',
64518
64663
  /**
@@ -64577,6 +64722,24 @@ const REGISTERED_HOOKS = exports.REGISTERED_HOOKS = [/* eslint-disable jsdoc/req
64577
64722
  * />
64578
64723
  * ```
64579
64724
  * :::
64725
+ *
64726
+ * ::: only-for angular
64727
+ * ```ts
64728
+ * settings = {
64729
+ * afterSelectionFocusSet: (row, column, preventScrolling) => {
64730
+ * // If set to `false` (default): when focused cell selection is outside the viewport,
64731
+ * // Handsontable scrolls the viewport to that cell.
64732
+ * // If set to `true`: when focused cell selection is outside the viewport,
64733
+ * // Handsontable doesn't scroll the viewport.
64734
+ * preventScrolling.value = true;
64735
+ * },
64736
+ * };
64737
+ * ```
64738
+ *
64739
+ * ```html
64740
+ * <hot-table [settings]="settings"></hot-table>
64741
+ * ```
64742
+ * :::
64580
64743
  */
64581
64744
  'afterSelectionFocusSet',
64582
64745
  /**
@@ -64611,6 +64774,22 @@ const REGISTERED_HOOKS = exports.REGISTERED_HOOKS = [/* eslint-disable jsdoc/req
64611
64774
  * />
64612
64775
  * ```
64613
64776
  * :::
64777
+ *
64778
+ * ::: only-for angular
64779
+ * ```ts
64780
+ * settings = {
64781
+ * beforeSelectColumns: (from, to, highlight) => {
64782
+ * // Extend the column selection by one column left and one column right.
64783
+ * from.col = Math.max(from.col - 1, 0);
64784
+ * to.col = Math.min(to.col + 1, this.countCols() - 1);
64785
+ * },
64786
+ * };
64787
+ * ```
64788
+ *
64789
+ * ```html
64790
+ * <hot-table [settings]="settings"></hot-table>
64791
+ * ```
64792
+ * :::
64614
64793
  */
64615
64794
  'beforeSelectColumns',
64616
64795
  /**
@@ -64655,6 +64834,22 @@ const REGISTERED_HOOKS = exports.REGISTERED_HOOKS = [/* eslint-disable jsdoc/req
64655
64834
  * />
64656
64835
  * ```
64657
64836
  * :::
64837
+ *
64838
+ * ::: only-for angular
64839
+ * ```ts
64840
+ * settings = {
64841
+ * beforeSelectRows: (from, to, highlight) => {
64842
+ * // Extend the row selection by one row up and one row down.
64843
+ * from.row = Math.max(from.row - 1, 0);
64844
+ * to.row = Math.min(to.row + 1, this.countRows() - 1);
64845
+ * },
64846
+ * };
64847
+ * ```
64848
+ *
64849
+ * ```html
64850
+ * <hot-table [settings]="settings"></hot-table>
64851
+ * ```
64852
+ * :::
64658
64853
  */
64659
64854
  'beforeSelectRows',
64660
64855
  /**
@@ -64875,6 +65070,42 @@ const REGISTERED_HOOKS = exports.REGISTERED_HOOKS = [/* eslint-disable jsdoc/req
64875
65070
  * />
64876
65071
  * ```
64877
65072
  * :::
65073
+ * ::: only-for angular
65074
+ *```ts
65075
+ * // To alter a single change, overwrite the desired value with `changes[i][3]`
65076
+ * settings1 = {
65077
+ * beforeChange: (changes, source) => {
65078
+ * // [[row, prop, oldVal, newVal], ...]
65079
+ * changes[0][3] = 10;
65080
+ * },
65081
+ * };
65082
+ *
65083
+ * // To ignore a single change, set `changes[i]` to `null`
65084
+ * // or remove `changes[i]` from the array, by using changes.splice(i, 1).
65085
+ * settings2 = {
65086
+ * beforeChange: (changes, source) => {
65087
+ * // [[row, prop, oldVal, newVal], ...]
65088
+ * changes[0] = null;
65089
+ * },
65090
+ * };
65091
+ *
65092
+ * // To ignore all changes, return `false`
65093
+ * // or set the array's length to 0 (`changes.length = 0`)
65094
+ * settings3 = {
65095
+ * beforeChange: (changes, source) => {
65096
+ * // [[row, prop, oldVal, newVal], ...]
65097
+ * return false;
65098
+ * },
65099
+ * };
65100
+ * ```
65101
+ *
65102
+ * ```html
65103
+ * <hot-table [settings]="settings1"></hot-table>
65104
+ * <hot-table [settings]="settings2"></hot-table>
65105
+ * <hot-table [settings]="settings3"></hot-table>
65106
+ * ```
65107
+ *
65108
+ * :::
64878
65109
  */
64879
65110
  'beforeChange',
64880
65111
  /**
@@ -65485,6 +65716,32 @@ const REGISTERED_HOOKS = exports.REGISTERED_HOOKS = [/* eslint-disable jsdoc/req
65485
65716
  * />
65486
65717
  * ```
65487
65718
  * :::
65719
+ *
65720
+ * ::: only-for angular
65721
+ *```ts
65722
+ * // To disregard a single row, remove it from the array using data.splice(i, 1).
65723
+ * settings1 = {
65724
+ * beforeCut: (data, coords) => {
65725
+ * // data -> [[1, 2, 3], [4, 5, 6]]
65726
+ * data.splice(0, 1);
65727
+ * // data -> [[4, 5, 6]]
65728
+ * // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}]
65729
+ * },
65730
+ * };
65731
+ *
65732
+ * // To cancel a cutting action, just return `false`.
65733
+ * settings2 = {
65734
+ * beforeCut: (data, coords) => {
65735
+ * return false;
65736
+ * },
65737
+ * };
65738
+ * ```
65739
+ *
65740
+ * ```html
65741
+ * <hot-table [settings]="settings1"></hot-table>
65742
+ * <hot-table [settings]="settings2"></hot-table>
65743
+ * ```
65744
+ * :::
65488
65745
  */
65489
65746
  'beforeCut',
65490
65747
  /**
@@ -65557,6 +65814,32 @@ const REGISTERED_HOOKS = exports.REGISTERED_HOOKS = [/* eslint-disable jsdoc/req
65557
65814
  * ...
65558
65815
  * ```
65559
65816
  * :::
65817
+ *
65818
+ * ::: only-for angular
65819
+ * ```ts
65820
+ * // To disregard a single row, remove it from the array using data.splice(i, 1).
65821
+ * settings1 = {
65822
+ * beforeCopy: (data, coords) => {
65823
+ * // data -> [[1, 2, 3], [4, 5, 6]]
65824
+ * data.splice(0, 1);
65825
+ * // data -> [[4, 5, 6]]
65826
+ * // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}]
65827
+ * },
65828
+ * };
65829
+ *
65830
+ * // To cancel copying, return false from the callback.
65831
+ * settings2 = {
65832
+ * beforeCopy: (data, coords) => {
65833
+ * return false;
65834
+ * },
65835
+ * };
65836
+ * ```
65837
+ *
65838
+ * ```html
65839
+ * <hot-table [settings]="settings1"></hot-table>
65840
+ * <hot-table [settings]="settings2"></hot-table>
65841
+ * ```
65842
+ * :::
65560
65843
  */
65561
65844
  'beforeCopy',
65562
65845
  /**
@@ -65619,6 +65902,32 @@ const REGISTERED_HOOKS = exports.REGISTERED_HOOKS = [/* eslint-disable jsdoc/req
65619
65902
  * />
65620
65903
  * ```
65621
65904
  * :::
65905
+ *
65906
+ * ::: only-for angular
65907
+ * ```ts
65908
+ * // To disregard a single row, remove it from the array using data.splice(i, 1).
65909
+ * settings1 = {
65910
+ * beforePaste: (data, coords) => {
65911
+ * // data -> [[1, 2, 3], [4, 5, 6]]
65912
+ * data.splice(0, 1);
65913
+ * // data -> [[4, 5, 6]]
65914
+ * // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}]
65915
+ * },
65916
+ * };
65917
+ *
65918
+ * // To cancel pasting, return false from the callback.
65919
+ * settings2 = {
65920
+ * beforePaste: (data, coords) => {
65921
+ * return false;
65922
+ * },
65923
+ * };
65924
+ * ```
65925
+ *
65926
+ * ```html
65927
+ * <hot-table [settings]="settings1"></hot-table>
65928
+ * <hot-table [settings]="settings2"></hot-table>
65929
+ * ```
65930
+ * :::
65622
65931
  */
65623
65932
  'beforePaste',
65624
65933
  /**
@@ -68795,16 +69104,16 @@ class TableView {
68795
69104
  */
68796
69105
  render() {
68797
69106
  if (!this.hot.isRenderSuspended()) {
68798
- this.hot.runHooks('beforeRender', this.hot.forceFullRender);
69107
+ const isFullRender = this.hot.forceFullRender;
69108
+ this.hot.runHooks('beforeRender', isFullRender);
68799
69109
  if (this.postponedAdjustElementsSize) {
68800
69110
  this.postponedAdjustElementsSize = false;
68801
69111
  this.adjustElementsSize();
68802
69112
  }
68803
- this._wt.draw(!this.hot.forceFullRender);
69113
+ this._wt.draw(!isFullRender);
68804
69114
  _assertClassBrand(_TableView_brand, this, _updateScrollbarClassNames).call(this);
68805
- this.hot.runHooks('afterRender', this.hot.forceFullRender);
69115
+ this.hot.runHooks('afterRender', isFullRender);
68806
69116
  this.hot.forceFullRender = false;
68807
- this.hot.renderCall = false;
68808
69117
  }
68809
69118
  }
68810
69119
 
@@ -69711,8 +70020,7 @@ class TableView {
69711
70020
  this.eventManager.addEventListener(this.hot.rootDocument.documentElement, 'click', () => {
69712
70021
  if (this.settings.observeDOMVisibility) {
69713
70022
  if (this._wt.drawInterrupted) {
69714
- this.hot.forceFullRender = true;
69715
- this.render();
70023
+ this.hot.render();
69716
70024
  }
69717
70025
  }
69718
70026
  });
@@ -69785,7 +70093,6 @@ class TableView {
69785
70093
  */
69786
70094
  beforeRender(force, skipRender) {
69787
70095
  if (force) {
69788
- // this.hot.forceFullRender = did Handsontable request full render?
69789
70096
  this.hot.runHooks('beforeViewRender', this.hot.forceFullRender, skipRender);
69790
70097
  }
69791
70098
  }
@@ -69799,7 +70106,6 @@ class TableView {
69799
70106
  */
69800
70107
  afterRender(force) {
69801
70108
  if (force) {
69802
- // this.hot.forceFullRender = did Handsontable request full render?
69803
70109
  this.hot.runHooks('afterViewRender', this.hot.forceFullRender);
69804
70110
  }
69805
70111
  }
@@ -71905,6 +72211,20 @@ class CellRange {
71905
72211
  return this;
71906
72212
  }
71907
72213
 
72214
+ /**
72215
+ * Normalizes the coordinates in your `CellRange` instance to the nearest valid position.
72216
+ *
72217
+ * Coordinates that point to headers (negative values) are normalized to `0`.
72218
+ *
72219
+ * @returns {CellRange}
72220
+ */
72221
+ normalize() {
72222
+ this.highlight.normalize();
72223
+ this.from.normalize();
72224
+ this.to.normalize();
72225
+ return this;
72226
+ }
72227
+
71908
72228
  /**
71909
72229
  * Checks if the coordinates in your `CellRange` instance are valid
71910
72230
  * in the context of given table parameters.
@@ -74526,8 +74846,8 @@ class Table {
74526
74846
  } else {
74527
74847
  this.tableOffset = this.dataAccessObject.parentTableOffset;
74528
74848
  }
74529
- const startRow = totalRows > 0 ? this.getFirstRenderedRow() : 0;
74530
- const startColumn = totalColumns > 0 ? this.getFirstRenderedColumn() : 0;
74849
+ const startRow = Math.max(this.getFirstRenderedRow(), 0);
74850
+ const startColumn = Math.max(this.getFirstRenderedColumn(), 0);
74531
74851
  this.rowFilter = new _row.default(startRow, totalRows, columnHeadersCount);
74532
74852
  this.columnFilter = new _column.default(startColumn, totalColumns, rowHeadersCount);
74533
74853
  let performRedraw = true;
@@ -74845,6 +75165,9 @@ class Table {
74845
75165
  return null;
74846
75166
  }
74847
75167
  const TR = cellElement.parentNode;
75168
+ if (!TR) {
75169
+ return null;
75170
+ }
74848
75171
  const CONTAINER = TR.parentNode;
74849
75172
  let row = (0, _element.index)(TR);
74850
75173
  let col = cellElement.cellIndex;
@@ -75664,7 +75987,10 @@ class RowHeadersRenderer extends _base.BaseRenderer {
75664
75987
  const orderView = this.obtainOrderView(TR);
75665
75988
  const cellsView = cells.obtainOrderView(TR);
75666
75989
  orderView.appendView(cellsView).setSize(rowHeadersCount).setOffset(0).start();
75667
- for (let visibleColumnIndex = 0; visibleColumnIndex < rowHeadersCount; visibleColumnIndex++) {
75990
+
75991
+ // Reading the row header renderers in reverse because of how the Eco Renderers handle rendering
75992
+ // (prepending the nodes when rendering row headers).
75993
+ for (let visibleColumnIndex = rowHeadersCount - 1; visibleColumnIndex >= 0; visibleColumnIndex--) {
75668
75994
  orderView.render();
75669
75995
  const TH = orderView.getCurrentNode();
75670
75996
  TH.className = '';
@@ -77529,16 +77855,11 @@ const stickyRowsBottom = {
77529
77855
  * @this Table
77530
77856
  */
77531
77857
  getFirstRenderedRow() {
77532
- const totalRows = this.wtSettings.getSetting('totalRows');
77533
- const fixedRowsBottom = this.wtSettings.getSetting('fixedRowsBottom');
77534
- const index = totalRows - fixedRowsBottom;
77535
- if (totalRows === 0 || fixedRowsBottom === 0) {
77858
+ const allStickyRows = this.getRenderedRowsCount();
77859
+ if (allStickyRows === 0) {
77536
77860
  return -1;
77537
77861
  }
77538
- if (index < 0) {
77539
- return 0;
77540
- }
77541
- return index;
77862
+ return this.wtSettings.getSetting('totalRows') - allStickyRows;
77542
77863
  },
77543
77864
  /**
77544
77865
  * Get the source index of the first row fully visible in the viewport. If no rows are fully visible, returns an error code: -1.
@@ -77567,6 +77888,10 @@ const stickyRowsBottom = {
77567
77888
  * @this Table
77568
77889
  */
77569
77890
  getLastRenderedRow() {
77891
+ const allStickyRows = this.getRenderedRowsCount();
77892
+ if (allStickyRows === 0) {
77893
+ return -1;
77894
+ }
77570
77895
  return this.wtSettings.getSetting('totalRows') - 1;
77571
77896
  },
77572
77897
  /**
@@ -77596,8 +77921,7 @@ const stickyRowsBottom = {
77596
77921
  * @this Table
77597
77922
  */
77598
77923
  getRenderedRowsCount() {
77599
- const totalRows = this.wtSettings.getSetting('totalRows');
77600
- return Math.min(this.wtSettings.getSetting('fixedRowsBottom'), totalRows);
77924
+ return Math.min(this.wtSettings.getSetting('totalRows'), this.wtSettings.getSetting('fixedRowsBottom'));
77601
77925
  },
77602
77926
  /**
77603
77927
  * Get the number of fully visible rows in the viewport.
@@ -77652,8 +77976,8 @@ const stickyColumnsStart = {
77652
77976
  * @this Table
77653
77977
  */
77654
77978
  getFirstRenderedColumn() {
77655
- const totalColumns = this.wtSettings.getSetting('totalColumns');
77656
- if (totalColumns === 0) {
77979
+ const allStickyColumns = this.getRenderedColumnsCount();
77980
+ if (allStickyColumns === 0) {
77657
77981
  return -1;
77658
77982
  }
77659
77983
  return 0;
@@ -77714,8 +78038,7 @@ const stickyColumnsStart = {
77714
78038
  * @this Table
77715
78039
  */
77716
78040
  getRenderedColumnsCount() {
77717
- const totalColumns = this.wtSettings.getSetting('totalColumns');
77718
- return Math.min(this.wtSettings.getSetting('fixedColumnsStart'), totalColumns);
78041
+ return Math.min(this.wtSettings.getSetting('totalColumns'), this.wtSettings.getSetting('fixedColumnsStart'));
77719
78042
  },
77720
78043
  /**
77721
78044
  * Get the number of fully visible columns in the viewport.
@@ -81169,6 +81492,11 @@ class Border {
81169
81492
  const lastRenderedRow = wtTable.getLastRenderedRow();
81170
81493
  const firstRenderedColumn = wtTable.getFirstRenderedColumn();
81171
81494
  const lastRenderedColumn = wtTable.getLastRenderedColumn();
81495
+ if (firstRenderedColumn < 0 && lastRenderedColumn < 0 || firstRenderedRow < 0 && lastRenderedRow < 0) {
81496
+ // ...also when overlays have rendered only headers skip it
81497
+ this.disappear();
81498
+ return;
81499
+ }
81172
81500
  let fromTD;
81173
81501
  if (isMultiple) {
81174
81502
  fromColumn = Math.max(fromColumn, firstRenderedColumn);
@@ -81663,8 +81991,8 @@ const stickyRowsTop = {
81663
81991
  * @this Table
81664
81992
  */
81665
81993
  getFirstRenderedRow() {
81666
- const totalRows = this.wtSettings.getSetting('totalRows');
81667
- if (totalRows === 0) {
81994
+ const allStickyRows = this.getRenderedRowsCount();
81995
+ if (allStickyRows === 0) {
81668
81996
  return -1;
81669
81997
  }
81670
81998
  return 0;
@@ -81725,8 +82053,7 @@ const stickyRowsTop = {
81725
82053
  * @this Table
81726
82054
  */
81727
82055
  getRenderedRowsCount() {
81728
- const totalRows = this.wtSettings.getSetting('totalRows');
81729
- return Math.min(this.wtSettings.getSetting('fixedRowsTop'), totalRows);
82056
+ return Math.min(this.wtSettings.getSetting('totalRows'), this.wtSettings.getSetting('fixedRowsTop'));
81730
82057
  },
81731
82058
  /**
81732
82059
  * Get the number of fully visible rows in the viewport.
@@ -87974,7 +88301,9 @@ class Selection {
87974
88301
  col: (0, _number.clamp)(to.col, 0, countColumns - 1)
87975
88302
  });
87976
88303
  this.selectedRange.ranges.push(range);
87977
- this.highlight.getFocus().add(highlight).commit().syncWith(range);
88304
+ if (this.highlight.isEnabledFor(_highlight.FOCUS_TYPE, this.selectedRange.current().highlight)) {
88305
+ this.highlight.getFocus().add(highlight).commit().syncWith(range);
88306
+ }
87978
88307
  this.applyAndCommit(range);
87979
88308
  }
87980
88309
 
@@ -90127,8 +90456,6 @@ class DataMap {
90127
90456
  }
90128
90457
  }
90129
90458
  this.hot.runHooks('afterCreateRow', newVisualRowIndex, numberOfCreatedRows, source);
90130
- this.hot.forceFullRender = true; // used when data was changed
90131
-
90132
90459
  return {
90133
90460
  delta: numberOfCreatedRows,
90134
90461
  startPhysicalIndex: physicalRowIndex
@@ -90214,8 +90541,6 @@ class DataMap {
90214
90541
  }
90215
90542
  const newVisualColumnIndex = this.hot.toVisualColumn(startPhysicalIndex);
90216
90543
  this.hot.runHooks('afterCreateCol', newVisualColumnIndex, numberOfCreatedCols, source);
90217
- this.hot.forceFullRender = true; // used when data was changed
90218
-
90219
90544
  this.refreshDuckSchema();
90220
90545
  return {
90221
90546
  delta: numberOfCreatedCols,
@@ -90262,8 +90587,6 @@ class DataMap {
90262
90587
  this.metaManager.removeRow(rowPhysicalIndex, 1);
90263
90588
  });
90264
90589
  this.hot.runHooks('afterRemoveRow', rowIndex, numberOfRemovedIndexes, removedPhysicalIndexes, source);
90265
- this.hot.forceFullRender = true; // used when data was changed
90266
-
90267
90590
  return true;
90268
90591
  }
90269
90592
 
@@ -90323,7 +90646,6 @@ class DataMap {
90323
90646
  }
90324
90647
  }
90325
90648
  this.hot.runHooks('afterRemoveCol', columnIndex, amount, removedPhysicalIndexes, source);
90326
- this.hot.forceFullRender = true; // used when data was changed
90327
90649
  this.refreshDuckSchema();
90328
90650
  return true;
90329
90651
  }
@@ -91546,6 +91868,33 @@ var _object = __webpack_require__(499);
91546
91868
  * ```
91547
91869
  * :::
91548
91870
  *
91871
+ * ::: only-for angular
91872
+ * ```ts
91873
+ * settings = {
91874
+ * data: [
91875
+ * ["A1", "B1", "C1", "D1", "E1"],
91876
+ * ["A2", "B2", "C2", "D2", "E2"],
91877
+ * ["A3", "B3", "C3", "D3", "E3"],
91878
+ * ["A4", "B4", "C4", "D4", "E4"],
91879
+ * ["A5", "B5", "C5", "D5", "E5"],
91880
+ * ],
91881
+ * width: 400,
91882
+ * height: 300,
91883
+ * colHeaders: true,
91884
+ * rowHeaders: true,
91885
+ * customBorders: true,
91886
+ * dropdownMenu: true,
91887
+ * multiColumnSorting: true,
91888
+ * filters: true,
91889
+ * manualRowMove: true,
91890
+ * };
91891
+ * ```
91892
+ *
91893
+ * ```html
91894
+ * <hot-table [settings]="settings" />
91895
+ * ```
91896
+ * :::
91897
+ *
91549
91898
  * Depending on your needs, you can apply [configuration options](@/api/options.md) to different elements of your grid:
91550
91899
  * - [The entire grid](@/guides/getting-started/configuration-options/configuration-options.md#set-grid-options)
91551
91900
  * - [Individual columns](@/guides/getting-started/configuration-options/configuration-options.md#set-column-options)
@@ -94112,6 +94461,7 @@ var _default = () => {
94112
94461
  * | `'de-CH'` | German - Switzerland |
94113
94462
  * | `'de-DE'` | German - Germany |
94114
94463
  * | `'es-MX'` | Spanish - Mexico |
94464
+ * | `'fa-IR'` | Persian - Iran |
94115
94465
  * | `'fr-FR'` | French - France |
94116
94466
  * | `'hr-HR'` | Croatian - Croatia |
94117
94467
  * | `'it-IT'` | Italian - Italy |
@@ -99943,7 +100293,7 @@ function createInputElement(hot) {
99943
100293
  input.name = '__htFocusCatcher';
99944
100294
  input.classList.add('htFocusCatcher');
99945
100295
  if (hot.getSettings().ariaTags) {
99946
- (0, _element.setAttribute)(input, [(0, _a11y.A11Y_PRESENTATION)(), (0, _a11y.A11Y_HIDDEN)()]);
100296
+ (0, _element.setAttribute)(input, [(0, _a11y.A11Y_LABEL)('Focus catcher')]);
99947
100297
  }
99948
100298
  return input;
99949
100299
  }
@@ -101185,7 +101535,7 @@ class TextEditor extends _baseEditor.BaseEditor {
101185
101535
  */
101186
101536
  close() {
101187
101537
  this.autoResize.unObserve();
101188
- if ((0, _element.isThisHotChild)(this.hot.rootDocument.activeElement, this.hot.rootElement)) {
101538
+ if ((0, _element.isInternalElement)(this.hot.rootDocument.activeElement, this.hot.rootElement)) {
101189
101539
  this.hot.listen(); // don't refocus the table if user focused some cell outside of HT on purpose
101190
101540
  }
101191
101541
  this.hideEditableElement();
@@ -102028,6 +102378,7 @@ var _string = __webpack_require__(352);
102028
102378
  var _unicode = __webpack_require__(508);
102029
102379
  var _textRenderer = __webpack_require__(760);
102030
102380
  var _a11y = __webpack_require__(496);
102381
+ var _function = __webpack_require__(497);
102031
102382
  function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
102032
102383
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
102033
102384
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
@@ -102040,6 +102391,7 @@ const EDITOR_TYPE = exports.EDITOR_TYPE = 'autocomplete';
102040
102391
  * @class AutocompleteEditor
102041
102392
  */
102042
102393
  var _idPrefix = /*#__PURE__*/new WeakMap();
102394
+ var _focusDebounced = /*#__PURE__*/new WeakMap();
102043
102395
  var _AutocompleteEditor_brand = /*#__PURE__*/new WeakSet();
102044
102396
  class AutocompleteEditor extends _handsontableEditor.HandsontableEditor {
102045
102397
  constructor() {
@@ -102072,6 +102424,12 @@ class AutocompleteEditor extends _handsontableEditor.HandsontableEditor {
102072
102424
  * @type {string}
102073
102425
  */
102074
102426
  _classPrivateFieldInitSpec(this, _idPrefix, this.hot.guid.slice(0, 9));
102427
+ /**
102428
+ * Runs focus method after debounce.
102429
+ */
102430
+ _classPrivateFieldInitSpec(this, _focusDebounced, (0, _function.debounce)(() => {
102431
+ this.focus();
102432
+ }, 100));
102075
102433
  /**
102076
102434
  * Filters and sorts by relevance.
102077
102435
  *
@@ -102157,7 +102515,6 @@ class AutocompleteEditor extends _handsontableEditor.HandsontableEditor {
102157
102515
  }
102158
102516
  return this.TEXTAREA.value;
102159
102517
  }
102160
-
102161
102518
  /**
102162
102519
  * Creates an editor's elements and adds necessary CSS classnames.
102163
102520
  */
@@ -102203,10 +102560,10 @@ class AutocompleteEditor extends _handsontableEditor.HandsontableEditor {
102203
102560
  this.showEditableElement();
102204
102561
  this.focus();
102205
102562
  this.addHook('beforeKeyDown', event => this.onBeforeKeyDown(event));
102563
+ this.htEditor.addHook('afterScroll', _classPrivateFieldGet(_focusDebounced, this));
102206
102564
  this.htEditor.updateSettings({
102207
102565
  colWidths: trimDropdown ? [(0, _element.outerWidth)(this.TEXTAREA) - 2] : undefined,
102208
102566
  autoColumnSize: true,
102209
- autoRowSize: true,
102210
102567
  renderer: (hotInstance, TD, row, col, prop, value, cellProperties) => {
102211
102568
  (0, _textRenderer.textRenderer)(hotInstance, TD, row, col, prop, value, cellProperties);
102212
102569
  const {
@@ -102478,7 +102835,10 @@ class AutocompleteEditor extends _handsontableEditor.HandsontableEditor {
102478
102835
  const maxItems = Math.min(this.cellProperties.visibleRows, this.strippedChoices.length);
102479
102836
  const height = Array.from({
102480
102837
  length: maxItems
102481
- }, (_, i) => i).reduce((h, index) => h + this.htEditor.getRowHeight(index), 0);
102838
+ }, (_, i) => i).reduce((totalHeight, index) => {
102839
+ const rowHeight = this.htEditor.getRowHeight(index) || this.htEditor.view.getDefaultRowHeight();
102840
+ return totalHeight + rowHeight;
102841
+ }, 0);
102482
102842
  return height + borderVerticalCompensation + 1;
102483
102843
  }
102484
102844
 
@@ -102576,7 +102936,7 @@ exports.AutocompleteEditor = AutocompleteEditor;
102576
102936
  function _fixDropdownWidth() {
102577
102937
  if (this.htEditor.view.hasVerticalScroll()) {
102578
102938
  this.htEditor.updateSettings({
102579
- width: this.htEditor.getSettings().width + (0, _element.getScrollbarWidth)(this.hot.rootDocument)
102939
+ width: this.getWidth() + (0, _element.getScrollbarWidth)(this.hot.rootDocument)
102580
102940
  });
102581
102941
  }
102582
102942
  }
@@ -111981,25 +112341,25 @@ var _manualRowResize = __webpack_require__(1020);
111981
112341
  exports.ManualRowResize = _manualRowResize.ManualRowResize;
111982
112342
  var _mergeCells = __webpack_require__(1022);
111983
112343
  exports.MergeCells = _mergeCells.MergeCells;
111984
- var _multiColumnSorting = __webpack_require__(1036);
112344
+ var _multiColumnSorting = __webpack_require__(1037);
111985
112345
  exports.MultiColumnSorting = _multiColumnSorting.MultiColumnSorting;
111986
- var _multipleSelectionHandles = __webpack_require__(1040);
112346
+ var _multipleSelectionHandles = __webpack_require__(1041);
111987
112347
  exports.MultipleSelectionHandles = _multipleSelectionHandles.MultipleSelectionHandles;
111988
- var _nestedHeaders = __webpack_require__(1042);
112348
+ var _nestedHeaders = __webpack_require__(1043);
111989
112349
  exports.NestedHeaders = _nestedHeaders.NestedHeaders;
111990
- var _nestedRows = __webpack_require__(1058);
112350
+ var _nestedRows = __webpack_require__(1059);
111991
112351
  exports.NestedRows = _nestedRows.NestedRows;
111992
- var _persistentState = __webpack_require__(1066);
112352
+ var _persistentState = __webpack_require__(1067);
111993
112353
  exports.PersistentState = _persistentState.PersistentState;
111994
- var _search = __webpack_require__(1069);
112354
+ var _search = __webpack_require__(1070);
111995
112355
  exports.Search = _search.Search;
111996
- var _stretchColumns = __webpack_require__(1071);
112356
+ var _stretchColumns = __webpack_require__(1072);
111997
112357
  exports.StretchColumns = _stretchColumns.StretchColumns;
111998
- var _touchScroll = __webpack_require__(1077);
112358
+ var _touchScroll = __webpack_require__(1078);
111999
112359
  exports.TouchScroll = _touchScroll.TouchScroll;
112000
- var _trimRows = __webpack_require__(1079);
112360
+ var _trimRows = __webpack_require__(1080);
112001
112361
  exports.TrimRows = _trimRows.TrimRows;
112002
- var _undoRedo = __webpack_require__(1081);
112362
+ var _undoRedo = __webpack_require__(1082);
112003
112363
  exports.UndoRedo = _undoRedo.UndoRedo;
112004
112364
  var _registry = __webpack_require__(532);
112005
112365
  exports.registerPlugin = _registry.registerPlugin;
@@ -112190,6 +112550,53 @@ const COLUMN_SIZE_MAP_NAME = 'autoColumnSize';
112190
112550
  * }
112191
112551
  * ```
112192
112552
  * :::
112553
+ *
112554
+ * ::: only-for angular
112555
+ *
112556
+ * ```ts
112557
+ * import { AfterViewInit, Component, ViewChild } from "@angular/core";
112558
+ * import {
112559
+ * GridSettings,
112560
+ * HotTableModule,
112561
+ * HotTableComponent,
112562
+ * } from "@handsontable/angular-wrapper";
112563
+ *
112564
+ * `@Component`({
112565
+ * selector: "app-example",
112566
+ * standalone: true,
112567
+ * imports: [HotTableModule],
112568
+ * template: ` <div class="ht-theme-main">
112569
+ * <hot-table [settings]="gridSettings" />
112570
+ * </div>`,
112571
+ * })
112572
+ * export class ExampleComponent implements AfterViewInit {
112573
+ * `@ViewChild`(HotTableComponent, { static: false })
112574
+ * readonly hotTable!: HotTableComponent;
112575
+ *
112576
+ * readonly gridSettings = <GridSettings>{
112577
+ * data: this.getData(),
112578
+ * autoColumnSize: true,
112579
+ * };
112580
+ *
112581
+ * ngAfterViewInit(): void {
112582
+ * // Access to plugin instance:
112583
+ * const hot = this.hotTable.hotInstance;
112584
+ * const plugin = hot.getPlugin("autoColumnSize");
112585
+ *
112586
+ * plugin.getColumnWidth(4);
112587
+ *
112588
+ * if (plugin.isEnabled()) {
112589
+ * // code...
112590
+ * }
112591
+ * }
112592
+ *
112593
+ * private getData(): any[] {
112594
+ * //get some data
112595
+ * }
112596
+ * }
112597
+ * ```
112598
+ *
112599
+ * :::
112193
112600
  */
112194
112601
  /* eslint-enable jsdoc/require-description-complete-sentence */
112195
112602
  var _isInitialized = /*#__PURE__*/new WeakMap();
@@ -112388,7 +112795,7 @@ class AutoColumnSize extends _base.BasePlugin {
112388
112795
  if (firstVisibleColumn === -1 || lastVisibleColumn === -1) {
112389
112796
  return;
112390
112797
  }
112391
- const overwriteCache = this.hot.renderCall;
112798
+ const overwriteCache = this.hot.forceFullRender;
112392
112799
  this.calculateColumnsWidth({
112393
112800
  from: firstVisibleColumn,
112394
112801
  to: lastVisibleColumn
@@ -113195,6 +113602,9 @@ class GhostTable {
113195
113602
  this.table = this.createTable(this.hot.table.className);
113196
113603
  this.table.colGroup.appendChild(this.createColGroupsCol(row));
113197
113604
  this.table.tr.appendChild(this.createRow(row));
113605
+ if (row === 0) {
113606
+ (0, _element.addClass)(this.table.table, 'htGhostTableFirstRow');
113607
+ }
113198
113608
  this.container.container.appendChild(this.table.fragment);
113199
113609
  rowObject.table = this.table.table;
113200
113610
  }
@@ -114588,6 +114998,51 @@ const ROW_WIDTHS_MAP_NAME = 'autoRowSize';
114588
114998
  * }
114589
114999
  * ```
114590
115000
  * :::
115001
+ *
115002
+ * ::: only-for angular
115003
+ * ```ts
115004
+ * import { AfterViewInit, Component, ViewChild } from "@angular/core";
115005
+ * import {
115006
+ * GridSettings,
115007
+ * HotTableModule,
115008
+ * HotTableComponent,
115009
+ * } from "@handsontable/angular-wrapper";
115010
+ *
115011
+ * `@Component`({
115012
+ * selector: "app-example",
115013
+ * standalone: true,
115014
+ * imports: [HotTableModule],
115015
+ * template: ` <div class="ht-theme-main">
115016
+ * <hot-table [settings]="gridSettings" />
115017
+ * </div>`,
115018
+ * })
115019
+ * export class ExampleComponent implements AfterViewInit {
115020
+ * `@ViewChild`(HotTableComponent, { static: false })
115021
+ * readonly hotTable!: HotTableComponent;
115022
+ *
115023
+ * readonly gridSettings = <GridSettings>{
115024
+ * data: this.getData(),
115025
+ * autoRowSize: true,
115026
+ * };
115027
+ *
115028
+ * ngAfterViewInit(): void {
115029
+ * // Access to plugin instance:
115030
+ * const hot = this.hotTable.hotInstance;
115031
+ * const plugin = hot.getPlugin("autoRowSize");
115032
+ *
115033
+ * plugin.getRowHeight(4);
115034
+ *
115035
+ * if (plugin.isEnabled()) {
115036
+ * // code...
115037
+ * }
115038
+ * }
115039
+ *
115040
+ * private getData(): any[] {
115041
+ * // get some data
115042
+ * }
115043
+ * }
115044
+ * ```
115045
+ * :::
114591
115046
  */
114592
115047
  /* eslint-enable jsdoc/require-description-complete-sentence */
114593
115048
  var _visualRowsToRefresh = /*#__PURE__*/new WeakMap();
@@ -114782,7 +115237,7 @@ class AutoRowSize extends _base.BasePlugin {
114782
115237
  if (firstVisibleRow === -1 || lastVisibleRow === -1) {
114783
115238
  return;
114784
115239
  }
114785
- const overwriteCache = this.hot.renderCall;
115240
+ const overwriteCache = this.hot.forceFullRender;
114786
115241
  this.calculateRowsHeight({
114787
115242
  from: firstVisibleRow,
114788
115243
  to: lastVisibleRow
@@ -114883,11 +115338,6 @@ class AutoRowSize extends _base.BasePlugin {
114883
115338
 
114884
115339
  // @TODO Should call once per render cycle, currently fired separately in different plugins
114885
115340
  this.hot.view.adjustElementsSize();
114886
-
114887
- // tmp
114888
- if (this.hot.view._wt.wtOverlays.inlineStartOverlay.needFullRender) {
114889
- this.hot.view._wt.wtOverlays.inlineStartOverlay.clone.draw();
114890
- }
114891
115341
  }
114892
115342
  };
114893
115343
  const syncLimit = this.getSyncCalculationLimit();
@@ -115221,6 +115671,19 @@ const bindTypeToMapStrategy = new Map([['loose', _looseBindsMap.default], ['stri
115221
115671
  * />
115222
115672
  * ```
115223
115673
  * :::
115674
+ *
115675
+ * ::: only-for angular
115676
+ * ```ts
115677
+ * settings = {
115678
+ * data: getData(),
115679
+ * bindRowsWithHeaders: true,
115680
+ * };
115681
+ * ```
115682
+ *
115683
+ * ```html
115684
+ * <hot-table [settings]="settings" />
115685
+ * ```
115686
+ * :::
115224
115687
  */
115225
115688
  var _BindRowsWithHeaders_brand = /*#__PURE__*/new WeakSet();
115226
115689
  class BindRowsWithHeaders extends _base.BasePlugin {
@@ -115520,6 +115983,37 @@ const actionDictionary = new Map([['collapse', {
115520
115983
  * />
115521
115984
  * ```
115522
115985
  * :::
115986
+ *
115987
+ * ::: only-for angular
115988
+ * ```ts
115989
+ * // Enable the collapsibleColumns plugin
115990
+ * settings = {
115991
+ * data: generateDataObj(),
115992
+ * colHeaders: true,
115993
+ * rowHeaders: true,
115994
+ * nestedHeaders: true,
115995
+ * // enable plugin
115996
+ * collapsibleColumns: true,
115997
+ * };
115998
+ *
115999
+ * // Or enable and configure specific collapsible columns
116000
+ * settings = {
116001
+ * data: generateDataObj(),
116002
+ * colHeaders: true,
116003
+ * rowHeaders: true,
116004
+ * nestedHeaders: true,
116005
+ * // enable and configure which columns can be collapsed
116006
+ * collapsibleColumns: [
116007
+ * { row: -4, col: 1, collapsible: true },
116008
+ * { row: -3, col: 5, collapsible: true },
116009
+ * ],
116010
+ * };
116011
+ * ```
116012
+ *
116013
+ * ```html
116014
+ * <hot-table [settings]="settings"></hot-table>
116015
+ * ```
116016
+ * :::
115523
116017
  */
115524
116018
  var _collapsedColumnsMap = /*#__PURE__*/new WeakMap();
115525
116019
  var _CollapsibleColumns_brand = /*#__PURE__*/new WeakSet();
@@ -116338,10 +116832,6 @@ class ColumnSorting extends _base.BasePlugin {
116338
116832
  this.hot.runHooks('afterColumnSort', currentSortConfig, sortPossible ? destinationSortConfigs : currentSortConfig, sortPossible);
116339
116833
  if (sortPossible) {
116340
116834
  this.hot.render();
116341
- // TODO: Workaround? This triggers fast redraw. One test won't pass after removal.
116342
- // It should be refactored / described.
116343
- this.hot.forceFullRender = false;
116344
- this.hot.view.render();
116345
116835
  }
116346
116836
  }
116347
116837
 
@@ -117806,6 +118296,39 @@ const PLUGIN_PRIORITY = exports.PLUGIN_PRIORITY = 220;
117806
118296
  * />
117807
118297
  * ```
117808
118298
  * :::
118299
+ *
118300
+ * ::: only-for angular
118301
+ * ```ts
118302
+ * settings = {
118303
+ * data: getData(),
118304
+ * colHeaders: true,
118305
+ * rowHeaders: true,
118306
+ * columnSummary: [
118307
+ * {
118308
+ * type: "min",
118309
+ * destinationRow: 4,
118310
+ * destinationColumn: 1,
118311
+ * },
118312
+ * {
118313
+ * type: "max",
118314
+ * destinationRow: 0,
118315
+ * destinationColumn: 3,
118316
+ * reversedRowCoords: true,
118317
+ * },
118318
+ * {
118319
+ * type: "sum",
118320
+ * destinationRow: 4,
118321
+ * destinationColumn: 5,
118322
+ * forceNumeric: true,
118323
+ * },
118324
+ * ],
118325
+ * };
118326
+ * ```
118327
+ *
118328
+ * ```html
118329
+ * <hot-table [settings]="settings"></hot-table>
118330
+ * ```
118331
+ * :::
117809
118332
  */
117810
118333
  var _ColumnSummary_brand = /*#__PURE__*/new WeakSet();
117811
118334
  class ColumnSummary extends _base.BasePlugin {
@@ -118895,6 +119418,59 @@ const SHORTCUTS_CONTEXT_NAME = `plugin:${PLUGIN_KEY}`;
118895
119418
  * commentsPlugin.removeComment();
118896
119419
  * ```
118897
119420
  * :::
119421
+ *
119422
+ * ::: only-for angular
119423
+ * ```ts
119424
+ * import { AfterViewInit, Component, ViewChild } from "@angular/core";
119425
+ * import {
119426
+ * GridSettings,
119427
+ * HotTableModule,
119428
+ * HotTableComponent,
119429
+ * } from "@handsontable/angular-wrapper";
119430
+ *
119431
+ * `@Component`({
119432
+ * selector: "app-example",
119433
+ * standalone: true,
119434
+ * imports: [HotTableModule],
119435
+ * template: ` <div class="ht-theme-main">
119436
+ * <hot-table [settings]="gridSettings" />
119437
+ * </div>`,
119438
+ * })
119439
+ * export class ExampleComponent implements AfterViewInit {
119440
+ * `@ViewChild`(HotTableComponent, { static: false })
119441
+ * readonly hotTable!: HotTableComponent;
119442
+ *
119443
+ * readonly gridSettings = <GridSettings>{
119444
+ * data: this.getData(),
119445
+ * comments: true,
119446
+ * cell: [
119447
+ * { row: 1, col: 1, comment: { value: "Foo" } },
119448
+ * { row: 2, col: 2, comment: { value: "Bar" } },
119449
+ * ],
119450
+ * };
119451
+ *
119452
+ * ngAfterViewInit(): void {
119453
+ * // Access to plugin instance:
119454
+ * const hot = this.hotTable.hotInstance;
119455
+ * const commentsPlugin = hot.getPlugin("comments");
119456
+ *
119457
+ * // Manage comments programmatically:
119458
+ * commentsPlugin.setCommentAtCell(1, 6, "Comment contents");
119459
+ * commentsPlugin.showAtCell(1, 6);
119460
+ * commentsPlugin.removeCommentAtCell(1, 6);
119461
+ *
119462
+ * // You can also set range once and use proper methods:
119463
+ * commentsPlugin.setRange({ from: { row: 1, col: 6 } });
119464
+ * commentsPlugin.setComment("Comment contents");
119465
+ * commentsPlugin.show();
119466
+ * }
119467
+ *
119468
+ * private getData(): any[] {
119469
+ * // get some data
119470
+ * }
119471
+ * }
119472
+ * ```
119473
+ * :::
118898
119474
  */
118899
119475
  var _editor = /*#__PURE__*/new WeakMap();
118900
119476
  var _displaySwitch = /*#__PURE__*/new WeakMap();
@@ -119008,6 +119584,7 @@ class Comments extends _base.BasePlugin {
119008
119584
  this.addHook('afterScroll', () => _assertClassBrand(_Comments_brand, this, _onAfterScroll).call(this));
119009
119585
  this.addHook('afterBeginEditing', () => this.hide());
119010
119586
  this.addHook('afterDocumentKeyDown', event => _assertClassBrand(_Comments_brand, this, _onAfterDocumentKeyDown).call(this, event));
119587
+ this.addHook('beforeCompositionStart', event => _assertClassBrand(_Comments_brand, this, _onAfterDocumentKeyDown).call(this, event));
119011
119588
  this.addHook('afterSetTheme', function () {
119012
119589
  for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
119013
119590
  args[_key2] = arguments[_key2];
@@ -122142,6 +122719,7 @@ class Menu {
122142
122719
  layoutDirection: this.hot.isRtl() ? 'rtl' : 'ltr',
122143
122720
  ariaTags: false,
122144
122721
  themeName: this.hot.getCurrentThemeName(),
122722
+ beforeRefreshDimensions: () => false,
122145
122723
  beforeOnCellMouseOver: (event, coords) => {
122146
122724
  _classPrivateFieldGet(_navigator, this).setCurrentPage(coords.row);
122147
122725
  },
@@ -122685,7 +123263,11 @@ class Positioner {
122685
123263
  setPositionAboveCursor() {
122686
123264
  let top = _classPrivateFieldGet(_offset, this).above + _classPrivateFieldGet(_cursor, this).top - _classPrivateFieldGet(_container, this).offsetHeight;
122687
123265
  if (_classPrivateFieldGet(_parentContainer, this)) {
122688
- top = _classPrivateFieldGet(_cursor, this).top + _classPrivateFieldGet(_cursor, this).cellHeight - _classPrivateFieldGet(_container, this).offsetHeight + 3;
123266
+ const rootWindow = _classPrivateFieldGet(_parentContainer, this).ownerDocument.defaultView;
123267
+ const style = rootWindow.getComputedStyle(_classPrivateFieldGet(_parentContainer, this).querySelector('.ht_master'));
123268
+ const paddingTop = Number.parseInt(style.paddingTop, 10);
123269
+ const borderTop = Number.parseInt(style.borderTop, 10);
123270
+ top = _classPrivateFieldGet(_cursor, this).top + _classPrivateFieldGet(_cursor, this).cellHeight - _classPrivateFieldGet(_container, this).scrollHeight + paddingTop + borderTop;
122689
123271
  }
122690
123272
  _classPrivateFieldGet(_container, this).style.top = `${top}px`;
122691
123273
  }
@@ -122696,7 +123278,11 @@ class Positioner {
122696
123278
  setPositionBelowCursor() {
122697
123279
  let top = _classPrivateFieldGet(_offset, this).below + _classPrivateFieldGet(_cursor, this).top + 1;
122698
123280
  if (_classPrivateFieldGet(_parentContainer, this)) {
122699
- top = _classPrivateFieldGet(_cursor, this).top - 1;
123281
+ const rootWindow = _classPrivateFieldGet(_parentContainer, this).ownerDocument.defaultView;
123282
+ const style = rootWindow.getComputedStyle(_classPrivateFieldGet(_parentContainer, this).querySelector('.ht_master'));
123283
+ const paddingTop = Number.parseInt(style.paddingTop, 10);
123284
+ const borderTop = Number.parseInt(style.borderTop, 10);
123285
+ top = _classPrivateFieldGet(_cursor, this).top - paddingTop - borderTop - 1;
122700
123286
  }
122701
123287
  _classPrivateFieldGet(_container, this).style.top = `${top}px`;
122702
123288
  }
@@ -123437,7 +124023,7 @@ function createDefaultShortcutsList(menu) {
123437
124023
  keys: [['ArrowUp']],
123438
124024
  callback: () => menu.getNavigator().toPreviousItem()
123439
124025
  }, {
123440
- keys: [['ArrowRight']],
124026
+ keys: [[hot.isRtl() ? 'ArrowLeft' : 'ArrowRight']],
123441
124027
  callback: () => {
123442
124028
  const selection = hotMenu.getSelectedLast();
123443
124029
  if (selection) {
@@ -123448,7 +124034,7 @@ function createDefaultShortcutsList(menu) {
123448
124034
  }
123449
124035
  }
123450
124036
  }, {
123451
- keys: [['ArrowLeft']],
124037
+ keys: [[hot.isRtl() ? 'ArrowRight' : 'ArrowLeft']],
123452
124038
  callback: () => {
123453
124039
  const selection = hotMenu.getSelectedLast();
123454
124040
  if (selection && menu.isSubMenu()) {
@@ -123838,6 +124424,9 @@ class CopyPaste extends _base.BasePlugin {
123838
124424
  return _assertClassBrand(_CopyPaste_brand, _this, _onAfterSelection).call(_this, ...args);
123839
124425
  });
123840
124426
  this.addHook('afterSelectionEnd', () => _assertClassBrand(_CopyPaste_brand, this, _onAfterSelectionEnd).call(this));
124427
+
124428
+ // Events are attached to the document, not the root table element - as it should,
124429
+ // for Chrome 133 and lower to copy/paste/cut work properly (#dev-2277).
123841
124430
  this.eventManager.addEventListener(this.hot.rootDocument, 'copy', function () {
123842
124431
  return _this.onCopy(...arguments);
123843
124432
  });
@@ -124144,12 +124733,10 @@ class CopyPaste extends _base.BasePlugin {
124144
124733
  * @private
124145
124734
  */
124146
124735
  onCopy(event) {
124147
- var _event$target, _this$hot$getSelected;
124736
+ const eventTarget = event.composedPath()[0];
124148
124737
  const focusedElement = this.hot.getFocusManager().getRefocusElement();
124149
- const isHotInput = (_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.hasAttribute('data-hot-input');
124150
- const selectedCell = (_this$hot$getSelected = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected === void 0 ? void 0 : _this$hot$getSelected.highlight;
124151
- const TD = selectedCell ? this.hot.getCell(selectedCell.row, selectedCell.col, true) : null;
124152
- if (!this.hot.isListening() && !_classPrivateFieldGet(_isTriggeredByCopy, this) || this.isEditorOpened() || (0, _element.isHTMLElement)(event.target) && (isHotInput && event.target !== focusedElement || !isHotInput && event.target !== this.hot.rootDocument.body && TD !== event.target)) {
124738
+ const isHotInput = eventTarget === null || eventTarget === void 0 ? void 0 : eventTarget.hasAttribute('data-hot-input');
124739
+ if (!this.hot.isListening() && !_classPrivateFieldGet(_isTriggeredByCopy, this) || this.isEditorOpened() || (0, _element.isHTMLElement)(eventTarget) && (isHotInput && eventTarget !== focusedElement || !isHotInput && eventTarget !== this.hot.rootDocument.body && !(0, _element.isInternalElement)(eventTarget, this.hot.rootElement))) {
124153
124740
  return;
124154
124741
  }
124155
124742
  event.preventDefault();
@@ -124179,12 +124766,10 @@ class CopyPaste extends _base.BasePlugin {
124179
124766
  * @private
124180
124767
  */
124181
124768
  onCut(event) {
124182
- var _event$target2, _this$hot$getSelected2;
124769
+ const eventTarget = event.composedPath()[0];
124183
124770
  const focusedElement = this.hot.getFocusManager().getRefocusElement();
124184
- const isHotInput = (_event$target2 = event.target) === null || _event$target2 === void 0 ? void 0 : _event$target2.hasAttribute('data-hot-input');
124185
- const selectedCell = (_this$hot$getSelected2 = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected2 === void 0 ? void 0 : _this$hot$getSelected2.highlight;
124186
- const TD = selectedCell ? this.hot.getCell(selectedCell.row, selectedCell.col, true) : null;
124187
- if (!this.hot.isListening() && !_classPrivateFieldGet(_isTriggeredByCut, this) || this.isEditorOpened() || (0, _element.isHTMLElement)(event.target) && (isHotInput && event.target !== focusedElement || !isHotInput && event.target !== this.hot.rootDocument.body && TD !== event.target)) {
124771
+ const isHotInput = eventTarget === null || eventTarget === void 0 ? void 0 : eventTarget.hasAttribute('data-hot-input');
124772
+ if (!this.hot.isListening() && !_classPrivateFieldGet(_isTriggeredByCut, this) || this.isEditorOpened() || (0, _element.isHTMLElement)(eventTarget) && (isHotInput && eventTarget !== focusedElement || !isHotInput && eventTarget !== this.hot.rootDocument.body && !(0, _element.isInternalElement)(eventTarget, this.hot.rootElement))) {
124188
124773
  return;
124189
124774
  }
124190
124775
  event.preventDefault();
@@ -124213,12 +124798,10 @@ class CopyPaste extends _base.BasePlugin {
124213
124798
  * @private
124214
124799
  */
124215
124800
  onPaste(event) {
124216
- var _event$target3, _this$hot$getSelected3;
124801
+ const eventTarget = event.composedPath()[0];
124217
124802
  const focusedElement = this.hot.getFocusManager().getRefocusElement();
124218
- const isHotInput = (_event$target3 = event.target) === null || _event$target3 === void 0 ? void 0 : _event$target3.hasAttribute('data-hot-input');
124219
- const selectedCell = (_this$hot$getSelected3 = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected3 === void 0 ? void 0 : _this$hot$getSelected3.highlight;
124220
- const TD = selectedCell ? this.hot.getCell(selectedCell.row, selectedCell.col, true) : null;
124221
- if (!this.hot.isListening() || this.isEditorOpened() || !this.hot.getSelected() || (0, _element.isHTMLElement)(event.target) && (isHotInput && event.target !== focusedElement || !isHotInput && event.target !== this.hot.rootDocument.body && TD !== event.target)) {
124803
+ const isHotInput = eventTarget === null || eventTarget === void 0 ? void 0 : eventTarget.hasAttribute('data-hot-input');
124804
+ if (!this.hot.isListening() || this.isEditorOpened() || !this.hot.getSelected() || (0, _element.isHTMLElement)(eventTarget) && (isHotInput && eventTarget !== focusedElement || !isHotInput && eventTarget !== this.hot.rootDocument.body && !(0, _element.isInternalElement)(eventTarget, this.hot.rootElement))) {
124222
124805
  return;
124223
124806
  }
124224
124807
  event.preventDefault();
@@ -124665,6 +125248,9 @@ class PasteEvent {
124665
125248
  this.clipboardData = new _clipboardData.default();
124666
125249
  }
124667
125250
  preventDefault() {}
125251
+ composedPath() {
125252
+ return [];
125253
+ }
124668
125254
  }
124669
125255
  exports["default"] = PasteEvent;
124670
125256
 
@@ -126507,6 +127093,21 @@ const SHORTCUTS_GROUP = PLUGIN_KEY;
126507
127093
  * />
126508
127094
  * ```
126509
127095
  * :::
127096
+ *
127097
+ * ::: only-for angular
127098
+ * ```ts
127099
+ * settings = {
127100
+ * data: data,
127101
+ * comments: true,
127102
+ * // enable and configure dropdown menu
127103
+ * dropdownMenu: ["remove_col", "---------", "make_read_only", "alignment"],
127104
+ * };
127105
+ * ```
127106
+ *
127107
+ * ```html
127108
+ * <hot-table [settings]="settings"></hot-table>
127109
+ * ```
127110
+ * :::
126510
127111
  */
126511
127112
  var _isButtonClicked = /*#__PURE__*/new WeakMap();
126512
127113
  var _DropdownMenu_brand = /*#__PURE__*/new WeakSet();
@@ -127087,6 +127688,64 @@ const PLUGIN_PRIORITY = exports.PLUGIN_PRIORITY = 240;
127087
127688
  * });
127088
127689
  * ```
127089
127690
  * :::
127691
+ *
127692
+ * ::: only-for angular
127693
+ * ```ts
127694
+ * import { AfterViewInit, Component, ViewChild } from "@angular/core";
127695
+ * import {
127696
+ * GridSettings,
127697
+ * HotTableModule,
127698
+ * HotTableComponent,
127699
+ * } from "@handsontable/angular-wrapper";
127700
+ *
127701
+ * `@Component`({
127702
+ * selector: "app-example",
127703
+ * standalone: true,
127704
+ * imports: [HotTableModule],
127705
+ * template: ` <div class="ht-theme-main">
127706
+ * <hot-table [settings]="gridSettings" />
127707
+ * </div>`,
127708
+ * })
127709
+ * export class ExampleComponent implements AfterViewInit {
127710
+ * `@ViewChild`(HotTableComponent, { static: false })
127711
+ * readonly hotTable!: HotTableComponent;
127712
+ *
127713
+ * readonly gridSettings = <GridSettings>{
127714
+ * data: this.getData(),
127715
+ * };
127716
+ *
127717
+ * ngAfterViewInit(): void {
127718
+ * // Access to plugin instance:
127719
+ * const hot = this.hotTable.hotInstance;
127720
+ * // Access to exportFile plugin instance
127721
+ * const exportPlugin = hot.getPlugin("exportFile");
127722
+ *
127723
+ * // Export as a string
127724
+ * exportPlugin.exportAsString("csv");
127725
+ *
127726
+ * // Export as a blob object
127727
+ * exportPlugin.exportAsBlob("csv");
127728
+ *
127729
+ * // Export to downloadable file (named: MyFile.csv)
127730
+ * exportPlugin.downloadFile("csv", { filename: "MyFile" });
127731
+ *
127732
+ * // Export as a string (with specified data range):
127733
+ * exportPlugin.exportAsString("csv", {
127734
+ * exportHiddenRows: true, // default false
127735
+ * exportHiddenColumns: true, // default false
127736
+ * columnHeaders: true, // default false
127737
+ * rowHeaders: true, // default false
127738
+ * columnDelimiter: ";", // default ','
127739
+ * range: [1, 1, 6, 6], // [startRow, endRow, startColumn, endColumn]
127740
+ * });
127741
+ * }
127742
+ *
127743
+ * private getData(): any[] {
127744
+ * // get some data
127745
+ * }
127746
+ * }
127747
+ * ```
127748
+ * :::
127090
127749
  */
127091
127750
  class ExportFile extends _base.BasePlugin {
127092
127751
  static get PLUGIN_KEY() {
@@ -127668,6 +128327,22 @@ const SHORTCUTS_GROUP = PLUGIN_KEY;
127668
128327
  * />
127669
128328
  * ```
127670
128329
  * :::
128330
+ *
128331
+ * ::: only-for angular
128332
+ * ```ts
128333
+ * settings = {
128334
+ * data: getData(),
128335
+ * colHeaders: true,
128336
+ * rowHeaders: true,
128337
+ * dropdownMenu: true,
128338
+ * filters: true,
128339
+ * };
128340
+ * ```
128341
+ *
128342
+ * ```html
128343
+ * <hot-table [settings]="settings"></hot-table>
128344
+ * ```
128345
+ * :::
127671
128346
  */
127672
128347
  var _menuFocusNavigator = /*#__PURE__*/new WeakMap();
127673
128348
  var _dropdownMenuTraces = /*#__PURE__*/new WeakMap();
@@ -128050,6 +128725,64 @@ class Filters extends _base.BasePlugin {
128050
128725
  * ```
128051
128726
  * :::
128052
128727
  *
128728
+ * ::: only-for angular
128729
+ * ```ts
128730
+ * import { AfterViewInit, Component, ViewChild } from "@angular/core";
128731
+ * import {
128732
+ * GridSettings,
128733
+ * HotTableModule,
128734
+ * HotTableComponent,
128735
+ * } from "@handsontable/angular-wrapper";
128736
+ *
128737
+ * `@Component`({
128738
+ * selector: "app-example",
128739
+ * standalone: true,
128740
+ * imports: [HotTableModule],
128741
+ * template: ` <div class="ht-theme-main">
128742
+ * <hot-table [settings]="gridSettings" />
128743
+ * </div>`,
128744
+ * })
128745
+ * export class ExampleComponent implements AfterViewInit {
128746
+ * `@ViewChild`(HotTableComponent, { static: false })
128747
+ * readonly hotTable!: HotTableComponent;
128748
+ *
128749
+ * readonly gridSettings = <GridSettings>{
128750
+ * data: this.getData(),
128751
+ * filters: true,
128752
+ * };
128753
+ *
128754
+ * ngAfterViewInit(): void {
128755
+ * // Access to filters plugin instance
128756
+ * const hot = this.hotTable.hotInstance;
128757
+ * const filtersPlugin = hot.getPlugin("filters");
128758
+ *
128759
+ * // Add filter "Greater than" 95 to column at index 1
128760
+ * filtersPlugin.addCondition(1, "gt", [95]);
128761
+ * filtersPlugin.filter();
128762
+ *
128763
+ * // Add filter "By value" to column at index 1
128764
+ * // In this case, all values that don't match will be filtered.
128765
+ * filtersPlugin.addCondition(1, "by_value", [["ing", "ed", "as", "on"]]);
128766
+ * filtersPlugin.filter();
128767
+ *
128768
+ * // Add filter "Begins with" with value "de" AND "Not contains" with value "ing"
128769
+ * filtersPlugin.addCondition(1, "begins_with", ["de"], "conjunction");
128770
+ * filtersPlugin.addCondition(1, "not_contains", ["ing"], "conjunction");
128771
+ * filtersPlugin.filter();
128772
+ *
128773
+ * // Add filter "Begins with" with value "de" OR "Not contains" with value "ing"
128774
+ * filtersPlugin.addCondition(1, "begins_with", ["de"], "disjunction");
128775
+ * filtersPlugin.addCondition(1, "not_contains", ["ing"], "disjunction");
128776
+ * filtersPlugin.filter();
128777
+ * }
128778
+ *
128779
+ * private getData(): any[] {
128780
+ * // Get some data
128781
+ * }
128782
+ * }
128783
+ * ```
128784
+ * :::
128785
+ *
128053
128786
  * @param {number} column Visual column index.
128054
128787
  * @param {string} name Condition short name.
128055
128788
  * @param {Array} args Condition arguments.
@@ -128132,10 +128865,10 @@ class Filters extends _base.BasePlugin {
128132
128865
  *
128133
128866
  * @returns {Array}
128134
128867
  */
128135
- /* eslint-enable jsdoc/require-description-complete-sentence */
128136
128868
  exportConditions() {
128137
128869
  return this.conditionCollection.exportAllConditions();
128138
128870
  }
128871
+ /* eslint-enable jsdoc/require-description-complete-sentence */
128139
128872
 
128140
128873
  /**
128141
128874
  * Filters data based on added filter conditions.
@@ -128152,38 +128885,39 @@ class Filters extends _base.BasePlugin {
128152
128885
  let visibleVisualRows = [];
128153
128886
  const conditions = this.exportConditions();
128154
128887
  const allowFiltering = this.hot.runHooks('beforeFilter', conditions, _classPrivateFieldGet(_previousConditionStack, this));
128155
- if (allowFiltering !== false) {
128156
- if (needToFilter) {
128157
- const trimmedRows = [];
128158
- this.hot.batchExecution(() => {
128159
- this.filtersRowsMap.clear();
128160
- visibleVisualRows = (0, _array.arrayMap)(dataFilter.filter(), rowData => rowData.meta.visualRow);
128161
- const visibleVisualRowsAssertion = (0, _utils.createArrayAssertion)(visibleVisualRows);
128162
- (0, _number.rangeEach)(this.hot.countSourceRows() - 1, row => {
128163
- if (!visibleVisualRowsAssertion(row)) {
128164
- trimmedRows.push(row);
128165
- }
128166
- });
128167
- (0, _array.arrayEach)(trimmedRows, physicalRow => {
128168
- this.filtersRowsMap.setValueAtIndex(physicalRow, true);
128169
- });
128170
- }, true);
128171
- if (!navigableHeaders && !visibleVisualRows.length) {
128172
- this.hot.deselectCell();
128173
- }
128174
- } else {
128888
+ if (allowFiltering !== false && needToFilter) {
128889
+ const trimmedRows = [];
128890
+ this.hot.batchExecution(() => {
128175
128891
  this.filtersRowsMap.clear();
128892
+ visibleVisualRows = (0, _array.arrayMap)(dataFilter.filter(), rowData => rowData.meta.visualRow);
128893
+ const visibleVisualRowsAssertion = (0, _utils.createArrayAssertion)(visibleVisualRows);
128894
+ (0, _number.rangeEach)(this.hot.countSourceRows() - 1, row => {
128895
+ if (!visibleVisualRowsAssertion(row)) {
128896
+ trimmedRows.push(row);
128897
+ }
128898
+ });
128899
+ (0, _array.arrayEach)(trimmedRows, physicalRow => {
128900
+ this.filtersRowsMap.setValueAtIndex(physicalRow, true);
128901
+ });
128902
+ }, true);
128903
+ if (!navigableHeaders && !visibleVisualRows.length) {
128904
+ this.hot.deselectCell();
128176
128905
  }
128177
128906
  _classPrivateFieldSet(_previousConditionStack, this, this.exportConditions());
128178
- this.hot.runHooks('afterFilter', conditions);
128179
- this.hot.view.adjustElementsSize();
128180
- this.hot.render();
128907
+ } else if (allowFiltering !== false && !needToFilter) {
128908
+ _classPrivateFieldSet(_previousConditionStack, this, this.exportConditions());
128909
+ this.filtersRowsMap.clear();
128181
128910
  } else {
128182
128911
  this.importConditions(_classPrivateFieldGet(_previousConditionStack, this));
128183
128912
  }
128184
128913
  if (this.hot.selection.isSelected()) {
128185
128914
  this.hot.selectCell(navigableHeaders ? -1 : 0, this.hot.getSelectedRangeLast().highlight.col);
128186
128915
  }
128916
+ if (allowFiltering !== false) {
128917
+ this.hot.runHooks('afterFilter', conditions);
128918
+ this.hot.view.adjustElementsSize();
128919
+ this.hot.render();
128920
+ }
128187
128921
  }
128188
128922
 
128189
128923
  /**
@@ -131610,7 +132344,13 @@ class MultipleSelectUI extends _base.BaseUI {
131610
132344
  beforeOnCellMouseUp: () => {
131611
132345
  _classPrivateFieldGet(_itemsBox, this).listen();
131612
132346
  },
131613
- colWidths: () => _classPrivateFieldGet(_itemsBox, this).container.scrollWidth - (0, _element.getScrollbarWidth)(rootDocument),
132347
+ modifyColWidth: width => {
132348
+ const minWidth = _classPrivateFieldGet(_itemsBox, this).container.scrollWidth - (0, _element.getScrollbarWidth)(rootDocument);
132349
+ if (width !== undefined && width < minWidth) {
132350
+ return minWidth;
132351
+ }
132352
+ return width;
132353
+ },
131614
132354
  maxCols: 1,
131615
132355
  autoWrapCol: true,
131616
132356
  height: 110,
@@ -135233,6 +135973,70 @@ const PLUGIN_PRIORITY = exports.PLUGIN_PRIORITY = 310;
135233
135973
  * hot.render();
135234
135974
  * ```
135235
135975
  * :::
135976
+ *
135977
+ * ::: only-for angular
135978
+ * ```ts
135979
+ * import { AfterViewInit, Component, ViewChild } from "@angular/core";
135980
+ * import {
135981
+ * GridSettings,
135982
+ * HotTableModule,
135983
+ * HotTableComponent,
135984
+ * } from "@handsontable/angular-wrapper";
135985
+ *
135986
+ * `@Component`({
135987
+ * selector: "app-example",
135988
+ * standalone: true,
135989
+ * imports: [HotTableModule],
135990
+ * template: ` <div class="ht-theme-main">
135991
+ * <hot-table [settings]="gridSettings" />
135992
+ * </div>`,
135993
+ * })
135994
+ * export class ExampleComponent implements AfterViewInit {
135995
+ * `@ViewChild`(HotTableComponent, { static: false })
135996
+ * readonly hotTable!: HotTableComponent;
135997
+ *
135998
+ * readonly gridSettings = <GridSettings>{
135999
+ * data: this.getData(),
136000
+ * hiddenColumns: {
136001
+ * copyPasteEnabled: true,
136002
+ * indicators: true,
136003
+ * columns: [1, 2, 5],
136004
+ * },
136005
+ * };
136006
+ *
136007
+ * ngAfterViewInit(): void {
136008
+ * // Access the `HiddenColumns` plugin's instance
136009
+ * const hot = this.hotTable.hotInstance;
136010
+ * const hiddenColumnsPlugin = hot.getPlugin("hiddenColumns");
136011
+ *
136012
+ * // Hide a single column
136013
+ * hiddenColumnsPlugin.hideColumn(1);
136014
+ *
136015
+ * // Hide multiple columns
136016
+ * hiddenColumnsPlugin.hideColumn(1, 2, 9);
136017
+ *
136018
+ * // Hide multiple columns as an array
136019
+ * hiddenColumnsPlugin.hideColumns([1, 2, 9]);
136020
+ *
136021
+ * // Unhide a single column
136022
+ * hiddenColumnsPlugin.showColumn(1);
136023
+ *
136024
+ * // Unhide multiple columns
136025
+ * hiddenColumnsPlugin.showColumn(1, 2, 9);
136026
+ *
136027
+ * // Unhide multiple columns as an array
136028
+ * hiddenColumnsPlugin.showColumns([1, 2, 9]);
136029
+ *
136030
+ * // To see your changes, re-render your Handsontable instance
136031
+ * hot.render();
136032
+ * }
136033
+ *
136034
+ * private getData(): any[] {
136035
+ * // Get some data
136036
+ * }
136037
+ * }
136038
+ * ```
136039
+ * :::
135236
136040
  */
135237
136041
  var _hiddenColumnsMap = /*#__PURE__*/new WeakMap();
135238
136042
  var _HiddenColumns_brand = /*#__PURE__*/new WeakSet();
@@ -135323,8 +136127,8 @@ class HiddenColumns extends _base.BasePlugin {
135323
136127
  * Disables the plugin functionality for this Handsontable instance.
135324
136128
  */
135325
136129
  disablePlugin() {
135326
- this.hot.columnIndexMapper.unregisterMap(this.pluginName);
135327
136130
  super.disablePlugin();
136131
+ this.hot.columnIndexMapper.unregisterMap(this.pluginName);
135328
136132
  this.resetCellsMeta();
135329
136133
  }
135330
136134
 
@@ -135922,6 +136726,70 @@ const PLUGIN_PRIORITY = exports.PLUGIN_PRIORITY = 320;
135922
136726
  * hot.render();
135923
136727
  * ```
135924
136728
  * :::
136729
+ *
136730
+ * ::: only-for angular
136731
+ * ```ts
136732
+ * import { AfterViewInit, Component, ViewChild } from "@angular/core";
136733
+ * import {
136734
+ * GridSettings,
136735
+ * HotTableModule,
136736
+ * HotTableComponent,
136737
+ * } from "@handsontable/angular-wrapper";
136738
+ *
136739
+ * `@Component`({
136740
+ * selector: "app-example",
136741
+ * standalone: true,
136742
+ * imports: [HotTableModule],
136743
+ * template: ` <div class="ht-theme-main">
136744
+ * <hot-table [settings]="gridSettings" />
136745
+ * </div>`,
136746
+ * })
136747
+ * export class ExampleComponent implements AfterViewInit {
136748
+ * `@ViewChild`(HotTableComponent, { static: false })
136749
+ * readonly hotTable!: HotTableComponent;
136750
+ *
136751
+ * readonly gridSettings = <GridSettings>{
136752
+ * data: this.getData(),
136753
+ * hiddenRows: {
136754
+ * copyPasteEnabled: true,
136755
+ * indicators: true,
136756
+ * rows: [1, 2, 5],
136757
+ * },
136758
+ * };
136759
+ *
136760
+ * ngAfterViewInit(): void {
136761
+ * // Access the `HiddenRows` plugin's instance
136762
+ * const hot = this.hotTable.hotInstance;
136763
+ * const hiddenRowsPlugin = hot.getPlugin("hiddenRows");
136764
+ *
136765
+ * // Hide a single row
136766
+ * hiddenRowsPlugin.hideRow(1);
136767
+ *
136768
+ * // Hide multiple rows
136769
+ * hiddenRowsPlugin.hideRow(1, 2, 9);
136770
+ *
136771
+ * // Hide multiple rows as an array
136772
+ * hiddenRowsPlugin.hideRows([1, 2, 9]);
136773
+ *
136774
+ * // Unhide a single row
136775
+ * hiddenRowsPlugin.showRow(1);
136776
+ *
136777
+ * // Unhide multiple rows
136778
+ * hiddenRowsPlugin.showRow(1, 2, 9);
136779
+ *
136780
+ * // Unhide multiple rows as an array
136781
+ * hiddenRowsPlugin.showRows([1, 2, 9]);
136782
+ *
136783
+ * // To see your changes, re-render your Handsontable instance
136784
+ * hot.render();
136785
+ * }
136786
+ *
136787
+ * private getData(): any[] {
136788
+ * // Get some data
136789
+ * }
136790
+ * }
136791
+ * ```
136792
+ * :::
135925
136793
  */
135926
136794
  var _hiddenRowsMap = /*#__PURE__*/new WeakMap();
135927
136795
  var _HiddenRows_brand = /*#__PURE__*/new WeakSet();
@@ -136012,8 +136880,8 @@ class HiddenRows extends _base.BasePlugin {
136012
136880
  * Disables the plugin functionality for this Handsontable instance.
136013
136881
  */
136014
136882
  disablePlugin() {
136015
- this.hot.rowIndexMapper.unregisterMap(this.pluginName);
136016
136883
  super.disablePlugin();
136884
+ this.hot.rowIndexMapper.unregisterMap(this.pluginName);
136017
136885
  this.resetCellsMeta();
136018
136886
  }
136019
136887
 
@@ -138052,12 +138920,12 @@ class ManualColumnResize extends _base.BasePlugin {
138052
138920
  setupGuidePosition() {
138053
138921
  const handleHeight = parseInt((0, _element.outerHeight)(_classPrivateFieldGet(_handle, this)), 10);
138054
138922
  const handleBottomPosition = parseInt(_classPrivateFieldGet(_handle, this).style.top, 10) + handleHeight;
138055
- const maximumVisibleElementHeight = parseInt(this.hot.view.maximumVisibleElementHeight(0), 10);
138923
+ const tableHeight = this.hot.view.getTableHeight();
138056
138924
  (0, _element.addClass)(_classPrivateFieldGet(_handle, this), 'active');
138057
138925
  (0, _element.addClass)(_classPrivateFieldGet(_guide, this), 'active');
138058
138926
  _classPrivateFieldGet(_guide, this).style.top = `${handleBottomPosition}px`;
138059
138927
  this.refreshGuidePosition();
138060
- _classPrivateFieldGet(_guide, this).style.height = `${maximumVisibleElementHeight - handleHeight}px`;
138928
+ _classPrivateFieldGet(_guide, this).style.height = `${tableHeight - handleHeight}px`;
138061
138929
  this.hot.rootElement.appendChild(_classPrivateFieldGet(_guide, this));
138062
138930
  }
138063
138931
 
@@ -138128,8 +138996,7 @@ class ManualColumnResize extends _base.BasePlugin {
138128
138996
  */
138129
138997
  afterMouseDownTimeout() {
138130
138998
  const render = () => {
138131
- this.hot.forceFullRender = true;
138132
- this.hot.view.render(); // updates all
138999
+ this.hot.render();
138133
139000
  this.hot.view.adjustElementsSize();
138134
139001
  };
138135
139002
  const resize = (column, forceRender) => {
@@ -138289,8 +139156,7 @@ function _onMouseMove(event) {
138289
139156
  */
138290
139157
  function _onMouseUp() {
138291
139158
  const render = () => {
138292
- this.hot.forceFullRender = true;
138293
- this.hot.view.render(); // updates all
139159
+ this.hot.render();
138294
139160
  this.hot.view.adjustElementsSize();
138295
139161
  };
138296
139162
  const resize = (column, forceRender) => {
@@ -139614,12 +140480,12 @@ class ManualRowResize extends _base.BasePlugin {
139614
140480
  setupGuidePosition() {
139615
140481
  const handleWidth = parseInt((0, _element.outerWidth)(_classPrivateFieldGet(_handle, this)), 10);
139616
140482
  const handleEndPosition = parseInt(_classPrivateFieldGet(_handle, this).style[this.inlineDir], 10) + handleWidth;
139617
- const maximumVisibleElementWidth = parseInt(this.hot.view.maximumVisibleElementWidth(0), 10);
140483
+ const tableWidth = this.hot.view.getTableWidth();
139618
140484
  (0, _element.addClass)(_classPrivateFieldGet(_handle, this), 'active');
139619
140485
  (0, _element.addClass)(_classPrivateFieldGet(_guide, this), 'active');
139620
140486
  _classPrivateFieldGet(_guide, this).style.top = _classPrivateFieldGet(_handle, this).style.top;
139621
140487
  _classPrivateFieldGet(_guide, this).style[this.inlineDir] = `${handleEndPosition}px`;
139622
- _classPrivateFieldGet(_guide, this).style.width = `${maximumVisibleElementWidth - handleWidth}px`;
140488
+ _classPrivateFieldGet(_guide, this).style.width = `${tableWidth - handleWidth}px`;
139623
140489
  this.hot.rootElement.appendChild(_classPrivateFieldGet(_guide, this));
139624
140490
  }
139625
140491
 
@@ -139700,8 +140566,7 @@ class ManualRowResize extends _base.BasePlugin {
139700
140566
  */
139701
140567
  afterMouseDownTimeout() {
139702
140568
  const render = () => {
139703
- this.hot.forceFullRender = true;
139704
- this.hot.view.render(); // updates all
140569
+ this.hot.render();
139705
140570
  this.hot.view.adjustElementsSize();
139706
140571
  };
139707
140572
  const resize = (row, forceRender) => {
@@ -139829,8 +140694,7 @@ function _onMouseMove(event) {
139829
140694
  */
139830
140695
  function _onMouseUp() {
139831
140696
  const render = () => {
139832
- this.hot.forceFullRender = true;
139833
- this.hot.view.render(); // updates all
140697
+ this.hot.render();
139834
140698
  this.hot.view.adjustElementsSize();
139835
140699
  };
139836
140700
  const runHooks = (row, forceRender) => {
@@ -139963,6 +140827,7 @@ var _element = __webpack_require__(351);
139963
140827
  var _browser = __webpack_require__(498);
139964
140828
  var _focusOrder2 = __webpack_require__(1033);
139965
140829
  var _renderer = __webpack_require__(1035);
140830
+ var _utils = __webpack_require__(1036);
139966
140831
  function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
139967
140832
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
139968
140833
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
@@ -140013,6 +140878,24 @@ const SHORTCUTS_GROUP = PLUGIN_KEY;
140013
140878
  * />
140014
140879
  * ```
140015
140880
  * :::
140881
+ *
140882
+ * ::: only-for angular
140883
+ * ```ts
140884
+ * settings = {
140885
+ * data: getData(),
140886
+ * // Enable plugin
140887
+ * mergeCells: [
140888
+ * { row: 0, col: 3, rowspan: 3, colspan: 3 },
140889
+ * { row: 2, col: 6, rowspan: 2, colspan: 2 },
140890
+ * { row: 4, col: 8, rowspan: 3, colspan: 3 },
140891
+ * ],
140892
+ * };
140893
+ * ```
140894
+ *
140895
+ * ```html
140896
+ * <hot-table [settings]="settings"></hot-table>
140897
+ * ```
140898
+ * :::
140016
140899
  */
140017
140900
  var _lastSelectedFocus = /*#__PURE__*/new WeakMap();
140018
140901
  var _lastFocusDelta = /*#__PURE__*/new WeakMap();
@@ -140595,8 +141478,12 @@ class MergeCells extends _base.BasePlugin {
140595
141478
  * @param {CellRange} cellRange The cell range to merge or unmerged.
140596
141479
  */
140597
141480
  toggleMerge(cellRange) {
140598
- const mergedCell = this.mergedCellsCollection.get(cellRange.from.row, cellRange.from.col);
140599
- const mergedCellCoversWholeRange = mergedCell.row === cellRange.from.row && mergedCell.col === cellRange.from.col && mergedCell.row + mergedCell.rowspan - 1 === cellRange.to.row && mergedCell.col + mergedCell.colspan - 1 === cellRange.to.col;
141481
+ const {
141482
+ from,
141483
+ to
141484
+ } = cellRange.clone().normalize();
141485
+ const mergedCell = this.mergedCellsCollection.get(from.row, from.col);
141486
+ const mergedCellCoversWholeRange = mergedCell.row === from.row && mergedCell.col === from.col && mergedCell.row + mergedCell.rowspan - 1 === to.row && mergedCell.col + mergedCell.colspan - 1 === to.col;
140600
141487
  if (mergedCellCoversWholeRange) {
140601
141488
  this.unmergeRange(cellRange);
140602
141489
  } else {
@@ -141408,36 +142295,10 @@ function _onModifyRowHeightByOverlayName(height, row, overlayType) {
141408
142295
  } else {
141409
142296
  rowspanAfterCorrection = rowspan - rowspanCorrection;
141410
142297
  }
141411
- height = Math.max(height !== null && height !== void 0 ? height : 0, _assertClassBrand(_MergeCells_brand, this, _sumCellsHeights).call(this, row, rowspanAfterCorrection));
142298
+ height = Math.max(height !== null && height !== void 0 ? height : 0, (0, _utils.sumCellsHeights)(this.hot, row, rowspanAfterCorrection));
141412
142299
  });
141413
142300
  return height;
141414
142301
  }
141415
- /**
141416
- * Sums the heights of the all cells that the merge cell consists of.
141417
- *
141418
- * @param {number} row The visual row index of the merged cell.
141419
- * @param {number} rowspan The rowspan value of the merged cell.
141420
- * @returns {number}
141421
- */
141422
- function _sumCellsHeights(row, rowspan) {
141423
- const {
141424
- view,
141425
- rowIndexMapper
141426
- } = this.hot;
141427
- const stylesHandler = view.getStylesHandler();
141428
- const defaultHeight = view.getDefaultRowHeight();
141429
- let height = 0;
141430
- for (let i = row; i < row + rowspan; i++) {
141431
- if (!rowIndexMapper.isHidden(i)) {
141432
- var _this$hot$getRowHeigh;
141433
- height += (_this$hot$getRowHeigh = this.hot.getRowHeight(i)) !== null && _this$hot$getRowHeigh !== void 0 ? _this$hot$getRowHeigh : defaultHeight;
141434
- if (i === 0 && !stylesHandler.isClassicTheme()) {
141435
- height += 1; // border-top-width
141436
- }
141437
- }
141438
- }
141439
- return height;
141440
- }
141441
142302
 
141442
142303
  /***/ }),
141443
142304
  /* 1024 */
@@ -143622,6 +144483,8 @@ var _default = exports["default"] = LinkedList;
143622
144483
  exports.__esModule = true;
143623
144484
  exports.createMergeCellRenderer = createMergeCellRenderer;
143624
144485
  var _object = __webpack_require__(499);
144486
+ var _browser = __webpack_require__(498);
144487
+ var _utils = __webpack_require__(1036);
143625
144488
  /**
143626
144489
  * Creates a renderer object for the `MergeCells` plugin.
143627
144490
  *
@@ -143637,6 +144500,7 @@ function createMergeCellRenderer(plugin) {
143637
144500
  rowIndexMapper: rowMapper,
143638
144501
  columnIndexMapper: columnMapper
143639
144502
  } = hot;
144503
+ const updateNextCellsHeight = new Map();
143640
144504
 
143641
144505
  /**
143642
144506
  * Runs before the cell is rendered.
@@ -143658,6 +144522,10 @@ function createMergeCellRenderer(plugin) {
143658
144522
  if (!(0, _object.isObject)(mergedCell)) {
143659
144523
  TD.removeAttribute('rowspan');
143660
144524
  TD.removeAttribute('colspan');
144525
+ if ((0, _browser.isSafari)() && updateNextCellsHeight.has(row) && !hot.getSettings().rowHeaders) {
144526
+ TD.style.height = `${updateNextCellsHeight.get(row)}px`;
144527
+ updateNextCellsHeight.delete(row);
144528
+ }
143661
144529
  TD.style.display = '';
143662
144530
  return;
143663
144531
  }
@@ -143669,6 +144537,14 @@ function createMergeCellRenderer(plugin) {
143669
144537
  } = mergedCell;
143670
144538
  const [lastMergedRowIndex, lastMergedColumnIndex] = plugin.translateMergedCellToRenderable(origRow, origRowspan, origColumn, origColspan);
143671
144539
  const isVirtualRenderingEnabled = plugin.getSetting('virtualized');
144540
+
144541
+ // Safari bug fix - the height of the cells next to the merged cell must be defined
144542
+ // so that their height is proportional to the height of the merged cell
144543
+ // (this emulates default behavior in Chrome, FF etc.)
144544
+ if ((0, _browser.isSafari)() && origColumn === 0 && !hot.getSettings().rowHeaders) {
144545
+ const height = (0, _utils.sumCellsHeights)(hot, origRow, origRowspan);
144546
+ updateNextCellsHeight.set(row, height / origRowspan);
144547
+ }
143672
144548
  const renderedRowIndex = rowMapper.getRenderableFromVisualIndex(row);
143673
144549
  const renderedColumnIndex = columnMapper.getRenderableFromVisualIndex(col);
143674
144550
  const maxRowSpan = lastMergedRowIndex - renderedRowIndex + 1; // Number of rendered columns.
@@ -143704,19 +144580,56 @@ function createMergeCellRenderer(plugin) {
143704
144580
 
143705
144581
  /***/ }),
143706
144582
  /* 1036 */
144583
+ /***/ ((__unused_webpack_module, exports) => {
144584
+
144585
+ "use strict";
144586
+
144587
+
144588
+ exports.__esModule = true;
144589
+ exports.sumCellsHeights = sumCellsHeights;
144590
+ /**
144591
+ * Calculates the total height of the merged cell.
144592
+ *
144593
+ * @param {Core} hotInstance The Handsontable instance.
144594
+ * @param {*} row The merged cell's row index.
144595
+ * @param {*} rowspan The merged cell height.
144596
+ * @returns {number}
144597
+ */
144598
+ function sumCellsHeights(hotInstance, row, rowspan) {
144599
+ const {
144600
+ view,
144601
+ rowIndexMapper
144602
+ } = hotInstance;
144603
+ const stylesHandler = view.getStylesHandler();
144604
+ const defaultHeight = view.getDefaultRowHeight();
144605
+ let height = 0;
144606
+ for (let i = row; i < row + rowspan; i++) {
144607
+ if (!rowIndexMapper.isHidden(i)) {
144608
+ var _hotInstance$getRowHe;
144609
+ height += (_hotInstance$getRowHe = hotInstance.getRowHeight(i)) !== null && _hotInstance$getRowHe !== void 0 ? _hotInstance$getRowHe : defaultHeight;
144610
+ if (i === 0 && !stylesHandler.isClassicTheme()) {
144611
+ height += 1; // border-top-width
144612
+ }
144613
+ }
144614
+ }
144615
+ return height;
144616
+ }
144617
+
144618
+ /***/ }),
144619
+ /* 1037 */
143707
144620
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
143708
144621
 
143709
144622
  "use strict";
143710
144623
 
143711
144624
 
143712
144625
  exports.__esModule = true;
143713
- var _multiColumnSorting = __webpack_require__(1037);
144626
+ var _multiColumnSorting = __webpack_require__(1038);
143714
144627
  exports.PLUGIN_KEY = _multiColumnSorting.PLUGIN_KEY;
143715
144628
  exports.PLUGIN_PRIORITY = _multiColumnSorting.PLUGIN_PRIORITY;
143716
144629
  exports.MultiColumnSorting = _multiColumnSorting.MultiColumnSorting;
143717
144630
 
143718
144631
  /***/ }),
143719
- /* 1037 */
144632
+ /* 1038 */
143720
144633
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
143721
144634
 
143722
144635
  "use strict";
@@ -143729,8 +144642,8 @@ var _columnSorting = __webpack_require__(856);
143729
144642
  var _sortService = __webpack_require__(860);
143730
144643
  var _utils = __webpack_require__(859);
143731
144644
  var _element = __webpack_require__(351);
143732
- var _rootComparator = __webpack_require__(1038);
143733
- var _domHelpers = __webpack_require__(1039);
144645
+ var _rootComparator = __webpack_require__(1039);
144646
+ var _domHelpers = __webpack_require__(1040);
143734
144647
  var _shortcutContexts = __webpack_require__(686);
143735
144648
  const PLUGIN_KEY = exports.PLUGIN_KEY = 'multiColumnSorting';
143736
144649
  const PLUGIN_PRIORITY = exports.PLUGIN_PRIORITY = 170;
@@ -144016,7 +144929,7 @@ class MultiColumnSorting extends _columnSorting.ColumnSorting {
144016
144929
  exports.MultiColumnSorting = MultiColumnSorting;
144017
144930
 
144018
144931
  /***/ }),
144019
- /* 1038 */
144932
+ /* 1039 */
144020
144933
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
144021
144934
 
144022
144935
  "use strict";
@@ -144058,7 +144971,7 @@ function rootComparator(sortingOrders, columnMetas) {
144058
144971
  }
144059
144972
 
144060
144973
  /***/ }),
144061
- /* 1039 */
144974
+ /* 1040 */
144062
144975
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
144063
144976
 
144064
144977
  "use strict";
@@ -144104,20 +145017,20 @@ function getClassesToRemove(htmlElement) {
144104
145017
  }
144105
145018
 
144106
145019
  /***/ }),
144107
- /* 1040 */
145020
+ /* 1041 */
144108
145021
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
144109
145022
 
144110
145023
  "use strict";
144111
145024
 
144112
145025
 
144113
145026
  exports.__esModule = true;
144114
- var _multipleSelectionHandles = __webpack_require__(1041);
145027
+ var _multipleSelectionHandles = __webpack_require__(1042);
144115
145028
  exports.PLUGIN_KEY = _multipleSelectionHandles.PLUGIN_KEY;
144116
145029
  exports.PLUGIN_PRIORITY = _multipleSelectionHandles.PLUGIN_PRIORITY;
144117
145030
  exports.MultipleSelectionHandles = _multipleSelectionHandles.MultipleSelectionHandles;
144118
145031
 
144119
145032
  /***/ }),
144120
- /* 1041 */
145033
+ /* 1042 */
144121
145034
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
144122
145035
 
144123
145036
  "use strict";
@@ -144456,20 +145369,20 @@ class MultipleSelectionHandles extends _base.BasePlugin {
144456
145369
  exports.MultipleSelectionHandles = MultipleSelectionHandles;
144457
145370
 
144458
145371
  /***/ }),
144459
- /* 1042 */
145372
+ /* 1043 */
144460
145373
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
144461
145374
 
144462
145375
  "use strict";
144463
145376
 
144464
145377
 
144465
145378
  exports.__esModule = true;
144466
- var _nestedHeaders = __webpack_require__(1043);
145379
+ var _nestedHeaders = __webpack_require__(1044);
144467
145380
  exports.PLUGIN_KEY = _nestedHeaders.PLUGIN_KEY;
144468
145381
  exports.PLUGIN_PRIORITY = _nestedHeaders.PLUGIN_PRIORITY;
144469
145382
  exports.NestedHeaders = _nestedHeaders.NestedHeaders;
144470
145383
 
144471
145384
  /***/ }),
144472
- /* 1043 */
145385
+ /* 1044 */
144473
145386
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
144474
145387
 
144475
145388
  "use strict";
@@ -144489,8 +145402,8 @@ var _event = __webpack_require__(509);
144489
145402
  var _console = __webpack_require__(512);
144490
145403
  var _selection = __webpack_require__(652);
144491
145404
  var _base = __webpack_require__(841);
144492
- var _stateManager2 = _interopRequireDefault(__webpack_require__(1044));
144493
- var _ghostTable = _interopRequireDefault(__webpack_require__(1057));
145405
+ var _stateManager2 = _interopRequireDefault(__webpack_require__(1045));
145406
+ var _ghostTable = _interopRequireDefault(__webpack_require__(1058));
144494
145407
  function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
144495
145408
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
144496
145409
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
@@ -144545,6 +145458,31 @@ const PLUGIN_PRIORITY = exports.PLUGIN_PRIORITY = 280;
144545
145458
  * />
144546
145459
  * ```
144547
145460
  * :::
145461
+ *
145462
+ * ::: only-for angular
145463
+ * ```ts
145464
+ * settings = {
145465
+ * data: getData(),
145466
+ * nestedHeaders: [
145467
+ * ["A", { label: "B", colspan: 8, headerClassName: "htRight" }, "C"],
145468
+ * ["D", { label: "E", colspan: 4 }, { label: "F", colspan: 4 }, "G"],
145469
+ * [
145470
+ * "H",
145471
+ * { label: "I", colspan: 2 },
145472
+ * { label: "J", colspan: 2 },
145473
+ * { label: "K", colspan: 2 },
145474
+ * { label: "L", colspan: 2 },
145475
+ * "M",
145476
+ * ],
145477
+ * ["N", "O", "P", "Q", "R", "S", "T", "U", "V", "W"],
145478
+ * ],
145479
+ * };
145480
+ * ```
145481
+ *
145482
+ * ```html
145483
+ * <hot-table [settings]="settings"></hot-table>
145484
+ * ```
145485
+ * :::
144548
145486
  */
144549
145487
  var _stateManager = /*#__PURE__*/new WeakMap();
144550
145488
  var _hidingIndexMapObserver = /*#__PURE__*/new WeakMap();
@@ -145478,7 +146416,7 @@ function _onAfterLoadData(sourceData, initialLoad) {
145478
146416
  }
145479
146417
 
145480
146418
  /***/ }),
145481
- /* 1044 */
146419
+ /* 1045 */
145482
146420
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
145483
146421
 
145484
146422
  "use strict";
@@ -145491,11 +146429,11 @@ __webpack_require__(283);
145491
146429
  __webpack_require__(311);
145492
146430
  __webpack_require__(338);
145493
146431
  var _array = __webpack_require__(495);
145494
- var _sourceSettings2 = _interopRequireDefault(__webpack_require__(1045));
145495
- var _headersTree2 = _interopRequireDefault(__webpack_require__(1048));
145496
- var _nodeModifiers = __webpack_require__(1050);
145497
- var _matrixGenerator = __webpack_require__(1056);
145498
- var _tree = __webpack_require__(1049);
146432
+ var _sourceSettings2 = _interopRequireDefault(__webpack_require__(1046));
146433
+ var _headersTree2 = _interopRequireDefault(__webpack_require__(1049));
146434
+ var _nodeModifiers = __webpack_require__(1051);
146435
+ var _matrixGenerator = __webpack_require__(1057);
146436
+ var _tree = __webpack_require__(1050);
145499
146437
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
145500
146438
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
145501
146439
  function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
@@ -145970,7 +146908,7 @@ class StateManager {
145970
146908
  exports["default"] = StateManager;
145971
146909
 
145972
146910
  /***/ }),
145973
- /* 1045 */
146911
+ /* 1046 */
145974
146912
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
145975
146913
 
145976
146914
  "use strict";
@@ -145981,7 +146919,7 @@ __webpack_require__(201);
145981
146919
  __webpack_require__(283);
145982
146920
  var _object = __webpack_require__(499);
145983
146921
  var _array = __webpack_require__(495);
145984
- var _settingsNormalizer = __webpack_require__(1046);
146922
+ var _settingsNormalizer = __webpack_require__(1047);
145985
146923
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
145986
146924
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
145987
146925
  function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
@@ -146192,7 +147130,7 @@ class SourceSettings {
146192
147130
  exports["default"] = SourceSettings;
146193
147131
 
146194
147132
  /***/ }),
146195
- /* 1046 */
147133
+ /* 1047 */
146196
147134
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
146197
147135
 
146198
147136
  "use strict";
@@ -146204,7 +147142,7 @@ __webpack_require__(283);
146204
147142
  var _array = __webpack_require__(495);
146205
147143
  var _object = __webpack_require__(499);
146206
147144
  var _mixed = __webpack_require__(354);
146207
- var _utils = __webpack_require__(1047);
147145
+ var _utils = __webpack_require__(1048);
146208
147146
  /* eslint-disable jsdoc/require-description-complete-sentence */
146209
147147
 
146210
147148
  /**
@@ -146306,7 +147244,7 @@ function normalizeSettings(sourceSettings) {
146306
147244
  }
146307
147245
 
146308
147246
  /***/ }),
146309
- /* 1047 */
147247
+ /* 1048 */
146310
147248
  /***/ ((__unused_webpack_module, exports) => {
146311
147249
 
146312
147250
  "use strict";
@@ -146383,7 +147321,7 @@ function createPlaceholderHeaderSettings() {
146383
147321
  }
146384
147322
 
146385
147323
  /***/ }),
146386
- /* 1048 */
147324
+ /* 1049 */
146387
147325
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
146388
147326
 
146389
147327
  "use strict";
@@ -146393,7 +147331,7 @@ var _interopRequireDefault = __webpack_require__(197);
146393
147331
  exports.__esModule = true;
146394
147332
  __webpack_require__(201);
146395
147333
  var _array = __webpack_require__(495);
146396
- var _tree = _interopRequireDefault(__webpack_require__(1049));
147334
+ var _tree = _interopRequireDefault(__webpack_require__(1050));
146397
147335
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
146398
147336
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
146399
147337
  function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
@@ -146621,7 +147559,7 @@ class HeadersTree {
146621
147559
  exports["default"] = HeadersTree;
146622
147560
 
146623
147561
  /***/ }),
146624
- /* 1049 */
147562
+ /* 1050 */
146625
147563
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
146626
147564
 
146627
147565
  "use strict";
@@ -146840,7 +147778,7 @@ class TreeNode {
146840
147778
  exports["default"] = TreeNode;
146841
147779
 
146842
147780
  /***/ }),
146843
- /* 1050 */
147781
+ /* 1051 */
146844
147782
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
146845
147783
 
146846
147784
  "use strict";
@@ -146849,10 +147787,10 @@ exports["default"] = TreeNode;
146849
147787
  exports.__esModule = true;
146850
147788
  exports.triggerNodeModification = triggerNodeModification;
146851
147789
  __webpack_require__(201);
146852
- var _collapse = __webpack_require__(1051);
146853
- var _expand = __webpack_require__(1052);
146854
- var _hideColumn = __webpack_require__(1054);
146855
- var _showColumn = __webpack_require__(1055);
147790
+ var _collapse = __webpack_require__(1052);
147791
+ var _expand = __webpack_require__(1053);
147792
+ var _hideColumn = __webpack_require__(1055);
147793
+ var _showColumn = __webpack_require__(1056);
146856
147794
  /**
146857
147795
  * The NodeModifiers module is responsible for the modification of a tree structure
146858
147796
  * in a way to achieve new column headers state.
@@ -146882,7 +147820,7 @@ function triggerNodeModification(actionName, nodeToProcess, gridColumnIndex) {
146882
147820
  }
146883
147821
 
146884
147822
  /***/ }),
146885
- /* 1051 */
147823
+ /* 1052 */
146886
147824
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
146887
147825
 
146888
147826
  "use strict";
@@ -146898,8 +147836,8 @@ __webpack_require__(305);
146898
147836
  __webpack_require__(307);
146899
147837
  __webpack_require__(309);
146900
147838
  var _array = __webpack_require__(495);
146901
- var _expand = __webpack_require__(1052);
146902
- var _tree = __webpack_require__(1053);
147839
+ var _expand = __webpack_require__(1053);
147840
+ var _tree = __webpack_require__(1054);
146903
147841
  /**
146904
147842
  * Collapsing a node is a process where the processing node is collapsed
146905
147843
  * to the colspan width of the first child. All node children, except the
@@ -146992,7 +147930,7 @@ function collapseNode(nodeToProcess) {
146992
147930
  }
146993
147931
 
146994
147932
  /***/ }),
146995
- /* 1052 */
147933
+ /* 1053 */
146996
147934
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
146997
147935
 
146998
147936
  "use strict";
@@ -147008,8 +147946,8 @@ __webpack_require__(305);
147008
147946
  __webpack_require__(307);
147009
147947
  __webpack_require__(309);
147010
147948
  var _array = __webpack_require__(495);
147011
- var _collapse = __webpack_require__(1051);
147012
- var _tree = __webpack_require__(1053);
147949
+ var _collapse = __webpack_require__(1052);
147950
+ var _tree = __webpack_require__(1054);
147013
147951
  /**
147014
147952
  * Expanding a node is a process where the processing node is expanded to
147015
147953
  * its original colspan width. To restore an original state of all node
@@ -147097,7 +148035,7 @@ function expandNode(nodeToProcess) {
147097
148035
  }
147098
148036
 
147099
148037
  /***/ }),
147100
- /* 1053 */
148038
+ /* 1054 */
147101
148039
  /***/ ((__unused_webpack_module, exports) => {
147102
148040
 
147103
148041
  "use strict";
@@ -147168,7 +148106,7 @@ function isNodeReflectsFirstChildColspan(node) {
147168
148106
  }
147169
148107
 
147170
148108
  /***/ }),
147171
- /* 1054 */
148109
+ /* 1055 */
147172
148110
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
147173
148111
 
147174
148112
  "use strict";
@@ -147231,7 +148169,7 @@ the last node, the hide column modification can be applied.`);
147231
148169
  }
147232
148170
 
147233
148171
  /***/ }),
147234
- /* 1055 */
148172
+ /* 1056 */
147235
148173
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
147236
148174
 
147237
148175
  "use strict";
@@ -147292,7 +148230,7 @@ the last node, the show column modification can be applied.`);
147292
148230
  }
147293
148231
 
147294
148232
  /***/ }),
147295
- /* 1056 */
148233
+ /* 1057 */
147296
148234
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
147297
148235
 
147298
148236
  "use strict";
@@ -147302,7 +148240,7 @@ exports.__esModule = true;
147302
148240
  exports.generateMatrix = generateMatrix;
147303
148241
  __webpack_require__(283);
147304
148242
  var _array = __webpack_require__(495);
147305
- var _utils = __webpack_require__(1047);
148243
+ var _utils = __webpack_require__(1048);
147306
148244
  /* eslint-disable jsdoc/require-description-complete-sentence */
147307
148245
 
147308
148246
  /**
@@ -147398,7 +148336,7 @@ function createNestedArrayIfNecessary(array, index) {
147398
148336
  }
147399
148337
 
147400
148338
  /***/ }),
147401
- /* 1057 */
148339
+ /* 1058 */
147402
148340
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
147403
148341
 
147404
148342
  "use strict";
@@ -147554,20 +148492,20 @@ class GhostTable {
147554
148492
  var _default = exports["default"] = GhostTable;
147555
148493
 
147556
148494
  /***/ }),
147557
- /* 1058 */
148495
+ /* 1059 */
147558
148496
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
147559
148497
 
147560
148498
  "use strict";
147561
148499
 
147562
148500
 
147563
148501
  exports.__esModule = true;
147564
- var _nestedRows = __webpack_require__(1059);
148502
+ var _nestedRows = __webpack_require__(1060);
147565
148503
  exports.PLUGIN_KEY = _nestedRows.PLUGIN_KEY;
147566
148504
  exports.PLUGIN_PRIORITY = _nestedRows.PLUGIN_PRIORITY;
147567
148505
  exports.NestedRows = _nestedRows.NestedRows;
147568
148506
 
147569
148507
  /***/ }),
147570
- /* 1059 */
148508
+ /* 1060 */
147571
148509
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
147572
148510
 
147573
148511
  "use strict";
@@ -147589,15 +148527,15 @@ __webpack_require__(329);
147589
148527
  __webpack_require__(530);
147590
148528
  var _defineProperty2 = _interopRequireDefault(__webpack_require__(504));
147591
148529
  var _base = __webpack_require__(841);
147592
- var _dataManager = _interopRequireDefault(__webpack_require__(1060));
147593
- var _collapsing = _interopRequireDefault(__webpack_require__(1061));
147594
- var _headers = _interopRequireDefault(__webpack_require__(1063));
147595
- var _contextMenu = _interopRequireDefault(__webpack_require__(1064));
148530
+ var _dataManager = _interopRequireDefault(__webpack_require__(1061));
148531
+ var _collapsing = _interopRequireDefault(__webpack_require__(1062));
148532
+ var _headers = _interopRequireDefault(__webpack_require__(1064));
148533
+ var _contextMenu = _interopRequireDefault(__webpack_require__(1065));
147596
148534
  var _console = __webpack_require__(512);
147597
148535
  var _data = __webpack_require__(622);
147598
148536
  var _translations = __webpack_require__(625);
147599
148537
  var _shortcutContexts = __webpack_require__(686);
147600
- var _rowMoveController = _interopRequireDefault(__webpack_require__(1065));
148538
+ var _rowMoveController = _interopRequireDefault(__webpack_require__(1066));
147601
148539
  function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
147602
148540
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
147603
148541
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
@@ -148129,7 +149067,7 @@ function _onBeforeLoadData(data) {
148129
149067
  }
148130
149068
 
148131
149069
  /***/ }),
148132
- /* 1060 */
149070
+ /* 1061 */
148133
149071
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
148134
149072
 
148135
149073
  "use strict";
@@ -148760,7 +149698,7 @@ class DataManager {
148760
149698
  */
148761
149699
  syncRowWithRawSource(rowElement) {
148762
149700
  let upmostParent = rowElement;
148763
- let tempParent = null;
149701
+ let tempParent = upmostParent;
148764
149702
  do {
148765
149703
  tempParent = this.getRowParent(tempParent);
148766
149704
  if (tempParent !== null) {
@@ -148768,7 +149706,7 @@ class DataManager {
148768
149706
  }
148769
149707
  } while (tempParent !== null);
148770
149708
  this.plugin.disableCoreAPIModifiers();
148771
- this.hot.setSourceDataAtCell(this.getRowIndex(upmostParent), '__children', upmostParent.__children, 'NestedRows.syncRowWithRawSource');
149709
+ this.hot.setSourceDataAtCell(this.getRowIndexWithinParent(upmostParent), '__children', upmostParent.__children, 'NestedRows.syncRowWithRawSource');
148772
149710
  this.plugin.enableCoreAPIModifiers();
148773
149711
  }
148774
149712
 
@@ -148845,7 +149783,7 @@ class DataManager {
148845
149783
  var _default = exports["default"] = DataManager;
148846
149784
 
148847
149785
  /***/ }),
148848
- /* 1061 */
149786
+ /* 1062 */
148849
149787
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
148850
149788
 
148851
149789
  "use strict";
@@ -148858,8 +149796,8 @@ var _event = __webpack_require__(509);
148858
149796
  var _array = __webpack_require__(495);
148859
149797
  var _number = __webpack_require__(534);
148860
149798
  var _element = __webpack_require__(351);
148861
- var _base = _interopRequireDefault(__webpack_require__(1062));
148862
- var _headers = _interopRequireDefault(__webpack_require__(1063));
149799
+ var _base = _interopRequireDefault(__webpack_require__(1063));
149800
+ var _headers = _interopRequireDefault(__webpack_require__(1064));
148863
149801
  /**
148864
149802
  * Class responsible for the UI for collapsing and expanding groups.
148865
149803
  *
@@ -149320,7 +150258,7 @@ class CollapsingUI extends _base.default {
149320
150258
  var _default = exports["default"] = CollapsingUI;
149321
150259
 
149322
150260
  /***/ }),
149323
- /* 1062 */
150261
+ /* 1063 */
149324
150262
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
149325
150263
 
149326
150264
  "use strict";
@@ -149354,7 +150292,7 @@ class BaseUI {
149354
150292
  var _default = exports["default"] = BaseUI;
149355
150293
 
149356
150294
  /***/ }),
149357
- /* 1063 */
150295
+ /* 1064 */
149358
150296
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
149359
150297
 
149360
150298
  "use strict";
@@ -149365,7 +150303,7 @@ exports.__esModule = true;
149365
150303
  var _array = __webpack_require__(495);
149366
150304
  var _number = __webpack_require__(534);
149367
150305
  var _element = __webpack_require__(351);
149368
- var _base = _interopRequireDefault(__webpack_require__(1062));
150306
+ var _base = _interopRequireDefault(__webpack_require__(1063));
149369
150307
  var _a11y = __webpack_require__(496);
149370
150308
  /**
149371
150309
  * Class responsible for the UI in the Nested Rows' row headers.
@@ -149498,7 +150436,7 @@ class HeadersUI extends _base.default {
149498
150436
  var _default = exports["default"] = HeadersUI;
149499
150437
 
149500
150438
  /***/ }),
149501
- /* 1064 */
150439
+ /* 1065 */
149502
150440
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
149503
150441
 
149504
150442
  "use strict";
@@ -149511,7 +150449,7 @@ var _defineProperty2 = _interopRequireDefault(__webpack_require__(504));
149511
150449
  var _number = __webpack_require__(534);
149512
150450
  var _array = __webpack_require__(495);
149513
150451
  var C = _interopRequireWildcard(__webpack_require__(651));
149514
- var _base = _interopRequireDefault(__webpack_require__(1062));
150452
+ var _base = _interopRequireDefault(__webpack_require__(1063));
149515
150453
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
149516
150454
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
149517
150455
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
@@ -149617,7 +150555,7 @@ class ContextMenuUI extends _base.default {
149617
150555
  var _default = exports["default"] = ContextMenuUI;
149618
150556
 
149619
150557
  /***/ }),
149620
- /* 1065 */
150558
+ /* 1066 */
149621
150559
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
149622
150560
 
149623
150561
  "use strict";
@@ -149906,20 +150844,20 @@ class RowMoveController {
149906
150844
  exports["default"] = RowMoveController;
149907
150845
 
149908
150846
  /***/ }),
149909
- /* 1066 */
150847
+ /* 1067 */
149910
150848
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
149911
150849
 
149912
150850
  "use strict";
149913
150851
 
149914
150852
 
149915
150853
  exports.__esModule = true;
149916
- var _persistentState = __webpack_require__(1067);
150854
+ var _persistentState = __webpack_require__(1068);
149917
150855
  exports.PLUGIN_KEY = _persistentState.PLUGIN_KEY;
149918
150856
  exports.PLUGIN_PRIORITY = _persistentState.PLUGIN_PRIORITY;
149919
150857
  exports.PersistentState = _persistentState.PersistentState;
149920
150858
 
149921
150859
  /***/ }),
149922
- /* 1067 */
150860
+ /* 1068 */
149923
150861
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
149924
150862
 
149925
150863
  "use strict";
@@ -149929,7 +150867,7 @@ var _interopRequireDefault = __webpack_require__(197);
149929
150867
  exports.__esModule = true;
149930
150868
  var _defineProperty2 = _interopRequireDefault(__webpack_require__(504));
149931
150869
  var _base = __webpack_require__(841);
149932
- var _storage = _interopRequireDefault(__webpack_require__(1068));
150870
+ var _storage = _interopRequireDefault(__webpack_require__(1069));
149933
150871
  var _hooks = __webpack_require__(511);
149934
150872
  _hooks.Hooks.getSingleton().register('persistentStateSave');
149935
150873
  _hooks.Hooks.getSingleton().register('persistentStateLoad');
@@ -150070,7 +151008,7 @@ class PersistentState extends _base.BasePlugin {
150070
151008
  exports.PersistentState = PersistentState;
150071
151009
 
150072
151010
  /***/ }),
150073
- /* 1068 */
151011
+ /* 1069 */
150074
151012
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
150075
151013
 
150076
151014
  "use strict";
@@ -150194,20 +151132,20 @@ class Storage {
150194
151132
  var _default = exports["default"] = Storage;
150195
151133
 
150196
151134
  /***/ }),
150197
- /* 1069 */
151135
+ /* 1070 */
150198
151136
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
150199
151137
 
150200
151138
  "use strict";
150201
151139
 
150202
151140
 
150203
151141
  exports.__esModule = true;
150204
- var _search = __webpack_require__(1070);
151142
+ var _search = __webpack_require__(1071);
150205
151143
  exports.PLUGIN_KEY = _search.PLUGIN_KEY;
150206
151144
  exports.PLUGIN_PRIORITY = _search.PLUGIN_PRIORITY;
150207
151145
  exports.Search = _search.Search;
150208
151146
 
150209
151147
  /***/ }),
150210
- /* 1070 */
151148
+ /* 1071 */
150211
151149
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
150212
151150
 
150213
151151
  "use strict";
@@ -150515,20 +151453,20 @@ function _onBeforeRenderer(TD, row, col, prop, value, cellProperties) {
150515
151453
  }
150516
151454
 
150517
151455
  /***/ }),
150518
- /* 1071 */
151456
+ /* 1072 */
150519
151457
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
150520
151458
 
150521
151459
  "use strict";
150522
151460
 
150523
151461
 
150524
151462
  exports.__esModule = true;
150525
- var _stretchColumns = __webpack_require__(1072);
151463
+ var _stretchColumns = __webpack_require__(1073);
150526
151464
  exports.PLUGIN_KEY = _stretchColumns.PLUGIN_KEY;
150527
151465
  exports.PLUGIN_PRIORITY = _stretchColumns.PLUGIN_PRIORITY;
150528
151466
  exports.StretchColumns = _stretchColumns.StretchColumns;
150529
151467
 
150530
151468
  /***/ }),
150531
- /* 1072 */
151469
+ /* 1073 */
150532
151470
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
150533
151471
 
150534
151472
  "use strict";
@@ -150539,7 +151477,7 @@ __webpack_require__(201);
150539
151477
  __webpack_require__(311);
150540
151478
  __webpack_require__(329);
150541
151479
  var _base = __webpack_require__(841);
150542
- var _calculator = __webpack_require__(1073);
151480
+ var _calculator = __webpack_require__(1074);
150543
151481
  function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
150544
151482
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
150545
151483
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
@@ -150596,6 +151534,19 @@ const PLUGIN_PRIORITY = exports.PLUGIN_PRIORITY = 155;
150596
151534
  * />
150597
151535
  * ```
150598
151536
  * :::
151537
+ *
151538
+ * ::: only-for angular
151539
+ * ```ts
151540
+ * settings = {
151541
+ * data: getData(),
151542
+ * stretchH: "all",
151543
+ * };
151544
+ * ```
151545
+ *
151546
+ * ```html
151547
+ * <hot-table [settings]="settings"></hot-table>
151548
+ * ```
151549
+ * :::
150599
151550
  */
150600
151551
  /* eslint-enable jsdoc/require-description-complete-sentence */
150601
151552
  var _stretchCalculator = /*#__PURE__*/new WeakMap();
@@ -150756,7 +151707,7 @@ function _onBeforeRender(fullRender) {
150756
151707
  }
150757
151708
 
150758
151709
  /***/ }),
150759
- /* 1073 */
151710
+ /* 1074 */
150760
151711
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
150761
151712
 
150762
151713
  "use strict";
@@ -150768,8 +151719,8 @@ __webpack_require__(311);
150768
151719
  __webpack_require__(329);
150769
151720
  var _src = __webpack_require__(540);
150770
151721
  var _element = __webpack_require__(351);
150771
- var _all = __webpack_require__(1074);
150772
- var _last = __webpack_require__(1076);
151722
+ var _all = __webpack_require__(1075);
151723
+ var _last = __webpack_require__(1077);
150773
151724
  function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
150774
151725
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
150775
151726
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
@@ -150924,7 +151875,7 @@ function _overwriteColumnWidthFn(columnWidth, columnVisualIndex) {
150924
151875
  }
150925
151876
 
150926
151877
  /***/ }),
150927
- /* 1074 */
151878
+ /* 1075 */
150928
151879
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
150929
151880
 
150930
151881
  "use strict";
@@ -150936,7 +151887,7 @@ __webpack_require__(311);
150936
151887
  __webpack_require__(329);
150937
151888
  __webpack_require__(530);
150938
151889
  var _src = __webpack_require__(540);
150939
- var _base = __webpack_require__(1075);
151890
+ var _base = __webpack_require__(1076);
150940
151891
  /**
150941
151892
  * The strategy calculates the column widths by stretching all columns evenly.
150942
151893
  *
@@ -151001,7 +151952,7 @@ class StretchAllStrategy extends _base.StretchStrategy {
151001
151952
  exports.StretchAllStrategy = StretchAllStrategy;
151002
151953
 
151003
151954
  /***/ }),
151004
- /* 1075 */
151955
+ /* 1076 */
151005
151956
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
151006
151957
 
151007
151958
  "use strict";
@@ -151090,7 +152041,7 @@ class StretchStrategy {
151090
152041
  exports.StretchStrategy = StretchStrategy;
151091
152042
 
151092
152043
  /***/ }),
151093
- /* 1076 */
152044
+ /* 1077 */
151094
152045
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
151095
152046
 
151096
152047
  "use strict";
@@ -151100,7 +152051,7 @@ exports.__esModule = true;
151100
152051
  __webpack_require__(201);
151101
152052
  __webpack_require__(311);
151102
152053
  __webpack_require__(530);
151103
- var _base = __webpack_require__(1075);
152054
+ var _base = __webpack_require__(1076);
151104
152055
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
151105
152056
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
151106
152057
  function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
@@ -151175,20 +152126,20 @@ class StretchLastStrategy extends _base.StretchStrategy {
151175
152126
  exports.StretchLastStrategy = StretchLastStrategy;
151176
152127
 
151177
152128
  /***/ }),
151178
- /* 1077 */
152129
+ /* 1078 */
151179
152130
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
151180
152131
 
151181
152132
  "use strict";
151182
152133
 
151183
152134
 
151184
152135
  exports.__esModule = true;
151185
- var _touchScroll = __webpack_require__(1078);
152136
+ var _touchScroll = __webpack_require__(1079);
151186
152137
  exports.PLUGIN_KEY = _touchScroll.PLUGIN_KEY;
151187
152138
  exports.PLUGIN_PRIORITY = _touchScroll.PLUGIN_PRIORITY;
151188
152139
  exports.TouchScroll = _touchScroll.TouchScroll;
151189
152140
 
151190
152141
  /***/ }),
151191
- /* 1078 */
152142
+ /* 1079 */
151192
152143
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
151193
152144
 
151194
152145
  "use strict";
@@ -151377,20 +152328,20 @@ function _onAfterMomentumScroll() {
151377
152328
  }
151378
152329
 
151379
152330
  /***/ }),
151380
- /* 1079 */
152331
+ /* 1080 */
151381
152332
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
151382
152333
 
151383
152334
  "use strict";
151384
152335
 
151385
152336
 
151386
152337
  exports.__esModule = true;
151387
- var _trimRows = __webpack_require__(1080);
152338
+ var _trimRows = __webpack_require__(1081);
151388
152339
  exports.PLUGIN_KEY = _trimRows.PLUGIN_KEY;
151389
152340
  exports.PLUGIN_PRIORITY = _trimRows.PLUGIN_PRIORITY;
151390
152341
  exports.TrimRows = _trimRows.TrimRows;
151391
152342
 
151392
152343
  /***/ }),
151393
- /* 1080 */
152344
+ /* 1081 */
151394
152345
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
151395
152346
 
151396
152347
  "use strict";
@@ -151505,6 +152456,67 @@ const PLUGIN_PRIORITY = exports.PLUGIN_PRIORITY = 330;
151505
152456
  * hot.render();
151506
152457
  * ```
151507
152458
  * :::
152459
+ *
152460
+ * ::: only-for angular
152461
+ * ```ts
152462
+ * import { AfterViewInit, Component, ViewChild } from "@angular/core";
152463
+ * import {
152464
+ * GridSettings,
152465
+ * HotTableModule,
152466
+ * HotTableComponent,
152467
+ * } from "@handsontable/angular-wrapper";
152468
+ *
152469
+ * `@Component`({
152470
+ * selector: "app-example",
152471
+ * standalone: true,
152472
+ * imports: [HotTableModule],
152473
+ * template: ` <div class="ht-theme-main">
152474
+ * <hot-table [settings]="gridSettings" />
152475
+ * </div>`,
152476
+ * })
152477
+ * export class ExampleComponent implements AfterViewInit {
152478
+ * `@ViewChild`(HotTableComponent, { static: false })
152479
+ * readonly hotTable!: HotTableComponent;
152480
+ *
152481
+ * readonly gridSettings = <GridSettings>{
152482
+ * data: this.getData(),
152483
+ * // Hide selected rows on table initialization
152484
+ * trimRows: [1, 2, 5],
152485
+ * };
152486
+ *
152487
+ * ngAfterViewInit(): void {
152488
+ * // Access the trimRows plugin instance
152489
+ * const hot = this.hotTable.hotInstance;
152490
+ * const trimRowsPlugin = hot.getPlugin("trimRows");
152491
+ *
152492
+ * // Hide a single row
152493
+ * trimRowsPlugin.trimRow(1);
152494
+ *
152495
+ * // Hide multiple rows
152496
+ * trimRowsPlugin.trimRow(1, 2, 9);
152497
+ *
152498
+ * // Or as an array
152499
+ * trimRowsPlugin.trimRows([1, 2, 9]);
152500
+ *
152501
+ * // Show a single row
152502
+ * trimRowsPlugin.untrimRow(1);
152503
+ *
152504
+ * // Show multiple rows
152505
+ * trimRowsPlugin.untrimRow(1, 2, 9);
152506
+ *
152507
+ * // Or as an array
152508
+ * trimRowsPlugin.untrimRows([1, 2, 9]);
152509
+ *
152510
+ * // Re-render table to see the changes
152511
+ * hot.render();
152512
+ * }
152513
+ *
152514
+ * private getData(): any[] {
152515
+ * // Get some data
152516
+ * }
152517
+ * }
152518
+ * ```
152519
+ * :::
151508
152520
  */
151509
152521
  var _TrimRows_brand = /*#__PURE__*/new WeakSet();
151510
152522
  class TrimRows extends _base.BasePlugin {
@@ -151722,20 +152734,20 @@ function _onMapInit() {
151722
152734
  }
151723
152735
 
151724
152736
  /***/ }),
151725
- /* 1081 */
152737
+ /* 1082 */
151726
152738
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
151727
152739
 
151728
152740
  "use strict";
151729
152741
 
151730
152742
 
151731
152743
  exports.__esModule = true;
151732
- var _undoRedo = __webpack_require__(1082);
152744
+ var _undoRedo = __webpack_require__(1083);
151733
152745
  exports.PLUGIN_KEY = _undoRedo.PLUGIN_KEY;
151734
152746
  exports.PLUGIN_PRIORITY = _undoRedo.PLUGIN_PRIORITY;
151735
152747
  exports.UndoRedo = _undoRedo.UndoRedo;
151736
152748
 
151737
152749
  /***/ }),
151738
- /* 1082 */
152750
+ /* 1083 */
151739
152751
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
151740
152752
 
151741
152753
  "use strict";
@@ -151758,7 +152770,7 @@ var _hooks = __webpack_require__(511);
151758
152770
  var _object = __webpack_require__(499);
151759
152771
  var _templateLiteralTag = __webpack_require__(494);
151760
152772
  var _console = __webpack_require__(512);
151761
- var _actions = __webpack_require__(1083);
152773
+ var _actions = __webpack_require__(1084);
151762
152774
  function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
151763
152775
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
151764
152776
  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"); }
@@ -152128,7 +153140,7 @@ function _removeAPIFromCore() {
152128
153140
  }
152129
153141
 
152130
153142
  /***/ }),
152131
- /* 1083 */
153143
+ /* 1084 */
152132
153144
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
152133
153145
 
152134
153146
  "use strict";
@@ -152138,18 +153150,18 @@ exports.__esModule = true;
152138
153150
  exports.registerActions = registerActions;
152139
153151
  __webpack_require__(311);
152140
153152
  __webpack_require__(329);
152141
- var _cellAlignment = __webpack_require__(1084);
152142
- var _columnMove = __webpack_require__(1086);
152143
- var _columnSort = __webpack_require__(1087);
152144
- var _createColumn = __webpack_require__(1088);
152145
- var _createRow = __webpack_require__(1089);
152146
- var _dataChange = __webpack_require__(1090);
152147
- var _filters = __webpack_require__(1091);
152148
- var _mergeCells = __webpack_require__(1092);
152149
- var _removeColumn = __webpack_require__(1093);
152150
- var _removeRow = __webpack_require__(1096);
152151
- var _rowMove = __webpack_require__(1097);
152152
- var _unmergeCells = __webpack_require__(1098);
153153
+ var _cellAlignment = __webpack_require__(1085);
153154
+ var _columnMove = __webpack_require__(1087);
153155
+ var _columnSort = __webpack_require__(1088);
153156
+ var _createColumn = __webpack_require__(1089);
153157
+ var _createRow = __webpack_require__(1090);
153158
+ var _dataChange = __webpack_require__(1091);
153159
+ var _filters = __webpack_require__(1092);
153160
+ var _mergeCells = __webpack_require__(1093);
153161
+ var _removeColumn = __webpack_require__(1094);
153162
+ var _removeRow = __webpack_require__(1097);
153163
+ var _rowMove = __webpack_require__(1098);
153164
+ var _unmergeCells = __webpack_require__(1099);
152153
153165
  /**
152154
153166
  * Register all undo/redo actions.
152155
153167
  *
@@ -152161,7 +153173,7 @@ function registerActions(hot, undoRedoPlugin) {
152161
153173
  }
152162
153174
 
152163
153175
  /***/ }),
152164
- /* 1084 */
153176
+ /* 1085 */
152165
153177
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
152166
153178
 
152167
153179
  "use strict";
@@ -152170,7 +153182,7 @@ function registerActions(hot, undoRedoPlugin) {
152170
153182
  var _interopRequireDefault = __webpack_require__(197);
152171
153183
  exports.__esModule = true;
152172
153184
  var _defineProperty2 = _interopRequireDefault(__webpack_require__(504));
152173
- var _base = __webpack_require__(1085);
153185
+ var _base = __webpack_require__(1086);
152174
153186
  var _utils = __webpack_require__(881);
152175
153187
  var _array = __webpack_require__(495);
152176
153188
  /**
@@ -152250,7 +153262,7 @@ class CellAlignmentAction extends _base.BaseAction {
152250
153262
  exports.CellAlignmentAction = CellAlignmentAction;
152251
153263
 
152252
153264
  /***/ }),
152253
- /* 1085 */
153265
+ /* 1086 */
152254
153266
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
152255
153267
 
152256
153268
  "use strict";
@@ -152284,7 +153296,7 @@ class BaseAction {
152284
153296
  exports.BaseAction = BaseAction;
152285
153297
 
152286
153298
  /***/ }),
152287
- /* 1086 */
153299
+ /* 1087 */
152288
153300
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
152289
153301
 
152290
153302
  "use strict";
@@ -152295,7 +153307,7 @@ exports.__esModule = true;
152295
153307
  __webpack_require__(311);
152296
153308
  __webpack_require__(329);
152297
153309
  var _defineProperty2 = _interopRequireDefault(__webpack_require__(504));
152298
- var _base = __webpack_require__(1085);
153310
+ var _base = __webpack_require__(1086);
152299
153311
  var _moves = __webpack_require__(995);
152300
153312
  /**
152301
153313
  * Action that tracks column move changes.
@@ -152372,7 +153384,7 @@ class ColumnMoveAction extends _base.BaseAction {
152372
153384
  exports.ColumnMoveAction = ColumnMoveAction;
152373
153385
 
152374
153386
  /***/ }),
152375
- /* 1087 */
153387
+ /* 1088 */
152376
153388
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
152377
153389
 
152378
153390
  "use strict";
@@ -152381,7 +153393,7 @@ exports.ColumnMoveAction = ColumnMoveAction;
152381
153393
  var _interopRequireDefault = __webpack_require__(197);
152382
153394
  exports.__esModule = true;
152383
153395
  var _defineProperty2 = _interopRequireDefault(__webpack_require__(504));
152384
- var _base = __webpack_require__(1085);
153396
+ var _base = __webpack_require__(1086);
152385
153397
  /**
152386
153398
  * Action that tracks column sort changes.
152387
153399
  *
@@ -152449,7 +153461,7 @@ class ColumnSortAction extends _base.BaseAction {
152449
153461
  exports.ColumnSortAction = ColumnSortAction;
152450
153462
 
152451
153463
  /***/ }),
152452
- /* 1088 */
153464
+ /* 1089 */
152453
153465
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
152454
153466
 
152455
153467
  "use strict";
@@ -152458,7 +153470,7 @@ exports.ColumnSortAction = ColumnSortAction;
152458
153470
  var _interopRequireDefault = __webpack_require__(197);
152459
153471
  exports.__esModule = true;
152460
153472
  var _defineProperty2 = _interopRequireDefault(__webpack_require__(504));
152461
- var _base = __webpack_require__(1085);
153473
+ var _base = __webpack_require__(1086);
152462
153474
  /**
152463
153475
  * Action that tracks column creation.
152464
153476
  *
@@ -152513,7 +153525,7 @@ class CreateColumnAction extends _base.BaseAction {
152513
153525
  exports.CreateColumnAction = CreateColumnAction;
152514
153526
 
152515
153527
  /***/ }),
152516
- /* 1089 */
153528
+ /* 1090 */
152517
153529
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
152518
153530
 
152519
153531
  "use strict";
@@ -152522,7 +153534,7 @@ exports.CreateColumnAction = CreateColumnAction;
152522
153534
  var _interopRequireDefault = __webpack_require__(197);
152523
153535
  exports.__esModule = true;
152524
153536
  var _defineProperty2 = _interopRequireDefault(__webpack_require__(504));
152525
- var _base = __webpack_require__(1085);
153537
+ var _base = __webpack_require__(1086);
152526
153538
  /**
152527
153539
  * Action that tracks row creation.
152528
153540
  *
@@ -152582,7 +153594,7 @@ class CreateRowAction extends _base.BaseAction {
152582
153594
  exports.CreateRowAction = CreateRowAction;
152583
153595
 
152584
153596
  /***/ }),
152585
- /* 1090 */
153597
+ /* 1091 */
152586
153598
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
152587
153599
 
152588
153600
  "use strict";
@@ -152596,7 +153608,7 @@ __webpack_require__(519);
152596
153608
  __webpack_require__(329);
152597
153609
  __webpack_require__(530);
152598
153610
  var _defineProperty2 = _interopRequireDefault(__webpack_require__(504));
152599
- var _base = __webpack_require__(1085);
153611
+ var _base = __webpack_require__(1086);
152600
153612
  var _object = __webpack_require__(499);
152601
153613
  /**
152602
153614
  * Action that tracks data changes.
@@ -152709,7 +153721,7 @@ class DataChangeAction extends _base.BaseAction {
152709
153721
  exports.DataChangeAction = DataChangeAction;
152710
153722
 
152711
153723
  /***/ }),
152712
- /* 1091 */
153724
+ /* 1092 */
152713
153725
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
152714
153726
 
152715
153727
  "use strict";
@@ -152720,7 +153732,7 @@ exports.__esModule = true;
152720
153732
  __webpack_require__(311);
152721
153733
  __webpack_require__(323);
152722
153734
  var _defineProperty2 = _interopRequireDefault(__webpack_require__(504));
152723
- var _base = __webpack_require__(1085);
153735
+ var _base = __webpack_require__(1086);
152724
153736
  /**
152725
153737
  * Action that tracks filter changes.
152726
153738
  *
@@ -152779,7 +153791,7 @@ class FiltersAction extends _base.BaseAction {
152779
153791
  exports.FiltersAction = FiltersAction;
152780
153792
 
152781
153793
  /***/ }),
152782
- /* 1092 */
153794
+ /* 1093 */
152783
153795
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
152784
153796
 
152785
153797
  "use strict";
@@ -152788,7 +153800,7 @@ exports.FiltersAction = FiltersAction;
152788
153800
  var _interopRequireDefault = __webpack_require__(197);
152789
153801
  exports.__esModule = true;
152790
153802
  var _defineProperty2 = _interopRequireDefault(__webpack_require__(504));
152791
- var _base = __webpack_require__(1085);
153803
+ var _base = __webpack_require__(1086);
152792
153804
  /**
152793
153805
  * Action that tracks changes in merged cells.
152794
153806
  *
@@ -152849,7 +153861,7 @@ class MergeCellsAction extends _base.BaseAction {
152849
153861
  exports.MergeCellsAction = MergeCellsAction;
152850
153862
 
152851
153863
  /***/ }),
152852
- /* 1093 */
153864
+ /* 1094 */
152853
153865
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
152854
153866
 
152855
153867
  "use strict";
@@ -152861,8 +153873,8 @@ __webpack_require__(283);
152861
153873
  __webpack_require__(311);
152862
153874
  __webpack_require__(329);
152863
153875
  var _defineProperty2 = _interopRequireDefault(__webpack_require__(504));
152864
- var _base = __webpack_require__(1085);
152865
- var _utils = __webpack_require__(1094);
153876
+ var _base = __webpack_require__(1086);
153877
+ var _utils = __webpack_require__(1095);
152866
153878
  var _number = __webpack_require__(534);
152867
153879
  var _array = __webpack_require__(495);
152868
153880
  /**
@@ -152890,7 +153902,7 @@ class RemoveColumnAction extends _base.BaseAction {
152890
153902
  */
152891
153903
  (0, _defineProperty2.default)(this, "index", void 0);
152892
153904
  /**
152893
- * @param {number[]} indexes The visual column indexes.
153905
+ * @param {number[]} indexes The physical column indexes.
152894
153906
  */
152895
153907
  (0, _defineProperty2.default)(this, "indexes", void 0);
152896
153908
  /**
@@ -152956,16 +153968,14 @@ class RemoveColumnAction extends _base.BaseAction {
152956
153968
  headers.push(hot.getSettings().colHeaders[hot.toPhysicalColumn(columnIndex + i)] || null);
152957
153969
  });
152958
153970
  }
152959
- const columnsMap = hot.columnIndexMapper.getIndexesSequence();
152960
- const rowsMap = hot.rowIndexMapper.getIndexesSequence();
152961
153971
  return new RemoveColumnAction({
152962
153972
  index: columnIndex,
152963
153973
  indexes,
152964
153974
  data: removedData,
152965
153975
  amount,
152966
153976
  headers,
152967
- columnPositions: columnsMap,
152968
- rowPositions: rowsMap,
153977
+ columnPositions: hot.columnIndexMapper.getIndexesSequence(),
153978
+ rowPositions: hot.rowIndexMapper.getIndexesSequence(),
152969
153979
  fixedColumnsStart: hot.getSettings().fixedColumnsStart,
152970
153980
  removedCellMetas: (0, _utils.getCellMetas)(hot, 0, hot.countRows(), columnIndex, lastColumnIndex)
152971
153981
  });
@@ -152992,14 +154002,27 @@ class RemoveColumnAction extends _base.BaseAction {
152992
154002
  }
152993
154003
  const sortedHeaders = (0, _array.arrayMap)(this.headers, sortByIndexes);
152994
154004
  const changes = [];
152995
- hot.alter('insert_col_start', this.indexes[0], this.indexes.length, 'UndoRedo.undo');
154005
+
154006
+ // The indexes sequence have to be applied twice.
154007
+ // * First for proper index translation. The alter method accepts a visual index
154008
+ // and we are able to retrieve the correct index indicating where to add a new row based
154009
+ // only on the previous order state of the columns;
154010
+ // * The alter method shifts the indexes (a side-effect), so we need to reapply the indexes sequence
154011
+ // the same as it was in the previous state;
154012
+ hot.columnIndexMapper.setIndexesSequence(this.columnPositions);
154013
+ hot.alter('insert_col_start', hot.toVisualColumn(this.indexes[0]), this.indexes.length, 'UndoRedo.undo');
154014
+ hot.batchExecution(() => {
154015
+ // Restore row sequence in a case when all columns are removed. the original
154016
+ // row sequence is lost in that case.
154017
+ hot.rowIndexMapper.setIndexesSequence(this.rowPositions);
154018
+ hot.columnIndexMapper.setIndexesSequence(this.columnPositions);
154019
+ }, true);
152996
154020
  (0, _array.arrayEach)(hot.getSourceDataArray(), (rowData, rowIndex) => {
152997
154021
  (0, _array.arrayEach)(ascendingIndexes, (changedIndex, contiquesIndex) => {
152998
154022
  rowData[changedIndex] = sortedData[rowIndex][contiquesIndex];
152999
154023
  changes.push([rowIndex, changedIndex, rowData[changedIndex]]);
153000
154024
  });
153001
154025
  });
153002
- hot.setSourceDataAtCell(changes, undefined, undefined, 'UndoRedo.undo');
153003
154026
  if (typeof this.headers !== 'undefined') {
153004
154027
  (0, _array.arrayEach)(sortedHeaders, (headerData, columnIndex) => {
153005
154028
  hot.getSettings().colHeaders[ascendingIndexes[columnIndex]] = headerData;
@@ -153009,14 +154032,8 @@ class RemoveColumnAction extends _base.BaseAction {
153009
154032
  let [rowIndex, columnIndex, cellMeta] = _ref2;
153010
154033
  hot.setCellMetaObject(rowIndex, columnIndex, cellMeta);
153011
154034
  });
153012
- hot.batchExecution(() => {
153013
- // Restore row sequence in a case when all columns are removed. the original
153014
- // row sequence is lost in that case.
153015
- hot.rowIndexMapper.setIndexesSequence(this.rowPositions);
153016
- hot.columnIndexMapper.setIndexesSequence(this.columnPositions);
153017
- }, true);
153018
154035
  hot.addHookOnce('afterViewRender', undoneCallback);
153019
- hot.render();
154036
+ hot.setSourceDataAtCell(changes, null, null, 'UndoRedo.undo');
153020
154037
  }
153021
154038
 
153022
154039
  /**
@@ -153031,7 +154048,7 @@ class RemoveColumnAction extends _base.BaseAction {
153031
154048
  exports.RemoveColumnAction = RemoveColumnAction;
153032
154049
 
153033
154050
  /***/ }),
153034
- /* 1094 */
154051
+ /* 1095 */
153035
154052
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
153036
154053
 
153037
154054
  "use strict";
@@ -153040,7 +154057,7 @@ exports.RemoveColumnAction = RemoveColumnAction;
153040
154057
  exports.__esModule = true;
153041
154058
  exports.getCellMetas = getCellMetas;
153042
154059
  __webpack_require__(283);
153043
- __webpack_require__(1095);
154060
+ __webpack_require__(1096);
153044
154061
  __webpack_require__(311);
153045
154062
  __webpack_require__(323);
153046
154063
  var _number = __webpack_require__(534);
@@ -153074,7 +154091,7 @@ function getCellMetas(hot, fromRow, toRow, fromColumn, toColumn) {
153074
154091
  }
153075
154092
 
153076
154093
  /***/ }),
153077
- /* 1095 */
154094
+ /* 1096 */
153078
154095
  /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
153079
154096
 
153080
154097
  "use strict";
@@ -153097,7 +154114,7 @@ $({ target: 'Object', stat: true }, {
153097
154114
 
153098
154115
 
153099
154116
  /***/ }),
153100
- /* 1096 */
154117
+ /* 1097 */
153101
154118
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
153102
154119
 
153103
154120
  "use strict";
@@ -153109,8 +154126,8 @@ __webpack_require__(283);
153109
154126
  __webpack_require__(311);
153110
154127
  __webpack_require__(329);
153111
154128
  var _defineProperty2 = _interopRequireDefault(__webpack_require__(504));
153112
- var _base = __webpack_require__(1085);
153113
- var _utils = __webpack_require__(1094);
154129
+ var _base = __webpack_require__(1086);
154130
+ var _utils = __webpack_require__(1095);
153114
154131
  var _object = __webpack_require__(499);
153115
154132
  /**
153116
154133
  * Action that tracks changes in row removal.
@@ -153130,7 +154147,7 @@ class RemoveRowAction extends _base.BaseAction {
153130
154147
  } = _ref;
153131
154148
  super('remove_row');
153132
154149
  /**
153133
- * @param {number} index The visual row index.
154150
+ * @param {number} index The physical row index.
153134
154151
  */
153135
154152
  (0, _defineProperty2.default)(this, "index", void 0);
153136
154153
  /**
@@ -153198,14 +154215,22 @@ class RemoveRowAction extends _base.BaseAction {
153198
154215
  changes.push([this.index + rowIndexDelta, isNaN(columnIndex) ? columnProp : columnIndex, dataRow[columnProp]]);
153199
154216
  });
153200
154217
  });
153201
- hot.alter('insert_row_above', this.index, this.data.length, 'UndoRedo.undo');
154218
+
154219
+ // The indexes sequence have to be applied twice.
154220
+ // * First for proper index translation. The alter method accepts a visual index
154221
+ // and we are able to retrieve the correct index indicating where to add a new row based
154222
+ // only on the previous order state of the rows;
154223
+ // * The alter method shifts the indexes (a side-effect), so we need to reapply the indexes sequence
154224
+ // the same as it was in the previous state;
154225
+ hot.rowIndexMapper.setIndexesSequence(this.rowIndexesSequence);
154226
+ hot.alter('insert_row_above', hot.toVisualRow(this.index), this.data.length, 'UndoRedo.undo');
154227
+ hot.rowIndexMapper.setIndexesSequence(this.rowIndexesSequence);
153202
154228
  this.removedCellMetas.forEach(_ref2 => {
153203
154229
  let [rowIndex, columnIndex, cellMeta] = _ref2;
153204
154230
  hot.setCellMetaObject(rowIndex, columnIndex, cellMeta);
153205
154231
  });
153206
154232
  hot.addHookOnce('afterViewRender', undoneCallback);
153207
154233
  hot.setSourceDataAtCell(changes, null, null, 'UndoRedo.undo');
153208
- hot.rowIndexMapper.setIndexesSequence(this.rowIndexesSequence);
153209
154234
  }
153210
154235
 
153211
154236
  /**
@@ -153214,13 +154239,13 @@ class RemoveRowAction extends _base.BaseAction {
153214
154239
  */
153215
154240
  redo(hot, redoneCallback) {
153216
154241
  hot.addHookOnce('afterRemoveRow', redoneCallback);
153217
- hot.alter('remove_row', this.index, this.data.length, 'UndoRedo.redo');
154242
+ hot.alter('remove_row', hot.toVisualRow(this.index), this.data.length, 'UndoRedo.redo');
153218
154243
  }
153219
154244
  }
153220
154245
  exports.RemoveRowAction = RemoveRowAction;
153221
154246
 
153222
154247
  /***/ }),
153223
- /* 1097 */
154248
+ /* 1098 */
153224
154249
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
153225
154250
 
153226
154251
  "use strict";
@@ -153231,7 +154256,7 @@ exports.__esModule = true;
153231
154256
  __webpack_require__(311);
153232
154257
  __webpack_require__(329);
153233
154258
  var _defineProperty2 = _interopRequireDefault(__webpack_require__(504));
153234
- var _base = __webpack_require__(1085);
154259
+ var _base = __webpack_require__(1086);
153235
154260
  var _moves = __webpack_require__(995);
153236
154261
  /**
153237
154262
  * Action that tracks row move changes.
@@ -153308,7 +154333,7 @@ class RowMoveAction extends _base.BaseAction {
153308
154333
  exports.RowMoveAction = RowMoveAction;
153309
154334
 
153310
154335
  /***/ }),
153311
- /* 1098 */
154336
+ /* 1099 */
153312
154337
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
153313
154338
 
153314
154339
  "use strict";
@@ -153317,7 +154342,7 @@ exports.RowMoveAction = RowMoveAction;
153317
154342
  var _interopRequireDefault = __webpack_require__(197);
153318
154343
  exports.__esModule = true;
153319
154344
  var _defineProperty2 = _interopRequireDefault(__webpack_require__(504));
153320
- var _base = __webpack_require__(1085);
154345
+ var _base = __webpack_require__(1086);
153321
154346
  /**
153322
154347
  * Action that tracks changes in merged cells.
153323
154348
  *
@@ -153371,7 +154396,7 @@ class UnmergeCellsAction extends _base.BaseAction {
153371
154396
  exports.UnmergeCellsAction = UnmergeCellsAction;
153372
154397
 
153373
154398
  /***/ }),
153374
- /* 1099 */
154399
+ /* 1100 */
153375
154400
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
153376
154401
 
153377
154402
  "use strict";