vscroll 1.7.0 → 1.8.0

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 (250) hide show
  1. package/dist/bundles/vscroll.esm5.js +517 -367
  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 +407 -259
  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 +518 -368
  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 +1 -1
  16. package/dist/esm2015/classes/adapter/props.js.map +1 -1
  17. package/dist/esm2015/classes/adapter/wanted.js.map +1 -1
  18. package/dist/esm2015/classes/adapter.js +17 -18
  19. package/dist/esm2015/classes/adapter.js.map +1 -1
  20. package/dist/esm2015/classes/buffer/cache.js +11 -8
  21. package/dist/esm2015/classes/buffer/cache.js.map +1 -1
  22. package/dist/esm2015/classes/buffer/checkCall.js +4 -5
  23. package/dist/esm2015/classes/buffer/checkCall.js.map +1 -1
  24. package/dist/esm2015/classes/buffer/defaultSize.js +2 -1
  25. package/dist/esm2015/classes/buffer/defaultSize.js.map +1 -1
  26. package/dist/esm2015/classes/buffer.js +12 -11
  27. package/dist/esm2015/classes/buffer.js.map +1 -1
  28. package/dist/esm2015/classes/datasource.js +16 -3
  29. package/dist/esm2015/classes/datasource.js.map +1 -1
  30. package/dist/esm2015/classes/domRoutines.js +14 -14
  31. package/dist/esm2015/classes/domRoutines.js.map +1 -1
  32. package/dist/esm2015/classes/item.js.map +1 -1
  33. package/dist/esm2015/classes/logger.js +74 -31
  34. package/dist/esm2015/classes/logger.js.map +1 -1
  35. package/dist/esm2015/classes/paddings.js +6 -2
  36. package/dist/esm2015/classes/paddings.js.map +1 -1
  37. package/dist/esm2015/classes/reactive.js.map +1 -1
  38. package/dist/esm2015/classes/settings.js.map +1 -1
  39. package/dist/esm2015/classes/state/clip.js.map +1 -1
  40. package/dist/esm2015/classes/state/cycle.js.map +1 -1
  41. package/dist/esm2015/classes/state/fetch.js +4 -2
  42. package/dist/esm2015/classes/state/fetch.js.map +1 -1
  43. package/dist/esm2015/classes/state/render.js.map +1 -1
  44. package/dist/esm2015/classes/state/scroll.js.map +1 -1
  45. package/dist/esm2015/classes/state.js +6 -4
  46. package/dist/esm2015/classes/state.js.map +1 -1
  47. package/dist/esm2015/classes/viewport.js +4 -2
  48. package/dist/esm2015/classes/viewport.js.map +1 -1
  49. package/dist/esm2015/index.js +1 -1
  50. package/dist/esm2015/index.js.map +1 -1
  51. package/dist/esm2015/inputs/adapter.js +44 -24
  52. package/dist/esm2015/inputs/adapter.js.map +1 -1
  53. package/dist/esm2015/inputs/common.js.map +1 -1
  54. package/dist/esm2015/inputs/datasource.js.map +1 -1
  55. package/dist/esm2015/inputs/index.js +1 -1
  56. package/dist/esm2015/inputs/index.js.map +1 -1
  57. package/dist/esm2015/inputs/settings.js +8 -3
  58. package/dist/esm2015/inputs/settings.js.map +1 -1
  59. package/dist/esm2015/inputs/validation.js +8 -14
  60. package/dist/esm2015/inputs/validation.js.map +1 -1
  61. package/dist/esm2015/inputs/workflow.js.map +1 -1
  62. package/dist/esm2015/interfaces/adapter.js.map +1 -1
  63. package/dist/esm2015/interfaces/datasource.js.map +1 -1
  64. package/dist/esm2015/interfaces/index.js.map +1 -1
  65. package/dist/esm2015/interfaces/item.js.map +1 -1
  66. package/dist/esm2015/interfaces/process.js.map +1 -1
  67. package/dist/esm2015/interfaces/routines.js.map +1 -1
  68. package/dist/esm2015/interfaces/settings.js.map +1 -1
  69. package/dist/esm2015/interfaces/state.js.map +1 -1
  70. package/dist/esm2015/interfaces/validation.js.map +1 -1
  71. package/dist/esm2015/interfaces/workflow.js.map +1 -1
  72. package/dist/esm2015/processes/adapter/append.js +2 -1
  73. package/dist/esm2015/processes/adapter/append.js.map +1 -1
  74. package/dist/esm2015/processes/adapter/check.js +2 -1
  75. package/dist/esm2015/processes/adapter/check.js.map +1 -1
  76. package/dist/esm2015/processes/adapter/clip.js.map +1 -1
  77. package/dist/esm2015/processes/adapter/fix.js +4 -2
  78. package/dist/esm2015/processes/adapter/fix.js.map +1 -1
  79. package/dist/esm2015/processes/adapter/insert.js +4 -3
  80. package/dist/esm2015/processes/adapter/insert.js.map +1 -1
  81. package/dist/esm2015/processes/adapter/pause.js.map +1 -1
  82. package/dist/esm2015/processes/adapter/reload.js.map +1 -1
  83. package/dist/esm2015/processes/adapter/remove.js +8 -5
  84. package/dist/esm2015/processes/adapter/remove.js.map +1 -1
  85. package/dist/esm2015/processes/adapter/replace.js +1 -1
  86. package/dist/esm2015/processes/adapter/replace.js.map +1 -1
  87. package/dist/esm2015/processes/adapter/reset.js +5 -5
  88. package/dist/esm2015/processes/adapter/reset.js.map +1 -1
  89. package/dist/esm2015/processes/adapter/update.js +4 -3
  90. package/dist/esm2015/processes/adapter/update.js.map +1 -1
  91. package/dist/esm2015/processes/adjust.js +15 -10
  92. package/dist/esm2015/processes/adjust.js.map +1 -1
  93. package/dist/esm2015/processes/clip.js +4 -4
  94. package/dist/esm2015/processes/clip.js.map +1 -1
  95. package/dist/esm2015/processes/end.js +2 -1
  96. package/dist/esm2015/processes/end.js.map +1 -1
  97. package/dist/esm2015/processes/fetch.js +6 -4
  98. package/dist/esm2015/processes/fetch.js.map +1 -1
  99. package/dist/esm2015/processes/index.js +1 -1
  100. package/dist/esm2015/processes/index.js.map +1 -1
  101. package/dist/esm2015/processes/init.js.map +1 -1
  102. package/dist/esm2015/processes/misc/base.js +1 -2
  103. package/dist/esm2015/processes/misc/base.js.map +1 -1
  104. package/dist/esm2015/processes/misc/enums.js.map +1 -1
  105. package/dist/esm2015/processes/misc/index.js.map +1 -1
  106. package/dist/esm2015/processes/postFetch.js +13 -12
  107. package/dist/esm2015/processes/postFetch.js.map +1 -1
  108. package/dist/esm2015/processes/preClip.js +6 -5
  109. package/dist/esm2015/processes/preClip.js.map +1 -1
  110. package/dist/esm2015/processes/preFetch.js +28 -15
  111. package/dist/esm2015/processes/preFetch.js.map +1 -1
  112. package/dist/esm2015/processes/render.js +6 -4
  113. package/dist/esm2015/processes/render.js.map +1 -1
  114. package/dist/esm2015/processes/scroll.js +19 -10
  115. package/dist/esm2015/processes/scroll.js.map +1 -1
  116. package/dist/esm2015/processes/start.js.map +1 -1
  117. package/dist/esm2015/scroller.js +14 -9
  118. package/dist/esm2015/scroller.js.map +1 -1
  119. package/dist/esm2015/version.js +1 -1
  120. package/dist/esm2015/version.js.map +1 -1
  121. package/dist/esm2015/workflow-transducer.js +3 -2
  122. package/dist/esm2015/workflow-transducer.js.map +1 -1
  123. package/dist/esm2015/workflow.js +28 -17
  124. package/dist/esm2015/workflow.js.map +1 -1
  125. package/dist/esm5/classes/adapter/context.js +2 -1
  126. package/dist/esm5/classes/adapter/context.js.map +1 -1
  127. package/dist/esm5/classes/adapter/props.js +1 -1
  128. package/dist/esm5/classes/adapter/props.js.map +1 -1
  129. package/dist/esm5/classes/adapter/wanted.js.map +1 -1
  130. package/dist/esm5/classes/adapter.js +22 -19
  131. package/dist/esm5/classes/adapter.js.map +1 -1
  132. package/dist/esm5/classes/buffer/cache.js +11 -9
  133. package/dist/esm5/classes/buffer/cache.js.map +1 -1
  134. package/dist/esm5/classes/buffer/checkCall.js +4 -7
  135. package/dist/esm5/classes/buffer/checkCall.js.map +1 -1
  136. package/dist/esm5/classes/buffer/defaultSize.js +2 -1
  137. package/dist/esm5/classes/buffer/defaultSize.js.map +1 -1
  138. package/dist/esm5/classes/buffer.js +15 -14
  139. package/dist/esm5/classes/buffer.js.map +1 -1
  140. package/dist/esm5/classes/datasource.js +20 -3
  141. package/dist/esm5/classes/datasource.js.map +1 -1
  142. package/dist/esm5/classes/domRoutines.js +14 -14
  143. package/dist/esm5/classes/domRoutines.js.map +1 -1
  144. package/dist/esm5/classes/item.js.map +1 -1
  145. package/dist/esm5/classes/logger.js +75 -34
  146. package/dist/esm5/classes/logger.js.map +1 -1
  147. package/dist/esm5/classes/paddings.js +6 -2
  148. package/dist/esm5/classes/paddings.js.map +1 -1
  149. package/dist/esm5/classes/reactive.js.map +1 -1
  150. package/dist/esm5/classes/settings.js.map +1 -1
  151. package/dist/esm5/classes/state/clip.js.map +1 -1
  152. package/dist/esm5/classes/state/cycle.js.map +1 -1
  153. package/dist/esm5/classes/state/fetch.js +4 -2
  154. package/dist/esm5/classes/state/fetch.js.map +1 -1
  155. package/dist/esm5/classes/state/render.js.map +1 -1
  156. package/dist/esm5/classes/state/scroll.js.map +1 -1
  157. package/dist/esm5/classes/state.js +6 -4
  158. package/dist/esm5/classes/state.js.map +1 -1
  159. package/dist/esm5/classes/viewport.js +3 -2
  160. package/dist/esm5/classes/viewport.js.map +1 -1
  161. package/dist/esm5/index.js +1 -1
  162. package/dist/esm5/index.js.map +1 -1
  163. package/dist/esm5/inputs/adapter.js +32 -12
  164. package/dist/esm5/inputs/adapter.js.map +1 -1
  165. package/dist/esm5/inputs/common.js.map +1 -1
  166. package/dist/esm5/inputs/datasource.js.map +1 -1
  167. package/dist/esm5/inputs/index.js +1 -1
  168. package/dist/esm5/inputs/index.js.map +1 -1
  169. package/dist/esm5/inputs/settings.js +5 -0
  170. package/dist/esm5/inputs/settings.js.map +1 -1
  171. package/dist/esm5/inputs/validation.js +99 -93
  172. package/dist/esm5/inputs/validation.js.map +1 -1
  173. package/dist/esm5/inputs/workflow.js.map +1 -1
  174. package/dist/esm5/interfaces/adapter.js.map +1 -1
  175. package/dist/esm5/interfaces/datasource.js.map +1 -1
  176. package/dist/esm5/interfaces/index.js.map +1 -1
  177. package/dist/esm5/interfaces/item.js.map +1 -1
  178. package/dist/esm5/interfaces/process.js.map +1 -1
  179. package/dist/esm5/interfaces/routines.js.map +1 -1
  180. package/dist/esm5/interfaces/settings.js.map +1 -1
  181. package/dist/esm5/interfaces/state.js.map +1 -1
  182. package/dist/esm5/interfaces/validation.js.map +1 -1
  183. package/dist/esm5/interfaces/workflow.js.map +1 -1
  184. package/dist/esm5/processes/adapter/append.js +2 -1
  185. package/dist/esm5/processes/adapter/append.js.map +1 -1
  186. package/dist/esm5/processes/adapter/check.js +7 -6
  187. package/dist/esm5/processes/adapter/check.js.map +1 -1
  188. package/dist/esm5/processes/adapter/clip.js.map +1 -1
  189. package/dist/esm5/processes/adapter/fix.js +4 -2
  190. package/dist/esm5/processes/adapter/fix.js.map +1 -1
  191. package/dist/esm5/processes/adapter/insert.js +4 -3
  192. package/dist/esm5/processes/adapter/insert.js.map +1 -1
  193. package/dist/esm5/processes/adapter/pause.js.map +1 -1
  194. package/dist/esm5/processes/adapter/reload.js.map +1 -1
  195. package/dist/esm5/processes/adapter/remove.js +11 -10
  196. package/dist/esm5/processes/adapter/remove.js.map +1 -1
  197. package/dist/esm5/processes/adapter/replace.js +1 -1
  198. package/dist/esm5/processes/adapter/replace.js.map +1 -1
  199. package/dist/esm5/processes/adapter/reset.js +5 -5
  200. package/dist/esm5/processes/adapter/reset.js.map +1 -1
  201. package/dist/esm5/processes/adapter/update.js +20 -15
  202. package/dist/esm5/processes/adapter/update.js.map +1 -1
  203. package/dist/esm5/processes/adjust.js +16 -11
  204. package/dist/esm5/processes/adjust.js.map +1 -1
  205. package/dist/esm5/processes/clip.js +4 -4
  206. package/dist/esm5/processes/clip.js.map +1 -1
  207. package/dist/esm5/processes/end.js +2 -1
  208. package/dist/esm5/processes/end.js.map +1 -1
  209. package/dist/esm5/processes/fetch.js +5 -3
  210. package/dist/esm5/processes/fetch.js.map +1 -1
  211. package/dist/esm5/processes/index.js +1 -1
  212. package/dist/esm5/processes/index.js.map +1 -1
  213. package/dist/esm5/processes/init.js.map +1 -1
  214. package/dist/esm5/processes/misc/base.js +1 -2
  215. package/dist/esm5/processes/misc/base.js.map +1 -1
  216. package/dist/esm5/processes/misc/enums.js.map +1 -1
  217. package/dist/esm5/processes/misc/index.js.map +1 -1
  218. package/dist/esm5/processes/postFetch.js +14 -15
  219. package/dist/esm5/processes/postFetch.js.map +1 -1
  220. package/dist/esm5/processes/preClip.js +5 -4
  221. package/dist/esm5/processes/preClip.js.map +1 -1
  222. package/dist/esm5/processes/preFetch.js +26 -14
  223. package/dist/esm5/processes/preFetch.js.map +1 -1
  224. package/dist/esm5/processes/render.js +7 -7
  225. package/dist/esm5/processes/render.js.map +1 -1
  226. package/dist/esm5/processes/scroll.js +18 -12
  227. package/dist/esm5/processes/scroll.js.map +1 -1
  228. package/dist/esm5/processes/start.js.map +1 -1
  229. package/dist/esm5/scroller.js +11 -7
  230. package/dist/esm5/scroller.js.map +1 -1
  231. package/dist/esm5/version.js +1 -1
  232. package/dist/esm5/version.js.map +1 -1
  233. package/dist/esm5/workflow-transducer.js +3 -2
  234. package/dist/esm5/workflow-transducer.js.map +1 -1
  235. package/dist/esm5/workflow.js +31 -25
  236. package/dist/esm5/workflow.js.map +1 -1
  237. package/dist/typings/classes/buffer/cache.d.ts +0 -1
  238. package/dist/typings/classes/datasource.d.ts +1 -1
  239. package/dist/typings/classes/domRoutines.d.ts +1 -1
  240. package/dist/typings/classes/logger.d.ts +4 -0
  241. package/dist/typings/classes/settings.d.ts +7 -0
  242. package/dist/typings/index.d.ts +2 -2
  243. package/dist/typings/inputs/index.d.ts +1 -1
  244. package/dist/typings/inputs/settings.d.ts +1 -0
  245. package/dist/typings/interfaces/index.d.ts +1 -1
  246. package/dist/typings/interfaces/settings.d.ts +1 -0
  247. package/dist/typings/processes/index.d.ts +1 -1
  248. package/dist/typings/processes/scroll.d.ts +1 -1
  249. package/dist/typings/workflow.d.ts +1 -0
  250. package/package.json +72 -70
@@ -6,7 +6,7 @@ export class Logger {
6
6
  if (!this.debug) {
7
7
  return;
8
8
  }
9
- const params = (args === void 0 ? [] : (Array.isArray(args) ? args : [args]))
9
+ const params = (args === void 0 ? [] : Array.isArray(args) ? args : [args])
10
10
  .map((arg) => {
11
11
  if (typeof arg === 'function') {
12
12
  return 'func';
@@ -26,24 +26,36 @@ export class Logger {
26
26
  this.debug = settings.debug;
27
27
  this.immediateLog = settings.immediateLog;
28
28
  this.logTime = settings.logTime;
29
+ this.logColor = settings.logColor;
29
30
  this.getTime = () => scroller.state && ` // time: ${scroller.state.time}`;
30
31
  this.getStat = () => {
31
32
  const { buffer, viewport } = scroller;
32
33
  const first = buffer.getFirstVisibleItem();
33
34
  const last = buffer.getLastVisibleItem();
34
- return 'pos: ' + viewport.scrollPosition + ', ' +
35
- 'size: ' + viewport.getScrollableSize() + ', ' +
36
- 'bwd_p: ' + viewport.paddings.backward.size + ', ' +
37
- 'fwd_p: ' + viewport.paddings.forward.size + ', ' +
38
- 'default: ' + (buffer.defaultSize || 'no') + ', ' +
39
- 'items: ' + buffer.getVisibleItemsCount() + ', ' +
40
- 'range: ' + (first && last ? `[${first.$index}..${last.$index}]` : 'no');
35
+ return ('pos: ' +
36
+ viewport.scrollPosition +
37
+ ', ' +
38
+ 'size: ' +
39
+ viewport.getScrollableSize() +
40
+ ', ' +
41
+ 'bwd_p: ' +
42
+ viewport.paddings.backward.size +
43
+ ', ' +
44
+ 'fwd_p: ' +
45
+ viewport.paddings.forward.size +
46
+ ', ' +
47
+ 'default: ' +
48
+ (buffer.defaultSize || 'no') +
49
+ ', ' +
50
+ 'items: ' +
51
+ buffer.getVisibleItemsCount() +
52
+ ', ' +
53
+ 'range: ' +
54
+ (first && last ? `[${first.$index}..${last.$index}]` : 'no'));
41
55
  };
42
56
  this.getFetchRange = () => {
43
57
  const { first: { index: first }, last: { index: last } } = scroller.state.fetch;
44
- return !Number.isNaN(first) && !Number.isNaN(last)
45
- ? `[${first}..${last}]`
46
- : 'no';
58
+ return !Number.isNaN(first) && !Number.isNaN(last) ? `[${first}..${last}]` : 'no';
47
59
  };
48
60
  this.getLoopId = () => scroller.state.cycle.loopId;
49
61
  this.getLoopIdNext = () => scroller.state.cycle.loopIdNext;
@@ -59,7 +71,7 @@ export class Logger {
59
71
  this.log(() => [
60
72
  str,
61
73
  stringify
62
- ? JSON.stringify(obj, (k, v) => {
74
+ ? JSON.stringify(obj, (_, v) => {
63
75
  if (Number.isNaN(v)) {
64
76
  return 'NaN';
65
77
  }
@@ -88,24 +100,32 @@ export class Logger {
88
100
  }
89
101
  stat(str) {
90
102
  if (this.debug) {
91
- const logStyles = [
92
- 'color: #888; border: dashed #888 0; border-bottom-width: 0px',
93
- 'color: #000; border-width: 0'
94
- ];
95
- this.log(() => ['%cstat' + (str ? ` ${str}` : '') + ',%c ' + this.getStat(), ...logStyles]);
103
+ if (this.logColor) {
104
+ const logStyles = [
105
+ 'color: #888; border: dashed #888 0; border-bottom-width: 0px',
106
+ 'color: #000; border-width: 0'
107
+ ];
108
+ this.log(() => ['%cstat' + (str ? ` ${str}` : '') + ',%c ' + this.getStat(), ...logStyles]);
109
+ }
110
+ else {
111
+ this.log(() => ['stat' + (str ? ` ${str}` : '') + ', ' + this.getStat()]);
112
+ }
96
113
  }
97
114
  }
98
115
  fetch(str) {
99
116
  if (this.debug) {
100
117
  const _text = 'fetch interval' + (str ? ` ${str}` : '');
101
- const logStyles = ['color: #888', 'color: #000'];
102
- this.log(() => [`%c${_text}: %c${this.getFetchRange()}`, ...logStyles]);
118
+ if (this.logColor) {
119
+ const logStyles = ['color: #888', 'color: #000'];
120
+ this.log(() => [`%c${_text}: %c${this.getFetchRange()}`, ...logStyles]);
121
+ }
122
+ else {
123
+ this.log(() => [`${_text}: ${this.getFetchRange()}`]);
124
+ }
103
125
  }
104
126
  }
105
127
  prepareForLog(data) {
106
- return data instanceof Event && data.target
107
- ? this.getScrollPosition()
108
- : data;
128
+ return data instanceof Event && data.target ? this.getScrollPosition() : data;
109
129
  }
110
130
  logProcess(data) {
111
131
  if (!this.debug) {
@@ -115,29 +135,49 @@ export class Logger {
115
135
  // inner loop start-end log
116
136
  const loopLog = [];
117
137
  if (process === CommonProcess.init && status === Status.next) {
118
- loopLog.push(`%c---=== loop ${this.getLoopIdNext()} start`);
138
+ const loopStart = `---=== loop ${this.getLoopIdNext()} start`;
139
+ loopLog.push(this.logColor ? `%c${loopStart}` : loopStart);
119
140
  }
120
141
  else if (process === CommonProcess.end) {
121
- loopLog.push(`%c---=== loop ${this.getLoopId()} done`);
142
+ const loopDone = `---=== loop ${this.getLoopId()} done`;
143
+ loopLog.push(this.logColor ? `%c${loopDone}` : loopDone);
122
144
  const parent = payload && payload.process;
123
- if (status === Status.next && (parent !== AdapterProcess.reset && parent !== AdapterProcess.reload)) {
145
+ if (status === Status.next &&
146
+ parent !== AdapterProcess.reset &&
147
+ parent !== AdapterProcess.reload) {
124
148
  loopLog[0] += `, loop ${this.getLoopIdNext()} start`;
125
149
  }
126
150
  }
127
151
  if (loopLog.length) {
128
- this.log(() => [...loopLog, 'color: #006600;']);
152
+ this.log(() => (this.logColor ? [...loopLog, 'color: #006600;'] : loopLog));
129
153
  }
130
154
  }
131
155
  logCycle(start = true) {
132
156
  const logData = this.getWorkflowCycleData();
133
- const border = start ? '1px 0 0 1px' : '0 0 1px 1px';
134
- const logStyles = `color: #0000aa; border: solid #555 1px; border-width: ${border}; margin-left: -2px`;
135
- this.log(() => [`%c ~~~ WF Cycle ${logData} ${start ? 'STARTED' : 'FINALIZED'} ~~~ `, logStyles]);
157
+ if (this.logColor) {
158
+ const border = start ? '1px 0 0 1px' : '0 0 1px 1px';
159
+ const logStyles = `color: #0000aa; border: solid #555 1px; border-width: ${border}; margin-left: -2px`;
160
+ this.log(() => [
161
+ `%c ~~~ WF Cycle ${logData} ${start ? 'STARTED' : 'FINALIZED'} ~~~ `,
162
+ logStyles
163
+ ]);
164
+ }
165
+ else {
166
+ this.log(() => [` ~~~ WF Cycle ${logData} ${start ? 'STARTED' : 'FINALIZED'} ~~~ `]);
167
+ }
136
168
  }
137
169
  logError(str) {
138
170
  if (this.debug) {
139
- const logStyles = ['color: #a00;', 'color: #000'];
140
- this.log(() => ['error:%c' + (str ? ` ${str}` : '') + `%c (loop ${this.getLoopIdNext()})`, ...logStyles]);
171
+ if (this.logColor) {
172
+ const logStyles = ['color: #a00;', 'color: #000'];
173
+ this.log(() => [
174
+ 'error:%c' + (str ? ` ${str}` : '') + `%c (loop ${this.getLoopIdNext()})`,
175
+ ...logStyles
176
+ ]);
177
+ }
178
+ else {
179
+ this.log(() => ['error:' + (str ? ` ${str}` : '') + ` (loop ${this.getLoopIdNext()})`]);
180
+ }
141
181
  }
142
182
  }
143
183
  log(...args) {
@@ -183,5 +223,8 @@ export class Logger {
183
223
  }
184
224
  }
185
225
  }
226
+ getLogs() {
227
+ return this.logs;
228
+ }
186
229
  }
187
230
  //# sourceMappingURL=logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/classes/logger.ts"],"names":[],"mappings":"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","sourcesContent":["import { Scroller } from '../scroller';\r\nimport { CommonProcess, AdapterProcess, ProcessStatus as Status } from '../processes/index';\r\nimport { IPackages, ProcessSubject } from '../interfaces/index';\r\n\r\ntype LogType = [unknown?, ...unknown[]];\r\n\r\nexport class Logger {\r\n\r\n readonly debug: boolean;\r\n readonly immediateLog: boolean;\r\n readonly logTime: boolean;\r\n readonly getTime: () => string;\r\n readonly getStat: () => string;\r\n readonly getFetchRange: () => string;\r\n readonly getWorkflowCycleData: () => string;\r\n readonly getLoopId: () => string;\r\n readonly getLoopIdNext: () => string;\r\n readonly getScrollPosition: () => number;\r\n private logs: unknown[][] = [];\r\n\r\n constructor(scroller: Scroller, packageInfo: IPackages, adapter?: { id: number }) {\r\n const { settings } = scroller;\r\n this.debug = settings.debug;\r\n this.immediateLog = settings.immediateLog;\r\n this.logTime = settings.logTime;\r\n this.getTime = (): string =>\r\n scroller.state && ` // time: ${scroller.state.time}`;\r\n this.getStat = (): string => {\r\n const { buffer, viewport } = scroller;\r\n const first = buffer.getFirstVisibleItem();\r\n const last = buffer.getLastVisibleItem();\r\n return 'pos: ' + viewport.scrollPosition + ', ' +\r\n 'size: ' + viewport.getScrollableSize() + ', ' +\r\n 'bwd_p: ' + viewport.paddings.backward.size + ', ' +\r\n 'fwd_p: ' + viewport.paddings.forward.size + ', ' +\r\n 'default: ' + (buffer.defaultSize || 'no') + ', ' +\r\n 'items: ' + buffer.getVisibleItemsCount() + ', ' +\r\n 'range: ' + (first && last ? `[${first.$index}..${last.$index}]` : 'no');\r\n };\r\n this.getFetchRange = (): string => {\r\n const { first: { index: first }, last: { index: last } } = scroller.state.fetch;\r\n return !Number.isNaN(first) && !Number.isNaN(last)\r\n ? `[${first}..${last}]`\r\n : 'no';\r\n };\r\n this.getLoopId = (): string => scroller.state.cycle.loopId;\r\n this.getLoopIdNext = (): string => scroller.state.cycle.loopIdNext;\r\n this.getWorkflowCycleData = (): string =>\r\n `${settings.instanceIndex}-${scroller.state.cycle.count}`;\r\n this.getScrollPosition = () => scroller.routines.getScrollPosition();\r\n this.log(() =>\r\n 'vscroll Workflow has been started, ' +\r\n `core: ${packageInfo.core.name} v${packageInfo.core.version}, ` +\r\n `consumer: ${packageInfo.consumer.name} v${packageInfo.consumer.version}, ` +\r\n `scroller instance: ${settings.instanceIndex}, adapter ` +\r\n (!adapter ? 'is not instantiated' : `instance: ${adapter.id}`)\r\n );\r\n }\r\n\r\n object(str: string, obj: unknown, stringify?: boolean): void {\r\n this.log(() => [\r\n str,\r\n stringify\r\n ? JSON.stringify(obj, (k, v) => {\r\n if (Number.isNaN(v)) {\r\n return 'NaN';\r\n }\r\n if (v === Infinity) {\r\n return 'Infinity';\r\n }\r\n if (v === -Infinity) {\r\n return '-Infinity';\r\n }\r\n if (v instanceof Element) {\r\n return 'HTMLElement';\r\n }\r\n if (v instanceof HTMLDocument) {\r\n return 'HTMLDocument';\r\n }\r\n if (typeof v === 'function') {\r\n return 'Function';\r\n }\r\n return v;\r\n })\r\n .replace(/\"/g, '')\r\n .replace(/(\\{|:|,)/g, '$1 ')\r\n .replace(/(\\})/g, ' $1')\r\n : obj\r\n ]);\r\n }\r\n\r\n stat(str?: string): void {\r\n if (this.debug) {\r\n const logStyles = [\r\n 'color: #888; border: dashed #888 0; border-bottom-width: 0px',\r\n 'color: #000; border-width: 0'\r\n ];\r\n this.log(() => ['%cstat' + (str ? ` ${str}` : '') + ',%c ' + this.getStat(), ...logStyles]);\r\n }\r\n }\r\n\r\n fetch(str?: string): void {\r\n if (this.debug) {\r\n const _text = 'fetch interval' + (str ? ` ${str}` : '');\r\n const logStyles = ['color: #888', 'color: #000'];\r\n this.log(() => [`%c${_text}: %c${this.getFetchRange()}`, ...logStyles]);\r\n }\r\n }\r\n\r\n prepareForLog(data: unknown): unknown {\r\n return data instanceof Event && data.target\r\n ? this.getScrollPosition()\r\n : data;\r\n }\r\n\r\n logProcess(data: ProcessSubject): void {\r\n if (!this.debug) {\r\n return;\r\n }\r\n const { process, status, payload } = data;\r\n\r\n // inner loop start-end log\r\n const loopLog: string[] = [];\r\n if (\r\n process === CommonProcess.init && status === Status.next\r\n ) {\r\n loopLog.push(`%c---=== loop ${this.getLoopIdNext()} start`);\r\n } else if (\r\n process === CommonProcess.end\r\n ) {\r\n loopLog.push(`%c---=== loop ${this.getLoopId()} done`);\r\n const parent = payload && payload.process;\r\n if (status === Status.next && (parent !== AdapterProcess.reset && parent !== AdapterProcess.reload)) {\r\n loopLog[0] += `, loop ${this.getLoopIdNext()} start`;\r\n }\r\n }\r\n if (loopLog.length) {\r\n this.log(() => [...loopLog, 'color: #006600;']);\r\n }\r\n }\r\n\r\n logCycle(start = true): void {\r\n const logData = this.getWorkflowCycleData();\r\n const border = start ? '1px 0 0 1px' : '0 0 1px 1px';\r\n const logStyles = `color: #0000aa; border: solid #555 1px; border-width: ${border}; margin-left: -2px`;\r\n this.log(() => [`%c ~~~ WF Cycle ${logData} ${start ? 'STARTED' : 'FINALIZED'} ~~~ `, logStyles]);\r\n }\r\n\r\n logError(str: string): void {\r\n if (this.debug) {\r\n const logStyles = ['color: #a00;', 'color: #000'];\r\n this.log(() => ['error:%c' + (str ? ` ${str}` : '') + `%c (loop ${this.getLoopIdNext()})`, ...logStyles]);\r\n }\r\n }\r\n\r\n logAdapterMethod = (methodName: string, args?: unknown, add?: string): void => {\r\n if (!this.debug) {\r\n return;\r\n }\r\n const params = (\r\n args === void 0 ? [] : (Array.isArray(args) ? args : [args])\r\n )\r\n .map((arg: unknown) => {\r\n if (typeof arg === 'function') {\r\n return 'func';\r\n } else if (typeof arg !== 'object' || !arg) {\r\n return arg;\r\n } else if (Array.isArray(arg)) {\r\n return `[of ${arg.length}]`;\r\n }\r\n return '{ ' + Object.keys(arg).join(', ') + ' }';\r\n })\r\n .join(', ');\r\n this.log(`adapter: ${methodName}(${params || ''})${add || ''}`);\r\n };\r\n\r\n log(...args: unknown[]): void {\r\n if (this.debug) {\r\n if (typeof args[0] === 'function') {\r\n args = args[0]();\r\n if (!Array.isArray(args)) {\r\n args = [args];\r\n }\r\n }\r\n if (args.every(item => item === void 0)) {\r\n return;\r\n }\r\n if (this.logTime) {\r\n args = [...args, this.getTime()];\r\n }\r\n args = args.map((arg: unknown) => this.prepareForLog(arg));\r\n if (this.immediateLog) {\r\n console.log.apply(this, args as LogType);\r\n } else {\r\n this.logs.push(args);\r\n }\r\n }\r\n }\r\n\r\n // logNow(...args: unknown[]) {\r\n // const immediateLog = this.immediateLog;\r\n // const debug = this.debug;\r\n // (this as any).debug = true;\r\n // (this as any).immediateLog = true;\r\n // this.log.apply(this, args);\r\n // (this as any).debug = debug;\r\n // (this as any).immediateLog = immediateLog;\r\n // }\r\n\r\n logForce(...args: unknown[]): void {\r\n if (this.debug) {\r\n if (!this.immediateLog && this.logs.length) {\r\n this.logs.forEach(logArgs => console.log.apply(this, logArgs));\r\n this.logs = [];\r\n }\r\n if (args.length) {\r\n console.log.apply(this, args as LogType);\r\n }\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/classes/logger.ts"],"names":[],"mappings":"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","sourcesContent":["import { Scroller } from '../scroller';\nimport { CommonProcess, AdapterProcess, ProcessStatus as Status } from '../processes/index';\nimport { IPackages, ProcessSubject } from '../interfaces/index';\n\ntype LogType = [unknown?, ...unknown[]];\n\nexport class Logger {\n readonly debug: boolean;\n readonly immediateLog: boolean;\n readonly logTime: boolean;\n readonly logColor: boolean;\n readonly getTime: () => string;\n readonly getStat: () => string;\n readonly getFetchRange: () => string;\n readonly getWorkflowCycleData: () => string;\n readonly getLoopId: () => string;\n readonly getLoopIdNext: () => string;\n readonly getScrollPosition: () => number;\n private logs: LogType[] = [];\n\n constructor(scroller: Scroller, packageInfo: IPackages, adapter?: { id: number }) {\n const { settings } = scroller;\n this.debug = settings.debug;\n this.immediateLog = settings.immediateLog;\n this.logTime = settings.logTime;\n this.logColor = settings.logColor;\n this.getTime = (): string => scroller.state && ` // time: ${scroller.state.time}`;\n this.getStat = (): string => {\n const { buffer, viewport } = scroller;\n const first = buffer.getFirstVisibleItem();\n const last = buffer.getLastVisibleItem();\n return (\n 'pos: ' +\n viewport.scrollPosition +\n ', ' +\n 'size: ' +\n viewport.getScrollableSize() +\n ', ' +\n 'bwd_p: ' +\n viewport.paddings.backward.size +\n ', ' +\n 'fwd_p: ' +\n viewport.paddings.forward.size +\n ', ' +\n 'default: ' +\n (buffer.defaultSize || 'no') +\n ', ' +\n 'items: ' +\n buffer.getVisibleItemsCount() +\n ', ' +\n 'range: ' +\n (first && last ? `[${first.$index}..${last.$index}]` : 'no')\n );\n };\n this.getFetchRange = (): string => {\n const {\n first: { index: first },\n last: { index: last }\n } = scroller.state.fetch;\n return !Number.isNaN(first) && !Number.isNaN(last) ? `[${first}..${last}]` : 'no';\n };\n this.getLoopId = (): string => scroller.state.cycle.loopId;\n this.getLoopIdNext = (): string => scroller.state.cycle.loopIdNext;\n this.getWorkflowCycleData = (): string =>\n `${settings.instanceIndex}-${scroller.state.cycle.count}`;\n this.getScrollPosition = () => scroller.routines.getScrollPosition();\n this.log(\n () =>\n 'vscroll Workflow has been started, ' +\n `core: ${packageInfo.core.name} v${packageInfo.core.version}, ` +\n `consumer: ${packageInfo.consumer.name} v${packageInfo.consumer.version}, ` +\n `scroller instance: ${settings.instanceIndex}, adapter ` +\n (!adapter ? 'is not instantiated' : `instance: ${adapter.id}`)\n );\n }\n\n object(str: string, obj: unknown, stringify?: boolean): void {\n this.log(() => [\n str,\n stringify\n ? JSON.stringify(obj, (_, v) => {\n if (Number.isNaN(v)) {\n return 'NaN';\n }\n if (v === Infinity) {\n return 'Infinity';\n }\n if (v === -Infinity) {\n return '-Infinity';\n }\n if (v instanceof Element) {\n return 'HTMLElement';\n }\n if (v instanceof HTMLDocument) {\n return 'HTMLDocument';\n }\n if (typeof v === 'function') {\n return 'Function';\n }\n return v;\n })\n .replace(/\"/g, '')\n .replace(/(\\{|:|,)/g, '$1 ')\n .replace(/(\\})/g, ' $1')\n : obj\n ]);\n }\n\n stat(str?: string): void {\n if (this.debug) {\n if (this.logColor) {\n const logStyles = [\n 'color: #888; border: dashed #888 0; border-bottom-width: 0px',\n 'color: #000; border-width: 0'\n ];\n this.log(() => ['%cstat' + (str ? ` ${str}` : '') + ',%c ' + this.getStat(), ...logStyles]);\n } else {\n this.log(() => ['stat' + (str ? ` ${str}` : '') + ', ' + this.getStat()]);\n }\n }\n }\n\n fetch(str?: string): void {\n if (this.debug) {\n const _text = 'fetch interval' + (str ? ` ${str}` : '');\n if (this.logColor) {\n const logStyles = ['color: #888', 'color: #000'];\n this.log(() => [`%c${_text}: %c${this.getFetchRange()}`, ...logStyles]);\n } else {\n this.log(() => [`${_text}: ${this.getFetchRange()}`]);\n }\n }\n }\n\n prepareForLog(data: unknown): unknown {\n return data instanceof Event && data.target ? this.getScrollPosition() : data;\n }\n\n logProcess(data: ProcessSubject): void {\n if (!this.debug) {\n return;\n }\n const { process, status, payload } = data;\n\n // inner loop start-end log\n const loopLog: string[] = [];\n if (process === CommonProcess.init && status === Status.next) {\n const loopStart = `---=== loop ${this.getLoopIdNext()} start`;\n loopLog.push(this.logColor ? `%c${loopStart}` : loopStart);\n } else if (process === CommonProcess.end) {\n const loopDone = `---=== loop ${this.getLoopId()} done`;\n loopLog.push(this.logColor ? `%c${loopDone}` : loopDone);\n const parent = payload && payload.process;\n if (\n status === Status.next &&\n parent !== AdapterProcess.reset &&\n parent !== AdapterProcess.reload\n ) {\n loopLog[0] += `, loop ${this.getLoopIdNext()} start`;\n }\n }\n if (loopLog.length) {\n this.log(() => (this.logColor ? [...loopLog, 'color: #006600;'] : loopLog));\n }\n }\n\n logCycle(start = true): void {\n const logData = this.getWorkflowCycleData();\n if (this.logColor) {\n const border = start ? '1px 0 0 1px' : '0 0 1px 1px';\n const logStyles = `color: #0000aa; border: solid #555 1px; border-width: ${border}; margin-left: -2px`;\n this.log(() => [\n `%c ~~~ WF Cycle ${logData} ${start ? 'STARTED' : 'FINALIZED'} ~~~ `,\n logStyles\n ]);\n } else {\n this.log(() => [` ~~~ WF Cycle ${logData} ${start ? 'STARTED' : 'FINALIZED'} ~~~ `]);\n }\n }\n\n logError(str: string): void {\n if (this.debug) {\n if (this.logColor) {\n const logStyles = ['color: #a00;', 'color: #000'];\n this.log(() => [\n 'error:%c' + (str ? ` ${str}` : '') + `%c (loop ${this.getLoopIdNext()})`,\n ...logStyles\n ]);\n } else {\n this.log(() => ['error:' + (str ? ` ${str}` : '') + ` (loop ${this.getLoopIdNext()})`]);\n }\n }\n }\n\n logAdapterMethod = (methodName: string, args?: unknown, add?: string): void => {\n if (!this.debug) {\n return;\n }\n const params = (args === void 0 ? [] : Array.isArray(args) ? args : [args])\n .map((arg: unknown) => {\n if (typeof arg === 'function') {\n return 'func';\n } else if (typeof arg !== 'object' || !arg) {\n return arg;\n } else if (Array.isArray(arg)) {\n return `[of ${arg.length}]`;\n }\n return '{ ' + Object.keys(arg).join(', ') + ' }';\n })\n .join(', ');\n this.log(`adapter: ${methodName}(${params || ''})${add || ''}`);\n };\n\n log(...args: unknown[]): void {\n if (this.debug) {\n if (typeof args[0] === 'function') {\n args = args[0]();\n if (!Array.isArray(args)) {\n args = [args];\n }\n }\n if (args.every(item => item === void 0)) {\n return;\n }\n if (this.logTime) {\n args = [...args, this.getTime()];\n }\n args = args.map((arg: unknown) => this.prepareForLog(arg));\n if (this.immediateLog) {\n console.log.apply(this, args as LogType);\n } else {\n this.logs.push(args);\n }\n }\n }\n\n // logNow(...args: unknown[]) {\n // const immediateLog = this.immediateLog;\n // const debug = this.debug;\n // (this as any).debug = true;\n // (this as any).immediateLog = true;\n // this.log.apply(this, args);\n // (this as any).debug = debug;\n // (this as any).immediateLog = immediateLog;\n // }\n\n logForce(...args: unknown[]): void {\n if (this.debug) {\n if (!this.immediateLog && this.logs.length) {\n this.logs.forEach(logArgs => console.log.apply(this, logArgs));\n this.logs = [];\n }\n if (args.length) {\n console.log.apply(this, args as LogType);\n }\n }\n }\n\n getLogs(): LogType[] {\n return this.logs;\n }\n}\n"]}
@@ -25,8 +25,12 @@ export class Paddings {
25
25
  }
26
26
  byDirection(direction, opposite) {
27
27
  return direction === Direction.backward
28
- ? (opposite ? this.forward : this.backward)
29
- : (opposite ? this.backward : this.forward);
28
+ ? opposite
29
+ ? this.forward
30
+ : this.backward
31
+ : opposite
32
+ ? this.backward
33
+ : this.forward;
30
34
  }
31
35
  reset(viewportSize, startIndex, offset) {
32
36
  const positive = this.getPositiveSize(startIndex, viewportSize, offset);
@@ -1 +1 @@
1
- {"version":3,"file":"paddings.js","sourceRoot":"","sources":["../../../src/classes/paddings.ts"],"names":[],"mappings":"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","sourcesContent":["import { Routines } from './domRoutines';\r\nimport { Settings } from './settings';\r\nimport { Direction } from '../inputs/index';\r\n\r\nexport class Padding {\r\n\r\n element: HTMLElement;\r\n direction: Direction;\r\n routines: Routines;\r\n\r\n constructor(direction: Direction, routines: Routines) {\r\n const found = routines.findPaddingElement(direction);\r\n routines.checkElement(found as HTMLElement);\r\n this.element = found as HTMLElement;\r\n this.direction = direction;\r\n this.routines = routines;\r\n }\r\n\r\n reset(size?: number): void {\r\n this.size = size || 0;\r\n }\r\n\r\n get size(): number {\r\n return this.routines.getSizeStyle(this.element);\r\n }\r\n\r\n set size(value: number) {\r\n this.routines.setSizeStyle(this.element, value);\r\n }\r\n\r\n}\r\n\r\nexport class Paddings {\r\n settings: Settings;\r\n forward: Padding;\r\n backward: Padding;\r\n\r\n constructor(routines: Routines, settings: Settings) {\r\n this.settings = settings;\r\n this.forward = new Padding(Direction.forward, routines);\r\n this.backward = new Padding(Direction.backward, routines);\r\n }\r\n\r\n byDirection(direction: Direction, opposite?: boolean): Padding {\r\n return direction === Direction.backward\r\n ? (opposite ? this.forward : this.backward)\r\n : (opposite ? this.backward : this.forward);\r\n }\r\n\r\n reset(viewportSize: number, startIndex: number, offset: number): void {\r\n const positive = this.getPositiveSize(startIndex, viewportSize, offset);\r\n const negative = this.getNegativeSize(startIndex);\r\n if (this.settings.inverse) {\r\n this.forward.reset(negative);\r\n this.backward.reset(positive);\r\n const diff = viewportSize - this.backward.size - offset;\r\n if (diff > 0) {\r\n this.backward.size += diff;\r\n this.forward.size -= diff;\r\n }\r\n } else {\r\n this.forward.reset(positive);\r\n this.backward.reset(negative);\r\n const diff = viewportSize - this.forward.size - offset;\r\n if (diff > 0) {\r\n this.backward.size -= diff;\r\n this.forward.size += diff;\r\n }\r\n }\r\n\r\n }\r\n\r\n getPositiveSize(startIndex: number, viewportSize: number, offset: number): number {\r\n const { settings } = this;\r\n let positiveSize = viewportSize;\r\n if (isFinite(settings.maxIndex)) {\r\n positiveSize = (settings.maxIndex - startIndex + 1) * settings.itemSize;\r\n }\r\n if (offset) {\r\n positiveSize = Math.max(positiveSize - offset, 0);\r\n }\r\n return positiveSize;\r\n }\r\n\r\n getNegativeSize(startIndex: number): number {\r\n const { settings } = this;\r\n let negativeSize = 0;\r\n if (isFinite(settings.minIndex)) {\r\n negativeSize = (startIndex - settings.minIndex) * settings.itemSize;\r\n }\r\n return negativeSize;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"paddings.js","sourceRoot":"","sources":["../../../src/classes/paddings.ts"],"names":[],"mappings":"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","sourcesContent":["import { Routines } from './domRoutines';\nimport { Settings } from './settings';\nimport { Direction } from '../inputs/index';\n\nexport class Padding {\n element: HTMLElement;\n direction: Direction;\n routines: Routines;\n\n constructor(direction: Direction, routines: Routines) {\n const found = routines.findPaddingElement(direction);\n routines.checkElement(found as HTMLElement);\n this.element = found as HTMLElement;\n this.direction = direction;\n this.routines = routines;\n }\n\n reset(size?: number): void {\n this.size = size || 0;\n }\n\n get size(): number {\n return this.routines.getSizeStyle(this.element);\n }\n\n set size(value: number) {\n this.routines.setSizeStyle(this.element, value);\n }\n}\n\nexport class Paddings {\n settings: Settings;\n forward: Padding;\n backward: Padding;\n\n constructor(routines: Routines, settings: Settings) {\n this.settings = settings;\n this.forward = new Padding(Direction.forward, routines);\n this.backward = new Padding(Direction.backward, routines);\n }\n\n byDirection(direction: Direction, opposite?: boolean): Padding {\n return direction === Direction.backward\n ? opposite\n ? this.forward\n : this.backward\n : opposite\n ? this.backward\n : this.forward;\n }\n\n reset(viewportSize: number, startIndex: number, offset: number): void {\n const positive = this.getPositiveSize(startIndex, viewportSize, offset);\n const negative = this.getNegativeSize(startIndex);\n if (this.settings.inverse) {\n this.forward.reset(negative);\n this.backward.reset(positive);\n const diff = viewportSize - this.backward.size - offset;\n if (diff > 0) {\n this.backward.size += diff;\n this.forward.size -= diff;\n }\n } else {\n this.forward.reset(positive);\n this.backward.reset(negative);\n const diff = viewportSize - this.forward.size - offset;\n if (diff > 0) {\n this.backward.size -= diff;\n this.forward.size += diff;\n }\n }\n }\n\n getPositiveSize(startIndex: number, viewportSize: number, offset: number): number {\n const { settings } = this;\n let positiveSize = viewportSize;\n if (isFinite(settings.maxIndex)) {\n positiveSize = (settings.maxIndex - startIndex + 1) * settings.itemSize;\n }\n if (offset) {\n positiveSize = Math.max(positiveSize - offset, 0);\n }\n return positiveSize;\n }\n\n getNegativeSize(startIndex: number): number {\n const { settings } = this;\n let negativeSize = 0;\n if (isFinite(settings.minIndex)) {\n negativeSize = (startIndex - settings.minIndex) * settings.itemSize;\n }\n return negativeSize;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"reactive.js","sourceRoot":"","sources":["../../../src/classes/reactive.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,QAAQ;IAQnB,YAAY,KAAS,EAAE,OAAiB;QACtC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACZ,IAAI,KAAK,KAAK,KAAK,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;IACjC,CAAC;IAED,GAAG,CAAC,KAAQ;QACV,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACpD,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,KAAK,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACzC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChB,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;gBACzB,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,GAAG;QACD,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,EAAE,CAAC,IAAW;QACZ,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACrB,MAAM,YAAY,GAAoB;YACpC,IAAI,EAAE,IAAI;YACV,GAAG,EAAE,GAAG,EAAE;gBACR,YAAY,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;gBAC/B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAChC,CAAC;SACF,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;QACzC,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;YACjC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;IAClC,CAAC;IAED,IAAI,CAAC,IAAW;QACd,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;YACtB,GAAG,EAAE,CAAC;YACN,IAAI,CAAC,CAAC,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO;QACL,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/C,CAAC;CACF","sourcesContent":["type On<T> = (value: T) => void;\r\ntype Off = () => void;\r\n\r\ninterface Subscription<T> {\r\n emit: On<T>;\r\n off: Off;\r\n}\r\n\r\ninterface Options {\r\n emitOnSubscribe?: boolean; // if set, emit right on subscribe (like rxjs BehaviorSubject)\r\n emitEqual?: boolean; // if set, emit when new value is equal to the old one\r\n}\r\n\r\nexport class Reactive<T> {\r\n\r\n private initialValue: T;\r\n private value: T;\r\n private id: number;\r\n private options: Options;\r\n private subscriptions: Map<number, Subscription<T>>;\r\n\r\n constructor(value?: T, options?: Options) {\r\n this.id = 0;\r\n if (value !== void 0) {\r\n this.value = value;\r\n this.initialValue = value;\r\n }\r\n this.options = options || {};\r\n this.subscriptions = new Map();\r\n }\r\n\r\n set(value: T): void {\r\n if (this.value === value && !this.options.emitEqual) {\r\n return;\r\n }\r\n this.value = value;\r\n for (const [, sub] of this.subscriptions) {\r\n sub.emit(value);\r\n if (this.value !== value) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n get(): T {\r\n return this.value;\r\n }\r\n\r\n on(func: On<T>): Off {\r\n const id = this.id++;\r\n const subscription: Subscription<T> = {\r\n emit: func,\r\n off: () => {\r\n subscription.emit = () => null;\r\n this.subscriptions.delete(id);\r\n }\r\n };\r\n this.subscriptions.set(id, subscription);\r\n if (this.options.emitOnSubscribe) {\r\n subscription.emit(this.value);\r\n }\r\n return () => subscription.off();\r\n }\r\n\r\n once(func: On<T>): Off {\r\n const off = this.on(v => {\r\n off();\r\n func(v);\r\n });\r\n return off;\r\n }\r\n\r\n reset(): void {\r\n this.set(this.initialValue);\r\n }\r\n\r\n dispose(): void {\r\n this.subscriptions.forEach(sub => sub.off());\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"reactive.js","sourceRoot":"","sources":["../../../src/classes/reactive.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,QAAQ;IAOnB,YAAY,KAAS,EAAE,OAAiB;QACtC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACZ,IAAI,KAAK,KAAK,KAAK,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;IACjC,CAAC;IAED,GAAG,CAAC,KAAQ;QACV,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACpD,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,KAAK,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACzC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChB,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;gBACzB,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,GAAG;QACD,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,EAAE,CAAC,IAAW;QACZ,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACrB,MAAM,YAAY,GAAoB;YACpC,IAAI,EAAE,IAAI;YACV,GAAG,EAAE,GAAG,EAAE;gBACR,YAAY,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;gBAC/B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAChC,CAAC;SACF,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;QACzC,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;YACjC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;IAClC,CAAC;IAED,IAAI,CAAC,IAAW;QACd,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;YACtB,GAAG,EAAE,CAAC;YACN,IAAI,CAAC,CAAC,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO;QACL,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/C,CAAC;CACF","sourcesContent":["type On<T> = (value: T) => void;\ntype Off = () => void;\n\ninterface Subscription<T> {\n emit: On<T>;\n off: Off;\n}\n\ninterface Options {\n emitOnSubscribe?: boolean; // if set, emit right on subscribe (like rxjs BehaviorSubject)\n emitEqual?: boolean; // if set, emit when new value is equal to the old one\n}\n\nexport class Reactive<T> {\n private initialValue: T;\n private value: T;\n private id: number;\n private options: Options;\n private subscriptions: Map<number, Subscription<T>>;\n\n constructor(value?: T, options?: Options) {\n this.id = 0;\n if (value !== void 0) {\n this.value = value;\n this.initialValue = value;\n }\n this.options = options || {};\n this.subscriptions = new Map();\n }\n\n set(value: T): void {\n if (this.value === value && !this.options.emitEqual) {\n return;\n }\n this.value = value;\n for (const [, sub] of this.subscriptions) {\n sub.emit(value);\n if (this.value !== value) {\n break;\n }\n }\n }\n\n get(): T {\n return this.value;\n }\n\n on(func: On<T>): Off {\n const id = this.id++;\n const subscription: Subscription<T> = {\n emit: func,\n off: () => {\n subscription.emit = () => null;\n this.subscriptions.delete(id);\n }\n };\n this.subscriptions.set(id, subscription);\n if (this.options.emitOnSubscribe) {\n subscription.emit(this.value);\n }\n return () => subscription.off();\n }\n\n once(func: On<T>): Off {\n const off = this.on(v => {\n off();\n func(v);\n });\n return off;\n }\n\n reset(): void {\n this.set(this.initialValue);\n }\n\n dispose(): void {\n this.subscriptions.forEach(sub => sub.off());\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/classes/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAA2B,MAAM,iBAAiB,CAAC;AAGrH,MAAM,OAAO,QAAQ;IAiInB,YACE,QAAqC,EAAE,WAAqC,EAAE,aAAqB;QAEnG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAC3C,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACjD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACnC,uEAAuE;IACzE,CAAC;IAED,UAAU,CAAC,KAAiD,EAAE,KAAgC;QAC5F,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CACnD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAC1C,CAAC;IACJ,CAAC;IAED,kBAAkB;QAChB,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC,mBAAmB,IAAI,OAAO,CAAC,EAAE,CAAC;YACrF,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;QAChC,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,WAAW;QACT,IAAI,OAAO,IAAI,CAAC,eAAe,KAAK,UAAU,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC,eAAe,CAAC;QAC9B,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACrF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,CAAC,kFAAkF;QACjG,CAAC;QACD,OAAO,MAAM,CAAC,KAAoB,CAAC;IACrC,CAAC;CACF","sourcesContent":["import { SETTINGS, DEV_SETTINGS, validate, validateOne, VALIDATORS, SizeStrategy, Direction } from '../inputs/index';\r\nimport { Settings as ISettings, DevSettings as IDevSettings, ICommonProps, ItemsProcessor } from '../interfaces/index';\r\n\r\nexport class Settings<Data = unknown> implements ISettings, IDevSettings {\r\n\r\n // user settings\r\n adapter: boolean;\r\n startIndex: number;\r\n minIndex: number;\r\n maxIndex: number;\r\n itemSize: number;\r\n bufferSize: number;\r\n padding: number;\r\n infinite: boolean;\r\n horizontal: boolean;\r\n windowViewport: boolean;\r\n viewportElement: HTMLElement | (() => void) | null;\r\n inverse: boolean; // if true, bwd padding element will have a priority when filling the viewport (if lack of items)\r\n onBeforeClip: ItemsProcessor | null; // if set, it will be run before clipping items from Buffer after they are hidden\r\n sizeStrategy: SizeStrategy; // \"average\" | \"frequent\", determines behavior of unknown items\r\n\r\n /**\r\n * Development setting.\r\n * If true, logging is enabled.\r\n * Default value: false.\r\n * @type {boolean}\r\n */\r\n debug: boolean; // if true, \r\n\r\n /**\r\n * Development setting.\r\n * If false, in-memory logging is enabled, Adapter.showLog() method should be called to print the log.\r\n * Default value: true.\r\n * @type {boolean}\r\n */\r\n immediateLog: boolean;\r\n\r\n /**\r\n * Development setting.\r\n * If true, time differences will be logged.\r\n * Default value: false.\r\n * @type {boolean}\r\n */\r\n logTime: boolean;\r\n\r\n /**\r\n * Development setting.\r\n * If true, process fire/run info will be logged.\r\n * Default value: false.\r\n * @type {boolean}\r\n */\r\n logProcessRun: boolean;\r\n\r\n /**\r\n * Development setting.\r\n * If set, scroll event handling is throttled (ms).\r\n * Default value: 40. Minimal value: 0.\r\n * @type {number} ms\r\n */\r\n throttle: number;\r\n\r\n /**\r\n * Development setting.\r\n * If set, the Workflow initialization will be postponed (ms).\r\n * Default value: 1. Minimal value: 0.\r\n * @type {number} ms\r\n */\r\n initDelay: number;\r\n\r\n /**\r\n * Development setting.\r\n * If set and the entire window is scrollable, the Workflow initialization will be postponed (ms).\r\n * Default value: 40. Minimal value: 0.\r\n * @type {number} ms\r\n */\r\n initWindowDelay: number;\r\n\r\n /**\r\n * Development setting.\r\n * If true, item's data will be cached along with item's size and index.\r\n * Default value: false.\r\n * @type {boolean}\r\n */\r\n cacheData: boolean;\r\n\r\n /**\r\n * Development setting.\r\n * If true, cache will not be flushed on reload.\r\n * Default value: false.\r\n * @type {boolean}\r\n */\r\n cacheOnReload: boolean;\r\n\r\n /**\r\n * Development setting.\r\n * If true, the viewport will receive \"overflowAnchor: none\" css property.\r\n * Default value: false.\r\n * @type {boolean}\r\n */\r\n dismissOverflowAnchor: boolean;\r\n\r\n /**\r\n * Development setting.\r\n * Determines the strategy of fixing the difference between estimated and real (rendered) sizes\r\n * on scroll position adjustments. If set to 'backward', the difference is always resolved in favour of the\r\n * backward direction: top/left content is fixed and appears in accordance with pre-render expectations.\r\n * If set to 'forward', both directions could be used, and there is a case when bottom/right content is fixed:\r\n * new items are to the left of the previously rendered\r\n * and at least one previously rendered item remains.\r\n * Default value: 'backward'. Allowed values: 'backward', 'forward'.\r\n * @type {string}\r\n */\r\n directionPriority: Direction;\r\n\r\n /**\r\n * Internal setting. Stores the index of the Scroller instance.\r\n * @type {number}\r\n */\r\n instanceIndex: number;\r\n\r\n /**\r\n * Internal setting. Stores the Workflow initialization delay based on initDelay and initWindowDelay settings.\r\n * @type {number}\r\n */\r\n initializeDelay: number;\r\n\r\n /**\r\n * Internal setting. Stores the viewport based on viewportElement setting (which can be element or function).\r\n * @type {HTMLElement|null}\r\n */\r\n viewport: HTMLElement | null;\r\n\r\n constructor(\r\n settings: ISettings<Data> | undefined, devSettings: IDevSettings | undefined, instanceIndex: number\r\n ) {\r\n this.parseInput(settings, SETTINGS);\r\n this.parseInput(devSettings, DEV_SETTINGS);\r\n this.instanceIndex = instanceIndex;\r\n this.initializeDelay = this.getInitializeDelay();\r\n this.viewport = this.getViewport();\r\n // todo: min/max indexes must be ignored if infinite mode is enabled ??\r\n }\r\n\r\n parseInput(input: ISettings<Data> | IDevSettings | undefined, props: ICommonProps<PropertyKey>): void {\r\n const result = validate(input, props);\r\n if (!result.isValid) {\r\n throw new Error('Invalid settings');\r\n }\r\n Object.entries(result.params).forEach(([key, par]) =>\r\n Object.assign(this, { [key]: par.value })\r\n );\r\n }\r\n\r\n getInitializeDelay(): number {\r\n let result = 0;\r\n if (this.windowViewport && this.initWindowDelay && !('scrollRestoration' in history)) {\r\n result = this.initWindowDelay;\r\n }\r\n if (this.initDelay > 0) {\r\n result = Math.max(result, this.initDelay);\r\n }\r\n return result;\r\n }\r\n\r\n getViewport(): HTMLElement | null {\r\n if (typeof this.viewportElement !== 'function') {\r\n return this.viewportElement;\r\n }\r\n const value = this.viewportElement();\r\n const result = validateOne({ value }, 'value', { validators: [VALIDATORS.ELEMENT] });\r\n if (!result.isValid) {\r\n return null; // fallback to default (null) if Function didn't return HTML element synchronously\r\n }\r\n return result.value as HTMLElement;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/classes/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,UAAU,EAGX,MAAM,iBAAiB,CAAC;AAQzB,MAAM,OAAO,QAAQ;IAwInB,YACE,QAAqC,EACrC,WAAqC,EACrC,aAAqB;QAErB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAC3C,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACjD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACnC,uEAAuE;IACzE,CAAC;IAED,UAAU,CACR,KAAiD,EACjD,KAAgC;QAEhC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CACnD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAC1C,CAAC;IACJ,CAAC;IAED,kBAAkB;QAChB,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC,mBAAmB,IAAI,OAAO,CAAC,EAAE,CAAC;YACrF,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;QAChC,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,WAAW;QACT,IAAI,OAAO,IAAI,CAAC,eAAe,KAAK,UAAU,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC,eAAe,CAAC;QAC9B,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACrF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,CAAC,kFAAkF;QACjG,CAAC;QACD,OAAO,MAAM,CAAC,KAAoB,CAAC;IACrC,CAAC;CACF","sourcesContent":["import {\n SETTINGS,\n DEV_SETTINGS,\n validate,\n validateOne,\n VALIDATORS,\n SizeStrategy,\n Direction\n} from '../inputs/index';\nimport {\n Settings as ISettings,\n DevSettings as IDevSettings,\n ICommonProps,\n ItemsProcessor\n} from '../interfaces/index';\n\nexport class Settings<Data = unknown> implements ISettings, IDevSettings {\n // user settings\n adapter: boolean;\n startIndex: number;\n minIndex: number;\n maxIndex: number;\n itemSize: number;\n bufferSize: number;\n padding: number;\n infinite: boolean;\n horizontal: boolean;\n windowViewport: boolean;\n viewportElement: HTMLElement | (() => void) | null;\n inverse: boolean; // if true, bwd padding element will have a priority when filling the viewport (if lack of items)\n onBeforeClip: ItemsProcessor | null; // if set, it will be run before clipping items from Buffer after they are hidden\n sizeStrategy: SizeStrategy; // \"average\" | \"frequent\", determines behavior of unknown items\n\n /**\n * Development setting.\n * If true, logging is enabled.\n * Default value: false.\n * @type {boolean}\n */\n debug: boolean; // if true,\n\n /**\n * Development setting.\n * If false, in-memory logging is enabled, Adapter.showLog() method should be called to print the log.\n * Default value: true.\n * @type {boolean}\n */\n immediateLog: boolean;\n\n /**\n * Development setting.\n * If true, time differences will be logged.\n * Default value: false.\n * @type {boolean}\n */\n logTime: boolean;\n\n /**\n * Development setting.\n * If true, process fire/run info will be logged.\n * Default value: false.\n * @type {boolean}\n */\n logProcessRun: boolean;\n\n /**\n * Development setting.\n * If true, console color formatting will be used in logs.\n * Default value: true.\n * @type {boolean}\n */\n logColor: boolean;\n\n /**\n * Development setting.\n * If set, scroll event handling is throttled (ms).\n * Default value: 40. Minimal value: 0.\n * @type {number} ms\n */\n throttle: number;\n\n /**\n * Development setting.\n * If set, the Workflow initialization will be postponed (ms).\n * Default value: 1. Minimal value: 0.\n * @type {number} ms\n */\n initDelay: number;\n\n /**\n * Development setting.\n * If set and the entire window is scrollable, the Workflow initialization will be postponed (ms).\n * Default value: 40. Minimal value: 0.\n * @type {number} ms\n */\n initWindowDelay: number;\n\n /**\n * Development setting.\n * If true, item's data will be cached along with item's size and index.\n * Default value: false.\n * @type {boolean}\n */\n cacheData: boolean;\n\n /**\n * Development setting.\n * If true, cache will not be flushed on reload.\n * Default value: false.\n * @type {boolean}\n */\n cacheOnReload: boolean;\n\n /**\n * Development setting.\n * If true, the viewport will receive \"overflowAnchor: none\" css property.\n * Default value: false.\n * @type {boolean}\n */\n dismissOverflowAnchor: boolean;\n\n /**\n * Development setting.\n * Determines the strategy of fixing the difference between estimated and real (rendered) sizes\n * on scroll position adjustments. If set to 'backward', the difference is always resolved in favour of the\n * backward direction: top/left content is fixed and appears in accordance with pre-render expectations.\n * If set to 'forward', both directions could be used, and there is a case when bottom/right content is fixed:\n * new items are to the left of the previously rendered\n * and at least one previously rendered item remains.\n * Default value: 'backward'. Allowed values: 'backward', 'forward'.\n * @type {string}\n */\n directionPriority: Direction;\n\n /**\n * Internal setting. Stores the index of the Scroller instance.\n * @type {number}\n */\n instanceIndex: number;\n\n /**\n * Internal setting. Stores the Workflow initialization delay based on initDelay and initWindowDelay settings.\n * @type {number}\n */\n initializeDelay: number;\n\n /**\n * Internal setting. Stores the viewport based on viewportElement setting (which can be element or function).\n * @type {HTMLElement|null}\n */\n viewport: HTMLElement | null;\n\n constructor(\n settings: ISettings<Data> | undefined,\n devSettings: IDevSettings | undefined,\n instanceIndex: number\n ) {\n this.parseInput(settings, SETTINGS);\n this.parseInput(devSettings, DEV_SETTINGS);\n this.instanceIndex = instanceIndex;\n this.initializeDelay = this.getInitializeDelay();\n this.viewport = this.getViewport();\n // todo: min/max indexes must be ignored if infinite mode is enabled ??\n }\n\n parseInput(\n input: ISettings<Data> | IDevSettings | undefined,\n props: ICommonProps<PropertyKey>\n ): void {\n const result = validate(input, props);\n if (!result.isValid) {\n throw new Error('Invalid settings');\n }\n Object.entries(result.params).forEach(([key, par]) =>\n Object.assign(this, { [key]: par.value })\n );\n }\n\n getInitializeDelay(): number {\n let result = 0;\n if (this.windowViewport && this.initWindowDelay && !('scrollRestoration' in history)) {\n result = this.initWindowDelay;\n }\n if (this.initDelay > 0) {\n result = Math.max(result, this.initDelay);\n }\n return result;\n }\n\n getViewport(): HTMLElement | null {\n if (typeof this.viewportElement !== 'function') {\n return this.viewportElement;\n }\n const value = this.viewportElement();\n const result = validateOne({ value }, 'value', { validators: [VALIDATORS.ELEMENT] });\n if (!result.isValid) {\n return null; // fallback to default (null) if Function didn't return HTML element synchronously\n }\n return result.value as HTMLElement;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"clip.js","sourceRoot":"","sources":["../../../../src/classes/state/clip.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,SAAS;IAMpB,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,aAAa,CAAC;IACjD,CAAC;IAED;QACE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,KAAK,CAAC,KAAe;QACnB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC7B,CAAC;IACH,CAAC;CAEF","sourcesContent":["export class ClipModel {\r\n doClip: boolean;\r\n callCount: number;\r\n forceForward: boolean;\r\n forceBackward: boolean;\r\n\r\n get force(): boolean {\r\n return this.forceForward || this.forceBackward;\r\n }\r\n\r\n constructor() {\r\n this.callCount = 0;\r\n this.reset();\r\n }\r\n\r\n reset(force?: boolean): void {\r\n this.doClip = false;\r\n if (!force) {\r\n this.forceForward = false;\r\n this.forceBackward = false;\r\n }\r\n }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"clip.js","sourceRoot":"","sources":["../../../../src/classes/state/clip.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,SAAS;IAMpB,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,aAAa,CAAC;IACjD,CAAC;IAED;QACE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,KAAK,CAAC,KAAe;QACnB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC7B,CAAC;IACH,CAAC;CACF","sourcesContent":["export class ClipModel {\n doClip: boolean;\n callCount: number;\n forceForward: boolean;\n forceBackward: boolean;\n\n get force(): boolean {\n return this.forceForward || this.forceBackward;\n }\n\n constructor() {\n this.callCount = 0;\n this.reset();\n }\n\n reset(force?: boolean): void {\n this.doClip = false;\n if (!force) {\n this.forceForward = false;\n this.forceBackward = false;\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"cycle.js","sourceRoot":"","sources":["../../../../src/classes/state/cycle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,cAAc;IAMlB,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,YAAY,KAAa;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAU,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI;QACF,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC;CACF;AAED,MAAM,OAAO,kBAAkB;IAS7B,IAAI,MAAM;QACR,OAAO,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACvE,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;IAC3E,CAAC;IAED,YAAY,aAAqB,EAAE,KAA0B;QAC3D,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAU,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,SAAkB,EAAE,SAAsB;QAC9C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC;QACrC,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,GAAG,CAAC,KAAa;QACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,CAAC,OAAiB;QACvB,IAAI,OAAO,EAAE,CAAC;YACZ,gEAAgE;YAChE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF","sourcesContent":["import { ProcessName } from '../../interfaces/index';\r\nimport { Reactive } from '../reactive';\r\n\r\nclass InnerLoopModel {\r\n total: number;\r\n count: number;\r\n isInitial: boolean;\r\n busy: Reactive<boolean>;\r\n\r\n get first(): boolean {\r\n return this.count === 0;\r\n }\r\n\r\n constructor(total: number) {\r\n this.total = total;\r\n this.isInitial = false;\r\n this.busy = new Reactive<boolean>(false);\r\n }\r\n\r\n done() {\r\n this.isInitial = false;\r\n this.count++;\r\n this.total++;\r\n this.busy.set(false);\r\n }\r\n\r\n start() {\r\n this.busy.set(true);\r\n }\r\n\r\n dispose() {\r\n this.busy.dispose();\r\n }\r\n}\r\n\r\nexport class WorkflowCycleModel {\r\n instanceIndex: number;\r\n count: number;\r\n isInitial: boolean;\r\n initiator: ProcessName;\r\n innerLoop: InnerLoopModel;\r\n interrupter: ProcessName | null;\r\n busy: Reactive<boolean>;\r\n\r\n get loopId(): string {\r\n return `${this.instanceIndex}-${this.count}-${this.innerLoop.total}`;\r\n }\r\n\r\n get loopIdNext(): string {\r\n return `${this.instanceIndex}-${this.count}-${this.innerLoop.total + 1}`;\r\n }\r\n\r\n constructor(instanceIndex: number, cycle?: WorkflowCycleModel) {\r\n const cycleCount = cycle ? cycle.count : 1;\r\n const loopCount = cycle ? cycle.innerLoop.count : 0;\r\n\r\n this.instanceIndex = instanceIndex;\r\n this.innerLoop = new InnerLoopModel(loopCount);\r\n this.interrupter = null;\r\n this.busy = new Reactive<boolean>(false);\r\n this.end(cycleCount);\r\n }\r\n\r\n start(isInitial: boolean, initiator: ProcessName): void {\r\n this.isInitial = isInitial;\r\n this.initiator = initiator;\r\n this.innerLoop.isInitial = isInitial;\r\n this.innerLoop.count = 0;\r\n this.interrupter = null;\r\n this.busy.set(true);\r\n }\r\n\r\n end(count: number): void {\r\n this.count = count;\r\n this.isInitial = false;\r\n this.busy.set(false);\r\n }\r\n\r\n dispose(forever?: boolean): void {\r\n if (forever) {\r\n // otherwise the value will be persisted during re-instantiation\r\n this.busy.dispose();\r\n }\r\n this.innerLoop.dispose();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"cycle.js","sourceRoot":"","sources":["../../../../src/classes/state/cycle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,cAAc;IAMlB,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,YAAY,KAAa;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAU,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI;QACF,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC;CACF;AAED,MAAM,OAAO,kBAAkB;IAS7B,IAAI,MAAM;QACR,OAAO,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACvE,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;IAC3E,CAAC;IAED,YAAY,aAAqB,EAAE,KAA0B;QAC3D,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAU,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,SAAkB,EAAE,SAAsB;QAC9C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC;QACrC,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,GAAG,CAAC,KAAa;QACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,CAAC,OAAiB;QACvB,IAAI,OAAO,EAAE,CAAC;YACZ,gEAAgE;YAChE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF","sourcesContent":["import { ProcessName } from '../../interfaces/index';\nimport { Reactive } from '../reactive';\n\nclass InnerLoopModel {\n total: number;\n count: number;\n isInitial: boolean;\n busy: Reactive<boolean>;\n\n get first(): boolean {\n return this.count === 0;\n }\n\n constructor(total: number) {\n this.total = total;\n this.isInitial = false;\n this.busy = new Reactive<boolean>(false);\n }\n\n done() {\n this.isInitial = false;\n this.count++;\n this.total++;\n this.busy.set(false);\n }\n\n start() {\n this.busy.set(true);\n }\n\n dispose() {\n this.busy.dispose();\n }\n}\n\nexport class WorkflowCycleModel {\n instanceIndex: number;\n count: number;\n isInitial: boolean;\n initiator: ProcessName;\n innerLoop: InnerLoopModel;\n interrupter: ProcessName | null;\n busy: Reactive<boolean>;\n\n get loopId(): string {\n return `${this.instanceIndex}-${this.count}-${this.innerLoop.total}`;\n }\n\n get loopIdNext(): string {\n return `${this.instanceIndex}-${this.count}-${this.innerLoop.total + 1}`;\n }\n\n constructor(instanceIndex: number, cycle?: WorkflowCycleModel) {\n const cycleCount = cycle ? cycle.count : 1;\n const loopCount = cycle ? cycle.innerLoop.count : 0;\n\n this.instanceIndex = instanceIndex;\n this.innerLoop = new InnerLoopModel(loopCount);\n this.interrupter = null;\n this.busy = new Reactive<boolean>(false);\n this.end(cycleCount);\n }\n\n start(isInitial: boolean, initiator: ProcessName): void {\n this.isInitial = isInitial;\n this.initiator = initiator;\n this.innerLoop.isInitial = isInitial;\n this.innerLoop.count = 0;\n this.interrupter = null;\n this.busy.set(true);\n }\n\n end(count: number): void {\n this.count = count;\n this.isInitial = false;\n this.busy.set(false);\n }\n\n dispose(forever?: boolean): void {\n if (forever) {\n // otherwise the value will be persisted during re-instantiation\n this.busy.dispose();\n }\n this.innerLoop.dispose();\n }\n}\n"]}
@@ -73,13 +73,15 @@ export class FetchModel {
73
73
  return !!this.count;
74
74
  }
75
75
  get hasNewItems() {
76
- return !!((this._newItemsData && this._newItemsData.length));
76
+ return !!(this._newItemsData && this._newItemsData.length);
77
77
  }
78
78
  get index() {
79
79
  return this.first.index;
80
80
  }
81
81
  get count() {
82
- return !isNaN(this.first.index) && !isNaN(this.last.index) ? this.last.index - this.first.index + 1 : 0;
82
+ return !isNaN(this.first.index) && !isNaN(this.last.index)
83
+ ? this.last.index - this.first.index + 1
84
+ : 0;
83
85
  }
84
86
  shouldCheckPreSizeExpectation(lastBufferedIndex) {
85
87
  if (this.directionPriority === Direction.backward) {
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../../src/classes/state/fetch.ts"],"names":[],"mappings":"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","sourcesContent":["import { Item } from '../item';\r\nimport { Direction } from '../../inputs/index';\r\n\r\nclass Positions {\r\n startDelta: number;\r\n before: number;\r\n relative: number;\r\n start: number;\r\n end: number;\r\n\r\n constructor() {\r\n this.reset();\r\n }\r\n\r\n reset() {\r\n this.startDelta = 0;\r\n this.before = 0;\r\n }\r\n}\r\n\r\nclass First {\r\n index: number;\r\n indexBuffer: number;\r\n position: number;\r\n\r\n constructor() {\r\n this.reset();\r\n }\r\n\r\n reset() {\r\n this.index = NaN;\r\n this.indexBuffer = NaN;\r\n this.position = NaN;\r\n }\r\n}\r\n\r\nclass Last {\r\n index: number;\r\n indexBuffer: number;\r\n\r\n constructor() {\r\n this.reset();\r\n }\r\n\r\n reset() {\r\n this.index = NaN;\r\n this.indexBuffer = NaN;\r\n }\r\n}\r\n\r\nclass FirstVisible {\r\n index: number;\r\n delta: number;\r\n\r\n constructor() {\r\n this.reset();\r\n }\r\n\r\n reset() {\r\n this.index = NaN;\r\n this.delta = 0;\r\n }\r\n}\r\n\r\nexport class FetchModel {\r\n private readonly directionPriority: Direction;\r\n private _newItemsData: unknown[] | null; // there are public setter and getter\r\n\r\n items: Item[];\r\n positions: Positions;\r\n first: First;\r\n last: Last;\r\n hasAnotherPack: boolean;\r\n callCount: number;\r\n minIndex: number;\r\n firstVisible: FirstVisible;\r\n direction: Direction | null;\r\n cancel: (() => void) | null;\r\n\r\n simulate: boolean;\r\n isCheck: boolean;\r\n doRemove: boolean;\r\n\r\n constructor(directionPriority: Direction) {\r\n this.directionPriority = directionPriority;\r\n this.callCount = 0;\r\n this.positions = new Positions();\r\n this.first = new First();\r\n this.last = new Last();\r\n this.firstVisible = new FirstVisible();\r\n this.reset();\r\n }\r\n\r\n reset(): void {\r\n this._newItemsData = null;\r\n this.items = [];\r\n this.positions.reset();\r\n this.first.reset();\r\n this.last.reset();\r\n this.firstVisible.reset();\r\n this.hasAnotherPack = false;\r\n this.direction = null;\r\n this.cancel = null;\r\n this.simulate = false;\r\n this.isCheck = false;\r\n this.doRemove = false;\r\n }\r\n\r\n get newItemsData(): unknown[] | null {\r\n return this._newItemsData;\r\n }\r\n\r\n set newItemsData(items: unknown[] | null) {\r\n this._newItemsData = items;\r\n if (items && items.length) {\r\n this.callCount++;\r\n }\r\n }\r\n\r\n get shouldFetch(): boolean {\r\n return !!this.count;\r\n }\r\n\r\n get hasNewItems(): boolean {\r\n return !!((this._newItemsData && this._newItemsData.length));\r\n }\r\n\r\n get index(): number {\r\n return this.first.index;\r\n }\r\n\r\n get count(): number {\r\n return !isNaN(this.first.index) && !isNaN(this.last.index) ? this.last.index - this.first.index + 1 : 0;\r\n }\r\n\r\n shouldCheckPreSizeExpectation(lastBufferedIndex: number): boolean {\r\n if (this.directionPriority === Direction.backward) {\r\n return false;\r\n }\r\n const lastFetched = this.items[this.items.length - 1];\r\n return lastFetched && lastFetched.$index < lastBufferedIndex;\r\n }\r\n\r\n startSimulate(items: Item[]): void {\r\n this.simulate = true;\r\n this._newItemsData = items.map(item => item.data);\r\n this.items = items;\r\n this.hasAnotherPack = false;\r\n }\r\n\r\n stopSimulate(): void {\r\n this.simulate = false;\r\n this.isCheck = false;\r\n this.doRemove = false;\r\n }\r\n\r\n fill(items: Item[], start: number): void {\r\n this.startSimulate(items);\r\n this.first.index = items[0].$index;\r\n this.last.index = items[items.length - 1].$index;\r\n this.direction = Direction.forward;\r\n this.firstVisible.index = start;\r\n this.firstVisible.delta = 0;\r\n }\r\n\r\n check(items: Item[]): void {\r\n this.startSimulate(items);\r\n this.last.index = items[0].$index;\r\n this.first.index = items[items.length - 1].$index;\r\n this.isCheck = true;\r\n }\r\n\r\n update(index: number, delta: number, items: Item[], itemsToRemove: Item[]): void {\r\n this.startSimulate(items);\r\n this.firstVisible.index = index;\r\n this.firstVisible.delta = delta;\r\n this.doRemove = itemsToRemove.length > 0;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../../src/classes/state/fetch.ts"],"names":[],"mappings":"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","sourcesContent":["import { Item } from '../item';\nimport { Direction } from '../../inputs/index';\n\nclass Positions {\n startDelta: number;\n before: number;\n relative: number;\n start: number;\n end: number;\n\n constructor() {\n this.reset();\n }\n\n reset() {\n this.startDelta = 0;\n this.before = 0;\n }\n}\n\nclass First {\n index: number;\n indexBuffer: number;\n position: number;\n\n constructor() {\n this.reset();\n }\n\n reset() {\n this.index = NaN;\n this.indexBuffer = NaN;\n this.position = NaN;\n }\n}\n\nclass Last {\n index: number;\n indexBuffer: number;\n\n constructor() {\n this.reset();\n }\n\n reset() {\n this.index = NaN;\n this.indexBuffer = NaN;\n }\n}\n\nclass FirstVisible {\n index: number;\n delta: number;\n\n constructor() {\n this.reset();\n }\n\n reset() {\n this.index = NaN;\n this.delta = 0;\n }\n}\n\nexport class FetchModel {\n private readonly directionPriority: Direction;\n private _newItemsData: unknown[] | null; // there are public setter and getter\n\n items: Item[];\n positions: Positions;\n first: First;\n last: Last;\n hasAnotherPack: boolean;\n callCount: number;\n minIndex: number;\n firstVisible: FirstVisible;\n direction: Direction | null;\n cancel: (() => void) | null;\n\n simulate: boolean;\n isCheck: boolean;\n doRemove: boolean;\n\n constructor(directionPriority: Direction) {\n this.directionPriority = directionPriority;\n this.callCount = 0;\n this.positions = new Positions();\n this.first = new First();\n this.last = new Last();\n this.firstVisible = new FirstVisible();\n this.reset();\n }\n\n reset(): void {\n this._newItemsData = null;\n this.items = [];\n this.positions.reset();\n this.first.reset();\n this.last.reset();\n this.firstVisible.reset();\n this.hasAnotherPack = false;\n this.direction = null;\n this.cancel = null;\n this.simulate = false;\n this.isCheck = false;\n this.doRemove = false;\n }\n\n get newItemsData(): unknown[] | null {\n return this._newItemsData;\n }\n\n set newItemsData(items: unknown[] | null) {\n this._newItemsData = items;\n if (items && items.length) {\n this.callCount++;\n }\n }\n\n get shouldFetch(): boolean {\n return !!this.count;\n }\n\n get hasNewItems(): boolean {\n return !!(this._newItemsData && this._newItemsData.length);\n }\n\n get index(): number {\n return this.first.index;\n }\n\n get count(): number {\n return !isNaN(this.first.index) && !isNaN(this.last.index)\n ? this.last.index - this.first.index + 1\n : 0;\n }\n\n shouldCheckPreSizeExpectation(lastBufferedIndex: number): boolean {\n if (this.directionPriority === Direction.backward) {\n return false;\n }\n const lastFetched = this.items[this.items.length - 1];\n return lastFetched && lastFetched.$index < lastBufferedIndex;\n }\n\n startSimulate(items: Item[]): void {\n this.simulate = true;\n this._newItemsData = items.map(item => item.data);\n this.items = items;\n this.hasAnotherPack = false;\n }\n\n stopSimulate(): void {\n this.simulate = false;\n this.isCheck = false;\n this.doRemove = false;\n }\n\n fill(items: Item[], start: number): void {\n this.startSimulate(items);\n this.first.index = items[0].$index;\n this.last.index = items[items.length - 1].$index;\n this.direction = Direction.forward;\n this.firstVisible.index = start;\n this.firstVisible.delta = 0;\n }\n\n check(items: Item[]): void {\n this.startSimulate(items);\n this.last.index = items[0].$index;\n this.first.index = items[items.length - 1].$index;\n this.isCheck = true;\n }\n\n update(index: number, delta: number, items: Item[], itemsToRemove: Item[]): void {\n this.startSimulate(items);\n this.firstVisible.index = index;\n this.firstVisible.delta = delta;\n this.doRemove = itemsToRemove.length > 0;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../../../src/classes/state/render.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAW;IAMtB,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,SAAS,CAAC;IAC5C,CAAC;IAED;QACE,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,KAAK;QACH,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;CACF","sourcesContent":["export class RenderModel {\r\n sizeBefore: number;\r\n sizeAfter: number;\r\n positionBefore: number;\r\n cancel: (() => void) | null;\r\n\r\n get noSize(): boolean {\r\n return this.sizeBefore === this.sizeAfter;\r\n }\r\n\r\n constructor() {\r\n this.reset();\r\n }\r\n\r\n reset(): void {\r\n this.sizeBefore = 0;\r\n this.sizeAfter = 0;\r\n this.positionBefore = 0;\r\n this.cancel = null;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../../../src/classes/state/render.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAW;IAMtB,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,SAAS,CAAC;IAC5C,CAAC;IAED;QACE,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,KAAK;QACH,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;CACF","sourcesContent":["export class RenderModel {\n sizeBefore: number;\n sizeAfter: number;\n positionBefore: number;\n cancel: (() => void) | null;\n\n get noSize(): boolean {\n return this.sizeBefore === this.sizeAfter;\n }\n\n constructor() {\n this.reset();\n }\n\n reset(): void {\n this.sizeBefore = 0;\n this.sizeAfter = 0;\n this.positionBefore = 0;\n this.cancel = null;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../../../src/classes/state/scroll.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,WAAW;IAatB;QACE,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;QACD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,kBAAkB,CAAC,QAAgB;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACvC,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,QAAQ,CAAC;IACxF,CAAC;CACF","sourcesContent":["import { ScrollEventData as IScrollEventData } from '../../interfaces/index';\r\n\r\nexport class ScrollModel {\r\n previous: IScrollEventData | null;\r\n current: IScrollEventData | null;\r\n\r\n scrollTimer: ReturnType<typeof setTimeout> | null;\r\n\r\n syntheticPosition: number | null;\r\n syntheticFulfill: boolean;\r\n cancelAnimation: (() => void) | null;\r\n positionBeforeAsync: number | null;\r\n positionBeforeAdjust: number | null;\r\n positionAfterAdjust: number | null;\r\n\r\n constructor() {\r\n this.reset();\r\n }\r\n\r\n reset(): void {\r\n this.previous = null;\r\n this.current = null;\r\n this.syntheticPosition = null;\r\n this.syntheticFulfill = false;\r\n this.positionBeforeAsync = null;\r\n this.positionBeforeAdjust = null;\r\n this.positionAfterAdjust = null;\r\n this.stop();\r\n }\r\n\r\n stop(): void {\r\n if (this.scrollTimer) {\r\n clearTimeout(this.scrollTimer);\r\n this.scrollTimer = null;\r\n }\r\n if (this.cancelAnimation) {\r\n this.cancelAnimation();\r\n this.cancelAnimation = null;\r\n }\r\n }\r\n\r\n hasPositionChanged(position: number): boolean {\r\n const before = this.positionBeforeAdjust;\r\n const after = this.positionAfterAdjust;\r\n return before === null || before !== position || after === null || after !== position;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../../../src/classes/state/scroll.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,WAAW;IAatB;QACE,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;QACD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,kBAAkB,CAAC,QAAgB;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACvC,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,QAAQ,CAAC;IACxF,CAAC;CACF","sourcesContent":["import { ScrollEventData as IScrollEventData } from '../../interfaces/index';\n\nexport class ScrollModel {\n previous: IScrollEventData | null;\n current: IScrollEventData | null;\n\n scrollTimer: ReturnType<typeof setTimeout> | null;\n\n syntheticPosition: number | null;\n syntheticFulfill: boolean;\n cancelAnimation: (() => void) | null;\n positionBeforeAsync: number | null;\n positionBeforeAdjust: number | null;\n positionAfterAdjust: number | null;\n\n constructor() {\n this.reset();\n }\n\n reset(): void {\n this.previous = null;\n this.current = null;\n this.syntheticPosition = null;\n this.syntheticFulfill = false;\n this.positionBeforeAsync = null;\n this.positionBeforeAdjust = null;\n this.positionAfterAdjust = null;\n this.stop();\n }\n\n stop(): void {\n if (this.scrollTimer) {\n clearTimeout(this.scrollTimer);\n this.scrollTimer = null;\n }\n if (this.cancelAnimation) {\n this.cancelAnimation();\n this.cancelAnimation = null;\n }\n }\n\n hasPositionChanged(position: number): boolean {\n const before = this.positionBeforeAdjust;\n const after = this.positionAfterAdjust;\n return before === null || before !== position || after === null || after !== position;\n }\n}\n"]}
@@ -34,10 +34,12 @@ export class State {
34
34
  }
35
35
  clip.reset(clip.force);
36
36
  render.reset();
37
- return Object.assign({}, (cycle.innerLoop.first ? {
38
- process: cycle.initiator,
39
- doRender: fetch.simulate && fetch.items.length > 0
40
- } : {}));
37
+ return Object.assign({}, (cycle.innerLoop.first
38
+ ? {
39
+ process: cycle.initiator,
40
+ doRender: fetch.simulate && fetch.items.length > 0
41
+ }
42
+ : {}));
41
43
  }
42
44
  endInnerLoop() {
43
45
  const { fetch, clip, render, cycle } = this;
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/classes/state.ts"],"names":[],"mappings":"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","sourcesContent":["import { Settings } from './settings';\r\nimport { Reactive } from './reactive';\r\nimport { WorkflowCycleModel } from './state/cycle';\r\nimport { FetchModel } from './state/fetch';\r\nimport { ClipModel } from './state/clip';\r\nimport { RenderModel } from './state/render';\r\nimport { ScrollModel } from './state/scroll';\r\nimport { State as IState, IPackages, ProcessName } from '../interfaces/index';\r\n\r\nexport class State implements IState {\r\n\r\n readonly packageInfo: IPackages;\r\n private settings: Settings;\r\n initTime: number;\r\n paused: Reactive<boolean>;\r\n\r\n cycle: WorkflowCycleModel;\r\n fetch: FetchModel;\r\n clip: ClipModel;\r\n render: RenderModel;\r\n scroll: ScrollModel;\r\n\r\n get time(): number {\r\n return Number(new Date()) - this.initTime;\r\n }\r\n\r\n constructor(packageInfo: IPackages, settings: Settings, state?: IState) {\r\n this.packageInfo = packageInfo;\r\n this.settings = settings;\r\n this.initTime = Number(new Date());\r\n this.paused = new Reactive(false);\r\n\r\n this.cycle = new WorkflowCycleModel(this.settings.instanceIndex, state ? state.cycle : void 0);\r\n this.fetch = new FetchModel(settings.directionPriority);\r\n this.clip = new ClipModel();\r\n this.render = new RenderModel();\r\n this.scroll = new ScrollModel();\r\n }\r\n\r\n startWorkflowCycle(isInitial: boolean, initiator: ProcessName): void {\r\n this.cycle.start(isInitial, initiator);\r\n }\r\n\r\n endWorkflowCycle(count: number): void {\r\n this.cycle.end(count);\r\n }\r\n\r\n startInnerLoop(): { process?: ProcessName, doRender?: boolean } {\r\n const { cycle, scroll: scroll, fetch, render, clip } = this;\r\n\r\n cycle.innerLoop.start();\r\n scroll.positionBeforeAsync = null;\r\n\r\n if (!fetch.simulate) {\r\n fetch.reset();\r\n }\r\n clip.reset(clip.force);\r\n render.reset();\r\n\r\n return {\r\n ...(cycle.innerLoop.first ? {\r\n process: cycle.initiator,\r\n doRender: fetch.simulate && fetch.items.length > 0\r\n } : {})\r\n };\r\n }\r\n\r\n endInnerLoop(): void {\r\n const { fetch, clip, render, cycle } = this;\r\n fetch.stopSimulate();\r\n clip.reset(true);\r\n if (fetch.cancel) {\r\n fetch.cancel();\r\n fetch.cancel = null;\r\n }\r\n if (render.cancel) {\r\n render.cancel();\r\n render.cancel = null;\r\n }\r\n cycle.innerLoop.done();\r\n }\r\n\r\n dispose(): void {\r\n this.scroll.stop();\r\n this.cycle.dispose();\r\n this.paused.dispose();\r\n this.endInnerLoop();\r\n }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/classes/state.ts"],"names":[],"mappings":"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","sourcesContent":["import { Settings } from './settings';\nimport { Reactive } from './reactive';\nimport { WorkflowCycleModel } from './state/cycle';\nimport { FetchModel } from './state/fetch';\nimport { ClipModel } from './state/clip';\nimport { RenderModel } from './state/render';\nimport { ScrollModel } from './state/scroll';\nimport { State as IState, IPackages, ProcessName } from '../interfaces/index';\n\nexport class State implements IState {\n readonly packageInfo: IPackages;\n private settings: Settings;\n initTime: number;\n paused: Reactive<boolean>;\n\n cycle: WorkflowCycleModel;\n fetch: FetchModel;\n clip: ClipModel;\n render: RenderModel;\n scroll: ScrollModel;\n\n get time(): number {\n return Number(new Date()) - this.initTime;\n }\n\n constructor(packageInfo: IPackages, settings: Settings, state?: IState) {\n this.packageInfo = packageInfo;\n this.settings = settings;\n this.initTime = Number(new Date());\n this.paused = new Reactive(false);\n\n this.cycle = new WorkflowCycleModel(this.settings.instanceIndex, state ? state.cycle : void 0);\n this.fetch = new FetchModel(settings.directionPriority);\n this.clip = new ClipModel();\n this.render = new RenderModel();\n this.scroll = new ScrollModel();\n }\n\n startWorkflowCycle(isInitial: boolean, initiator: ProcessName): void {\n this.cycle.start(isInitial, initiator);\n }\n\n endWorkflowCycle(count: number): void {\n this.cycle.end(count);\n }\n\n startInnerLoop(): { process?: ProcessName; doRender?: boolean } {\n const { cycle, scroll: scroll, fetch, render, clip } = this;\n\n cycle.innerLoop.start();\n scroll.positionBeforeAsync = null;\n\n if (!fetch.simulate) {\n fetch.reset();\n }\n clip.reset(clip.force);\n render.reset();\n\n return {\n ...(cycle.innerLoop.first\n ? {\n process: cycle.initiator,\n doRender: fetch.simulate && fetch.items.length > 0\n }\n : {})\n };\n }\n\n endInnerLoop(): void {\n const { fetch, clip, render, cycle } = this;\n fetch.stopSimulate();\n clip.reset(true);\n if (fetch.cancel) {\n fetch.cancel();\n fetch.cancel = null;\n }\n if (render.cancel) {\n render.cancel();\n render.cancel = null;\n }\n cycle.innerLoop.done();\n }\n\n dispose(): void {\n this.scroll.stop();\n this.cycle.dispose();\n this.paused.dispose();\n this.endInnerLoop();\n }\n}\n"]}
@@ -23,7 +23,9 @@ export class Viewport {
23
23
  this.routines.setScrollPosition(value);
24
24
  const position = this.scrollPosition;
25
25
  this.logger.log(() => [
26
- 'setting scroll position at', position, ...(position !== value ? [`(${value})`] : [])
26
+ 'setting scroll position at',
27
+ position,
28
+ ...(position !== value ? [`(${value})`] : [])
27
29
  ]);
28
30
  return position;
29
31
  }
@@ -62,7 +64,7 @@ export class Viewport {
62
64
  for (let i = bwd ? 0 : items.length - 1; bwd ? i <= items.length - 1 : i >= 0; i += bwd ? 1 : -1) {
63
65
  const itemEdge = this.routines.getEdge(items[i].element, opposite);
64
66
  diff = itemEdge - viewportEdge;
65
- if (bwd && diff > 0 || !bwd && diff < 0) {
67
+ if ((bwd && diff > 0) || (!bwd && diff < 0)) {
66
68
  item = items[i];
67
69
  break;
68
70
  }
@@ -1 +1 @@
1
- {"version":3,"file":"viewport.js","sourceRoot":"","sources":["../../../src/classes/viewport.ts"],"names":[],"mappings":"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","sourcesContent":["import { Paddings } from './paddings';\r\nimport { Settings } from './settings';\r\nimport { Routines } from './domRoutines';\r\nimport { Item } from './item';\r\nimport { State } from './state';\r\nimport { Logger } from './logger';\r\nimport { Direction } from '../inputs/index';\r\n\r\nexport class Viewport {\r\n\r\n offset: number;\r\n paddings: Paddings;\r\n\r\n readonly settings: Settings;\r\n readonly routines: Routines;\r\n readonly state: State;\r\n readonly logger: Logger;\r\n\r\n constructor(settings: Settings, routines: Routines, state: State, logger: Logger) {\r\n this.settings = settings;\r\n this.routines = routines;\r\n this.state = state;\r\n this.logger = logger;\r\n this.paddings = new Paddings(this.routines, settings);\r\n }\r\n\r\n reset(startIndex: number): void {\r\n this.setOffset();\r\n this.paddings.reset(this.getSize(), startIndex, this.offset);\r\n this.scrollPosition = this.paddings.backward.size || 0;\r\n this.state.scroll.reset();\r\n }\r\n\r\n setPosition(value: number): number {\r\n const oldPosition = this.scrollPosition;\r\n if (oldPosition === value) {\r\n this.logger.log(() => ['setting scroll position at', value, '[cancelled]']);\r\n return value;\r\n }\r\n this.routines.setScrollPosition(value);\r\n const position = this.scrollPosition;\r\n this.logger.log(() => [\r\n 'setting scroll position at', position, ...(position !== value ? [`(${value})`] : [])\r\n ]);\r\n return position;\r\n }\r\n\r\n get scrollPosition(): number {\r\n return this.routines.getScrollPosition();\r\n }\r\n\r\n set scrollPosition(value: number) {\r\n this.setPosition(value);\r\n }\r\n\r\n getSize(): number {\r\n return this.routines.getViewportSize();\r\n }\r\n\r\n getScrollableSize(): number {\r\n return this.routines.getScrollerSize();\r\n }\r\n\r\n getMaxScrollPosition(): number {\r\n return this.getScrollableSize() - this.getSize();\r\n }\r\n\r\n getBufferPadding(): number {\r\n return this.getSize() * this.settings.padding;\r\n }\r\n\r\n getEdge(direction: Direction): number {\r\n return this.routines.getViewportEdge(direction);\r\n }\r\n\r\n setOffset(): void {\r\n this.offset = this.routines.getOffset();\r\n }\r\n\r\n findItemElementById(id: string): HTMLElement | null {\r\n return this.routines.findItemElement(id);\r\n }\r\n\r\n getEdgeVisibleItem(items: Item[], direction: Direction): { item?: Item, index: number, diff: number } {\r\n const bwd = direction === Direction.backward;\r\n const opposite = bwd ? Direction.forward : Direction.backward;\r\n const viewportEdge = this.getEdge(direction);\r\n let item, diff = 0;\r\n for (\r\n let i = bwd ? 0 : items.length - 1;\r\n bwd ? i <= items.length - 1 : i >= 0;\r\n i += bwd ? 1 : -1\r\n ) {\r\n const itemEdge = this.routines.getEdge(items[i].element, opposite);\r\n diff = itemEdge - viewportEdge;\r\n if (bwd && diff > 0 || !bwd && diff < 0) {\r\n item = items[i];\r\n break;\r\n }\r\n }\r\n return { item, index: item ? item.$index : NaN, diff };\r\n }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"viewport.js","sourceRoot":"","sources":["../../../src/classes/viewport.ts"],"names":[],"mappings":"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","sourcesContent":["import { Paddings } from './paddings';\nimport { Settings } from './settings';\nimport { Routines } from './domRoutines';\nimport { Item } from './item';\nimport { State } from './state';\nimport { Logger } from './logger';\nimport { Direction } from '../inputs/index';\n\nexport class Viewport {\n offset: number;\n paddings: Paddings;\n\n readonly settings: Settings;\n readonly routines: Routines;\n readonly state: State;\n readonly logger: Logger;\n\n constructor(settings: Settings, routines: Routines, state: State, logger: Logger) {\n this.settings = settings;\n this.routines = routines;\n this.state = state;\n this.logger = logger;\n this.paddings = new Paddings(this.routines, settings);\n }\n\n reset(startIndex: number): void {\n this.setOffset();\n this.paddings.reset(this.getSize(), startIndex, this.offset);\n this.scrollPosition = this.paddings.backward.size || 0;\n this.state.scroll.reset();\n }\n\n setPosition(value: number): number {\n const oldPosition = this.scrollPosition;\n if (oldPosition === value) {\n this.logger.log(() => ['setting scroll position at', value, '[cancelled]']);\n return value;\n }\n this.routines.setScrollPosition(value);\n const position = this.scrollPosition;\n this.logger.log(() => [\n 'setting scroll position at',\n position,\n ...(position !== value ? [`(${value})`] : [])\n ]);\n return position;\n }\n\n get scrollPosition(): number {\n return this.routines.getScrollPosition();\n }\n\n set scrollPosition(value: number) {\n this.setPosition(value);\n }\n\n getSize(): number {\n return this.routines.getViewportSize();\n }\n\n getScrollableSize(): number {\n return this.routines.getScrollerSize();\n }\n\n getMaxScrollPosition(): number {\n return this.getScrollableSize() - this.getSize();\n }\n\n getBufferPadding(): number {\n return this.getSize() * this.settings.padding;\n }\n\n getEdge(direction: Direction): number {\n return this.routines.getViewportEdge(direction);\n }\n\n setOffset(): void {\n this.offset = this.routines.getOffset();\n }\n\n findItemElementById(id: string): HTMLElement | null {\n return this.routines.findItemElement(id);\n }\n\n getEdgeVisibleItem(\n items: Item[],\n direction: Direction\n ): { item?: Item; index: number; diff: number } {\n const bwd = direction === Direction.backward;\n const opposite = bwd ? Direction.forward : Direction.backward;\n const viewportEdge = this.getEdge(direction);\n let item,\n diff = 0;\n for (\n let i = bwd ? 0 : items.length - 1;\n bwd ? i <= items.length - 1 : i >= 0;\n i += bwd ? 1 : -1\n ) {\n const itemEdge = this.routines.getEdge(items[i].element, opposite);\n diff = itemEdge - viewportEdge;\n if ((bwd && diff > 0) || (!bwd && diff < 0)) {\n item = items[i];\n break;\n }\n }\n return { item, index: item ? item.$index : NaN, diff };\n }\n}\n"]}