handsontable 12.3.3 → 12.4.0-next-ddbea0c-20230512

Sign up to get free protection for your applications and to get access to all the features.
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>']));