handsontable 12.3.3 → 12.4.0-next-ddbea0c-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
package/tableView.js CHANGED
@@ -58,98 +58,88 @@ var privatePool = new WeakMap();
58
58
  var _columnHeadersCount = /*#__PURE__*/new WeakMap();
59
59
  var _rowHeadersCount = /*#__PURE__*/new WeakMap();
60
60
  var TableView = /*#__PURE__*/function () {
61
- /**
62
- * Instance of {@link Handsontable}.
63
- *
64
- * @private
65
- * @type {Handsontable}
66
- */
67
-
68
- /**
69
- * Instance of {@link EventManager}.
70
- *
71
- * @private
72
- * @type {EventManager}
73
- */
74
-
75
- /**
76
- * Current Handsontable's GridSettings object.
77
- *
78
- * @private
79
- * @type {GridSettings}
80
- */
81
-
82
- /**
83
- * Main <THEAD> element.
84
- *
85
- * @private
86
- * @type {HTMLTableSectionElement}
87
- */
88
-
89
- /**
90
- * Main <TBODY> element.
91
- *
92
- * @private
93
- * @type {HTMLTableSectionElement}
94
- */
95
-
96
- /**
97
- * Main Walkontable instance.
98
- *
99
- * @private
100
- * @type {Walkontable}
101
- */
102
-
103
- /**
104
- * Main Walkontable instance.
105
- *
106
- * @private
107
- * @type {Walkontable}
108
- */
109
-
110
- /**
111
- * The total number of the column header renderers applied to the table through the
112
- * `afterGetColumnHeaderRenderers` hook.
113
- *
114
- * @type {number}
115
- */
116
-
117
- /**
118
- * The total number of the row header renderers applied to the table through the
119
- * `afterGetRowHeaderRenderers` hook.
120
- *
121
- * @type {number}
122
- */
123
-
124
- /**
125
- * The flag determines if the `adjustElementsSize` method call was made during
126
- * the render suspending. If true, the method has to be triggered once after render
127
- * resuming.
128
- *
129
- * @private
130
- * @type {boolean}
131
- */
132
-
133
61
  /**
134
62
  * @param {Hanstontable} instance Instance of {@link Handsontable}.
135
63
  */
136
64
  function TableView(instance) {
137
65
  _classCallCheck(this, TableView);
66
+ /**
67
+ * Instance of {@link Handsontable}.
68
+ *
69
+ * @private
70
+ * @type {Handsontable}
71
+ */
138
72
  _defineProperty(this, "instance", void 0);
73
+ /**
74
+ * Instance of {@link EventManager}.
75
+ *
76
+ * @private
77
+ * @type {EventManager}
78
+ */
139
79
  _defineProperty(this, "eventManager", void 0);
80
+ /**
81
+ * Current Handsontable's GridSettings object.
82
+ *
83
+ * @private
84
+ * @type {GridSettings}
85
+ */
140
86
  _defineProperty(this, "settings", void 0);
87
+ /**
88
+ * Main <THEAD> element.
89
+ *
90
+ * @private
91
+ * @type {HTMLTableSectionElement}
92
+ */
141
93
  _defineProperty(this, "THEAD", void 0);
94
+ /**
95
+ * Main <TBODY> element.
96
+ *
97
+ * @private
98
+ * @type {HTMLTableSectionElement}
99
+ */
142
100
  _defineProperty(this, "TBODY", void 0);
101
+ /**
102
+ * Main Walkontable instance.
103
+ *
104
+ * @private
105
+ * @type {Walkontable}
106
+ */
143
107
  _defineProperty(this, "_wt", void 0);
108
+ /**
109
+ * Main Walkontable instance.
110
+ *
111
+ * @private
112
+ * @type {Walkontable}
113
+ */
144
114
  _defineProperty(this, "activeWt", void 0);
115
+ /**
116
+ * The total number of the column header renderers applied to the table through the
117
+ * `afterGetColumnHeaderRenderers` hook.
118
+ *
119
+ * @type {number}
120
+ */
145
121
  _classPrivateFieldInitSpec(this, _columnHeadersCount, {
146
122
  writable: true,
147
123
  value: 0
148
124
  });
125
+ /**
126
+ * The total number of the row header renderers applied to the table through the
127
+ * `afterGetRowHeaderRenderers` hook.
128
+ *
129
+ * @type {number}
130
+ */
149
131
  _classPrivateFieldInitSpec(this, _rowHeadersCount, {
150
132
  writable: true,
151
133
  value: 0
152
134
  });
135
+ /**
136
+ * The flag determines if the `adjustElementsSize` method call was made during
137
+ * the render suspending. If true, the method has to be triggered once after render
138
+ * resuming.
139
+ *
140
+ * @private
141
+ * @type {boolean}
142
+ */
153
143
  _defineProperty(this, "postponedAdjustElementsSize", false);
154
144
  this.instance = instance;
155
145
  this.eventManager = new _eventManager.default(this.instance);
package/tableView.mjs CHANGED
@@ -53,98 +53,88 @@ var privatePool = new WeakMap();
53
53
  var _columnHeadersCount = /*#__PURE__*/new WeakMap();
54
54
  var _rowHeadersCount = /*#__PURE__*/new WeakMap();
55
55
  var TableView = /*#__PURE__*/function () {
56
- /**
57
- * Instance of {@link Handsontable}.
58
- *
59
- * @private
60
- * @type {Handsontable}
61
- */
62
-
63
- /**
64
- * Instance of {@link EventManager}.
65
- *
66
- * @private
67
- * @type {EventManager}
68
- */
69
-
70
- /**
71
- * Current Handsontable's GridSettings object.
72
- *
73
- * @private
74
- * @type {GridSettings}
75
- */
76
-
77
- /**
78
- * Main <THEAD> element.
79
- *
80
- * @private
81
- * @type {HTMLTableSectionElement}
82
- */
83
-
84
- /**
85
- * Main <TBODY> element.
86
- *
87
- * @private
88
- * @type {HTMLTableSectionElement}
89
- */
90
-
91
- /**
92
- * Main Walkontable instance.
93
- *
94
- * @private
95
- * @type {Walkontable}
96
- */
97
-
98
- /**
99
- * Main Walkontable instance.
100
- *
101
- * @private
102
- * @type {Walkontable}
103
- */
104
-
105
- /**
106
- * The total number of the column header renderers applied to the table through the
107
- * `afterGetColumnHeaderRenderers` hook.
108
- *
109
- * @type {number}
110
- */
111
-
112
- /**
113
- * The total number of the row header renderers applied to the table through the
114
- * `afterGetRowHeaderRenderers` hook.
115
- *
116
- * @type {number}
117
- */
118
-
119
- /**
120
- * The flag determines if the `adjustElementsSize` method call was made during
121
- * the render suspending. If true, the method has to be triggered once after render
122
- * resuming.
123
- *
124
- * @private
125
- * @type {boolean}
126
- */
127
-
128
56
  /**
129
57
  * @param {Hanstontable} instance Instance of {@link Handsontable}.
130
58
  */
131
59
  function TableView(instance) {
132
60
  _classCallCheck(this, TableView);
61
+ /**
62
+ * Instance of {@link Handsontable}.
63
+ *
64
+ * @private
65
+ * @type {Handsontable}
66
+ */
133
67
  _defineProperty(this, "instance", void 0);
68
+ /**
69
+ * Instance of {@link EventManager}.
70
+ *
71
+ * @private
72
+ * @type {EventManager}
73
+ */
134
74
  _defineProperty(this, "eventManager", void 0);
75
+ /**
76
+ * Current Handsontable's GridSettings object.
77
+ *
78
+ * @private
79
+ * @type {GridSettings}
80
+ */
135
81
  _defineProperty(this, "settings", void 0);
82
+ /**
83
+ * Main <THEAD> element.
84
+ *
85
+ * @private
86
+ * @type {HTMLTableSectionElement}
87
+ */
136
88
  _defineProperty(this, "THEAD", void 0);
89
+ /**
90
+ * Main <TBODY> element.
91
+ *
92
+ * @private
93
+ * @type {HTMLTableSectionElement}
94
+ */
137
95
  _defineProperty(this, "TBODY", void 0);
96
+ /**
97
+ * Main Walkontable instance.
98
+ *
99
+ * @private
100
+ * @type {Walkontable}
101
+ */
138
102
  _defineProperty(this, "_wt", void 0);
103
+ /**
104
+ * Main Walkontable instance.
105
+ *
106
+ * @private
107
+ * @type {Walkontable}
108
+ */
139
109
  _defineProperty(this, "activeWt", void 0);
110
+ /**
111
+ * The total number of the column header renderers applied to the table through the
112
+ * `afterGetColumnHeaderRenderers` hook.
113
+ *
114
+ * @type {number}
115
+ */
140
116
  _classPrivateFieldInitSpec(this, _columnHeadersCount, {
141
117
  writable: true,
142
118
  value: 0
143
119
  });
120
+ /**
121
+ * The total number of the row header renderers applied to the table through the
122
+ * `afterGetRowHeaderRenderers` hook.
123
+ *
124
+ * @type {number}
125
+ */
144
126
  _classPrivateFieldInitSpec(this, _rowHeadersCount, {
145
127
  writable: true,
146
128
  value: 0
147
129
  });
130
+ /**
131
+ * The flag determines if the `adjustElementsSize` method call was made during
132
+ * the render suspending. If true, the method has to be triggered once after render
133
+ * resuming.
134
+ *
135
+ * @private
136
+ * @type {boolean}
137
+ */
148
138
  _defineProperty(this, "postponedAdjustElementsSize", false);
149
139
  this.instance = instance;
150
140
  this.eventManager = new EventManager(this.instance);
@@ -31,11 +31,6 @@ function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) {
31
31
  function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
32
32
  function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
33
33
  function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
34
- var _observers = /*#__PURE__*/new WeakMap();
35
- var _indexMatrix = /*#__PURE__*/new WeakMap();
36
- var _currentIndexState = /*#__PURE__*/new WeakMap();
37
- var _isMatrixIndexesInitialized = /*#__PURE__*/new WeakMap();
38
- var _initialIndexValue = /*#__PURE__*/new WeakMap();
39
34
  /**
40
35
  * The ChangesObservable module is an object that represents a resource that provides
41
36
  * the ability to observe the changes that happened in the index map indexes during
@@ -44,68 +39,68 @@ var _initialIndexValue = /*#__PURE__*/new WeakMap();
44
39
  * @private
45
40
  * @class ChangesObservable
46
41
  */
42
+ var _observers = /*#__PURE__*/new WeakMap();
43
+ var _indexMatrix = /*#__PURE__*/new WeakMap();
44
+ var _currentIndexState = /*#__PURE__*/new WeakMap();
45
+ var _isMatrixIndexesInitialized = /*#__PURE__*/new WeakMap();
46
+ var _initialIndexValue = /*#__PURE__*/new WeakMap();
47
47
  var ChangesObservable = /*#__PURE__*/function () {
48
- /**
49
- * The list of registered ChangesObserver instances.
50
- *
51
- * @type {ChangesObserver[]}
52
- */
53
-
54
- /**
55
- * An array with default values that act as a base array that will be compared with
56
- * the last saved index state. The changes are generated and immediately send through
57
- * the newly created ChangesObserver object. Thanks to that, the observer initially has
58
- * all information about what indexes are currently changed.
59
- *
60
- * @type {Array}
61
- */
62
-
63
- /**
64
- * An array that holds the indexes state that is currently valid. The value is changed on every
65
- * index mapper cache update.
66
- *
67
- * @type {Array}
68
- */
69
-
70
- /**
71
- * The flag determines if the observable is initialized or not. Not initialized object creates
72
- * index matrix once while emitting new changes.
73
- *
74
- * @type {boolean}
75
- */
76
-
77
- /**
78
- * The initial index value allows control from what value the index matrix array will be created.
79
- * Changing that value changes how the array diff generates the changes for the initial data
80
- * sent to the subscribers. For example, the changes can be triggered by detecting the changes
81
- * from `false` to `true` value or vice versa. Generally, it depends on which index map type
82
- * the Observable will work with. For "hiding" or "trimming" index types, it will be boolean
83
- * values. For various index maps, it can be anything, but I suspect that the most appropriate
84
- * initial value will be "undefined" in that case.
85
- *
86
- * @type {boolean}
87
- */
88
-
89
48
  function ChangesObservable() {
90
49
  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
91
50
  initialIndexValue = _ref.initialIndexValue;
92
51
  _classCallCheck(this, ChangesObservable);
52
+ /**
53
+ * The list of registered ChangesObserver instances.
54
+ *
55
+ * @type {ChangesObserver[]}
56
+ */
93
57
  _classPrivateFieldInitSpec(this, _observers, {
94
58
  writable: true,
95
59
  value: new Set()
96
60
  });
61
+ /**
62
+ * An array with default values that act as a base array that will be compared with
63
+ * the last saved index state. The changes are generated and immediately send through
64
+ * the newly created ChangesObserver object. Thanks to that, the observer initially has
65
+ * all information about what indexes are currently changed.
66
+ *
67
+ * @type {Array}
68
+ */
97
69
  _classPrivateFieldInitSpec(this, _indexMatrix, {
98
70
  writable: true,
99
71
  value: []
100
72
  });
73
+ /**
74
+ * An array that holds the indexes state that is currently valid. The value is changed on every
75
+ * index mapper cache update.
76
+ *
77
+ * @type {Array}
78
+ */
101
79
  _classPrivateFieldInitSpec(this, _currentIndexState, {
102
80
  writable: true,
103
81
  value: []
104
82
  });
83
+ /**
84
+ * The flag determines if the observable is initialized or not. Not initialized object creates
85
+ * index matrix once while emitting new changes.
86
+ *
87
+ * @type {boolean}
88
+ */
105
89
  _classPrivateFieldInitSpec(this, _isMatrixIndexesInitialized, {
106
90
  writable: true,
107
91
  value: false
108
92
  });
93
+ /**
94
+ * The initial index value allows control from what value the index matrix array will be created.
95
+ * Changing that value changes how the array diff generates the changes for the initial data
96
+ * sent to the subscribers. For example, the changes can be triggered by detecting the changes
97
+ * from `false` to `true` value or vice versa. Generally, it depends on which index map type
98
+ * the Observable will work with. For "hiding" or "trimming" index types, it will be boolean
99
+ * values. For various index maps, it can be anything, but I suspect that the most appropriate
100
+ * initial value will be "undefined" in that case.
101
+ *
102
+ * @type {boolean}
103
+ */
109
104
  _classPrivateFieldInitSpec(this, _initialIndexValue, {
110
105
  writable: true,
111
106
  value: false
@@ -41,67 +41,62 @@ var _currentIndexState = /*#__PURE__*/new WeakMap();
41
41
  var _isMatrixIndexesInitialized = /*#__PURE__*/new WeakMap();
42
42
  var _initialIndexValue = /*#__PURE__*/new WeakMap();
43
43
  export var ChangesObservable = /*#__PURE__*/function () {
44
- /**
45
- * The list of registered ChangesObserver instances.
46
- *
47
- * @type {ChangesObserver[]}
48
- */
49
-
50
- /**
51
- * An array with default values that act as a base array that will be compared with
52
- * the last saved index state. The changes are generated and immediately send through
53
- * the newly created ChangesObserver object. Thanks to that, the observer initially has
54
- * all information about what indexes are currently changed.
55
- *
56
- * @type {Array}
57
- */
58
-
59
- /**
60
- * An array that holds the indexes state that is currently valid. The value is changed on every
61
- * index mapper cache update.
62
- *
63
- * @type {Array}
64
- */
65
-
66
- /**
67
- * The flag determines if the observable is initialized or not. Not initialized object creates
68
- * index matrix once while emitting new changes.
69
- *
70
- * @type {boolean}
71
- */
72
-
73
- /**
74
- * The initial index value allows control from what value the index matrix array will be created.
75
- * Changing that value changes how the array diff generates the changes for the initial data
76
- * sent to the subscribers. For example, the changes can be triggered by detecting the changes
77
- * from `false` to `true` value or vice versa. Generally, it depends on which index map type
78
- * the Observable will work with. For "hiding" or "trimming" index types, it will be boolean
79
- * values. For various index maps, it can be anything, but I suspect that the most appropriate
80
- * initial value will be "undefined" in that case.
81
- *
82
- * @type {boolean}
83
- */
84
-
85
44
  function ChangesObservable() {
86
45
  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
87
46
  initialIndexValue = _ref.initialIndexValue;
88
47
  _classCallCheck(this, ChangesObservable);
48
+ /**
49
+ * The list of registered ChangesObserver instances.
50
+ *
51
+ * @type {ChangesObserver[]}
52
+ */
89
53
  _classPrivateFieldInitSpec(this, _observers, {
90
54
  writable: true,
91
55
  value: new Set()
92
56
  });
57
+ /**
58
+ * An array with default values that act as a base array that will be compared with
59
+ * the last saved index state. The changes are generated and immediately send through
60
+ * the newly created ChangesObserver object. Thanks to that, the observer initially has
61
+ * all information about what indexes are currently changed.
62
+ *
63
+ * @type {Array}
64
+ */
93
65
  _classPrivateFieldInitSpec(this, _indexMatrix, {
94
66
  writable: true,
95
67
  value: []
96
68
  });
69
+ /**
70
+ * An array that holds the indexes state that is currently valid. The value is changed on every
71
+ * index mapper cache update.
72
+ *
73
+ * @type {Array}
74
+ */
97
75
  _classPrivateFieldInitSpec(this, _currentIndexState, {
98
76
  writable: true,
99
77
  value: []
100
78
  });
79
+ /**
80
+ * The flag determines if the observable is initialized or not. Not initialized object creates
81
+ * index matrix once while emitting new changes.
82
+ *
83
+ * @type {boolean}
84
+ */
101
85
  _classPrivateFieldInitSpec(this, _isMatrixIndexesInitialized, {
102
86
  writable: true,
103
87
  value: false
104
88
  });
89
+ /**
90
+ * The initial index value allows control from what value the index matrix array will be created.
91
+ * Changing that value changes how the array diff generates the changes for the initial data
92
+ * sent to the subscribers. For example, the changes can be triggered by detecting the changes
93
+ * from `false` to `true` value or vice versa. Generally, it depends on which index map type
94
+ * the Observable will work with. For "hiding" or "trimming" index types, it will be boolean
95
+ * values. For various index maps, it can be anything, but I suspect that the most appropriate
96
+ * initial value will be "undefined" in that case.
97
+ *
98
+ * @type {boolean}
99
+ */
105
100
  _classPrivateFieldInitSpec(this, _initialIndexValue, {
106
101
  writable: true,
107
102
  value: false
@@ -29,16 +29,23 @@ function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.
29
29
  function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
30
30
  function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
31
31
  function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
32
- var _currentInitialChanges = /*#__PURE__*/new WeakMap();
33
32
  /**
34
33
  * The ChangesObserver module is an object that represents a disposable resource
35
34
  * provided by the ChangesObservable module.
36
35
  *
37
36
  * @class ChangesObserver
38
37
  */
38
+ var _currentInitialChanges = /*#__PURE__*/new WeakMap();
39
39
  var ChangesObserver = /*#__PURE__*/function () {
40
40
  function ChangesObserver() {
41
41
  _classCallCheck(this, ChangesObserver);
42
+ /**
43
+ * The field holds initial changes that will be used to notify the callbacks added using
44
+ * subscribe method. Regardless of the moment of listening for changes, the subscriber
45
+ * will be notified once with all changes made before subscribing.
46
+ *
47
+ * @type {Array}
48
+ */
42
49
  _classPrivateFieldInitSpec(this, _currentInitialChanges, {
43
50
  writable: true,
44
51
  value: []
@@ -34,6 +34,13 @@ var _currentInitialChanges = /*#__PURE__*/new WeakMap();
34
34
  export var ChangesObserver = /*#__PURE__*/function () {
35
35
  function ChangesObserver() {
36
36
  _classCallCheck(this, ChangesObserver);
37
+ /**
38
+ * The field holds initial changes that will be used to notify the callbacks added using
39
+ * subscribe method. Regardless of the moment of listening for changes, the subscriber
40
+ * will be notified once with all changes made before subscribing.
41
+ *
42
+ * @type {Array}
43
+ */
37
44
  _classPrivateFieldInitSpec(this, _currentInitialChanges, {
38
45
  writable: true,
39
46
  value: []
@@ -160,6 +160,12 @@ var IndexMapper = /*#__PURE__*/function () {
160
160
  * @type {boolean}
161
161
  */
162
162
  this.indexesSequenceChanged = false;
163
+ /**
164
+ * Flag informing about source of the change.
165
+ *
166
+ * @type {undefined|string}
167
+ */
168
+ this.indexesChangeSource = void 0;
163
169
  /**
164
170
  * Flag determining whether any action on trimmed indexes has been performed. It's used for cache management.
165
171
  *
@@ -200,6 +206,7 @@ var IndexMapper = /*#__PURE__*/function () {
200
206
 
201
207
  // Sequence of stored indexes might change.
202
208
  _this.updateCache();
209
+ _this.runLocalHooks('indexesSequenceChange', _this.indexesChangeSource);
203
210
  _this.runLocalHooks('change', _this.indexesSequence, null);
204
211
  });
205
212
  this.trimmingMapsCollection.addLocalHook('change', function (changedMap) {
@@ -520,7 +527,9 @@ var IndexMapper = /*#__PURE__*/function () {
520
527
  this.notTrimmedIndexesCache = _toConsumableArray(new Array(length).keys());
521
528
  this.notHiddenIndexesCache = _toConsumableArray(new Array(length).keys());
522
529
  this.suspendOperations();
530
+ this.indexesChangeSource = 'init';
523
531
  this.indexesSequence.init(length);
532
+ this.indexesChangeSource = void 0;
524
533
  this.trimmingMapsCollection.initEvery(length);
525
534
  this.resumeOperations();
526
535
 
@@ -572,7 +581,13 @@ var IndexMapper = /*#__PURE__*/function () {
572
581
  }, {
573
582
  key: "setIndexesSequence",
574
583
  value: function setIndexesSequence(indexes) {
584
+ if (this.indexesChangeSource === void 0) {
585
+ this.indexesChangeSource = 'update';
586
+ }
575
587
  this.indexesSequence.setValues(indexes);
588
+ if (this.indexesChangeSource === 'update') {
589
+ this.indexesChangeSource = void 0;
590
+ }
576
591
  }
577
592
 
578
593
  /**
@@ -722,9 +737,11 @@ var IndexMapper = /*#__PURE__*/function () {
722
737
  })[finalIndex];
723
738
  destinationPosition = listWithRemovedItems.indexOf(physicalIndex);
724
739
  }
740
+ this.indexesChangeSource = 'move';
725
741
 
726
742
  // Adding indexes without re-indexing.
727
743
  this.setIndexesSequence((0, _maps.getListWithInsertedItems)(listWithRemovedItems, destinationPosition, physicalMovedIndexes));
744
+ this.indexesChangeSource = void 0;
728
745
  }
729
746
 
730
747
  /**
@@ -768,7 +785,9 @@ var IndexMapper = /*#__PURE__*/function () {
768
785
  return nextIndex + stepsFromStart;
769
786
  });
770
787
  this.suspendOperations();
788
+ this.indexesChangeSource = 'insert';
771
789
  this.indexesSequence.insert(insertionIndex, insertedIndexes);
790
+ this.indexesChangeSource = void 0;
772
791
  this.trimmingMapsCollection.insertToEvery(insertionIndex, insertedIndexes);
773
792
  this.hidingMapsCollection.insertToEvery(insertionIndex, insertedIndexes);
774
793
  this.variousMapsCollection.insertToEvery(insertionIndex, insertedIndexes);
@@ -785,7 +804,9 @@ var IndexMapper = /*#__PURE__*/function () {
785
804
  key: "removeIndexes",
786
805
  value: function removeIndexes(removedIndexes) {
787
806
  this.suspendOperations();
807
+ this.indexesChangeSource = 'remove';
788
808
  this.indexesSequence.remove(removedIndexes);
809
+ this.indexesChangeSource = void 0;
789
810
  this.trimmingMapsCollection.removeFromEvery(removedIndexes);
790
811
  this.hidingMapsCollection.removeFromEvery(removedIndexes);
791
812
  this.variousMapsCollection.removeFromEvery(removedIndexes);