handsontable 12.3.3 → 12.4.0-next-acb5d99-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
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);