vscroll 1.7.0 → 1.8.1

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 (230) hide show
  1. package/dist/bundles/vscroll.esm5.js +518 -368
  2. package/dist/bundles/vscroll.esm5.js.map +1 -1
  3. package/dist/bundles/vscroll.esm5.min.js +2 -2
  4. package/dist/bundles/vscroll.esm5.min.js.map +1 -1
  5. package/dist/bundles/vscroll.esm6.js +408 -260
  6. package/dist/bundles/vscroll.esm6.js.map +1 -1
  7. package/dist/bundles/vscroll.esm6.min.js +2 -2
  8. package/dist/bundles/vscroll.esm6.min.js.map +1 -1
  9. package/dist/bundles/vscroll.umd.js +519 -369
  10. package/dist/bundles/vscroll.umd.js.map +1 -1
  11. package/dist/bundles/vscroll.umd.min.js +2 -2
  12. package/dist/bundles/vscroll.umd.min.js.map +1 -1
  13. package/dist/esm2015/classes/adapter/context.js +2 -1
  14. package/dist/esm2015/classes/adapter/context.js.map +1 -1
  15. package/dist/esm2015/classes/adapter/props.js +2 -2
  16. package/dist/esm2015/classes/adapter/props.js.map +1 -1
  17. package/dist/esm2015/classes/adapter.js +17 -18
  18. package/dist/esm2015/classes/adapter.js.map +1 -1
  19. package/dist/esm2015/classes/buffer/cache.js +11 -8
  20. package/dist/esm2015/classes/buffer/cache.js.map +1 -1
  21. package/dist/esm2015/classes/buffer/checkCall.js +4 -5
  22. package/dist/esm2015/classes/buffer/checkCall.js.map +1 -1
  23. package/dist/esm2015/classes/buffer/defaultSize.js +2 -1
  24. package/dist/esm2015/classes/buffer/defaultSize.js.map +1 -1
  25. package/dist/esm2015/classes/buffer.js +12 -11
  26. package/dist/esm2015/classes/buffer.js.map +1 -1
  27. package/dist/esm2015/classes/datasource.js +16 -3
  28. package/dist/esm2015/classes/datasource.js.map +1 -1
  29. package/dist/esm2015/classes/domRoutines.js +14 -14
  30. package/dist/esm2015/classes/domRoutines.js.map +1 -1
  31. package/dist/esm2015/classes/logger.js +74 -31
  32. package/dist/esm2015/classes/logger.js.map +1 -1
  33. package/dist/esm2015/classes/paddings.js +6 -2
  34. package/dist/esm2015/classes/paddings.js.map +1 -1
  35. package/dist/esm2015/classes/reactive.js.map +1 -1
  36. package/dist/esm2015/classes/settings.js.map +1 -1
  37. package/dist/esm2015/classes/state/clip.js.map +1 -1
  38. package/dist/esm2015/classes/state/fetch.js +4 -2
  39. package/dist/esm2015/classes/state/fetch.js.map +1 -1
  40. package/dist/esm2015/classes/state.js +6 -4
  41. package/dist/esm2015/classes/state.js.map +1 -1
  42. package/dist/esm2015/classes/viewport.js +4 -2
  43. package/dist/esm2015/classes/viewport.js.map +1 -1
  44. package/dist/esm2015/index.js +1 -1
  45. package/dist/esm2015/index.js.map +1 -1
  46. package/dist/esm2015/inputs/adapter.js +44 -24
  47. package/dist/esm2015/inputs/adapter.js.map +1 -1
  48. package/dist/esm2015/inputs/datasource.js.map +1 -1
  49. package/dist/esm2015/inputs/index.js +1 -1
  50. package/dist/esm2015/inputs/index.js.map +1 -1
  51. package/dist/esm2015/inputs/settings.js +8 -3
  52. package/dist/esm2015/inputs/settings.js.map +1 -1
  53. package/dist/esm2015/inputs/validation.js +8 -14
  54. package/dist/esm2015/inputs/validation.js.map +1 -1
  55. package/dist/esm2015/inputs/workflow.js.map +1 -1
  56. package/dist/esm2015/interfaces/datasource.js.map +1 -1
  57. package/dist/esm2015/interfaces/index.js.map +1 -1
  58. package/dist/esm2015/interfaces/process.js.map +1 -1
  59. package/dist/esm2015/interfaces/routines.js.map +1 -1
  60. package/dist/esm2015/interfaces/settings.js.map +1 -1
  61. package/dist/esm2015/interfaces/validation.js.map +1 -1
  62. package/dist/esm2015/interfaces/workflow.js.map +1 -1
  63. package/dist/esm2015/processes/adapter/append.js +2 -1
  64. package/dist/esm2015/processes/adapter/append.js.map +1 -1
  65. package/dist/esm2015/processes/adapter/check.js +2 -1
  66. package/dist/esm2015/processes/adapter/check.js.map +1 -1
  67. package/dist/esm2015/processes/adapter/clip.js.map +1 -1
  68. package/dist/esm2015/processes/adapter/fix.js +4 -2
  69. package/dist/esm2015/processes/adapter/fix.js.map +1 -1
  70. package/dist/esm2015/processes/adapter/insert.js +4 -3
  71. package/dist/esm2015/processes/adapter/insert.js.map +1 -1
  72. package/dist/esm2015/processes/adapter/pause.js.map +1 -1
  73. package/dist/esm2015/processes/adapter/reload.js.map +1 -1
  74. package/dist/esm2015/processes/adapter/remove.js +8 -5
  75. package/dist/esm2015/processes/adapter/remove.js.map +1 -1
  76. package/dist/esm2015/processes/adapter/replace.js +1 -1
  77. package/dist/esm2015/processes/adapter/replace.js.map +1 -1
  78. package/dist/esm2015/processes/adapter/reset.js +5 -5
  79. package/dist/esm2015/processes/adapter/reset.js.map +1 -1
  80. package/dist/esm2015/processes/adapter/update.js +4 -3
  81. package/dist/esm2015/processes/adapter/update.js.map +1 -1
  82. package/dist/esm2015/processes/adjust.js +15 -10
  83. package/dist/esm2015/processes/adjust.js.map +1 -1
  84. package/dist/esm2015/processes/clip.js +4 -4
  85. package/dist/esm2015/processes/clip.js.map +1 -1
  86. package/dist/esm2015/processes/end.js +2 -1
  87. package/dist/esm2015/processes/end.js.map +1 -1
  88. package/dist/esm2015/processes/fetch.js +6 -4
  89. package/dist/esm2015/processes/fetch.js.map +1 -1
  90. package/dist/esm2015/processes/index.js +1 -1
  91. package/dist/esm2015/processes/index.js.map +1 -1
  92. package/dist/esm2015/processes/init.js.map +1 -1
  93. package/dist/esm2015/processes/misc/base.js +1 -2
  94. package/dist/esm2015/processes/misc/base.js.map +1 -1
  95. package/dist/esm2015/processes/misc/enums.js.map +1 -1
  96. package/dist/esm2015/processes/postFetch.js +13 -12
  97. package/dist/esm2015/processes/postFetch.js.map +1 -1
  98. package/dist/esm2015/processes/preClip.js +6 -5
  99. package/dist/esm2015/processes/preClip.js.map +1 -1
  100. package/dist/esm2015/processes/preFetch.js +28 -15
  101. package/dist/esm2015/processes/preFetch.js.map +1 -1
  102. package/dist/esm2015/processes/render.js +6 -4
  103. package/dist/esm2015/processes/render.js.map +1 -1
  104. package/dist/esm2015/processes/scroll.js +19 -10
  105. package/dist/esm2015/processes/scroll.js.map +1 -1
  106. package/dist/esm2015/processes/start.js.map +1 -1
  107. package/dist/esm2015/scroller.js +14 -9
  108. package/dist/esm2015/scroller.js.map +1 -1
  109. package/dist/esm2015/version.js +1 -1
  110. package/dist/esm2015/version.js.map +1 -1
  111. package/dist/esm2015/workflow-transducer.js +3 -2
  112. package/dist/esm2015/workflow-transducer.js.map +1 -1
  113. package/dist/esm2015/workflow.js +28 -17
  114. package/dist/esm2015/workflow.js.map +1 -1
  115. package/dist/esm5/classes/adapter/context.js +2 -1
  116. package/dist/esm5/classes/adapter/context.js.map +1 -1
  117. package/dist/esm5/classes/adapter/props.js +2 -2
  118. package/dist/esm5/classes/adapter/props.js.map +1 -1
  119. package/dist/esm5/classes/adapter.js +22 -19
  120. package/dist/esm5/classes/adapter.js.map +1 -1
  121. package/dist/esm5/classes/buffer/cache.js +11 -9
  122. package/dist/esm5/classes/buffer/cache.js.map +1 -1
  123. package/dist/esm5/classes/buffer/checkCall.js +4 -7
  124. package/dist/esm5/classes/buffer/checkCall.js.map +1 -1
  125. package/dist/esm5/classes/buffer/defaultSize.js +2 -1
  126. package/dist/esm5/classes/buffer/defaultSize.js.map +1 -1
  127. package/dist/esm5/classes/buffer.js +15 -14
  128. package/dist/esm5/classes/buffer.js.map +1 -1
  129. package/dist/esm5/classes/datasource.js +20 -3
  130. package/dist/esm5/classes/datasource.js.map +1 -1
  131. package/dist/esm5/classes/domRoutines.js +14 -14
  132. package/dist/esm5/classes/domRoutines.js.map +1 -1
  133. package/dist/esm5/classes/logger.js +75 -34
  134. package/dist/esm5/classes/logger.js.map +1 -1
  135. package/dist/esm5/classes/paddings.js +6 -2
  136. package/dist/esm5/classes/paddings.js.map +1 -1
  137. package/dist/esm5/classes/reactive.js.map +1 -1
  138. package/dist/esm5/classes/settings.js.map +1 -1
  139. package/dist/esm5/classes/state/clip.js.map +1 -1
  140. package/dist/esm5/classes/state/fetch.js +4 -2
  141. package/dist/esm5/classes/state/fetch.js.map +1 -1
  142. package/dist/esm5/classes/state.js +6 -4
  143. package/dist/esm5/classes/state.js.map +1 -1
  144. package/dist/esm5/classes/viewport.js +3 -2
  145. package/dist/esm5/classes/viewport.js.map +1 -1
  146. package/dist/esm5/index.js +1 -1
  147. package/dist/esm5/index.js.map +1 -1
  148. package/dist/esm5/inputs/adapter.js +32 -12
  149. package/dist/esm5/inputs/adapter.js.map +1 -1
  150. package/dist/esm5/inputs/datasource.js.map +1 -1
  151. package/dist/esm5/inputs/index.js +1 -1
  152. package/dist/esm5/inputs/index.js.map +1 -1
  153. package/dist/esm5/inputs/settings.js +5 -0
  154. package/dist/esm5/inputs/settings.js.map +1 -1
  155. package/dist/esm5/inputs/validation.js +99 -93
  156. package/dist/esm5/inputs/validation.js.map +1 -1
  157. package/dist/esm5/inputs/workflow.js.map +1 -1
  158. package/dist/esm5/interfaces/datasource.js.map +1 -1
  159. package/dist/esm5/interfaces/index.js.map +1 -1
  160. package/dist/esm5/interfaces/process.js.map +1 -1
  161. package/dist/esm5/interfaces/routines.js.map +1 -1
  162. package/dist/esm5/interfaces/settings.js.map +1 -1
  163. package/dist/esm5/interfaces/validation.js.map +1 -1
  164. package/dist/esm5/interfaces/workflow.js.map +1 -1
  165. package/dist/esm5/processes/adapter/append.js +2 -1
  166. package/dist/esm5/processes/adapter/append.js.map +1 -1
  167. package/dist/esm5/processes/adapter/check.js +7 -6
  168. package/dist/esm5/processes/adapter/check.js.map +1 -1
  169. package/dist/esm5/processes/adapter/clip.js.map +1 -1
  170. package/dist/esm5/processes/adapter/fix.js +4 -2
  171. package/dist/esm5/processes/adapter/fix.js.map +1 -1
  172. package/dist/esm5/processes/adapter/insert.js +4 -3
  173. package/dist/esm5/processes/adapter/insert.js.map +1 -1
  174. package/dist/esm5/processes/adapter/pause.js.map +1 -1
  175. package/dist/esm5/processes/adapter/reload.js.map +1 -1
  176. package/dist/esm5/processes/adapter/remove.js +11 -10
  177. package/dist/esm5/processes/adapter/remove.js.map +1 -1
  178. package/dist/esm5/processes/adapter/replace.js +1 -1
  179. package/dist/esm5/processes/adapter/replace.js.map +1 -1
  180. package/dist/esm5/processes/adapter/reset.js +5 -5
  181. package/dist/esm5/processes/adapter/reset.js.map +1 -1
  182. package/dist/esm5/processes/adapter/update.js +20 -15
  183. package/dist/esm5/processes/adapter/update.js.map +1 -1
  184. package/dist/esm5/processes/adjust.js +16 -11
  185. package/dist/esm5/processes/adjust.js.map +1 -1
  186. package/dist/esm5/processes/clip.js +4 -4
  187. package/dist/esm5/processes/clip.js.map +1 -1
  188. package/dist/esm5/processes/end.js +2 -1
  189. package/dist/esm5/processes/end.js.map +1 -1
  190. package/dist/esm5/processes/fetch.js +5 -3
  191. package/dist/esm5/processes/fetch.js.map +1 -1
  192. package/dist/esm5/processes/index.js +1 -1
  193. package/dist/esm5/processes/index.js.map +1 -1
  194. package/dist/esm5/processes/init.js.map +1 -1
  195. package/dist/esm5/processes/misc/base.js +1 -2
  196. package/dist/esm5/processes/misc/base.js.map +1 -1
  197. package/dist/esm5/processes/misc/enums.js.map +1 -1
  198. package/dist/esm5/processes/postFetch.js +14 -15
  199. package/dist/esm5/processes/postFetch.js.map +1 -1
  200. package/dist/esm5/processes/preClip.js +5 -4
  201. package/dist/esm5/processes/preClip.js.map +1 -1
  202. package/dist/esm5/processes/preFetch.js +26 -14
  203. package/dist/esm5/processes/preFetch.js.map +1 -1
  204. package/dist/esm5/processes/render.js +7 -7
  205. package/dist/esm5/processes/render.js.map +1 -1
  206. package/dist/esm5/processes/scroll.js +18 -12
  207. package/dist/esm5/processes/scroll.js.map +1 -1
  208. package/dist/esm5/processes/start.js.map +1 -1
  209. package/dist/esm5/scroller.js +11 -7
  210. package/dist/esm5/scroller.js.map +1 -1
  211. package/dist/esm5/version.js +1 -1
  212. package/dist/esm5/version.js.map +1 -1
  213. package/dist/esm5/workflow-transducer.js +3 -2
  214. package/dist/esm5/workflow-transducer.js.map +1 -1
  215. package/dist/esm5/workflow.js +31 -25
  216. package/dist/esm5/workflow.js.map +1 -1
  217. package/dist/typings/classes/buffer/cache.d.ts +0 -1
  218. package/dist/typings/classes/datasource.d.ts +1 -1
  219. package/dist/typings/classes/domRoutines.d.ts +1 -1
  220. package/dist/typings/classes/logger.d.ts +4 -0
  221. package/dist/typings/classes/settings.d.ts +7 -0
  222. package/dist/typings/index.d.ts +3 -3
  223. package/dist/typings/inputs/index.d.ts +1 -1
  224. package/dist/typings/inputs/settings.d.ts +1 -0
  225. package/dist/typings/interfaces/index.d.ts +10 -10
  226. package/dist/typings/interfaces/settings.d.ts +1 -0
  227. package/dist/typings/processes/index.d.ts +1 -1
  228. package/dist/typings/processes/scroll.d.ts +1 -1
  229. package/dist/typings/workflow.d.ts +1 -0
  230. package/package.json +23 -22
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * vscroll (https://github.com/dhilt/vscroll) UMD
3
- * Version: 1.7.0 (2025-07-26T12:39:21.442Z)
3
+ * Version: 1.8.1 (2026-02-07T22:49:12.100Z)
4
4
  * Author: Denis Hilt
5
5
  * License: MIT
6
6
  */
@@ -99,7 +99,7 @@
99
99
 
100
100
  /**
101
101
  * vscroll (https://github.com/dhilt/vscroll) FESM5
102
- * Version: 1.7.0 (2025-07-26T12:39:14.729Z)
102
+ * Version: 1.8.1 (2026-02-07T22:49:08.739Z)
103
103
  * Author: Denis Hilt
104
104
  * License: MIT
105
105
  */
@@ -252,7 +252,7 @@
252
252
  maxIndex: NaN,
253
253
  absMinIndex: -Infinity,
254
254
  absMaxIndex: +Infinity,
255
- defaultSize: NaN,
255
+ defaultSize: NaN
256
256
  };
257
257
  var EMPTY_ITEM = {
258
258
  data: {},
@@ -421,7 +421,7 @@
421
421
  {
422
422
  type: Type.Function,
423
423
  name: Name.relax,
424
- value: noop
424
+ value: noopWF
425
425
  },
426
426
  {
427
427
  type: Type.Function,
@@ -475,7 +475,7 @@
475
475
 
476
476
  var core = {
477
477
  name: 'vscroll',
478
- version: '1.7.0'
478
+ version: '1.8.1'
479
479
  };
480
480
 
481
481
  var getBox = function (id) {
@@ -546,13 +546,30 @@
546
546
  return value;
547
547
  } }, conf));
548
548
  });
549
- if (reactive) { // save both configured and default reactive props in the store
549
+ if (reactive) {
550
+ // save both configured and default reactive props in the store
550
551
  reactiveConfigStorage.set(id, reactivePropsStore);
551
552
  }
552
553
  }
553
554
  return AdapterContext;
554
555
  }());
555
556
 
557
+ var getDefaultAdapterConfig = function () {
558
+ var reactive = getDefaultAdapterProps()
559
+ .filter(function (_a) {
560
+ var type = _a.type;
561
+ return type === AdapterPropType.Reactive;
562
+ })
563
+ .reduce(function (acc, _a) {
564
+ var name = _a.name, value = _a.value;
565
+ acc[name] = {
566
+ source: value,
567
+ emit: function (source, val) { return source.set(val); }
568
+ };
569
+ return acc;
570
+ }, {});
571
+ return { mock: false, reactive: reactive };
572
+ };
556
573
  var DatasourceGeneric = /** @class */ (function () {
557
574
  function DatasourceGeneric(datasource, config) {
558
575
  this.get = datasource.get;
@@ -561,17 +578,18 @@
561
578
  var adapterContext = new AdapterContext(config || { mock: false });
562
579
  this.adapter = adapterContext;
563
580
  }
581
+ // todo: should it be published?
564
582
  DatasourceGeneric.prototype.dispose = function () {
565
583
  reactiveConfigStorage.delete(this.adapter.id);
566
584
  wantedStorage.delete(this.adapter.id);
567
585
  };
568
586
  return DatasourceGeneric;
569
587
  }());
570
- var makeDatasource = function (getConfig) {
588
+ var makeDatasource = function (getAdapterConfig) {
571
589
  return /** @class */ (function (_super) {
572
590
  __extends(class_1, _super);
573
591
  function class_1(datasource) {
574
- var config = typeof getConfig === 'function' ? getConfig() : void 0;
592
+ var config = typeof getAdapterConfig === 'function' ? getAdapterConfig() : getDefaultAdapterConfig();
575
593
  return _super.call(this, datasource, config) || this;
576
594
  }
577
595
  return class_1;
@@ -614,9 +632,7 @@
614
632
  return (args || ['']).reduce(function (acc, arg, index) { return acc.replace("{arg".concat(index + 1, "}"), arg); }, msg);
615
633
  };
616
634
  var getNumber = function (value) {
617
- return typeof value === 'number' || (typeof value === 'string' && value !== '')
618
- ? Number(value)
619
- : NaN;
635
+ return typeof value === 'number' || (typeof value === 'string' && value !== '') ? Number(value) : NaN;
620
636
  };
621
637
  var onNumber = function (value) {
622
638
  var parsedValue = getNumber(value);
@@ -650,23 +666,25 @@
650
666
  }
651
667
  return { value: parsedValue, isSet: true, isValid: !errors.length, errors: errors };
652
668
  };
653
- var onMoreOrEqual = function (limit, fallback) { return function (value) {
654
- var result = onNumber(value);
655
- if (!result.isValid) {
656
- return result;
657
- }
658
- var parsedValue = result.value;
659
- var errors = [];
660
- if (parsedValue < limit) {
661
- if (!fallback) {
662
- errors.push(getError(ValidatorType.moreOrEqual, [String(limit)]));
669
+ var onMoreOrEqual = function (limit, fallback) {
670
+ return function (value) {
671
+ var result = onNumber(value);
672
+ if (!result.isValid) {
673
+ return result;
663
674
  }
664
- else {
665
- parsedValue = limit;
675
+ var parsedValue = result.value;
676
+ var errors = [];
677
+ if (parsedValue < limit) {
678
+ if (!fallback) {
679
+ errors.push(getError(ValidatorType.moreOrEqual, [String(limit)]));
680
+ }
681
+ else {
682
+ parsedValue = limit;
683
+ }
666
684
  }
667
- }
668
- return { value: parsedValue, isSet: true, isValid: !errors.length, errors: errors };
669
- }; };
685
+ return { value: parsedValue, isSet: true, isValid: !errors.length, errors: errors };
686
+ };
687
+ };
670
688
  var onBoolean = function (value) {
671
689
  var errors = [];
672
690
  var parsedValue = value;
@@ -735,75 +753,87 @@
735
753
  }
736
754
  return { value: value, isSet: true, isValid: !errors.length, errors: errors };
737
755
  }; };
738
- var onFunctionWithXAndMoreArguments = function (argsCount) { return function (value) {
739
- var result = onFunction(value);
740
- if (!result.isValid) {
741
- return result;
742
- }
743
- value = result.value;
744
- var errors = [];
745
- if (value.length < argsCount) {
746
- errors.push(getError(ValidatorType.funcOfxArguments, [String(argsCount)]));
747
- }
748
- return { value: value, isSet: true, isValid: !errors.length, errors: errors };
749
- }; };
750
- var onFunctionWithXToYArguments = function (from, to) { return function (value) {
751
- var result = onFunction(value);
752
- if (!result.isValid) {
753
- return result;
754
- }
755
- value = result.value;
756
- var errors = [];
757
- if (value.length < from || value.length > to) {
758
- errors.push(getError(ValidatorType.funcOfXToYArguments, [String(from), String(to)]));
759
- }
760
- return { value: value, isSet: true, isValid: !errors.length, errors: errors };
761
- }; };
762
- var onOneOf = function (tokens, must) { return function (value, context) {
763
- var errors = [];
764
- var isSet = value !== void 0;
765
- var noOneIsPresent = !isSet;
766
- var err = must ? ValidatorType.oneOfMust : ValidatorType.oneOfCan;
767
- if (!Array.isArray(tokens) || !tokens.length) {
768
- errors.push(getError(err, ['undefined']));
769
- }
770
- else {
771
- for (var i = tokens.length - 1; i >= 0; i--) {
772
- var token = tokens[i];
773
- if (typeof token !== 'string') {
774
- errors.push(getError(err, [tokens.join('", "')]) + ' (non-string token)');
775
- break;
776
- }
777
- var isAnotherPresent = context && Object.prototype.hasOwnProperty.call(context, token);
778
- if (isSet && isAnotherPresent) {
779
- errors.push(getError(err, [tokens.join('", "')]) + " (".concat(token, " is present)"));
780
- break;
756
+ var onFunctionWithXAndMoreArguments = function (argsCount) {
757
+ return function (value) {
758
+ var result = onFunction(value);
759
+ if (!result.isValid) {
760
+ return result;
761
+ }
762
+ value = result.value;
763
+ var errors = [];
764
+ if (value.length < argsCount) {
765
+ errors.push(getError(ValidatorType.funcOfxArguments, [String(argsCount)]));
766
+ }
767
+ return { value: value, isSet: true, isValid: !errors.length, errors: errors };
768
+ };
769
+ };
770
+ var onFunctionWithXToYArguments = function (from, to) {
771
+ return function (value) {
772
+ var result = onFunction(value);
773
+ if (!result.isValid) {
774
+ return result;
775
+ }
776
+ value = result.value;
777
+ var errors = [];
778
+ if (value.length < from || value.length > to) {
779
+ errors.push(getError(ValidatorType.funcOfXToYArguments, [String(from), String(to)]));
780
+ }
781
+ return { value: value, isSet: true, isValid: !errors.length, errors: errors };
782
+ };
783
+ };
784
+ var onOneOf = function (tokens, must) {
785
+ return function (value, context) {
786
+ var errors = [];
787
+ var isSet = value !== void 0;
788
+ var noOneIsPresent = !isSet;
789
+ var err = must ? ValidatorType.oneOfMust : ValidatorType.oneOfCan;
790
+ if (!Array.isArray(tokens) || !tokens.length) {
791
+ errors.push(getError(err, ['undefined']));
792
+ }
793
+ else {
794
+ for (var i = tokens.length - 1; i >= 0; i--) {
795
+ var token = tokens[i];
796
+ if (typeof token !== 'string') {
797
+ errors.push(getError(err, [tokens.join('", "')]) + ' (non-string token)');
798
+ break;
799
+ }
800
+ var isAnotherPresent = context && Object.prototype.hasOwnProperty.call(context, token);
801
+ if (isSet && isAnotherPresent) {
802
+ errors.push(getError(err, [tokens.join('", "')]) + " (".concat(token, " is present)"));
803
+ break;
804
+ }
805
+ if (noOneIsPresent && isAnotherPresent) {
806
+ noOneIsPresent = false;
807
+ }
781
808
  }
782
- if (noOneIsPresent && isAnotherPresent) {
783
- noOneIsPresent = false;
809
+ if (must && noOneIsPresent) {
810
+ errors.push(getError(err, [tokens.join('", "')]));
784
811
  }
785
812
  }
786
- if (must && noOneIsPresent) {
787
- errors.push(getError(err, [tokens.join('", "')]));
813
+ return { value: value, isSet: isSet, isValid: !errors.length, errors: errors };
814
+ };
815
+ };
816
+ var onOr = function (validators) {
817
+ return function (value) {
818
+ var errors = [];
819
+ if (validators.every(function (validator) { return !validator.method(value).isValid; })) {
820
+ errors.push(validators.map(function (v) { return v.type; }).join(' OR '));
788
821
  }
789
- }
790
- return { value: value, isSet: isSet, isValid: !errors.length, errors: errors };
791
- }; };
792
- var onOr = function (validators) { return function (value) {
793
- var errors = [];
794
- if (validators.every(function (validator) { return !validator.method(value).isValid; })) {
795
- errors.push(validators.map(function (v) { return v.type; }).join(' OR '));
796
- }
797
- return { value: value, isSet: true, isValid: !errors.length, errors: errors };
798
- }; };
799
- var onEnum = function (list) { return function (value) {
800
- var errors = [];
801
- var values = Object.keys(list).filter(function (k) { return isNaN(Number(k)); }).map(function (k) { return list[k]; });
802
- if (!values.some(function (item) { return item === value; })) {
803
- errors.push(getError(ValidatorType.enum, ['[' + values.join(',') + ']']));
804
- }
805
- return { value: value, isSet: true, isValid: !errors.length, errors: errors };
806
- }; };
822
+ return { value: value, isSet: true, isValid: !errors.length, errors: errors };
823
+ };
824
+ };
825
+ var onEnum = function (list) {
826
+ return function (value) {
827
+ var errors = [];
828
+ var values = Object.keys(list)
829
+ .filter(function (k) { return isNaN(Number(k)); })
830
+ .map(function (k) { return list[k]; });
831
+ if (!values.some(function (item) { return item === value; })) {
832
+ errors.push(getError(ValidatorType.enum, ['[' + values.join(',') + ']']));
833
+ }
834
+ return { value: value, isSet: true, isValid: !errors.length, errors: errors };
835
+ };
836
+ };
807
837
  var VALIDATORS = {
808
838
  NUMBER: {
809
839
  type: ValidatorType.number,
@@ -902,17 +932,13 @@
902
932
  if (!value.isValid) {
903
933
  value.errors = !value.isSet
904
934
  ? ["\"".concat(token, "\" must be set")]
905
- : value.errors.map(function (err) {
906
- return "\"".concat(token, "\" ").concat(err);
907
- });
935
+ : value.errors.map(function (err) { return "\"".concat(token, "\" ").concat(err); });
908
936
  }
909
937
  this.params[token] = value;
910
938
  this.setValidity();
911
939
  };
912
940
  ValidatedData.prototype.showErrors = function () {
913
- return this.errors.length
914
- ? 'validation failed: ' + this.errors.join(', ')
915
- : '';
941
+ return this.errors.length ? 'validation failed: ' + this.errors.join(', ') : '';
916
942
  };
917
943
  return ValidatedData;
918
944
  }());
@@ -931,7 +957,7 @@
931
957
  var empty = value === void 0;
932
958
  var auto = !prop.mandatory && prop.defaultValue !== void 0;
933
959
  return {
934
- value: !empty ? value : (auto ? prop.defaultValue : void 0),
960
+ value: !empty ? value : auto ? prop.defaultValue : void 0,
935
961
  isSet: !empty || auto,
936
962
  isValid: !empty || !prop.mandatory,
937
963
  errors: []
@@ -976,9 +1002,7 @@
976
1002
  var data = new ValidatedData(context);
977
1003
  Object.entries(params).forEach(function (_a) {
978
1004
  var _b = __read(_a, 2), key = _b[0], prop = _b[1];
979
- return data.setParam(key, data.isValidContext
980
- ? validateOne(data.context, key, prop)
981
- : getDefault(void 0, prop));
1005
+ return data.setParam(key, data.isValidContext ? validateOne(data.context, key, prop) : getDefault(void 0, prop));
982
1006
  });
983
1007
  return data;
984
1008
  };
@@ -1029,6 +1053,7 @@
1029
1053
  DevSettings["immediateLog"] = "immediateLog";
1030
1054
  DevSettings["logProcessRun"] = "logProcessRun";
1031
1055
  DevSettings["logTime"] = "logTime";
1056
+ DevSettings["logColor"] = "logColor";
1032
1057
  DevSettings["throttle"] = "throttle";
1033
1058
  DevSettings["initDelay"] = "initDelay";
1034
1059
  DevSettings["initWindowDelay"] = "initWindowDelay";
@@ -1120,6 +1145,10 @@
1120
1145
  validators: [BOOLEAN$1],
1121
1146
  defaultValue: false
1122
1147
  },
1148
+ _c$1[DevSettings.logColor] = {
1149
+ validators: [BOOLEAN$1],
1150
+ defaultValue: true
1151
+ },
1123
1152
  _c$1[DevSettings.throttle] = {
1124
1153
  validators: [INTEGER$1, MORE_OR_EQUAL(MIN[DevSettings.throttle], true)],
1125
1154
  defaultValue: 40
@@ -1311,24 +1340,44 @@
1311
1340
  mandatory: true
1312
1341
  },
1313
1342
  _g[AdapterInsertParams.before] = {
1314
- validators: [FUNC_WITH_X_ARGUMENTS$1(1), ONE_OF_MUST([
1315
- AdapterInsertParams.after, AdapterInsertParams.beforeIndex, AdapterInsertParams.afterIndex
1316
- ])]
1343
+ validators: [
1344
+ FUNC_WITH_X_ARGUMENTS$1(1),
1345
+ ONE_OF_MUST([
1346
+ AdapterInsertParams.after,
1347
+ AdapterInsertParams.beforeIndex,
1348
+ AdapterInsertParams.afterIndex
1349
+ ])
1350
+ ]
1317
1351
  },
1318
1352
  _g[AdapterInsertParams.after] = {
1319
- validators: [FUNC_WITH_X_ARGUMENTS$1(1), ONE_OF_MUST([
1320
- AdapterInsertParams.before, AdapterInsertParams.beforeIndex, AdapterInsertParams.afterIndex
1321
- ])]
1353
+ validators: [
1354
+ FUNC_WITH_X_ARGUMENTS$1(1),
1355
+ ONE_OF_MUST([
1356
+ AdapterInsertParams.before,
1357
+ AdapterInsertParams.beforeIndex,
1358
+ AdapterInsertParams.afterIndex
1359
+ ])
1360
+ ]
1322
1361
  },
1323
1362
  _g[AdapterInsertParams.beforeIndex] = {
1324
- validators: [INTEGER, ONE_OF_MUST([
1325
- AdapterInsertParams.before, AdapterInsertParams.after, AdapterInsertParams.afterIndex
1326
- ])]
1363
+ validators: [
1364
+ INTEGER,
1365
+ ONE_OF_MUST([
1366
+ AdapterInsertParams.before,
1367
+ AdapterInsertParams.after,
1368
+ AdapterInsertParams.afterIndex
1369
+ ])
1370
+ ]
1327
1371
  },
1328
1372
  _g[AdapterInsertParams.afterIndex] = {
1329
- validators: [INTEGER, ONE_OF_MUST([
1330
- AdapterInsertParams.before, AdapterInsertParams.after, AdapterInsertParams.beforeIndex
1331
- ])]
1373
+ validators: [
1374
+ INTEGER,
1375
+ ONE_OF_MUST([
1376
+ AdapterInsertParams.before,
1377
+ AdapterInsertParams.after,
1378
+ AdapterInsertParams.beforeIndex
1379
+ ])
1380
+ ]
1332
1381
  },
1333
1382
  _g[AdapterInsertParams.decrease] = {
1334
1383
  validators: [BOOLEAN],
@@ -1522,8 +1571,7 @@
1522
1571
  data: validate(options, ADAPTER_METHODS[_process || process])
1523
1572
  };
1524
1573
  if (result.data.isValid) {
1525
- result.params = Object.entries(result.data.params)
1526
- .reduce(function (acc, _b) {
1574
+ result.params = Object.entries(result.data.params).reduce(function (acc, _b) {
1527
1575
  var _c;
1528
1576
  var _d = __read(_b, 2), key = _d[0], value = _d[1].value;
1529
1577
  return (__assign(__assign({}, acc), (_c = {}, _c[key] = value, _c)));
@@ -1570,16 +1618,13 @@
1570
1618
  function Scroll() {
1571
1619
  return _super !== null && _super.apply(this, arguments) || this;
1572
1620
  }
1573
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
1574
- Scroll.run = function (scroller, payload) {
1621
+ Scroll.run = function (scroller, _payload) {
1575
1622
  var workflow = scroller.workflow, viewport = scroller.viewport;
1576
1623
  var position = viewport.scrollPosition;
1577
1624
  if (Scroll.onSynthetic(scroller, position)) {
1578
1625
  return;
1579
1626
  }
1580
- Scroll.onThrottle(scroller, position, function () {
1581
- return Scroll.onScroll(scroller, workflow);
1582
- });
1627
+ Scroll.onThrottle(scroller, position, function () { return Scroll.onScroll(scroller, workflow); });
1583
1628
  };
1584
1629
  Scroll.onSynthetic = function (scroller, position) {
1585
1630
  var scroll = scroller.state.scroll;
@@ -1590,29 +1635,34 @@
1590
1635
  }
1591
1636
  if (!scroll.syntheticFulfill || synthPos === position) {
1592
1637
  scroller.logger.log(function () { return [
1593
- 'skipping scroll', position,
1638
+ 'skipping scroll',
1639
+ position,
1594
1640
  "[".concat(scroll.syntheticFulfill ? '' : 'pre-', "synthetic]")
1595
1641
  ]; });
1596
1642
  return true;
1597
1643
  }
1598
1644
  scroller.logger.log(function () { return [
1599
- 'synthetic scroll has been fulfilled:', position, position < synthPos ? '<' : '>', synthPos
1645
+ 'synthetic scroll has been fulfilled:',
1646
+ position,
1647
+ position < synthPos ? '<' : '>',
1648
+ synthPos
1600
1649
  ]; });
1601
1650
  }
1602
1651
  return false;
1603
1652
  };
1604
1653
  Scroll.onThrottle = function (scroller, position, done) {
1605
- var scroll = scroller.state.scroll, throttle = scroller.settings.throttle, logger = scroller.logger;
1654
+ var state = scroller.state, settings = scroller.settings, logger = scroller.logger;
1655
+ var scroll = state.scroll;
1606
1656
  scroll.current = Scroll.getScrollEvent(position, scroll.previous);
1607
1657
  var _a = scroll.current, direction = _a.direction, time = _a.time;
1608
1658
  var timeDiff = scroll.previous ? time - scroll.previous.time : Infinity;
1609
- var delta = throttle - timeDiff;
1659
+ var delta = settings.throttle - timeDiff;
1610
1660
  var shouldDelay = isFinite(delta) && delta > 0;
1611
1661
  var alreadyDelayed = !!scroll.scrollTimer;
1612
1662
  logger.log(function () { return [
1613
1663
  direction === exports.Direction.backward ? '\u2934' : '\u2935',
1614
1664
  position,
1615
- shouldDelay ? (timeDiff + 'ms') : '0ms',
1665
+ shouldDelay ? timeDiff + 'ms' : '0ms',
1616
1666
  shouldDelay ? (alreadyDelayed ? 'delayed' : "/ ".concat(delta, "ms delay")) : ''
1617
1667
  ]; });
1618
1668
  if (!shouldDelay) {
@@ -1630,7 +1680,7 @@
1630
1680
  return [
1631
1681
  curr.direction === exports.Direction.backward ? '\u2934' : '\u2935',
1632
1682
  curr.position,
1633
- (curr.time - time) + 'ms',
1683
+ curr.time - time + 'ms',
1634
1684
  'triggered by timer set on',
1635
1685
  position
1636
1686
  ];
@@ -1658,7 +1708,11 @@
1658
1708
  scroll.previous = __assign({}, scroll.current);
1659
1709
  scroll.current = null;
1660
1710
  if (cycle.busy.get()) {
1661
- scroller.logger.log(function () { return ['skipping scroll', scroll.previous.position, '[pending]']; });
1711
+ scroller.logger.log(function () { return [
1712
+ 'skipping scroll',
1713
+ scroll.previous.position,
1714
+ '[pending]'
1715
+ ]; });
1662
1716
  return;
1663
1717
  }
1664
1718
  workflow.call({
@@ -1675,7 +1729,7 @@
1675
1729
  return _super !== null && _super.apply(this, arguments) || this;
1676
1730
  }
1677
1731
  Reset.run = function (scroller, options) {
1678
- var datasource = scroller.datasource, buffer = scroller.buffer, paddings = scroller.viewport.paddings, cycle = scroller.state.cycle;
1732
+ var datasource = scroller.datasource, buffer = scroller.buffer, viewport = scroller.viewport, state = scroller.state;
1679
1733
  if (options) {
1680
1734
  var data_1 = Reset.parseInput(scroller, options).data;
1681
1735
  if (!data_1.isValid) {
@@ -1691,12 +1745,12 @@
1691
1745
  });
1692
1746
  }
1693
1747
  buffer.reset(true);
1694
- paddings.backward.reset();
1695
- paddings.forward.reset();
1748
+ viewport.paddings.backward.reset();
1749
+ viewport.paddings.forward.reset();
1696
1750
  var payload = { datasource: datasource };
1697
- if (cycle.busy.get()) {
1751
+ if (state.cycle.busy.get()) {
1698
1752
  payload.finalize = true;
1699
- cycle.interrupter = Reset.process;
1753
+ state.cycle.interrupter = Reset.process;
1700
1754
  }
1701
1755
  scroller.workflow.call({
1702
1756
  process: Reset.process,
@@ -1824,7 +1878,7 @@
1824
1878
  });
1825
1879
  };
1826
1880
  Update.doUpdate = function (scroller, params) {
1827
- var buffer = scroller.buffer, viewport = scroller.viewport, fetch = scroller.state.fetch, routines = scroller.routines, logger = scroller.logger;
1881
+ var buffer = scroller.buffer, viewport = scroller.viewport, state = scroller.state, routines = scroller.routines, logger = scroller.logger;
1828
1882
  if (!buffer.items) {
1829
1883
  logger.log(function () { return 'no items in Buffer'; });
1830
1884
  return false;
@@ -1837,26 +1891,31 @@
1837
1891
  delta = -buffer.getSizeByIndex(trackedIndex) + firstItemDiff;
1838
1892
  }
1839
1893
  toRemove.forEach(function (item) { return item.hide(); });
1840
- logger.log(function () { return toRemove.length
1841
- ? 'items to remove: [' + toRemove.map(function (_a) {
1842
- var $index = _a.$index;
1843
- return $index;
1844
- }).join(',') + ']'
1845
- : 'no items to remove'; });
1846
- if (toRemove.length) { // insertions will be processed on render
1894
+ logger.log(function () {
1895
+ return toRemove.length
1896
+ ? 'items to remove: [' + toRemove.map(function (_a) {
1897
+ var $index = _a.$index;
1898
+ return $index;
1899
+ }).join(',') + ']'
1900
+ : 'no items to remove';
1901
+ });
1902
+ if (toRemove.length) {
1903
+ // insertions will be processed on render
1847
1904
  buffer.checkDefaultSize();
1848
1905
  }
1849
1906
  var toRender = buffer.items.filter(function (_a) {
1850
1907
  var toInsert = _a.toInsert;
1851
1908
  return toInsert;
1852
1909
  });
1853
- logger.log(function () { return toRender.length
1854
- ? 'items to render: [' + toRender.map(function (_a) {
1855
- var $index = _a.$index;
1856
- return $index;
1857
- }).join(',') + ']'
1858
- : 'no items to render'; });
1859
- fetch.update(trackedIndex, delta, toRender, toRemove);
1910
+ logger.log(function () {
1911
+ return toRender.length
1912
+ ? 'items to render: [' + toRender.map(function (_a) {
1913
+ var $index = _a.$index;
1914
+ return $index;
1915
+ }).join(',') + ']'
1916
+ : 'no items to render';
1917
+ });
1918
+ state.fetch.update(trackedIndex, delta, toRender, toRemove);
1860
1919
  return !!toRemove.length || !!toRender.length;
1861
1920
  };
1862
1921
  return Update;
@@ -1889,7 +1948,7 @@
1889
1948
  return true;
1890
1949
  };
1891
1950
  Insert.insertEmpty = function (scroller, params) {
1892
- var buffer = scroller.buffer, routines = scroller.routines, fetch = scroller.state.fetch;
1951
+ var buffer = scroller.buffer, routines = scroller.routines, state = scroller.state;
1893
1952
  if (buffer.size) {
1894
1953
  return false;
1895
1954
  }
@@ -1897,7 +1956,7 @@
1897
1956
  if (!buffer.fillEmpty(items, beforeIndex, afterIndex, !!decrease, function (index, data) { return new Item(index, data, routines); })) {
1898
1957
  return false;
1899
1958
  }
1900
- fetch.fill(buffer.items, buffer.startIndex);
1959
+ state.fetch.fill(buffer.items, buffer.startIndex);
1901
1960
  return true;
1902
1961
  };
1903
1962
  Insert.insertInBuffer = function (scroller, params) {
@@ -1921,12 +1980,13 @@
1921
1980
  };
1922
1981
  Insert.insertVirtually = function (scroller, params) {
1923
1982
  var beforeIndex = params.beforeIndex, afterIndex = params.afterIndex, items = params.items, decrease = params.decrease;
1924
- var buffer = scroller.buffer, fetch = scroller.state.fetch, viewport = scroller.viewport;
1983
+ var buffer = scroller.buffer, state = scroller.state, viewport = scroller.viewport;
1925
1984
  var direction = Number.isInteger(beforeIndex) ? exports.Direction.backward : exports.Direction.forward;
1926
1985
  var indexToInsert = (direction === exports.Direction.backward ? beforeIndex : afterIndex);
1927
1986
  if (!buffer.insertVirtually(items, indexToInsert, direction, !!decrease)) {
1928
1987
  return false;
1929
1988
  }
1989
+ var fetch = state.fetch;
1930
1990
  var _a = viewport.getEdgeVisibleItem(buffer.items, exports.Direction.backward), index = _a.index, diff = _a.diff;
1931
1991
  fetch.firstVisible.index = index;
1932
1992
  if (!isNaN(index)) {
@@ -1966,7 +2026,8 @@
1966
2026
  items = __spreadArray([], __read(items), false).reverse();
1967
2027
  }
1968
2028
  else {
1969
- afterIndex = (eof ? buffer.absMaxIndex : buffer.maxIndex) - (!buffer.size && !opposite ? 1 : 0);
2029
+ afterIndex =
2030
+ (eof ? buffer.absMaxIndex : buffer.maxIndex) - (!buffer.size && !opposite ? 1 : 0);
1970
2031
  }
1971
2032
  return Insert.doInsert(scroller, {
1972
2033
  items: items,
@@ -1985,7 +2046,7 @@
1985
2046
  return _super !== null && _super.apply(this, arguments) || this;
1986
2047
  }
1987
2048
  Check.run = function (scroller) {
1988
- var workflow = scroller.workflow, buffer = scroller.buffer, fetch = scroller.state.fetch, viewport = scroller.viewport;
2049
+ var workflow = scroller.workflow, buffer = scroller.buffer, state = scroller.state, viewport = scroller.viewport;
1989
2050
  var min = Infinity, max = -Infinity;
1990
2051
  buffer.items.forEach(function (item) {
1991
2052
  var size = item.size;
@@ -1997,14 +2058,15 @@
1997
2058
  }
1998
2059
  });
1999
2060
  if (Number.isFinite(min)) {
2000
- fetch.first.indexBuffer = buffer.firstIndex;
2001
- fetch.last.indexBuffer = buffer.lastIndex;
2061
+ var fetch_1 = state.fetch;
2062
+ fetch_1.first.indexBuffer = buffer.firstIndex;
2063
+ fetch_1.last.indexBuffer = buffer.lastIndex;
2002
2064
  var _a = viewport.getEdgeVisibleItem(buffer.items, exports.Direction.backward), firstIndex = _a.index, diff = _a.diff;
2003
- fetch.firstVisible.index = firstIndex;
2065
+ fetch_1.firstVisible.index = firstIndex;
2004
2066
  if (!isNaN(firstIndex)) {
2005
- fetch.firstVisible.delta = -buffer.getSizeByIndex(firstIndex) + diff;
2067
+ fetch_1.firstVisible.delta = -buffer.getSizeByIndex(firstIndex) + diff;
2006
2068
  }
2007
- fetch.check(buffer.items.filter(function (item) { return item.$index >= min && item.$index <= max; }));
2069
+ fetch_1.check(buffer.items.filter(function (item) { return item.$index >= min && item.$index <= max; }));
2008
2070
  }
2009
2071
  scroller.logger.stat('check');
2010
2072
  workflow.call({
@@ -2045,9 +2107,7 @@
2045
2107
  if (params.indexes && params.indexes.length) {
2046
2108
  var diffLeft_1 = (params.increase ? 1 : 0) * removed.length;
2047
2109
  var diffRight_1 = (params.increase ? 0 : -1) * removed.length;
2048
- params.indexes = params.indexes.map(function (index) {
2049
- return index + (index < removed[0] ? diffLeft_1 : diffRight_1);
2050
- });
2110
+ params.indexes = params.indexes.map(function (index) { return index + (index < removed[0] ? diffLeft_1 : diffRight_1); });
2051
2111
  }
2052
2112
  }
2053
2113
  var shouldVirtual = Remove.removeVirtualItems(scroller, params);
@@ -2063,12 +2123,9 @@
2063
2123
  return [];
2064
2124
  }
2065
2125
  var newPredicate = function (item) {
2066
- return (predicate && predicate(item)) ||
2067
- (!!indexes && indexes.includes(item.$index));
2126
+ return (predicate && predicate(item)) || (!!indexes && indexes.includes(item.$index));
2068
2127
  };
2069
- var indexesToRemove = scroller.buffer.items.reduce(function (acc, item) {
2070
- return newPredicate(item) ? __spreadArray(__spreadArray([], __read(acc), false), [item.$index], false) : acc;
2071
- }, []);
2128
+ var indexesToRemove = scroller.buffer.items.reduce(function (acc, item) { return (newPredicate(item) ? __spreadArray(__spreadArray([], __read(acc), false), [item.$index], false) : acc); }, []);
2072
2129
  var updateOptions = {
2073
2130
  predicate: function (item) { return !newPredicate(item); },
2074
2131
  fixRight: increase
@@ -2081,7 +2138,7 @@
2081
2138
  if (!indexes || !indexes.length) {
2082
2139
  return false;
2083
2140
  }
2084
- var buffer = scroller.buffer, viewport = scroller.viewport, fetch = scroller.state.fetch;
2141
+ var buffer = scroller.buffer, viewport = scroller.viewport, state = scroller.state;
2085
2142
  // get items to remove
2086
2143
  var finiteAbsMinIndex = buffer.finiteAbsMinIndex, firstIndex = buffer.firstIndex, finiteAbsMaxIndex = buffer.finiteAbsMaxIndex, lastIndex = buffer.lastIndex;
2087
2144
  var toRemove = [];
@@ -2101,6 +2158,7 @@
2101
2158
  return false;
2102
2159
  }
2103
2160
  // what should be shown after remove; Buffer removal has priority
2161
+ var fetch = state.fetch;
2104
2162
  if (isNaN(fetch.firstVisible.index)) {
2105
2163
  var _a = viewport.getEdgeVisibleItem(buffer.items, exports.Direction.backward), index = _a.index, diff = _a.diff;
2106
2164
  fetch.firstVisible.index = index;
@@ -2120,7 +2178,12 @@
2120
2178
  if (isNaN(firstVisible.index)) {
2121
2179
  return;
2122
2180
  }
2123
- var shift = listToRemove.reduce(function (acc, index) { return acc + (((increase && index > firstVisible.index) || (!increase && index < firstVisible.index)) ? 1 : 0); }, 0);
2181
+ var shift = listToRemove.reduce(function (acc, index) {
2182
+ return acc +
2183
+ ((increase && index > firstVisible.index) || (!increase && index < firstVisible.index)
2184
+ ? 1
2185
+ : 0);
2186
+ }, 0);
2124
2187
  firstVisible.index = firstVisible.index + (increase ? shift : -shift);
2125
2188
  };
2126
2189
  return Remove;
@@ -2156,7 +2219,7 @@
2156
2219
  var shouldReplace = Replace.doReplace(scroller, params);
2157
2220
  scroller.workflow.call({
2158
2221
  process: Replace.process,
2159
- status: shouldReplace ? ProcessStatus.next : ProcessStatus.done,
2222
+ status: shouldReplace ? ProcessStatus.next : ProcessStatus.done
2160
2223
  });
2161
2224
  };
2162
2225
  Replace.doReplace = function (scroller, params) {
@@ -2250,7 +2313,9 @@
2250
2313
  case FixParams.scrollToItem:
2251
2314
  if (methodData.params) {
2252
2315
  var scrollToItemOpt = methodData.params[FixParams.scrollToItemOpt];
2253
- var options = scrollToItemOpt ? scrollToItemOpt.value : void 0;
2316
+ var options = scrollToItemOpt
2317
+ ? scrollToItemOpt.value
2318
+ : void 0;
2254
2319
  return Fix.scrollToItem(scroller, value, options);
2255
2320
  }
2256
2321
  return;
@@ -2282,7 +2347,7 @@
2282
2347
  Fix.updateItems = function (_a, value) {
2283
2348
  var buffer = _a.buffer, logger = _a.logger;
2284
2349
  var updateReference = false;
2285
- var updater = function () { return updateReference = true; };
2350
+ var updater = function () { return (updateReference = true); };
2286
2351
  buffer.items.forEach(function (item) { return value(item.get(), updater); });
2287
2352
  if (updateReference) {
2288
2353
  logger.log(function () { return 'update Buffer.items reference'; });
@@ -2322,7 +2387,8 @@
2322
2387
  return _super !== null && _super.apply(this, arguments) || this;
2323
2388
  }
2324
2389
  PreFetch.run = function (scroller) {
2325
- var workflow = scroller.workflow, buffer = scroller.buffer, _a = scroller.state, fetch = _a.fetch, cycle = _a.cycle;
2390
+ var workflow = scroller.workflow, buffer = scroller.buffer, state = scroller.state;
2391
+ var fetch = state.fetch, cycle = state.cycle;
2326
2392
  fetch.minIndex = buffer.minIndex;
2327
2393
  // set first and last indexes of items to fetch
2328
2394
  PreFetch.setPositionsAndIndexes(scroller);
@@ -2349,7 +2415,8 @@
2349
2415
  scroller.logger.fetch();
2350
2416
  };
2351
2417
  PreFetch.setPositions = function (scroller) {
2352
- var positions = scroller.state.fetch.positions, viewport = scroller.viewport;
2418
+ var state = scroller.state, viewport = scroller.viewport;
2419
+ var positions = state.fetch.positions;
2353
2420
  var paddingDelta = viewport.getBufferPadding();
2354
2421
  positions.before = viewport.scrollPosition;
2355
2422
  positions.startDelta = PreFetch.getStartDelta(scroller);
@@ -2358,7 +2425,9 @@
2358
2425
  positions.end = positions.relative + viewport.getSize() + paddingDelta;
2359
2426
  };
2360
2427
  PreFetch.getStartDelta = function (scroller) {
2361
- var buffer = scroller.buffer, offset = scroller.viewport.offset;
2428
+ // calculate size before start index
2429
+ var buffer = scroller.buffer, viewport = scroller.viewport;
2430
+ var offset = viewport.offset;
2362
2431
  var startDelta = 0;
2363
2432
  if (offset) {
2364
2433
  startDelta += offset;
@@ -2376,7 +2445,8 @@
2376
2445
  };
2377
2446
  PreFetch.setFirstIndex = function (scroller) {
2378
2447
  var state = scroller.state, buffer = scroller.buffer;
2379
- var _a = state.fetch, start = _a.positions.start, first = _a.first;
2448
+ var _a = state.fetch, positions = _a.positions, first = _a.first;
2449
+ var start = positions.start;
2380
2450
  var firstIndex = buffer.startIndex;
2381
2451
  var firstIndexPosition = 0;
2382
2452
  if (state.cycle.innerLoop.isInitial) {
@@ -2388,10 +2458,10 @@
2388
2458
  else {
2389
2459
  var position = firstIndexPosition;
2390
2460
  var index = firstIndex;
2391
- while (1) { // eslint-disable-line no-constant-condition
2461
+ while (true) {
2392
2462
  if (start >= 0) {
2393
2463
  var size = buffer.getSizeByIndex(index);
2394
- var diff = (position + size) - start;
2464
+ var diff = position + size - start;
2395
2465
  if (diff > 0) {
2396
2466
  firstIndex = index;
2397
2467
  firstIndexPosition = position;
@@ -2422,8 +2492,10 @@
2422
2492
  first.position = firstIndexPosition;
2423
2493
  };
2424
2494
  PreFetch.setLastIndex = function (scroller) {
2425
- var _a = scroller.state, fetch = _a.fetch, cycle = _a.cycle, buffer = scroller.buffer, settings = scroller.settings;
2426
- var firstVisible = fetch.firstVisible, _b = fetch.positions, relative = _b.relative, end = _b.end, first = fetch.first, last = fetch.last;
2495
+ var state = scroller.state, buffer = scroller.buffer, settings = scroller.settings;
2496
+ var fetch = state.fetch, cycle = state.cycle;
2497
+ var firstVisible = fetch.firstVisible, positions = fetch.positions, first = fetch.first, last = fetch.last;
2498
+ var relative = positions.relative, end = positions.end;
2427
2499
  var lastIndex;
2428
2500
  if (!buffer.defaultSize) {
2429
2501
  // just to fetch forward bufferSize items if neither averageItemSize nor itemSize are present
@@ -2434,7 +2506,7 @@
2434
2506
  var index = first.indexBuffer;
2435
2507
  var position = first.position;
2436
2508
  lastIndex = index;
2437
- while (1) { // eslint-disable-line no-constant-condition
2509
+ while (true) {
2438
2510
  lastIndex = index;
2439
2511
  var size = buffer.getSizeByIndex(index);
2440
2512
  position += size;
@@ -2488,7 +2560,8 @@
2488
2560
  }
2489
2561
  };
2490
2562
  PreFetch.checkBufferGaps = function (scroller) {
2491
- var buffer = scroller.buffer, fetch = scroller.state.fetch;
2563
+ var buffer = scroller.buffer, state = scroller.state;
2564
+ var fetch = state.fetch;
2492
2565
  if (!buffer.size) {
2493
2566
  return;
2494
2567
  }
@@ -2507,7 +2580,8 @@
2507
2580
  }
2508
2581
  };
2509
2582
  PreFetch.checkFetchPackSize = function (scroller) {
2510
- var buffer = scroller.buffer, fetch = scroller.state.fetch;
2583
+ var buffer = scroller.buffer, state = scroller.state;
2584
+ var fetch = state.fetch;
2511
2585
  if (!fetch.shouldFetch) {
2512
2586
  return;
2513
2587
  }
@@ -2517,7 +2591,8 @@
2517
2591
  if (diff <= 0) {
2518
2592
  return;
2519
2593
  }
2520
- if (!buffer.size || lastIndex > buffer.items[0].$index) { // forward
2594
+ if (!buffer.size || lastIndex > buffer.items[0].$index) {
2595
+ // forward
2521
2596
  var newLastIndex = Math.min(lastIndex + diff, buffer.absMaxIndex);
2522
2597
  if (newLastIndex > lastIndex) {
2523
2598
  fetch.last.index = fetch.last.indexBuffer = newLastIndex;
@@ -2535,11 +2610,13 @@
2535
2610
  }
2536
2611
  };
2537
2612
  PreFetch.setFetchDirection = function (scroller) {
2538
- var buffer = scroller.buffer, fetch = scroller.state.fetch;
2613
+ var buffer = scroller.buffer, state = scroller.state;
2614
+ var fetch = state.fetch;
2539
2615
  if (fetch.last.index) {
2540
2616
  var direction_1 = exports.Direction.forward;
2541
2617
  if (buffer.size) {
2542
- direction_1 = fetch.last.index < buffer.items[0].$index ? exports.Direction.backward : exports.Direction.forward;
2618
+ direction_1 =
2619
+ fetch.last.index < buffer.items[0].$index ? exports.Direction.backward : exports.Direction.forward;
2543
2620
  }
2544
2621
  fetch.direction = direction_1;
2545
2622
  scroller.logger.log(function () { return "fetch direction is \"".concat(direction_1, "\""); });
@@ -2601,7 +2678,8 @@
2601
2678
  }
2602
2679
  }
2603
2680
  else {
2604
- var _b = scroller.state, scroll_1 = _b.scroll, fetch_1 = _b.fetch, viewport = scroller.viewport;
2681
+ var state = scroller.state, viewport = scroller.viewport;
2682
+ var scroll_1 = state.scroll, fetch_1 = state.fetch;
2605
2683
  if (scroll_1.positionBeforeAsync === null) {
2606
2684
  scroll_1.positionBeforeAsync = viewport.scrollPosition;
2607
2685
  }
@@ -2645,9 +2723,10 @@
2645
2723
  });
2646
2724
  }
2647
2725
  }
2648
- if (immediateData || immediateError) { // callback case or immediate observable
2726
+ if (immediateData || immediateError) {
2727
+ // callback case or immediate observable
2649
2728
  return {
2650
- data: immediateError ? null : (immediateData || []),
2729
+ data: immediateError ? null : immediateData || [],
2651
2730
  error: immediateError,
2652
2731
  isError: !!immediateError
2653
2732
  };
@@ -2671,44 +2750,45 @@
2671
2750
  PostFetch.setBufferLimits(scroller);
2672
2751
  workflow.call({
2673
2752
  process: PostFetch.process,
2674
- status: scroller.state.fetch.hasNewItems
2675
- ? ProcessStatus.next
2676
- : ProcessStatus.done
2753
+ status: scroller.state.fetch.hasNewItems ? ProcessStatus.next : ProcessStatus.done
2677
2754
  });
2678
2755
  }
2679
2756
  else {
2680
2757
  workflow.call({
2681
2758
  process: PostFetch.process,
2682
2759
  status: ProcessStatus.error,
2683
- payload: { error: 'Can\'t set buffer items' }
2760
+ payload: { error: 'Can not set buffer items' }
2684
2761
  });
2685
2762
  }
2686
2763
  };
2687
2764
  PostFetch.setBufferLimits = function (scroller) {
2688
- var buffer = scroller.buffer, _a = scroller.state, fetch = _a.fetch, innerLoop = _a.cycle.innerLoop;
2689
- var items = fetch.items, first = fetch.first.index, last = fetch.last.index;
2765
+ var buffer = scroller.buffer, state = scroller.state;
2766
+ var fetch = state.fetch, cycle = state.cycle;
2767
+ var items = fetch.items, first = fetch.first, last = fetch.last;
2690
2768
  if (!items.length) {
2691
- if (last < buffer.minIndex || innerLoop.isInitial) {
2769
+ if (last.index < buffer.minIndex || cycle.innerLoop.isInitial) {
2692
2770
  buffer.absMinIndex = buffer.minIndex;
2693
2771
  }
2694
- if (first > buffer.maxIndex || innerLoop.isInitial) {
2772
+ if (first.index > buffer.maxIndex || cycle.innerLoop.isInitial) {
2695
2773
  buffer.absMaxIndex = buffer.maxIndex;
2696
2774
  }
2697
2775
  }
2698
2776
  else {
2699
2777
  var lastIndex = items.length - 1;
2700
- if (first < items[0].$index) {
2778
+ if (first.index < items[0].$index) {
2701
2779
  buffer.absMinIndex = items[0].$index;
2702
2780
  }
2703
- if (last > items[lastIndex].$index) {
2781
+ if (last.index > items[lastIndex].$index) {
2704
2782
  buffer.absMaxIndex = items[lastIndex].$index;
2705
2783
  }
2706
2784
  }
2707
2785
  };
2708
2786
  PostFetch.setItems = function (scroller) {
2709
- var buffer = scroller.buffer, _a = scroller.state, fetch = _a.fetch, cycle = _a.cycle;
2787
+ var buffer = scroller.buffer, state = scroller.state;
2788
+ var fetch = state.fetch, cycle = state.cycle;
2710
2789
  var items = fetch.newItemsData;
2711
- if (!items || !items.length) { // empty result
2790
+ if (!items || !items.length) {
2791
+ // empty result
2712
2792
  return true;
2713
2793
  }
2714
2794
  // eof/bof case, need to shift fetch index if bof
@@ -2723,9 +2803,7 @@
2723
2803
  fetchIndex = buffer.firstIndex - items.length;
2724
2804
  }
2725
2805
  }
2726
- fetch.items = items.map(function (item, index) {
2727
- return new Item(fetchIndex + index, item, scroller.routines);
2728
- });
2806
+ fetch.items = items.map(function (item, index) { return new Item(fetchIndex + index, item, scroller.routines); });
2729
2807
  return buffer.setItems(fetch.items);
2730
2808
  };
2731
2809
  return PostFetch;
@@ -2737,7 +2815,8 @@
2737
2815
  return _super !== null && _super.apply(this, arguments) || this;
2738
2816
  }
2739
2817
  Render.run = function (scroller) {
2740
- var workflow = scroller.workflow, _a = scroller.state, cycle = _a.cycle, render = _a.render, scroll = _a.scroll, fetch = _a.fetch, viewport = scroller.viewport, routines = scroller.routines;
2818
+ var workflow = scroller.workflow, state = scroller.state, viewport = scroller.viewport, routines = scroller.routines;
2819
+ var cycle = state.cycle, render = state.render, scroll = state.scroll, fetch = state.fetch;
2741
2820
  scroller.logger.stat('before new items render');
2742
2821
  if (scroll.positionBeforeAsync === null) {
2743
2822
  scroll.positionBeforeAsync = viewport.scrollPosition;
@@ -2755,26 +2834,25 @@
2755
2834
  workflow.call({
2756
2835
  process: Render.process,
2757
2836
  status: ProcessStatus.error,
2758
- payload: { error: 'Can\'t associate item with element' }
2837
+ payload: { error: 'Can not associate item with element' }
2759
2838
  });
2760
2839
  }
2761
2840
  }, { items: fetch.items.map(function (i) { return i.get(); }) });
2762
2841
  };
2763
2842
  Render.doRender = function (scroller) {
2764
- var _a = scroller.state, fetch = _a.fetch, render = _a.render, viewport = scroller.viewport, buffer = scroller.buffer, logger = scroller.logger;
2843
+ var state = scroller.state, viewport = scroller.viewport, buffer = scroller.buffer, logger = scroller.logger;
2844
+ var fetch = state.fetch, render = state.render;
2765
2845
  render.positionBefore = viewport.scrollPosition;
2766
2846
  if (!fetch.isCheck) {
2767
2847
  render.sizeBefore = viewport.getScrollableSize();
2768
- if (!fetch.items.every(function (item) {
2769
- return Render.processElement(scroller, item);
2770
- })) {
2848
+ if (!fetch.items.every(function (item) { return Render.processElement(scroller, item); })) {
2771
2849
  return false;
2772
2850
  }
2773
2851
  }
2774
2852
  buffer.checkDefaultSize();
2775
2853
  render.sizeAfter = viewport.getScrollableSize();
2776
2854
  logger.stat('after new items render');
2777
- logger.log(function () { return render.noSize ? 'viewport size has not been changed' : void 0; });
2855
+ logger.log(function () { return (render.noSize ? 'viewport size has not been changed' : void 0); });
2778
2856
  return true;
2779
2857
  };
2780
2858
  Render.processElement = function (scroller, item) {
@@ -2803,7 +2881,8 @@
2803
2881
  }
2804
2882
  End.run = function (scroller, _a) {
2805
2883
  var _b = _a === void 0 ? {} : _a, error = _b.error;
2806
- var workflow = scroller.workflow, interrupter = scroller.state.cycle.interrupter;
2884
+ var workflow = scroller.workflow, state = scroller.state;
2885
+ var interrupter = state.cycle.interrupter;
2807
2886
  if (!error && !interrupter) {
2808
2887
  // set out params accessible via Adapter
2809
2888
  End.calculateParams(scroller);
@@ -2859,10 +2938,10 @@
2859
2938
  return _super !== null && _super.apply(this, arguments) || this;
2860
2939
  }
2861
2940
  Adjust.run = function (scroller) {
2862
- var workflow = scroller.workflow, viewport = scroller.viewport, scroll = scroller.state.scroll;
2863
- scroll.positionBeforeAdjust = viewport.scrollPosition;
2941
+ var workflow = scroller.workflow, viewport = scroller.viewport, state = scroller.state;
2942
+ state.scroll.positionBeforeAdjust = viewport.scrollPosition;
2864
2943
  Adjust.setPaddings(scroller);
2865
- scroll.positionAfterAdjust = viewport.scrollPosition;
2944
+ state.scroll.positionAfterAdjust = viewport.scrollPosition;
2866
2945
  // scroll position adjustments
2867
2946
  var position = Adjust.calculatePosition(scroller);
2868
2947
  // additional adjustment if the position can't be reached during the initial cycle
@@ -2876,7 +2955,7 @@
2876
2955
  });
2877
2956
  };
2878
2957
  Adjust.setPaddings = function (scroller) {
2879
- var viewport = scroller.viewport, buffer = scroller.buffer, inverse = scroller.settings.inverse, fetch = scroller.state.fetch;
2958
+ var viewport = scroller.viewport, buffer = scroller.buffer, settings = scroller.settings, state = scroller.state;
2880
2959
  var firstItem = buffer.getFirstVisibleItem();
2881
2960
  var lastItem = buffer.getLastVisibleItem();
2882
2961
  var first, last;
@@ -2885,7 +2964,8 @@
2885
2964
  last = lastItem.$index;
2886
2965
  }
2887
2966
  else {
2888
- first = !isNaN(fetch.firstVisible.index) ? fetch.firstVisible.index : buffer.startIndex;
2967
+ var fetch_1 = state.fetch;
2968
+ first = !isNaN(fetch_1.firstVisible.index) ? fetch_1.firstVisible.index : buffer.startIndex;
2889
2969
  last = first - 1;
2890
2970
  }
2891
2971
  var _a = viewport.paddings, forward = _a.forward, backward = _a.backward;
@@ -2902,14 +2982,16 @@
2902
2982
  var scrollSize = bwdSize + bufferSize + fwdSize;
2903
2983
  var viewportSizeDiff = viewport.getSize() - scrollSize;
2904
2984
  if (viewportSizeDiff > 0) {
2905
- if (inverse) {
2985
+ if (settings.inverse) {
2906
2986
  bwdSize += viewportSizeDiff;
2907
2987
  }
2908
2988
  else {
2909
2989
  fwdSize += viewportSizeDiff;
2910
2990
  }
2911
2991
  scroller.logger.log(function () {
2912
- return inverse ? 'backward' : 'forward' + " padding will be increased by ".concat(viewportSizeDiff, " to fill the viewport");
2992
+ return settings.inverse
2993
+ ? 'backward'
2994
+ : 'forward' + " padding will be increased by ".concat(viewportSizeDiff, " to fill the viewport");
2913
2995
  });
2914
2996
  }
2915
2997
  backward.size = bwdSize;
@@ -2917,7 +2999,8 @@
2917
2999
  scroller.logger.stat('after paddings adjustments');
2918
3000
  };
2919
3001
  Adjust.calculatePosition = function (scroller) {
2920
- var viewport = scroller.viewport, buffer = scroller.buffer, _a = scroller.state, fetch = _a.fetch, render = _a.render, scroll = _a.scroll;
3002
+ var viewport = scroller.viewport, buffer = scroller.buffer, state = scroller.state;
3003
+ var fetch = state.fetch, render = state.render, scroll = state.scroll;
2921
3004
  var position = viewport.paddings.backward.size;
2922
3005
  // increase the position to meet the expectation of the first visible item
2923
3006
  if (!isNaN(fetch.firstVisible.index) && !isNaN(buffer.firstIndex)) {
@@ -2954,8 +3037,8 @@
2954
3037
  return Math.round(position);
2955
3038
  };
2956
3039
  Adjust.setAdditionalForwardPadding = function (scroller, position) {
2957
- var viewport = scroller.viewport, buffer = scroller.buffer, cycle = scroller.state.cycle;
2958
- if (!cycle.isInitial || !End.shouldContinueRun(scroller, null)) {
3040
+ var viewport = scroller.viewport, buffer = scroller.buffer, state = scroller.state;
3041
+ if (!state.cycle.isInitial || !End.shouldContinueRun(scroller, null)) {
2959
3042
  return;
2960
3043
  }
2961
3044
  var diff = position - viewport.getMaxScrollPosition();
@@ -2978,7 +3061,8 @@
2978
3061
  }
2979
3062
  };
2980
3063
  Adjust.setPosition = function (scroller, position, done) {
2981
- var scroll = scroller.state.scroll, viewport = scroller.viewport, routines = scroller.routines;
3064
+ var state = scroller.state, viewport = scroller.viewport, routines = scroller.routines;
3065
+ var scroll = state.scroll;
2982
3066
  if (!scroll.hasPositionChanged(position)) {
2983
3067
  return done();
2984
3068
  }
@@ -3056,7 +3140,8 @@
3056
3140
  return false;
3057
3141
  };
3058
3142
  PreClip.isBackward = function (scroller, firstIndex) {
3059
- var buffer = scroller.buffer, _a = scroller.state, clip = _a.clip, fetch = _a.fetch;
3143
+ var buffer = scroller.buffer, state = scroller.state;
3144
+ var clip = state.clip, fetch = state.fetch;
3060
3145
  if (clip.force) {
3061
3146
  return clip.forceBackward;
3062
3147
  }
@@ -3068,7 +3153,8 @@
3068
3153
  return false;
3069
3154
  };
3070
3155
  PreClip.isForward = function (scroller, lastIndex) {
3071
- var buffer = scroller.buffer, _a = scroller.state, clip = _a.clip, fetch = _a.fetch;
3156
+ var buffer = scroller.buffer, state = scroller.state;
3157
+ var clip = state.clip, fetch = state.fetch;
3072
3158
  if (clip.force) {
3073
3159
  return clip.forceForward;
3074
3160
  }
@@ -3082,8 +3168,7 @@
3082
3168
  PreClip.prepareClipByDirection = function (scroller, direction, edgeIndex) {
3083
3169
  var forward = direction === exports.Direction.forward;
3084
3170
  scroller.buffer.items.forEach(function (item) {
3085
- if ((!forward && item.$index < edgeIndex) ||
3086
- (forward && item.$index > edgeIndex)) {
3171
+ if ((!forward && item.$index < edgeIndex) || (forward && item.$index > edgeIndex)) {
3087
3172
  item.toRemove = true;
3088
3173
  item.removeDirection = direction;
3089
3174
  scroller.state.clip.doClip = true;
@@ -3108,9 +3193,9 @@
3108
3193
  };
3109
3194
  Clip.doClip = function (scroller) {
3110
3195
  var _a;
3111
- var buffer = scroller.buffer, paddings = scroller.viewport.paddings, clip = scroller.state.clip, logger = scroller.logger;
3196
+ var buffer = scroller.buffer, viewport = scroller.viewport, state = scroller.state, logger = scroller.logger;
3112
3197
  var size = (_a = {}, _a[exports.Direction.backward] = 0, _a[exports.Direction.forward] = 0, _a);
3113
- logger.stat("before clip (".concat(++clip.callCount, ")"));
3198
+ logger.stat("before clip (".concat(++state.clip.callCount, ")"));
3114
3199
  var itemsToRemove = buffer.items.filter(function (item) {
3115
3200
  if (!item.toRemove) {
3116
3201
  return false;
@@ -3121,10 +3206,10 @@
3121
3206
  });
3122
3207
  if (itemsToRemove.length) {
3123
3208
  if (size[exports.Direction.backward]) {
3124
- paddings.byDirection(exports.Direction.backward).size += size[exports.Direction.backward];
3209
+ viewport.paddings.byDirection(exports.Direction.backward).size += size[exports.Direction.backward];
3125
3210
  }
3126
3211
  if (size[exports.Direction.forward]) {
3127
- paddings.byDirection(exports.Direction.forward).size += size[exports.Direction.forward];
3212
+ viewport.paddings.byDirection(exports.Direction.forward).size += size[exports.Direction.forward];
3128
3213
  }
3129
3214
  if (scroller.settings.onBeforeClip) {
3130
3215
  scroller.settings.onBeforeClip(itemsToRemove.map(function (item) { return item.get(); }));
@@ -3158,7 +3243,7 @@
3158
3243
  if (!_this.debug) {
3159
3244
  return;
3160
3245
  }
3161
- var params = (args === void 0 ? [] : (Array.isArray(args) ? args : [args]))
3246
+ var params = (args === void 0 ? [] : Array.isArray(args) ? args : [args])
3162
3247
  .map(function (arg) {
3163
3248
  if (typeof arg === 'function') {
3164
3249
  return 'func';
@@ -3178,26 +3263,36 @@
3178
3263
  this.debug = settings.debug;
3179
3264
  this.immediateLog = settings.immediateLog;
3180
3265
  this.logTime = settings.logTime;
3181
- this.getTime = function () {
3182
- return scroller.state && " // time: ".concat(scroller.state.time);
3183
- };
3266
+ this.logColor = settings.logColor;
3267
+ this.getTime = function () { return scroller.state && " // time: ".concat(scroller.state.time); };
3184
3268
  this.getStat = function () {
3185
3269
  var buffer = scroller.buffer, viewport = scroller.viewport;
3186
3270
  var first = buffer.getFirstVisibleItem();
3187
3271
  var last = buffer.getLastVisibleItem();
3188
- return 'pos: ' + viewport.scrollPosition + ', ' +
3189
- 'size: ' + viewport.getScrollableSize() + ', ' +
3190
- 'bwd_p: ' + viewport.paddings.backward.size + ', ' +
3191
- 'fwd_p: ' + viewport.paddings.forward.size + ', ' +
3192
- 'default: ' + (buffer.defaultSize || 'no') + ', ' +
3193
- 'items: ' + buffer.getVisibleItemsCount() + ', ' +
3194
- 'range: ' + (first && last ? "[".concat(first.$index, "..").concat(last.$index, "]") : 'no');
3272
+ return ('pos: ' +
3273
+ viewport.scrollPosition +
3274
+ ', ' +
3275
+ 'size: ' +
3276
+ viewport.getScrollableSize() +
3277
+ ', ' +
3278
+ 'bwd_p: ' +
3279
+ viewport.paddings.backward.size +
3280
+ ', ' +
3281
+ 'fwd_p: ' +
3282
+ viewport.paddings.forward.size +
3283
+ ', ' +
3284
+ 'default: ' +
3285
+ (buffer.defaultSize || 'no') +
3286
+ ', ' +
3287
+ 'items: ' +
3288
+ buffer.getVisibleItemsCount() +
3289
+ ', ' +
3290
+ 'range: ' +
3291
+ (first && last ? "[".concat(first.$index, "..").concat(last.$index, "]") : 'no'));
3195
3292
  };
3196
3293
  this.getFetchRange = function () {
3197
3294
  var _a = scroller.state.fetch, first = _a.first.index, last = _a.last.index;
3198
- return !Number.isNaN(first) && !Number.isNaN(last)
3199
- ? "[".concat(first, "..").concat(last, "]")
3200
- : 'no';
3295
+ return !Number.isNaN(first) && !Number.isNaN(last) ? "[".concat(first, "..").concat(last, "]") : 'no';
3201
3296
  };
3202
3297
  this.getLoopId = function () { return scroller.state.cycle.loopId; };
3203
3298
  this.getLoopIdNext = function () { return scroller.state.cycle.loopIdNext; };
@@ -3217,7 +3312,7 @@
3217
3312
  this.log(function () { return [
3218
3313
  str,
3219
3314
  stringify
3220
- ? JSON.stringify(obj, function (k, v) {
3315
+ ? JSON.stringify(obj, function (_, v) {
3221
3316
  if (Number.isNaN(v)) {
3222
3317
  return 'NaN';
3223
3318
  }
@@ -3247,27 +3342,36 @@
3247
3342
  Logger.prototype.stat = function (str) {
3248
3343
  var _this = this;
3249
3344
  if (this.debug) {
3250
- var logStyles_1 = [
3251
- 'color: #888; border: dashed #888 0; border-bottom-width: 0px',
3252
- 'color: #000; border-width: 0'
3253
- ];
3254
- this.log(function () { return __spreadArray(['%cstat' + (str ? " ".concat(str) : '') + ',%c ' + _this.getStat()], __read(logStyles_1), false); });
3345
+ if (this.logColor) {
3346
+ var logStyles_1 = [
3347
+ 'color: #888; border: dashed #888 0; border-bottom-width: 0px',
3348
+ 'color: #000; border-width: 0'
3349
+ ];
3350
+ this.log(function () { return __spreadArray(['%cstat' + (str ? " ".concat(str) : '') + ',%c ' + _this.getStat()], __read(logStyles_1), false); });
3351
+ }
3352
+ else {
3353
+ this.log(function () { return ['stat' + (str ? " ".concat(str) : '') + ', ' + _this.getStat()]; });
3354
+ }
3255
3355
  }
3256
3356
  };
3257
3357
  Logger.prototype.fetch = function (str) {
3258
3358
  var _this = this;
3259
3359
  if (this.debug) {
3260
3360
  var _text_1 = 'fetch interval' + (str ? " ".concat(str) : '');
3261
- var logStyles_2 = ['color: #888', 'color: #000'];
3262
- this.log(function () { return __spreadArray(["%c".concat(_text_1, ": %c").concat(_this.getFetchRange())], __read(logStyles_2), false); });
3361
+ if (this.logColor) {
3362
+ var logStyles_2 = ['color: #888', 'color: #000'];
3363
+ this.log(function () { return __spreadArray(["%c".concat(_text_1, ": %c").concat(_this.getFetchRange())], __read(logStyles_2), false); });
3364
+ }
3365
+ else {
3366
+ this.log(function () { return ["".concat(_text_1, ": ").concat(_this.getFetchRange())]; });
3367
+ }
3263
3368
  }
3264
3369
  };
3265
3370
  Logger.prototype.prepareForLog = function (data) {
3266
- return data instanceof Event && data.target
3267
- ? this.getScrollPosition()
3268
- : data;
3371
+ return data instanceof Event && data.target ? this.getScrollPosition() : data;
3269
3372
  };
3270
3373
  Logger.prototype.logProcess = function (data) {
3374
+ var _this = this;
3271
3375
  if (!this.debug) {
3272
3376
  return;
3273
3377
  }
@@ -3275,31 +3379,50 @@
3275
3379
  // inner loop start-end log
3276
3380
  var loopLog = [];
3277
3381
  if (process === CommonProcess.init && status === ProcessStatus.next) {
3278
- loopLog.push("%c---=== loop ".concat(this.getLoopIdNext(), " start"));
3382
+ var loopStart = "---=== loop ".concat(this.getLoopIdNext(), " start");
3383
+ loopLog.push(this.logColor ? "%c".concat(loopStart) : loopStart);
3279
3384
  }
3280
3385
  else if (process === CommonProcess.end) {
3281
- loopLog.push("%c---=== loop ".concat(this.getLoopId(), " done"));
3386
+ var loopDone = "---=== loop ".concat(this.getLoopId(), " done");
3387
+ loopLog.push(this.logColor ? "%c".concat(loopDone) : loopDone);
3282
3388
  var parent_1 = payload && payload.process;
3283
- if (status === ProcessStatus.next && (parent_1 !== AdapterProcess.reset && parent_1 !== AdapterProcess.reload)) {
3389
+ if (status === ProcessStatus.next &&
3390
+ parent_1 !== AdapterProcess.reset &&
3391
+ parent_1 !== AdapterProcess.reload) {
3284
3392
  loopLog[0] += ", loop ".concat(this.getLoopIdNext(), " start");
3285
3393
  }
3286
3394
  }
3287
3395
  if (loopLog.length) {
3288
- this.log(function () { return __spreadArray(__spreadArray([], __read(loopLog), false), ['color: #006600;'], false); });
3396
+ this.log(function () { return (_this.logColor ? __spreadArray(__spreadArray([], __read(loopLog), false), ['color: #006600;'], false) : loopLog); });
3289
3397
  }
3290
3398
  };
3291
3399
  Logger.prototype.logCycle = function (start) {
3292
3400
  if (start === void 0) { start = true; }
3293
3401
  var logData = this.getWorkflowCycleData();
3294
- var border = start ? '1px 0 0 1px' : '0 0 1px 1px';
3295
- var logStyles = "color: #0000aa; border: solid #555 1px; border-width: ".concat(border, "; margin-left: -2px");
3296
- this.log(function () { return ["%c ~~~ WF Cycle ".concat(logData, " ").concat(start ? 'STARTED' : 'FINALIZED', " ~~~ "), logStyles]; });
3402
+ if (this.logColor) {
3403
+ var border = start ? '1px 0 0 1px' : '0 0 1px 1px';
3404
+ var logStyles_3 = "color: #0000aa; border: solid #555 1px; border-width: ".concat(border, "; margin-left: -2px");
3405
+ this.log(function () { return [
3406
+ "%c ~~~ WF Cycle ".concat(logData, " ").concat(start ? 'STARTED' : 'FINALIZED', " ~~~ "),
3407
+ logStyles_3
3408
+ ]; });
3409
+ }
3410
+ else {
3411
+ this.log(function () { return [" ~~~ WF Cycle ".concat(logData, " ").concat(start ? 'STARTED' : 'FINALIZED', " ~~~ ")]; });
3412
+ }
3297
3413
  };
3298
3414
  Logger.prototype.logError = function (str) {
3299
3415
  var _this = this;
3300
3416
  if (this.debug) {
3301
- var logStyles_3 = ['color: #a00;', 'color: #000'];
3302
- this.log(function () { return __spreadArray(['error:%c' + (str ? " ".concat(str) : '') + "%c (loop ".concat(_this.getLoopIdNext(), ")")], __read(logStyles_3), false); });
3417
+ if (this.logColor) {
3418
+ var logStyles_4 = ['color: #a00;', 'color: #000'];
3419
+ this.log(function () { return __spreadArray([
3420
+ 'error:%c' + (str ? " ".concat(str) : '') + "%c (loop ".concat(_this.getLoopIdNext(), ")")
3421
+ ], __read(logStyles_4), false); });
3422
+ }
3423
+ else {
3424
+ this.log(function () { return ['error:' + (str ? " ".concat(str) : '') + " (loop ".concat(_this.getLoopIdNext(), ")")]; });
3425
+ }
3303
3426
  }
3304
3427
  };
3305
3428
  Logger.prototype.log = function () {
@@ -3355,6 +3478,9 @@
3355
3478
  }
3356
3479
  }
3357
3480
  };
3481
+ Logger.prototype.getLogs = function () {
3482
+ return this.logs;
3483
+ };
3358
3484
  return Logger;
3359
3485
  }());
3360
3486
 
@@ -3434,17 +3560,18 @@
3434
3560
  return element.getBoundingClientRect();
3435
3561
  };
3436
3562
  Routines.prototype.getWindowParams = function () {
3437
- var _a = this.viewport, clientWidth = _a.clientWidth, clientHeight = _a.clientHeight, clientLeft = _a.clientLeft, clientTop = _a.clientTop;
3563
+ var height = window.innerHeight;
3564
+ var width = window.innerWidth;
3438
3565
  return {
3439
- 'height': clientHeight,
3440
- 'width': clientWidth,
3441
- 'top': clientTop,
3442
- 'bottom': clientTop + clientHeight,
3443
- 'left': clientLeft,
3444
- 'right': clientLeft + clientWidth,
3445
- 'x': clientLeft,
3446
- 'y': clientTop,
3447
- 'toJSON': function () { return null; },
3566
+ height: height,
3567
+ width: width,
3568
+ top: 0,
3569
+ bottom: height,
3570
+ left: 0,
3571
+ right: width,
3572
+ x: 0,
3573
+ y: 0,
3574
+ toJSON: function () { return null; }
3448
3575
  };
3449
3576
  };
3450
3577
  Routines.prototype.getSize = function (element) {
@@ -3473,14 +3600,14 @@
3473
3600
  var horizontal = this.settings.horizontal;
3474
3601
  var params = this.getElementParams(element);
3475
3602
  var isFwd = direction === exports.Direction.forward;
3476
- return params[isFwd ? (horizontal ? 'right' : 'bottom') : (horizontal ? 'left' : 'top')];
3603
+ return params[isFwd ? (horizontal ? 'right' : 'bottom') : horizontal ? 'left' : 'top'];
3477
3604
  };
3478
3605
  Routines.prototype.getViewportEdge = function (direction) {
3479
3606
  var _a = this.settings, window = _a.window, horizontal = _a.horizontal;
3480
3607
  if (window) {
3481
3608
  var params = this.getWindowParams();
3482
3609
  var isFwd = direction === exports.Direction.forward;
3483
- return params[isFwd ? (horizontal ? 'right' : 'bottom') : (horizontal ? 'left' : 'top')];
3610
+ return params[isFwd ? (horizontal ? 'right' : 'bottom') : horizontal ? 'left' : 'top'];
3484
3611
  }
3485
3612
  return this.getEdge(this.viewport, direction);
3486
3613
  };
@@ -3505,8 +3632,7 @@
3505
3632
  this.checkElement(element);
3506
3633
  element.scrollIntoView(argument);
3507
3634
  };
3508
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
3509
- Routines.prototype.render = function (cb, params) {
3635
+ Routines.prototype.render = function (cb, _params) {
3510
3636
  var timeoutId = setTimeout(function () { return cb(); });
3511
3637
  return function () { return clearTimeout(timeoutId); };
3512
3638
  };
@@ -3553,8 +3679,12 @@
3553
3679
  }
3554
3680
  Paddings.prototype.byDirection = function (direction, opposite) {
3555
3681
  return direction === exports.Direction.backward
3556
- ? (opposite ? this.forward : this.backward)
3557
- : (opposite ? this.backward : this.forward);
3682
+ ? opposite
3683
+ ? this.forward
3684
+ : this.backward
3685
+ : opposite
3686
+ ? this.backward
3687
+ : this.forward;
3558
3688
  };
3559
3689
  Paddings.prototype.reset = function (viewportSize, startIndex, offset) {
3560
3690
  var positive = this.getPositiveSize(startIndex, viewportSize, offset);
@@ -3623,7 +3753,8 @@
3623
3753
  this.routines.setScrollPosition(value);
3624
3754
  var position = this.scrollPosition;
3625
3755
  this.logger.log(function () { return __spreadArray([
3626
- 'setting scroll position at', position
3756
+ 'setting scroll position at',
3757
+ position
3627
3758
  ], __read((position !== value ? ["(".concat(value, ")")] : [])), false); });
3628
3759
  return position;
3629
3760
  };
@@ -3666,7 +3797,7 @@
3666
3797
  for (var i = bwd ? 0 : items.length - 1; bwd ? i <= items.length - 1 : i >= 0; i += bwd ? 1 : -1) {
3667
3798
  var itemEdge = this.routines.getEdge(items[i].element, opposite);
3668
3799
  diff = itemEdge - viewportEdge;
3669
- if (bwd && diff > 0 || !bwd && diff < 0) {
3800
+ if ((bwd && diff > 0) || (!bwd && diff < 0)) {
3670
3801
  item = items[i];
3671
3802
  break;
3672
3803
  }
@@ -3730,7 +3861,8 @@
3730
3861
  if (removed.length) {
3731
3862
  var removedSize = removed.reduce(function (acc, item) { return acc + item.size; }, 0);
3732
3863
  var averageSize = this.averageSizeFloat || 0;
3733
- this.averageSizeFloat = ((cacheSize + removed.length) * averageSize - removedSize) / cacheSize;
3864
+ this.averageSizeFloat =
3865
+ ((cacheSize + removed.length) * averageSize - removedSize) / cacheSize;
3734
3866
  }
3735
3867
  this.averageSize = Math.round(this.averageSizeFloat);
3736
3868
  };
@@ -3862,7 +3994,7 @@
3862
3994
  };
3863
3995
  Cache.prototype.getSizeByIndex = function (index) {
3864
3996
  var item = this.get(index);
3865
- return item && item.size || this.defaultSize.get();
3997
+ return (item && item.size) || this.defaultSize.get();
3866
3998
  };
3867
3999
  Cache.prototype.getDefaultSize = function () {
3868
4000
  return this.defaultSize.get();
@@ -3880,12 +4012,12 @@
3880
4012
  * Maintains min/max indexes and default item size.
3881
4013
  *
3882
4014
  * @param {Item<Data>} item A Buffer item to be cached, an objects with { $index, data, size } props.
3883
- *
3884
4015
  * @returns {ItemCache<Data>} Cached item.
3885
4016
  */
3886
4017
  Cache.prototype.add = function (item) {
3887
4018
  var itemCache = this.get(item.$index);
3888
- if (itemCache) { // adding item is already cached
4019
+ if (itemCache) {
4020
+ // adding item is already cached
3889
4021
  if (this.saveData) {
3890
4022
  itemCache.data = item.data;
3891
4023
  }
@@ -3957,7 +4089,8 @@
3957
4089
  }
3958
4090
  set(item);
3959
4091
  });
3960
- if (this.saveData) { // persist data with no sizes
4092
+ if (this.saveData) {
4093
+ // persist data with no sizes
3961
4094
  toInsert.forEach(function (data, i) {
3962
4095
  var $index = index + i - (fixRight ? length : 0) + (direction === exports.Direction.forward ? 1 : 0);
3963
4096
  var item = new ItemCache({ $index: $index, data: data }, _this.saveData);
@@ -4031,20 +4164,21 @@
4031
4164
  }
4032
4165
  var items = new Map();
4033
4166
  this.items.forEach(function (item) {
4034
- if (item.$index < minB) { // items to the left of the subset
4167
+ if (item.$index < minB) {
4168
+ // items to the left of the subset
4035
4169
  item.changeIndex(item.$index + leftDiff);
4036
4170
  items.set(item.$index, item);
4037
4171
  return;
4038
4172
  }
4039
- else if (item.$index > maxB) { // items to the right of the subset
4173
+ else if (item.$index > maxB) {
4174
+ // items to the right of the subset
4040
4175
  item.changeIndex(item.$index + rightDiff);
4041
4176
  items.set(item.$index, item);
4042
4177
  return;
4043
4178
  }
4044
4179
  });
4045
- after.forEach(function (item) {
4046
- return items.set(item.$index, new ItemCache(item, _this.saveData));
4047
- });
4180
+ after.forEach(function (item // subset items
4181
+ ) { return items.set(item.$index, new ItemCache(item, _this.saveData)); });
4048
4182
  before // to maintain default size on remove
4049
4183
  .filter(function (item) { return item.toRemove; })
4050
4184
  .forEach(function (item) { return _this.defaultSize.setRemoved(item.size); });
@@ -4093,13 +4227,12 @@
4093
4227
  return true;
4094
4228
  };
4095
4229
  CheckBufferCall.prototype.insertInBuffer = function (predicate, before, after) {
4096
- var index = Number.isInteger(before) ? before : (Number.isInteger(after) ? after : NaN);
4230
+ var index = Number.isInteger(before) ? before : Number.isInteger(after) ? after : NaN;
4097
4231
  var found = this.context.items.find(function (item) {
4098
- return (predicate && predicate(item.get())) ||
4099
- (Number.isInteger(index) && index === item.$index);
4232
+ return (predicate && predicate(item.get())) || (Number.isInteger(index) && index === item.$index);
4100
4233
  });
4101
4234
  if (!found) {
4102
- this.logger.log('no items to insert in buffer; empty predicate\'s result');
4235
+ this.logger.log('no items to insert in buffer; empty predicate result');
4103
4236
  return NaN;
4104
4237
  }
4105
4238
  return found.$index;
@@ -4119,9 +4252,7 @@
4119
4252
  }
4120
4253
  var before = direction === exports.Direction.backward;
4121
4254
  if (!(index < firstIndex + (before ? 1 : 0) || index > lastIndex - (before ? 0 : 1))) {
4122
- this.logger.log(function () {
4123
- return "no items to insert virtually; selected index (".concat(index, ") belongs Buffer [").concat(firstIndex, "..").concat(lastIndex, "]");
4124
- });
4255
+ this.logger.log("no items to insert virtually; selected index (".concat(index, ") belongs Buffer [").concat(firstIndex, "..").concat(lastIndex, "]"));
4125
4256
  return false;
4126
4257
  }
4127
4258
  this.logger.log(function () { return "going to insert ".concat(items.length, " item(s) virtually"); });
@@ -4202,7 +4333,8 @@
4202
4333
  },
4203
4334
  set: function (value) {
4204
4335
  if (this._absMinIndex !== value) {
4205
- this._absMinIndex = Number.isFinite(this._absMaxIndex) && value > this._absMaxIndex ? this._absMaxIndex : value;
4336
+ this._absMinIndex =
4337
+ Number.isFinite(this._absMaxIndex) && value > this._absMaxIndex ? this._absMaxIndex : value;
4206
4338
  }
4207
4339
  if (!this.pristine) {
4208
4340
  this.checkBOF();
@@ -4217,7 +4349,8 @@
4217
4349
  },
4218
4350
  set: function (value) {
4219
4351
  if (this._absMaxIndex !== value) {
4220
- this._absMaxIndex = Number.isFinite(this._absMinIndex) && value < this._absMinIndex ? this._absMinIndex : value;
4352
+ this._absMaxIndex =
4353
+ Number.isFinite(this._absMinIndex) && value < this._absMinIndex ? this._absMinIndex : value;
4221
4354
  }
4222
4355
  if (!this.pristine) {
4223
4356
  this.checkEOF();
@@ -4229,14 +4362,14 @@
4229
4362
  Buffer.prototype.checkBOF = function () {
4230
4363
  // since bof has no setter, need to call checkBOF() on items and absMinIndex change
4231
4364
  var bof = this.items.length
4232
- ? (this.items[0].$index === this.absMinIndex)
4365
+ ? this.items[0].$index === this.absMinIndex
4233
4366
  : isFinite(this.absMinIndex);
4234
4367
  this.bof.set(bof);
4235
4368
  };
4236
4369
  Buffer.prototype.checkEOF = function () {
4237
4370
  // since eof has no setter, need to call checkEOF() on items and absMaxIndex change
4238
4371
  var eof = this.items.length
4239
- ? (this.items[this.items.length - 1].$index === this.absMaxIndex)
4372
+ ? this.items[this.items.length - 1].$index === this.absMaxIndex
4240
4373
  : isFinite(this.absMaxIndex);
4241
4374
  this.eof.set(eof);
4242
4375
  };
@@ -4369,9 +4502,9 @@
4369
4502
  var shifted = false;
4370
4503
  var _loop_1 = function (i) {
4371
4504
  var item = this_1.items[i];
4372
- var diff = indexes.reduce(function (acc, index) { return acc + (fixRight
4373
- ? (item.$index < index ? 1 : 0)
4374
- : (item.$index > index ? -1 : 0)); }, 0);
4505
+ var diff = indexes.reduce(function (acc, index) {
4506
+ return acc + (fixRight ? (item.$index < index ? 1 : 0) : item.$index > index ? -1 : 0);
4507
+ }, 0);
4375
4508
  shifted = shifted || !!diff;
4376
4509
  item.updateIndex(item.$index + diff);
4377
4510
  };
@@ -4391,10 +4524,8 @@
4391
4524
  }
4392
4525
  var before = Number.isInteger(beforeIndex);
4393
4526
  var index = (before ? beforeIndex : afterIndex);
4394
- var shift = (fixRight ? items.length : (before ? 1 : 0));
4395
- this.items = items.map(function (data, i) {
4396
- return generator(index + i + (!before ? 1 : 0) - shift, data);
4397
- });
4527
+ var shift = fixRight ? items.length : before ? 1 : 0;
4528
+ this.items = items.map(function (data, i) { return generator(index + i + (!before ? 1 : 0) - shift, data); });
4398
4529
  this._absMinIndex = this.items[0].$index;
4399
4530
  this._absMaxIndex = this.items[this.size - 1].$index;
4400
4531
  if (this.startIndex <= this.absMinIndex) {
@@ -4423,7 +4554,7 @@
4423
4554
  // if predicate result is falsy or empty array -> delete
4424
4555
  if (!result || (Array.isArray(result) && !result.length)) {
4425
4556
  item.toRemove = true;
4426
- trackedIndex += item.$index >= indexToTrack ? (fixRight ? 1 : 0) : (fixRight ? 0 : -1);
4557
+ trackedIndex += item.$index >= indexToTrack ? (fixRight ? 1 : 0) : fixRight ? 0 : -1;
4427
4558
  this_2.shiftExtremum(-1, fixRight);
4428
4559
  return "continue";
4429
4560
  }
@@ -4519,8 +4650,9 @@
4519
4650
  return index >= 0 ? this.items[index] : void 0;
4520
4651
  };
4521
4652
  Buffer.prototype.getEdgeVisibleItem = function (direction, opposite) {
4522
- return direction === (!opposite ? exports.Direction.forward : exports.Direction.backward) ?
4523
- this.getLastVisibleItem() : this.getFirstVisibleItem();
4653
+ return direction === (!opposite ? exports.Direction.forward : exports.Direction.backward)
4654
+ ? this.getLastVisibleItem()
4655
+ : this.getFirstVisibleItem();
4524
4656
  };
4525
4657
  Buffer.prototype.getVisibleItemsCount = function () {
4526
4658
  return this.items.reduce(function (acc, item) { return acc + (item.invisible ? 0 : 1); }, 0);
@@ -4695,7 +4827,7 @@
4695
4827
  });
4696
4828
  Object.defineProperty(FetchModel.prototype, "hasNewItems", {
4697
4829
  get: function () {
4698
- return !!((this._newItemsData && this._newItemsData.length));
4830
+ return !!(this._newItemsData && this._newItemsData.length);
4699
4831
  },
4700
4832
  enumerable: false,
4701
4833
  configurable: true
@@ -4709,7 +4841,9 @@
4709
4841
  });
4710
4842
  Object.defineProperty(FetchModel.prototype, "count", {
4711
4843
  get: function () {
4712
- return !isNaN(this.first.index) && !isNaN(this.last.index) ? this.last.index - this.first.index + 1 : 0;
4844
+ return !isNaN(this.first.index) && !isNaN(this.last.index)
4845
+ ? this.last.index - this.first.index + 1
4846
+ : 0;
4713
4847
  },
4714
4848
  enumerable: false,
4715
4849
  configurable: true
@@ -4863,10 +4997,12 @@
4863
4997
  }
4864
4998
  clip.reset(clip.force);
4865
4999
  render.reset();
4866
- return __assign({}, (cycle.innerLoop.first ? {
4867
- process: cycle.initiator,
4868
- doRender: fetch.simulate && fetch.items.length > 0
4869
- } : {}));
5000
+ return __assign({}, (cycle.innerLoop.first
5001
+ ? {
5002
+ process: cycle.initiator,
5003
+ doRender: fetch.simulate && fetch.items.length > 0
5004
+ }
5005
+ : {}));
4870
5006
  };
4871
5007
  State.prototype.endInnerLoop = function () {
4872
5008
  var _a = this, fetch = _a.fetch, clip = _a.clip, render = _a.render, cycle = _a.cycle;
@@ -4917,7 +5053,6 @@
4917
5053
  this.source = {}; // for Reactive props
4918
5054
  this.box = {}; // for Scalars over Reactive props
4919
5055
  this.demand = {}; // for Scalars on demand
4920
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
4921
5056
  this.setFirstOrLastVisible = function (_) { };
4922
5057
  this.getWorkflow = getWorkflow;
4923
5058
  this.logger = logger;
@@ -4926,7 +5061,7 @@
4926
5061
  this.reloadCounter = 0;
4927
5062
  var contextId = (context === null || context === void 0 ? void 0 : context.id) || -1;
4928
5063
  // public context (if exists) should provide access to Reactive props config by id
4929
- var reactivePropsStore = context && reactiveConfigStorage.get(context.id) || {};
5064
+ var reactivePropsStore = (context && reactiveConfigStorage.get(context.id)) || {};
4930
5065
  // the Adapter initialization should not trigger "wanted" props setting;
4931
5066
  // after the initialization is completed, "wanted" functionality must be unblocked
4932
5067
  wantedUtils.setBlock(true, contextId);
@@ -4941,7 +5076,7 @@
4941
5076
  value = reactiveProp.default; // boolean doesn't matter here
4942
5077
  }
4943
5078
  }
4944
- return (__assign(__assign({}, prop), { value: value }));
5079
+ return __assign(__assign({}, prop), { value: value });
4945
5080
  })
4946
5081
  : getDefaultAdapterProps();
4947
5082
  // restore default reactive props if they were configured
@@ -4984,10 +5119,12 @@
4984
5119
  // so this method should be called when accessing the "wanted" props through one of the following getters
4985
5120
  var processWanted = function (prop) {
4986
5121
  if (wantedUtils.setBox(prop, contextId)) {
4987
- if ([exports.AdapterPropName.firstVisible, exports.AdapterPropName.firstVisible$].some(function (n) { return n === prop.name; })) {
5122
+ var firstPropList = [exports.AdapterPropName.firstVisible, exports.AdapterPropName.firstVisible$];
5123
+ var lastPropList = [exports.AdapterPropName.lastVisible, exports.AdapterPropName.lastVisible$];
5124
+ if (firstPropList.some(function (n) { return n === prop.name; })) {
4988
5125
  _this.setFirstOrLastVisible({ first: true });
4989
5126
  }
4990
- else if ([exports.AdapterPropName.lastVisible, exports.AdapterPropName.lastVisible$].some(function (n) { return n === prop.name; })) {
5127
+ else if (lastPropList.some(function (n) { return n === prop.name; })) {
4991
5128
  _this.setFirstOrLastVisible({ last: true });
4992
5129
  }
4993
5130
  }
@@ -5037,8 +5174,7 @@
5037
5174
  return;
5038
5175
  }
5039
5176
  // Adapter public context augmentation
5040
- adapterProps
5041
- .forEach(function (prop) {
5177
+ adapterProps.forEach(function (prop) {
5042
5178
  var name = prop.name, type = prop.type, permanent = prop.permanent;
5043
5179
  var value = _this[name];
5044
5180
  if (type === AdapterPropType.Function) {
@@ -5132,23 +5268,23 @@
5132
5268
  maxIndex: buffer.maxIndex,
5133
5269
  absMinIndex: buffer.absMinIndex,
5134
5270
  absMaxIndex: buffer.absMaxIndex,
5135
- defaultSize: buffer.defaultSize,
5271
+ defaultSize: buffer.defaultSize
5136
5272
  }); }
5137
5273
  });
5138
5274
  this.bof = buffer.bof.get();
5139
- buffer.bof.on(function (bof) { return _this.bof = bof; });
5275
+ buffer.bof.on(function (bof) { return (_this.bof = bof); });
5140
5276
  this.eof = buffer.eof.get();
5141
- buffer.eof.on(function (eof) { return _this.eof = eof; });
5277
+ buffer.eof.on(function (eof) { return (_this.eof = eof); });
5142
5278
  // state
5143
5279
  Object.defineProperty(this.demand, exports.AdapterPropName.packageInfo, {
5144
5280
  get: function () { return state.packageInfo; }
5145
5281
  });
5146
5282
  this.loopPending = state.cycle.innerLoop.busy.get();
5147
- state.cycle.innerLoop.busy.on(function (busy) { return _this.loopPending = busy; });
5283
+ state.cycle.innerLoop.busy.on(function (busy) { return (_this.loopPending = busy); });
5148
5284
  this.isLoading = state.cycle.busy.get();
5149
- state.cycle.busy.on(function (busy) { return _this.isLoading = busy; });
5285
+ state.cycle.busy.on(function (busy) { return (_this.isLoading = busy); });
5150
5286
  this.paused = state.paused.get();
5151
- state.paused.on(function (paused) { return _this.paused = paused; });
5287
+ state.paused.on(function (paused) { return (_this.paused = paused); });
5152
5288
  //viewport
5153
5289
  this.setFirstOrLastVisible = function (_a) {
5154
5290
  var _b, _c, _d;
@@ -5226,8 +5362,7 @@
5226
5362
  var _this = this;
5227
5363
  var _a;
5228
5364
  var reactiveStore = reactiveConfigStorage.get((_a = this.externalContext) === null || _a === void 0 ? void 0 : _a.id);
5229
- ADAPTER_PROPS_STUB
5230
- .forEach(function (_a) {
5365
+ ADAPTER_PROPS_STUB.forEach(function (_a) {
5231
5366
  var type = _a.type, permanent = _a.permanent, name = _a.name, value = _a.value;
5232
5367
  // assign initial values to non-reactive non-permanent props
5233
5368
  if (type !== AdapterPropType.Reactive && !permanent) {
@@ -5368,7 +5503,9 @@
5368
5503
  };
5369
5504
  Adapter.prototype.relaxUnchained = function (callback, reloadId) {
5370
5505
  var _this = this;
5371
- var runCallback = function () { return typeof callback === 'function' && reloadId === _this.reloadId && callback(); };
5506
+ var runCallback = function () {
5507
+ return typeof callback === 'function' && reloadId === _this.reloadId && callback();
5508
+ };
5372
5509
  if (!this.isLoading) {
5373
5510
  runCallback();
5374
5511
  }
@@ -5391,7 +5528,9 @@
5391
5528
  };
5392
5529
  }
5393
5530
  var success = reloadId === _this.reloadId;
5394
- (_b = (_a = _this.logger) === null || _a === void 0 ? void 0 : _a.log) === null || _b === void 0 ? void 0 : _b.call(_a, function () { return !success ? "relax promise cancelled due to ".concat(reloadId, " != ").concat(_this.reloadId) : void 0; });
5531
+ (_b = (_a = _this.logger) === null || _a === void 0 ? void 0 : _a.log) === null || _b === void 0 ? void 0 : _b.call(_a, function () {
5532
+ return !success ? "relax promise cancelled due to ".concat(reloadId, " != ").concat(_this.reloadId) : void 0;
5533
+ });
5395
5534
  return {
5396
5535
  immediate: immediate,
5397
5536
  success: success,
@@ -5406,12 +5545,12 @@
5406
5545
  if (!this.init) {
5407
5546
  return Promise.resolve(methodPreResult);
5408
5547
  }
5409
- return this.relaxRun = this.relaxRun
5548
+ return (this.relaxRun = this.relaxRun
5410
5549
  ? this.relaxRun.then(function () { return _this.relaxUnchained(callback, reloadId); })
5411
5550
  : this.relaxUnchained(callback, reloadId).then(function (result) {
5412
5551
  _this.relaxRun = null;
5413
5552
  return result;
5414
- });
5553
+ }));
5415
5554
  };
5416
5555
  Adapter.prototype.showLog = function () {
5417
5556
  this.logger.logAdapterMethod('showLog');
@@ -5445,7 +5584,8 @@
5445
5584
  Object.getOwnPropertyNames(CustomRoutines.prototype)
5446
5585
  .filter(function (method) { return method !== 'constructor'; })
5447
5586
  .forEach(function (method) {
5448
- return __Routines_1.prototype[method] = CustomRoutines === null || CustomRoutines === void 0 ? void 0 : CustomRoutines.prototype[method];
5587
+ return (__Routines_1.prototype[method] =
5588
+ CustomRoutines === null || CustomRoutines === void 0 ? void 0 : CustomRoutines.prototype[method]);
5449
5589
  });
5450
5590
  CustomRoutines = __Routines_1;
5451
5591
  }
@@ -5461,7 +5601,8 @@
5461
5601
  }
5462
5602
  Scroller.prototype.initDatasource = function (datasource, scroller) {
5463
5603
  var _this = this;
5464
- if (scroller) { // scroller re-instantiating case
5604
+ if (scroller) {
5605
+ // scroller re-instantiating case
5465
5606
  this.datasource = datasource;
5466
5607
  this.adapter = scroller.adapter;
5467
5608
  // todo: what about (this.settings.adapter !== scroller.setting.adapter) case?
@@ -5470,10 +5611,12 @@
5470
5611
  // scroller is being instantiated for the first time
5471
5612
  var constructed = datasource instanceof DatasourceGeneric;
5472
5613
  var mockAdapter = !constructed && !this.settings.adapter;
5473
- if (constructed) { // datasource is already instantiated
5614
+ if (constructed) {
5615
+ // datasource is already instantiated
5474
5616
  this.datasource = datasource;
5475
5617
  }
5476
- else { // datasource as POJO
5618
+ else {
5619
+ // datasource as POJO
5477
5620
  var DS = makeDatasource(function () { return ({ mock: mockAdapter }); });
5478
5621
  this.datasource = new DS(datasource);
5479
5622
  if (this.settings.adapter) {
@@ -5498,14 +5641,14 @@
5498
5641
  };
5499
5642
  Scroller.prototype.dispose = function (forever) {
5500
5643
  this.logger.log(function () { return 'disposing scroller' + (forever ? ' (forever)' : ''); });
5501
- if (forever) { // Adapter is not re-instantiated on reset
5644
+ if (forever) {
5645
+ // Adapter is not re-instantiated on reset
5502
5646
  this.adapter.dispose();
5503
5647
  }
5504
5648
  this.buffer.dispose();
5505
5649
  this.state.dispose();
5506
5650
  };
5507
- Scroller.prototype.finalize = function () {
5508
- };
5651
+ Scroller.prototype.finalize = function () { };
5509
5652
  return Scroller;
5510
5653
  }());
5511
5654
 
@@ -5521,7 +5664,8 @@
5521
5664
  var options = payload.options;
5522
5665
  switch (process) {
5523
5666
  case CommonProcess.init:
5524
- if (status === ProcessStatus.start) { // App start
5667
+ if (status === ProcessStatus.start) {
5668
+ // App start
5525
5669
  run(Init)(process);
5526
5670
  }
5527
5671
  if (status === ProcessStatus.next) {
@@ -5741,6 +5885,7 @@
5741
5885
  this.initTimer = null;
5742
5886
  this.adapterRun$ = new Reactive();
5743
5887
  this.cyclesDone = 0;
5888
+ this.cyclesDone$ = new Reactive(0);
5744
5889
  this.interruptionCount = 0;
5745
5890
  this.errors = [];
5746
5891
  this.offScroll = function () { return null; };
@@ -5773,11 +5918,13 @@
5773
5918
  this.scroller.init(this.adapterRun$);
5774
5919
  // set up scroll event listener
5775
5920
  var routines = this.scroller.routines;
5776
- var onScrollHandler = function (event) { return _this.callWorkflow({
5777
- process: CommonProcess.scroll,
5778
- status: ProcessStatus.start,
5779
- payload: { event: event }
5780
- }); };
5921
+ var onScrollHandler = function (event) {
5922
+ return _this.callWorkflow({
5923
+ process: CommonProcess.scroll,
5924
+ status: ProcessStatus.start,
5925
+ payload: { event: event }
5926
+ });
5927
+ };
5781
5928
  this.offScroll = routines.onScroll(onScrollHandler);
5782
5929
  // run the Workflow
5783
5930
  this.isInitialized = true;
@@ -5809,18 +5956,19 @@
5809
5956
  Workflow.prototype.getUpdater = function () {
5810
5957
  return {
5811
5958
  call: this.callWorkflow.bind(this),
5812
- onDataChanged: this.changeItems.bind(this),
5959
+ onDataChanged: this.changeItems.bind(this)
5813
5960
  };
5814
5961
  };
5815
5962
  Workflow.prototype.process = function (data) {
5963
+ var _this = this;
5816
5964
  var status = data.status, process = data.process, payload = data.payload;
5817
5965
  if (this.scroller.settings.logProcessRun) {
5818
- this.scroller.logger.log(function () { return __spreadArray(__spreadArray(__spreadArray([
5819
- '%cfire%c'
5820
- ], ['color: #cc7777;', 'color: #000000;'], false), [
5821
- process,
5822
- "\"".concat(status, "\"")
5823
- ], false), __read((payload !== void 0 ? [payload] : [])), false); });
5966
+ this.scroller.logger.log(function () {
5967
+ var _fire = _this.scroller.settings.logColor
5968
+ ? ['%cfire%c', 'color: #cc7777;', 'color: #000000;']
5969
+ : ['fire'];
5970
+ return __spreadArray(__spreadArray(__spreadArray([], __read(_fire), false), [process, "\"".concat(status, "\"")], false), __read((payload !== void 0 ? [payload] : [])), false);
5971
+ });
5824
5972
  }
5825
5973
  this.scroller.logger.logProcess(data);
5826
5974
  if (process === CommonProcess.end) {
@@ -5841,18 +5989,19 @@
5841
5989
  args[_i] = arguments[_i];
5842
5990
  }
5843
5991
  if (_this.scroller.settings.logProcessRun) {
5844
- _this.scroller.logger.log(function () { return __spreadArray(__spreadArray(__spreadArray([
5845
- '%crun%c'
5846
- ], ['color: #333399;', 'color: #000000;'], false), [
5847
- process || name
5848
- ], false), __read(args), false); });
5992
+ _this.scroller.logger.log(function () {
5993
+ var _run = _this.scroller.settings.logColor
5994
+ ? ['%crun%c', 'color: #333399;', 'color: #000000;']
5995
+ : ['run'];
5996
+ return __spreadArray(__spreadArray(__spreadArray([], __read(_run), false), [process || name], false), __read(args), false);
5997
+ });
5849
5998
  }
5850
5999
  run.apply(void 0, __spreadArray([_this.scroller], __read(args), false));
5851
6000
  };
5852
6001
  };
5853
6002
  };
5854
6003
  Workflow.prototype.onError = function (process, payload) {
5855
- var message = payload && String(payload.error) || '';
6004
+ var message = (payload && String(payload.error)) || '';
5856
6005
  var _a = this.scroller.state, time = _a.time, cycle = _a.cycle;
5857
6006
  this.errors.push({
5858
6007
  process: process,
@@ -5869,15 +6018,14 @@
5869
6018
  var _b = this.scroller, workflow = _b.workflow, logger_1 = _b.logger;
5870
6019
  // we are going to create a new reference for the scroller.workflow object
5871
6020
  // calling the old version of the scroller.workflow by any outstanding async processes will be skipped
5872
- workflow.call = function (_) {
5873
- return logger_1.log('[skip wf call]');
5874
- };
6021
+ workflow.call = function (_) { return logger_1.log('[skip wf call]'); };
5875
6022
  workflow.call.interrupted = true;
5876
6023
  this.scroller.workflow = this.getUpdater();
5877
6024
  this.interruptionCount++;
5878
6025
  logger_1.log(function () { return "workflow had been interrupted by the ".concat(process, " process (").concat(_this.interruptionCount, ")"); });
5879
6026
  }
5880
- if (datasource) { // Scroller re-initialization case
6027
+ if (datasource) {
6028
+ // Scroller re-initialization case
5881
6029
  var reInit = function () {
5882
6030
  _this.scroller.logger.log('new Scroller instantiation');
5883
6031
  var scroller = new Scroller({ datasource: datasource, scroller: _this.scroller });
@@ -5897,6 +6045,7 @@
5897
6045
  Workflow.prototype.done = function () {
5898
6046
  var _a = this.scroller, state = _a.state, logger = _a.logger;
5899
6047
  this.cyclesDone++;
6048
+ this.cyclesDone$.set(this.cyclesDone);
5900
6049
  logger.logCycle(false);
5901
6050
  state.endWorkflowCycle(this.cyclesDone + 1);
5902
6051
  this.finalize();
@@ -5909,14 +6058,15 @@
5909
6058
  }
5910
6059
  this.offScroll();
5911
6060
  this.adapterRun$.dispose();
6061
+ this.cyclesDone$.dispose();
5912
6062
  this.scroller.dispose(true);
5913
6063
  Object.getOwnPropertyNames(this).forEach(function (prop) {
5914
6064
  delete _this[prop];
5915
6065
  });
6066
+ this.isInitialized = false;
5916
6067
  this.disposed = true;
5917
6068
  };
5918
- Workflow.prototype.finalize = function () {
5919
- };
6069
+ Workflow.prototype.finalize = function () { };
5920
6070
  return Workflow;
5921
6071
  }());
5922
6072