handsontable 12.3.3 → 12.4.0-next-acb5d99-20230512

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.
Files changed (172) hide show
  1. package/3rdparty/walkontable/src/cell/coords.js +13 -16
  2. package/3rdparty/walkontable/src/cell/coords.mjs +13 -16
  3. package/3rdparty/walkontable/src/cell/range.js +25 -29
  4. package/3rdparty/walkontable/src/cell/range.mjs +24 -28
  5. package/3rdparty/walkontable/src/core/_base.js +16 -20
  6. package/3rdparty/walkontable/src/core/_base.mjs +16 -20
  7. package/3rdparty/walkontable/src/event.js +4 -0
  8. package/3rdparty/walkontable/src/event.mjs +4 -0
  9. package/3rdparty/walkontable/src/overlay/_base.js +6 -7
  10. package/3rdparty/walkontable/src/overlay/_base.mjs +6 -7
  11. package/3rdparty/walkontable/src/overlay/bottom.js +6 -7
  12. package/3rdparty/walkontable/src/overlay/bottom.mjs +6 -7
  13. package/3rdparty/walkontable/src/overlay/top.js +6 -7
  14. package/3rdparty/walkontable/src/overlay/top.mjs +6 -7
  15. package/3rdparty/walkontable/src/overlay/topInlineStartCorner.js +10 -12
  16. package/3rdparty/walkontable/src/overlay/topInlineStartCorner.mjs +10 -12
  17. package/3rdparty/walkontable/src/overlays.js +55 -64
  18. package/3rdparty/walkontable/src/overlays.mjs +55 -64
  19. package/3rdparty/walkontable/src/scroll.js +20 -23
  20. package/3rdparty/walkontable/src/scroll.mjs +20 -23
  21. package/3rdparty/walkontable/src/settings.js +13 -15
  22. package/3rdparty/walkontable/src/settings.mjs +13 -15
  23. package/3rdparty/walkontable/src/table.js +22 -26
  24. package/3rdparty/walkontable/src/table.mjs +22 -26
  25. package/CHANGELOG.md +14 -0
  26. package/base.js +2 -4
  27. package/base.mjs +2 -2
  28. package/core.js +23 -6
  29. package/core.mjs +23 -6
  30. package/dataMap/dataSource.js +5 -5
  31. package/dataMap/dataSource.mjs +5 -5
  32. package/dataMap/metaManager/metaSchema.js +9 -7
  33. package/dataMap/metaManager/metaSchema.mjs +9 -7
  34. package/dist/handsontable.css +2 -2
  35. package/dist/handsontable.full.css +2 -2
  36. package/dist/handsontable.full.js +7364 -5992
  37. package/dist/handsontable.full.min.css +2 -2
  38. package/dist/handsontable.full.min.js +256 -234
  39. package/dist/handsontable.js +4326 -3275
  40. package/dist/handsontable.min.css +2 -2
  41. package/dist/handsontable.min.js +11 -3
  42. package/dist/languages/all.js +133 -0
  43. package/dist/languages/ar-AR.js +7 -0
  44. package/dist/languages/cs-CZ.js +7 -0
  45. package/dist/languages/de-CH.js +7 -0
  46. package/dist/languages/de-DE.js +7 -0
  47. package/dist/languages/en-US.js +7 -0
  48. package/dist/languages/es-MX.js +7 -0
  49. package/dist/languages/fr-FR.js +7 -0
  50. package/dist/languages/it-IT.js +7 -0
  51. package/dist/languages/ja-JP.js +7 -0
  52. package/dist/languages/ko-KR.js +7 -0
  53. package/dist/languages/lv-LV.js +7 -0
  54. package/dist/languages/nb-NO.js +7 -0
  55. package/dist/languages/nl-NL.js +7 -0
  56. package/dist/languages/pl-PL.js +7 -0
  57. package/dist/languages/pt-BR.js +7 -0
  58. package/dist/languages/ru-RU.js +7 -0
  59. package/dist/languages/sr-SP.js +7 -0
  60. package/dist/languages/zh-CN.js +7 -0
  61. package/dist/languages/zh-TW.js +7 -0
  62. package/editors/autocompleteEditor/autocompleteEditor.js +8 -9
  63. package/editors/autocompleteEditor/autocompleteEditor.mjs +8 -9
  64. package/helpers/mixed.js +2 -2
  65. package/helpers/mixed.mjs +2 -2
  66. package/i18n/languages/ar-AR.js +7 -1
  67. package/i18n/languages/cs-CZ.js +7 -1
  68. package/i18n/languages/de-CH.js +7 -1
  69. package/i18n/languages/de-DE.js +7 -1
  70. package/i18n/languages/en-US.js +7 -1
  71. package/i18n/languages/es-MX.js +7 -1
  72. package/i18n/languages/fr-FR.js +7 -1
  73. package/i18n/languages/it-IT.js +7 -1
  74. package/i18n/languages/ja-JP.js +7 -1
  75. package/i18n/languages/ko-KR.js +7 -1
  76. package/i18n/languages/lv-LV.js +7 -1
  77. package/i18n/languages/nb-NO.js +7 -1
  78. package/i18n/languages/nl-NL.js +7 -1
  79. package/i18n/languages/pl-PL.js +7 -1
  80. package/i18n/languages/pt-BR.js +7 -1
  81. package/i18n/languages/ru-RU.js +7 -1
  82. package/i18n/languages/sr-SP.js +7 -1
  83. package/i18n/languages/zh-CN.js +7 -1
  84. package/i18n/languages/zh-TW.js +7 -1
  85. package/languages/all.js +133 -0
  86. package/languages/ar-AR.js +7 -0
  87. package/languages/cs-CZ.js +7 -0
  88. package/languages/de-CH.js +7 -0
  89. package/languages/de-DE.js +7 -0
  90. package/languages/en-US.js +7 -0
  91. package/languages/es-MX.js +7 -0
  92. package/languages/fr-FR.js +7 -0
  93. package/languages/index.js +133 -0
  94. package/languages/it-IT.js +7 -0
  95. package/languages/ja-JP.js +7 -0
  96. package/languages/ko-KR.js +7 -0
  97. package/languages/lv-LV.js +7 -0
  98. package/languages/nb-NO.js +7 -0
  99. package/languages/nl-NL.js +7 -0
  100. package/languages/pl-PL.js +7 -0
  101. package/languages/pt-BR.js +7 -0
  102. package/languages/ru-RU.js +7 -0
  103. package/languages/sr-SP.js +7 -0
  104. package/languages/zh-CN.js +7 -0
  105. package/languages/zh-TW.js +7 -0
  106. package/package.json +3 -2
  107. package/pluginHooks.js +16 -6
  108. package/pluginHooks.mjs +15 -3
  109. package/plugins/autoRowSize/autoRowSize.js +2 -2
  110. package/plugins/autoRowSize/autoRowSize.mjs +2 -2
  111. package/plugins/base/base.js +9 -10
  112. package/plugins/base/base.mjs +9 -10
  113. package/plugins/collapsibleColumns/collapsibleColumns.js +24 -7
  114. package/plugins/collapsibleColumns/collapsibleColumns.mjs +24 -7
  115. package/plugins/copyPaste/copyPaste.js +92 -16
  116. package/plugins/copyPaste/copyPaste.mjs +92 -16
  117. package/plugins/copyPaste/copyableRanges.js +39 -39
  118. package/plugins/copyPaste/copyableRanges.mjs +32 -32
  119. package/plugins/customBorders/customBorders.d.ts +2 -0
  120. package/plugins/customBorders/customBorders.js +6 -7
  121. package/plugins/customBorders/customBorders.mjs +6 -7
  122. package/plugins/filters/filters.js +5 -0
  123. package/plugins/filters/filters.mjs +5 -0
  124. package/plugins/formulas/engine/register.js +9 -0
  125. package/plugins/formulas/engine/register.mjs +13 -4
  126. package/plugins/formulas/engine/settings.js +18 -3
  127. package/plugins/formulas/engine/settings.mjs +16 -3
  128. package/plugins/formulas/formulas.js +308 -162
  129. package/plugins/formulas/formulas.mjs +308 -163
  130. package/plugins/formulas/indexSyncer/axisSyncer.js +379 -0
  131. package/plugins/formulas/indexSyncer/axisSyncer.mjs +374 -0
  132. package/plugins/formulas/indexSyncer/index.js +225 -0
  133. package/plugins/formulas/indexSyncer/index.mjs +219 -0
  134. package/plugins/formulas/utils.js +81 -0
  135. package/plugins/formulas/utils.mjs +74 -0
  136. package/plugins/hiddenColumns/hiddenColumns.js +12 -7
  137. package/plugins/hiddenColumns/hiddenColumns.mjs +12 -7
  138. package/plugins/hiddenRows/hiddenRows.js +12 -7
  139. package/plugins/hiddenRows/hiddenRows.mjs +12 -7
  140. package/plugins/manualRowMove/manualRowMove.js +26 -11
  141. package/plugins/manualRowMove/manualRowMove.mjs +27 -12
  142. package/plugins/nestedHeaders/nestedHeaders.js +26 -7
  143. package/plugins/nestedHeaders/nestedHeaders.mjs +26 -7
  144. package/plugins/nestedHeaders/stateManager/headersTree.js +23 -26
  145. package/plugins/nestedHeaders/stateManager/headersTree.mjs +20 -23
  146. package/plugins/nestedHeaders/stateManager/index.js +21 -3
  147. package/plugins/nestedHeaders/stateManager/index.mjs +18 -0
  148. package/plugins/nestedHeaders/stateManager/matrixGenerator.js +1 -0
  149. package/plugins/nestedHeaders/stateManager/settingsNormalizer.js +1 -1
  150. package/plugins/nestedHeaders/stateManager/sourceSettings.js +19 -0
  151. package/plugins/nestedHeaders/stateManager/sourceSettings.mjs +19 -0
  152. package/plugins/nestedHeaders/utils/ghostTable.js +30 -35
  153. package/plugins/nestedHeaders/utils/ghostTable.mjs +30 -35
  154. package/plugins/registry.js +3 -1
  155. package/plugins/undoRedo/undoRedo.js +0 -1
  156. package/plugins/undoRedo/undoRedo.mjs +0 -1
  157. package/selection/highlight/visualSelection.js +5 -6
  158. package/selection/highlight/visualSelection.mjs +5 -6
  159. package/tableView.js +62 -72
  160. package/tableView.mjs +62 -72
  161. package/translations/changesObservable/observable.js +41 -46
  162. package/translations/changesObservable/observable.mjs +36 -41
  163. package/translations/changesObservable/observer.js +8 -1
  164. package/translations/changesObservable/observer.mjs +7 -0
  165. package/translations/indexMapper.js +21 -0
  166. package/translations/indexMapper.mjs +21 -0
  167. package/translations/maps/linkedPhysicalIndexToValueMap.js +6 -0
  168. package/translations/maps/linkedPhysicalIndexToValueMap.mjs +6 -0
  169. package/utils/dataStructures/tree.js +15 -18
  170. package/utils/dataStructures/tree.mjs +15 -18
  171. package/utils/parseTable.js +5 -1
  172. package/utils/parseTable.mjs +5 -1
@@ -155,6 +155,12 @@ export var IndexMapper = /*#__PURE__*/function () {
155
155
  * @type {boolean}
156
156
  */
157
157
  this.indexesSequenceChanged = false;
158
+ /**
159
+ * Flag informing about source of the change.
160
+ *
161
+ * @type {undefined|string}
162
+ */
163
+ this.indexesChangeSource = void 0;
158
164
  /**
159
165
  * Flag determining whether any action on trimmed indexes has been performed. It's used for cache management.
160
166
  *
@@ -195,6 +201,7 @@ export var IndexMapper = /*#__PURE__*/function () {
195
201
 
196
202
  // Sequence of stored indexes might change.
197
203
  _this.updateCache();
204
+ _this.runLocalHooks('indexesSequenceChange', _this.indexesChangeSource);
198
205
  _this.runLocalHooks('change', _this.indexesSequence, null);
199
206
  });
200
207
  this.trimmingMapsCollection.addLocalHook('change', function (changedMap) {
@@ -515,7 +522,9 @@ export var IndexMapper = /*#__PURE__*/function () {
515
522
  this.notTrimmedIndexesCache = _toConsumableArray(new Array(length).keys());
516
523
  this.notHiddenIndexesCache = _toConsumableArray(new Array(length).keys());
517
524
  this.suspendOperations();
525
+ this.indexesChangeSource = 'init';
518
526
  this.indexesSequence.init(length);
527
+ this.indexesChangeSource = void 0;
519
528
  this.trimmingMapsCollection.initEvery(length);
520
529
  this.resumeOperations();
521
530
 
@@ -567,7 +576,13 @@ export var IndexMapper = /*#__PURE__*/function () {
567
576
  }, {
568
577
  key: "setIndexesSequence",
569
578
  value: function setIndexesSequence(indexes) {
579
+ if (this.indexesChangeSource === void 0) {
580
+ this.indexesChangeSource = 'update';
581
+ }
570
582
  this.indexesSequence.setValues(indexes);
583
+ if (this.indexesChangeSource === 'update') {
584
+ this.indexesChangeSource = void 0;
585
+ }
571
586
  }
572
587
 
573
588
  /**
@@ -717,9 +732,11 @@ export var IndexMapper = /*#__PURE__*/function () {
717
732
  })[finalIndex];
718
733
  destinationPosition = listWithRemovedItems.indexOf(physicalIndex);
719
734
  }
735
+ this.indexesChangeSource = 'move';
720
736
 
721
737
  // Adding indexes without re-indexing.
722
738
  this.setIndexesSequence(getListWithInsertedItems(listWithRemovedItems, destinationPosition, physicalMovedIndexes));
739
+ this.indexesChangeSource = void 0;
723
740
  }
724
741
 
725
742
  /**
@@ -763,7 +780,9 @@ export var IndexMapper = /*#__PURE__*/function () {
763
780
  return nextIndex + stepsFromStart;
764
781
  });
765
782
  this.suspendOperations();
783
+ this.indexesChangeSource = 'insert';
766
784
  this.indexesSequence.insert(insertionIndex, insertedIndexes);
785
+ this.indexesChangeSource = void 0;
767
786
  this.trimmingMapsCollection.insertToEvery(insertionIndex, insertedIndexes);
768
787
  this.hidingMapsCollection.insertToEvery(insertionIndex, insertedIndexes);
769
788
  this.variousMapsCollection.insertToEvery(insertionIndex, insertedIndexes);
@@ -780,7 +799,9 @@ export var IndexMapper = /*#__PURE__*/function () {
780
799
  key: "removeIndexes",
781
800
  value: function removeIndexes(removedIndexes) {
782
801
  this.suspendOperations();
802
+ this.indexesChangeSource = 'remove';
783
803
  this.indexesSequence.remove(removedIndexes);
804
+ this.indexesChangeSource = void 0;
784
805
  this.trimmingMapsCollection.removeFromEvery(removedIndexes);
785
806
  this.hidingMapsCollection.removeFromEvery(removedIndexes);
786
807
  this.variousMapsCollection.removeFromEvery(removedIndexes);
@@ -71,6 +71,12 @@ var LinkedPhysicalIndexToValueMap = /*#__PURE__*/function (_IndexMap) {
71
71
  args[_key] = arguments[_key];
72
72
  }
73
73
  _this = _super.call.apply(_super, [this].concat(args));
74
+ /**
75
+ * Indexes and values corresponding to them (entries) are stored in a certain order.
76
+ *
77
+ * @private
78
+ * @type {Array<number>}
79
+ */
74
80
  _defineProperty(_assertThisInitialized(_this), "orderOfIndexes", []);
75
81
  return _this;
76
82
  }
@@ -67,6 +67,12 @@ export var LinkedPhysicalIndexToValueMap = /*#__PURE__*/function (_IndexMap) {
67
67
  args[_key] = arguments[_key];
68
68
  }
69
69
  _this = _super.call.apply(_super, [this].concat(args));
70
+ /**
71
+ * Indexes and values corresponding to them (entries) are stored in a certain order.
72
+ *
73
+ * @private
74
+ * @type {Array<number>}
75
+ */
70
76
  _defineProperty(_assertThisInitialized(_this), "orderOfIndexes", []);
71
77
  return _this;
72
78
  }
@@ -130,28 +130,25 @@ var TRAVERSAL_STRATEGIES = new Map([[TRAVERSAL_DF_PRE, depthFirstPreOrder], [TRA
130
130
  *
131
131
  */
132
132
  var TreeNode = /*#__PURE__*/function () {
133
- /**
134
- * A tree data.
135
- *
136
- * @type {object}
137
- */
138
-
139
- /**
140
- * A parent node.
141
- *
142
- * @type {TreeNode}
143
- */
144
-
145
- /**
146
- * A tree leaves.
147
- *
148
- * @type {TreeNode[]}
149
- */
150
-
151
133
  function TreeNode(data) {
152
134
  _classCallCheck(this, TreeNode);
135
+ /**
136
+ * A tree data.
137
+ *
138
+ * @type {object}
139
+ */
153
140
  _defineProperty(this, "data", {});
141
+ /**
142
+ * A parent node.
143
+ *
144
+ * @type {TreeNode}
145
+ */
154
146
  _defineProperty(this, "parent", null);
147
+ /**
148
+ * A tree leaves.
149
+ *
150
+ * @type {TreeNode[]}
151
+ */
155
152
  _defineProperty(this, "childs", []);
156
153
  this.data = data;
157
154
  }
@@ -122,28 +122,25 @@ var TRAVERSAL_STRATEGIES = new Map([[TRAVERSAL_DF_PRE, depthFirstPreOrder], [TRA
122
122
  *
123
123
  */
124
124
  var TreeNode = /*#__PURE__*/function () {
125
- /**
126
- * A tree data.
127
- *
128
- * @type {object}
129
- */
130
-
131
- /**
132
- * A parent node.
133
- *
134
- * @type {TreeNode}
135
- */
136
-
137
- /**
138
- * A tree leaves.
139
- *
140
- * @type {TreeNode[]}
141
- */
142
-
143
125
  function TreeNode(data) {
144
126
  _classCallCheck(this, TreeNode);
127
+ /**
128
+ * A tree data.
129
+ *
130
+ * @type {object}
131
+ */
145
132
  _defineProperty(this, "data", {});
133
+ /**
134
+ * A parent node.
135
+ *
136
+ * @type {TreeNode}
137
+ */
146
138
  _defineProperty(this, "parent", null);
139
+ /**
140
+ * A tree leaves.
141
+ *
142
+ * @type {TreeNode[]}
143
+ */
147
144
  _defineProperty(this, "childs", []);
148
145
  this.data = data;
149
146
  }
@@ -21,6 +21,7 @@ require("core-js/modules/es.string.replace.js");
21
21
  require("core-js/modules/es.object.to-string.js");
22
22
  require("core-js/modules/es.array.concat.js");
23
23
  require("core-js/modules/es.array.splice.js");
24
+ require("core-js/modules/es.string.repeat.js");
24
25
  require("core-js/modules/es.string.match.js");
25
26
  require("core-js/modules/es.array.last-index-of.js");
26
27
  require("core-js/modules/es.array.reduce.js");
@@ -139,7 +140,10 @@ function _dataToHTML(input) {
139
140
  }
140
141
  for (var column = 0; column < columnsLen; column += 1) {
141
142
  var cellData = rowData[column];
142
- var parsedCellData = (0, _mixed.isEmpty)(cellData) ? '' : cellData.toString().replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/(<br(\s*|\/)>(\r\n|\n)?|\r\n|\n)/g, '<br>\r\n').replace(/\x20/gi, '&nbsp;').replace(/\t/gi, '&#9;');
143
+ var parsedCellData = (0, _mixed.isEmpty)(cellData) ? '' : cellData.toString().replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/(<br(\s*|\/)>(\r\n|\n)?|\r\n|\n)/g, '<br>\r\n').replace(/\x20{2,}/gi, function (substring) {
144
+ // The way how Excel serializes data with at least two spaces.
145
+ return "<span style=\"mso-spacerun: yes\">".concat('&nbsp;'.repeat(substring.length - 1), " </span>");
146
+ }).replace(/\t/gi, '&#9;');
143
147
  columnsResult.push("<td>".concat(parsedCellData, "</td>"));
144
148
  }
145
149
  result.push.apply(result, ['<tr>'].concat(columnsResult, ['</tr>']));
@@ -14,6 +14,7 @@ import "core-js/modules/es.string.replace.js";
14
14
  import "core-js/modules/es.object.to-string.js";
15
15
  import "core-js/modules/es.array.concat.js";
16
16
  import "core-js/modules/es.array.splice.js";
17
+ import "core-js/modules/es.string.repeat.js";
17
18
  import "core-js/modules/es.string.match.js";
18
19
  import "core-js/modules/es.array.last-index-of.js";
19
20
  import "core-js/modules/es.array.reduce.js";
@@ -133,7 +134,10 @@ export function _dataToHTML(input) {
133
134
  }
134
135
  for (var column = 0; column < columnsLen; column += 1) {
135
136
  var cellData = rowData[column];
136
- var parsedCellData = isEmpty(cellData) ? '' : cellData.toString().replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/(<br(\s*|\/)>(\r\n|\n)?|\r\n|\n)/g, '<br>\r\n').replace(/\x20/gi, '&nbsp;').replace(/\t/gi, '&#9;');
137
+ var parsedCellData = isEmpty(cellData) ? '' : cellData.toString().replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/(<br(\s*|\/)>(\r\n|\n)?|\r\n|\n)/g, '<br>\r\n').replace(/\x20{2,}/gi, function (substring) {
138
+ // The way how Excel serializes data with at least two spaces.
139
+ return "<span style=\"mso-spacerun: yes\">".concat('&nbsp;'.repeat(substring.length - 1), " </span>");
140
+ }).replace(/\t/gi, '&#9;');
137
141
  columnsResult.push("<td>".concat(parsedCellData, "</td>"));
138
142
  }
139
143
  result.push.apply(result, ['<tr>'].concat(columnsResult, ['</tr>']));