vscroll 1.5.3 → 1.5.4

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 (335) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +283 -273
  3. package/dist/bundles/vscroll.esm5.js +5553 -5525
  4. package/dist/bundles/vscroll.esm5.js.map +1 -1
  5. package/dist/bundles/vscroll.esm5.min.js +2 -2
  6. package/dist/bundles/vscroll.esm5.min.js.map +1 -1
  7. package/dist/bundles/vscroll.esm6.js +5040 -5015
  8. package/dist/bundles/vscroll.esm6.js.map +1 -1
  9. package/dist/bundles/vscroll.esm6.min.js +2 -2
  10. package/dist/bundles/vscroll.esm6.min.js.map +1 -1
  11. package/dist/bundles/vscroll.umd.js +5554 -5526
  12. package/dist/bundles/vscroll.umd.js.map +1 -1
  13. package/dist/bundles/vscroll.umd.min.js +2 -2
  14. package/dist/bundles/vscroll.umd.min.js.map +1 -1
  15. package/dist/esm2015/classes/adapter/context.js +43 -43
  16. package/dist/esm2015/classes/adapter/context.js.map +1 -1
  17. package/dist/esm2015/classes/adapter/props.js +268 -268
  18. package/dist/esm2015/classes/adapter/props.js.map +1 -1
  19. package/dist/esm2015/classes/adapter/wanted.js +28 -28
  20. package/dist/esm2015/classes/adapter/wanted.js.map +1 -1
  21. package/dist/esm2015/classes/adapter.js +455 -442
  22. package/dist/esm2015/classes/adapter.js.map +1 -1
  23. package/dist/esm2015/classes/buffer/cache.js +246 -246
  24. package/dist/esm2015/classes/buffer/cache.js.map +1 -1
  25. package/dist/esm2015/classes/buffer/checkCall.js +48 -48
  26. package/dist/esm2015/classes/buffer/checkCall.js.map +1 -1
  27. package/dist/esm2015/classes/buffer/defaultSize.js +127 -127
  28. package/dist/esm2015/classes/buffer/defaultSize.js.map +1 -1
  29. package/dist/esm2015/classes/buffer.js +342 -342
  30. package/dist/esm2015/classes/buffer.js.map +1 -1
  31. package/dist/esm2015/classes/datasource.js +28 -28
  32. package/dist/esm2015/classes/domRoutines.js +166 -166
  33. package/dist/esm2015/classes/domRoutines.js.map +1 -1
  34. package/dist/esm2015/classes/item.js +61 -61
  35. package/dist/esm2015/classes/item.js.map +1 -1
  36. package/dist/esm2015/classes/logger.js +186 -186
  37. package/dist/esm2015/classes/logger.js.map +1 -1
  38. package/dist/esm2015/classes/paddings.js +72 -72
  39. package/dist/esm2015/classes/reactive.js +54 -54
  40. package/dist/esm2015/classes/reactive.js.map +1 -1
  41. package/dist/esm2015/classes/settings.js +39 -39
  42. package/dist/esm2015/classes/settings.js.map +1 -1
  43. package/dist/esm2015/classes/state/clip.js +16 -16
  44. package/dist/esm2015/classes/state/clip.js.map +1 -1
  45. package/dist/esm2015/classes/state/cycle.js +60 -60
  46. package/dist/esm2015/classes/state/cycle.js.map +1 -1
  47. package/dist/esm2015/classes/state/fetch.js +122 -122
  48. package/dist/esm2015/classes/state/fetch.js.map +1 -1
  49. package/dist/esm2015/classes/state/render.js +14 -14
  50. package/dist/esm2015/classes/state/render.js.map +1 -1
  51. package/dist/esm2015/classes/state/scroll.js +30 -30
  52. package/dist/esm2015/classes/state/scroll.js.map +1 -1
  53. package/dist/esm2015/classes/state.js +59 -59
  54. package/dist/esm2015/classes/viewport.js +72 -72
  55. package/dist/esm2015/classes/viewport.js.map +1 -1
  56. package/dist/esm2015/index.js +8 -8
  57. package/dist/esm2015/index.js.map +1 -1
  58. package/dist/esm2015/inputs/adapter.js +230 -230
  59. package/dist/esm2015/inputs/adapter.js.map +1 -1
  60. package/dist/esm2015/inputs/common.js +11 -11
  61. package/dist/esm2015/inputs/common.js.map +1 -1
  62. package/dist/esm2015/inputs/datasource.js +20 -20
  63. package/dist/esm2015/inputs/datasource.js.map +1 -1
  64. package/dist/esm2015/inputs/index.js +6 -6
  65. package/dist/esm2015/inputs/index.js.map +1 -1
  66. package/dist/esm2015/inputs/settings.js +146 -146
  67. package/dist/esm2015/inputs/settings.js.map +1 -1
  68. package/dist/esm2015/inputs/validation.js +374 -374
  69. package/dist/esm2015/inputs/validation.js.map +1 -1
  70. package/dist/esm2015/interfaces/adapter.js +1 -1
  71. package/dist/esm2015/interfaces/datasource.js +1 -1
  72. package/dist/esm2015/interfaces/datasource.js.map +1 -1
  73. package/dist/esm2015/interfaces/index.js +1 -1
  74. package/dist/esm2015/interfaces/index.js.map +1 -1
  75. package/dist/esm2015/interfaces/item.js +1 -1
  76. package/dist/esm2015/interfaces/item.js.map +1 -1
  77. package/dist/esm2015/interfaces/process.js +1 -1
  78. package/dist/esm2015/interfaces/routines.js +1 -1
  79. package/dist/esm2015/interfaces/routines.js.map +1 -1
  80. package/dist/esm2015/interfaces/settings.js +1 -1
  81. package/dist/esm2015/interfaces/state.js +1 -1
  82. package/dist/esm2015/interfaces/validation.js +1 -1
  83. package/dist/esm2015/interfaces/validation.js.map +1 -1
  84. package/dist/esm2015/interfaces/workflow.js +1 -1
  85. package/dist/esm2015/interfaces/workflow.js.map +1 -1
  86. package/dist/esm2015/processes/adapter/append.js +35 -35
  87. package/dist/esm2015/processes/adapter/append.js.map +1 -1
  88. package/dist/esm2015/processes/adapter/check.js +32 -32
  89. package/dist/esm2015/processes/adapter/check.js.map +1 -1
  90. package/dist/esm2015/processes/adapter/clip.js +12 -12
  91. package/dist/esm2015/processes/adapter/clip.js.map +1 -1
  92. package/dist/esm2015/processes/adapter/fix.js +77 -77
  93. package/dist/esm2015/processes/adapter/fix.js.map +1 -1
  94. package/dist/esm2015/processes/adapter/insert.js +73 -73
  95. package/dist/esm2015/processes/adapter/insert.js.map +1 -1
  96. package/dist/esm2015/processes/adapter/reload.js +19 -20
  97. package/dist/esm2015/processes/adapter/reload.js.map +1 -1
  98. package/dist/esm2015/processes/adapter/remove.js +102 -102
  99. package/dist/esm2015/processes/adapter/remove.js.map +1 -1
  100. package/dist/esm2015/processes/adapter/replace.js +39 -39
  101. package/dist/esm2015/processes/adapter/replace.js.map +1 -1
  102. package/dist/esm2015/processes/adapter/reset.js +35 -35
  103. package/dist/esm2015/processes/adapter/reset.js.map +1 -1
  104. package/dist/esm2015/processes/adapter/update.js +43 -43
  105. package/dist/esm2015/processes/adapter/update.js.map +1 -1
  106. package/dist/esm2015/processes/adjust.js +141 -141
  107. package/dist/esm2015/processes/clip.js +49 -49
  108. package/dist/esm2015/processes/end.js +52 -52
  109. package/dist/esm2015/processes/end.js.map +1 -1
  110. package/dist/esm2015/processes/fetch.js +90 -90
  111. package/dist/esm2015/processes/fetch.js.map +1 -1
  112. package/dist/esm2015/processes/index.js +23 -23
  113. package/dist/esm2015/processes/init.js +14 -14
  114. package/dist/esm2015/processes/init.js.map +1 -1
  115. package/dist/esm2015/processes/misc/base.js +30 -30
  116. package/dist/esm2015/processes/misc/base.js.map +1 -1
  117. package/dist/esm2015/processes/misc/enums.js +35 -35
  118. package/dist/esm2015/processes/misc/enums.js.map +1 -1
  119. package/dist/esm2015/processes/misc/index.js +2 -2
  120. package/dist/esm2015/processes/misc/index.js.map +1 -1
  121. package/dist/esm2015/processes/postFetch.js +64 -64
  122. package/dist/esm2015/processes/postFetch.js.map +1 -1
  123. package/dist/esm2015/processes/preClip.js +85 -85
  124. package/dist/esm2015/processes/preClip.js.map +1 -1
  125. package/dist/esm2015/processes/preFetch.js +240 -240
  126. package/dist/esm2015/processes/preFetch.js.map +1 -1
  127. package/dist/esm2015/processes/render.js +54 -54
  128. package/dist/esm2015/processes/render.js.map +1 -1
  129. package/dist/esm2015/processes/scroll.js +97 -97
  130. package/dist/esm2015/processes/scroll.js.map +1 -1
  131. package/dist/esm2015/processes/start.js +11 -11
  132. package/dist/esm2015/processes/start.js.map +1 -1
  133. package/dist/esm2015/scroller.js +75 -69
  134. package/dist/esm2015/scroller.js.map +1 -1
  135. package/dist/esm2015/version.js +4 -4
  136. package/dist/esm2015/version.js.map +1 -1
  137. package/dist/esm2015/workflow-transducer.js +210 -210
  138. package/dist/esm2015/workflow-transducer.js.map +1 -1
  139. package/dist/esm2015/workflow.js +158 -151
  140. package/dist/esm2015/workflow.js.map +1 -1
  141. package/dist/esm5/classes/adapter/context.js +50 -50
  142. package/dist/esm5/classes/adapter/context.js.map +1 -1
  143. package/dist/esm5/classes/adapter/props.js +268 -268
  144. package/dist/esm5/classes/adapter/props.js.map +1 -1
  145. package/dist/esm5/classes/adapter/wanted.js +29 -29
  146. package/dist/esm5/classes/adapter/wanted.js.map +1 -1
  147. package/dist/esm5/classes/adapter.js +504 -490
  148. package/dist/esm5/classes/adapter.js.map +1 -1
  149. package/dist/esm5/classes/buffer/cache.js +260 -260
  150. package/dist/esm5/classes/buffer/cache.js.map +1 -1
  151. package/dist/esm5/classes/buffer/checkCall.js +56 -56
  152. package/dist/esm5/classes/buffer/checkCall.js.map +1 -1
  153. package/dist/esm5/classes/buffer/defaultSize.js +145 -145
  154. package/dist/esm5/classes/buffer/defaultSize.js.map +1 -1
  155. package/dist/esm5/classes/buffer.js +409 -409
  156. package/dist/esm5/classes/buffer.js.map +1 -1
  157. package/dist/esm5/classes/datasource.js +37 -37
  158. package/dist/esm5/classes/domRoutines.js +182 -182
  159. package/dist/esm5/classes/domRoutines.js.map +1 -1
  160. package/dist/esm5/classes/item.js +76 -76
  161. package/dist/esm5/classes/item.js.map +1 -1
  162. package/dist/esm5/classes/logger.js +210 -210
  163. package/dist/esm5/classes/logger.js.map +1 -1
  164. package/dist/esm5/classes/paddings.js +80 -80
  165. package/dist/esm5/classes/reactive.js +69 -69
  166. package/dist/esm5/classes/reactive.js.map +1 -1
  167. package/dist/esm5/classes/settings.js +47 -47
  168. package/dist/esm5/classes/settings.js.map +1 -1
  169. package/dist/esm5/classes/state/clip.js +22 -22
  170. package/dist/esm5/classes/state/clip.js.map +1 -1
  171. package/dist/esm5/classes/state/cycle.js +75 -75
  172. package/dist/esm5/classes/state/cycle.js.map +1 -1
  173. package/dist/esm5/classes/state/fetch.js +148 -148
  174. package/dist/esm5/classes/state/fetch.js.map +1 -1
  175. package/dist/esm5/classes/state/render.js +20 -20
  176. package/dist/esm5/classes/state/render.js.map +1 -1
  177. package/dist/esm5/classes/state/scroll.js +32 -32
  178. package/dist/esm5/classes/state/scroll.js.map +1 -1
  179. package/dist/esm5/classes/state.js +66 -66
  180. package/dist/esm5/classes/viewport.js +79 -79
  181. package/dist/esm5/classes/viewport.js.map +1 -1
  182. package/dist/esm5/index.js +8 -8
  183. package/dist/esm5/index.js.map +1 -1
  184. package/dist/esm5/inputs/adapter.js +231 -231
  185. package/dist/esm5/inputs/adapter.js.map +1 -1
  186. package/dist/esm5/inputs/common.js +11 -11
  187. package/dist/esm5/inputs/common.js.map +1 -1
  188. package/dist/esm5/inputs/datasource.js +21 -21
  189. package/dist/esm5/inputs/datasource.js.map +1 -1
  190. package/dist/esm5/inputs/index.js +6 -6
  191. package/dist/esm5/inputs/index.js.map +1 -1
  192. package/dist/esm5/inputs/settings.js +147 -147
  193. package/dist/esm5/inputs/settings.js.map +1 -1
  194. package/dist/esm5/inputs/validation.js +396 -396
  195. package/dist/esm5/inputs/validation.js.map +1 -1
  196. package/dist/esm5/interfaces/adapter.js +1 -1
  197. package/dist/esm5/interfaces/datasource.js +1 -1
  198. package/dist/esm5/interfaces/datasource.js.map +1 -1
  199. package/dist/esm5/interfaces/index.js +1 -1
  200. package/dist/esm5/interfaces/index.js.map +1 -1
  201. package/dist/esm5/interfaces/item.js +1 -1
  202. package/dist/esm5/interfaces/item.js.map +1 -1
  203. package/dist/esm5/interfaces/process.js +1 -1
  204. package/dist/esm5/interfaces/routines.js +1 -1
  205. package/dist/esm5/interfaces/routines.js.map +1 -1
  206. package/dist/esm5/interfaces/settings.js +1 -1
  207. package/dist/esm5/interfaces/state.js +1 -1
  208. package/dist/esm5/interfaces/validation.js +1 -1
  209. package/dist/esm5/interfaces/validation.js.map +1 -1
  210. package/dist/esm5/interfaces/workflow.js +1 -1
  211. package/dist/esm5/interfaces/workflow.js.map +1 -1
  212. package/dist/esm5/processes/adapter/append.js +43 -43
  213. package/dist/esm5/processes/adapter/append.js.map +1 -1
  214. package/dist/esm5/processes/adapter/check.js +39 -39
  215. package/dist/esm5/processes/adapter/check.js.map +1 -1
  216. package/dist/esm5/processes/adapter/clip.js +19 -19
  217. package/dist/esm5/processes/adapter/clip.js.map +1 -1
  218. package/dist/esm5/processes/adapter/fix.js +89 -89
  219. package/dist/esm5/processes/adapter/fix.js.map +1 -1
  220. package/dist/esm5/processes/adapter/insert.js +81 -81
  221. package/dist/esm5/processes/adapter/insert.js.map +1 -1
  222. package/dist/esm5/processes/adapter/reload.js +26 -27
  223. package/dist/esm5/processes/adapter/reload.js.map +1 -1
  224. package/dist/esm5/processes/adapter/remove.js +115 -115
  225. package/dist/esm5/processes/adapter/remove.js.map +1 -1
  226. package/dist/esm5/processes/adapter/replace.js +47 -47
  227. package/dist/esm5/processes/adapter/replace.js.map +1 -1
  228. package/dist/esm5/processes/adapter/reset.js +42 -42
  229. package/dist/esm5/processes/adapter/reset.js.map +1 -1
  230. package/dist/esm5/processes/adapter/update.js +59 -59
  231. package/dist/esm5/processes/adapter/update.js.map +1 -1
  232. package/dist/esm5/processes/adjust.js +152 -152
  233. package/dist/esm5/processes/clip.js +60 -60
  234. package/dist/esm5/processes/end.js +63 -63
  235. package/dist/esm5/processes/end.js.map +1 -1
  236. package/dist/esm5/processes/fetch.js +101 -101
  237. package/dist/esm5/processes/fetch.js.map +1 -1
  238. package/dist/esm5/processes/index.js +23 -23
  239. package/dist/esm5/processes/init.js +21 -21
  240. package/dist/esm5/processes/init.js.map +1 -1
  241. package/dist/esm5/processes/misc/base.js +44 -44
  242. package/dist/esm5/processes/misc/base.js.map +1 -1
  243. package/dist/esm5/processes/misc/enums.js +35 -35
  244. package/dist/esm5/processes/misc/enums.js.map +1 -1
  245. package/dist/esm5/processes/misc/index.js +2 -2
  246. package/dist/esm5/processes/misc/index.js.map +1 -1
  247. package/dist/esm5/processes/postFetch.js +73 -73
  248. package/dist/esm5/processes/postFetch.js.map +1 -1
  249. package/dist/esm5/processes/preClip.js +94 -94
  250. package/dist/esm5/processes/preClip.js.map +1 -1
  251. package/dist/esm5/processes/preFetch.js +247 -247
  252. package/dist/esm5/processes/preFetch.js.map +1 -1
  253. package/dist/esm5/processes/render.js +63 -63
  254. package/dist/esm5/processes/render.js.map +1 -1
  255. package/dist/esm5/processes/scroll.js +107 -107
  256. package/dist/esm5/processes/scroll.js.map +1 -1
  257. package/dist/esm5/processes/start.js +18 -18
  258. package/dist/esm5/processes/start.js.map +1 -1
  259. package/dist/esm5/scroller.js +81 -73
  260. package/dist/esm5/scroller.js.map +1 -1
  261. package/dist/esm5/version.js +4 -4
  262. package/dist/esm5/version.js.map +1 -1
  263. package/dist/esm5/workflow-transducer.js +212 -212
  264. package/dist/esm5/workflow-transducer.js.map +1 -1
  265. package/dist/esm5/workflow.js +183 -176
  266. package/dist/esm5/workflow.js.map +1 -1
  267. package/dist/typings/classes/adapter/context.d.ts +4 -4
  268. package/dist/typings/classes/adapter/props.d.ts +47 -47
  269. package/dist/typings/classes/adapter/wanted.d.ts +14 -14
  270. package/dist/typings/classes/adapter.d.ts +74 -64
  271. package/dist/typings/classes/buffer/cache.d.ts +95 -95
  272. package/dist/typings/classes/buffer/checkCall.d.ts +12 -12
  273. package/dist/typings/classes/buffer/defaultSize.d.ts +32 -32
  274. package/dist/typings/classes/buffer.d.ts +64 -64
  275. package/dist/typings/classes/datasource.d.ts +27 -27
  276. package/dist/typings/classes/domRoutines.d.ts +33 -33
  277. package/dist/typings/classes/item.d.ts +28 -28
  278. package/dist/typings/classes/logger.d.ts +28 -28
  279. package/dist/typings/classes/paddings.d.ts +22 -22
  280. package/dist/typings/classes/reactive.d.ts +21 -21
  281. package/dist/typings/classes/settings.d.ts +119 -119
  282. package/dist/typings/classes/state/clip.d.ts +9 -9
  283. package/dist/typings/classes/state/cycle.d.ts +29 -29
  284. package/dist/typings/classes/state/fetch.d.ts +62 -62
  285. package/dist/typings/classes/state/render.d.ts +9 -9
  286. package/dist/typings/classes/state/scroll.d.ts +16 -16
  287. package/dist/typings/classes/state.d.ts +27 -27
  288. package/dist/typings/classes/viewport.d.ts +32 -32
  289. package/dist/typings/index.d.ts +9 -9
  290. package/dist/typings/inputs/adapter.d.ts +5 -5
  291. package/dist/typings/inputs/common.d.ts +9 -9
  292. package/dist/typings/inputs/datasource.d.ts +7 -7
  293. package/dist/typings/inputs/index.d.ts +6 -6
  294. package/dist/typings/inputs/settings.d.ts +41 -41
  295. package/dist/typings/inputs/validation.d.ts +83 -83
  296. package/dist/typings/interfaces/adapter.d.ts +156 -156
  297. package/dist/typings/interfaces/datasource.d.ts +26 -26
  298. package/dist/typings/interfaces/index.d.ts +10 -10
  299. package/dist/typings/interfaces/item.d.ts +8 -8
  300. package/dist/typings/interfaces/process.d.ts +35 -35
  301. package/dist/typings/interfaces/routines.d.ts +157 -157
  302. package/dist/typings/interfaces/settings.d.ts +31 -31
  303. package/dist/typings/interfaces/state.d.ts +22 -22
  304. package/dist/typings/interfaces/validation.d.ts +33 -33
  305. package/dist/typings/interfaces/workflow.d.ts +53 -53
  306. package/dist/typings/processes/adapter/append.d.ts +14 -14
  307. package/dist/typings/processes/adapter/check.d.ts +6 -6
  308. package/dist/typings/processes/adapter/clip.d.ts +7 -7
  309. package/dist/typings/processes/adapter/fix.d.ts +13 -13
  310. package/dist/typings/processes/adapter/insert.d.ts +11 -11
  311. package/dist/typings/processes/adapter/reload.d.ts +6 -6
  312. package/dist/typings/processes/adapter/remove.d.ts +11 -11
  313. package/dist/typings/processes/adapter/replace.d.ts +8 -8
  314. package/dist/typings/processes/adapter/reset.d.ts +7 -7
  315. package/dist/typings/processes/adapter/update.d.ts +8 -8
  316. package/dist/typings/processes/adjust.d.ts +10 -10
  317. package/dist/typings/processes/clip.d.ts +7 -7
  318. package/dist/typings/processes/end.d.ts +10 -10
  319. package/dist/typings/processes/fetch.d.ts +18 -18
  320. package/dist/typings/processes/index.d.ts +23 -23
  321. package/dist/typings/processes/init.d.ts +7 -7
  322. package/dist/typings/processes/misc/base.d.ts +4 -4
  323. package/dist/typings/processes/misc/enums.d.ts +32 -32
  324. package/dist/typings/processes/misc/index.d.ts +2 -2
  325. package/dist/typings/processes/postFetch.d.ts +8 -8
  326. package/dist/typings/processes/preClip.d.ts +12 -12
  327. package/dist/typings/processes/preFetch.d.ts +17 -17
  328. package/dist/typings/processes/render.d.ts +9 -9
  329. package/dist/typings/processes/scroll.d.ts +13 -13
  330. package/dist/typings/processes/start.d.ts +6 -6
  331. package/dist/typings/scroller.d.ts +26 -26
  332. package/dist/typings/version.d.ts +5 -5
  333. package/dist/typings/workflow-transducer.d.ts +2 -2
  334. package/dist/typings/workflow.d.ts +28 -28
  335. package/package.json +68 -68
@@ -1 +1 @@
1
- {"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../../src/classes/buffer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Cache } from './buffer/cache';\nimport { CheckBufferCall } from './buffer/checkCall';\nimport { Item } from './item';\nimport { Settings } from './settings';\nimport { Logger } from './logger';\nimport { Reactive } from './reactive';\nimport { Direction } from '../inputs/index';\nimport { OnDataChanged, BufferUpdater, ItemsPredicate } from '../interfaces/index';\n\nexport class Buffer<Data> {\n\n private _items: Item<Data>[] = [];\n private _absMinIndex: number;\n private _absMaxIndex: number;\n bof: Reactive<boolean>;\n eof: Reactive<boolean>;\n\n changeItems: OnDataChanged<Data>;\n minIndexUser: number;\n maxIndexUser: number;\n startIndexUser: number;\n startIndex: number;\n\n private pristine: boolean;\n private cache: Cache<Data>;\n private checkCall: CheckBufferCall<Data>;\n private readonly logger: Logger;\n\n constructor(settings: Settings<Data>, onDataChanged: OnDataChanged<Data>, logger: Logger) {\n this.logger = logger;\n this.changeItems = onDataChanged;\n this.bof = new Reactive<boolean>(false);\n this.eof = new Reactive<boolean>(false);\n this.cache = new Cache<Data>(settings, logger);\n this.checkCall = new CheckBufferCall(this, logger);\n this.startIndexUser = settings.startIndex;\n this.minIndexUser = settings.minIndex;\n this.maxIndexUser = settings.maxIndex;\n this.reset(true);\n }\n\n dispose(): void {\n this.bof.dispose();\n this.eof.dispose();\n this._items.forEach(item => item.dispose());\n this._items = [];\n }\n\n reset(force: boolean, startIndex?: number): void {\n this.items.forEach(item => item.hide());\n this.pristine = true;\n this.items = [];\n this.cache.reset(force);\n this.absMinIndex = this.minIndexUser;\n this.absMaxIndex = this.maxIndexUser;\n this.setCurrentStartIndex(startIndex);\n this.bof.set(false);\n this.eof.set(false);\n this.pristine = false;\n }\n\n setCurrentStartIndex(newStartIndex?: unknown): void {\n const min = this.minIndexUser;\n const max = this.maxIndexUser;\n const start = this.startIndexUser;\n let index = Number(newStartIndex);\n if (Number.isNaN(index)) {\n this.logger.log(() => `fallback startIndex to settings.startIndex (${start})`);\n index = start;\n }\n if (index < min) {\n this.logger.log(() => `setting startIndex to settings.minIndex (${min}) because ${index} < ${min}`);\n index = min;\n }\n if (index > max) {\n this.logger.log(() => `setting startIndex to settings.maxIndex (${max}) because ${index} > ${max}`);\n index = max;\n }\n this.startIndex = index;\n }\n\n set items(items: Item<Data>[]) {\n this._items = items;\n this.changeItems(items);\n if (!this.pristine) {\n this.checkBOF();\n this.checkEOF();\n }\n }\n\n get items(): Item<Data>[] {\n return this._items;\n }\n\n set absMinIndex(value: number) {\n if (this._absMinIndex !== value) {\n this._absMinIndex = Number.isFinite(this._absMaxIndex) && value > this._absMaxIndex ? this._absMaxIndex : value;\n }\n if (!this.pristine) {\n this.checkBOF();\n }\n }\n\n get absMinIndex(): number {\n return this._absMinIndex;\n }\n\n set absMaxIndex(value: number) {\n if (this._absMaxIndex !== value) {\n this._absMaxIndex = Number.isFinite(this._absMinIndex) && value < this._absMinIndex ? this._absMinIndex : value;\n }\n if (!this.pristine) {\n this.checkEOF();\n }\n }\n\n get absMaxIndex(): number {\n return this._absMaxIndex;\n }\n\n private checkBOF() {\n // since bof has no setter, need to call checkBOF() on items and absMinIndex change\n const bof = this.items.length\n ? (this.items[0].$index === this.absMinIndex)\n : isFinite(this.absMinIndex);\n this.bof.set(bof);\n }\n\n private checkEOF() {\n // since eof has no setter, need to call checkEOF() on items and absMaxIndex change\n const eof = this.items.length\n ? (this.items[this.items.length - 1].$index === this.absMaxIndex)\n : isFinite(this.absMaxIndex);\n this.eof.set(eof);\n }\n\n get size(): number {\n return this._items.length;\n }\n\n get cacheSize(): number {\n return this.cache.size;\n }\n\n get defaultSize(): number {\n return this.cache.getDefaultSize();\n }\n\n get minIndex(): number {\n return isFinite(this.cache.minIndex) ? this.cache.minIndex : this.startIndex;\n }\n\n get maxIndex(): number {\n return isFinite(this.cache.maxIndex) ? this.cache.maxIndex : this.startIndex;\n }\n\n get firstIndex(): number {\n return this.items.length ? this.items[0].$index : NaN;\n }\n\n get lastIndex(): number {\n return this.items.length ? this.items[this.items.length - 1].$index : NaN;\n }\n\n get finiteAbsMinIndex(): number {\n return isFinite(this.absMinIndex) ? this.absMinIndex : this.minIndex;\n }\n\n get finiteAbsMaxIndex(): number {\n return isFinite(this.absMaxIndex) ? this.absMaxIndex : this.maxIndex;\n }\n\n get($index: number): Item<Data> | undefined {\n return this.items.find(item => item.$index === $index);\n }\n\n setItems(items: Item<Data>[]): boolean {\n if (!this.items.length) {\n this.items = [...items];\n } else if (this.items[0].$index > items[items.length - 1].$index) {\n this.items = [...items, ...this.items];\n } else if (items[0].$index > this.items[this.items.length - 1].$index) {\n this.items = [...this.items, ...items];\n } else {\n return false;\n }\n return true;\n }\n\n clip(): void {\n this.items = this.items.filter(({ toRemove }) => !toRemove);\n }\n\n getIndexToInsert(predicate?: ItemsPredicate, before?: number, after?: number): number {\n return this.checkCall.insertInBuffer(predicate, before, after);\n }\n\n private shiftExtremum(amount: number, fixRight: boolean) {\n if (!fixRight) {\n this.absMaxIndex += amount;\n } else {\n this.absMinIndex -= amount;\n this.startIndex -= amount;\n }\n if (this.startIndex > this.absMaxIndex) {\n this.startIndex = this.absMaxIndex;\n } else if (this.startIndex < this.absMinIndex) {\n this.startIndex = this.absMinIndex;\n }\n }\n\n insertVirtually(items: Data[], index: number, direction: Direction, fixRight: boolean): boolean {\n if (!this.checkCall.insertVirtual(items, index, direction)) {\n return false;\n }\n let shift = 0;\n if (index <= this.firstIndex && !fixRight) {\n shift = items.length;\n } else if (index >= this.lastIndex && fixRight) {\n shift = -items.length;\n }\n if (shift) {\n this.items.forEach(item => item.updateIndex(item.$index + shift));\n this.cache.insertItems(items, index, direction, fixRight);\n this.items = [...this.items];\n }\n this.shiftExtremum(items.length, fixRight);\n return true;\n }\n\n removeVirtually(indexes: number[], fixRight: boolean): void {\n const length = this.items.length;\n let shifted = false;\n for (\n let i = fixRight ? length - 1 : 0;\n fixRight ? i >= 0 : i < length;\n fixRight ? i-- : i++\n ) {\n const item = this.items[i];\n const diff = indexes.reduce((acc, index) => acc + (fixRight\n ? (item.$index < index ? 1 : 0)\n : (item.$index > index ? -1 : 0)\n ), 0);\n shifted = shifted || !!diff;\n item.updateIndex(item.$index + diff);\n }\n this.shiftExtremum(-indexes.length, fixRight);\n if (shifted) {\n this.items = [...this.items];\n }\n this.cache.removeItems(indexes, fixRight);\n }\n\n fillEmpty(\n items: Data[], beforeIndex: number | undefined, afterIndex: number | undefined, fixRight: boolean,\n generator: (index: number, data: Data) => Item<Data>,\n ): boolean {\n if (!this.checkCall.fillEmpty(items, beforeIndex, afterIndex)) {\n return false;\n }\n const before = Number.isInteger(beforeIndex);\n const index = (before ? beforeIndex : afterIndex) as number;\n const shift = (fixRight ? items.length : (before ? 1 : 0));\n this.items = items.map((data, i) =>\n generator(index + i + (!before ? 1 : 0) - shift, data)\n );\n this._absMinIndex = this.items[0].$index;\n this._absMaxIndex = this.items[this.size - 1].$index;\n if (this.startIndex <= this.absMinIndex) {\n this.startIndex = this.absMinIndex;\n } else if (this.startIndex > this.absMaxIndex) {\n this.startIndex = this.absMaxIndex;\n }\n return true;\n }\n\n updateItems(\n predicate: BufferUpdater<Data>,\n generator: (index: number, data: Data) => Item<Data>,\n indexToTrack: number,\n fixRight: boolean\n ): { trackedIndex: number, toRemove: Item<Data>[] } {\n if (!this.size || Number.isNaN(this.firstIndex)) {\n return { trackedIndex: NaN, toRemove: [] };\n }\n let trackedIndex = indexToTrack;\n let index = fixRight ? this.lastIndex : this.firstIndex;\n const items: Item<Data>[] = [];\n const diff = fixRight ? -1 : 1;\n const limit = this.size - 1;\n const beforeMap = new Map<number, Item>(); // need to persist original $indexes\n const updateArray = Array.prototype[fixRight ? 'unshift' : 'push'];\n\n for (let i = fixRight ? limit : 0; fixRight ? i >= 0 : i <= limit; i += diff) {\n const item = this.items[i];\n beforeMap.set(item.$index, item);\n const result = predicate(item);\n\n // if predicate result is falsy or empty array -> delete\n if (!result || (Array.isArray(result) && !result.length)) {\n item.toRemove = true;\n trackedIndex += item.$index >= indexToTrack ? (fixRight ? 1 : 0) : (fixRight ? 0 : -1);\n this.shiftExtremum(-1, fixRight);\n continue;\n }\n\n // if predicate result is truthy but not array -> leave\n if (!Array.isArray(result)) {\n item.updateIndex(index);\n updateArray.call(items, item);\n index += diff;\n continue;\n }\n\n // if predicate result is non-empty array -> insert/replace\n if (item.$index < indexToTrack) {\n trackedIndex += fixRight ? 0 : result.length - 1;\n } else if (item.$index > indexToTrack) {\n trackedIndex += fixRight ? 1 - result.length : 0;\n }\n let toRemove = true;\n const newItems: Item<Data>[] = [];\n (fixRight ? [...result].reverse() : result).forEach((data, i) => {\n let newItem: Item<Data>;\n if (item.data === data) {\n if (indexToTrack === item.$index) {\n trackedIndex = index + i * diff;\n }\n item.updateIndex(index + i * diff);\n newItem = item;\n toRemove = false; // insert case\n } else {\n newItem = generator(index + i * diff, data);\n newItem.toInsert = true;\n }\n updateArray.call(newItems, newItem);\n });\n item.toRemove = toRemove;\n updateArray.call(items, ...newItems);\n index += diff * result.length;\n if (result.length > 1) {\n this.shiftExtremum(result.length - 1, fixRight);\n }\n }\n\n const toRemove = this.items.filter(item => item.toRemove);\n const itemsBefore = Array.from(beforeMap)\n .map(([$index, { size, toRemove }]) => ({ $index, size, toRemove }))\n .sort((a, b) => a.$index - b.$index);\n this.items = items;\n this.cache.updateSubset(itemsBefore, items, fixRight);\n\n if (this.finiteAbsMinIndex === this.finiteAbsMaxIndex) {\n trackedIndex = NaN;\n } else if (trackedIndex > this.finiteAbsMaxIndex) {\n trackedIndex = this.finiteAbsMaxIndex;\n } else if (trackedIndex < this.finiteAbsMinIndex) {\n trackedIndex = this.finiteAbsMinIndex;\n }\n return { trackedIndex, toRemove };\n }\n\n cacheItem(item: Item<Data>): void {\n this.cache.add(item);\n }\n\n getFirstVisibleItemIndex(): number {\n const length = this.items.length;\n for (let i = 0; i < length; i++) {\n if (!this.items[i].invisible) {\n return i;\n }\n }\n return -1;\n }\n\n getLastVisibleItemIndex(): number {\n for (let i = this.items.length - 1; i >= 0; i--) {\n if (!this.items[i].invisible) {\n return i;\n }\n }\n return -1;\n }\n\n getFirstVisibleItem(): Item<Data> | undefined {\n const index = this.getFirstVisibleItemIndex();\n return index >= 0 ? this.items[index] : void 0;\n }\n\n getLastVisibleItem(): Item<Data> | undefined {\n const index = this.getLastVisibleItemIndex();\n return index >= 0 ? this.items[index] : void 0;\n }\n\n getEdgeVisibleItem(direction: Direction, opposite?: boolean): Item<Data> | undefined {\n return direction === (!opposite ? Direction.forward : Direction.backward) ?\n this.getLastVisibleItem() : this.getFirstVisibleItem();\n }\n\n getVisibleItemsCount(): number {\n return this.items.reduce((acc: number, item) => acc + (item.invisible ? 0 : 1), 0);\n }\n\n getSizeByIndex(index: number): number {\n return this.cache.getSizeByIndex(index);\n }\n\n checkDefaultSize(): boolean {\n return this.cache.recalculateDefaultSize();\n }\n\n}\n"]}
1
+ {"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../../src/classes/buffer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Cache } from './buffer/cache';\r\nimport { CheckBufferCall } from './buffer/checkCall';\r\nimport { Item } from './item';\r\nimport { Settings } from './settings';\r\nimport { Logger } from './logger';\r\nimport { Reactive } from './reactive';\r\nimport { Direction } from '../inputs/index';\r\nimport { OnDataChanged, BufferUpdater, ItemsPredicate } from '../interfaces/index';\r\n\r\nexport class Buffer<Data> {\r\n\r\n private _items: Item<Data>[] = [];\r\n private _absMinIndex: number;\r\n private _absMaxIndex: number;\r\n bof: Reactive<boolean>;\r\n eof: Reactive<boolean>;\r\n\r\n changeItems: OnDataChanged<Data>;\r\n minIndexUser: number;\r\n maxIndexUser: number;\r\n startIndexUser: number;\r\n startIndex: number;\r\n\r\n private pristine: boolean;\r\n private cache: Cache<Data>;\r\n private checkCall: CheckBufferCall<Data>;\r\n private readonly logger: Logger;\r\n\r\n constructor(settings: Settings<Data>, onDataChanged: OnDataChanged<Data>, logger: Logger) {\r\n this.logger = logger;\r\n this.changeItems = onDataChanged;\r\n this.bof = new Reactive<boolean>(false);\r\n this.eof = new Reactive<boolean>(false);\r\n this.cache = new Cache<Data>(settings, logger);\r\n this.checkCall = new CheckBufferCall(this, logger);\r\n this.startIndexUser = settings.startIndex;\r\n this.minIndexUser = settings.minIndex;\r\n this.maxIndexUser = settings.maxIndex;\r\n this.reset(true);\r\n }\r\n\r\n dispose(): void {\r\n this.bof.dispose();\r\n this.eof.dispose();\r\n this._items.forEach(item => item.dispose());\r\n this._items = [];\r\n }\r\n\r\n reset(force: boolean, startIndex?: number): void {\r\n this.items.forEach(item => item.hide());\r\n this.pristine = true;\r\n this.items = [];\r\n this.cache.reset(force);\r\n this.absMinIndex = this.minIndexUser;\r\n this.absMaxIndex = this.maxIndexUser;\r\n this.setCurrentStartIndex(startIndex);\r\n this.bof.set(false);\r\n this.eof.set(false);\r\n this.pristine = false;\r\n }\r\n\r\n setCurrentStartIndex(newStartIndex?: unknown): void {\r\n const min = this.minIndexUser;\r\n const max = this.maxIndexUser;\r\n const start = this.startIndexUser;\r\n let index = Number(newStartIndex);\r\n if (Number.isNaN(index)) {\r\n this.logger.log(() => `fallback startIndex to settings.startIndex (${start})`);\r\n index = start;\r\n }\r\n if (index < min) {\r\n this.logger.log(() => `setting startIndex to settings.minIndex (${min}) because ${index} < ${min}`);\r\n index = min;\r\n }\r\n if (index > max) {\r\n this.logger.log(() => `setting startIndex to settings.maxIndex (${max}) because ${index} > ${max}`);\r\n index = max;\r\n }\r\n this.startIndex = index;\r\n }\r\n\r\n set items(items: Item<Data>[]) {\r\n this._items = items;\r\n this.changeItems(items);\r\n if (!this.pristine) {\r\n this.checkBOF();\r\n this.checkEOF();\r\n }\r\n }\r\n\r\n get items(): Item<Data>[] {\r\n return this._items;\r\n }\r\n\r\n set absMinIndex(value: number) {\r\n if (this._absMinIndex !== value) {\r\n this._absMinIndex = Number.isFinite(this._absMaxIndex) && value > this._absMaxIndex ? this._absMaxIndex : value;\r\n }\r\n if (!this.pristine) {\r\n this.checkBOF();\r\n }\r\n }\r\n\r\n get absMinIndex(): number {\r\n return this._absMinIndex;\r\n }\r\n\r\n set absMaxIndex(value: number) {\r\n if (this._absMaxIndex !== value) {\r\n this._absMaxIndex = Number.isFinite(this._absMinIndex) && value < this._absMinIndex ? this._absMinIndex : value;\r\n }\r\n if (!this.pristine) {\r\n this.checkEOF();\r\n }\r\n }\r\n\r\n get absMaxIndex(): number {\r\n return this._absMaxIndex;\r\n }\r\n\r\n private checkBOF() {\r\n // since bof has no setter, need to call checkBOF() on items and absMinIndex change\r\n const bof = this.items.length\r\n ? (this.items[0].$index === this.absMinIndex)\r\n : isFinite(this.absMinIndex);\r\n this.bof.set(bof);\r\n }\r\n\r\n private checkEOF() {\r\n // since eof has no setter, need to call checkEOF() on items and absMaxIndex change\r\n const eof = this.items.length\r\n ? (this.items[this.items.length - 1].$index === this.absMaxIndex)\r\n : isFinite(this.absMaxIndex);\r\n this.eof.set(eof);\r\n }\r\n\r\n get size(): number {\r\n return this._items.length;\r\n }\r\n\r\n get cacheSize(): number {\r\n return this.cache.size;\r\n }\r\n\r\n get defaultSize(): number {\r\n return this.cache.getDefaultSize();\r\n }\r\n\r\n get minIndex(): number {\r\n return isFinite(this.cache.minIndex) ? this.cache.minIndex : this.startIndex;\r\n }\r\n\r\n get maxIndex(): number {\r\n return isFinite(this.cache.maxIndex) ? this.cache.maxIndex : this.startIndex;\r\n }\r\n\r\n get firstIndex(): number {\r\n return this.items.length ? this.items[0].$index : NaN;\r\n }\r\n\r\n get lastIndex(): number {\r\n return this.items.length ? this.items[this.items.length - 1].$index : NaN;\r\n }\r\n\r\n get finiteAbsMinIndex(): number {\r\n return isFinite(this.absMinIndex) ? this.absMinIndex : this.minIndex;\r\n }\r\n\r\n get finiteAbsMaxIndex(): number {\r\n return isFinite(this.absMaxIndex) ? this.absMaxIndex : this.maxIndex;\r\n }\r\n\r\n get($index: number): Item<Data> | undefined {\r\n return this.items.find(item => item.$index === $index);\r\n }\r\n\r\n setItems(items: Item<Data>[]): boolean {\r\n if (!this.items.length) {\r\n this.items = [...items];\r\n } else if (this.items[0].$index > items[items.length - 1].$index) {\r\n this.items = [...items, ...this.items];\r\n } else if (items[0].$index > this.items[this.items.length - 1].$index) {\r\n this.items = [...this.items, ...items];\r\n } else {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n clip(): void {\r\n this.items = this.items.filter(({ toRemove }) => !toRemove);\r\n }\r\n\r\n getIndexToInsert(predicate?: ItemsPredicate, before?: number, after?: number): number {\r\n return this.checkCall.insertInBuffer(predicate, before, after);\r\n }\r\n\r\n private shiftExtremum(amount: number, fixRight: boolean) {\r\n if (!fixRight) {\r\n this.absMaxIndex += amount;\r\n } else {\r\n this.absMinIndex -= amount;\r\n this.startIndex -= amount;\r\n }\r\n if (this.startIndex > this.absMaxIndex) {\r\n this.startIndex = this.absMaxIndex;\r\n } else if (this.startIndex < this.absMinIndex) {\r\n this.startIndex = this.absMinIndex;\r\n }\r\n }\r\n\r\n insertVirtually(items: Data[], index: number, direction: Direction, fixRight: boolean): boolean {\r\n if (!this.checkCall.insertVirtual(items, index, direction)) {\r\n return false;\r\n }\r\n let shift = 0;\r\n if (index <= this.firstIndex && !fixRight) {\r\n shift = items.length;\r\n } else if (index >= this.lastIndex && fixRight) {\r\n shift = -items.length;\r\n }\r\n if (shift) {\r\n this.items.forEach(item => item.updateIndex(item.$index + shift));\r\n this.cache.insertItems(items, index, direction, fixRight);\r\n this.items = [...this.items];\r\n }\r\n this.shiftExtremum(items.length, fixRight);\r\n return true;\r\n }\r\n\r\n removeVirtually(indexes: number[], fixRight: boolean): void {\r\n const length = this.items.length;\r\n let shifted = false;\r\n for (\r\n let i = fixRight ? length - 1 : 0;\r\n fixRight ? i >= 0 : i < length;\r\n fixRight ? i-- : i++\r\n ) {\r\n const item = this.items[i];\r\n const diff = indexes.reduce((acc, index) => acc + (fixRight\r\n ? (item.$index < index ? 1 : 0)\r\n : (item.$index > index ? -1 : 0)\r\n ), 0);\r\n shifted = shifted || !!diff;\r\n item.updateIndex(item.$index + diff);\r\n }\r\n this.shiftExtremum(-indexes.length, fixRight);\r\n if (shifted) {\r\n this.items = [...this.items];\r\n }\r\n this.cache.removeItems(indexes, fixRight);\r\n }\r\n\r\n fillEmpty(\r\n items: Data[], beforeIndex: number | undefined, afterIndex: number | undefined, fixRight: boolean,\r\n generator: (index: number, data: Data) => Item<Data>,\r\n ): boolean {\r\n if (!this.checkCall.fillEmpty(items, beforeIndex, afterIndex)) {\r\n return false;\r\n }\r\n const before = Number.isInteger(beforeIndex);\r\n const index = (before ? beforeIndex : afterIndex) as number;\r\n const shift = (fixRight ? items.length : (before ? 1 : 0));\r\n this.items = items.map((data, i) =>\r\n generator(index + i + (!before ? 1 : 0) - shift, data)\r\n );\r\n this._absMinIndex = this.items[0].$index;\r\n this._absMaxIndex = this.items[this.size - 1].$index;\r\n if (this.startIndex <= this.absMinIndex) {\r\n this.startIndex = this.absMinIndex;\r\n } else if (this.startIndex > this.absMaxIndex) {\r\n this.startIndex = this.absMaxIndex;\r\n }\r\n return true;\r\n }\r\n\r\n updateItems(\r\n predicate: BufferUpdater<Data>,\r\n generator: (index: number, data: Data) => Item<Data>,\r\n indexToTrack: number,\r\n fixRight: boolean\r\n ): { trackedIndex: number, toRemove: Item<Data>[] } {\r\n if (!this.size || Number.isNaN(this.firstIndex)) {\r\n return { trackedIndex: NaN, toRemove: [] };\r\n }\r\n let trackedIndex = indexToTrack;\r\n let index = fixRight ? this.lastIndex : this.firstIndex;\r\n const items: Item<Data>[] = [];\r\n const diff = fixRight ? -1 : 1;\r\n const limit = this.size - 1;\r\n const beforeMap = new Map<number, Item>(); // need to persist original $indexes\r\n const updateArray = Array.prototype[fixRight ? 'unshift' : 'push'];\r\n\r\n for (let i = fixRight ? limit : 0; fixRight ? i >= 0 : i <= limit; i += diff) {\r\n const item = this.items[i];\r\n beforeMap.set(item.$index, item);\r\n const result = predicate(item);\r\n\r\n // if predicate result is falsy or empty array -> delete\r\n if (!result || (Array.isArray(result) && !result.length)) {\r\n item.toRemove = true;\r\n trackedIndex += item.$index >= indexToTrack ? (fixRight ? 1 : 0) : (fixRight ? 0 : -1);\r\n this.shiftExtremum(-1, fixRight);\r\n continue;\r\n }\r\n\r\n // if predicate result is truthy but not array -> leave\r\n if (!Array.isArray(result)) {\r\n item.updateIndex(index);\r\n updateArray.call(items, item);\r\n index += diff;\r\n continue;\r\n }\r\n\r\n // if predicate result is non-empty array -> insert/replace\r\n if (item.$index < indexToTrack) {\r\n trackedIndex += fixRight ? 0 : result.length - 1;\r\n } else if (item.$index > indexToTrack) {\r\n trackedIndex += fixRight ? 1 - result.length : 0;\r\n }\r\n let toRemove = true;\r\n const newItems: Item<Data>[] = [];\r\n (fixRight ? [...result].reverse() : result).forEach((data, i) => {\r\n let newItem: Item<Data>;\r\n if (item.data === data) {\r\n if (indexToTrack === item.$index) {\r\n trackedIndex = index + i * diff;\r\n }\r\n item.updateIndex(index + i * diff);\r\n newItem = item;\r\n toRemove = false; // insert case\r\n } else {\r\n newItem = generator(index + i * diff, data);\r\n newItem.toInsert = true;\r\n }\r\n updateArray.call(newItems, newItem);\r\n });\r\n item.toRemove = toRemove;\r\n updateArray.call(items, ...newItems);\r\n index += diff * result.length;\r\n if (result.length > 1) {\r\n this.shiftExtremum(result.length - 1, fixRight);\r\n }\r\n }\r\n\r\n const toRemove = this.items.filter(item => item.toRemove);\r\n const itemsBefore = Array.from(beforeMap)\r\n .map(([$index, { size, toRemove }]) => ({ $index, size, toRemove }))\r\n .sort((a, b) => a.$index - b.$index);\r\n this.items = items;\r\n this.cache.updateSubset(itemsBefore, items, fixRight);\r\n\r\n if (this.finiteAbsMinIndex === this.finiteAbsMaxIndex) {\r\n trackedIndex = NaN;\r\n } else if (trackedIndex > this.finiteAbsMaxIndex) {\r\n trackedIndex = this.finiteAbsMaxIndex;\r\n } else if (trackedIndex < this.finiteAbsMinIndex) {\r\n trackedIndex = this.finiteAbsMinIndex;\r\n }\r\n return { trackedIndex, toRemove };\r\n }\r\n\r\n cacheItem(item: Item<Data>): void {\r\n this.cache.add(item);\r\n }\r\n\r\n getFirstVisibleItemIndex(): number {\r\n const length = this.items.length;\r\n for (let i = 0; i < length; i++) {\r\n if (!this.items[i].invisible) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n getLastVisibleItemIndex(): number {\r\n for (let i = this.items.length - 1; i >= 0; i--) {\r\n if (!this.items[i].invisible) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n getFirstVisibleItem(): Item<Data> | undefined {\r\n const index = this.getFirstVisibleItemIndex();\r\n return index >= 0 ? this.items[index] : void 0;\r\n }\r\n\r\n getLastVisibleItem(): Item<Data> | undefined {\r\n const index = this.getLastVisibleItemIndex();\r\n return index >= 0 ? this.items[index] : void 0;\r\n }\r\n\r\n getEdgeVisibleItem(direction: Direction, opposite?: boolean): Item<Data> | undefined {\r\n return direction === (!opposite ? Direction.forward : Direction.backward) ?\r\n this.getLastVisibleItem() : this.getFirstVisibleItem();\r\n }\r\n\r\n getVisibleItemsCount(): number {\r\n return this.items.reduce((acc: number, item) => acc + (item.invisible ? 0 : 1), 0);\r\n }\r\n\r\n getSizeByIndex(index: number): number {\r\n return this.cache.getSizeByIndex(index);\r\n }\r\n\r\n checkDefaultSize(): boolean {\r\n return this.cache.recalculateDefaultSize();\r\n }\r\n\r\n}\r\n"]}
@@ -1,29 +1,29 @@
1
- import { AdapterContext } from './adapter/context';
2
- import { reactiveConfigStorage } from './adapter/props';
3
- import { wantedStorage } from './adapter/wanted';
4
- export class DatasourceGeneric {
5
- constructor(datasource, config) {
6
- this.get = datasource.get;
7
- if (datasource.settings) {
8
- this.settings = datasource.settings;
9
- }
10
- if (datasource.devSettings) {
11
- this.devSettings = datasource.devSettings;
12
- }
13
- const adapterContext = new AdapterContext(config || { mock: false });
14
- this.adapter = adapterContext;
15
- }
16
- dispose() {
17
- reactiveConfigStorage.delete(this.adapter.id);
18
- wantedStorage.delete(this.adapter.id);
19
- }
20
- }
21
- // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
22
- export const makeDatasource = (getConfig) => class extends DatasourceGeneric {
23
- constructor(datasource) {
24
- const config = typeof getConfig === 'function' ? getConfig() : void 0;
25
- super(datasource, config);
26
- }
27
- };
28
- export const Datasource = makeDatasource();
1
+ import { AdapterContext } from './adapter/context';
2
+ import { reactiveConfigStorage } from './adapter/props';
3
+ import { wantedStorage } from './adapter/wanted';
4
+ export class DatasourceGeneric {
5
+ constructor(datasource, config) {
6
+ this.get = datasource.get;
7
+ if (datasource.settings) {
8
+ this.settings = datasource.settings;
9
+ }
10
+ if (datasource.devSettings) {
11
+ this.devSettings = datasource.devSettings;
12
+ }
13
+ const adapterContext = new AdapterContext(config || { mock: false });
14
+ this.adapter = adapterContext;
15
+ }
16
+ dispose() {
17
+ reactiveConfigStorage.delete(this.adapter.id);
18
+ wantedStorage.delete(this.adapter.id);
19
+ }
20
+ }
21
+ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
22
+ export const makeDatasource = (getConfig) => class extends DatasourceGeneric {
23
+ constructor(datasource) {
24
+ const config = typeof getConfig === 'function' ? getConfig() : void 0;
25
+ super(datasource, config);
26
+ }
27
+ };
28
+ export const Datasource = makeDatasource();
29
29
  //# sourceMappingURL=datasource.js.map
@@ -1,167 +1,167 @@
1
- import { Direction } from '../inputs/index';
2
- export class Routines {
3
- constructor(element, settings, CustomRoutines) {
4
- this.element = element;
5
- this.settings = {
6
- viewport: settings.viewport,
7
- horizontal: settings.horizontal,
8
- window: settings.windowViewport
9
- };
10
- // provide custom overrides for IRoutines methods
11
- if (CustomRoutines) {
12
- const self = this;
13
- const routines = new CustomRoutines(element, this.settings);
14
- Object.getOwnPropertyNames(Object.getPrototypeOf(routines))
15
- .filter(method => method !== 'constructor' &&
16
- typeof routines[method] === 'function' &&
17
- typeof self[method] === 'function')
18
- .forEach(method => self[method] = (...args) => routines[method].apply(this, args));
19
- }
20
- // initialization
21
- this.viewport = this.getViewportElement();
22
- this.onInit(settings);
23
- }
24
- checkElement(element) {
25
- if (!element) {
26
- throw new Error('HTML element is not defined');
27
- }
28
- }
29
- getViewportElement() {
30
- if (this.settings.window) {
31
- return document.documentElement;
32
- }
33
- if (this.settings.viewport) {
34
- return this.settings.viewport;
35
- }
36
- this.checkElement(this.element);
37
- const parent = this.element.parentElement;
38
- this.checkElement(parent);
39
- return parent;
40
- }
41
- onInit(settings) {
42
- if (settings.windowViewport) {
43
- if ('scrollRestoration' in history) {
44
- history.scrollRestoration = 'manual';
45
- }
46
- }
47
- if (settings.dismissOverflowAnchor) {
48
- this.viewport.style.overflowAnchor = 'none';
49
- }
50
- }
51
- findElementBySelector(element, selector) {
52
- this.checkElement(element);
53
- return element.querySelector(selector);
54
- }
55
- findPaddingElement(direction) {
56
- return this.findElementBySelector(this.element, `[data-padding-${direction}]`);
57
- }
58
- findItemElement(id) {
59
- return this.findElementBySelector(this.element, `[data-sid="${id}"]`);
60
- }
61
- getScrollPosition() {
62
- if (this.settings.window) {
63
- return this.settings.horizontal ? window.pageXOffset : window.pageYOffset;
64
- }
65
- return this.viewport[this.settings.horizontal ? 'scrollLeft' : 'scrollTop'];
66
- }
67
- setScrollPosition(value) {
68
- value = Math.max(0, value);
69
- if (this.settings.window) {
70
- if (this.settings.horizontal) {
71
- window.scrollTo(value, window.scrollY);
72
- }
73
- else {
74
- window.scrollTo(window.scrollX, value);
75
- }
76
- return;
77
- }
78
- this.viewport[this.settings.horizontal ? 'scrollLeft' : 'scrollTop'] = value;
79
- }
80
- getElementParams(element) {
81
- this.checkElement(element);
82
- return element.getBoundingClientRect();
83
- }
84
- getWindowParams() {
85
- const { clientWidth, clientHeight, clientLeft, clientTop } = this.viewport;
86
- return {
87
- 'height': clientHeight,
88
- 'width': clientWidth,
89
- 'top': clientTop,
90
- 'bottom': clientTop + clientHeight,
91
- 'left': clientLeft,
92
- 'right': clientLeft + clientWidth,
93
- 'x': clientLeft,
94
- 'y': clientTop,
95
- 'toJSON': () => null,
96
- };
97
- }
98
- getSize(element) {
99
- return this.getElementParams(element)[this.settings.horizontal ? 'width' : 'height'];
100
- }
101
- getScrollerSize() {
102
- return this.getElementParams(this.element)[this.settings.horizontal ? 'width' : 'height'];
103
- }
104
- getViewportSize() {
105
- if (this.settings.window) {
106
- return this.getWindowParams()[this.settings.horizontal ? 'width' : 'height'];
107
- }
108
- return this.getSize(this.viewport);
109
- }
110
- getSizeStyle(element) {
111
- this.checkElement(element);
112
- const size = element.style[this.settings.horizontal ? 'width' : 'height'];
113
- return parseFloat(size) || 0;
114
- }
115
- setSizeStyle(element, value) {
116
- this.checkElement(element);
117
- value = Math.max(0, Math.round(value));
118
- element.style[this.settings.horizontal ? 'width' : 'height'] = `${value}px`;
119
- }
120
- getEdge(element, direction) {
121
- const { horizontal } = this.settings;
122
- const params = this.getElementParams(element);
123
- const isFwd = direction === Direction.forward;
124
- return params[isFwd ? (horizontal ? 'right' : 'bottom') : (horizontal ? 'left' : 'top')];
125
- }
126
- getViewportEdge(direction) {
127
- const { window, horizontal } = this.settings;
128
- if (window) {
129
- const params = this.getWindowParams();
130
- const isFwd = direction === Direction.forward;
131
- return params[isFwd ? (horizontal ? 'right' : 'bottom') : (horizontal ? 'left' : 'top')];
132
- }
133
- return this.getEdge(this.viewport, direction);
134
- }
135
- makeElementVisible(element) {
136
- this.checkElement(element);
137
- element.style.left = '';
138
- element.style.top = '';
139
- element.style.position = '';
140
- }
141
- hideElement(element) {
142
- this.checkElement(element);
143
- element.style.display = 'none';
144
- }
145
- getOffset() {
146
- const get = (element) => (this.settings.horizontal ? element.offsetLeft : element.offsetTop) || 0;
147
- return get(this.element) - (!this.settings.window ? get(this.viewport) : 0);
148
- }
149
- scrollTo(element, argument) {
150
- this.checkElement(element);
151
- element.scrollIntoView(argument);
152
- }
153
- render(cb) {
154
- const timeoutId = setTimeout(() => cb());
155
- return () => clearTimeout(timeoutId);
156
- }
157
- animate(cb) {
158
- const animationFrameId = requestAnimationFrame(() => cb());
159
- return () => cancelAnimationFrame(animationFrameId);
160
- }
161
- onScroll(handler) {
162
- const eventReceiver = this.settings.window ? window : this.viewport;
163
- eventReceiver.addEventListener('scroll', handler);
164
- return () => eventReceiver.removeEventListener('scroll', handler);
165
- }
166
- }
1
+ import { Direction } from '../inputs/index';
2
+ export class Routines {
3
+ constructor(element, settings, CustomRoutines) {
4
+ this.element = element;
5
+ this.settings = {
6
+ viewport: settings.viewport,
7
+ horizontal: settings.horizontal,
8
+ window: settings.windowViewport
9
+ };
10
+ // provide custom overrides for IRoutines methods
11
+ if (CustomRoutines) {
12
+ const self = this;
13
+ const routines = new CustomRoutines(element, this.settings);
14
+ Object.getOwnPropertyNames(Object.getPrototypeOf(routines))
15
+ .filter(method => method !== 'constructor' &&
16
+ typeof routines[method] === 'function' &&
17
+ typeof self[method] === 'function')
18
+ .forEach(method => self[method] = (...args) => routines[method].apply(this, args));
19
+ }
20
+ // initialization
21
+ this.viewport = this.getViewportElement();
22
+ this.onInit(settings);
23
+ }
24
+ checkElement(element) {
25
+ if (!element) {
26
+ throw new Error('HTML element is not defined');
27
+ }
28
+ }
29
+ getViewportElement() {
30
+ if (this.settings.window) {
31
+ return document.documentElement;
32
+ }
33
+ if (this.settings.viewport) {
34
+ return this.settings.viewport;
35
+ }
36
+ this.checkElement(this.element);
37
+ const parent = this.element.parentElement;
38
+ this.checkElement(parent);
39
+ return parent;
40
+ }
41
+ onInit(settings) {
42
+ if (settings.windowViewport) {
43
+ if ('scrollRestoration' in history) {
44
+ history.scrollRestoration = 'manual';
45
+ }
46
+ }
47
+ if (settings.dismissOverflowAnchor) {
48
+ this.viewport.style.overflowAnchor = 'none';
49
+ }
50
+ }
51
+ findElementBySelector(element, selector) {
52
+ this.checkElement(element);
53
+ return element.querySelector(selector);
54
+ }
55
+ findPaddingElement(direction) {
56
+ return this.findElementBySelector(this.element, `[data-padding-${direction}]`);
57
+ }
58
+ findItemElement(id) {
59
+ return this.findElementBySelector(this.element, `[data-sid="${id}"]`);
60
+ }
61
+ getScrollPosition() {
62
+ if (this.settings.window) {
63
+ return this.settings.horizontal ? window.pageXOffset : window.pageYOffset;
64
+ }
65
+ return this.viewport[this.settings.horizontal ? 'scrollLeft' : 'scrollTop'];
66
+ }
67
+ setScrollPosition(value) {
68
+ value = Math.max(0, value);
69
+ if (this.settings.window) {
70
+ if (this.settings.horizontal) {
71
+ window.scrollTo(value, window.scrollY);
72
+ }
73
+ else {
74
+ window.scrollTo(window.scrollX, value);
75
+ }
76
+ return;
77
+ }
78
+ this.viewport[this.settings.horizontal ? 'scrollLeft' : 'scrollTop'] = value;
79
+ }
80
+ getElementParams(element) {
81
+ this.checkElement(element);
82
+ return element.getBoundingClientRect();
83
+ }
84
+ getWindowParams() {
85
+ const { clientWidth, clientHeight, clientLeft, clientTop } = this.viewport;
86
+ return {
87
+ 'height': clientHeight,
88
+ 'width': clientWidth,
89
+ 'top': clientTop,
90
+ 'bottom': clientTop + clientHeight,
91
+ 'left': clientLeft,
92
+ 'right': clientLeft + clientWidth,
93
+ 'x': clientLeft,
94
+ 'y': clientTop,
95
+ 'toJSON': () => null,
96
+ };
97
+ }
98
+ getSize(element) {
99
+ return this.getElementParams(element)[this.settings.horizontal ? 'width' : 'height'];
100
+ }
101
+ getScrollerSize() {
102
+ return this.getElementParams(this.element)[this.settings.horizontal ? 'width' : 'height'];
103
+ }
104
+ getViewportSize() {
105
+ if (this.settings.window) {
106
+ return this.getWindowParams()[this.settings.horizontal ? 'width' : 'height'];
107
+ }
108
+ return this.getSize(this.viewport);
109
+ }
110
+ getSizeStyle(element) {
111
+ this.checkElement(element);
112
+ const size = element.style[this.settings.horizontal ? 'width' : 'height'];
113
+ return parseFloat(size) || 0;
114
+ }
115
+ setSizeStyle(element, value) {
116
+ this.checkElement(element);
117
+ value = Math.max(0, Math.round(value));
118
+ element.style[this.settings.horizontal ? 'width' : 'height'] = `${value}px`;
119
+ }
120
+ getEdge(element, direction) {
121
+ const { horizontal } = this.settings;
122
+ const params = this.getElementParams(element);
123
+ const isFwd = direction === Direction.forward;
124
+ return params[isFwd ? (horizontal ? 'right' : 'bottom') : (horizontal ? 'left' : 'top')];
125
+ }
126
+ getViewportEdge(direction) {
127
+ const { window, horizontal } = this.settings;
128
+ if (window) {
129
+ const params = this.getWindowParams();
130
+ const isFwd = direction === Direction.forward;
131
+ return params[isFwd ? (horizontal ? 'right' : 'bottom') : (horizontal ? 'left' : 'top')];
132
+ }
133
+ return this.getEdge(this.viewport, direction);
134
+ }
135
+ makeElementVisible(element) {
136
+ this.checkElement(element);
137
+ element.style.left = '';
138
+ element.style.top = '';
139
+ element.style.position = '';
140
+ }
141
+ hideElement(element) {
142
+ this.checkElement(element);
143
+ element.style.display = 'none';
144
+ }
145
+ getOffset() {
146
+ const get = (element) => (this.settings.horizontal ? element.offsetLeft : element.offsetTop) || 0;
147
+ return get(this.element) - (!this.settings.window ? get(this.viewport) : 0);
148
+ }
149
+ scrollTo(element, argument) {
150
+ this.checkElement(element);
151
+ element.scrollIntoView(argument);
152
+ }
153
+ render(cb) {
154
+ const timeoutId = setTimeout(() => cb());
155
+ return () => clearTimeout(timeoutId);
156
+ }
157
+ animate(cb) {
158
+ const animationFrameId = requestAnimationFrame(() => cb());
159
+ return () => cancelAnimationFrame(animationFrameId);
160
+ }
161
+ onScroll(handler) {
162
+ const eventReceiver = this.settings.window ? window : this.viewport;
163
+ eventReceiver.addEventListener('scroll', handler);
164
+ return () => eventReceiver.removeEventListener('scroll', handler);
165
+ }
166
+ }
167
167
  //# sourceMappingURL=domRoutines.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"domRoutines.js","sourceRoot":"","sources":["../../../src/classes/domRoutines.ts"],"names":[],"mappings":"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","sourcesContent":["import { Settings } from './settings';\nimport { Direction } from '../inputs/index';\nimport { IRoutines, CustomRoutinesClass } from '../interfaces/index';\n\ntype MethodContainer = { [key: string]: (...args: unknown[]) => void };\n\nexport class Routines implements IRoutines {\n\n readonly settings: IRoutines['settings'];\n readonly element: HTMLElement;\n readonly viewport: HTMLElement;\n\n constructor(element: HTMLElement, settings: Settings, CustomRoutines?: CustomRoutinesClass) {\n this.element = element;\n this.settings = {\n viewport: settings.viewport,\n horizontal: settings.horizontal,\n window: settings.windowViewport\n };\n // provide custom overrides for IRoutines methods\n if (CustomRoutines) {\n const self = (this as unknown as MethodContainer);\n const routines = new CustomRoutines(element, this.settings) as MethodContainer;\n Object.getOwnPropertyNames(Object.getPrototypeOf(routines))\n .filter(method =>\n method !== 'constructor' &&\n typeof routines[method] === 'function' &&\n typeof self[method] === 'function'\n )\n .forEach(method =>\n self[method] = (...args: unknown[]) =>\n routines[method].apply(this, args)\n );\n }\n // initialization\n this.viewport = this.getViewportElement();\n this.onInit(settings);\n }\n\n checkElement(element: HTMLElement): void {\n if (!element) {\n throw new Error('HTML element is not defined');\n }\n }\n\n getViewportElement(): HTMLElement {\n if (this.settings.window) {\n return document.documentElement;\n }\n if (this.settings.viewport) {\n return this.settings.viewport;\n }\n this.checkElement(this.element);\n const parent = this.element.parentElement as HTMLElement;\n this.checkElement(parent);\n return parent;\n }\n\n onInit(settings: Settings): void {\n if (settings.windowViewport) {\n if ('scrollRestoration' in history) {\n history.scrollRestoration = 'manual';\n }\n }\n if (settings.dismissOverflowAnchor) {\n this.viewport.style.overflowAnchor = 'none';\n }\n }\n\n findElementBySelector(element: HTMLElement, selector: string): HTMLElement | null {\n this.checkElement(element);\n return element.querySelector(selector);\n }\n\n findPaddingElement(direction: Direction): HTMLElement | null {\n return this.findElementBySelector(this.element, `[data-padding-${direction}]`);\n }\n\n findItemElement(id: string): HTMLElement | null {\n return this.findElementBySelector(this.element, `[data-sid=\"${id}\"]`);\n }\n\n getScrollPosition(): number {\n if (this.settings.window) {\n return this.settings.horizontal ? window.pageXOffset : window.pageYOffset;\n }\n return this.viewport[this.settings.horizontal ? 'scrollLeft' : 'scrollTop'];\n }\n\n setScrollPosition(value: number): void {\n value = Math.max(0, value);\n if (this.settings.window) {\n if (this.settings.horizontal) {\n window.scrollTo(value, window.scrollY);\n } else {\n window.scrollTo(window.scrollX, value);\n }\n return;\n }\n this.viewport[this.settings.horizontal ? 'scrollLeft' : 'scrollTop'] = value;\n }\n\n getElementParams(element: HTMLElement): DOMRect {\n this.checkElement(element);\n return element.getBoundingClientRect();\n }\n\n getWindowParams(): DOMRect {\n const { clientWidth, clientHeight, clientLeft, clientTop } = this.viewport;\n return {\n 'height': clientHeight,\n 'width': clientWidth,\n 'top': clientTop,\n 'bottom': clientTop + clientHeight,\n 'left': clientLeft,\n 'right': clientLeft + clientWidth,\n 'x': clientLeft,\n 'y': clientTop,\n 'toJSON': () => null,\n };\n }\n\n getSize(element: HTMLElement): number {\n return this.getElementParams(element)[this.settings.horizontal ? 'width' : 'height'];\n }\n\n getScrollerSize(): number {\n return this.getElementParams(this.element)[this.settings.horizontal ? 'width' : 'height'];\n }\n\n getViewportSize(): number {\n if (this.settings.window) {\n return this.getWindowParams()[this.settings.horizontal ? 'width' : 'height'];\n }\n return this.getSize(this.viewport);\n }\n\n getSizeStyle(element: HTMLElement): number {\n this.checkElement(element);\n const size = element.style[this.settings.horizontal ? 'width' : 'height'];\n return parseFloat(size as string) || 0;\n }\n\n setSizeStyle(element: HTMLElement, value: number): void {\n this.checkElement(element);\n value = Math.max(0, Math.round(value));\n element.style[this.settings.horizontal ? 'width' : 'height'] = `${value}px`;\n }\n\n getEdge(element: HTMLElement, direction: Direction): number {\n const { horizontal } = this.settings;\n const params = this.getElementParams(element);\n const isFwd = direction === Direction.forward;\n return params[isFwd ? (horizontal ? 'right' : 'bottom') : (horizontal ? 'left' : 'top')];\n }\n\n getViewportEdge(direction: Direction): number {\n const { window, horizontal } = this.settings;\n if (window) {\n const params = this.getWindowParams();\n const isFwd = direction === Direction.forward;\n return params[isFwd ? (horizontal ? 'right' : 'bottom') : (horizontal ? 'left' : 'top')];\n }\n return this.getEdge(this.viewport, direction);\n }\n\n makeElementVisible(element: HTMLElement): void {\n this.checkElement(element);\n element.style.left = '';\n element.style.top = '';\n element.style.position = '';\n }\n\n hideElement(element: HTMLElement): void {\n this.checkElement(element);\n element.style.display = 'none';\n }\n\n getOffset(): number {\n const get = (element: HTMLElement) =>\n (this.settings.horizontal ? element.offsetLeft : element.offsetTop) || 0;\n return get(this.element) - (!this.settings.window ? get(this.viewport) : 0);\n }\n\n scrollTo(element: HTMLElement, argument?: boolean | ScrollIntoViewOptions): void {\n this.checkElement(element);\n element.scrollIntoView(argument);\n }\n\n render(cb: () => void): () => void {\n const timeoutId = setTimeout(() => cb());\n return () => clearTimeout(timeoutId);\n }\n\n animate(cb: () => void): () => void {\n const animationFrameId = requestAnimationFrame(() => cb());\n return () => cancelAnimationFrame(animationFrameId);\n }\n\n onScroll(handler: EventListener): () => void {\n const eventReceiver = this.settings.window ? window : this.viewport;\n eventReceiver.addEventListener('scroll', handler);\n return () => eventReceiver.removeEventListener('scroll', handler);\n }\n\n}\n"]}
1
+ {"version":3,"file":"domRoutines.js","sourceRoot":"","sources":["../../../src/classes/domRoutines.ts"],"names":[],"mappings":"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","sourcesContent":["import { Settings } from './settings';\r\nimport { Direction } from '../inputs/index';\r\nimport { IRoutines, CustomRoutinesClass } from '../interfaces/index';\r\n\r\ntype MethodContainer = { [key: string]: (...args: unknown[]) => void };\r\n\r\nexport class Routines implements IRoutines {\r\n\r\n readonly settings: IRoutines['settings'];\r\n readonly element: HTMLElement;\r\n readonly viewport: HTMLElement;\r\n\r\n constructor(element: HTMLElement, settings: Settings, CustomRoutines?: CustomRoutinesClass) {\r\n this.element = element;\r\n this.settings = {\r\n viewport: settings.viewport,\r\n horizontal: settings.horizontal,\r\n window: settings.windowViewport\r\n };\r\n // provide custom overrides for IRoutines methods\r\n if (CustomRoutines) {\r\n const self = (this as unknown as MethodContainer);\r\n const routines = new CustomRoutines(element, this.settings) as MethodContainer;\r\n Object.getOwnPropertyNames(Object.getPrototypeOf(routines))\r\n .filter(method =>\r\n method !== 'constructor' &&\r\n typeof routines[method] === 'function' &&\r\n typeof self[method] === 'function'\r\n )\r\n .forEach(method =>\r\n self[method] = (...args: unknown[]) =>\r\n routines[method].apply(this, args)\r\n );\r\n }\r\n // initialization\r\n this.viewport = this.getViewportElement();\r\n this.onInit(settings);\r\n }\r\n\r\n checkElement(element: HTMLElement): void {\r\n if (!element) {\r\n throw new Error('HTML element is not defined');\r\n }\r\n }\r\n\r\n getViewportElement(): HTMLElement {\r\n if (this.settings.window) {\r\n return document.documentElement;\r\n }\r\n if (this.settings.viewport) {\r\n return this.settings.viewport;\r\n }\r\n this.checkElement(this.element);\r\n const parent = this.element.parentElement as HTMLElement;\r\n this.checkElement(parent);\r\n return parent;\r\n }\r\n\r\n onInit(settings: Settings): void {\r\n if (settings.windowViewport) {\r\n if ('scrollRestoration' in history) {\r\n history.scrollRestoration = 'manual';\r\n }\r\n }\r\n if (settings.dismissOverflowAnchor) {\r\n this.viewport.style.overflowAnchor = 'none';\r\n }\r\n }\r\n\r\n findElementBySelector(element: HTMLElement, selector: string): HTMLElement | null {\r\n this.checkElement(element);\r\n return element.querySelector(selector);\r\n }\r\n\r\n findPaddingElement(direction: Direction): HTMLElement | null {\r\n return this.findElementBySelector(this.element, `[data-padding-${direction}]`);\r\n }\r\n\r\n findItemElement(id: string): HTMLElement | null {\r\n return this.findElementBySelector(this.element, `[data-sid=\"${id}\"]`);\r\n }\r\n\r\n getScrollPosition(): number {\r\n if (this.settings.window) {\r\n return this.settings.horizontal ? window.pageXOffset : window.pageYOffset;\r\n }\r\n return this.viewport[this.settings.horizontal ? 'scrollLeft' : 'scrollTop'];\r\n }\r\n\r\n setScrollPosition(value: number): void {\r\n value = Math.max(0, value);\r\n if (this.settings.window) {\r\n if (this.settings.horizontal) {\r\n window.scrollTo(value, window.scrollY);\r\n } else {\r\n window.scrollTo(window.scrollX, value);\r\n }\r\n return;\r\n }\r\n this.viewport[this.settings.horizontal ? 'scrollLeft' : 'scrollTop'] = value;\r\n }\r\n\r\n getElementParams(element: HTMLElement): DOMRect {\r\n this.checkElement(element);\r\n return element.getBoundingClientRect();\r\n }\r\n\r\n getWindowParams(): DOMRect {\r\n const { clientWidth, clientHeight, clientLeft, clientTop } = this.viewport;\r\n return {\r\n 'height': clientHeight,\r\n 'width': clientWidth,\r\n 'top': clientTop,\r\n 'bottom': clientTop + clientHeight,\r\n 'left': clientLeft,\r\n 'right': clientLeft + clientWidth,\r\n 'x': clientLeft,\r\n 'y': clientTop,\r\n 'toJSON': () => null,\r\n };\r\n }\r\n\r\n getSize(element: HTMLElement): number {\r\n return this.getElementParams(element)[this.settings.horizontal ? 'width' : 'height'];\r\n }\r\n\r\n getScrollerSize(): number {\r\n return this.getElementParams(this.element)[this.settings.horizontal ? 'width' : 'height'];\r\n }\r\n\r\n getViewportSize(): number {\r\n if (this.settings.window) {\r\n return this.getWindowParams()[this.settings.horizontal ? 'width' : 'height'];\r\n }\r\n return this.getSize(this.viewport);\r\n }\r\n\r\n getSizeStyle(element: HTMLElement): number {\r\n this.checkElement(element);\r\n const size = element.style[this.settings.horizontal ? 'width' : 'height'];\r\n return parseFloat(size as string) || 0;\r\n }\r\n\r\n setSizeStyle(element: HTMLElement, value: number): void {\r\n this.checkElement(element);\r\n value = Math.max(0, Math.round(value));\r\n element.style[this.settings.horizontal ? 'width' : 'height'] = `${value}px`;\r\n }\r\n\r\n getEdge(element: HTMLElement, direction: Direction): number {\r\n const { horizontal } = this.settings;\r\n const params = this.getElementParams(element);\r\n const isFwd = direction === Direction.forward;\r\n return params[isFwd ? (horizontal ? 'right' : 'bottom') : (horizontal ? 'left' : 'top')];\r\n }\r\n\r\n getViewportEdge(direction: Direction): number {\r\n const { window, horizontal } = this.settings;\r\n if (window) {\r\n const params = this.getWindowParams();\r\n const isFwd = direction === Direction.forward;\r\n return params[isFwd ? (horizontal ? 'right' : 'bottom') : (horizontal ? 'left' : 'top')];\r\n }\r\n return this.getEdge(this.viewport, direction);\r\n }\r\n\r\n makeElementVisible(element: HTMLElement): void {\r\n this.checkElement(element);\r\n element.style.left = '';\r\n element.style.top = '';\r\n element.style.position = '';\r\n }\r\n\r\n hideElement(element: HTMLElement): void {\r\n this.checkElement(element);\r\n element.style.display = 'none';\r\n }\r\n\r\n getOffset(): number {\r\n const get = (element: HTMLElement) =>\r\n (this.settings.horizontal ? element.offsetLeft : element.offsetTop) || 0;\r\n return get(this.element) - (!this.settings.window ? get(this.viewport) : 0);\r\n }\r\n\r\n scrollTo(element: HTMLElement, argument?: boolean | ScrollIntoViewOptions): void {\r\n this.checkElement(element);\r\n element.scrollIntoView(argument);\r\n }\r\n\r\n render(cb: () => void): () => void {\r\n const timeoutId = setTimeout(() => cb());\r\n return () => clearTimeout(timeoutId);\r\n }\r\n\r\n animate(cb: () => void): () => void {\r\n const animationFrameId = requestAnimationFrame(() => cb());\r\n return () => cancelAnimationFrame(animationFrameId);\r\n }\r\n\r\n onScroll(handler: EventListener): () => void {\r\n const eventReceiver = this.settings.window ? window : this.viewport;\r\n eventReceiver.addEventListener('scroll', handler);\r\n return () => eventReceiver.removeEventListener('scroll', handler);\r\n }\r\n\r\n}\r\n"]}