ng-virtual-list 18.11.2 → 18.12.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 (274) hide show
  1. package/README.md +115 -111
  2. package/esm2022/lib/components/ng-list-item/base/base-virtual-list-item-component.mjs +170 -61
  3. package/esm2022/lib/components/ng-list-item/const/index.mjs +41 -2
  4. package/esm2022/lib/components/ng-list-item/interfaces/template-context.mjs +1 -1
  5. package/esm2022/lib/components/ng-list-item/ng-virtual-list-item.component.mjs +55 -51
  6. package/esm2022/lib/components/ng-list-item/ng-virtual-list-item.module.mjs +5 -5
  7. package/esm2022/lib/components/ng-list-item/utils/create-display-id.mjs +7 -1
  8. package/esm2022/lib/components/ng-list-item/utils/get-element-by-index.mjs +17 -3
  9. package/esm2022/lib/components/ng-list-item/utils/index.mjs +3 -2
  10. package/esm2022/lib/components/ng-list-item/utils/matrix-3d.mjs +18 -0
  11. package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.component.mjs +172 -47
  12. package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.component.mjs +32 -16
  13. package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.module.mjs +5 -5
  14. package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.mjs +58 -34
  15. package/esm2022/lib/components/ng-prerender-container/core/prerender-track-box.mjs +37 -7
  16. package/esm2022/lib/components/ng-prerender-container/interfaces/refresh-params.mjs +1 -1
  17. package/esm2022/lib/components/ng-prerender-container/ng-prerender-container.component.mjs +58 -28
  18. package/esm2022/lib/components/ng-scroll-bar/const/index.mjs +8 -1
  19. package/esm2022/lib/components/ng-scroll-bar/interfaces/scroll-bar-template-context.mjs +1 -1
  20. package/esm2022/lib/components/ng-scroll-bar/ng-scroll-bar.component.mjs +236 -88
  21. package/esm2022/lib/components/ng-scroll-view/base/base-scroll-view.component.mjs +170 -44
  22. package/esm2022/lib/components/ng-scroll-view/const/index.mjs +4 -2
  23. package/esm2022/lib/components/ng-scroll-view/interfaces/scroll-to-params.mjs +1 -1
  24. package/esm2022/lib/components/ng-scroll-view/ng-scroll-view.component.mjs +610 -99
  25. package/esm2022/lib/components/ng-scroll-view/utils/calculate-direction.mjs +7 -1
  26. package/esm2022/lib/components/ng-scroll-view/utils/calculate-velocity.mjs +12 -0
  27. package/esm2022/lib/components/ng-scroll-view/utils/get-dir.mjs +10 -0
  28. package/esm2022/lib/components/ng-scroll-view/utils/index.mjs +4 -2
  29. package/esm2022/lib/components/ng-scroll-view/utils/matrix-3d.mjs +15 -0
  30. package/esm2022/lib/components/ng-scroller/enums/scroller-directions.mjs +1 -1
  31. package/esm2022/lib/components/ng-scroller/ng-scroller.component.mjs +342 -160
  32. package/esm2022/lib/const/index.mjs +50 -10
  33. package/esm2022/lib/core/cache-map.mjs +1 -54
  34. package/esm2022/lib/core/const/index.mjs +3 -0
  35. package/esm2022/lib/core/enums/index.mjs +3 -0
  36. package/esm2022/lib/core/enums/item-display-methods.mjs +14 -0
  37. package/esm2022/lib/core/events/index.mjs +3 -0
  38. package/esm2022/lib/core/events/track-box-events.mjs +12 -0
  39. package/esm2022/lib/core/interfaces/get-item-position-options.mjs +2 -0
  40. package/esm2022/lib/core/interfaces/get-metrics-returns.mjs +2 -0
  41. package/esm2022/lib/core/interfaces/index.mjs +2 -0
  42. package/esm2022/lib/core/interfaces/item.mjs +2 -0
  43. package/esm2022/lib/core/interfaces/metrics.mjs +2 -0
  44. package/esm2022/lib/core/interfaces/recalculate-metrics-options.mjs +2 -0
  45. package/esm2022/lib/core/interfaces/update-collection-options.mjs +2 -0
  46. package/esm2022/lib/core/interfaces/update-collection-returns.mjs +2 -0
  47. package/esm2022/lib/core/track-box.mjs +601 -191
  48. package/esm2022/lib/core/tracker.mjs +14 -8
  49. package/esm2022/lib/core/types/cache-map-events.mjs +2 -0
  50. package/esm2022/lib/core/types/cache-map-listeners.mjs +2 -0
  51. package/esm2022/lib/core/types/cache.mjs +2 -0
  52. package/esm2022/lib/core/types/index.mjs +2 -0
  53. package/esm2022/lib/core/types/on-change-event-listener.mjs +2 -0
  54. package/esm2022/lib/core/types/on-tick-event-listener.mjs +2 -0
  55. package/esm2022/lib/core/utils/get-service-id-prop.mjs +10 -0
  56. package/esm2022/lib/core/utils/index.mjs +3 -0
  57. package/esm2022/lib/directives/index.mjs +3 -3
  58. package/esm2022/lib/directives/locale-sensitive/locale-sensitive.directive.mjs +34 -13
  59. package/esm2022/lib/directives/virtual-click/virtual-click.directive.mjs +67 -0
  60. package/esm2022/lib/directives/virtual-click/virtual-click.module.mjs +19 -0
  61. package/esm2022/lib/enums/alignments.mjs +12 -0
  62. package/esm2022/lib/enums/collapsing-modes.mjs +22 -0
  63. package/esm2022/lib/enums/index.mjs +8 -4
  64. package/esm2022/lib/enums/selecting-modes-types.mjs +22 -0
  65. package/esm2022/lib/enums/selecting-modes.mjs +22 -0
  66. package/esm2022/lib/enums/snap-to-item-aligns.mjs +22 -0
  67. package/esm2022/lib/enums/spreading-modes.mjs +18 -0
  68. package/esm2022/lib/interfaces/animation-params.mjs +1 -1
  69. package/esm2022/lib/interfaces/base-virtual-list-item-component.mjs +2 -9
  70. package/esm2022/lib/interfaces/index.mjs +1 -1
  71. package/esm2022/lib/interfaces/item-transformation.mjs +2 -0
  72. package/esm2022/lib/interfaces/point.mjs +2 -0
  73. package/esm2022/lib/interfaces/scroll-options.mjs +1 -1
  74. package/esm2022/lib/interfaces/scroll-params.mjs +1 -1
  75. package/esm2022/lib/models/item-config-map.model.mjs +1 -1
  76. package/esm2022/lib/models/item.model.mjs +1 -1
  77. package/esm2022/lib/models/render-item-config.model.mjs +1 -1
  78. package/esm2022/lib/models/render-item-measures.model.mjs +1 -1
  79. package/esm2022/lib/ng-virtual-list-public.service.mjs +6 -7
  80. package/esm2022/lib/ng-virtual-list.component.mjs +2033 -903
  81. package/esm2022/lib/ng-virtual-list.service.mjs +91 -30
  82. package/esm2022/lib/transformations/deck-of-cards-3d.mjs +57 -0
  83. package/esm2022/lib/transformations/deck-of-cards.mjs +54 -0
  84. package/esm2022/lib/transformations/event-horizon.mjs +47 -0
  85. package/esm2022/lib/transformations/index.mjs +13 -0
  86. package/esm2022/lib/transformations/linear.mjs +47 -0
  87. package/esm2022/lib/transformations/swipe-3d.mjs +51 -0
  88. package/esm2022/lib/types/alignment.mjs +2 -0
  89. package/esm2022/lib/types/arithmetic-expression.mjs +2 -0
  90. package/esm2022/lib/types/collapsing-mode.mjs +2 -0
  91. package/esm2022/lib/types/collection-mode.mjs +2 -0
  92. package/esm2022/lib/types/color.mjs +2 -0
  93. package/esm2022/lib/types/direction.mjs +2 -0
  94. package/esm2022/lib/types/float-or-persentage-value.mjs +2 -0
  95. package/esm2022/lib/types/focus-item-params.mjs +1 -1
  96. package/esm2022/lib/types/gradient-color-position.mjs +1 -1
  97. package/esm2022/lib/types/index.mjs +1 -1
  98. package/esm2022/lib/types/item-transform.mjs +2 -0
  99. package/esm2022/lib/types/scroll-direction.mjs +1 -1
  100. package/esm2022/lib/types/selecting-mode.mjs +2 -0
  101. package/esm2022/lib/types/snap-to-item-align.mjs +2 -0
  102. package/esm2022/lib/types/snapping-distance.mjs +2 -0
  103. package/esm2022/lib/types/snapping-method.mjs +2 -0
  104. package/esm2022/lib/types/spreading-mode.mjs +2 -0
  105. package/esm2022/lib/types/text-direction.mjs +2 -0
  106. package/esm2022/lib/utils/animator/animator.mjs +28 -8
  107. package/esm2022/lib/utils/animator/const/index.mjs +2 -0
  108. package/esm2022/lib/utils/animator/index.mjs +3 -2
  109. package/esm2022/lib/utils/animator/interfaces/animator-params.mjs +2 -0
  110. package/esm2022/lib/utils/animator/interfaces/animator-update-data.mjs +2 -0
  111. package/esm2022/lib/utils/animator/interfaces/index.mjs +2 -0
  112. package/esm2022/lib/utils/animator/types/easing.mjs +1 -1
  113. package/esm2022/lib/utils/disposable-component.mjs +27 -0
  114. package/esm2022/lib/utils/event-emitter/event-emitter.mjs +1 -1
  115. package/esm2022/lib/utils/get-scroll-state-version.mjs +12 -0
  116. package/esm2022/lib/utils/is-collapse-mode.mjs +18 -0
  117. package/esm2022/lib/utils/is-collection-mode.mjs +1 -1
  118. package/esm2022/lib/utils/is-direction.mjs +1 -1
  119. package/esm2022/lib/utils/is-persentage-value.mjs +14 -0
  120. package/esm2022/lib/utils/is-select-mode.mjs +18 -0
  121. package/esm2022/lib/utils/is-spreading-mode.mjs +15 -0
  122. package/esm2022/lib/utils/list-validators.mjs +1 -1
  123. package/esm2022/lib/utils/normalize-collection.mjs +42 -0
  124. package/esm2022/lib/utils/object.mjs +1 -1
  125. package/esm2022/lib/utils/parse-arithmetic-expression.mjs +53 -0
  126. package/esm2022/lib/utils/parse-float-or-persentage-value.mjs +17 -0
  127. package/esm2022/lib/utils/scrolling-direction.mjs +29 -0
  128. package/esm2022/lib/utils/snapping-method.mjs +1 -1
  129. package/esm2022/public-api.mjs +4 -1
  130. package/fesm2022/ng-virtual-list.mjs +7545 -3904
  131. package/fesm2022/ng-virtual-list.mjs.map +1 -1
  132. package/lib/components/ng-list-item/base/base-virtual-list-item-component.d.ts +40 -16
  133. package/lib/components/ng-list-item/const/index.d.ts +3 -1
  134. package/lib/components/ng-list-item/interfaces/template-context.d.ts +1 -1
  135. package/lib/components/ng-list-item/ng-virtual-list-item.component.d.ts +5 -2
  136. package/lib/components/ng-list-item/ng-virtual-list-item.module.d.ts +2 -2
  137. package/lib/components/ng-list-item/utils/create-display-id.d.ts +6 -0
  138. package/lib/components/ng-list-item/utils/get-element-by-index.d.ts +15 -1
  139. package/lib/components/ng-list-item/utils/index.d.ts +2 -1
  140. package/lib/components/ng-list-item/utils/matrix-3d.d.ts +7 -0
  141. package/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.component.d.ts +69 -26
  142. package/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.component.d.ts +2 -2
  143. package/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.module.d.ts +2 -2
  144. package/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.d.ts +33 -12
  145. package/lib/components/ng-prerender-container/interfaces/refresh-params.d.ts +1 -0
  146. package/lib/components/ng-prerender-container/ng-prerender-container.component.d.ts +20 -17
  147. package/lib/components/ng-scroll-bar/const/index.d.ts +2 -0
  148. package/lib/components/ng-scroll-bar/interfaces/scroll-bar-template-context.d.ts +2 -2
  149. package/lib/components/ng-scroll-bar/ng-scroll-bar.component.d.ts +75 -24
  150. package/lib/components/ng-scroll-view/base/base-scroll-view.component.d.ts +49 -16
  151. package/lib/components/ng-scroll-view/const/index.d.ts +3 -1
  152. package/lib/components/ng-scroll-view/interfaces/scroll-to-params.d.ts +4 -1
  153. package/lib/components/ng-scroll-view/ng-scroll-view.component.d.ts +79 -11
  154. package/lib/components/ng-scroll-view/utils/calculate-direction.d.ts +6 -0
  155. package/lib/components/ng-scroll-view/utils/calculate-velocity.d.ts +7 -0
  156. package/lib/components/ng-scroll-view/utils/get-dir.d.ts +7 -0
  157. package/lib/components/ng-scroll-view/utils/index.d.ts +3 -1
  158. package/lib/components/ng-scroll-view/utils/matrix-3d.d.ts +7 -0
  159. package/lib/components/ng-scroller/enums/scroller-directions.d.ts +2 -1
  160. package/lib/components/ng-scroller/ng-scroller.component.d.ts +111 -47
  161. package/lib/const/index.d.ts +46 -5
  162. package/lib/core/cache-map.d.ts +0 -10
  163. package/lib/core/const/index.d.ts +1 -0
  164. package/lib/core/enums/index.d.ts +2 -0
  165. package/lib/core/enums/item-display-methods.d.ts +12 -0
  166. package/lib/core/events/index.d.ts +2 -0
  167. package/lib/core/events/track-box-events.d.ts +10 -0
  168. package/lib/core/interfaces/get-item-position-options.d.ts +10 -0
  169. package/lib/core/interfaces/get-metrics-returns.d.ts +11 -0
  170. package/lib/core/interfaces/index.d.ts +8 -0
  171. package/lib/core/interfaces/item.d.ts +9 -0
  172. package/lib/core/interfaces/metrics.d.ts +51 -0
  173. package/lib/core/interfaces/recalculate-metrics-options.d.ts +32 -0
  174. package/lib/core/interfaces/update-collection-options.d.ts +10 -0
  175. package/lib/core/interfaces/update-collection-returns.d.ts +14 -0
  176. package/lib/core/track-box.d.ts +25 -95
  177. package/lib/core/tracker.d.ts +1 -1
  178. package/lib/core/types/cache-map-events.d.ts +8 -0
  179. package/lib/core/types/cache-map-listeners.d.ts +9 -0
  180. package/lib/core/types/cache.d.ts +12 -0
  181. package/lib/core/types/index.d.ts +6 -0
  182. package/lib/core/types/on-change-event-listener.d.ts +7 -0
  183. package/lib/core/types/on-tick-event-listener.d.ts +7 -0
  184. package/lib/core/utils/get-service-id-prop.d.ts +7 -0
  185. package/lib/core/utils/index.d.ts +2 -0
  186. package/lib/directives/index.d.ts +2 -2
  187. package/lib/directives/locale-sensitive/locale-sensitive.directive.d.ts +16 -6
  188. package/lib/directives/virtual-click/virtual-click.directive.d.ts +22 -0
  189. package/lib/directives/virtual-click/virtual-click.module.d.ts +8 -0
  190. package/lib/enums/alignments.d.ts +10 -0
  191. package/lib/enums/collapsing-modes.d.ts +20 -0
  192. package/lib/enums/index.d.ts +7 -9
  193. package/lib/enums/{method-for-selecting-types.d.ts → selecting-modes-types.d.ts} +3 -3
  194. package/lib/enums/{methods-for-selecting.d.ts → selecting-modes.d.ts} +3 -3
  195. package/lib/enums/snap-to-item-aligns.d.ts +20 -0
  196. package/lib/enums/spreading-modes.d.ts +16 -0
  197. package/lib/interfaces/animation-params.d.ts +1 -0
  198. package/lib/interfaces/base-virtual-list-item-component.d.ts +13 -13
  199. package/lib/interfaces/index.d.ts +3 -2
  200. package/lib/interfaces/item-transformation.d.ts +22 -0
  201. package/lib/interfaces/point.d.ts +16 -0
  202. package/lib/interfaces/scroll-options.d.ts +4 -0
  203. package/lib/interfaces/scroll-params.d.ts +3 -2
  204. package/lib/models/item-config-map.model.d.ts +5 -0
  205. package/lib/models/item.model.d.ts +7 -0
  206. package/lib/models/render-item-config.model.d.ts +50 -0
  207. package/lib/models/render-item-measures.model.d.ts +71 -0
  208. package/lib/ng-virtual-list-public.service.d.ts +4 -5
  209. package/lib/ng-virtual-list.component.d.ts +462 -135
  210. package/lib/ng-virtual-list.service.d.ts +33 -12
  211. package/lib/transformations/deck-of-cards-3d.d.ts +54 -0
  212. package/lib/transformations/deck-of-cards.d.ts +50 -0
  213. package/lib/transformations/event-horizon.d.ts +26 -0
  214. package/lib/transformations/index.d.ts +7 -0
  215. package/lib/transformations/linear.d.ts +26 -0
  216. package/lib/transformations/swipe-3d.d.ts +38 -0
  217. package/lib/types/alignment.d.ts +8 -0
  218. package/lib/types/arithmetic-expression.d.ts +10 -0
  219. package/lib/types/collapsing-mode.d.ts +8 -0
  220. package/lib/{enums → types}/collection-mode.d.ts +1 -1
  221. package/lib/types/color.d.ts +4 -0
  222. package/lib/{enums → types}/direction.d.ts +1 -1
  223. package/lib/types/float-or-persentage-value.d.ts +7 -0
  224. package/lib/types/focus-item-params.d.ts +6 -0
  225. package/lib/types/gradient-color-position.d.ts +1 -1
  226. package/lib/types/index.d.ts +15 -1
  227. package/lib/types/item-transform.d.ts +9 -0
  228. package/lib/types/scroll-direction.d.ts +2 -0
  229. package/lib/types/selecting-mode.d.ts +8 -0
  230. package/lib/types/snap-to-item-align.d.ts +8 -0
  231. package/lib/types/snapping-distance.d.ts +8 -0
  232. package/lib/{enums → types}/snapping-method.d.ts +1 -1
  233. package/lib/types/spreading-mode.d.ts +8 -0
  234. package/lib/{enums → types}/text-direction.d.ts +1 -1
  235. package/lib/utils/animator/animator.d.ts +10 -17
  236. package/lib/utils/animator/const/index.d.ts +1 -0
  237. package/lib/utils/animator/index.d.ts +2 -1
  238. package/lib/utils/animator/interfaces/animator-params.d.ts +18 -0
  239. package/lib/utils/animator/interfaces/animator-update-data.d.ts +13 -0
  240. package/lib/utils/animator/interfaces/index.d.ts +3 -0
  241. package/lib/utils/animator/types/easing.d.ts +6 -0
  242. package/lib/utils/disposable-component.d.ts +15 -0
  243. package/lib/utils/get-scroll-state-version.d.ts +1 -0
  244. package/lib/utils/is-collapse-mode.d.ts +8 -0
  245. package/lib/utils/is-collection-mode.d.ts +1 -1
  246. package/lib/utils/is-direction.d.ts +1 -1
  247. package/lib/utils/is-persentage-value.d.ts +7 -0
  248. package/lib/utils/is-select-mode.d.ts +8 -0
  249. package/lib/utils/is-spreading-mode.d.ts +8 -0
  250. package/lib/utils/list-validators.d.ts +1 -1
  251. package/lib/utils/normalize-collection.d.ts +8 -0
  252. package/lib/utils/object.d.ts +1 -1
  253. package/lib/utils/parse-arithmetic-expression.d.ts +8 -0
  254. package/lib/utils/parse-float-or-persentage-value.d.ts +7 -0
  255. package/lib/utils/scrolling-direction.d.ts +17 -0
  256. package/lib/utils/snapping-method.d.ts +1 -1
  257. package/package.json +1 -1
  258. package/public-api.d.ts +3 -0
  259. package/esm2022/lib/components/ng-scroller/const/index.mjs +0 -2
  260. package/esm2022/lib/directives/item-click/item-click.directive.mjs +0 -59
  261. package/esm2022/lib/directives/item-click/item-click.module.mjs +0 -19
  262. package/esm2022/lib/enums/collection-mode.mjs +0 -2
  263. package/esm2022/lib/enums/direction.mjs +0 -2
  264. package/esm2022/lib/enums/method-for-selecting-types.mjs +0 -22
  265. package/esm2022/lib/enums/method-for-selecting.mjs +0 -2
  266. package/esm2022/lib/enums/methods-for-selecting.mjs +0 -22
  267. package/esm2022/lib/enums/snapping-method.mjs +0 -2
  268. package/esm2022/lib/enums/text-direction.mjs +0 -2
  269. package/esm2022/lib/utils/is-method-for-selecting.mjs +0 -18
  270. package/lib/components/ng-scroller/const/index.d.ts +0 -1
  271. package/lib/directives/item-click/item-click.directive.d.ts +0 -19
  272. package/lib/directives/item-click/item-click.module.d.ts +0 -8
  273. package/lib/enums/method-for-selecting.d.ts +0 -8
  274. package/lib/utils/is-method-for-selecting.d.ts +0 -8
@@ -1 +1 @@
1
- {"version":3,"file":"ng-virtual-list.mjs","sources":["../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/enums/scrollbar-states.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.service.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar-public.service.ts","../../../projects/ng-virtual-list/src/lib/enums/collection-modes.ts","../../../projects/ng-virtual-list/src/lib/enums/directions.ts","../../../projects/ng-virtual-list/src/lib/enums/methods-for-selecting.ts","../../../projects/ng-virtual-list/src/lib/enums/snapping-methods.ts","../../../projects/ng-virtual-list/src/lib/enums/focus-alignments.ts","../../../projects/ng-virtual-list/src/lib/enums/text-directions.ts","../../../projects/ng-virtual-list/src/lib/const/index.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/const/index.ts","../../../projects/ng-virtual-list/src/lib/utils/debounce.ts","../../../projects/ng-virtual-list/src/lib/utils/toggle-class-name.ts","../../../projects/ng-virtual-list/src/lib/utils/scroll-event.ts","../../../projects/ng-virtual-list/src/lib/utils/event-emitter/event-emitter.ts","../../../projects/ng-virtual-list/src/lib/utils/cmap.ts","../../../projects/ng-virtual-list/src/lib/core/cache-map.ts","../../../projects/ng-virtual-list/src/lib/core/tracker.ts","../../../projects/ng-virtual-list/src/lib/utils/buffer-interpolation.ts","../../../projects/ng-virtual-list/src/lib/core/track-box.ts","../../../projects/ng-virtual-list/src/lib/enums/method-for-selecting-types.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/utils/get-element-by-index.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/utils/create-display-id.ts","../../../projects/ng-virtual-list/src/lib/utils/validation.ts","../../../projects/ng-virtual-list/src/lib/utils/list-validators.ts","../../../projects/ng-virtual-list/src/lib/utils/get-selector-by-item-id.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list.service.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list-public.service.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/base/base-virtual-list-item-component.ts","../../../projects/ng-virtual-list/src/lib/directives/item-click/item-click.directive.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/ng-virtual-list-item.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/ng-virtual-list-item.component.html","../../../projects/ng-virtual-list/src/lib/utils/snapping-method.ts","../../../projects/ng-virtual-list/src/lib/utils/is-direction.ts","../../../projects/ng-virtual-list/src/lib/utils/is-method-for-selecting.ts","../../../projects/ng-virtual-list/src/lib/utils/object.ts","../../../projects/ng-virtual-list/src/lib/utils/is-collection-mode.ts","../../../projects/ng-virtual-list/src/lib/utils/screen-reader-formatter.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/enums/scroller-direction.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/utils/scroll-box.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/enums/scroller-direction.ts","../../../projects/ng-virtual-list/src/lib/utils/animator/ease.ts","../../../projects/ng-virtual-list/src/lib/utils/animator/animator.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/const/index.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/calculate-direction.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/scroll-box.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/base/base-scroll-view.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/ng-scroll-view.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/const/index.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.component.html","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/const/index.ts","../../../projects/ng-virtual-list/src/lib/directives/locale-sensitive/locale-sensitive.directive.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/ng-scroller.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/ng-scroller.component.html","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/events/index.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/core/prerender-track-box.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.html","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.component.html","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/ng-prerender-container.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/ng-prerender-container.component.html","../../../projects/ng-virtual-list/src/lib/ng-virtual-list.component.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list.component.html","../../../projects/ng-virtual-list/src/lib/directives/locale-sensitive/locale-sensitive.module.ts","../../../projects/ng-virtual-list/src/lib/directives/item-click/item-click.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/ng-virtual-list-item.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/ng-scroller.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/ng-prerender-container.module.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list.module.ts","../../../projects/ng-virtual-list/src/public-api.ts","../../../projects/ng-virtual-list/src/ng-virtual-list.ts"],"sourcesContent":["export enum ScrollbarStates {\r\n NORMAL,\r\n PRESSED,\r\n HOVER,\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\nimport { ScrollbarState } from './types';\r\nimport { ScrollbarStates } from './enums';\r\n\r\n/**\r\n * NgScrollBarService\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.service.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgScrollBarService {\r\n private _$click = new Subject<PointerEvent | MouseEvent>();\r\n readonly $click = this._$click.asObservable();\r\n\r\n private _$state = new BehaviorSubject<ScrollbarState>(ScrollbarStates.NORMAL);\r\n readonly $state = this._$state.asObservable();\r\n\r\n set state(v: ScrollbarState) {\r\n if (this._$state.getValue() !== v) {\r\n this._$state.next(v);\r\n }\r\n }\r\n get state() { return this._$state.getValue(); }\r\n\r\n click(event: PointerEvent | MouseEvent) {\r\n this._$click.next(event);\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { NgScrollBarService } from './ng-scroll-bar.service';\r\n\r\n/**\r\n * NgScrollBarService\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar-public.service.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgScrollBarPublicService {\r\n private _internalService = inject(NgScrollBarService);\r\n\r\n get $click() { return this._internalService.$click; }\r\n\r\n get $state() { return this._internalService.$state; }\r\n}\r\n","/**\r\n * Action modes for collection elements.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/enums/collection-modes.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum CollectionModes {\r\n /**\r\n * When adding elements to the beginning of the collection, the scroll remains at the current position.\r\n */\r\n NORMAL = 'normal',\r\n /**\r\n * When adding elements to the beginning of the collection, the scroll is shifted by the sum of the sizes of the new elements.\r\n */\r\n LAZY = 'lazy',\r\n}","/**\r\n * Axis of the arrangement of virtual list elements.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/enums/directions.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum Directions {\r\n /**\r\n * Horizontal axis.\r\n */\r\n HORIZONTAL = 'horizontal',\r\n /**\r\n * Vertical axis.\r\n */\r\n VERTICAL = 'vertical',\r\n}","/**\r\n * Methods for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/enums/methods-for-selecting.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum MethodsForSelecting {\r\n /**\r\n * List items are not selectable.\r\n */\r\n NONE = 'none',\r\n /**\r\n * List items are selected one by one.\r\n */\r\n SELECT = 'select',\r\n /**\r\n * Multiple selection of list items.\r\n */\r\n MULTI_SELECT = 'multi-select',\r\n}","/**\r\n * Snapping method.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/enums/snapping-method.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum SnappingMethods {\r\n /**\r\n * The group is rendered on a background.\r\n */\r\n STANDART = 'standart',\r\n /**\r\n * A mask is applied to the viewport area so that the background is displayed underneath the attached group.\r\n */\r\n ADVANCED = 'advanced',\r\n}","/**\r\n * Focus Alignments.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/enums/focus-alignments.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum FocusAlignments {\r\n NONE = 'none',\r\n START = 'start',\r\n CENTER = 'center',\r\n END = 'end',\r\n}","/**\r\n * TextDirections.\r\n * RTL - right-to-left.\r\n * LTR - left-to-right.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/enums/text-directions.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum TextDirections {\r\n RTL = 'rtl',\r\n LTR = 'ltr',\r\n}","import { CollectionModes, MethodsForSelecting, SnappingMethods, TextDirections } from \"../enums\";\r\nimport { Directions } from \"../enums/directions\";\r\nimport { IAnimationParams, IScrollingSettings } from '../interfaces';\r\n\r\nexport const MAX_REGULAR_SNAPED_COMPONENTS = 2;\r\n\r\nexport const DEFAULT_ITEM_SIZE = 24;\r\n\r\nexport const DEFAULT_BUFFER_SIZE = 2;\r\n\r\nexport const DEFAULT_MAX_BUFFER_SIZE = 10;\r\n\r\nexport const DEFAULT_LIST_SIZE = 400;\r\n\r\nexport const DEFAULT_CLICK_DISTANCE = 40;\r\n\r\nexport const DEFAULT_WAIT_FOR_PREPARATION = true;\r\n\r\nexport const DEFAULT_SCROLLBAR_ENABLED = true;\r\n\r\nexport const DEFAULT_SCROLLBAR_INTERACTIVE = true;\r\n\r\nexport const DEFAULT_SCROLL_BEHAVIOR: ScrollBehavior = 'smooth';\r\n\r\nexport const NAVIGATION_BY_KEYBOARD_TIMER = 50;\r\n\r\nexport const DEFAULT_ANIMATION_PARAMS: IAnimationParams = {\r\n scrollToItem: 50,\r\n navigateToItem: 150,\r\n navigateByKeyboard: NAVIGATION_BY_KEYBOARD_TIMER,\r\n};\r\n\r\nexport const DEFAULT_SCROLLING_SETTINGS: IScrollingSettings = {\r\n frictionalForce: 0.035,\r\n maxDuration: 4000,\r\n mass: 0.005,\r\n maxDistance: 12500,\r\n speedScale: 15,\r\n optimization: true,\r\n};\r\n\r\nexport const DEFAULT_OVERSCROLL_ENABLED = true;\r\n\r\nexport const DEFAULT_SNAP = false;\r\n\r\nexport const DEFAULT_SELECT_BY_CLICK = true;\r\n\r\nexport const DEFAULT_COLLAPSE_BY_CLICK = true;\r\n\r\nexport const DEFAULT_ENABLED_BUFFER_OPTIMIZATION = false;\r\n\r\nexport const DEFAULT_DYNAMIC_SIZE = true;\r\n\r\nexport const DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET = 1;\r\n\r\nexport const DEFAULT_SNAP_SCROLLTO_START = true;\r\n\r\nexport const DEFAULT_SNAP_SCROLLTO_END = true;\r\n\r\nexport const TRACK_BY_PROPERTY_NAME = 'id';\r\n\r\nexport const DEFAULT_DIRECTION = Directions.VERTICAL;\r\n\r\nexport const DEFAULT_COLLECTION_MODE = CollectionModes.NORMAL;\r\n\r\nexport const DISPLAY_OBJECTS_LENGTH_MESUREMENT_ERROR = 1;\r\n\r\nexport const MAX_SCROLL_TO_ITERATIONS = 5;\r\n\r\nexport const DEFAULT_SNAPPING_METHOD = SnappingMethods.STANDART;\r\n\r\nexport const DEFAULT_SELECT_METHOD = MethodsForSelecting.NONE;\r\n\r\nexport const DEFAULT_SCREEN_READER_MESSAGE = 'Showing items $1 to $2';\r\n\r\nexport const DEFAULT_LANG_TEXT_DIR = TextDirections.LTR;\r\n\r\nexport const DEFAULT_SCROLLBAR_THICKNESS: number = 6;\r\n\r\nexport const DEFAULT_SCROLLBAR_MIN_SIZE: number = 80;\r\n\r\n// presets\r\n\r\nexport const BEHAVIOR_AUTO: ScrollBehavior = 'auto';\r\n\r\nexport const BEHAVIOR_INSTANT: ScrollBehavior = 'instant';\r\n\r\nexport const BEHAVIOR_SMOOTH: ScrollBehavior = 'smooth';\r\n\r\nexport const DISPLAY_BLOCK = 'block';\r\n\r\nexport const DISPLAY_NONE = 'none';\r\n\r\nexport const OPACITY_0 = '0';\r\n\r\nexport const OPACITY_100 = '100';\r\n\r\nexport const VISIBILITY_VISIBLE = 'visible';\r\n\r\nexport const VISIBILITY_HIDDEN = 'hidden';\r\n\r\nexport const SIZE_100_PERSENT = '100%';\r\n\r\nexport const SIZE_AUTO = 'auto';\r\n\r\nexport const POSITION_ABSOLUTE = 'absolute';\r\n\r\nexport const TRANSLATE_3D = 'translate3d';\r\n\r\nexport const ZEROS_TRANSLATE_3D = `${TRANSLATE_3D}(0,0,0)`;\r\n\r\nexport const HIDDEN_ZINDEX = '-1';\r\n\r\nexport const DEFAULT_ZINDEX = '0';\r\n\r\nexport const TOP_PROP_NAME = 'top';\r\n\r\nexport const LEFT_PROP_NAME = 'left';\r\n\r\nexport const X_PROP_NAME = 'x';\r\n\r\nexport const Y_PROP_NAME = 'y';\r\n\r\nexport const WIDTH_PROP_NAME = 'width';\r\n\r\nexport const HEIGHT_PROP_NAME = 'height';\r\n\r\nexport const MARGIN_TOP = 'marginTop';\r\n\r\nexport const MARGIN_LEFT = 'marginLeft';\r\n\r\nexport const PX = 'px';\r\n\r\nexport const INTERACTIVE = 'interactive';\r\n\r\nexport const FOCUS = 'focus';\r\n\r\nexport const WHEEL = 'wheel';\r\n\r\nexport const SCROLLER_WHEEL = 'wheel';\r\n\r\nexport const TOUCH_MOVE = 'touchmove';\r\n\r\nexport const TOUCH_START = 'touchstart';\r\n\r\nexport const TOUCH_END = 'touchend';\r\n\r\nexport const TOUCH_LEAVE = 'touchleave';\r\n\r\nexport const TOUCH_OUT = 'touchout';\r\n\r\nexport const MOUSE_MOVE = 'mousemove';\r\n\r\nexport const MOUSE_UP = 'mouseup';\r\n\r\nexport const MOUSE_DOWN = 'mousedown';\r\n\r\nexport const MOUSE_LEAVE = 'mouseleave';\r\n\r\nexport const MOUSE_OUT = 'mouseout';\r\n\r\nexport const POINTER_MOVE = 'pointermove';\r\n\r\nexport const POINTER_UP = 'pointerup';\r\n\r\nexport const POINTER_DOWN = 'pointerdown';\r\n\r\nexport const POINTER_LEAVE = 'pointerleave';\r\n\r\nexport const POINTER_OUT = 'pointerout';\r\n\r\nexport const CLICK = 'click';\r\n\r\nexport const KEY_DOWN = 'keydown';\r\n\r\nexport const KEY_TAB = 'Tab';\r\n\r\nexport const SCROLL = 'scroll';\r\n\r\nexport const SCROLLER_SCROLL = 'scroll';\r\n\r\nexport const SCROLL_END = 'scrollend';\r\n\r\nexport const CLASS_LIST_VERTICAL = 'vertical';\r\n\r\nexport const CLASS_LIST_HORIZONTAL = 'horizontal';\r\n\r\n// styles\r\n\r\nexport const PART_DEFAULT_ITEM = 'item';\r\n\r\nexport const PART_ITEM_NEW = ' item-new';\r\n\r\nexport const PART_ITEM_ODD = ' item-odd';\r\n\r\nexport const PART_ITEM_EVEN = ' item-even';\r\n\r\nexport const PART_ITEM_SNAPPED = ' item-snapped';\r\n\r\nexport const PART_ITEM_SELECTED = ' item-selected';\r\n\r\nexport const PART_ITEM_COLLAPSED = ' item-collapsed';\r\n\r\nexport const PART_ITEM_FOCUSED = ' item-focused';\r\n\r\nexport const MIN_PIXELS_FOR_PREVENT_SNAPPING = 10;\r\n\r\nexport const MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL1 = 74;\r\n\r\nexport const MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL2 = 500;\r\n\r\nexport const MAX_NUMBERS_OF_SKIPS_FOR_QUALITY_OPTIMIZATION_LVL1 = 4;\r\n\r\nexport const RANGE_DISPLAY_ITEMS_END_OFFSET = 20;\r\n\r\nexport const PREPARE_ITERATIONS = 1;\r\n\r\nexport const PREPARATION_REUPDATE_LENGTH = 0;\r\n\r\nexport const PREPARE_ITERATIONS_FOR_UPDATE_ITEMS = 1;\r\n\r\nexport const PREPARATION_REUPDATE_LENGTH_FOR_UPDATE_ITEMS = 0;\r\n\r\nexport const PREPARE_ITERATIONS_FOR_COLLAPSE_ITEMS = 1;\r\n\r\nexport const PREPARATION_REUPDATE_LENGTH_FOR_COLLAPSE_ITEMS = 0;\r\n\r\nexport const EMPTY_SCROLL_STATE_VERSION = '-1';\r\n\r\nexport const ROLE_LIST = 'list';\r\n\r\nexport const ROLE_LIST_BOX = 'listbox';\r\n\r\nexport const ITEM_ID = 'item-id';\r\n\r\nexport const ITEM_CONTAINER = 'ngvl-item__container';\r\n","export const ID = 'id',\r\n TRANSLATE_3D_HIDDEN = 'translate3d(-1000px,-1000px,0)',\r\n ATTR_AREA_SELECTED = 'area-selected',\r\n POSITION = 'position',\r\n POSITION_ZERO = '0',\r\n ITEM_ID = 'item-id',\r\n KEY_SPACE = ' ',\r\n KEY_ARR_LEFT = 'ArrowLeft',\r\n KEY_ARR_UP = 'ArrowUp',\r\n KEY_ARR_RIGHT = 'ArrowRight',\r\n KEY_ARR_DOWN = 'ArrowDown',\r\n EVENT_FOCUS_IN = 'focusin',\r\n EVENT_FOCUS_OUT = 'focusout',\r\n EVENT_KEY_DOWN = 'keydown',\r\n CLASS_NAME_SNAPPED = 'snapped',\r\n CLASS_NAME_SNAPPED_OUT = 'snapped-out',\r\n CLASS_NAME_FOCUS = 'focus';\r\n\r\n","export interface IDebounce {\r\n /**\r\n * Call handling method\r\n */\r\n execute: (...args: Array<any>) => void;\r\n /**\r\n * Method of destroying handlers\r\n */\r\n dispose: () => void;\r\n /**\r\n * Indicates whether the handler has been removed (true) or not (false)\r\n */\r\n getIsDisposed: () => boolean;\r\n}\r\n\r\n/**\r\n * Simple debounce function.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/utils/debounce.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n * @param cb - Callback.\r\n * @param debounceTime - Debounce trigger time. \r\n * @param maxSkips - Maximum numbers of skips.\r\n * @returns \r\n */\r\nexport const debounce = (cb: (...args: Array<any>) => void, debounceTime: number = 0, maxSkips: number = 0): IDebounce => {\r\n let timeout: any = null, throws = 0;\r\n const dispose = () => {\r\n if (timeout !== null) {\r\n clearTimeout(timeout);\r\n timeout = null\r\n }\r\n }\r\n const execute = (...args: Array<any>) => {\r\n if (maxSkips > 0) {\r\n if (timeout !== null) {\r\n throws++;\r\n } else {\r\n throws = 0;\r\n }\r\n }\r\n\r\n dispose();\r\n\r\n let called = false;\r\n if (maxSkips > 0) {\r\n if (throws === maxSkips) {\r\n throws = 0;\r\n called = true;\r\n cb(...args);\r\n }\r\n }\r\n\r\n if (!called) {\r\n timeout = setTimeout(() => {\r\n cb(...args);\r\n }, debounceTime);\r\n }\r\n };\r\n const getIsDisposed = () => {\r\n return timeout === null;\r\n };\r\n return {\r\n /**\r\n * Call handling method\r\n */\r\n execute,\r\n /**\r\n * Method of destroying handlers\r\n */\r\n dispose,\r\n /**\r\n * Indicates whether the handler has been removed (true) or not (false)\r\n */\r\n getIsDisposed,\r\n };\r\n};\r\n","/**\r\n * Switch css classes\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/utils/toggle-class-name.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const toggleClassName = (el: HTMLElement, className: string, removeClassName?: string) => {\r\n if (!el.classList.contains(className)) {\r\n el.classList.add(className);\r\n }\r\n if (removeClassName) {\r\n el.classList.remove(removeClassName);\r\n }\r\n};\r\n","import { IScrollEvent } from \"../interfaces\";\r\nimport { ScrollDirection } from '../types';\r\n\r\ninterface IScrollEventParams {\r\n direction: ScrollDirection;\r\n container: HTMLElement;\r\n list: HTMLElement;\r\n delta: number;\r\n deltaOfNewItems: number;\r\n scrollSize: number;\r\n isVertical: boolean;\r\n itemsRange: [number, number] | undefined;\r\n isEnd: boolean;\r\n userAction: boolean;\r\n}\r\n\r\n/**\r\n * Scroll event.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/utils/scroll-event.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class ScrollEvent implements IScrollEvent {\r\n private _direction: ScrollDirection = 1;\r\n get direction() { return this._direction; }\r\n\r\n private _scrollSize: number = 0;\r\n get scrollSize() { return this._scrollSize; }\r\n\r\n private _scrollWeight: number = 0;\r\n get scrollWeight() { return this._scrollWeight; }\r\n\r\n private _isVertical: boolean = true;\r\n get isVertical() { return this._isVertical; }\r\n\r\n private _listSize: number = 0;\r\n get listSize() { return this._listSize; }\r\n\r\n private _size: number = 0;\r\n get size() { return this._size; }\r\n\r\n private _isStart: boolean = true;\r\n get isStart() { return this._isStart; }\r\n\r\n private _isEnd: boolean = false;\r\n get isEnd() { return this._isEnd; }\r\n\r\n private _delta: number = 0;\r\n get delta() { return this._delta; }\r\n\r\n private _deltaOfNewItems: number = 0;\r\n get deltaOfNewItems() { return this._deltaOfNewItems; }\r\n\r\n private _itemsRange: [number, number] | undefined;\r\n get itemsRange() { return this._itemsRange; }\r\n\r\n private _userAction: boolean;\r\n get userAction() { return this._userAction; }\r\n\r\n constructor(params: IScrollEventParams) {\r\n const { direction, container, list, scrollSize, delta, isVertical, deltaOfNewItems, itemsRange, isEnd, userAction } = params;\r\n this._direction = direction;\r\n this._isVertical = isVertical;\r\n this._scrollSize = scrollSize;\r\n this._scrollWeight = isVertical ? container.scrollHeight : container.scrollWidth;\r\n this._listSize = isVertical ? list.offsetHeight : list.offsetWidth;\r\n this._size = isVertical ? container.offsetHeight : container.offsetWidth;\r\n this._isEnd = isEnd;\r\n this._delta = delta;\r\n this._deltaOfNewItems = deltaOfNewItems;\r\n this._isStart = this._scrollSize === 0;\r\n this._itemsRange = itemsRange;\r\n this._userAction = userAction;\r\n }\r\n}","export type TEventHandler = (...args: Array<any>) => void;\r\n\r\n/**\r\n * Event emitter\r\n * @link https://github.com/DjonnyX/data-channel-router/blob/main/library/src/utils/event-emitter/event-emitter.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class EventEmitter<E = string, H = TEventHandler> {\r\n protected _listeners: {\r\n [eventName: string]: Array<TEventHandler>,\r\n } = {};\r\n\r\n protected _disposed: boolean = false;\r\n\r\n constructor() { }\r\n\r\n /**\r\n * Emits the event\r\n */\r\n dispatch(event: E, ...args: Array<any>): void {\r\n const ctx = this;\r\n const listeners = this._listeners[event as string];\r\n if (Array.isArray(listeners)) {\r\n for (let i = 0, l = listeners.length; i < l; i++) {\r\n const listener = listeners[i];\r\n if (listener) {\r\n listener.apply(ctx, args);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Emits the event async\r\n */\r\n dispatchAsync(event: E, ...args: Array<any>): void {\r\n queueMicrotask(() => {\r\n if (this._disposed) {\r\n return;\r\n }\r\n this.dispatch(event, ...args);\r\n });\r\n }\r\n\r\n /**\r\n * Returns true if the event listener is already subscribed.\r\n */\r\n hasEventListener(eventName: E, handler: H): boolean {\r\n const event = eventName as string;\r\n if (this._listeners[event] !== undefined) {\r\n const listeners = this._listeners[event];\r\n const index = listeners.findIndex(v => v === handler);\r\n if (index > -1) {\r\n return true;\r\n }\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * Add event listener\r\n */\r\n addEventListener(eventName: E, handler: H): void {\r\n const event = eventName as string;\r\n if (!this._listeners.hasOwnProperty(event)) {\r\n this._listeners[event] = [];\r\n }\r\n this._listeners[event].push(handler as TEventHandler);\r\n }\r\n\r\n /**\r\n * Remove event listener\r\n */\r\n removeEventListener(eventName: E, handler: H): void {\r\n const event = eventName as string;\r\n if (!this._listeners.hasOwnProperty(event)) {\r\n return;\r\n }\r\n const listeners = this._listeners[event], index = listeners.findIndex(v => v === handler);\r\n if (index > -1) {\r\n listeners.splice(index, 1);\r\n\r\n if (listeners.length === 0) {\r\n delete this._listeners[event];\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Remove all listeners\r\n */\r\n removeAllListeners() {\r\n const events = Object.keys(this._listeners);\r\n while (events.length > 0) {\r\n const event = events.pop();\r\n if (event) {\r\n const listeners = this._listeners[event];\r\n if (Array.isArray(listeners)) {\r\n while (listeners.length > 0) {\r\n const listener = listeners.pop();\r\n if (listener) {\r\n this.removeEventListener(event as E, listener as H);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Method of destroying handlers\r\n */\r\n dispose() {\r\n this._disposed = true;\r\n\r\n this.removeAllListeners();\r\n }\r\n}","export class CMap<K = string, V = any> {\r\n protected _dict: { [k: string | number]: V } = {};\r\n\r\n constructor(dict?: CMap<K, V>) {\r\n this.from(dict);\r\n }\r\n\r\n from(dict?: CMap<K, V>) {\r\n if (dict) {\r\n this._dict = { ...dict._dict };\r\n }\r\n }\r\n\r\n get(key: K) {\r\n const k = String(key);\r\n return this._dict[k];\r\n }\r\n set(key: K, value: V) {\r\n const k = String(key);\r\n this._dict[k] = value;\r\n return this;\r\n }\r\n has(key: K) {\r\n return this._dict.hasOwnProperty(String(key));\r\n }\r\n delete(key: K) {\r\n const k = String(key);\r\n delete this._dict[k];\r\n }\r\n clear() {\r\n this._dict = {};\r\n }\r\n toObject() {\r\n return this._dict;\r\n }\r\n}","import { ScrollDirection } from \"../types\";\r\nimport { debounce } from \"../utils\";\r\nimport { EventEmitter } from \"../utils/event-emitter\";\r\nimport { CMap } from \"../utils/cmap\";\r\n\r\nexport interface ICacheMap<I = any, B = any> {\r\n set: (id: I, bounds: B) => CMap<I, B>;\r\n has: (id: I) => boolean;\r\n get: (id: I) => B | undefined;\r\n delete: (id: I) => void;\r\n clear: () => void;\r\n}\r\n\r\nexport const CACHE_BOX_CHANGE_EVENT_NAME = 'change';\r\n\r\ntype CacheMapEvents = typeof CACHE_BOX_CHANGE_EVENT_NAME;\r\n\r\ntype OnChangeEventListener = (version: number) => void;\r\n\r\ntype CacheMapListeners = OnChangeEventListener;\r\n\r\nconst MAX_SCROLL_DIRECTION_POOL = 10, CLEAR_SCROLL_DIRECTION_TO = 10,\r\n DIR_BACK = '-1', DIR_NONE = '0', DIR_FORWARD = '1';\r\n\r\n/**\r\n * Cache map.\r\n * Emits a change event on each mutation.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/core/cache-map.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class CacheMap<I = string | number, B = any, E = CacheMapEvents, L = CacheMapListeners> extends EventEmitter<E, L> implements ICacheMap {\r\n protected _map = new CMap<I, B>();\r\n\r\n protected _snapshot = new CMap<I, B>();\r\n\r\n protected _version: number = 0;\r\n\r\n protected _previousVersion = this._version;\r\n\r\n protected _lifeCircleId: any;\r\n\r\n protected _delta: number = 0;\r\n\r\n get delta() {\r\n return this._delta;\r\n }\r\n\r\n protected _deltaDirection: ScrollDirection = 0;\r\n set deltaDirection(v: ScrollDirection) {\r\n this._deltaDirection = v;\r\n\r\n this._scrollDirection = this.calcScrollDirection(v);\r\n }\r\n get deltaDirection() {\r\n return this._deltaDirection;\r\n }\r\n\r\n private _scrollDirectionCache: Array<ScrollDirection> = [];\r\n private _scrollDirection: ScrollDirection = 0;\r\n get scrollDirection() {\r\n return this._scrollDirection;\r\n }\r\n\r\n get version() {\r\n return this._version;\r\n }\r\n\r\n private _clearScrollDirectionDebounce = debounce(() => {\r\n while (this._scrollDirectionCache.length > CLEAR_SCROLL_DIRECTION_TO) {\r\n this._scrollDirectionCache.shift();\r\n }\r\n }, 10);\r\n\r\n constructor() {\r\n super();\r\n this.lifeCircle();\r\n }\r\n\r\n protected changesDetected() {\r\n return this._version !== this._previousVersion;\r\n }\r\n\r\n protected stopLifeCircle() {\r\n if (this._lifeCircleId !== undefined) {\r\n clearTimeout(this._lifeCircleId);\r\n }\r\n }\r\n\r\n protected nextTick(cb: () => void) {\r\n if (this._disposed) {\r\n return;\r\n }\r\n\r\n this._lifeCircleId = setTimeout(() => {\r\n cb();\r\n });\r\n return this._lifeCircleId;\r\n }\r\n\r\n protected lifeCircle() {\r\n this.fireChangeIfNeed();\r\n\r\n this.lifeCircleDo();\r\n }\r\n\r\n protected lifeCircleDo() {\r\n this._previousVersion = this._version;\r\n\r\n this.nextTick(() => {\r\n this.lifeCircle();\r\n });\r\n }\r\n\r\n clearScrollDirectionCache(async = true) {\r\n if (async) {\r\n this._clearScrollDirectionDebounce.execute();\r\n return;\r\n }\r\n\r\n this._scrollDirectionCache = [];\r\n }\r\n\r\n private calcScrollDirection(v: ScrollDirection): ScrollDirection {\r\n while (this._scrollDirectionCache.length >= MAX_SCROLL_DIRECTION_POOL) {\r\n this._scrollDirectionCache.shift();\r\n }\r\n this._scrollDirectionCache.push(v);\r\n const dict: { [x: string]: number } = { [DIR_BACK]: 0, [DIR_NONE]: 0, [DIR_FORWARD]: 0 };\r\n for (let i = 0, l = this._scrollDirectionCache.length, li = l - 1; i < l; i++) {\r\n const dir = String(this._scrollDirectionCache[i]);\r\n dict[dir] += 1;\r\n if (i === li) {\r\n for (let d in dict) {\r\n if (d === String(v)) {\r\n continue;\r\n }\r\n dict[d] -= 1;\r\n }\r\n }\r\n }\r\n\r\n if (dict[DIR_BACK] > dict[DIR_NONE] && dict[DIR_BACK] > dict[DIR_FORWARD]) {\r\n return -1;\r\n } else if (dict[DIR_FORWARD] > dict[DIR_BACK] && dict[DIR_FORWARD] > dict[DIR_NONE]) {\r\n return 1;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n protected bumpVersion() {\r\n if (this.changesDetected()) {\r\n return;\r\n }\r\n const v = this._version === Number.MAX_SAFE_INTEGER ? 0 : this._version + 1;\r\n this._version = v;\r\n }\r\n\r\n protected fireChangeIfNeed() {\r\n if (this.changesDetected()) {\r\n this.dispatch(CACHE_BOX_CHANGE_EVENT_NAME as E, this.version);\r\n }\r\n }\r\n\r\n set(id: I, bounds: B): CMap<I, B> {\r\n if (this._map.has(id)) {\r\n const b: any = this._map.get(id), bb: any = bounds;\r\n if (b.width === bb.width && b.height === bb.height) {\r\n return this._map;\r\n }\r\n return this._map;\r\n }\r\n\r\n const v = this._map.set(id, bounds);\r\n\r\n this.bumpVersion();\r\n\r\n return v;\r\n }\r\n\r\n has(id: I): boolean {\r\n return this._map.has(id);\r\n }\r\n\r\n get(id: I): B | undefined {\r\n return this._map.get(id);\r\n }\r\n\r\n delete(id: I) {\r\n this._map.delete(id);\r\n }\r\n\r\n clear() {\r\n this._map.clear();\r\n }\r\n\r\n snapshot() {\r\n this._snapshot = new CMap(this._map);\r\n }\r\n\r\n override dispose() {\r\n super.dispose();\r\n\r\n this.stopLifeCircle();\r\n\r\n this._snapshot.clear();\r\n\r\n this._map.clear();\r\n }\r\n}","import { ComponentRef } from \"@angular/core\";\r\nimport { ScrollDirection } from \"../types\";\r\nimport { IRenderVirtualListCollection } from \"../models/render-collection.model\";\r\nimport { BaseVirtualListItemComponent } from \"../components/ng-list-item/base\";\r\nimport { ISize } from '../interfaces';\r\nimport { Id } from \"../types\";\r\nimport { CMap } from \"../utils/cmap\";\r\n\r\ntype TrackingPropertyId = string | number;\r\n\r\nexport interface IVirtualListItemComponent<I = any> {\r\n getBounds(): ISize;\r\n itemId: Id;\r\n id: number;\r\n item: I | null;\r\n show: () => void;\r\n hide: () => void;\r\n}\r\n\r\n/**\r\n * Tracks display items by property\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/core/tracker.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class Tracker<C extends BaseVirtualListItemComponent = any> {\r\n /**\r\n * display objects dictionary of indexes by id\r\n */\r\n protected _displayObjectIndexMapById: { [id: number]: number } = {};\r\n\r\n set displayObjectIndexMapById(v: { [id: number]: number }) {\r\n if (this._displayObjectIndexMapById === v) {\r\n return;\r\n }\r\n\r\n this._displayObjectIndexMapById = v;\r\n }\r\n\r\n get displayObjectIndexMapById() {\r\n return this._displayObjectIndexMapById;\r\n }\r\n\r\n /**\r\n * Dictionary displayItems propertyNameId by items propertyNameId\r\n */\r\n protected _trackMap = new CMap<TrackingPropertyId, number>();\r\n\r\n get trackMap() {\r\n return this._trackMap;\r\n }\r\n\r\n protected _trackingPropertyName!: string;\r\n\r\n set trackingPropertyName(v: string) {\r\n this._trackingPropertyName = v;\r\n }\r\n\r\n constructor(trackingPropertyName: string) {\r\n this._trackingPropertyName = trackingPropertyName;\r\n }\r\n\r\n private tearOutSnapedDisplayObjectByItemId = (itemId: Id, snappedComponents: Array<ComponentRef<C>> | null | undefined):\r\n ComponentRef<C> | null => {\r\n if (!snappedComponents || snappedComponents?.length === 0) {\r\n return null;\r\n }\r\n const index = snappedComponents?.findIndex(comp => comp?.instance?.itemId === itemId);\r\n if (index > -1) {\r\n const comp = snappedComponents[index];\r\n snappedComponents.splice(index, 1);\r\n return comp;\r\n }\r\n return snappedComponents.shift() ?? null;\r\n }\r\n\r\n /**\r\n * tracking by propName\r\n */\r\n track(items: IRenderVirtualListCollection, components: Array<ComponentRef<C>>, snappedComponents: Array<ComponentRef<C>> | null | undefined,\r\n direction: ScrollDirection): void {\r\n if (!items) {\r\n return;\r\n }\r\n\r\n const untrackedItems = [...components], newTrackItems: Array<any> = [],\r\n untrackedComponentsByTypeMap: { [type: string]: Array<{ comp: ComponentRef<C>; index: number }>; } = {},\r\n isDown = direction === 0 || direction === 1, snapped = !!snappedComponents ? [...snappedComponents] : [];\r\n let isRegularSnapped = false;\r\n\r\n for (let i = isDown ? 0 : items.length - 1, l = isDown ? items.length : 0; isDown ? i < l : i >= l; isDown ? i++ : i--) {\r\n const item = items[i], itemTrackingProperty = item.id;\r\n let snappedComponent: ComponentRef<C> | null | undefined;\r\n if (this._trackMap) {\r\n if (this._trackMap.has(itemTrackingProperty)) {\r\n const diId = this._trackMap.get(itemTrackingProperty),\r\n compIndex = this._displayObjectIndexMapById[diId], comp = components[compIndex];\r\n\r\n const compId = comp?.instance?.id;\r\n if (comp !== undefined && compId === diId) {\r\n const indexByUntrackedItems = untrackedItems.findIndex(v => {\r\n return v.instance.id === compId;\r\n });\r\n if (indexByUntrackedItems > -1) {\r\n if (item.config.snapped || item.config.snappedOut) {\r\n if (snapped.length > 0) {\r\n snappedComponent = this.tearOutSnapedDisplayObjectByItemId(item.id, snapped);\r\n if (!!snappedComponent) {\r\n isRegularSnapped = true;\r\n snappedComponent.instance.item = item;\r\n snappedComponent.instance.show();\r\n }\r\n }\r\n }\r\n\r\n if (!!snappedComponent) {\r\n if (item.config.snapped || item.config.snappedOut) {\r\n comp.instance.item = null;\r\n comp.instance.hide();\r\n } else {\r\n comp.instance.item = item;\r\n comp.instance.show();\r\n }\r\n } else {\r\n comp.instance.item = item;\r\n comp.instance.show();\r\n }\r\n untrackedItems.splice(indexByUntrackedItems, 1);\r\n continue;\r\n }\r\n }\r\n } else {\r\n this._trackMap.delete(itemTrackingProperty);\r\n\r\n }\r\n }\r\n\r\n if (untrackedItems.length > 0) {\r\n newTrackItems.push(item);\r\n }\r\n }\r\n\r\n if (untrackedItems.length > 0) {\r\n for (let i = 0, l = untrackedItems.length; i < l; i++) {\r\n const comp = untrackedItems[i], type = comp?.instance.item?.data?.type;\r\n if (!Array.isArray(untrackedComponentsByTypeMap[type])) {\r\n untrackedComponentsByTypeMap[type] = [];\r\n }\r\n untrackedComponentsByTypeMap[type].push({ comp, index: i });\r\n }\r\n }\r\n\r\n for (let i = 0, l = newTrackItems.length; i < l; i++) {\r\n let snappedComponent: ComponentRef<C> | null | undefined;\r\n if (untrackedItems.length > 0) {\r\n const item = newTrackItems[i], itemTrackingProperty = item.id,\r\n type = item.data?.type;\r\n let comp: ComponentRef<C> | undefined;\r\n if (type) {\r\n const list = untrackedComponentsByTypeMap[type];\r\n if (Array.isArray(list) && list.length > 0) {\r\n const untrackedItem = list.shift();\r\n if (untrackedItem) {\r\n comp = untrackedItem.comp;\r\n untrackedItems.slice(untrackedItem.index, 1);\r\n }\r\n }\r\n }\r\n\r\n if (!comp) {\r\n comp = untrackedItems.shift();\r\n }\r\n\r\n if (comp) {\r\n if (item.config.snapped || item.config.snappedOut) {\r\n if (snapped.length > 0) {\r\n snappedComponent = this.tearOutSnapedDisplayObjectByItemId(item.id, snapped);\r\n isRegularSnapped = true;\r\n if (!!snappedComponent) {\r\n snappedComponent.instance.item = item;\r\n snappedComponent.instance.show();\r\n }\r\n }\r\n }\r\n if (!!snappedComponent) {\r\n if (item.config.snapped || item.config.snappedOut) {\r\n comp.instance.item = null;\r\n comp.instance.hide();\r\n } else {\r\n comp.instance.item = item;\r\n comp.instance.show();\r\n }\r\n } else {\r\n comp.instance.item = item;\r\n comp.instance.show();\r\n }\r\n\r\n if (this._trackMap) {\r\n this._trackMap.set(itemTrackingProperty, comp.instance.id);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (untrackedItems.length) {\r\n for (let i = 0, l = untrackedItems.length; i < l; i++) {\r\n const comp = untrackedItems[i];\r\n comp.instance.item = null;\r\n comp.instance.hide();\r\n }\r\n }\r\n\r\n if (!isRegularSnapped) {\r\n for (let i = 0, l = snapped.length; i < l; i++) {\r\n const snappedComponent = snapped[i];\r\n if (!!snappedComponent) {\r\n snappedComponent.instance.item = null;\r\n snappedComponent.instance.hide();\r\n }\r\n }\r\n }\r\n }\r\n\r\n untrackComponentByIdProperty(component?: C): void {\r\n if (!component) {\r\n return;\r\n }\r\n\r\n const propertyIdName = this._trackingPropertyName;\r\n\r\n if (this._trackMap && (component as any)[propertyIdName] !== undefined) {\r\n this._trackMap.delete(propertyIdName);\r\n }\r\n }\r\n\r\n clearTrackMap() {\r\n this._trackMap.clear();\r\n }\r\n\r\n dispose() {\r\n if (this._trackMap) {\r\n this._trackMap.clear();\r\n }\r\n }\r\n}","const DEFAULT_EXTRA = {\r\n extremumThreshold: 2,\r\n bufferSize: 10,\r\n};\r\n\r\nexport interface IExtraOptions {\r\n extremumThreshold?: number;\r\n bufferSize?: number;\r\n}\r\n\r\nexport const bufferInterpolation = (currentBufferValue: number, array: Array<number>, value: number, extra?: IExtraOptions) => {\r\n const {\r\n extremumThreshold = DEFAULT_EXTRA.extremumThreshold,\r\n bufferSize = DEFAULT_EXTRA.bufferSize,\r\n } = extra ?? DEFAULT_EXTRA;\r\n\r\n if (currentBufferValue < value) {\r\n let i = 0;\r\n while (i < extremumThreshold) {\r\n array.push(value);\r\n i++;\r\n }\r\n } else {\r\n array.push(value);\r\n }\r\n\r\n if (array.length > bufferSize) {\r\n while (array.length > bufferSize) {\r\n array.shift();\r\n }\r\n }\r\n\r\n const l = array.length;\r\n let buffer = 0;\r\n\r\n for (let i = 0; i < l; i++) {\r\n buffer += array[i];\r\n }\r\n\r\n return l !== 0 ? Math.ceil(buffer / l) : 0;\r\n};\r\n","import { ComponentRef } from \"@angular/core\";\r\nimport { IRenderVirtualListCollection, } from \"../models/render-collection.model\";\r\nimport { IRenderVirtualListItem } from \"../models/render-item.model\";\r\nimport { Id } from \"../types/id\";\r\nimport { CACHE_BOX_CHANGE_EVENT_NAME, CacheMap } from \"./cache-map\";\r\nimport { Tracker } from \"./tracker\";\r\nimport { ISize } from \"../interfaces\";\r\nimport {\r\n HEIGHT_PROP_NAME, TRACK_BY_PROPERTY_NAME, WIDTH_PROP_NAME, X_PROP_NAME, Y_PROP_NAME,\r\n} from \"../const\";\r\nimport { IRenderVirtualListItemConfig, IRenderVirtualListItemMeasures, IVirtualListItemConfigMap } from \"../models\";\r\nimport { debounce } from \"../utils\";\r\nimport { CMap } from '../utils/cmap';\r\nimport { bufferInterpolation } from \"../utils/buffer-interpolation\";\r\nimport { BaseVirtualListItemComponent } from \"../components/ng-list-item/base\";\r\nimport { PrerenderCache } from \"../components/ng-prerender-container/types/cache\";\r\n\r\nexport enum TrackBoxEvents {\r\n CHANGE = 'change',\r\n TICK = 'tick',\r\n}\r\n\r\nexport interface IMetrics {\r\n delta: number;\r\n normalizedItemWidth: number;\r\n normalizedItemHeight: number;\r\n width: number;\r\n height: number;\r\n dynamicSize: boolean;\r\n itemSize: number;\r\n itemsFromStartToScrollEnd: number;\r\n itemsFromStartToDisplayEnd: number;\r\n itemsOnDisplayWeight: number;\r\n itemsOnDisplayLength: number;\r\n isVertical: boolean;\r\n leftHiddenItemsWeight: number;\r\n leftItemLength: number;\r\n leftItemsWeight: number;\r\n renderItems: number;\r\n rightItemLength: number;\r\n rightItemsWeight: number;\r\n scrollSize: number;\r\n leftSizeOfAddedItems: number;\r\n sizeProperty: typeof HEIGHT_PROP_NAME | typeof WIDTH_PROP_NAME;\r\n snap: boolean;\r\n snipedPos: number;\r\n startIndex: number;\r\n startPosition: number;\r\n totalItemsToDisplayEndWeight: number;\r\n totalLength: number;\r\n totalSize: number;\r\n typicalItemSize: number;\r\n isFromItemIdFound: boolean;\r\n isUpdating: boolean;\r\n}\r\n\r\nexport interface IRecalculateMetricsOptions<I extends IItem, C extends Array<I>> {\r\n bounds: ISize;\r\n collection: C;\r\n isVertical: boolean;\r\n itemSize: number;\r\n bufferSize: number;\r\n maxBufferSize: number;\r\n dynamicSize: boolean;\r\n scrollSize: number;\r\n snap: boolean;\r\n enabledBufferOptimization: boolean;\r\n fromItemId?: Id;\r\n previousTotalSize: number;\r\n crudDetected: boolean;\r\n deletedItemsMap: { [index: number]: ISize; };\r\n}\r\n\r\nexport interface IGetItemPositionOptions<I extends IItem, C extends Array<I>>\r\n extends Omit<IRecalculateMetricsOptions<I, C>, 'previousTotalSize' | 'crudDetected' | 'deletedItemsMap'> { }\r\n\r\nexport interface IUpdateCollectionOptions<I extends IItem, C extends Array<I>>\r\n extends Omit<IRecalculateMetricsOptions<I, C>, 'collection' | 'previousTotalSize' | 'crudDetected' | 'deletedItemsMap'> { }\r\n\r\nexport type CacheMapEvents = TrackBoxEvents;\r\n\r\nexport type OnChangeEventListener = (version: number) => void;\r\n\r\nexport type OnTickEventListener = () => void;\r\n\r\nexport type CacheMapListeners = OnChangeEventListener | OnTickEventListener;\r\n\r\nexport enum ItemDisplayMethods {\r\n CREATE,\r\n UPDATE,\r\n DELETE,\r\n NOT_CHANGED,\r\n}\r\n\r\nexport interface IUpdateCollectionReturns {\r\n displayItems: IRenderVirtualListCollection;\r\n totalSize: number;\r\n delta: number;\r\n crudDetected: boolean;\r\n}\r\n\r\nexport interface IGetMetricsReturns {\r\n totalSize: number;\r\n delta: number;\r\n crudDetected: boolean;\r\n}\r\n\r\ninterface IItem<I = any> {\r\n [prop: string]: I;\r\n}\r\n\r\nconst DEFAULT_BUFFER_EXTREMUM_THRESHOLD = 15,\r\n DEFAULT_MAX_BUFFER_SEQUENCE_LENGTH = 30,\r\n DEFAULT_RESET_BUFFER_SIZE_TIMEOUT = 10000,\r\n IS_NEW = 'n';\r\n\r\ntype Cache = ISize & { method?: ItemDisplayMethods } & IItem;\r\n\r\n/**\r\n * An object that performs tracking, calculations and caching.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/core/track-box.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class TrackBox<C extends BaseVirtualListItemComponent = any>\r\n extends CacheMap<Id, Cache, CacheMapEvents, CacheMapListeners> {\r\n\r\n protected _tracker!: Tracker<C>;\r\n\r\n protected _items: IRenderVirtualListCollection | null | undefined;\r\n\r\n set items(v: IRenderVirtualListCollection | null | undefined) {\r\n if (this._items === v) {\r\n return;\r\n }\r\n\r\n this._items = v;\r\n }\r\n\r\n protected _displayComponents: Array<ComponentRef<C>> | null | undefined;\r\n\r\n set displayComponents(v: Array<ComponentRef<C>> | null | undefined) {\r\n if (this._displayComponents === v) {\r\n return;\r\n }\r\n\r\n this._displayComponents = v;\r\n }\r\n\r\n protected _snappedDisplayComponents: Array<ComponentRef<C>> | null | undefined;\r\n\r\n set snappedDisplayComponents(v: Array<ComponentRef<C>> | null | undefined) {\r\n if (this._snappedDisplayComponents === v) {\r\n return;\r\n }\r\n\r\n this._snappedDisplayComponents = v;\r\n }\r\n\r\n protected _isSnappingMethodAdvanced: boolean = false;\r\n\r\n set isSnappingMethodAdvanced(v: boolean) {\r\n if (this._isSnappingMethodAdvanced === v) {\r\n return;\r\n }\r\n\r\n this._isSnappingMethodAdvanced = v;\r\n }\r\n\r\n protected _isLazy: boolean = false;\r\n\r\n set isLazy(v: boolean) {\r\n if (this._isLazy === v) {\r\n return;\r\n }\r\n\r\n this._isLazy = v;\r\n }\r\n\r\n /**\r\n * Set the trackBy property\r\n */\r\n set trackingPropertyName(v: string) {\r\n this._trackingPropertyName = this._tracker.trackingPropertyName = v;\r\n }\r\n\r\n protected _trackingPropertyName: string = TRACK_BY_PROPERTY_NAME;\r\n\r\n set isScrollStart(v: boolean) {\r\n this._isScrollStart = v;\r\n if (v) {\r\n this._isScrollSnapToStart = true;\r\n }\r\n }\r\n\r\n protected _isScrollStart: boolean = false;\r\n\r\n set isScrollEnd(v: boolean) {\r\n this._isScrollEnd = v;\r\n if (v) {\r\n this._isScrollSnapToEnd = true;\r\n }\r\n }\r\n\r\n protected _isScrollEnd: boolean = false;\r\n\r\n protected _isScrollSnapToStart: boolean = false;\r\n\r\n get isSnappedToStart() {\r\n return this._isScrollStart || this._isScrollSnapToStart;\r\n }\r\n\r\n protected _isScrollSnapToEnd: boolean = false;\r\n\r\n get isSnappedToEnd() {\r\n return this._isScrollEnd || this._isScrollSnapToEnd;\r\n }\r\n\r\n protected _scrollStartOffset: number = 0;\r\n set scrollStartOffset(v: number) {\r\n this._scrollStartOffset = v;\r\n }\r\n get scrollStartOffset() {\r\n return this._scrollStartOffset;\r\n }\r\n\r\n protected _scrollEndOffset: number = 0;\r\n set scrollEndOffset(v: number) {\r\n this._scrollEndOffset = v;\r\n }\r\n get scrollEndOffset() {\r\n return this._scrollEndOffset;\r\n }\r\n\r\n constructor(trackingPropertyName: string) {\r\n super();\r\n\r\n this._trackingPropertyName = trackingPropertyName;\r\n\r\n this.initialize();\r\n }\r\n\r\n protected initialize() {\r\n this._tracker = new Tracker(this._trackingPropertyName);\r\n }\r\n\r\n override set(id: Id, cache: Cache): CMap<Id, ISize> {\r\n if (this._map.has(id)) {\r\n const b = this._map.get(id);\r\n if (b?.width === cache.width && b?.height === cache.height) {\r\n return this._map;\r\n }\r\n }\r\n\r\n const v = this._map.set(id, cache);\r\n\r\n this.bumpVersion();\r\n return v;\r\n }\r\n\r\n protected _previousCollection: Array<IItem> | null | undefined;\r\n\r\n protected _deletedItemsMap: { [index: number]: ISize } = {};\r\n\r\n protected _crudDetected = false;\r\n get crudDetected() { return this._crudDetected; }\r\n\r\n protected override fireChangeIfNeed() {\r\n if (this.changesDetected()) {\r\n this.dispatch(TrackBoxEvents.CHANGE, this._version);\r\n }\r\n }\r\n\r\n protected fireTick() {\r\n this.dispatch(TrackBoxEvents.TICK);\r\n }\r\n\r\n protected _previousTotalSize = 0;\r\n\r\n protected _deltaOfNewItems: number = 0;\r\n get deltaOfNewItems() { return this._deltaOfNewItems; }\r\n\r\n isAdaptiveBuffer = true;\r\n\r\n protected _bufferSequenceExtraThreshold = DEFAULT_BUFFER_EXTREMUM_THRESHOLD;\r\n\r\n protected _maxBufferSequenceLength = DEFAULT_MAX_BUFFER_SEQUENCE_LENGTH;\r\n\r\n protected _bufferSizeSequence: Array<number> = [];\r\n\r\n protected _bufferSize: number = 0;\r\n get bufferSize() { return this._bufferSize; }\r\n\r\n protected _defaultBufferSize: number = 0;\r\n\r\n protected _maxBufferSize: number = this._defaultBufferSize;\r\n\r\n protected _resetBufferSizeTimeout: number = DEFAULT_RESET_BUFFER_SIZE_TIMEOUT;\r\n\r\n protected _resetBufferSizeTimer: number | undefined;\r\n\r\n protected _isReseted: boolean = true;\r\n\r\n private _prerenderedCache: PrerenderCache | null = null;\r\n\r\n private _newItems: Array<Id> = [];\r\n\r\n protected override lifeCircle() {\r\n this.fireChangeIfNeed();\r\n\r\n this.fireTick();\r\n\r\n this.lifeCircleDo();\r\n }\r\n\r\n /**\r\n * Scans the collection for deleted items and flushes the deleted item cache.\r\n */\r\n resetCollection<I extends IItem, C extends Array<I>>(currentCollection: C | null | undefined,\r\n itemSize: number): void {\r\n if (currentCollection !== undefined && currentCollection !== null &&\r\n currentCollection === this._previousCollection) {\r\n console.warn('Attention! The collection must be immutable.');\r\n return;\r\n }\r\n\r\n const reseted = ((!this._previousCollection || this._previousCollection.length === 0) &&\r\n (!!currentCollection && currentCollection.length > 0));\r\n\r\n this._isReseted = reseted;\r\n\r\n this.updateCache(this._previousCollection, currentCollection, itemSize);\r\n\r\n this._previousCollection = [...(currentCollection || [])];\r\n }\r\n\r\n /**\r\n * Update the cache of items from the list\r\n */\r\n protected updateCache<I extends IItem, C extends Array<I>>(previousCollection: C | null | undefined,\r\n currentCollection: C | null | undefined,\r\n itemSize: number): void {\r\n const trackBy = this._trackingPropertyName;\r\n let crudDetected = false;\r\n this._newItems = [];\r\n\r\n if (!currentCollection || currentCollection.length === 0) {\r\n if (previousCollection) {\r\n // deleted\r\n for (let i = 0, l = previousCollection.length; i < l; i++) {\r\n const item = previousCollection[i], id = item[trackBy];\r\n crudDetected = true;\r\n if (this._map.has(id)) {\r\n this._map.delete(id);\r\n }\r\n }\r\n }\r\n return;\r\n }\r\n if (!previousCollection || previousCollection.length === 0) {\r\n if (currentCollection) {\r\n // added\r\n for (let i = 0, l = currentCollection.length; i < l; i++) {\r\n crudDetected = true;\r\n const item = currentCollection[i], id = item[trackBy];\r\n this._map.set(id, { width: itemSize, height: itemSize, method: ItemDisplayMethods.CREATE });\r\n }\r\n }\r\n return;\r\n }\r\n const collectionDict: IItem<I> = {};\r\n for (let i = 0, l = currentCollection.length; i < l; i++) {\r\n const item = currentCollection[i];\r\n if (item) {\r\n collectionDict[item[trackBy]] = item;\r\n }\r\n }\r\n const notChangedMap: IItem<I> = {}, deletedMap: IItem<I> = {}, deletedItemsMap: { [index: number]: ISize } = {},\r\n updatedMap: IItem<I> = {};\r\n for (let i = 0, l = previousCollection.length; i < l; i++) {\r\n const item = previousCollection[i], id = item[trackBy];\r\n if (item) {\r\n if (collectionDict.hasOwnProperty(id)) {\r\n if (item === collectionDict[id]) {\r\n // not changed\r\n notChangedMap[item[trackBy]] = item;\r\n this._map.set(id, {\r\n ...(this._map.get(id) || { width: itemSize, height: itemSize }),\r\n method: ItemDisplayMethods.NOT_CHANGED\r\n });\r\n continue;\r\n } else {\r\n // updated\r\n crudDetected = true;\r\n updatedMap[item[trackBy]] = item;\r\n this._map.set(id, {\r\n ...(this._map.get(id) || { width: itemSize, height: itemSize }),\r\n method: ItemDisplayMethods.UPDATE\r\n });\r\n continue;\r\n }\r\n }\r\n\r\n // deleted\r\n crudDetected = true;\r\n deletedMap[id] = item;\r\n deletedItemsMap[i] = this._map.get(id);\r\n this._map.delete(id);\r\n }\r\n }\r\n\r\n for (let i = 0, l = currentCollection.length; i < l; i++) {\r\n const item = currentCollection[i], id = item[trackBy];\r\n if (item && !deletedMap.hasOwnProperty(id) && !updatedMap.hasOwnProperty(id) &&\r\n !notChangedMap.hasOwnProperty(id)) {\r\n this._newItems.push(id);\r\n // added\r\n crudDetected = true;\r\n this._map.set(id, { width: itemSize, height: itemSize, method: ItemDisplayMethods.CREATE });\r\n }\r\n }\r\n this._crudDetected = crudDetected;\r\n this._deletedItemsMap = deletedItemsMap;\r\n }\r\n\r\n /**\r\n * Finds the position of a collection element by the given Id\r\n */\r\n getItemPosition<I extends IItem, C extends Array<I>>(id: Id, itemConfigMap: IVirtualListItemConfigMap,\r\n options: IGetItemPositionOptions<I, C>): number {\r\n const opt = { fromItemId: id, itemConfigMap, ...options };\r\n this._defaultBufferSize = opt.bufferSize;\r\n this._maxBufferSize = opt.maxBufferSize;\r\n\r\n const { scrollSize, isFromItemIdFound } = this.recalculateMetrics({\r\n ...opt,\r\n dynamicSize: this._crudDetected || opt.dynamicSize,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap: this._deletedItemsMap,\r\n });\r\n return isFromItemIdFound ? scrollSize : -1;\r\n }\r\n\r\n preventScrollSnapping(clearBuffer: boolean = false) {\r\n this._isScrollStart = this._isScrollEnd = false;\r\n\r\n if (clearBuffer) {\r\n this._isScrollSnapToStart = this._isScrollSnapToEnd = false;\r\n }\r\n }\r\n\r\n /**\r\n * Updates the collection of display objects\r\n */\r\n getMetrics<I extends IItem, C extends Array<I>>(items: C, itemConfigMap: IVirtualListItemConfigMap,\r\n options: IUpdateCollectionOptions<I, C>): IGetMetricsReturns {\r\n const opt = { itemConfigMap, ...options }, crudDetected = this._crudDetected,\r\n deletedItemsMap = this._deletedItemsMap;\r\n this._defaultBufferSize = opt.bufferSize;\r\n this._maxBufferSize = opt.maxBufferSize;\r\n\r\n const metrics = this.recalculateMetrics({\r\n ...opt,\r\n collection: items,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap,\r\n });\r\n\r\n return { totalSize: metrics.totalSize, delta: metrics.delta, crudDetected };\r\n }\r\n\r\n /**\r\n * Updates the collection of display objects\r\n */\r\n updateCollection<I extends IItem, C extends Array<I>>(items: C, itemConfigMap: IVirtualListItemConfigMap,\r\n options: IUpdateCollectionOptions<I, C>): IUpdateCollectionReturns {\r\n const opt = { itemConfigMap, ...options }, dynamicSize = opt.dynamicSize, crudDetected = this._crudDetected,\r\n deletedItemsMap = this._deletedItemsMap;\r\n if (dynamicSize) {\r\n this.cacheElements(opt.isVertical, opt.itemSize);\r\n }\r\n this._defaultBufferSize = opt.bufferSize;\r\n this._maxBufferSize = opt.maxBufferSize;\r\n\r\n const metrics = this.recalculateMetrics({\r\n ...opt,\r\n collection: items,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap,\r\n });\r\n\r\n this._delta += metrics.delta;\r\n\r\n this.updateAdaptiveBufferParams(metrics, items.length);\r\n\r\n this._previousTotalSize = metrics.totalSize;\r\n\r\n this._deletedItemsMap = {};\r\n\r\n this._crudDetected = false;\r\n\r\n if (opt.dynamicSize) {\r\n this.snapshot();\r\n }\r\n\r\n const displayItems = this.generateDisplayCollection(items, itemConfigMap, { ...metrics, });\r\n return { displayItems, totalSize: metrics.totalSize, delta: metrics.delta, crudDetected };\r\n }\r\n\r\n protected _previousScrollSize = 0;\r\n\r\n protected updateAdaptiveBufferParams(metrics: IMetrics, totalItemsLength: number) {\r\n this.disposeClearBufferSizeTimer();\r\n\r\n const scrollSize = metrics.scrollSize + this._delta, delta = Math.abs(this._previousScrollSize - scrollSize);\r\n this._previousScrollSize = scrollSize;\r\n const bufferRawSize = Math.min(Math.floor(metrics.typicalItemSize !== 0 ? delta / metrics.typicalItemSize : 0) * 5, totalItemsLength),\r\n minBufferSize = bufferRawSize < this._defaultBufferSize ? this._defaultBufferSize : bufferRawSize,\r\n bufferValue = minBufferSize > this._maxBufferSize ? this._maxBufferSize : minBufferSize;\r\n\r\n this._bufferSize = bufferInterpolation(this._bufferSize, this._bufferSizeSequence, bufferValue, {\r\n extremumThreshold: this._bufferSequenceExtraThreshold,\r\n bufferSize: this._maxBufferSequenceLength,\r\n });\r\n\r\n this.startResetBufferSizeTimer();\r\n }\r\n\r\n protected startResetBufferSizeTimer() {\r\n this._resetBufferSizeTimer = setTimeout(() => {\r\n this._bufferSize = this._defaultBufferSize;\r\n this._bufferSizeSequence = [];\r\n }, this._resetBufferSizeTimeout) as unknown as number;\r\n }\r\n\r\n protected disposeClearBufferSizeTimer() {\r\n clearTimeout(this._resetBufferSizeTimer);\r\n }\r\n\r\n /**\r\n * Calculates the entry into the overscroll area and returns the number of overscroll elements\r\n */\r\n protected getElementNumToEnd<I extends IItem, C extends Array<I>>(i: number, collection: C, map: CMap<Id, ISize>, typicalItemSize: number,\r\n size: number, isVertical: boolean, indexOffset: number = 0, reverse: boolean = false): { num: number, offset: number } {\r\n const trackBy = this._trackingPropertyName, sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME;\r\n let offset = 0, num = 0;\r\n for (let j = collection.length - indexOffset - 1; reverse ? j >= 0 : j >= i; j--) {\r\n const item = collection[j], id = item[trackBy];\r\n let itemSize = 0;\r\n if (map.has(id)) {\r\n const cache = map.get(id);\r\n itemSize = cache && cache[sizeProperty] > 0 ? cache[sizeProperty] : typicalItemSize;\r\n } else {\r\n itemSize = typicalItemSize;\r\n }\r\n if (offset + itemSize > size) {\r\n return { num, offset };\r\n }\r\n offset += itemSize;\r\n num++;\r\n }\r\n return { num, offset };\r\n }\r\n\r\n /**\r\n * Calculates list metrics\r\n */\r\n protected recalculateMetrics<I extends IItem, C extends Array<I>>(options: IRecalculateMetricsOptions<I, C>): IMetrics {\r\n const { fromItemId, bounds, collection, dynamicSize, isVertical, itemSize, bufferSize: minBufferSize,\r\n scrollSize, snap, itemConfigMap, enabledBufferOptimization, previousTotalSize, crudDetected,\r\n deletedItemsMap } = options as IRecalculateMetricsOptions<I, C> & {\r\n itemConfigMap: IVirtualListItemConfigMap,\r\n }, roundedScrollSize = Math.round(scrollSize);\r\n\r\n const trackBy = this._trackingPropertyName, bufferSize = Math.max(minBufferSize, this._bufferSize),\r\n { width, height } = bounds, sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME,\r\n size = isVertical ? height : width, totalLength = collection.length, typicalItemSize = itemSize,\r\n w = isVertical ? width : typicalItemSize, h = isVertical ? typicalItemSize : height,\r\n map = this._map, snapshot = this._snapshot,\r\n snipedPos = Math.floor(scrollSize) + this._scrollStartOffset, leftItemsWeights: Array<number> = [],\r\n isFromId = fromItemId !== undefined && (typeof fromItemId === 'number' && fromItemId > -1)\r\n || (typeof fromItemId === 'string' && fromItemId > '-1');\r\n\r\n let leftItemsOffset = 0, rightItemsOffset = 0;\r\n if (enabledBufferOptimization) {\r\n switch (this.scrollDirection) {\r\n case 1: {\r\n leftItemsOffset = 0;\r\n rightItemsOffset = bufferSize;\r\n break;\r\n }\r\n case -1: {\r\n leftItemsOffset = bufferSize;\r\n rightItemsOffset = 0;\r\n break;\r\n }\r\n case 0:\r\n default: {\r\n leftItemsOffset = rightItemsOffset = bufferSize;\r\n }\r\n }\r\n } else {\r\n leftItemsOffset = rightItemsOffset = bufferSize;\r\n }\r\n\r\n let itemsFromStartToScrollEnd: number = -1, itemsFromDisplayEndToOffsetEnd = 0, itemsFromStartToDisplayEnd = -1,\r\n leftItemLength = 0, rightItemLength = 0,\r\n leftItemsWeight = 0, rightItemsWeight = 0,\r\n leftHiddenItemsWeight = 0,\r\n totalItemsToDisplayEndWeight = 0,\r\n deltaOfNewItems = 0,\r\n leftSizeOfAddedItems = 0,\r\n leftSizeOfUpdatedItems = 0,\r\n leftSizeOfDeletedItems = 0,\r\n itemById: I | undefined = undefined,\r\n itemByIdPos: number = this._scrollStartOffset,\r\n isTargetInOverscroll: boolean = false,\r\n actualScrollSize = itemByIdPos,\r\n totalSize = this._scrollStartOffset + this._scrollEndOffset,\r\n startIndex: number,\r\n isFromItemIdFound = false,\r\n deltaFromStartCreation = 0,\r\n isUpdating = false;\r\n\r\n const isStart = ((roundedScrollSize === 0) || this.isSnappedToStart);\r\n let stickyItemId: Id | undefined, isNew = false;\r\n\r\n // If the list is dynamic or there are new elements in the collection, then it switches to the long algorithm.\r\n if (dynamicSize) {\r\n if (isFromId) {\r\n for (let stickyId: Id | undefined = undefined, i = 0, l = collection.length; i < l; i++) {\r\n const item = collection[i], id = item?.[trackBy];\r\n if (itemConfigMap[id]?.sticky === 1) {\r\n stickyId = id;\r\n }\r\n if (!itemConfigMap[id]?.sticky) {\r\n stickyItemId = stickyId;\r\n }\r\n if (id === fromItemId) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let y = this._scrollStartOffset, stickyComponentSize = 0;\r\n for (let i = 0, l = collection.length; i < l; i++) {\r\n const ii = i + 1, collectionItem = collection[i], id = collectionItem[trackBy];\r\n\r\n let componentSize = 0, componentSizeDelta = 0, itemDisplayMethod: ItemDisplayMethods = ItemDisplayMethods.NOT_CHANGED;\r\n if (map.has(id)) {\r\n const cache = map.get(id);\r\n componentSize = cache[sizeProperty] > 0 ? cache[sizeProperty] : typicalItemSize;\r\n itemDisplayMethod = cache?.method ?? ItemDisplayMethods.UPDATE;\r\n const isItemNew = this._newItems.indexOf(id) > -1 || (this._isLazy && isStart && !this._isReseted);\r\n isNew = isItemNew;\r\n if (isNew) {\r\n isUpdating = true;\r\n }\r\n const snapshotBounds = snapshot.get(id),\r\n componentSnapshotSize = componentSize - (snapshotBounds ? snapshotBounds[sizeProperty] : typicalItemSize);\r\n componentSizeDelta = componentSnapshotSize;\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.UPDATE: {\r\n map.set(id, { ...cache, method: isNew ? ItemDisplayMethods.UPDATE : ItemDisplayMethods.NOT_CHANGED, [IS_NEW]: isNew });\r\n if (isNew && y <= (scrollSize + size + deltaFromStartCreation + componentSize)) {\r\n deltaFromStartCreation += componentSizeDelta;\r\n componentSizeDelta = 0;\r\n }\r\n break;\r\n }\r\n case ItemDisplayMethods.CREATE: {\r\n componentSizeDelta = typicalItemSize;\r\n map.set(id, { ...cache, method: ItemDisplayMethods.UPDATE, [IS_NEW]: isNew });\r\n if (isNew && y <= (scrollSize + size + deltaFromStartCreation + componentSize)) {\r\n deltaFromStartCreation += componentSizeDelta;\r\n componentSizeDelta = 0;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (deletedItemsMap.hasOwnProperty(i)) {\r\n const cache = deletedItemsMap[i], size = cache?.[sizeProperty] ?? typicalItemSize;\r\n if (y < scrollSize + this._scrollStartOffset - size) {\r\n leftSizeOfDeletedItems += size;\r\n }\r\n }\r\n\r\n totalSize += componentSize;\r\n\r\n if (isFromId) {\r\n if (itemById === undefined) {\r\n if (id !== fromItemId && id === stickyItemId && itemConfigMap?.[id]?.sticky === 1) {\r\n stickyComponentSize = componentSize;\r\n y -= stickyComponentSize;\r\n }\r\n\r\n if (id === fromItemId) {\r\n isFromItemIdFound = true;\r\n\r\n const { num, offset } = this.getElementNumToEnd(i, collection, map, typicalItemSize, size, isVertical),\r\n leftViewportSize = size - offset;\r\n if (leftViewportSize > 0) {\r\n const { num: num1, offset: offset1 } = this.getElementNumToEnd(i + num, collection, map, typicalItemSize, size, isVertical, 0, true),\r\n deltaNum = (num1 - num), deltaOffset = (offset1 - offset);\r\n totalItemsToDisplayEndWeight += offset;\r\n itemsFromStartToScrollEnd -= deltaNum;\r\n rightItemsWeight = rightItemLength = 0;\r\n leftHiddenItemsWeight -= deltaOffset;\r\n leftItemsWeights.splice(leftItemsWeights.length - deltaNum, deltaNum);\r\n y -= deltaOffset;\r\n }\r\n\r\n itemById = collectionItem;\r\n itemByIdPos = y;\r\n } else {\r\n leftItemsWeights.push(componentSize);\r\n leftHiddenItemsWeight += componentSize;\r\n itemsFromStartToScrollEnd = ii;\r\n }\r\n }\r\n } else if (y <= scrollSize - componentSize) {\r\n leftItemsWeights.push(componentSize);\r\n leftHiddenItemsWeight += componentSize;\r\n itemsFromStartToScrollEnd = ii;\r\n }\r\n\r\n if (isFromId) {\r\n if (itemById === undefined || y < itemByIdPos + size + componentSize) {\r\n itemsFromStartToDisplayEnd = ii;\r\n totalItemsToDisplayEndWeight += componentSize;\r\n itemsFromDisplayEndToOffsetEnd = itemsFromStartToDisplayEnd + rightItemsOffset;\r\n }\r\n } else if (y <= scrollSize + size + componentSize) {\r\n itemsFromStartToDisplayEnd = ii;\r\n totalItemsToDisplayEndWeight += componentSize;\r\n itemsFromDisplayEndToOffsetEnd = itemsFromStartToDisplayEnd + rightItemsOffset;\r\n\r\n if (y <= scrollSize + componentSize) {\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.CREATE: {\r\n leftSizeOfAddedItems += componentSizeDelta;\r\n break;\r\n }\r\n case ItemDisplayMethods.UPDATE:\r\n case ItemDisplayMethods.NOT_CHANGED: {\r\n leftSizeOfUpdatedItems += componentSizeDelta;\r\n break;\r\n }\r\n case ItemDisplayMethods.DELETE: {\r\n leftSizeOfDeletedItems += componentSizeDelta;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (itemDisplayMethod === ItemDisplayMethods.CREATE) {\r\n deltaOfNewItems += componentSizeDelta;\r\n }\r\n } else {\r\n if (i < itemsFromDisplayEndToOffsetEnd) {\r\n rightItemsWeight += componentSize;\r\n }\r\n }\r\n\r\n y += componentSize;\r\n }\r\n\r\n if (itemsFromStartToScrollEnd <= -1) {\r\n itemsFromStartToScrollEnd = 0;\r\n }\r\n if (itemsFromStartToDisplayEnd <= -1) {\r\n itemsFromStartToDisplayEnd = 0;\r\n }\r\n actualScrollSize = isFromId ? itemByIdPos : scrollSize;\r\n\r\n leftItemsWeights.splice(0, leftItemsWeights.length - leftItemsOffset);\r\n leftItemsWeights.forEach(v => {\r\n leftItemsWeight += v;\r\n });\r\n\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, leftItemsOffset);\r\n rightItemLength = itemsFromStartToDisplayEnd + rightItemsOffset > totalLength\r\n ? totalLength - itemsFromStartToDisplayEnd : rightItemsOffset;\r\n\r\n } else\r\n // Buffer optimization does not work on fast linear algorithm\r\n {\r\n itemsFromStartToScrollEnd = Math.floor(typicalItemSize !== 0 ? scrollSize / typicalItemSize : 0);\r\n itemsFromStartToDisplayEnd = Math.ceil(typicalItemSize !== 0 ? (scrollSize + size) / typicalItemSize : 0);\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, bufferSize);\r\n rightItemLength = itemsFromStartToDisplayEnd + bufferSize > totalLength\r\n ? totalLength - itemsFromStartToDisplayEnd : bufferSize;\r\n leftItemsWeight = leftItemLength * typicalItemSize;\r\n rightItemsWeight = rightItemLength * typicalItemSize;\r\n leftHiddenItemsWeight = itemsFromStartToScrollEnd * typicalItemSize;\r\n totalItemsToDisplayEndWeight = itemsFromStartToDisplayEnd * typicalItemSize;\r\n totalSize = (totalLength * typicalItemSize) + this._scrollStartOffset + this._scrollEndOffset;\r\n\r\n const k = totalSize !== 0 ? previousTotalSize / totalSize : 0;\r\n actualScrollSize = scrollSize * k;\r\n }\r\n startIndex = Math.min(itemsFromStartToScrollEnd - leftItemLength, totalLength > 0 ? totalLength - 1 : 0);\r\n\r\n const itemsOnDisplayWeight = totalItemsToDisplayEndWeight - leftItemsWeight,\r\n itemsOnDisplayLength = itemsFromStartToDisplayEnd - itemsFromStartToScrollEnd,\r\n startPosition = this._scrollStartOffset + leftHiddenItemsWeight - leftItemsWeight,\r\n renderItems = itemsOnDisplayLength + leftItemLength + rightItemLength,\r\n startCreationDelta = deltaFromStartCreation > 0 ? deltaFromStartCreation : 0,\r\n delta = leftSizeOfUpdatedItems + leftSizeOfAddedItems - leftSizeOfDeletedItems + startCreationDelta;\r\n\r\n this._deltaOfNewItems = deltaOfNewItems;\r\n\r\n if (isFromId && !isTargetInOverscroll) {\r\n actualScrollSize -= this._scrollStartOffset;\r\n }\r\n\r\n const metrics: IMetrics = {\r\n delta,\r\n normalizedItemWidth: w,\r\n normalizedItemHeight: h,\r\n width,\r\n height,\r\n dynamicSize,\r\n itemSize,\r\n itemsFromStartToScrollEnd,\r\n itemsFromStartToDisplayEnd,\r\n itemsOnDisplayWeight,\r\n itemsOnDisplayLength,\r\n isVertical,\r\n leftHiddenItemsWeight,\r\n leftItemLength,\r\n leftItemsWeight,\r\n renderItems,\r\n rightItemLength,\r\n rightItemsWeight,\r\n scrollSize: actualScrollSize,\r\n leftSizeOfAddedItems,\r\n sizeProperty,\r\n snap,\r\n snipedPos,\r\n startIndex,\r\n startPosition,\r\n totalItemsToDisplayEndWeight,\r\n totalLength,\r\n totalSize,\r\n typicalItemSize,\r\n isFromItemIdFound,\r\n isUpdating,\r\n };\r\n\r\n return metrics;\r\n }\r\n\r\n refreshCache(cache: PrerenderCache) {\r\n this._prerenderedCache = cache;\r\n }\r\n\r\n clearDelta(clearDirectionDetector = false): void {\r\n this._delta = this._deltaOfNewItems = 0;\r\n\r\n if (clearDirectionDetector) {\r\n this.clearScrollDirectionCache();\r\n }\r\n }\r\n\r\n changes(immediately: boolean = false, force: boolean = false): void {\r\n if (immediately) {\r\n if (force) {\r\n this.bumpVersion();\r\n }\r\n this._previousVersion = this._version;\r\n this.dispatch(CACHE_BOX_CHANGE_EVENT_NAME as CacheMapEvents, this.version);\r\n } else {\r\n if (force) {\r\n this.bumpVersion();\r\n return;\r\n }\r\n if (this.changesDetected()) {\r\n return;\r\n }\r\n this.bumpVersion();\r\n }\r\n }\r\n\r\n /**\r\n * Returns true if the bounds of at least one screen object have changed.\r\n */\r\n checkBoundsOfElements(): boolean {\r\n if (!this._displayComponents) {\r\n return false;\r\n }\r\n\r\n for (let i = 0, l = this._displayComponents.length; i < l; i++) {\r\n const component = this._displayComponents[i], itemId = component.instance.itemId;\r\n if (itemId === undefined) {\r\n continue;\r\n }\r\n const bounds = component.instance.getBounds(), cache = this.get(itemId);\r\n if (!!bounds && !!cache) {\r\n if (bounds.width !== cache.width || bounds.height !== cache.height) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n protected generateDisplayCollection<I extends IItem, C extends Array<I>>(items: C, itemConfigMap: IVirtualListItemConfigMap,\r\n metrics: IMetrics): IRenderVirtualListCollection {\r\n const {\r\n width,\r\n height,\r\n normalizedItemWidth,\r\n normalizedItemHeight,\r\n dynamicSize,\r\n itemsOnDisplayLength,\r\n itemsFromStartToScrollEnd,\r\n isVertical,\r\n renderItems: renderItemsLength,\r\n scrollSize,\r\n sizeProperty,\r\n snap,\r\n snipedPos,\r\n startPosition,\r\n totalLength,\r\n startIndex,\r\n typicalItemSize,\r\n } = metrics,\r\n displayItems: IRenderVirtualListCollection = [];\r\n\r\n if (items.length) {\r\n const trackBy = this._trackingPropertyName, actualSnippedPosition = snipedPos,\r\n isSnappingMethodAdvanced = this._isSnappingMethodAdvanced,\r\n deltaOffet = (isSnappingMethodAdvanced ? scrollSize : 0),\r\n boundsSize = isVertical ? height : width, actualEndSnippedPosition = scrollSize + boundsSize - this._scrollEndOffset;\r\n let pos = startPosition,\r\n renderItems = renderItemsLength,\r\n stickyItem: IRenderVirtualListItem | undefined, nextSticky: IRenderVirtualListItem | undefined, stickyItemIndex = -1,\r\n stickyItemSize = 0, endStickyItem: IRenderVirtualListItem | undefined, nextEndSticky: IRenderVirtualListItem | undefined,\r\n endStickyItemIndex = -1, endStickyItemSize = 0, count = 1;\r\n\r\n if (snap) {\r\n for (let i = Math.min(itemsFromStartToScrollEnd > 0 ? itemsFromStartToScrollEnd : 0, totalLength - 1); i >= 0; i--) {\r\n const collectionItem = items[i];\r\n if (!collectionItem) {\r\n continue;\r\n }\r\n const id = collectionItem[trackBy], cache = this.get(id)!, sticky = itemConfigMap[id]?.sticky ?? 0,\r\n selectable = itemConfigMap[id]?.selectable ?? true,\r\n collapsable = itemConfigMap[id]?.collapsable ?? false,\r\n size = dynamicSize ? cache?.[sizeProperty] > 0 ? cache?.[sizeProperty] : typicalItemSize : typicalItemSize,\r\n absoluteStartPosition = pos - (scrollSize - size) - size,\r\n ratio = size !== 0 ? boundsSize / size : 0, absoluteStartPositionPercent = -(boundsSize !== 0 ? absoluteStartPosition / boundsSize : 0) * ratio,\r\n absoluteEndPosition = boundsSize - (absoluteStartPositionPercent + size),\r\n absoluteEndPositionPercent = (absoluteStartPositionPercent + (boundsSize !== 0 ? (absoluteEndPosition + size) / boundsSize : 0) * ratio);\r\n if (sticky === 1) {\r\n const isOdd = i % 2 != 0,\r\n measures: IRenderVirtualListItemMeasures = {\r\n x: isVertical ? startPosition : actualSnippedPosition,\r\n y: isVertical ? actualSnippedPosition : startPosition,\r\n width: isVertical ? normalizedItemWidth : size,\r\n height: isVertical ? size : normalizedItemHeight,\r\n size,\r\n position: pos,\r\n boundsSize,\r\n scrollSize,\r\n absoluteStartPosition,\r\n absoluteStartPositionPercent,\r\n absoluteEndPosition,\r\n absoluteEndPositionPercent,\r\n delta: sticky === 1 ? this._scrollStartOffset : sticky === 2 ? actualEndSnippedPosition - deltaOffet - size : 0,\r\n }, config: IRenderVirtualListItemConfig = {\r\n new: (cache satisfies Cache)?.[IS_NEW] === true,\r\n odd: isOdd,\r\n even: !isOdd,\r\n isVertical,\r\n collapsable,\r\n selectable,\r\n sticky,\r\n snap,\r\n snapped: true,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n tabIndex: count,\r\n zIndex: '1',\r\n };\r\n\r\n const itemData: I = collectionItem;\r\n\r\n stickyItem = {\r\n index: i, id, measures, data: itemData, previouseData: i > 0 ? items[i - 1] : null,\r\n nextData: i < totalLength ? items[i + 1] : null, config,\r\n };\r\n stickyItemIndex = i;\r\n stickyItemSize = size;\r\n\r\n displayItems.push(stickyItem);\r\n\r\n count++;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (snap) {\r\n const si = itemsFromStartToScrollEnd + itemsOnDisplayLength - 1, startIndex = si < 0 ? si : si;\r\n for (let i = Math.min(startIndex, totalLength > 0 ? totalLength - 1 : 0), l = totalLength; i < l; i++) {\r\n const collectionItem = items[i];\r\n if (!collectionItem) {\r\n continue;\r\n }\r\n const id = collectionItem[trackBy], cache = this.get(id)!, sticky = itemConfigMap[id]?.sticky ?? 0,\r\n selectable = itemConfigMap[id]?.selectable ?? true,\r\n collapsable = itemConfigMap[id]?.collapsable ?? false,\r\n size = dynamicSize\r\n ? cache?.[sizeProperty] || typicalItemSize\r\n : typicalItemSize;\r\n if (sticky === 2) {\r\n const isOdd = i % 2 != 0,\r\n w = isVertical ? normalizedItemWidth : size, h = isVertical ? size : normalizedItemHeight,\r\n absoluteStartPosition = pos - (scrollSize - size) - size, ratio = size !== 0 ? boundsSize / size : 0, absoluteStartPositionPercent = -(boundsSize !== 0 ? absoluteStartPosition / boundsSize : 0) * ratio,\r\n absoluteEndPosition = boundsSize - (absoluteStartPositionPercent + size),\r\n absoluteEndPositionPercent = (absoluteStartPositionPercent + (boundsSize !== 0 ? (absoluteEndPosition + size) / boundsSize : 0) * ratio),\r\n measures: IRenderVirtualListItemMeasures = {\r\n x: isVertical ? 0 : actualEndSnippedPosition - w,\r\n y: isVertical ? actualEndSnippedPosition - h : 0,\r\n size,\r\n position: pos,\r\n boundsSize,\r\n scrollSize,\r\n absoluteStartPosition,\r\n absoluteStartPositionPercent,\r\n absoluteEndPosition,\r\n absoluteEndPositionPercent,\r\n width: w,\r\n height: h,\r\n delta: actualEndSnippedPosition - deltaOffet - size,\r\n }, config: IRenderVirtualListItemConfig = {\r\n new: (cache satisfies Cache)?.[IS_NEW] === true,\r\n odd: isOdd,\r\n even: !isOdd,\r\n isVertical,\r\n collapsable,\r\n selectable,\r\n sticky,\r\n snap,\r\n snapped: true,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n tabIndex: items.length,\r\n zIndex: '1',\r\n };\r\n\r\n const itemData: I = collectionItem;\r\n\r\n endStickyItem = {\r\n index: i, id, measures, data: itemData, previouseData: i > 0 ? items[i - 1] : null,\r\n nextData: i < totalLength ? items[i + 1] : null, config,\r\n };\r\n endStickyItemIndex = i;\r\n endStickyItemSize = size;\r\n\r\n displayItems.push(endStickyItem);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let i = startIndex, iterations = 0;\r\n\r\n while (renderItems > 0) {\r\n iterations++;\r\n if (iterations > totalLength || i >= totalLength) {\r\n break;\r\n }\r\n const collectionItem = items[i];\r\n if (!collectionItem) {\r\n continue;\r\n }\r\n\r\n const id = collectionItem[trackBy], cache = this.get(id)!,\r\n size = dynamicSize ? cache?.[sizeProperty] || typicalItemSize : typicalItemSize;\r\n\r\n if ((isSnappingMethodAdvanced || id !== stickyItem?.id) && id !== endStickyItem?.id) {\r\n const isOdd = i % 2 != 0,\r\n sticky = itemConfigMap[id]?.sticky ?? 0,\r\n selectable = itemConfigMap[id]?.selectable ?? true,\r\n collapsable = itemConfigMap[id]?.collapsable ?? false,\r\n snapped = snap && (sticky === 1 && (pos <= scrollSize + this._scrollStartOffset) || sticky === 2 && (pos >= scrollSize + boundsSize - size)),\r\n absoluteStartPosition = pos - scrollSize, ratio = size !== 0 ? boundsSize / size : 0, absoluteStartPositionPercent = -(boundsSize !== 0 ? absoluteStartPosition / boundsSize : 0) * ratio,\r\n absoluteEndPosition = boundsSize - (absoluteStartPositionPercent + size),\r\n absoluteEndPositionPercent = (absoluteStartPositionPercent + (boundsSize !== 0 ? (absoluteEndPosition + size) / boundsSize : 0) * ratio),\r\n measures: IRenderVirtualListItemMeasures = {\r\n x: isVertical ? 0 : pos,\r\n y: isVertical ? pos : 0,\r\n size,\r\n position: pos,\r\n boundsSize,\r\n scrollSize,\r\n absoluteStartPosition,\r\n absoluteStartPositionPercent,\r\n absoluteEndPosition,\r\n absoluteEndPositionPercent,\r\n width: isVertical ? normalizedItemWidth : size,\r\n height: isVertical ? size : normalizedItemHeight,\r\n delta: sticky === 1 ? actualSnippedPosition : sticky === 2 ? actualEndSnippedPosition - deltaOffet - size : 0,\r\n }, config: IRenderVirtualListItemConfig = {\r\n new: (cache satisfies Cache)?.[IS_NEW] === true,\r\n odd: isOdd,\r\n even: !isOdd,\r\n isVertical,\r\n collapsable,\r\n selectable,\r\n sticky: sticky,\r\n snap,\r\n snapped: false,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n tabIndex: count,\r\n isStub: (isSnappingMethodAdvanced && id === stickyItem?.id),\r\n zIndex: '0',\r\n };\r\n\r\n count++;\r\n\r\n if (snapped) {\r\n config.zIndex = '2';\r\n }\r\n\r\n const itemData: I = collectionItem;\r\n\r\n const item: IRenderVirtualListItem = {\r\n index: i, id, measures, data: itemData, previouseData: i > 0 ? items[i - 1] : null,\r\n nextData: i < totalLength ? items[i + 1] : null, config,\r\n };\r\n if (!nextSticky && stickyItemIndex < i && sticky === 1 && (pos <= scrollSize + this._scrollStartOffset + size + stickyItemSize)) {\r\n item.measures.x = isVertical ? 0 : snapped ? actualSnippedPosition : pos;\r\n item.measures.y = isVertical ? snapped ? actualSnippedPosition : pos : 0;\r\n nextSticky = item;\r\n nextSticky.config.snapped = snapped;\r\n nextSticky.measures.delta = (isVertical ? item.measures.y : item.measures.x) - scrollSize;\r\n nextSticky.config.zIndex = '3';\r\n }\r\n if (!nextEndSticky && endStickyItemIndex > i && sticky === 2 &&\r\n (pos >= actualEndSnippedPosition - size - endStickyItemSize)) {\r\n item.measures.x = isVertical ? 0 : snapped ? actualEndSnippedPosition - size : pos;\r\n item.measures.y = isVertical ? snapped ? actualEndSnippedPosition - size : pos : 0;\r\n nextEndSticky = item;\r\n nextEndSticky.config.zIndex = '3';\r\n nextEndSticky.config.snapped = snapped;\r\n nextEndSticky.measures.delta = (isVertical ? item.measures.y : item.measures.x) - scrollSize;\r\n }\r\n\r\n displayItems.push(item);\r\n }\r\n\r\n renderItems -= 1;\r\n pos += size;\r\n i++;\r\n }\r\n\r\n const axis = isVertical ? Y_PROP_NAME : X_PROP_NAME;\r\n\r\n if (!!nextSticky && !!stickyItem && nextSticky.measures[axis] <= actualSnippedPosition + stickyItemSize) {\r\n if (nextSticky.measures[axis] > scrollSize - stickyItemSize) {\r\n stickyItem.measures[axis] = nextSticky.measures[axis] - stickyItemSize;\r\n stickyItem.config.snapped = nextSticky.config.snapped = false;\r\n stickyItem.config.snappedOut = true;\r\n stickyItem.config.sticky = 1;\r\n stickyItem.measures.delta = (isVertical ? stickyItem.measures.y : stickyItem.measures.x) - scrollSize;\r\n } else {\r\n nextSticky.config.snapped = true;\r\n nextSticky.measures.delta = (isVertical ? nextSticky.measures.y : nextSticky.measures.x) - scrollSize;\r\n stickyItem.measures[axis] = stickyItem.measures[axis] + stickyItem.measures[sizeProperty];\r\n }\r\n }\r\n\r\n if (!!nextEndSticky && !!endStickyItem &&\r\n (nextEndSticky.measures[axis] >= actualEndSnippedPosition - endStickyItemSize - nextEndSticky.measures[sizeProperty])) {\r\n if (nextEndSticky.measures[axis] < actualEndSnippedPosition - nextEndSticky.measures[sizeProperty]) {\r\n endStickyItem.measures[axis] = nextEndSticky.measures[axis] + nextEndSticky.measures[sizeProperty];\r\n endStickyItem.config.snapped = nextEndSticky.config.snapped = false;\r\n endStickyItem.config.snappedOut = true;\r\n endStickyItem.config.sticky = 2;\r\n endStickyItem.measures.delta = (isVertical ? endStickyItem.measures.y : endStickyItem.measures.x) - scrollSize;\r\n } else {\r\n nextEndSticky.config.snapped = true;\r\n nextEndSticky.measures[axis] = actualEndSnippedPosition - nextEndSticky.measures[sizeProperty];\r\n nextEndSticky.measures.delta = (isVertical ? nextEndSticky.measures.y : nextEndSticky.measures.x) - scrollSize;\r\n endStickyItem.measures[axis] = nextEndSticky.measures[axis] + nextEndSticky.measures[sizeProperty];\r\n }\r\n }\r\n }\r\n return displayItems;\r\n }\r\n\r\n resetPositions() {\r\n this._tracker.clearTrackMap();\r\n\r\n this.clearScrollDirectionCache(false);\r\n\r\n this.deltaDirection = 0;\r\n\r\n this.track();\r\n }\r\n\r\n /**\r\n * tracking by propName\r\n */\r\n track(): void {\r\n if (!this._items || !this._displayComponents) {\r\n return;\r\n }\r\n\r\n this._tracker.track(this._items, this._displayComponents, this._snappedDisplayComponents, this.scrollDirection);\r\n }\r\n\r\n setDisplayObjectIndexMapById(v: { [id: number]: number }): void {\r\n this._tracker.displayObjectIndexMapById = v;\r\n }\r\n\r\n untrackComponentByIdProperty(component?: C | undefined) {\r\n this._tracker.untrackComponentByIdProperty(component);\r\n }\r\n\r\n getItemBounds(id: Id): ISize | null {\r\n if (this.has(id)) {\r\n return this.get(id) ?? null;\r\n }\r\n return null;\r\n }\r\n\r\n private _debouncedIsScrollStartOff = debounce(() => {\r\n this._isScrollStart = false;\r\n });\r\n\r\n protected cacheElements(isVertical: boolean, itemSize: number): void {\r\n if (!this._displayComponents) {\r\n return;\r\n }\r\n\r\n for (let i = 0, l = this._displayComponents.length; i < l; i++) {\r\n const component = this._displayComponents[i], itemId = component.instance.itemId;\r\n if (itemId === undefined) {\r\n continue;\r\n }\r\n const bounds = component.instance.getBounds();\r\n this.set(itemId, {\r\n ...this.get(itemId), ...bounds,\r\n width: bounds.width || (isVertical ? 0 : itemSize),\r\n height: bounds.height || (isVertical ? itemSize : 0),\r\n });\r\n if (this._isLazy && (this._isScrollStart)) {\r\n this._debouncedIsScrollStartOff.execute();\r\n }\r\n }\r\n const cache = this._prerenderedCache;\r\n if (!!cache) {\r\n for (const id in cache) {\r\n const cacheItem = cache[id];\r\n this.set(id, { ...(this.get(id) || {}), ...cacheItem });\r\n }\r\n this._prerenderedCache = null;\r\n }\r\n }\r\n\r\n resetCacheChunkInfo(): void {\r\n this._newItems = [];\r\n }\r\n\r\n cacheClean() {\r\n this._map.clear();\r\n this._snapshot.clear();\r\n }\r\n\r\n override dispose() {\r\n super.dispose();\r\n\r\n this.disposeClearBufferSizeTimer();\r\n\r\n if (!!this._debouncedIsScrollStartOff) {\r\n this._debouncedIsScrollStartOff.dispose();\r\n }\r\n\r\n if (!!this._tracker) {\r\n this._tracker.dispose();\r\n }\r\n }\r\n}\r\n","/**\r\n * Methods for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/enums/method-for-selecting-types.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum MethodsForSelectingTypes {\r\n /**\r\n * List items are not selectable.\r\n */\r\n NONE = 0,\r\n /**\r\n * List items are selected one by one.\r\n */\r\n SELECT = 1,\r\n /**\r\n * Multiple selection of list items.\r\n */\r\n MULTI_SELECT = 2,\r\n}","export const NGVL_INDEX = 'ngvl-index',\r\n getListElementByIndex = (index: number) => {\r\n return `[${NGVL_INDEX}=\"${index}\"]`;\r\n },\r\n getListElements = () => {\r\n return `[${NGVL_INDEX}]`;\r\n };\r\n","export const createDisplayId = (listId: number, id: number) => {\r\n return `${listId}-${id}`;\r\n};\r\n","const isUndefinable = <T = any>(value: T) => {\r\n return value === undefined;\r\n}\r\n\r\nconst isNullable = <T = any>(value: T) => {\r\n return value === null;\r\n}\r\n\r\n/**\r\n * Int validator\r\n * @param value Int\r\n */\r\nexport const validateInt = (value: number | undefined, undefinable = false) => {\r\n return (undefinable && isUndefinable(value)) || !Number.isNaN(Number.parseInt(`${value}`));\r\n};\r\n\r\n/**\r\n * Float validator\r\n * @param value Float\r\n */\r\nexport const validateFloat = (value: number | undefined, undefinable = false) => {\r\n return (undefinable && isUndefinable(value)) || !Number.isNaN(Number.parseFloat(`${value}`));\r\n};\r\n\r\n/**\r\n * String validator\r\n * @param value String\r\n */\r\nexport const validateString = (value: string | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || typeof value === 'string';\r\n};\r\n\r\n/**\r\n * Boolean validator\r\n * @param value Boolean\r\n */\r\nexport const validateBoolean = (value: boolean | undefined, undefinable = false) => {\r\n return (undefinable && isUndefinable(value)) || typeof value === 'boolean';\r\n};\r\n\r\n/**\r\n * Array validator\r\n * @param value Array\r\n */\r\nexport const validateArray = <T = any>(value: Array<T> | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || Array.isArray(value);\r\n};\r\n\r\n/**\r\n * Object validator\r\n * @param value Object\r\n */\r\nexport const validateObject = <T = any>(value: Object & T | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || typeof value === 'object';\r\n};\r\n\r\n/**\r\n * Function validator\r\n * @param value Function\r\n */\r\nexport const validateFunction = <T = any>(value: Object & T | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || typeof value === 'function';\r\n};\r\n","import { MAX_SCROLL_TO_ITERATIONS } from \"../const\";\r\nimport { FocusAlignment, Id } from \"../types\";\r\nimport { validateFloat, validateInt, validateString } from \"./validation\";\r\n\r\nexport const validateScrollIteration = (value: number) => {\r\n const result = Number.isNaN(value) || (value < 0) ? 0 : value > MAX_SCROLL_TO_ITERATIONS ? MAX_SCROLL_TO_ITERATIONS : value;\r\n return result;\r\n},\r\n validateId = (id: Id) => {\r\n const valid = validateString(id as string) || validateFloat(id as number);\r\n if (!valid) {\r\n throw Error('The \"id\" parameter must be of type `Id`.');\r\n }\r\n },\r\n validateScrollBehavior = (behavior: ScrollBehavior) => {\r\n const valid = validateString(behavior as string) && (behavior === 'auto' || behavior === 'instant' || behavior === 'smooth');\r\n if (!valid) {\r\n throw Error('The \"behavior\" parameter must have the value `auto`, `instant` or `smooth`.');\r\n }\r\n },\r\n validateIteration = (iteration: number | undefined) => {\r\n const valid = validateInt(iteration, true);\r\n if (!valid) {\r\n throw Error('The \"iteration\" parameter must be of type `number`.');\r\n }\r\n },\r\n validateFocusAlignment = (align: FocusAlignment) => {\r\n const valid = validateString(align as string) && (align === 'none' || align === 'start' || align === 'center' || align === 'end');\r\n if (!valid) {\r\n throw Error('The \"align\" parameter must have the value `none`, `start`, `center` or `end`.');\r\n }\r\n };","import { ITEM_ID } from \"../const\";\r\nimport { Id } from \"../types\";\r\n\r\nexport const getSelectorByItemId = (id: Id) => {\r\n return `[${ITEM_ID}=\"${id}\"]`;\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';\r\nimport { Subject, tap } from 'rxjs';\r\nimport { TrackBox, TrackBoxEvents } from './core/track-box';\r\nimport { IRenderVirtualListItem, IVirtualListItem } from './models';\r\nimport { IAnimationParams, IScrollOptions, ISize } from './interfaces';\r\nimport { IRenderVirtualListCollection } from './models/render-collection.model';\r\nimport { FocusAlignments, TextDirection, TextDirections } from './enums';\r\nimport { MethodsForSelectingTypes } from './enums/method-for-selecting-types';\r\nimport {\r\n BEHAVIOR_AUTO, BEHAVIOR_INSTANT, DEFAULT_ANIMATION_PARAMS, DEFAULT_CLICK_DISTANCE, DEFAULT_COLLAPSE_BY_CLICK, DEFAULT_SELECT_BY_CLICK,\r\n ITEM_CONTAINER,\r\n TRACK_BY_PROPERTY_NAME,\r\n} from './const';\r\nimport { FocusAlignment, Id } from './types';\r\nimport { getListElements, NGVL_INDEX } from './components/ng-list-item/utils';\r\nimport { FocusItemParams } from './types/focus-item-params';\r\nimport { validateFocusAlignment, validateId } from './utils/list-validators';\r\nimport { getSelectorByItemId } from './utils/get-selector-by-item-id';\r\nimport { IScrollToParams } from './interfaces/scroll-to-params';\r\n\r\n/**\r\n * NgVirtualListService\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/ng-virtual-list.service.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgVirtualListService {\r\n private _id: number = 0;\r\n get id() { return this._id; }\r\n\r\n private _nextComponentId: number = 0;\r\n\r\n private _$itemClick = new Subject<IRenderVirtualListItem<any> | null>();\r\n $itemClick = this._$itemClick.asObservable();\r\n\r\n private _$selectedIds = new BehaviorSubject<Array<Id> | Id | null>(null);\r\n $selectedIds = this._$selectedIds.asObservable();\r\n\r\n private _$collapsedIds = new BehaviorSubject<Array<Id>>([]);\r\n $collapsedIds = this._$collapsedIds.asObservable();\r\n\r\n private _$methodOfSelecting = new BehaviorSubject<MethodsForSelectingTypes>(0);\r\n $methodOfSelecting = this._$methodOfSelecting.asObservable();\r\n\r\n set methodOfSelecting(v: MethodsForSelectingTypes) {\r\n this._$methodOfSelecting.next(v);\r\n }\r\n\r\n private _$focusedId = new BehaviorSubject<Id | null>(null);\r\n $focusedId = this._$focusedId.asObservable();\r\n get focusedId() { return this._$focusedId.getValue(); }\r\n\r\n private _$focusItem = new Subject<FocusItemParams>();\r\n readonly $focusItem = this._$focusItem.asObservable();\r\n\r\n private _$scrollTo = new Subject<IScrollToParams | undefined>();\r\n readonly $scrollTo = this._$scrollTo.asObservable();\r\n\r\n private _$scrollToStart = new Subject<IScrollOptions | undefined>();\r\n readonly $scrollToStart = this._$scrollToStart.asObservable();\r\n\r\n private _$scrollToEnd = new Subject<IScrollOptions | undefined>();\r\n readonly $scrollToEnd = this._$scrollToEnd.asObservable();\r\n\r\n private _$tick = new Subject<void>();\r\n readonly $tick = this._$tick.asObservable();\r\n\r\n private _$cacheVersion = new BehaviorSubject<number>(-1);\r\n readonly $cacheVersion = this._$cacheVersion.asObservable();\r\n\r\n trackBy: string = TRACK_BY_PROPERTY_NAME;\r\n\r\n lastFocusedItemId: number = -1;\r\n\r\n scrollStartOffset: number = 0;\r\n\r\n scrollEndOffset: number = 0;\r\n\r\n selectByClick: boolean = DEFAULT_SELECT_BY_CLICK;\r\n\r\n collapseByClick: boolean = DEFAULT_COLLAPSE_BY_CLICK;\r\n\r\n defaultItemValue: IVirtualListItem | null = null;\r\n\r\n isVertical: boolean = true;\r\n\r\n dynamic: boolean = true;\r\n\r\n snapScrollToStart: boolean = false;\r\n\r\n snapScrollToEnd: boolean = false;\r\n\r\n animationParams: IAnimationParams = DEFAULT_ANIMATION_PARAMS;\r\n\r\n private _trackBox: TrackBox | undefined;\r\n\r\n listElement: HTMLDivElement | null = null;\r\n\r\n private _$displayItems = new BehaviorSubject<IRenderVirtualListCollection>([]);\r\n readonly $displayItems = this._$displayItems.asObservable();\r\n get displayItems() { return this._$displayItems.getValue(); }\r\n\r\n private _collection: IRenderVirtualListCollection = [];\r\n set collection(v: IRenderVirtualListCollection) {\r\n if (this._collection === v) {\r\n return;\r\n }\r\n\r\n this._collection = v;\r\n\r\n this._$displayItems.next(v);\r\n }\r\n get collection() { return this._collection; }\r\n\r\n private _$langTextDir = new BehaviorSubject<TextDirection>(TextDirections.LTR);\r\n readonly $langTextDir = this._$langTextDir.asObservable();\r\n get langTextDir() { return this._$langTextDir.getValue(); }\r\n\r\n private _langTextDir: TextDirection = TextDirections.LTR;\r\n set langTextDir(v: TextDirection) {\r\n if (this._langTextDir === v) {\r\n return;\r\n }\r\n\r\n this._langTextDir = v;\r\n\r\n this._$langTextDir.next(v);\r\n }\r\n\r\n get scrollBarSize() { return this._$scrollBarSize.getValue(); }\r\n\r\n private _scrollBarSize: number = 0;\r\n set scrollBarSize(v: number) {\r\n if (this._scrollBarSize === v) {\r\n return;\r\n }\r\n\r\n this._scrollBarSize = v;\r\n\r\n this._$scrollBarSize.next(v);\r\n }\r\n private _$scrollBarSize = new BehaviorSubject<number>(this._scrollBarSize);\r\n readonly $scrollBarSize = this._$scrollBarSize.asObservable();\r\n\r\n private _$clickDistance = new BehaviorSubject<number>(DEFAULT_CLICK_DISTANCE);\r\n readonly $clickDistance = this._$clickDistance.asObservable();\r\n get clickDistance() { return this._$clickDistance.getValue(); }\r\n\r\n private _clickDistance: number = DEFAULT_CLICK_DISTANCE;\r\n set clickDistance(v: number) {\r\n if (this._clickDistance === v) {\r\n return;\r\n }\r\n\r\n this._clickDistance = v;\r\n\r\n this._$clickDistance.next(v);\r\n }\r\n\r\n private _onTickHandler = () => {\r\n this._$tick.next();\r\n };\r\n\r\n private _onTrackBoxChangeHandler = (v: number) => {\r\n this._$cacheVersion.next(v);\r\n };\r\n\r\n set selectedIds(ids: Array<Id> | Id | null) {\r\n if (JSON.stringify(this._$selectedIds.getValue()) !== JSON.stringify(ids)) {\r\n this._$selectedIds.next(ids);\r\n }\r\n }\r\n\r\n get selectedIds() { return this._$selectedIds.getValue(); }\r\n\r\n set collapsedIds(ids: Array<Id>) {\r\n if (JSON.stringify(this._$collapsedIds.getValue()) !== JSON.stringify(ids)) {\r\n this._$collapsedIds.next(ids);\r\n }\r\n }\r\n\r\n get collapsedIds() { return this._$collapsedIds.getValue(); }\r\n\r\n constructor() {\r\n this._$methodOfSelecting.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n switch (v) {\r\n case MethodsForSelectingTypes.SELECT: {\r\n const curr = this._$selectedIds.getValue();\r\n if (typeof curr !== 'number' && typeof curr !== 'string') {\r\n this._$selectedIds.next(null);\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.MULTI_SELECT: {\r\n if (!Array.isArray(this._$selectedIds.getValue())) {\r\n this._$selectedIds.next([]);\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.NONE:\r\n default: {\r\n this._$selectedIds.next(null);\r\n break;\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n itemClick(data: IRenderVirtualListItem | null) {\r\n this._$itemClick.next(data);\r\n if (this.collapseByClick) {\r\n const trackBy = this.trackBy, id = (data as any)?.[trackBy] ?? null;\r\n this.collapse(id);\r\n }\r\n if (this.selectByClick) {\r\n const trackBy = this.trackBy, id = (data as any)?.[trackBy] ?? null;\r\n this.select(id);\r\n }\r\n }\r\n\r\n update(immediately: boolean = false, force: boolean = false) {\r\n this._trackBox?.changes(immediately, force);\r\n }\r\n\r\n private getItemConfig(id: Id) {\r\n const displayItems = this.displayItems;\r\n if (!!displayItems) {\r\n const trackBy = this.trackBy;\r\n return displayItems.find(data => {\r\n const _id = (data as any)?.[trackBy] ?? null;\r\n return _id === id;\r\n })?.config ?? null;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Selects a list item\r\n * @param id \r\n * @param selected - If the value is undefined, then the toggle method is executed, if false or true, then the selection/deselection is performed.\r\n */\r\n select(id: Id, selected?: boolean) {\r\n validateId(id);\r\n const config = this.getItemConfig(id);\r\n if ((!!config && config.selectable)) {\r\n switch (this._$methodOfSelecting.getValue()) {\r\n case MethodsForSelectingTypes.SELECT: {\r\n const curr = this._$selectedIds.getValue() as (Id | undefined);\r\n if (selected === undefined) {\r\n this._$selectedIds.next(curr !== id ? id : null);\r\n } else {\r\n this._$selectedIds.next(selected ? id : null);\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.MULTI_SELECT: {\r\n const curr = [...(this._$selectedIds.getValue() || []) as Array<Id>],\r\n index = curr.indexOf(id);\r\n if (selected === undefined) {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$selectedIds.next(curr);\r\n } else {\r\n this._$selectedIds.next([...curr, id]);\r\n }\r\n } else if (selected) {\r\n if (index > -1) {\r\n this._$selectedIds.next(curr);\r\n } else {\r\n this._$selectedIds.next([...curr, id]);\r\n }\r\n } else {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$selectedIds.next(curr);\r\n } else {\r\n this._$selectedIds.next(curr);\r\n }\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.NONE:\r\n default: {\r\n this._$selectedIds.next(null);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Collapse list items\r\n * @param data \r\n * @param collapsed - If the value is undefined, then the toggle method is executed, if false or true, then the collapse/expand is performed.\r\n */\r\n collapse(id: Id, collapsed?: boolean) {\r\n validateId(id);\r\n const config = this.getItemConfig(id);\r\n if ((!!config && config.sticky > 0 && config.collapsable)) {\r\n const curr = [...(this._$collapsedIds.getValue() || []) as Array<Id>],\r\n index = curr.indexOf(id);\r\n if (collapsed === undefined) {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$collapsedIds.next(curr);\r\n } else {\r\n this._$collapsedIds.next([...curr, id]);\r\n }\r\n } else if (collapsed) {\r\n if (index > -1) {\r\n this._$collapsedIds.next(curr);\r\n } else {\r\n this._$collapsedIds.next([...curr, id]);\r\n }\r\n } else {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$collapsedIds.next(curr);\r\n } else {\r\n this._$collapsedIds.next(curr);\r\n }\r\n }\r\n }\r\n }\r\n\r\n getFocusedElementById(id: Id) {\r\n const el = this.listElement?.querySelector<HTMLDivElement>(getSelectorByItemId(id));\r\n if (!!el) {\r\n const focusedEl = el.querySelector<HTMLDivElement>(`.${ITEM_CONTAINER}`);\r\n if (!!focusedEl) {\r\n return focusedEl;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Returns the bounds of an element with a given id\r\n */\r\n getItemBounds(id: Id): ISize | null {\r\n validateId(id);\r\n return this._trackBox?.getItemBounds(id) ?? null;\r\n }\r\n\r\n /**\r\n * Focus an list item by a given id.\r\n */\r\n focusById(id: Id, align: FocusAlignment = FocusAlignments.NONE, scrollBehavior: ScrollBehavior = \"auto\") {\r\n validateId(id);\r\n validateFocusAlignment(align);\r\n const el = this.getFocusedElementById(id);\r\n if (!!el) {\r\n this.focus(el, align, scrollBehavior);\r\n }\r\n }\r\n\r\n focus(element: HTMLElement, align: FocusAlignment = FocusAlignments.CENTER, behavior: ScrollBehavior = BEHAVIOR_AUTO): boolean {\r\n element.focus({ preventScroll: true });\r\n if (!!element.parentElement) {\r\n const position = parseFloat(element.parentElement?.getAttribute('position') ?? '0');\r\n this._$focusItem.next({ element, position, align, behavior });\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n focusFirstElement() {\r\n const elements = this.listElement?.querySelectorAll<HTMLDivElement>(getListElements()),\r\n elList = (elements ? Array.from(elements) : []).sort((a, b) => {\r\n const indexA = Number(a.getAttribute(NGVL_INDEX)), indexB = Number(b.getAttribute(NGVL_INDEX));\r\n if (indexA > indexB) return 1;\r\n if (indexA < indexB) return -1;\r\n return 0;\r\n });\r\n let element: HTMLElement | undefined = undefined;\r\n for (let i = 0, l = elList.length; i < l; i++) {\r\n const el = elList[i], index = Number(el.getAttribute(NGVL_INDEX));\r\n if (!!el && index > 0) {\r\n element = el;\r\n break;\r\n }\r\n }\r\n if (!!element) {\r\n this.focus(element, FocusAlignments.CENTER, BEHAVIOR_INSTANT);\r\n }\r\n }\r\n\r\n areaFocus(id: Id | null) {\r\n this._$focusedId.next(id);\r\n }\r\n\r\n initialize(id: number, trackBox: TrackBox) {\r\n this._id = id;\r\n this._trackBox = trackBox;\r\n this._trackBox.addEventListener(TrackBoxEvents.TICK, this._onTickHandler);\r\n this._trackBox.addEventListener(TrackBoxEvents.CHANGE, this._onTrackBoxChangeHandler);\r\n }\r\n\r\n generateComponentId() {\r\n return this._nextComponentId = this._nextComponentId === Number.MAX_SAFE_INTEGER\r\n ? 0 : this._nextComponentId + 1;\r\n }\r\n\r\n /**\r\n * The method scrolls the list to the element with the given `id` and returns the value of the scrolled area.\r\n */\r\n scrollTo(id: Id, cb: (() => void) | null = null, options: IScrollOptions | null = null) {\r\n this._$scrollTo.next({ id, cb, options });\r\n }\r\n\r\n /**\r\n * Scrolls the scroll area to the first item in the collection.\r\n */\r\n scrollToStart(options?: IScrollOptions) {\r\n this._$scrollToStart.next(options);\r\n }\r\n\r\n /**\r\n * Scrolls the list to the end of the content size.\r\n */\r\n scrollToEnd(options?: IScrollOptions) {\r\n this._$scrollToEnd.next(options);\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { IRenderVirtualListItem, IVirtualListItem } from './models';\r\nimport { IScrollOptions } from './interfaces';\r\nimport { FocusAlignment, Id } from './types';\r\nimport { FocusItemParams } from './types/focus-item-params';\r\nimport { NgVirtualListService } from './ng-virtual-list.service';\r\nimport { FocusAlignments } from './enums';\r\n\r\n/**\r\n * NgVirtualListPublicService\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/ng-virtual-list-publick.service.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgVirtualListPublicService {\r\n private _internalService = inject(NgVirtualListService);\r\n\r\n /**\r\n * Unique list identifier.\r\n */\r\n get id(): number { return this._internalService.id; }\r\n\r\n /**\r\n * Informs about a click on a list item.\r\n */\r\n get $itemClick(): Observable<IRenderVirtualListItem<any> | null> { return this._internalService.$itemClick; };\r\n\r\n /**\r\n * Informs about the selection of a list item(s).\r\n */\r\n get $selectedIds(): Observable<Array<Id> | Id | null> { return this._internalService.$selectedIds; };\r\n\r\n /**\r\n * Informs about the collapse (expanding) of a list element(s).\r\n */\r\n get $collapsedIds(): Observable<Array<Id>> { return this._internalService.$collapsedIds; };\r\n\r\n /**\r\n * Informs the focus on the specified list item.\r\n */\r\n get $focusItem(): Observable<FocusItemParams> { return this._internalService.$focusItem; };\r\n\r\n /**\r\n * Notifies about the next change detection tick. Works similarly to `setTimeout` with a timeout of 0.\r\n */\r\n get $tick(): Observable<void> { return this._internalService.$tick; };\r\n\r\n /**\r\n * Specifies a list of selected items.\r\n */\r\n set selectedIds(ids: Array<Id> | Id | null) {\r\n this._internalService.selectedIds = ids;\r\n }\r\n\r\n /**\r\n * Returns a list of selected items.\r\n */\r\n get selectedIds() { return this._internalService.selectedIds; }\r\n\r\n /**\r\n * Specifies a list of collapsed elements.\r\n */\r\n set сollapsedIds(ids: Array<Id>) {\r\n this._internalService.collapsedIds = ids;\r\n }\r\n\r\n /**\r\n * Returns a list of collapsed elements.\r\n */\r\n get сollapsedIds() { return this._internalService.collapsedIds; }\r\n\r\n /**\r\n * Updates the list\r\n * @param immediately - Indicates that the list is updated instantly.\r\n * @param force - Forced update.\r\n */\r\n update(immediately: boolean = false, force: boolean = false) {\r\n this._internalService.update(immediately, force);\r\n }\r\n\r\n /**\r\n * Selects a list item\r\n * @param id \r\n * @param selected - If the value is undefined, then the toggle method is executed, if false or true, then the selection/deselection is performed.\r\n */\r\n select(id: Id, selected: boolean | undefined = undefined) {\r\n this._internalService.select(id, selected);\r\n }\r\n\r\n /**\r\n * Collapse list items\r\n * @param id \r\n * @param collapsed - If the value is undefined, then the toggle method is executed, if false or true, then the collapse/expand is performed.\r\n */\r\n collapse(id: Id, collapsed: boolean | undefined = undefined) {\r\n this._internalService.collapse(id, collapsed);\r\n }\r\n\r\n /**\r\n * Focus an list item by a given id.\r\n */\r\n focus(id: Id, align: FocusAlignment = FocusAlignments.NONE, scrollBehavior: ScrollBehavior = \"auto\") {\r\n return this._internalService.focusById(id, align, scrollBehavior)\r\n }\r\n\r\n /**\r\n * The method scrolls the list to the element with the given `id` and returns the value of the scrolled area.\r\n */\r\n scrollTo(id: Id, cb: (() => void) | null = null, options: IScrollOptions | null = null) {\r\n this._internalService.scrollTo(id, cb, options);\r\n }\r\n\r\n /**\r\n * Scrolls the scroll area to the first item in the collection.\r\n */\r\n scrollToStart(options?: IScrollOptions) {\r\n this._internalService.scrollToStart(options);\r\n }\r\n\r\n /**\r\n * Scrolls the list to the end of the content size.\r\n */\r\n scrollToEnd(options?: IScrollOptions) {\r\n this._internalService.scrollToEnd(options);\r\n }\r\n}\r\n","import { ChangeDetectorRef, computed, DestroyRef, ElementRef, inject, Signal, signal, TemplateRef } from '@angular/core';\r\nimport { ISize } from '../../../interfaces';\r\nimport { IRenderVirtualListItem } from '../../../models/render-item.model';\r\nimport { IDisplayObjectConfig, IDisplayObjectMeasures } from '../../../models';\r\nimport {\r\n DEFAULT_ZINDEX, DISPLAY_BLOCK, DISPLAY_NONE, HIDDEN_ZINDEX, PART_DEFAULT_ITEM, PART_ITEM_COLLAPSED, PART_ITEM_EVEN,\r\n PART_ITEM_FOCUSED, PART_ITEM_NEW, PART_ITEM_ODD, PART_ITEM_SELECTED, PART_ITEM_SNAPPED, POSITION_ABSOLUTE, PX, SIZE_100_PERSENT,\r\n SIZE_AUTO, TRANSLATE_3D, VISIBILITY_HIDDEN, VISIBILITY_VISIBLE,\r\n} from '../../../const';\r\nimport { ITemplateContext } from '../interfaces';\r\nimport {\r\n CLASS_NAME_FOCUS, CLASS_NAME_SNAPPED, CLASS_NAME_SNAPPED_OUT, ID, ITEM_ID, POSITION, POSITION_ZERO, TRANSLATE_3D_HIDDEN,\r\n} from '../const';\r\nimport { TextDirection, TextDirections } from '../../../enums';\r\nimport { NgVirtualListPublicService } from '../../../ng-virtual-list-public.service';\r\nimport { NgVirtualListService } from '../../../ng-virtual-list.service';\r\nimport { createDisplayId } from '../utils';\r\n\r\n/**\r\n * BaseVirtualListItemComponent\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/list-item/base/base-virtual-list-item-component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class BaseVirtualListItemComponent {\r\n private _cdr = inject(ChangeDetectorRef);\r\n\r\n private _apiService = inject(NgVirtualListPublicService);\r\n\r\n protected readonly _service = inject(NgVirtualListService);\r\n\r\n protected _id!: number;\r\n get id() {\r\n return this._id;\r\n }\r\n\r\n protected _listId!: number;\r\n get listId() {\r\n return this._listId;\r\n }\r\n\r\n protected _displayId!: string;\r\n get displayId() {\r\n return this._displayId;\r\n }\r\n\r\n protected _isSelected: boolean = false;\r\n\r\n protected _isCollapsed: boolean = false;\r\n\r\n protected readonly config = signal<IDisplayObjectConfig>({} as IDisplayObjectConfig);\r\n\r\n protected readonly measures = signal<IDisplayObjectMeasures | null>(null);\r\n\r\n protected readonly focused = signal<boolean>(false);\r\n\r\n protected readonly part = signal<string>(PART_DEFAULT_ITEM);\r\n\r\n protected readonly data = signal<IRenderVirtualListItem | null>(null);\r\n protected _data: IRenderVirtualListItem | null = null;\r\n set item(v: IRenderVirtualListItem | null) {\r\n if (this._data === v || this._data?.id === -1 || !v) {\r\n return;\r\n }\r\n\r\n this._data = v;\r\n\r\n this.updatePartStr(v, this._isSelected, this._isCollapsed);\r\n\r\n this.updateConfig(v);\r\n\r\n this.updateMeasures(v);\r\n\r\n this.update();\r\n\r\n this.data.set(v);\r\n\r\n this._cdr.markForCheck();\r\n }\r\n\r\n protected readonly classes!: Signal<{ [cName: string]: boolean; }>;\r\n\r\n protected readonly index!: Signal<number>;\r\n\r\n protected readonly templateContext!: Signal<ITemplateContext>;\r\n\r\n public regular: boolean = false;\r\n\r\n protected _scrollBarSize: number = 0;\r\n\r\n protected _langTextDir: TextDirection = TextDirections.LTR;\r\n\r\n protected _regularLength: string = SIZE_100_PERSENT;\r\n set regularLength(v: string) {\r\n if (this._regularLength === v) {\r\n return;\r\n }\r\n\r\n this._regularLength = v;\r\n\r\n this.update();\r\n\r\n this._cdr.markForCheck();\r\n }\r\n\r\n get item() {\r\n return this._data;\r\n }\r\n\r\n get itemId() {\r\n return this._data?.id;\r\n }\r\n\r\n protected readonly itemRenderer = signal<TemplateRef<any> | undefined>(undefined);\r\n\r\n protected _renderer: TemplateRef<any> | undefined;\r\n set renderer(v: TemplateRef<any> | undefined) {\r\n if (this._renderer !== v) {\r\n this._renderer = v;\r\n this.itemRenderer.set(v);\r\n }\r\n }\r\n\r\n protected _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n get element() {\r\n return this._elementRef.nativeElement;\r\n }\r\n\r\n protected _destroyRef = inject(DestroyRef);\r\n\r\n constructor() {\r\n this._id = this._service.generateComponentId();\r\n this._listId = this._service.id;\r\n this._displayId = createDisplayId(this._listId, this._id);\r\n\r\n this.classes = computed(() => {\r\n const data = this.data(), focused = this.focused();\r\n return {\r\n [CLASS_NAME_SNAPPED]: data?.config?.snapped ?? false, [CLASS_NAME_SNAPPED_OUT]: data?.config?.snappedOut ?? false,\r\n [CLASS_NAME_FOCUS]: focused,\r\n };\r\n });\r\n\r\n this.index = computed(() => {\r\n return this.config()?.tabIndex ?? -1;\r\n });\r\n\r\n this.templateContext = computed(() => {\r\n const data = this.data(), measures = this.measures(), config = this.config();\r\n return {\r\n data: data?.data, prevData: data?.previouseData, nextData: data?.nextData, measures,\r\n config, reseted: false, index: data?.index ?? - 1, api: this._apiService,\r\n };\r\n });\r\n }\r\n\r\n protected updateMeasures(v: IRenderVirtualListItem<any> | null) {\r\n this.measures.set(v?.measures ? { ...v.measures } : null)\r\n }\r\n\r\n protected updateConfig(v: IRenderVirtualListItem<any> | null) {\r\n this.config.set({\r\n ...v?.config || {} as IDisplayObjectConfig, selected: this._isSelected, collapsed: this._isCollapsed, focused: this.focused(),\r\n });\r\n }\r\n\r\n protected update() {\r\n const data = this._data, regular = this.regular, length = this._regularLength, el = this._elementRef.nativeElement;\r\n if (data) {\r\n el.setAttribute(ITEM_ID, `${data.id}`);\r\n const styles = el.style;\r\n styles.zIndex = data.config.zIndex;\r\n styles.position = POSITION_ABSOLUTE;\r\n if (data.config.isStub === true) {\r\n el.style.visibility = VISIBILITY_HIDDEN;\r\n }\r\n if (regular) {\r\n el.setAttribute(POSITION, POSITION_ZERO);\r\n styles.transform = `${TRANSLATE_3D}(${data.config.isVertical ? (this._langTextDir === TextDirections.RTL ? this._scrollBarSize : 0) : data.measures.delta}${PX}, ${data.config.isVertical ? data.measures.delta : 0}${PX}, ${POSITION_ZERO})`;\r\n } else {\r\n el.setAttribute(POSITION, `${data.config.isVertical ? data.measures.y : data.measures.x}`);\r\n styles.transform = `${TRANSLATE_3D}(${data.config.isVertical ? 0 : data.measures.x}${PX}, ${data.config.isVertical ? data.measures.y : 0}${PX}, ${POSITION_ZERO})`;\r\n }\r\n styles.height = data.config.isVertical ? data.config.dynamic ? SIZE_AUTO : `${data.measures.height}${PX}` : regular ? length : SIZE_100_PERSENT;\r\n styles.width = data.config.isVertical ? regular ? length : SIZE_100_PERSENT : data.config.dynamic ? SIZE_AUTO : `${data.measures.width}${PX}`;\r\n } else {\r\n el.removeAttribute(ID);\r\n }\r\n\r\n this._cdr.markForCheck();\r\n }\r\n\r\n protected updatePartStr(v: IRenderVirtualListItem | null, isSelected: boolean, isCollapsed: boolean) {\r\n let odd = false;\r\n if (v?.index !== undefined) {\r\n odd = v.index % 2 === 0;\r\n }\r\n\r\n let part = PART_DEFAULT_ITEM;\r\n part += odd ? PART_ITEM_ODD : PART_ITEM_EVEN;\r\n if (v ? v.config.snapped : false) {\r\n part += PART_ITEM_SNAPPED;\r\n }\r\n if (isSelected) {\r\n part += PART_ITEM_SELECTED;\r\n }\r\n if (isCollapsed) {\r\n part += PART_ITEM_COLLAPSED;\r\n }\r\n if (v ? v.config.new : false) {\r\n part += PART_ITEM_NEW;\r\n }\r\n if (this.focused()) {\r\n part += PART_ITEM_FOCUSED;\r\n }\r\n this.part.set(part);\r\n }\r\n\r\n getBounds(): ISize {\r\n const el: HTMLElement = this._elementRef.nativeElement,\r\n { width, height } = el.getBoundingClientRect();\r\n return { width: width > 0 ? width : 1, height: height > 0 ? height : 1, };\r\n }\r\n\r\n show() {\r\n const el = this._elementRef.nativeElement as HTMLElement,\r\n styles = el.style;\r\n styles.zIndex = this._data?.config?.zIndex ?? DEFAULT_ZINDEX;\r\n if (this.regular) {\r\n if (styles.display === DISPLAY_BLOCK) {\r\n return;\r\n }\r\n\r\n styles.display = DISPLAY_BLOCK;\r\n } else {\r\n const isStub = this._data?.config?.isStub ?? false;\r\n if (!isStub) {\r\n if (styles.visibility === VISIBILITY_VISIBLE) {\r\n return;\r\n }\r\n styles.visibility = VISIBILITY_VISIBLE;\r\n }\r\n }\r\n }\r\n\r\n hide() {\r\n const el = this._elementRef.nativeElement,\r\n styles = el.style;\r\n styles.position = POSITION_ABSOLUTE;\r\n styles.transform = TRANSLATE_3D_HIDDEN;\r\n styles.zIndex = HIDDEN_ZINDEX;\r\n if (this.regular) {\r\n if (styles.display === DISPLAY_NONE) {\r\n return;\r\n }\r\n\r\n styles.display = DISPLAY_NONE;\r\n } else {\r\n if (styles.visibility === VISIBILITY_HIDDEN) {\r\n return;\r\n }\r\n\r\n styles.visibility = VISIBILITY_HIDDEN;\r\n }\r\n }\r\n}","import { DestroyRef, Directive, ElementRef, inject, Input, output } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { fromEvent, of, race } from 'rxjs';\r\nimport { filter, switchMap, takeUntil, tap } from 'rxjs/operators';\r\n\r\nconst DEFAULT_MAX_DISTANCE = 40;\r\n\r\n/**\r\n * ItemClickDirective\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/directives/item-click/item-click.directive.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Directive({\r\n selector: '[itemClick]',\r\n standalone: false,\r\n})\r\nexport class ItemClickDirective {\r\n private _maxDistance = DEFAULT_MAX_DISTANCE;\r\n\r\n @Input('maxClickDistance')\r\n set maxDistance(v: number | string) {\r\n this._maxDistance = v ? Number(v) : DEFAULT_MAX_DISTANCE;\r\n }\r\n\r\n onClick = output<PointerEvent | TouchEvent>();\r\n\r\n private _elementRef = inject(ElementRef);\r\n private _destroyRef = inject(DestroyRef);\r\n\r\n constructor() {\r\n const $pointerPressed = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerdown'),\r\n $pointerCancel = race([\r\n fromEvent(window, 'pointerup').pipe(\r\n takeUntilDestroyed(),\r\n ),\r\n fromEvent<PointerEvent>(window, 'pointerleave').pipe(\r\n takeUntilDestroyed(),\r\n ),\r\n ]),\r\n $pointerRelease = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerup', { passive: false });\r\n\r\n $pointerPressed.pipe(\r\n takeUntilDestroyed(),\r\n switchMap(e => {\r\n const x = Math.abs(e.clientX),\r\n y = Math.abs(e.clientY);\r\n return $pointerRelease.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n takeUntil(\r\n race([\r\n $pointerCancel,\r\n fromEvent<PointerEvent>(window, 'pointermove').pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(e => {\r\n const xx = x - Math.abs(e.clientX),\r\n yy = y - Math.abs(e.clientY),\r\n dist = Math.sqrt(Math.pow(xx, 2) + Math.pow(yy, 2));\r\n\r\n if (dist > this._maxDistance) {\r\n return of(true);\r\n }\r\n\r\n return of(false);\r\n }),\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(v => !!v),\r\n ),\r\n ]),\r\n ),\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(e => {\r\n if (e) {\r\n this.onClick.emit(e);\r\n }\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, inject, Injector, OnInit, signal } from '@angular/core';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { map, tap, combineLatest, fromEvent, switchMap, of, Observable, filter, debounceTime } from 'rxjs';\r\nimport { IRenderVirtualListItem } from '../../models/render-item.model';\r\nimport { Id } from '../../types';\r\nimport {\r\n DEFAULT_CLICK_DISTANCE, NAVIGATION_BY_KEYBOARD_TIMER, VISIBILITY_HIDDEN,\r\n} from '../../const';\r\nimport { BaseVirtualListItemComponent } from './base';\r\nimport { MethodsForSelectingTypes } from '../../enums/method-for-selecting-types';\r\nimport { IDisplayObjectConfig } from '../../models';\r\nimport { getListElementByIndex } from './utils';\r\nimport {\r\n ATTR_AREA_SELECTED, EVENT_FOCUS_IN, EVENT_FOCUS_OUT, EVENT_KEY_DOWN, KEY_ARR_DOWN, KEY_ARR_LEFT,\r\n KEY_ARR_RIGHT, KEY_ARR_UP, KEY_SPACE,\r\n} from './const';\r\n\r\n/**\r\n * Virtual list component.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/list-item/ng-virtual-list-item.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-virtual-list-item',\r\n templateUrl: './ng-virtual-list-item.component.html',\r\n styleUrl: './ng-virtual-list-item.component.scss',\r\n host: {\r\n 'class': 'ngvl__item',\r\n 'role': 'listitem',\r\n },\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgVirtualListItemComponent extends BaseVirtualListItemComponent implements OnInit {\r\n protected readonly maxClickDistance = signal<number>(DEFAULT_CLICK_DISTANCE);\r\n\r\n protected _injector = inject(Injector);\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this._service.$clickDistance.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(v => {\r\n this.maxClickDistance.set(v);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$langTextDir.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(v => {\r\n this._langTextDir = v;\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$scrollBarSize.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(v => {\r\n this._scrollBarSize = v;\r\n }),\r\n ).subscribe();\r\n\r\n const $data = toObservable(this.data, { injector: this._injector }),\r\n $focused = toObservable(this.focused, { injector: this._injector });\r\n\r\n $focused.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(v => {\r\n this._service.areaFocus(v ? this._id : this._service.focusedId === this._id ? null : this._service.focusedId);\r\n }),\r\n ).subscribe();\r\n\r\n fromEvent(this.element, EVENT_FOCUS_IN).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(e => {\r\n this.focused.set(true);\r\n\r\n this.updateConfig(this._data);\r\n\r\n this.updatePartStr(this._data, this._isSelected, this._isCollapsed);\r\n }),\r\n ).subscribe(),\r\n\r\n fromEvent(this.element, EVENT_FOCUS_OUT).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(e => {\r\n this.focused.set(false);\r\n\r\n this.updateConfig(this._data);\r\n\r\n this.updatePartStr(this._data, this._isSelected, this._isCollapsed);\r\n }),\r\n ).subscribe();\r\n\r\n $focused.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n debounceTime(this._service.animationParams.navigateByKeyboard ?? NAVIGATION_BY_KEYBOARD_TIMER),\r\n switchMap(v => {\r\n if (v) {\r\n return this.keyKode();\r\n }\r\n return of(false);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$data, this._service.$methodOfSelecting, this._service.$selectedIds, this._service.$collapsedIds]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n map(([, m, selectedIds, collapsedIds]) => ({ method: m, selectedIds, collapsedIds })),\r\n tap(({ method, selectedIds, collapsedIds }) => {\r\n switch (method) {\r\n case MethodsForSelectingTypes.SELECT: {\r\n const id = selectedIds as Id | undefined, isSelected = id === this.itemId;\r\n this.element.setAttribute(ATTR_AREA_SELECTED, String(isSelected));\r\n this._isSelected = isSelected;\r\n break;\r\n }\r\n case MethodsForSelectingTypes.MULTI_SELECT: {\r\n const actualIds = selectedIds as Array<Id>, isSelected = this.itemId !== undefined && actualIds && actualIds.includes(this.itemId);\r\n this.element.setAttribute(ATTR_AREA_SELECTED, String(isSelected));\r\n this._isSelected = isSelected;\r\n break;\r\n }\r\n case MethodsForSelectingTypes.NONE:\r\n default: {\r\n this.element.removeAttribute(ATTR_AREA_SELECTED);\r\n this._isSelected = false;\r\n break;\r\n }\r\n }\r\n\r\n const actualIds = collapsedIds, isCollapsed = this.itemId !== undefined && actualIds && actualIds.includes(this.itemId);\r\n this._isCollapsed = isCollapsed;\r\n\r\n this.updatePartStr(this._data, this._isSelected, isCollapsed);\r\n\r\n this.updateConfig(this._data);\r\n\r\n this.updateMeasures(this._data);\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n private keyKode() {\r\n return fromEvent<KeyboardEvent>(this.element, EVENT_KEY_DOWN).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(e => {\r\n switch (e.key) {\r\n case KEY_SPACE: {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n if (!!this._data) {\r\n this._service.select(this._data!.id!);\r\n this._service.collapse(this._data!.id!);\r\n }\r\n break;\r\n }\r\n case KEY_ARR_LEFT:\r\n if (!this.config().isVertical) {\r\n return this.toPrevItem(e);\r\n }\r\n break;\r\n case KEY_ARR_UP:\r\n if (this.config().isVertical) {\r\n return this.toPrevItem(e);\r\n }\r\n break;\r\n case KEY_ARR_RIGHT:\r\n if (!this.config().isVertical) {\r\n return this.toNextItem(e);\r\n }\r\n break;\r\n case KEY_ARR_DOWN:\r\n if (this.config().isVertical) {\r\n return this.toNextItem(e);\r\n }\r\n break;\r\n }\r\n return of(null);\r\n }),\r\n );\r\n }\r\n\r\n private toNextItem(e: Event): Observable<any> {\r\n if (!!e && e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n\r\n const index = this.focusNext();\r\n if (index > -1) {\r\n this._service.lastFocusedItemId = index;\r\n }\r\n return of(e).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(v => !!v),\r\n debounceTime(this._service.animationParams.navigateByKeyboard ?? NAVIGATION_BY_KEYBOARD_TIMER),\r\n switchMap(() => {\r\n return this.keyKode();\r\n }),\r\n );\r\n }\r\n\r\n private toPrevItem(e: Event): Observable<any> {\r\n if (!!e && e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n\r\n const index = this.focusPrev();\r\n if (index > -1) {\r\n this._service.lastFocusedItemId = index;\r\n }\r\n return of(e).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(v => !!v),\r\n debounceTime(this._service.animationParams.navigateByKeyboard ?? NAVIGATION_BY_KEYBOARD_TIMER),\r\n switchMap(() => {\r\n return this.keyKode();\r\n }),\r\n );\r\n }\r\n\r\n private focusNext(): number {\r\n if (this._service.listElement) {\r\n const tabIndex = this._data?.config?.tabIndex ?? 0, length = this._service.collection?.length ?? 0;\r\n let index = tabIndex;\r\n while (index <= length) {\r\n index++;\r\n const element = this._service.listElement.querySelector<HTMLDivElement>(getListElementByIndex(index));\r\n if (!!element && element.style.visibility !== VISIBILITY_HIDDEN) {\r\n const focused = this._service.focus(element);\r\n if (focused) {\r\n return index;\r\n }\r\n }\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n private focusPrev(): number {\r\n if (this._service.listElement) {\r\n const tabIndex = this._data?.config?.tabIndex ?? 0;\r\n let index = tabIndex;\r\n while (index >= 0) {\r\n index--;\r\n const element = this._service.listElement.querySelector<HTMLDivElement>(getListElementByIndex(index));\r\n if (!!element) {\r\n this._service.focus(element);\r\n return index;\r\n }\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n protected override updateConfig(v: IRenderVirtualListItem<any> | null) {\r\n this.config.set({\r\n ...v?.config || {} as IDisplayObjectConfig, selected: this._isSelected, collapsed: this._isCollapsed, focused: this.focused(),\r\n });\r\n }\r\n\r\n onClickHandler() {\r\n this._service.itemClick(this._data);\r\n }\r\n}\r\n","<div itemClick [maxClickDistance]=\"maxClickDistance()\" [part]=\"part()\" [attr.ngvl-index]=\"index()\" tabindex=\"-1\"\r\n class=\"ngvl-item__container\" [ngClass]=\"classes()\" (onClick)=\"onClickHandler()\">\r\n @if (itemRenderer(); as renderer) {\r\n <ng-container [ngTemplateOutlet]=\"renderer\" [ngTemplateOutletContext]=\"templateContext()\" />\r\n }\r\n</div>","import { SnappingMethod, SnappingMethods } from \"../enums\";\r\n\r\nconst ADVANCED_PATTERNS: Array<SnappingMethod> = [SnappingMethods.ADVANCED, SnappingMethods.STANDART, 'advanced', 'standart'],\r\n DEFAULT_PATTERN: Array<SnappingMethod> = [SnappingMethods.STANDART, 'standart'];\r\n\r\nexport const isSnappingMethodAdvenced = (method: SnappingMethod): boolean => {\r\n return ADVANCED_PATTERNS.includes(method);\r\n}\r\n\r\nexport const isSnappingMethodDefault = (method: SnappingMethod): boolean => {\r\n return DEFAULT_PATTERN.includes(method);\r\n}","import { Direction, Directions } from \"../enums\";\r\n\r\nconst HORIZONTAL_ALIASES = [Directions.HORIZONTAL, 'horizontal'],\r\n VERTICAL_ALIASES = [Directions.VERTICAL, 'vertical'];\r\n\r\n/**\r\n * Determines the axis membership of a virtual list\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/utils/is-direction.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isDirection = (src: Direction, expected: Direction): boolean => {\r\n if (HORIZONTAL_ALIASES.includes(expected)) {\r\n return HORIZONTAL_ALIASES.includes(src);\r\n }\r\n return VERTICAL_ALIASES.includes(src);\r\n}","import { MethodForSelecting, MethodsForSelecting } from \"../enums\";\r\n\r\nconst NONE_ALIASES = [MethodsForSelecting.NONE, 'none'],\r\n SELECT_ALIASES = [MethodsForSelecting.SELECT, 'select'],\r\n MULTI_SELECT_ALIASES = [MethodsForSelecting.MULTI_SELECT, 'multi-select'];\r\n\r\n/**\r\n * Defines the method for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/utils/is-method-for-selecting.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isMethodForSelecting = (src: MethodForSelecting, expected: MethodForSelecting): boolean => {\r\n if (NONE_ALIASES.includes(expected)) {\r\n return NONE_ALIASES.includes(src);\r\n } else if (SELECT_ALIASES.includes(expected)) {\r\n return SELECT_ALIASES.includes(src);\r\n }\r\n return MULTI_SELECT_ALIASES.includes(src);\r\n}\r\n","export const objectAsReadonly = <T = { [x: string]: any }>(source: T) => {\r\n if (!source) {\r\n return source;\r\n }\r\n\r\n const result = {} as T;\r\n for (const prop in source) {\r\n const value = source[prop];\r\n Object.defineProperty(result, prop, {\r\n value,\r\n writable: false,\r\n enumerable: true,\r\n });\r\n }\r\n\r\n return result;\r\n};\r\n\r\nexport const copyValueAsReadonly = <T = any>(source: T) => {\r\n if (!source) {\r\n return source;\r\n }\r\n\r\n if (Array.isArray(source)) {\r\n return Object.freeze([...source]) as T;\r\n }\r\n\r\n if (typeof source === 'object') {\r\n return objectAsReadonly(source);\r\n }\r\n\r\n return source;\r\n}","import { CollectionMode, CollectionModes } from \"../enums\";\r\n\r\nconst NORMAL_ALIASES = [CollectionModes.NORMAL, 'normal'],\r\n LAZY_ALIASES = [CollectionModes.LAZY, 'lazy'];\r\n\r\n/**\r\n * Determines the axis membership of a virtual list\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/utils/is-collection-mode.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isCollectionMode = (src: CollectionMode, expected: CollectionMode): boolean => {\r\n if (LAZY_ALIASES.includes(expected)) {\r\n return LAZY_ALIASES.includes(src);\r\n }\r\n return NORMAL_ALIASES.includes(src);\r\n}","import { RANGE_DISPLAY_ITEMS_END_OFFSET } from \"../const\";\r\nimport { IRenderVirtualListItem } from \"../models\";\r\nimport { IRenderVirtualListCollection } from \"../models/render-collection.model\";\r\nimport { ISize } from \"../interfaces\";\r\n\r\nexport const formatScreenReaderMessage = (items: IRenderVirtualListCollection, messagePattern: string | undefined, scrollSize: number,\r\n isVertical: boolean, bounds: ISize) => {\r\n if (!messagePattern) {\r\n return '';\r\n }\r\n const list = items ?? [], size = isVertical ? bounds.height : bounds.width;\r\n let start = Number.NaN, end = Number.NaN, prevItem: IRenderVirtualListItem | undefined;\r\n for (let i = 0, l = list.length; i < l; i++) {\r\n const item = list[i], position = isVertical ? item.measures.y : item.measures.x,\r\n itemSize = isVertical ? item.measures.height : item.measures.width;\r\n if (((position + itemSize) >= scrollSize) && Number.isNaN(start)) {\r\n start = item.index + 1;\r\n }\r\n if ((position >= (scrollSize + size)) && Number.isNaN(end) && prevItem) {\r\n end = prevItem.index + 1;\r\n }\r\n prevItem = item;\r\n }\r\n if (Number.isNaN(start) || Number.isNaN(end)) {\r\n return '';\r\n }\r\n let formatted = messagePattern ?? '';\r\n formatted = formatted.replace('$1', `${start}`);\r\n formatted = formatted.replace('$2', `${end}`);\r\n return formatted;\r\n};\r\n\r\nexport const formatActualDisplayItems = (items: IRenderVirtualListCollection, startOffset: number, endOffset: number, scrollSize: number,\r\n isVertical: boolean, bounds: ISize): [number, number] | undefined => {\r\n const list = items ?? [], size = isVertical ? bounds.height : bounds.width;\r\n let start = Number.NaN, end = Number.NaN;\r\n for (let i = 0, l = list.length; i < l; i++) {\r\n const item = list[i], position = isVertical ? item.measures.y : item.measures.x,\r\n itemSize = isVertical ? item.measures.height : item.measures.width;\r\n if ((position + itemSize <= scrollSize + startOffset)) {\r\n start = item.index;\r\n }\r\n if (((position) <= (scrollSize + size - endOffset + RANGE_DISPLAY_ITEMS_END_OFFSET))) {\r\n end = item.index;\r\n }\r\n }\r\n if (Number.isNaN(start) || Number.isNaN(end)) {\r\n return undefined;\r\n }\r\n return [start, end];\r\n};\r\n","export enum ScrollerDirection {\r\n HORIZONTAL = 'horizontal',\r\n VERTICAL = 'vertical',\r\n}","import { GradientColorPositions } from \"../../../types/gradient-color-positions\";\r\nimport { ScrollerDirection, ScrollerDirections } from \"../enums\";\r\n\r\ninterface ICalculateScrollParams {\r\n direction: ScrollerDirections;\r\n viewportWidth: number;\r\n viewportHeight: number;\r\n contentWidth: number;\r\n contentHeight: number;\r\n startOffset: number;\r\n endOffset: number;\r\n positionX: number;\r\n positionY: number;\r\n minSize: number;\r\n}\r\n\r\ninterface ICalculateScrollPositionParams {\r\n scrollSize: number;\r\n position: number;\r\n}\r\n\r\ninterface ICalculateScrollMetrics {\r\n gradientPos: [number, number];\r\n size: number;\r\n pos: number;\r\n}\r\n\r\n/**\r\n * ScrollBox\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/scroller/utils/scroll-box.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class ScrollBox {\r\n calculateScroll({\r\n direction,\r\n viewportWidth,\r\n viewportHeight,\r\n contentWidth,\r\n contentHeight,\r\n startOffset,\r\n endOffset,\r\n positionX,\r\n positionY,\r\n minSize,\r\n }: ICalculateScrollParams) {\r\n const isVertical = direction === ScrollerDirection.VERTICAL;\r\n let x = 0, y = 0, thumbPosition = 0, thumbSize = 0, thumbGradientPositions: GradientColorPositions = [0, 0];\r\n if (isVertical) {\r\n const { gradientPos, size, pos, } = this.getMetrics(positionY, viewportHeight, contentHeight, startOffset, endOffset, minSize);\r\n thumbGradientPositions = gradientPos;\r\n thumbSize = size;\r\n thumbPosition = pos;\r\n } else {\r\n const { gradientPos, size, pos, } = this.getMetrics(positionX, viewportWidth, contentWidth, startOffset, endOffset, minSize);\r\n thumbGradientPositions = gradientPos;\r\n thumbSize = size;\r\n thumbPosition = pos;\r\n }\r\n return {\r\n x,\r\n y,\r\n thumbSize,\r\n thumbPosition,\r\n thumbGradientPositions,\r\n };\r\n }\r\n\r\n private getMetrics(inputPosition: number, viewportSize: number, contentSize: number, startOffset: number, endOffset: number,\r\n minSize: number): ICalculateScrollMetrics {\r\n let thumbPosition = 0, thumbSize = 0;\r\n const vh = viewportSize - startOffset - endOffset, ch = contentSize - startOffset - endOffset,\r\n ratio = ch > 0 ? vh / ch : 1, ts = vh * ratio, ats = Math.max(ts, minSize), atsDelta = ats - ts,\r\n rh = (ch !== 0 ? (inputPosition / ch) : 0),\r\n pos = startOffset + ((vh - atsDelta) * rh),\r\n size = ats, asp = pos, bRatio = size !== 0 ? vh / size : 0,\r\n aspp = -(vh !== 0 ? asp / vh : 0) * bRatio, aep = vh - (aspp + size),\r\n aepp = (aspp + (vh !== 0 ? (aep + size) / vh : 0) * bRatio);\r\n thumbSize = ats;\r\n thumbPosition = pos;\r\n return {\r\n gradientPos: [aspp, aepp],\r\n size,\r\n pos,\r\n };\r\n }\r\n\r\n getScrollPositionByScrollBar({\r\n scrollSize,\r\n position,\r\n }: ICalculateScrollPositionParams) {\r\n const pos = (position * scrollSize);\r\n return {\r\n position: pos,\r\n };\r\n }\r\n}","/**\r\n * ScrollerDirection\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/enums/scroller-direction.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum ScrollerDirection {\r\n HORIZONTAL = 'horizontal',\r\n VERTICAL = 'vertical',\r\n}","export const easeOutQuad = (t: number) => {\r\n return t * (2 - t);\r\n};\r\n\r\nexport const easeLinear = (t: number) => {\r\n return t + t;\r\n};\r\n","import { Easing } from './types';\r\nimport { easeLinear } from './ease';\r\n\r\ninterface IAnimatorParams {\r\n startValue: number;\r\n endValue: number;\r\n duration?: number;\r\n getPropValue?: () => number;\r\n easingFunction?: Easing;\r\n onUpdate?: (data: IAnimatorUpdateData) => void;\r\n onComplete?: (data: IAnimatorUpdateData) => void;\r\n}\r\n\r\ninterface IAnimatorUpdateData {\r\n timestamp: number;\r\n delta: number;\r\n value: number;\r\n}\r\n\r\nexport const DEFAULT_ANIMATION_DURATION = 500,\r\n ANIMATOR_MIN_TIMESTAMP = 1000 / 30,\r\n MIN_ANIMATED_VALUE = 10;\r\n\r\nexport class Animator {\r\n private _animationId: number = 0;\r\n\r\n animate(params: IAnimatorParams) {\r\n const {\r\n startValue, endValue, duration = DEFAULT_ANIMATION_DURATION, getPropValue, easingFunction = easeLinear, onUpdate, onComplete,\r\n } = params;\r\n\r\n this.stop();\r\n\r\n const startTime = performance.now();\r\n let isCanceled = false, prevPos = startValue, start = startValue, startPosDelta = 0, delta = 0, prevTime = startTime,\r\n diff = endValue - start;\r\n\r\n let isFinished = false;\r\n\r\n const step = (currentTime: number) => {\r\n if (!!isCanceled) {\r\n return;\r\n }\r\n\r\n const cPos = getPropValue?.() || 0;\r\n let startDelta = 0;\r\n if (cPos !== prevPos) {\r\n startDelta = cPos - prevPos;\r\n startPosDelta += startDelta;\r\n }\r\n\r\n const elapsed = currentTime - startTime,\r\n progress = start === endValue ? 1 : Math.min(duration > 0 ? elapsed / duration : 0, 1),\r\n easedProgress = easingFunction(progress),\r\n val = startPosDelta + start + diff * easedProgress,\r\n currentValue = val,\r\n t = Date.now();\r\n\r\n isFinished = progress === 1;\r\n\r\n delta = currentValue - startDelta - prevPos;\r\n\r\n const ts = t - prevTime, timestamp = ts < ANIMATOR_MIN_TIMESTAMP ? ANIMATOR_MIN_TIMESTAMP : ts;\r\n\r\n prevTime = t;\r\n prevPos = currentValue;\r\n\r\n if (onUpdate !== undefined) {\r\n const data: IAnimatorUpdateData = {\r\n delta,\r\n value: currentValue,\r\n timestamp,\r\n };\r\n onUpdate(data);\r\n }\r\n\r\n if (isFinished) {\r\n if (onComplete !== undefined) {\r\n const data: IAnimatorUpdateData = {\r\n delta,\r\n value: currentValue,\r\n timestamp,\r\n };\r\n onComplete(data);\r\n }\r\n } else {\r\n this._animationId = requestAnimationFrame(step);\r\n }\r\n }\r\n\r\n this._animationId = requestAnimationFrame(step);\r\n }\r\n\r\n stop() {\r\n cancelAnimationFrame(this._animationId);\r\n }\r\n\r\n dispose() {\r\n this.stop();\r\n }\r\n}\r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { SCROLLER_SCROLL } from \"../../../const\";\r\n\r\nexport const SCROLL_VIEW_INVERSION = new InjectionToken<boolean>('ScrollViewInversion');\r\n\r\nexport const SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO = new InjectionToken<boolean>('ScrollViewNormalizeValueFromZero');\r\n\r\nexport const TOP = 'top',\r\n LEFT = 'left',\r\n INSTANT = 'instant',\r\n AUTO = 'auto',\r\n SMOOTH = 'smooth',\r\n DURATION = 2000,\r\n FRICTION_FORCE = .035,\r\n MAX_DURATION = 4000,\r\n ANIMATION_DURATION = 50,\r\n MASS = .005,\r\n MAX_DIST = 12500,\r\n MAX_VELOCITY_TIMESTAMP = 100,\r\n SPEED_SCALE = 15,\r\n OVERSCROLL_START_ITERATION = 2;\r\n\r\nexport const SCROLL_EVENT = new Event(SCROLLER_SCROLL);\r\n","export const calculateDirection = (buffer: Array<[number, number]>) => {\r\n for (let i = buffer.length - 1, l = 0; i >= l; i--) {\r\n const v = buffer[i];\r\n if (v[0] === 0) {\r\n continue;\r\n }\r\n return Math.sign(v[0]);\r\n }\r\n return 1;\r\n};\r\n","import { GradientColorPositions } from \"../../../types/gradient-color-positions\";\r\nimport { ScrollerDirection, ScrollerDirections } from \"../enums\";\r\n\r\ninterface ICalculateScrollParams {\r\n direction: ScrollerDirections;\r\n viewportWidth: number;\r\n viewportHeight: number;\r\n contentWidth: number;\r\n contentHeight: number;\r\n startOffset: number;\r\n endOffset: number;\r\n positionX: number;\r\n positionY: number;\r\n minSize: number;\r\n}\r\n\r\ninterface ICalculateScrollPositionParams {\r\n scrollSize: number;\r\n position: number;\r\n}\r\n\r\n/**\r\n * ScrollBox\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/scroll-box.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class ScrollBox {\r\n calculateScroll({\r\n direction,\r\n viewportWidth,\r\n viewportHeight,\r\n contentWidth,\r\n contentHeight,\r\n startOffset,\r\n endOffset,\r\n positionX,\r\n positionY,\r\n minSize,\r\n }: ICalculateScrollParams) {\r\n const isVertical = direction === ScrollerDirection.VERTICAL;\r\n let x = 0, y = 0, thumbPosition = 0, thumbSize = 0, thumbGradientPositions: GradientColorPositions = [0, 0];\r\n if (isVertical) {\r\n y = positionY;\r\n const vh = viewportHeight - startOffset - endOffset, ch = contentHeight - startOffset - endOffset,\r\n ratio = ch > 0 ? vh / ch : 1, ts = vh * ratio, ats = Math.max(ts, minSize), atsDelta = ats - ts, rh = (ch !== 0 ? (y / ch) : 0),\r\n pos = startOffset + ((vh - atsDelta) * rh),\r\n size = ats, asp = pos, bRatio = size !== 0 ? vh / size : 0,\r\n aspp = -(vh !== 0 ? asp / vh : 0) * bRatio, aep = vh - (aspp + size),\r\n aepp = (aspp + (vh !== 0 ? (aep + size) / vh : 0) * bRatio);\r\n thumbGradientPositions[0] = aspp;\r\n thumbGradientPositions[1] = aepp;\r\n thumbSize = ats;\r\n thumbPosition = pos;\r\n } else {\r\n x = positionX;\r\n const vw = viewportWidth - startOffset - endOffset, cw = contentWidth - startOffset - endOffset,\r\n ratio = cw > 0 ? vw / cw : 1, ts = vw * ratio, ats = Math.max(ts, minSize), atsDelta = ats - ts, rw = (cw !== 0 ? (x / cw) : 0),\r\n pos = startOffset + ((vw - atsDelta) * rw),\r\n size = ats, asp = pos, bRatio = size !== 0 ? vw / size : 0,\r\n aspp = -(vw !== 0 ? asp / vw : 0) * bRatio, aep = vw - (aspp + size),\r\n aepp = (aspp + (vw !== 0 ? (aep + size) / vw : 0) * bRatio);\r\n thumbGradientPositions[0] = aspp;\r\n thumbGradientPositions[1] = aepp;\r\n thumbSize = ats;\r\n thumbPosition = pos;\r\n }\r\n return {\r\n x,\r\n y,\r\n thumbSize,\r\n thumbPosition,\r\n thumbGradientPositions,\r\n };\r\n }\r\n\r\n getScrollPositionByScrollBar({\r\n scrollSize,\r\n position,\r\n }: ICalculateScrollPositionParams) {\r\n const pos = (position * scrollSize);\r\n return {\r\n position: pos,\r\n };\r\n }\r\n}","import {\r\n Component, computed, DestroyRef, ElementRef, inject, input, Signal, signal, viewChild,\r\n} from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { ScrollerDirection, ScrollerDirections } from '../enums';\r\nimport { ISize } from '../../../interfaces';\r\nimport { SCROLL_VIEW_INVERSION } from '../const';\r\n\r\n/**\r\n * BaseScrollView\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/base/base-scroll-view.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'base-scroll-view',\r\n template: '',\r\n})\r\nexport class BaseScrollView {\r\n readonly scrollContent = viewChild<ElementRef<HTMLDivElement>>('scrollContent');\r\n\r\n readonly scrollViewport = viewChild<ElementRef<HTMLDivElement>>('scrollViewport');\r\n\r\n readonly direction = input<ScrollerDirections>(ScrollerDirection.VERTICAL);\r\n\r\n readonly startOffset = input<number>(0);\r\n\r\n readonly endOffset = input<number>(0);\r\n\r\n readonly isVertical: Signal<boolean>;\r\n\r\n readonly grabbing = signal<boolean>(false);\r\n\r\n protected _$updateScrollBar = new Subject<void>();\r\n protected $updateScrollBar = this._$updateScrollBar.asObservable();\r\n\r\n get scrollable() {\r\n const { width, height } = this.viewportBounds(),\r\n isVertical = this.isVertical(),\r\n viewportSize = isVertical ? height : width,\r\n totalSize = this._totalSize;\r\n return totalSize > viewportSize;\r\n }\r\n\r\n protected _destroyRef = inject(DestroyRef);\r\n\r\n protected _isMoving = false;\r\n get isMoving() {\r\n return this._isMoving;\r\n }\r\n\r\n protected _x: number = this.startOffset();\r\n set x(v: number) {\r\n this._x = this._actualX = v;\r\n }\r\n get x() { return this._x; }\r\n\r\n protected _y: number = this.endOffset();\r\n set y(v: number) {\r\n this._y = this._actualY = v;\r\n }\r\n get y() { return this._y; }\r\n\r\n protected _actualTotalSize: number = 0;\r\n protected _totalSize: number = 0;\r\n set totalSize(v: number) {\r\n if (this._totalSize !== v) {\r\n this._totalSize = v;\r\n const startOffset = this.startOffset();\r\n this._actualTotalSize = v + startOffset;\r\n }\r\n }\r\n\r\n get actualScrollHeight() {\r\n const { height: viewportHeight } = this.viewportBounds(),\r\n totalSize = this._actualTotalSize,\r\n isVertical = this.isVertical(),\r\n startOffset = this.startOffset(),\r\n endOffset = this.endOffset();\r\n if (this._inversion) {\r\n return totalSize > viewportHeight ? isVertical ? endOffset : 0 : viewportHeight - totalSize;\r\n }\r\n return totalSize < viewportHeight ? isVertical ? startOffset : 0 : totalSize - viewportHeight;\r\n }\r\n\r\n get actualScrollWidth() {\r\n const { width: viewportWidth } = this.viewportBounds(),\r\n totalSize = this._actualTotalSize,\r\n isVertical = this.isVertical(),\r\n startOffset = this.startOffset(),\r\n endOffset = this.endOffset();\r\n if (this._inversion) {\r\n return totalSize > viewportWidth ? isVertical ? 0 : endOffset : viewportWidth - totalSize;\r\n }\r\n return totalSize < viewportWidth ? isVertical ? 0 : startOffset : totalSize - viewportWidth;\r\n }\r\n\r\n protected _actualX: number = 0;\r\n get actualScrollLeft() {\r\n return this._actualX;\r\n }\r\n\r\n protected _actualY: number = 0;\r\n get actualScrollTop() {\r\n return this._actualY;\r\n }\r\n\r\n get scrollLeft() {\r\n return this._x;\r\n }\r\n\r\n get scrollTop() {\r\n return this._y;\r\n }\r\n\r\n get scrollWidth() {\r\n const { width: viewportWidth } = this.viewportBounds(),\r\n { width: contentWidth } = this.contentBounds(),\r\n isVertical = this.isVertical(),\r\n startOffset = this.startOffset(),\r\n endOffset = this.endOffset();\r\n if (this._inversion) {\r\n return contentWidth > viewportWidth ? isVertical ? 0 : endOffset : (viewportWidth - contentWidth);\r\n }\r\n return contentWidth < viewportWidth ? isVertical ? 0 : startOffset : (contentWidth - viewportWidth);\r\n }\r\n\r\n get scrollHeight() {\r\n const { height: viewportHeight } = this.viewportBounds(),\r\n { height: contentHeight } = this.contentBounds(),\r\n isVertical = this.isVertical(),\r\n startOffset = this.startOffset(),\r\n endOffset = this.endOffset();\r\n if (this._inversion) {\r\n return contentHeight > viewportHeight ? isVertical ? endOffset : 0 : (viewportHeight - contentHeight);\r\n }\r\n return contentHeight < viewportHeight ? isVertical ? startOffset : 0 : (contentHeight - viewportHeight);\r\n }\r\n\r\n readonly viewportBounds = signal<ISize>({ width: 0, height: 0 });\r\n\r\n readonly contentBounds = signal<ISize>({ width: 0, height: 0 });\r\n\r\n protected _inversion = inject(SCROLL_VIEW_INVERSION);\r\n\r\n constructor() {\r\n this.isVertical = computed(() => {\r\n return this.direction() === ScrollerDirection.VERTICAL;\r\n });\r\n }\r\n\r\n tick() {\r\n this.onResizeContent();\r\n this.onResizeViewport();\r\n }\r\n\r\n protected onResizeViewport() {\r\n const viewport = this.scrollViewport()?.nativeElement;\r\n if (viewport) {\r\n const isVertical = this.isVertical(),\r\n startOffset = this.startOffset(),\r\n endOffset = this.endOffset(),\r\n w = viewport.offsetWidth,\r\n h = viewport.offsetHeight,\r\n width = isVertical ? w : w - startOffset - endOffset,\r\n height = isVertical ? h - startOffset - endOffset : h,\r\n bounds = this.viewportBounds();\r\n if (bounds.width === width && bounds.height === height) {\r\n return;\r\n }\r\n this.viewportBounds.set({ width, height });\r\n }\r\n }\r\n\r\n protected onResizeContent() {\r\n const content = this.scrollContent()?.nativeElement;\r\n if (content) {\r\n const isVertical = this.isVertical(),\r\n startOffset = this.startOffset(),\r\n w = content.offsetWidth,\r\n h = content.offsetHeight,\r\n width = isVertical ? w : w - startOffset,\r\n height = isVertical ? h - startOffset : h,\r\n bounds = this.contentBounds();\r\n if (bounds.width === width && bounds.height === height) {\r\n return;\r\n }\r\n this.contentBounds.set({ width, height });\r\n }\r\n }\r\n}","import {\r\n Component, inject, input, ViewChild,\r\n} from '@angular/core';\r\nimport { CdkScrollable } from '@angular/cdk/scrolling';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { filter, fromEvent, map, of, race, Subject, switchMap, takeUntil, tap } from 'rxjs';\r\nimport { ScrollerDirection } from './enums';\r\nimport { ANIMATOR_MIN_TIMESTAMP, Animator, Easing, easeOutQuad } from '../../utils/animator';\r\nimport {\r\n BEHAVIOR_INSTANT, DEFAULT_OVERSCROLL_ENABLED, DEFAULT_SCROLL_BEHAVIOR, DEFAULT_SCROLLING_SETTINGS, INTERACTIVE, MOUSE_DOWN, MOUSE_MOVE, MOUSE_UP,\r\n TOUCH_END, TOUCH_MOVE, TOUCH_START, WHEEL,\r\n} from '../../const';\r\nimport { IScrollToParams } from './interfaces';\r\nimport {\r\n ANIMATION_DURATION, AUTO, DURATION, FRICTION_FORCE, INSTANT, LEFT, MASS, MAX_DIST, MAX_DURATION, MAX_VELOCITY_TIMESTAMP,\r\n OVERSCROLL_START_ITERATION, SCROLL_EVENT, SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, SMOOTH, SPEED_SCALE, TOP,\r\n} from './const';\r\nimport { calculateDirection } from './utils';\r\nimport { BaseScrollView } from './base/base-scroll-view.component';\r\nimport { IScrollingSettings } from '../../interfaces';\r\n\r\n/**\r\n * NgScrollView\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/ng-scroll-view.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-scroll-view',\r\n template: '',\r\n})\r\nexport class NgScrollView extends BaseScrollView {\r\n @ViewChild('scrollViewport', { read: CdkScrollable })\r\n readonly cdkScrollable: CdkScrollable | undefined;\r\n\r\n readonly scrollBehavior = input<ScrollBehavior>(DEFAULT_SCROLL_BEHAVIOR);\r\n\r\n readonly scrollingSettings = input<IScrollingSettings>(DEFAULT_SCROLLING_SETTINGS);\r\n\r\n readonly overscrollEnabled = input<boolean>(DEFAULT_OVERSCROLL_ENABLED);\r\n\r\n protected _normalizeValueFromZero = inject(SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO);\r\n\r\n protected _$scroll = new Subject<boolean>();\r\n readonly $scroll = this._$scroll.asObservable();\r\n\r\n protected _$scrollEnd = new Subject<boolean>();\r\n readonly $scrollEnd = this._$scrollEnd.asObservable();\r\n\r\n private _startPosition = 0;\r\n\r\n protected _animator = new Animator();\r\n\r\n protected _interactive = true;\r\n\r\n private _overscrollIteration: number = 0;\r\n\r\n set delta(v: number) {\r\n this._startPosition += v;\r\n }\r\n\r\n constructor() {\r\n super();\r\n const $viewport = toObservable(this.scrollViewport).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n ), $content = toObservable(this.scrollContent).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n ), $wheelEmitter = this._inversion ? $viewport : $content;\r\n\r\n $wheelEmitter.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(content => {\r\n return fromEvent<WheelEvent>(content, WHEEL, { passive: false }).pipe(\r\n filter(() => this._interactive),\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(e => {\r\n const isVertical = this.isVertical();\r\n this.emitScrollableEvent();\r\n this.checkOverscroll(e);\r\n this.stopScrolling();\r\n const scrollSize = isVertical ? this.scrollHeight : this.scrollWidth,\r\n startPos = isVertical ? this.y : this.x,\r\n delta = isVertical ? e.deltaY : e.deltaX, dp = (startPos + delta), position = dp < 0 ? 0 : dp > scrollSize ? scrollSize : dp;\r\n this.scroll({ [isVertical ? TOP : LEFT]: position, behavior: INSTANT, userAction: true });\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $mouseUp = fromEvent<MouseEvent>(window, MOUSE_UP, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n ),\r\n $mouseDragCancel = $mouseUp.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(() => {\r\n this._isMoving = false;\r\n this.grabbing.set(false);\r\n }),\r\n );\r\n\r\n $content.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(content => {\r\n return fromEvent<MouseEvent>(content, MOUSE_DOWN, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(v => this._interactive),\r\n switchMap(e => {\r\n this.cancelOverscroll();\r\n this.onDragStart();\r\n this.stopScrolling();\r\n const target = e.target as HTMLElement;\r\n if (target.classList.contains(INTERACTIVE)) {\r\n return of(undefined);\r\n }\r\n const inversion = this._inversion, isVertical = this.isVertical();\r\n this._isMoving = true;\r\n this.grabbing.set(true);\r\n this._startPosition = (isVertical ? this.y : this.x);\r\n let prevClientPosition = 0,\r\n startClientPos = isVertical ? e.clientY : e.clientX,\r\n offsets = new Array<[number, number]>(),\r\n velocities = new Array<[number, number]>(),\r\n startTime = Date.now();\r\n return fromEvent<MouseEvent>(window, MOUSE_MOVE, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n takeUntil($mouseDragCancel),\r\n tap(e => {\r\n this.checkOverscroll(e);\r\n }),\r\n switchMap(e => {\r\n const { position, currentPos, endTime, scrollDelta } =\r\n this.calculatePosition(isVertical, e, inversion, startClientPos, startTime, prevClientPosition, offsets, velocities);\r\n prevClientPosition = currentPos;\r\n this.move(isVertical, position, true, true, true);\r\n startTime = endTime;\r\n return race([fromEvent<MouseEvent>(window, MOUSE_UP, { passive: false }), fromEvent<MouseEvent>(content, MOUSE_UP, { passive: false })]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(e => {\r\n this.cancelOverscroll();\r\n const endTime = Date.now(),\r\n timestamp = endTime - startTime,\r\n { v0 } = this.calculateVelocity(offsets, scrollDelta, timestamp),\r\n { a0 } = this.calculateAcceleration(velocities, v0, timestamp);\r\n this._isMoving = false;\r\n this.grabbing.set(false);\r\n if (this.scrollBehavior() === BEHAVIOR_INSTANT) {\r\n return;\r\n }\r\n this.moveWithAcceleration(isVertical, position, 0, v0, a0, timestamp);\r\n }),\r\n );\r\n }),\r\n );\r\n })\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $touchUp = fromEvent<TouchEvent>(window, TOUCH_END, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n ),\r\n $touchCanceler = $touchUp.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(() => {\r\n this._isMoving = false;\r\n this.grabbing.set(false);\r\n }),\r\n );\r\n\r\n $content.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(content => {\r\n return fromEvent<TouchEvent>(content, TOUCH_START, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(() => this._interactive),\r\n switchMap(e => {\r\n this.cancelOverscroll();\r\n this.onDragStart();\r\n this.stopScrolling();\r\n const target = e.target as HTMLElement;\r\n if (target.classList.contains(INTERACTIVE)) {\r\n return of(undefined);\r\n }\r\n const inversion = this._inversion, isVertical = this.isVertical();\r\n this._isMoving = true;\r\n this.grabbing.set(true);\r\n this._startPosition = (isVertical ? this.y : this.x);\r\n let prevClientPosition = 0,\r\n startClientPos = isVertical ? e.touches[e.touches.length - 1].clientY : e.touches[e.touches.length - 1].clientX,\r\n offsets = new Array<[number, number]>(), velocities = new Array<[number, number]>(),\r\n startTime = Date.now();\r\n return fromEvent<TouchEvent>(window, TOUCH_MOVE, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n takeUntil($touchCanceler),\r\n tap(e => {\r\n this.checkOverscroll(e);\r\n }),\r\n switchMap(e => {\r\n const { position, currentPos, endTime, scrollDelta } =\r\n this.calculatePosition(isVertical, e, inversion, startClientPos, startTime, prevClientPosition, offsets, velocities);\r\n prevClientPosition = currentPos;\r\n this.move(isVertical, position, true, true, true);\r\n startTime = endTime;\r\n return race([fromEvent<TouchEvent>(window, TOUCH_END, { passive: false }), fromEvent<TouchEvent>(content, TOUCH_END, { passive: false })]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(e => {\r\n this.cancelOverscroll();\r\n const endTime = Date.now(),\r\n timestamp = endTime - startTime,\r\n { v0 } = this.calculateVelocity(offsets, scrollDelta, timestamp),\r\n { a0 } = this.calculateAcceleration(velocities, v0, timestamp);\r\n this._isMoving = false;\r\n this.grabbing.set(false);\r\n if (this.scrollBehavior() === BEHAVIOR_INSTANT) {\r\n return;\r\n }\r\n this.moveWithAcceleration(isVertical, position, 0, v0, a0, timestamp);\r\n }),\r\n );\r\n }),\r\n );\r\n })\r\n );\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n private calculatePosition(isVertical: boolean, e: MouseEvent | TouchEvent | any, inversion: boolean, startClientPos: number, startTime: number,\r\n prevClientPosition: number, offsets: Array<[number, number]>, velocities: Array<[number, number]>\r\n ) {\r\n const currentPos = isVertical ? e.touches?.[e.touches?.length - 1]?.clientY || e.clientY : e.touches?.[e.touches?.length - 1]?.clientX || e.clientX,\r\n scrollSize = isVertical ? this.scrollHeight : this.scrollWidth, delta = (inversion ? -1 : 1) * (startClientPos - currentPos),\r\n dp = this._startPosition + delta, position = Math.round(dp < 0 ? 0 : dp > scrollSize ? scrollSize : dp), endTime = Date.now(),\r\n timestamp = endTime - startTime, scrollDelta = prevClientPosition === 0 ? 0 : prevClientPosition - currentPos,\r\n { v0 } = this.calculateVelocity(offsets, scrollDelta, timestamp);\r\n this.calculateAcceleration(velocities, v0, timestamp);\r\n return { position, currentPos, endTime, scrollDelta };\r\n }\r\n\r\n private cancelOverscroll() {\r\n if (!this.overscrollEnabled()) {\r\n return;\r\n }\r\n this._overscrollIteration = 0;\r\n }\r\n\r\n private checkOverscrollByAxis(e: Event, pos: number, limit: number) {\r\n const p = Math.abs(pos);\r\n if (p > 0 && p < limit) {\r\n if (e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n this._overscrollIteration = 0;\r\n } else {\r\n if (this._overscrollIteration < OVERSCROLL_START_ITERATION) {\r\n this._overscrollIteration++;\r\n if (e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n }\r\n }\r\n }\r\n\r\n private checkOverscroll(e: Event) {\r\n if (!this.overscrollEnabled()) {\r\n if (e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n return;\r\n }\r\n if (this.isVertical()) {\r\n this.checkOverscrollByAxis(e, this._y, this.scrollHeight);\r\n } else {\r\n this.checkOverscrollByAxis(e, this._x, this.scrollWidth);\r\n }\r\n }\r\n\r\n private calculateVelocity(offsets: Array<[number, number]>, delta: number, timestamp: number, indexOffset: number = 10) {\r\n offsets.push([delta, timestamp < ANIMATOR_MIN_TIMESTAMP ? ANIMATOR_MIN_TIMESTAMP : timestamp]);\r\n\r\n const len = offsets.length, startIndex = len > indexOffset ? len - indexOffset : 0, lastVSign = calculateDirection(offsets),\r\n speedScale = this.scrollingSettings()?.speedScale ?? SPEED_SCALE;\r\n let vSum = 0;\r\n for (let i = startIndex, l = offsets.length; i < l; i++) {\r\n const p0 = offsets[i];\r\n if (lastVSign !== Math.sign(p0[0])) {\r\n continue;\r\n }\r\n\r\n const v0 = (p0[1] !== 0 ? lastVSign * Math.abs(p0[0] / p0[1]) * speedScale : 0);\r\n vSum += Math.sign(v0) * Math.pow(v0, 4) * .003;\r\n }\r\n\r\n const l = Math.min(offsets.length, indexOffset), v0 = l > 0 ? (vSum / l) : 0;\r\n return { v0 };\r\n }\r\n\r\n private calculateAcceleration(velocities: Array<[number, number]>, delta: number, timestamp: number, indexOffset: number = 10) {\r\n velocities.push([delta, timestamp < ANIMATOR_MIN_TIMESTAMP ? ANIMATOR_MIN_TIMESTAMP : timestamp]);\r\n const len = velocities.length, startIndex = len > indexOffset ? len - indexOffset : 0;\r\n let aSum = 0, prevV0: [number, number] | undefined, iteration = 0, lastVSign = calculateDirection(velocities);\r\n const mass = this.scrollingSettings()?.mass ?? MASS;\r\n for (let i = startIndex, l = velocities.length; i < l; i++) {\r\n const v00 = prevV0, v01 = velocities[i];\r\n if (lastVSign !== Math.sign(v01[0])) {\r\n continue;\r\n }\r\n if (v00) {\r\n const a0 = timestamp < MAX_VELOCITY_TIMESTAMP ? (v00[1] !== 0 ? (lastVSign * Math.abs(Math.abs(v01[0]) - Math.abs(v00[0]))) / Math.abs(v00[1]) : 0) : 0.1;\r\n aSum = (aSum * mass) + a0;\r\n prevV0 = v01;\r\n }\r\n prevV0 = v01;\r\n iteration++;\r\n }\r\n\r\n const a0 = aSum * (this.scrollingSettings()?.frictionalForce ?? FRICTION_FORCE);\r\n return { a0 };\r\n }\r\n\r\n stopScrolling() {\r\n this._animator.stop();\r\n }\r\n\r\n protected move(isVertical: boolean, position: number, blending: boolean = false, userAction: boolean = false, fireUpdate: boolean = true) {\r\n this.scroll({ [isVertical ? TOP : LEFT]: position, behavior: INSTANT, blending, userAction, fireUpdate });\r\n }\r\n\r\n protected moveWithAcceleration(isVertical: boolean, position: number, v0: number, v: number, a0: number, timestamp: number) {\r\n if (a0 !== 0 && timestamp < MAX_VELOCITY_TIMESTAMP) {\r\n const dvSign = Math.sign(v),\r\n mass = this.scrollingSettings()?.mass ?? MASS,\r\n duration = DURATION, maxDuration = this.scrollingSettings()?.maxDuration ?? MAX_DURATION,\r\n maxDist = this.scrollingSettings()?.maxDistance ?? MAX_DIST,\r\n maxDistance = dvSign * maxDist, s = (dvSign * Math.abs((a0 * Math.pow(duration, 2)) * .5) / 1000) / mass,\r\n distance = Math.abs(s) < maxDist ? s : maxDistance, positionWithVelocity = position + (this._inversion ? -1 : 1) * distance,\r\n vmax = Math.max(Math.abs(v0), Math.abs(v)),\r\n ad = Math.abs(vmax !== 0 ? Math.sqrt(vmax) : 0) * 10 / mass,\r\n aDuration = ad < maxDuration ? ad : maxDuration,\r\n startPosition = isVertical ? this.y : this.x;\r\n this.animate(startPosition, Math.round(positionWithVelocity), aDuration, easeOutQuad, true);\r\n }\r\n }\r\n\r\n protected normalizeValue(value: number) {\r\n const isVertical = this.direction() === ScrollerDirection.VERTICAL,\r\n startOffset = this._normalizeValueFromZero ? 0 : this.startOffset(),\r\n scrollSize = isVertical ? this.scrollHeight : this.scrollWidth,\r\n result = value <= startOffset ? startOffset : value > scrollSize ? scrollSize : value;\r\n return result;\r\n }\r\n\r\n protected animate(startValue: number, endValue: number, duration = ANIMATION_DURATION, easingFunction: Easing = easeOutQuad,\r\n userAction: boolean = false) {\r\n const isVertical = this.direction() === ScrollerDirection.VERTICAL;\r\n this._animator.animate({\r\n startValue, endValue, duration,\r\n easingFunction,\r\n getPropValue: () => {\r\n return isVertical ? this._y : this._x;\r\n }, onUpdate: ({ value }) => {\r\n this.move(isVertical, value, false, userAction);\r\n }, onComplete: ({ value }) => {\r\n this.move(isVertical, value, false, userAction);\r\n this._$scrollEnd.next(userAction);\r\n this.onAnimationComplete(value);\r\n },\r\n });\r\n }\r\n\r\n protected onAnimationComplete(position: number) { }\r\n\r\n fireScroll(userAction: boolean = false) {\r\n this.stopScrolling();\r\n this._$updateScrollBar.next();\r\n this.emitScrollableEvent();\r\n this.fireScrollEvent(userAction);\r\n }\r\n\r\n scrollLimits(value?: number | undefined): boolean {\r\n const x = value !== undefined ? value : this._x, y = value !== undefined ? value : this._y, isVertical = this.isVertical();\r\n if (isVertical) {\r\n const yy = this.normalizeValue(y);\r\n if (y !== yy) {\r\n this.y = yy;\r\n return true;\r\n }\r\n } else {\r\n const xx = this.normalizeValue(x);\r\n if (x !== xx) {\r\n this.x = xx;\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n scroll(params: IScrollToParams) {\r\n const posX = params.x || params.left || 0,\r\n posY = params.y || params.top || 0,\r\n userAction = params.userAction ?? false,\r\n ease = params.ease || easeOutQuad,\r\n fireUpdate = params.fireUpdate ?? true,\r\n behavior = params.behavior ?? INSTANT,\r\n blending = params.blending ?? true,\r\n duration = params.duration ?? ANIMATION_DURATION,\r\n isVertical = this.direction() === ScrollerDirection.VERTICAL;\r\n\r\n const x = this.normalizeValue(posX),\r\n y = this.normalizeValue(posY),\r\n prevX = this._x,\r\n prevY = this._y;\r\n if (behavior === AUTO || behavior === SMOOTH) {\r\n if (isVertical) {\r\n if (prevY !== y) {\r\n this.animate(prevY, y, duration, ease, userAction);\r\n }\r\n } else {\r\n if (prevX !== x) {\r\n this.animate(prevX, x, duration, ease, userAction);\r\n }\r\n }\r\n } else {\r\n if (isVertical) {\r\n if (this._y !== y) {\r\n if (!blending) {\r\n this.stopScrolling();\r\n }\r\n this.refreshY(y);\r\n this.y = y;\r\n this.emitScrollableEvent();\r\n if (fireUpdate) {\r\n this.fireScrollEvent(userAction);\r\n }\r\n }\r\n } else {\r\n if (this._x !== x) {\r\n if (!blending) {\r\n this.stopScrolling();\r\n }\r\n this.refreshX(x);\r\n this.x = x;\r\n this.emitScrollableEvent();\r\n if (fireUpdate) {\r\n this.fireScrollEvent(userAction);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected emitScrollableEvent() {\r\n if (!!this.cdkScrollable) {\r\n this.cdkScrollable.getElementRef()?.nativeElement?.dispatchEvent(SCROLL_EVENT);\r\n }\r\n }\r\n\r\n refreshX(value: number) {\r\n const scrollContent = this.scrollContent()?.nativeElement as HTMLDivElement;\r\n scrollContent.style.transform = `translate3d(${(this._inversion ? 1 : -1) * value}px, 0, 0)`;\r\n }\r\n\r\n refreshY(value: number) {\r\n const scrollContent = this.scrollContent()?.nativeElement as HTMLDivElement;\r\n scrollContent.style.transform = `translate3d(0, ${(this._inversion ? 1 : -1) * value}px, 0)`;\r\n }\r\n\r\n protected fireScrollEvent(userAction: boolean) {\r\n this._$scroll.next(userAction);\r\n }\r\n\r\n protected onDragStart() { }\r\n\r\n reset(offset: number = 0) {\r\n this.stopScrolling();\r\n this.move(this.isVertical(), offset);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this._animator) {\r\n this._animator.dispose();\r\n }\r\n }\r\n}","export const DEFAULT_THICKNESS = 6,\r\n DEFAULT_SIZE = 6,\r\n PX = 'px',\r\n WIDTH = 'width',\r\n HEIGHT = 'height',\r\n OPACITY = 'opacity',\r\n OPACITY_0 = '0',\r\n OPACITY_1 = '1',\r\n TRANSITION = 'transition',\r\n NONE = 'none',\r\n TRANSITION_FADE_IN = `${OPACITY} 500ms ease-out`;\r\n","import { Component, computed, effect, ElementRef, inject, input, output, Signal, signal, TemplateRef, viewChild } from '@angular/core';\r\nimport { combineLatest, filter, fromEvent, of, startWith, Subject, switchMap, tap } from 'rxjs';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { GradientColorPositions } from '../../types/gradient-color-positions';\r\nimport { NgScrollView, SCROLL_VIEW_INVERSION } from '../ng-scroll-view';\r\nimport { IScrollBarDragEvent, IScrollBarTemplateContext } from './interfaces';\r\nimport { DEFAULT_SCROLLBAR_INTERACTIVE } from '../../const';\r\nimport {\r\n DEFAULT_SIZE, DEFAULT_THICKNESS, HEIGHT, NONE, OPACITY, OPACITY_0, OPACITY_1, PX, TRANSITION, TRANSITION_FADE_IN, WIDTH,\r\n} from './const';\r\nimport { SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO } from '../ng-scroll-view/const';\r\nimport { NgScrollBarService } from './ng-scroll-bar.service';\r\nimport { NgScrollBarPublicService } from './ng-scroll-bar-public.service';\r\nimport { ScrollbarStates } from './enums';\r\n\r\n/**\r\n * ScrollBar component.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-scroll-bar',\r\n providers: [\r\n { provide: SCROLL_VIEW_INVERSION, useValue: true },\r\n { provide: SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, useValue: false },\r\n NgScrollBarService,\r\n NgScrollBarPublicService,\r\n ],\r\n standalone: false,\r\n templateUrl: './ng-scroll-bar.component.html',\r\n styleUrl: './ng-scroll-bar.component.scss'\r\n})\r\nexport class NgScrollBarComponent extends NgScrollView {\r\n protected _defaultRenderer = viewChild<TemplateRef<any>>('defaultRenderer');\r\n\r\n protected _service = inject(NgScrollBarService);\r\n\r\n private _apiService = inject(NgScrollBarPublicService);\r\n\r\n readonly loading = input<boolean>(false);\r\n\r\n readonly onDrag = output<IScrollBarDragEvent>();\r\n\r\n readonly onDragEnd = output<IScrollBarDragEvent>();\r\n\r\n readonly thumbGradientPositions = input<GradientColorPositions>([0, 0]);\r\n\r\n readonly size = input<number>(DEFAULT_SIZE);\r\n\r\n readonly thickness = input<number>(DEFAULT_THICKNESS);\r\n\r\n readonly scrollbarMinSize = input<number>(0);\r\n\r\n readonly prepared = input<boolean>(false);\r\n\r\n readonly interactive = input<boolean>(DEFAULT_SCROLLBAR_INTERACTIVE);\r\n\r\n readonly show = input<boolean>(false);\r\n\r\n readonly params = input<{ [propName: string]: any } | null>({});\r\n\r\n readonly renderer = input<TemplateRef<any> | null>(null);\r\n\r\n readonly thumbRenderer = signal<TemplateRef<any> | null>(this._defaultRenderer() ?? null);\r\n\r\n protected readonly hoverState = signal<boolean>(false);\r\n\r\n protected readonly pressedState = signal<boolean>(false);\r\n\r\n protected readonly templateContext!: Signal<IScrollBarTemplateContext>;\r\n\r\n protected readonly styles: Signal<{ [sName: string]: any }>;\r\n\r\n protected readonly thumbWidth: Signal<number>;\r\n\r\n protected readonly thumbHeight: Signal<number>;\r\n\r\n private _$scrollingCancel = new Subject<void>();\r\n protected readonly $scrollingCancel = this._$scrollingCancel.asObservable();\r\n\r\n private _elementRef = inject(ElementRef);\r\n\r\n constructor() {\r\n super();\r\n\r\n this.templateContext = computed(() => {\r\n const context: IScrollBarTemplateContext = {\r\n api: this._apiService,\r\n width: this.thumbWidth(),\r\n height: this.thumbHeight(),\r\n fillPositions: this.thumbGradientPositions(),\r\n params: this.params() ?? {},\r\n };\r\n return context;\r\n });\r\n\r\n const $renderer = toObservable(this.renderer).pipe(\r\n startWith(null),\r\n ),\r\n $defaultRenderer = toObservable(this._defaultRenderer);\r\n\r\n combineLatest([$renderer, $defaultRenderer]).pipe(\r\n takeUntilDestroyed(),\r\n switchMap(([renderer, defaultRenderer]) => {\r\n return of((renderer ?? defaultRenderer) ?? null);\r\n }),\r\n tap(v => {\r\n this.thumbRenderer.set(v);\r\n }),\r\n ).subscribe();\r\n\r\n const $prepared = toObservable(this.prepared);\r\n $prepared.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n tap(() => {\r\n this.scrollLimits();\r\n this.refreshX(this._x);\r\n this.refreshY(this._y);\r\n this.fireScrollEvent(false);\r\n }),\r\n ).subscribe();\r\n\r\n this.thumbWidth = computed(() => {\r\n return this.isVertical() ? this.thickness() : this.size();\r\n });\r\n\r\n this.thumbHeight = computed(() => {\r\n return this.isVertical() ? this.size() : this.thickness();\r\n });\r\n\r\n const $pointerDown = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerdown').pipe(\r\n takeUntilDestroyed(),\r\n ), $pointerUp = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerup').pipe(\r\n takeUntilDestroyed(),\r\n ), $docPointerUp = fromEvent<PointerEvent>(document, 'pointerup').pipe(\r\n takeUntilDestroyed()\r\n ), $pointerEnter = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerenter').pipe(\r\n takeUntilDestroyed(),\r\n ), $pointerLeave = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerleave').pipe(\r\n takeUntilDestroyed(),\r\n );\r\n\r\n $pointerDown.pipe(\r\n takeUntilDestroyed(),\r\n tap(e => {\r\n this.pressedState.set(this.thumbHit(e.clientX, e.clientY));\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$docPointerUp, $pointerUp]).pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this.pressedState.set(false);\r\n }),\r\n ).subscribe();\r\n\r\n $pointerEnter.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this.hoverState.set(true);\r\n }),\r\n ).subscribe();\r\n\r\n $pointerLeave.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this.hoverState.set(false);\r\n }),\r\n ).subscribe();\r\n\r\n effect(() => {\r\n const pressed = this.pressedState(), hover = this.hoverState();\r\n if (pressed) {\r\n this._service.state = ScrollbarStates.PRESSED;\r\n return;\r\n } else if (hover) {\r\n this._service.state = ScrollbarStates.HOVER;\r\n return;\r\n }\r\n this._service.state = ScrollbarStates.NORMAL;\r\n return;\r\n }, { allowSignalWrites: true });\r\n\r\n effect(() => {\r\n this.totalSize = this.size();\r\n });\r\n\r\n effect(() => {\r\n this._interactive = this.interactive();\r\n });\r\n\r\n this.styles = computed(() => {\r\n const show = this.show(), sizePropName = this.isVertical() ? WIDTH : HEIGHT;\r\n return {\r\n [sizePropName]: `${show ? this.thickness() : 0}${PX}`,\r\n [OPACITY]: show ? OPACITY_1 : OPACITY_0, [TRANSITION]: show ? TRANSITION_FADE_IN : NONE,\r\n };\r\n });\r\n\r\n this.$scroll.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n const event = this.createDragEvent(v);\r\n if (!!event) {\r\n this.onDrag.emit(event);\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollEnd = this.$scrollEnd;\r\n $scrollEnd.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n const event = this.createDragEvent(false);\r\n if (!!event) {\r\n this.onDragEnd.emit(event);\r\n }\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n private createDragEvent(userAction: boolean) {\r\n const isVertical = this.isVertical(), scrollSize = isVertical ? this.scrollHeight : this.scrollWidth,\r\n scrollContent = this.scrollContent()?.nativeElement as HTMLElement,\r\n scrollViewport = this.scrollViewport()?.nativeElement as HTMLDivElement;\r\n if (!!scrollViewport && !!scrollContent) {\r\n const contentSize = isVertical ? scrollContent.offsetHeight : scrollContent.offsetWidth,\r\n viewportSize = isVertical ? scrollViewport.offsetHeight : scrollViewport.offsetWidth;\r\n const event: IScrollBarDragEvent = {\r\n position: scrollSize !== 0 ? ((isVertical ? this._y : this._x) / scrollSize) : 0,\r\n min: scrollSize !== 0 ? (this.startOffset() / scrollSize) : 0,\r\n max: scrollSize !== 0 ? ((viewportSize - this.endOffset() - contentSize) / scrollSize) : 0,\r\n animation: !this._isMoving,\r\n userAction,\r\n };\r\n return event;\r\n }\r\n return null;\r\n }\r\n\r\n private thumbHit(x: number, y: number): boolean {\r\n const thumb = this.scrollContent()?.nativeElement;\r\n if (!!thumb) {\r\n const { x: tX, y: tY, width: tWidth, height: tHeight } = thumb.getBoundingClientRect()\r\n if ((x >= tX && x <= tX + tWidth) && (y >= tY && y <= tY + tHeight)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n click(event: PointerEvent | MouseEvent) {\r\n this._service.click(event);\r\n }\r\n}\r\n","<div #scrollViewport class=\"track\" part=\"scrollbar-track\" [ngStyle]=\"styles()\" [ngClass]=\"{grabbing: grabbing()}\">\r\n <div #scrollContent class=\"thumb\" part=\"scrollbar-thumb\" [class.horizontal]=\"!isVertical()\"\r\n (pointerdown)=\"click($event)\">\r\n <ng-container [ngTemplateOutlet]=\"thumbRenderer()\" [ngTemplateOutletContext]=\"templateContext()\" />\r\n </div>\r\n</div>\r\n\r\n<ng-template #defaultRenderer let-api=\"api\" let-width=\"width\" let-height=\"height\" let-fillPositions=\"fillPositions\"\r\n let-params=\"params\">\r\n <div class=\"shape\" part=\"scrollbar-thumb__shape\" [style.width.px]=\"width\" [style.height.px]=\"height\"></div>\r\n</ng-template>","export const MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS = 5,\r\n MEASURE_VELOCITY_TIMER = 20;\r\n","import { Directive, ElementRef, inject, input } from '@angular/core';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { combineLatest, tap } from 'rxjs';\r\nimport { TextDirection, TextDirections } from '../../enums';\r\nimport { ScrollerDirection, ScrollerDirections } from '../../components/ng-scroller/enums';\r\nimport { isDirection } from '../../utils/is-direction';\r\n\r\nconst RIGHT = 'right',\r\n DIR = 'dir';\r\n\r\n/**\r\n * LocaleSensitiveDirective\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/directives/locale-sensitive/locale-sensitive.directive.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Directive({\r\n selector: '[localeSensitive]',\r\n standalone: false,\r\n})\r\nexport class LocaleSensitiveDirective {\r\n langTextDir = input<TextDirection>(TextDirections.LTR);\r\n\r\n listDir = input<ScrollerDirections>(ScrollerDirection.VERTICAL);\r\n\r\n private _elementRef = inject(ElementRef<HTMLElement>);\r\n\r\n constructor() {\r\n const $langTextDir = toObservable(this.langTextDir),\r\n $listDir = toObservable(this.listDir);\r\n\r\n combineLatest([$langTextDir, $listDir]).pipe(\r\n takeUntilDestroyed(),\r\n tap(([dir, listDir]) => {\r\n const element = this._elementRef.nativeElement as HTMLElement,\r\n isVertical = isDirection(listDir, ScrollerDirection.VERTICAL);\r\n element.setAttribute(DIR, isVertical ? dir : TextDirections.LTR);\r\n if (dir === TextDirections.RTL && isVertical) {\r\n element.style.textAlign = RIGHT;\r\n element.classList.add(TextDirections.RTL);\r\n element.classList.remove(TextDirections.LTR);\r\n } else {\r\n element.classList.add(TextDirections.LTR);\r\n element.classList.remove(TextDirections.RTL);\r\n }\r\n }),\r\n ).subscribe();\r\n }\r\n}\r\n","import { Component, computed, effect, inject, input, OnDestroy, output, Signal, signal, TemplateRef, ViewChild } from '@angular/core';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { debounceTime, filter, from, Subject, tap } from 'rxjs';\r\nimport { ScrollBox } from './utils';\r\nimport { Id } from '../../types';\r\nimport { NgScrollBarComponent } from \"../ng-scroll-bar/ng-scroll-bar.component\";\r\nimport { GradientColorPositions } from '../../types/gradient-color-positions';\r\nimport {\r\n BEHAVIOR_INSTANT, DEFAULT_SCROLLBAR_ENABLED, DEFAULT_SCROLLBAR_INTERACTIVE, DEFAULT_SCROLLBAR_MIN_SIZE, DEFAULT_SCROLLBAR_THICKNESS, LEFT_PROP_NAME,\r\n SCROLLER_SCROLL, TOP_PROP_NAME,\r\n} from '../../const';\r\nimport { TextDirection, TextDirections } from '../../enums';\r\nimport { NgVirtualListService } from '../../ng-virtual-list.service';\r\nimport { IScrollToParams, NgScrollView, SCROLL_VIEW_INVERSION } from '../ng-scroll-view';\r\nimport { IScrollBarDragEvent } from '../ng-scroll-bar/interfaces';\r\nimport { MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS, MEASURE_VELOCITY_TIMER } from './const';\r\nimport { SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO } from '../ng-scroll-view/const';\r\nimport { ISize } from '../../interfaces';\r\n\r\nconst TOP = 'top',\r\n LEFT = 'left',\r\n INSTANT = 'instant';\r\n\r\nexport const SCROLL_EVENT = new Event(SCROLLER_SCROLL);\r\n\r\n/**\r\n * The scroller for the NgVirtualList item component\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/scroller/ng-scroller.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-scroller',\r\n providers: [\r\n { provide: SCROLL_VIEW_INVERSION, useValue: false },\r\n { provide: SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, useValue: true },\r\n ],\r\n standalone: false,\r\n templateUrl: './ng-scroller.component.html',\r\n styleUrl: './ng-scroller.component.scss'\r\n})\r\nexport class NgScrollerComponent extends NgScrollView implements OnDestroy {\r\n @ViewChild('scrollBar', { read: NgScrollBarComponent })\r\n readonly scrollBar: NgScrollBarComponent | undefined;\r\n\r\n readonly onScrollbarVisible = output<boolean>();\r\n\r\n readonly scrollbarEnabled = input<boolean>(DEFAULT_SCROLLBAR_ENABLED);\r\n\r\n readonly scrollbarInteractive = input<boolean>(DEFAULT_SCROLLBAR_INTERACTIVE);\r\n\r\n readonly focusedElement = input<Id | null>(null);\r\n\r\n readonly content = input<HTMLElement>();\r\n\r\n readonly loading = input<boolean>(false);\r\n\r\n readonly classes = input<{ [cName: string]: boolean }>({});\r\n\r\n readonly scrollbarMinSize = input<number>(DEFAULT_SCROLLBAR_MIN_SIZE);\r\n\r\n readonly scrollbarThickness = input<number>(DEFAULT_SCROLLBAR_THICKNESS);\r\n\r\n readonly scrollbarThumbRenderer = input<TemplateRef<any> | null>(null);\r\n\r\n readonly scrollbarThumbParams = input<{ [propName: string]: any } | null>(null);\r\n\r\n public readonly actualClasses: Signal<{ [cName: string]: boolean }>;\r\n\r\n public readonly containerClasses: Signal<{ [cName: string]: boolean }>;\r\n\r\n public readonly thumbGradientPositions = signal<GradientColorPositions>([0, 0]);\r\n\r\n public readonly thumbSize = signal<number>(0);\r\n\r\n public readonly scrollbarShow = signal<boolean>(false);\r\n\r\n public readonly preparedSignal = signal<boolean>(false);\r\n\r\n private _service = inject(NgVirtualListService);\r\n\r\n public readonly langTextDir = signal<TextDirection>(TextDirections.LTR);\r\n\r\n private _scrollBox = new ScrollBox();\r\n\r\n get host() {\r\n return this.scrollViewport()?.nativeElement;\r\n }\r\n\r\n private _$scrollbarScroll = new Subject<boolean>();\r\n readonly $scrollbarScroll = this._$scrollbarScroll.asObservable();\r\n\r\n private _prepared = false;\r\n set prepared(v: boolean) {\r\n if (this._prepared !== v) {\r\n this._prepared = v;\r\n this.preparedSignal.set(v);\r\n }\r\n }\r\n\r\n override set x(v: number) {\r\n if (v !== undefined && !Number.isNaN(v)) {\r\n this._x = this._actualX = v;\r\n\r\n this.measureVelocity();\r\n\r\n this.updateScrollBar();\r\n }\r\n }\r\n override get x() { return this._x; }\r\n\r\n override set y(v: number) {\r\n if (v !== undefined && !Number.isNaN(v)) {\r\n this._y = this._actualY = v;\r\n\r\n this.measureVelocity();\r\n\r\n this.updateScrollBar();\r\n }\r\n }\r\n override get y() { return this._y; }\r\n\r\n readonly viewInitialized = signal<boolean>(false);\r\n\r\n private _isScrollbarUserAction: boolean = false;\r\n get isScrollbarUserAction() {\r\n return this._isScrollbarUserAction;\r\n }\r\n\r\n private _measureVelocityTimestamp: number = Date.now();\r\n\r\n private _measureVelocityLastPosition: number = this.isVertical() ? this._y : this._x;\r\n\r\n private _measureVelocityAnimationFrameId: number = -1;\r\n\r\n private _measureVelocityAnimationTimer: number = -1;\r\n\r\n private _velocities: Array<number> = [];\r\n\r\n protected _velocity: number = 0;\r\n get velocity() { return this._velocity; }\r\n\r\n protected _averageVelocity: number = 0;\r\n get averageVelocity() { return this._averageVelocity; }\r\n\r\n private _measureVelocityHandler = () => {\r\n this.measureVelocityExecutor();\r\n }\r\n\r\n protected _$resizeViewport = new Subject<ISize>();\r\n readonly $resizeViewport = this._$resizeViewport.asObservable();\r\n\r\n protected _$resizeContent = new Subject<ISize>();\r\n readonly $resizeContent = this._$resizeContent.asObservable();\r\n\r\n constructor() {\r\n super();\r\n\r\n this._service.$langTextDir.pipe(\r\n tap(v => {\r\n takeUntilDestroyed(this._destroyRef),\r\n this.langTextDir.set(v);\r\n })\r\n ).subscribe();\r\n\r\n const $prepare = toObservable(this.preparedSignal);\r\n $prepare.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n tap(() => {\r\n this.updateScrollBarHandler(true, false, true);\r\n }),\r\n ).subscribe();\r\n\r\n const $startOffset = toObservable(this.startOffset),\r\n $endOffset = toObservable(this.endOffset),\r\n $scrollbarMinSize = toObservable(this.scrollbarMinSize),\r\n $isVertical = toObservable(this.isVertical),\r\n $thumbSize = toObservable(this.thumbSize);\r\n\r\n from([$endOffset, $startOffset, $thumbSize, $scrollbarMinSize, $isVertical]).pipe(\r\n takeUntilDestroyed(),\r\n debounceTime(0),\r\n tap(() => {\r\n this.updateScrollBar();\r\n }),\r\n ).subscribe();\r\n\r\n const $updateScrollBar = this.$updateScrollBar;\r\n\r\n $updateScrollBar.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n debounceTime(0),\r\n tap(() => {\r\n this.updateScrollBarHandler(!this._isScrollbarUserAction);\r\n }),\r\n ).subscribe();\r\n\r\n this.actualClasses = computed(() => {\r\n const classes = this.classes(), direction = this.direction();\r\n return { ...classes, [direction]: true, grabbing: this.grabbing() };\r\n });\r\n\r\n this.containerClasses = computed(() => {\r\n const { width: contentWidth, height: contentHeight } = this.contentBounds(),\r\n { width, height } = this.viewportBounds(),\r\n isVertical = this.isVertical(),\r\n viewportSize = isVertical ? height : width,\r\n contentSize = isVertical ? contentHeight : contentWidth;\r\n return { [this.direction()]: true, grabbing: this.grabbing(), enabled: this.scrollbarEnabled(), scrollable: contentSize > viewportSize };\r\n });\r\n\r\n effect(() => {\r\n const viewInitialized = this.viewInitialized();\r\n if (viewInitialized) {\r\n this.updateScrollBarHandler();\r\n }\r\n }, { allowSignalWrites: true });\r\n }\r\n\r\n protected override onResizeViewport() {\r\n const viewport = this.scrollViewport()?.nativeElement;\r\n if (viewport) {\r\n const bounds: ISize = { width: viewport.offsetWidth, height: viewport.offsetHeight }, b = this.viewportBounds();\r\n if (bounds.width === b.width && bounds.height === b.height) {\r\n return;\r\n }\r\n this.viewportBounds.set(bounds);\r\n this.updateScrollBar();\r\n this._$resizeViewport.next(bounds);\r\n }\r\n }\r\n\r\n protected override onResizeContent() {\r\n const content = this.scrollContent()?.nativeElement;\r\n if (content) {\r\n const bounds: ISize = { width: content.offsetWidth, height: content.offsetHeight }, b = this.contentBounds();\r\n if (bounds.width === b.width && bounds.height === b.height) {\r\n return;\r\n }\r\n this.contentBounds.set(bounds);\r\n this.updateScrollBar();\r\n this._$resizeContent.next(bounds);\r\n }\r\n }\r\n\r\n private measureVelocity() {\r\n this._measureVelocityAnimationTimer = MEASURE_VELOCITY_TIMER;\r\n\r\n this.measureVelocityExecutor();\r\n };\r\n\r\n private measureVelocityExecutor() {\r\n const timestamp = Date.now();\r\n if (timestamp === this._measureVelocityTimestamp) {\r\n return;\r\n }\r\n const position = Math.abs(this.isVertical() ? this._y : this._x);\r\n const timeDelta = timestamp - this._measureVelocityTimestamp,\r\n positionDelta = Math.abs(position - this._measureVelocityLastPosition),\r\n velocity = timeDelta > 0 ? positionDelta / timeDelta : 0;\r\n let avgVelocity = this._velocities.length > 0 ? this._velocities.reduce((p, c) => p + c) : 0;\r\n if (this._velocities.length >= MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS) {\r\n this._velocities.shift();\r\n }\r\n avgVelocity += velocity;\r\n this._velocity = velocity;\r\n this._velocities.push(velocity);\r\n this._averageVelocity = avgVelocity / MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS;\r\n this._measureVelocityLastPosition = position;\r\n this._measureVelocityTimestamp = timestamp;\r\n\r\n this.runMeasureVelocity();\r\n }\r\n\r\n stopMeasureVelocity() {\r\n if (this._measureVelocityAnimationFrameId > -1) {\r\n cancelAnimationFrame(this._measureVelocityAnimationFrameId);\r\n this._measureVelocityAnimationFrameId = -1;\r\n }\r\n }\r\n\r\n private runMeasureVelocity() {\r\n this.stopMeasureVelocity();\r\n if (this._measureVelocityAnimationTimer >= 0) {\r\n this._measureVelocityAnimationTimer--;\r\n this._measureVelocityAnimationFrameId = requestAnimationFrame(this._measureVelocityHandler);\r\n }\r\n }\r\n\r\n private updateScrollBarHandler(update: boolean = false, blending: boolean = true, fireUpdate: boolean = false) {\r\n const direction = this.direction(),\r\n isVertical = this.isVertical(),\r\n viewportBounds = this.viewportBounds(),\r\n contentBounds = this.contentBounds(),\r\n startOffset = this.startOffset(),\r\n endOffset = this.endOffset(),\r\n {\r\n thumbSize,\r\n thumbPosition,\r\n thumbGradientPositions,\r\n } = this._scrollBox.calculateScroll({\r\n direction,\r\n viewportWidth: viewportBounds.width,\r\n viewportHeight: viewportBounds.height,\r\n contentWidth: contentBounds.width,\r\n contentHeight: contentBounds.height,\r\n startOffset,\r\n endOffset,\r\n positionX: this._x,\r\n positionY: this._y,\r\n minSize: this.scrollbarMinSize(),\r\n });\r\n\r\n this.thumbGradientPositions.set(thumbGradientPositions);\r\n this.thumbSize.set(thumbSize);\r\n const actualThumbPosition = thumbPosition < startOffset ? startOffset : thumbPosition;\r\n if (update) {\r\n this.scrollBar?.scroll({\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: actualThumbPosition, fireUpdate, behavior: BEHAVIOR_INSTANT,\r\n userAction: false, blending,\r\n });\r\n }\r\n this.scrollbarShow.set(this.scrollable && this.scrollbarEnabled());\r\n };\r\n\r\n ngAfterViewInit() {\r\n this.viewInitialized.set(true);\r\n this.runMeasureVelocity();\r\n }\r\n\r\n override tick() {\r\n super.tick();\r\n\r\n this.scrollBar?.tick();\r\n }\r\n\r\n private updateScrollBar() {\r\n this._$updateScrollBar.next();\r\n }\r\n\r\n refreshScrollbar() {\r\n this.updateScrollBarHandler(true, false, false);\r\n }\r\n\r\n protected override onDragStart() {\r\n super.onDragStart();\r\n\r\n this.stopScrollbar();\r\n\r\n this._isScrollbarUserAction = false;\r\n\r\n this.updateScrollBar();\r\n }\r\n\r\n override reset() {\r\n super.reset(this.startOffset());\r\n this.totalSize = 0;\r\n this.stopScrollbar();\r\n this.refresh(true, true);\r\n this.prepared = false;\r\n }\r\n\r\n refresh(fireUpdate: boolean = false, updateScrollbar: boolean = true) {\r\n if (updateScrollbar) {\r\n this.stopScrolling();\r\n }\r\n\r\n this.scrollLimits();\r\n\r\n if (this.isVertical()) {\r\n this.refreshY(this._y);\r\n } else {\r\n this.refreshX(this._x);\r\n }\r\n\r\n if (updateScrollbar) {\r\n this.updateScrollBarHandler(false);\r\n this.emitScrollableEvent();\r\n }\r\n\r\n if (fireUpdate) {\r\n this.fireScrollEvent(false);\r\n }\r\n }\r\n\r\n scrollTo(params: IScrollToParams) {\r\n const userAction = params.userAction ?? true;\r\n if (userAction) {\r\n this._isScrollbarUserAction = false;\r\n this.scrollBar?.stopScrolling();\r\n }\r\n this.scroll({ ...params, userAction: userAction });\r\n }\r\n\r\n stopScrollbar() {\r\n if (!!this.scrollBar) {\r\n this.scrollBar.stopScrolling();\r\n }\r\n }\r\n\r\n protected override onAnimationComplete(position: number) {\r\n this._velocities = [0];\r\n this._velocity = 0;\r\n this._$scrollEnd.next(false);\r\n }\r\n\r\n onScrollBarDragHandler(event: IScrollBarDragEvent) {\r\n const { position, min, max, userAction } = event;\r\n this._isScrollbarUserAction = userAction;\r\n if (!userAction) {\r\n return;\r\n }\r\n this._$scrollbarScroll.next(userAction);\r\n this.stopScrolling();\r\n const isVertical = this.isVertical(),\r\n {\r\n position: absolutePosition,\r\n } = this._scrollBox.getScrollPositionByScrollBar({\r\n scrollSize: isVertical ? this.scrollHeight : this.scrollWidth,\r\n position,\r\n });\r\n\r\n this.scrollTo({\r\n [isVertical ? TOP : LEFT]: absolutePosition, behavior: INSTANT,\r\n blending: false, userAction: false, fireUpdate: true,\r\n });\r\n this.emitScrollableEvent();\r\n this.fireUpdateIfEdgesDetected(position, min, max, true, true);\r\n }\r\n\r\n onScrollBarDragEndHandler(event: IScrollBarDragEvent) {\r\n const { position, min, max, userAction } = event;\r\n this._isScrollbarUserAction = false;\r\n this._velocities = [0];\r\n this._velocity = 0;\r\n if (!userAction) {\r\n return;\r\n }\r\n this.refresh(true, true);\r\n this.fireUpdateIfEdgesDetected(position, min, max, true, true);\r\n this._$scrollbarScroll.next(false);\r\n this.fireScrollEvent(false);\r\n }\r\n\r\n private fireUpdateIfEdgesDetected(position: number, min: number = 0, max: number = 1, animation: boolean = false, userAction: boolean = false) {\r\n if (userAction && animation) {\r\n if (position <= min) {\r\n this._service.scrollToStart();\r\n } else if (position >= max) {\r\n this._service.scrollToEnd();\r\n }\r\n }\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n\r\n this.stopMeasureVelocity();\r\n }\r\n}","<div localeSensitive [langTextDir]=\"langTextDir()\" [listDir]=\"direction()\" class=\"ngvl__container\"\r\n [ngClass]=\"containerClasses()\">\r\n <div #scrollViewport cdkScrollable part=\"scroller\" class=\"ngvl__scroller\">\r\n <div #scrollContent [attr.aria-orientation]=\"direction()\" [attr.aria-activedescendant]=\"focusedElement()\"\r\n tabindex=\"0\" part=\"list\" class=\"ngvl__list\" [ngClass]=\"actualClasses()\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n @if (scrollbarEnabled()) {\r\n <ng-scroll-bar #scrollBar [direction]=\"direction()\" [size]=\"thumbSize()\" [renderer]=\"scrollbarThumbRenderer()\"\r\n [thickness]=\"scrollbarThickness()\" [params]=\"scrollbarThumbParams()\" [loading]=\"loading()\"\r\n [thumbGradientPositions]=\"thumbGradientPositions()\" [prepared]=\"preparedSignal()\"\r\n [interactive]=\"scrollbarInteractive()\" [show]=\"scrollbarShow() && scrollbarEnabled() && preparedSignal()\"\r\n [startOffset]=\"startOffset()\" [endOffset]=\"endOffset()\" [overscrollEnabled]=\"overscrollEnabled()\"\r\n [scrollBehavior]=\"scrollBehavior()\" [scrollbarMinSize]=\"scrollbarMinSize()\"\r\n (onDrag)=\"onScrollBarDragHandler($event)\" (onDragEnd)=\"onScrollBarDragEndHandler($event)\"></ng-scroll-bar>\r\n }\r\n</div>","import { PrerenderCache } from \"../types/cache\";\r\n\r\nexport enum PrerenderTrackBoxEvents {\r\n RESIZE = 'resize',\r\n};\r\n\r\nexport type PrerenderTrackBoxResizeHandler = (cache: PrerenderCache) => void;\r\n\r\nexport type PrerenderTrackBoxHandlers = PrerenderTrackBoxResizeHandler;\r\n","import { ComponentRef, ViewContainerRef } from \"@angular/core\";\r\nimport { IRenderVirtualListItem, IVirtualListCollection, IVirtualListItem } from \"../../../models\";\r\nimport { Id } from \"../../../types\";\r\nimport { ISize } from '../../../interfaces';\r\nimport { CMap } from \"../../../utils/cmap\";\r\nimport { PrerenderCache } from \"../types/cache\";\r\nimport { BaseVirtualListItemComponent } from \"../../ng-list-item/base\";\r\nimport { IPrerenderTrackBoxRefreshParams } from \"../interfaces\";\r\nimport { DEFAULT_DYNAMIC_SIZE, DEFAULT_ITEM_SIZE, TRACK_BY_PROPERTY_NAME } from \"../../../const\";\r\nimport { Component$1 } from \"../../../models/component.model\";\r\nimport { EventEmitter } from \"../../../utils/event-emitter/event-emitter\";\r\nimport { PrerenderTrackBoxEvents, PrerenderTrackBoxHandlers } from \"../events\";\r\n\r\nconst createItemData = (data: IVirtualListItem, isVertical: boolean, bounds: ISize, boundsSize: number,\r\n dynamic: boolean, itemSize: number, id: Id, index: number): IRenderVirtualListItem => {\r\n return {\r\n index,\r\n id,\r\n measures: {\r\n position: 0,\r\n scrollSize: 0,\r\n size: itemSize,\r\n boundsSize,\r\n absoluteStartPosition: 0,\r\n absoluteStartPositionPercent: 0,\r\n absoluteEndPosition: 0,\r\n absoluteEndPositionPercent: 0,\r\n delta: 0,\r\n x: 0,\r\n y: 0,\r\n width: (isVertical ? bounds.width : itemSize) as any,\r\n height: (isVertical ? itemSize : bounds.height) as any,\r\n },\r\n data,\r\n previouseData: data,\r\n nextData: data,\r\n config: {\r\n new: false,\r\n odd: false,\r\n even: false,\r\n collapsable: false,\r\n sticky: 0,\r\n selectable: false,\r\n snap: false,\r\n snapped: false,\r\n snappedOut: false,\r\n isVertical,\r\n dynamic,\r\n isSnappingMethodAdvanced: false,\r\n tabIndex: 0,\r\n zIndex: \"0\",\r\n },\r\n }\r\n}\r\n\r\n/**\r\n * PrerenderTrackBox\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/prerender-container/core/prerender-track-box.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class PrerenderTrackBox extends EventEmitter<PrerenderTrackBoxEvents, PrerenderTrackBoxHandlers> {\r\n private _map: CMap<Id, ISize> | null = new CMap<Id, ISize>();\r\n\r\n private _items: IVirtualListCollection | null = new Array<IVirtualListItem>();\r\n\r\n private _container: ViewContainerRef | null = null;\r\n\r\n private _componentClass: Component$1<BaseVirtualListItemComponent> | null = null;\r\n\r\n private _components: Array<ComponentRef<BaseVirtualListItemComponent>> | null = new Array<ComponentRef<BaseVirtualListItemComponent>>();\r\n\r\n private _componentsResizeObserver: ResizeObserver | null = new ResizeObserver(() => {\r\n const components = this._components;\r\n if (!!components) {\r\n for (const comp of components) {\r\n const { width, height } = comp.instance.getBounds();\r\n this._map?.set(comp.instance.itemId!, { width, height });\r\n }\r\n }\r\n this.dispatch(PrerenderTrackBoxEvents.RESIZE, (this._map?.toObject() || {}));\r\n });\r\n\r\n private _active: boolean = true;\r\n get active() { return this._active; }\r\n\r\n private refresh(componentClass: Component$1<BaseVirtualListItemComponent>, bounds: ISize, params: IPrerenderTrackBoxRefreshParams) {\r\n const isVertical = params.isVertical ?? true,\r\n dynamic = params.dynamic ?? DEFAULT_DYNAMIC_SIZE,\r\n itemsSize = params.itemSize ?? DEFAULT_ITEM_SIZE,\r\n trackBy = params.trackBy ?? TRACK_BY_PROPERTY_NAME,\r\n itemRenderer = params.itemRenderer,\r\n boundsSize = isVertical ? bounds.height : bounds.width,\r\n items = this._items, components = this._components,\r\n resizeObserver = this._componentsResizeObserver;\r\n\r\n if (!items || !components || !this._container) {\r\n return;\r\n }\r\n let totalSize = 0, j = 0;\r\n for (let i = items.length - 1, l = 0; i >= l; i--) {\r\n if (totalSize > boundsSize) {\r\n break;\r\n }\r\n const item = items[i];\r\n if (!!item) {\r\n const id = item[trackBy], index = items.length - i - 1;\r\n let comp: ComponentRef<BaseVirtualListItemComponent>;\r\n if (components.length <= j) {\r\n comp = this._container.createComponent(componentClass);\r\n comp.instance.renderer = itemRenderer;\r\n if (!!resizeObserver) {\r\n resizeObserver.observe(comp.instance.element);\r\n }\r\n components.push(comp);\r\n } else {\r\n comp = components[j];\r\n }\r\n comp.instance.item = createItemData(item, isVertical, bounds, boundsSize, dynamic, itemsSize, id, index);\r\n comp.instance.show();\r\n const { width, height } = comp.instance.getBounds(),\r\n w = isVertical ? width : width < itemsSize ? itemsSize : width,\r\n h = isVertical ? height < itemsSize ? itemsSize : height : height;\r\n totalSize += isVertical ? h : w;\r\n j++;\r\n }\r\n }\r\n }\r\n\r\n create(container: ViewContainerRef) {\r\n this._container = container;\r\n }\r\n\r\n reset(componentClass: Component$1<BaseVirtualListItemComponent>, items: IVirtualListCollection,\r\n bounds: ISize, params: IPrerenderTrackBoxRefreshParams) {\r\n this._items = items;\r\n this._componentClass = componentClass;\r\n this.refresh(componentClass, bounds, params);\r\n }\r\n\r\n getCache(): PrerenderCache {\r\n return !!this._map ? this._map.toObject() : {};\r\n }\r\n\r\n clear() {\r\n if (!!this._map) {\r\n this._map.clear();\r\n }\r\n }\r\n\r\n on() {\r\n if (this._active) {\r\n return;\r\n }\r\n\r\n this._active = true;\r\n const components = this._components;\r\n if (!!components) {\r\n const observer = this._componentsResizeObserver;\r\n for (const comp of components) {\r\n if (!!comp && !!observer) {\r\n observer.observe(comp.instance.element);\r\n }\r\n }\r\n }\r\n }\r\n\r\n off() {\r\n if (!this._active) {\r\n return;\r\n }\r\n\r\n this._active = false;\r\n if (!!this._componentsResizeObserver) {\r\n this._componentsResizeObserver?.disconnect();\r\n }\r\n }\r\n\r\n override dispose() {\r\n super.dispose();\r\n\r\n if (!!this._map) {\r\n this._map.clear();\r\n this._map = null;\r\n }\r\n\r\n if (!!this._items) {\r\n this._items = null;\r\n }\r\n\r\n if (!!this._componentClass) {\r\n this._componentClass = null;\r\n }\r\n\r\n if (!!this._container) {\r\n this._container = null;\r\n }\r\n\r\n if (!!this._components) {\r\n this._components = null;\r\n }\r\n\r\n if (!!this._componentsResizeObserver) {\r\n this._componentsResizeObserver.disconnect();\r\n this._componentsResizeObserver = null;\r\n }\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { NgVirtualListItemComponent } from '../../../ng-list-item/ng-virtual-list-item.component';\r\nimport {\r\n DEFAULT_ZINDEX, DISPLAY_BLOCK, DISPLAY_NONE, HIDDEN_ZINDEX, PX, SIZE_100_PERSENT, SIZE_AUTO,\r\n VISIBILITY_HIDDEN, VISIBILITY_VISIBLE,\r\n} from '../../../../const';\r\nimport { ID, POSITION, POSITION_ZERO } from '../../../ng-list-item/const';\r\n\r\n/**\r\n * Virtual list component.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list-item.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-prerender-virtual-list-item',\r\n templateUrl: '../../../ng-list-item/ng-virtual-list-item.component.html',\r\n styleUrls: ['../../../ng-list-item/ng-virtual-list-item.component.scss', './ng-prerender-list-item.component.scss'],\r\n host: {\r\n 'class': 'ngvl__item',\r\n 'role': 'listitem',\r\n },\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgPrerenderVirtualListItemComponent extends NgVirtualListItemComponent {\r\n protected override update() {\r\n const data = this._data, regular = this.regular, length = this._regularLength;\r\n if (data) {\r\n this._elementRef.nativeElement.setAttribute(ID, `${data.id}`);\r\n const styles = this._elementRef.nativeElement.style;\r\n styles.zIndex = data.config.zIndex;\r\n if (regular) {\r\n this._elementRef.nativeElement.setAttribute(POSITION, POSITION_ZERO);\r\n } else {\r\n this._elementRef.nativeElement.setAttribute(POSITION, `${data.config.isVertical ? data.measures.y : data.measures.x}`);\r\n }\r\n styles.height = data.config.isVertical ? data.config.dynamic ? SIZE_AUTO : `${data.measures.height}${PX}` : regular ? length : SIZE_100_PERSENT;\r\n styles.width = data.config.isVertical ? regular ? length : SIZE_100_PERSENT : data.config.dynamic ? SIZE_AUTO : `${data.measures.width}${PX}`;\r\n } else {\r\n this._elementRef.nativeElement.removeAttribute(ID);\r\n }\r\n }\r\n\r\n override show() {\r\n const el = this._elementRef.nativeElement as HTMLElement,\r\n styles = el.style;\r\n styles.zIndex = this._data?.config?.zIndex ?? DEFAULT_ZINDEX;\r\n if (this.regular) {\r\n if (styles.display === DISPLAY_BLOCK) {\r\n return;\r\n }\r\n\r\n styles.display = DISPLAY_BLOCK;\r\n } else {\r\n if (styles.visibility === VISIBILITY_VISIBLE) {\r\n return;\r\n }\r\n\r\n styles.visibility = VISIBILITY_VISIBLE;\r\n }\r\n }\r\n\r\n override hide() {\r\n const el = this._elementRef.nativeElement,\r\n styles = el.style;\r\n styles.zIndex = HIDDEN_ZINDEX;\r\n if (this.regular) {\r\n if (styles.display === DISPLAY_NONE) {\r\n return;\r\n }\r\n\r\n styles.display = DISPLAY_NONE;\r\n } else {\r\n if (styles.visibility === VISIBILITY_HIDDEN) {\r\n return;\r\n }\r\n\r\n styles.visibility = VISIBILITY_HIDDEN;\r\n }\r\n }\r\n}","import { ChangeDetectionStrategy, Component, computed, input, Signal, signal, ViewChild } from '@angular/core';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { combineLatest, from, tap } from 'rxjs';\r\nimport { TextDirection, TextDirections } from '../../../../enums';\r\nimport { BaseScrollView } from '../../../ng-scroll-view/base/base-scroll-view.component';\r\nimport { SCROLL_VIEW_INVERSION } from '../../../ng-scroll-view';\r\nimport { BEHAVIOR_INSTANT, DEFAULT_SCROLLBAR_ENABLED, LEFT_PROP_NAME, TOP_PROP_NAME } from '../../../../const';\r\nimport { NgScrollBarComponent } from '../../../ng-scroll-bar/ng-scroll-bar.component';\r\nimport { ScrollBox } from '../../../ng-scroller/utils';\r\nimport { SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO } from '../../../ng-scroll-view/const';\r\n\r\n/**\r\n * PrerenderScrollerComponent.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/prerender-container/prerender-scroller/prerender-scroller.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-prerender-scroller',\r\n templateUrl: './ng-prerender-scroller.component.html',\r\n styleUrl: '../../../ng-scroller/ng-scroller.component.scss',\r\n providers: [\r\n { provide: SCROLL_VIEW_INVERSION, useValue: false },\r\n { provide: SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, useValue: true },\r\n ],\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgPrerenderScrollerComponent extends BaseScrollView {\r\n @ViewChild('scrollBar', { read: NgScrollBarComponent })\r\n scrollBar: NgScrollBarComponent | undefined;\r\n\r\n langTextDir = signal<TextDirection>(TextDirections.LTR);\r\n\r\n scrollbarEnabled = input<boolean>(DEFAULT_SCROLLBAR_ENABLED);\r\n\r\n classes = input<{ [cName: string]: boolean }>({});\r\n\r\n actualClasses: Signal<{ [cName: string]: boolean }>;\r\n\r\n containerClasses = signal<{ [cName: string]: boolean }>({});\r\n\r\n thumbSize = signal<number>(0);\r\n\r\n scrollbarShow = signal<boolean>(false);\r\n\r\n override set x(v: number) {\r\n if (v !== undefined && !Number.isNaN(v)) {\r\n this._x = this._actualX = v;\r\n\r\n this.updateScrollBar();\r\n }\r\n }\r\n override get x() { return this._x; }\r\n\r\n override set y(v: number) {\r\n if (v !== undefined && !Number.isNaN(v)) {\r\n this._y = this._actualY = v;\r\n\r\n this.updateScrollBar();\r\n }\r\n }\r\n override get y() { return this._y; }\r\n\r\n protected override onResizeViewport() {\r\n const viewport = this.scrollViewport()?.nativeElement;\r\n if (viewport) {\r\n this.viewportBounds.set({ width: viewport.offsetWidth, height: viewport.offsetHeight });\r\n this.updateScrollBar();\r\n }\r\n }\r\n\r\n protected override onResizeContent() {\r\n const content = this.scrollContent()?.nativeElement;\r\n if (content) {\r\n this.contentBounds.set({ width: content.offsetWidth, height: content.offsetHeight });\r\n this.updateScrollBar();\r\n }\r\n }\r\n\r\n private _scrollBox = new ScrollBox();\r\n\r\n constructor() {\r\n super();\r\n\r\n this.actualClasses = computed(() => {\r\n const classes = this.classes(), direction = this.direction();\r\n return { ...classes, [direction]: true };\r\n });\r\n\r\n const $contentBounds = toObservable(this.contentBounds),\r\n $viewportBounds = toObservable(this.viewportBounds),\r\n $isVertical = toObservable(this.isVertical),\r\n $direction = toObservable(this.direction),\r\n $scrollbarEnabled = toObservable(this.scrollbarEnabled);\r\n\r\n combineLatest([$direction, $scrollbarEnabled, $isVertical, $contentBounds, $viewportBounds]).pipe(\r\n takeUntilDestroyed(),\r\n tap(([direction, scrollbarEnabled]) => {\r\n this.containerClasses.set({ [direction]: true, enabled: scrollbarEnabled, scrollable: scrollbarEnabled });\r\n }),\r\n ).subscribe();\r\n\r\n const $startOffset = toObservable(this.startOffset),\r\n $endOffset = toObservable(this.endOffset),\r\n $thumbSize = toObservable(this.thumbSize);\r\n\r\n from([$endOffset, $startOffset, $thumbSize, $isVertical]).pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this.updateScrollBar();\r\n }),\r\n ).subscribe();\r\n\r\n const $updateScrollBar = this.$updateScrollBar;\r\n\r\n $updateScrollBar.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(() => {\r\n this.updateScrollBarHandler(true);\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n private updateScrollBarHandler(update: boolean = false) {\r\n const direction = this.direction(),\r\n isVertical = this.isVertical(),\r\n startOffset = this.startOffset(),\r\n endOffset = this.endOffset(),\r\n scrollContent = this.scrollContent()?.nativeElement as HTMLElement,\r\n scrollViewport = this.scrollViewport()?.nativeElement as HTMLDivElement,\r\n {\r\n thumbSize,\r\n thumbPosition,\r\n } = this._scrollBox.calculateScroll({\r\n direction,\r\n viewportWidth: scrollViewport.offsetWidth, viewportHeight: scrollViewport.offsetHeight,\r\n contentWidth: scrollContent.offsetWidth, contentHeight: scrollContent.offsetHeight,\r\n startOffset,\r\n endOffset,\r\n positionX: this._x,\r\n positionY: this._y,\r\n minSize: 1,\r\n });\r\n\r\n this.thumbSize.set(thumbSize);\r\n if (update) {\r\n this.scrollBar?.scroll({\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: thumbPosition, fireUpdate: false, behavior: BEHAVIOR_INSTANT,\r\n userAction: false, blending: true,\r\n });\r\n }\r\n this.scrollbarShow.set(this.scrollable);\r\n }\r\n\r\n protected updateScrollBar() {\r\n this._$updateScrollBar.next();\r\n }\r\n}","<div localeSensitive [langTextDir]=\"langTextDir()\" [listDir]=\"direction()\" class=\"ngvl__container\"\r\n [ngClass]=\"containerClasses()\">\r\n <div #scrollViewport part=\"scroller\" class=\"ngvl__scroller\">\r\n <div #scrollContent part=\"list\" class=\"ngvl__list\" [ngClass]=\"actualClasses()\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>","import {\r\n ChangeDetectionStrategy, Component, DestroyRef, effect, ElementRef, inject, input, OnDestroy, signal, TemplateRef, ViewChild,\r\n ViewContainerRef, ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport { takeUntilDestroyed, toObservable } from \"@angular/core/rxjs-interop\";\r\nimport { toggleClassName } from \"../../../../utils\";\r\nimport { combineLatest, filter, Observable, Subject, Subscription, tap } from \"rxjs\";\r\nimport {\r\n CLASS_LIST_HORIZONTAL, CLASS_LIST_VERTICAL, DEFAULT_DIRECTION, DEFAULT_DYNAMIC_SIZE, DEFAULT_ITEM_SIZE,\r\n DEFAULT_SCROLLBAR_ENABLED, PX, TRACK_BY_PROPERTY_NAME,\r\n} from \"../../../../const\";\r\nimport { ISize } from '../../../../interfaces';\r\nimport { IVirtualListCollection } from \"../../../../models\";\r\nimport { PrerenderCache } from \"../../types/cache\";\r\nimport { BaseVirtualListItemComponent } from \"../../../ng-list-item/base\";\r\nimport { Component$1 } from \"../../../../models/component.model\";\r\nimport { PrerenderTrackBox } from \"../../core\";\r\nimport { PrerenderTrackBoxEvents } from \"../../events\";\r\nimport { NgPrerenderVirtualListItemComponent } from \"../ng-prerender-list-item/ng-prerender-list-item.component\";\r\nimport { Direction } from \"../../../../enums\";\r\n\r\n/**\r\n * PrerenderList.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/prerender-container/components/prerender-list/prerender-list.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-prerender-list',\r\n templateUrl: './ng-prerender-list.component.html',\r\n styleUrls: ['../../../../ng-virtual-list.component.scss', './ng-prerender-list.component.scss'],\r\n host: {\r\n 'style': 'position: relative;'\r\n },\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.ShadowDom,\r\n})\r\nexport class NgPrerenderList implements OnDestroy {\r\n @ViewChild('renderersContainer', { read: ViewContainerRef })\r\n private _listContainerRef: ViewContainerRef | undefined;\r\n\r\n enabled = input<boolean>(false);\r\n\r\n direction = input<Direction>(DEFAULT_DIRECTION);\r\n\r\n isVertical = input<boolean>(true);\r\n\r\n scrollbarEnabled = input<boolean>(DEFAULT_SCROLLBAR_ENABLED);\r\n\r\n startOffset = input<number>(0);\r\n\r\n endOffset = input<number>(0);\r\n\r\n bounds = input.required<ISize>();\r\n\r\n dynamic = input<boolean>(DEFAULT_DYNAMIC_SIZE);\r\n\r\n itemSize = input<number>(DEFAULT_ITEM_SIZE);\r\n\r\n trackBy = input<string>(TRACK_BY_PROPERTY_NAME);\r\n\r\n itemRenderer = input<TemplateRef<any>>();\r\n\r\n itemComponentClass = input<Component$1<BaseVirtualListItemComponent>>(NgPrerenderVirtualListItemComponent);\r\n\r\n protected _items = signal<IVirtualListCollection | null>(null);\r\n\r\n protected readonly classes = signal<{ [cName: string]: boolean }>({ prepared: true });\r\n\r\n private _$render = new Subject<PrerenderCache>();\r\n $render = this._$render.asObservable();\r\n\r\n private _$componentResize = new Subject<PrerenderCache>();\r\n protected $componentResize = this._$componentResize.asObservable();\r\n\r\n private _trackBox: PrerenderTrackBox | null = new PrerenderTrackBox();\r\n\r\n private _onTrackBoxResizeHandler = (cache: PrerenderCache) => {\r\n this._$componentResize.next(cache);\r\n };\r\n\r\n private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n protected $isVertical: Observable<boolean>;\r\n\r\n protected $items: Observable<IVirtualListCollection | null>;\r\n\r\n protected $bounds: Observable<ISize>;\r\n\r\n get active() { return this._trackBox?.active ?? false; }\r\n\r\n private _activated: boolean = false;\r\n\r\n private _subscriptions = new Array<Subscription>();\r\n\r\n private _destroyRef = inject(DestroyRef);\r\n\r\n constructor() {\r\n this.$isVertical = toObservable(this.isVertical);\r\n this.$items = toObservable(this._items);\r\n this.$bounds = toObservable(this.bounds);\r\n\r\n effect(() => {\r\n const enabled = this.enabled();\r\n if (enabled) {\r\n this.activate();\r\n } else {\r\n this.deactivate();\r\n }\r\n });\r\n }\r\n\r\n activate() {\r\n if (this._activated) {\r\n return;\r\n }\r\n this._activated = true;\r\n\r\n this._trackBox!.addEventListener(PrerenderTrackBoxEvents.RESIZE, this._onTrackBoxResizeHandler);\r\n\r\n this._subscriptions.push(this.$isVertical.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(v => {\r\n const el = this._elementRef.nativeElement;\r\n toggleClassName(el, v ? CLASS_LIST_VERTICAL : CLASS_LIST_HORIZONTAL, v ? CLASS_LIST_HORIZONTAL : CLASS_LIST_VERTICAL);\r\n }),\r\n ).subscribe());\r\n\r\n this._subscriptions.push(this.$bounds.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(v => !!v),\r\n tap(({ width, height }) => {\r\n const el = this._elementRef.nativeElement;\r\n el.style.width = `${width}${PX}`;\r\n el.style.height = `${height}${PX}`;\r\n }),\r\n ).subscribe());\r\n\r\n this._subscriptions.push(combineLatest([this.$bounds, this.$items]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(([b, i]) => !!b && !!i),\r\n tap(([bounds, items]) => {\r\n if (this.active && !!this._trackBox && !!items) {\r\n this._trackBox.reset(this.itemComponentClass(), items, bounds, {\r\n itemRenderer: this.itemRenderer(),\r\n dynamic: this.dynamic(),\r\n itemSize: this.itemSize(),\r\n isVertical: this.isVertical(),\r\n trackBy: this.trackBy(),\r\n });\r\n }\r\n }),\r\n ).subscribe());\r\n\r\n const $componentResize = this.$componentResize;\r\n this._subscriptions.push($componentResize.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(cache => {\r\n this._$render.next(cache);\r\n }),\r\n ).subscribe());\r\n }\r\n\r\n deactivate() {\r\n if (!this._activated) {\r\n return;\r\n }\r\n this._activated = false;\r\n\r\n this.off();\r\n\r\n if (!!this._trackBox) {\r\n this._trackBox!.removeEventListener(PrerenderTrackBoxEvents.RESIZE, this._onTrackBoxResizeHandler);\r\n }\r\n\r\n const subscriptions = this._subscriptions;\r\n for (const subscr of subscriptions) {\r\n if (!subscr.closed) {\r\n subscr.unsubscribe();\r\n }\r\n }\r\n this._subscriptions = [];\r\n }\r\n\r\n clear() {\r\n if (!!this._trackBox) {\r\n this._trackBox.clear();\r\n }\r\n }\r\n\r\n on(items: IVirtualListCollection | null = null) {\r\n if (!!this._trackBox) {\r\n this._trackBox.on();\r\n this._items.set(items);\r\n }\r\n }\r\n\r\n off() {\r\n if (!!this._trackBox) {\r\n this._trackBox.off();\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this._trackBox!.create(this._listContainerRef!);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.dispose();\r\n }\r\n\r\n dispose() {\r\n this._subscriptions = [];\r\n\r\n if (!!this._trackBox) {\r\n this._trackBox.dispose();\r\n this._trackBox = null;\r\n }\r\n }\r\n}","<ng-prerender-scroller #scroller class=\"ngvl__list-scroller\" [classes]=\"classes()\" [direction]=\"direction()\"\r\n [scrollbarEnabled]=\"scrollbarEnabled()\" [startOffset]=\"startOffset()\" [endOffset]=\"endOffset()\">\r\n <ng-container #renderersContainer></ng-container>\r\n</ng-prerender-scroller>","import {\r\n ChangeDetectionStrategy, Component, input, TemplateRef, viewChild, ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport {\r\n DEFAULT_DIRECTION, DEFAULT_DYNAMIC_SIZE, DEFAULT_ITEM_SIZE, DEFAULT_SCROLLBAR_ENABLED, TRACK_BY_PROPERTY_NAME,\r\n} from \"../../const\";\r\nimport { ISize } from '../../interfaces';\r\nimport { IVirtualListCollection } from \"../../models\";\r\nimport { Direction } from \"../../enums\";\r\nimport { NgPrerenderList } from \"./components/ng-prerender-list/ng-prerender-list.component\";\r\nimport { filter, Observable, switchMap } from \"rxjs\";\r\nimport { PrerenderCache } from \"./types\";\r\nimport { takeUntilDestroyed, toObservable } from \"@angular/core/rxjs-interop\";\r\n\r\n/**\r\n * Prerender container.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/ng-prerender-container/ng-prerender-container.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-prerender-container',\r\n templateUrl: './ng-prerender-container.component.html',\r\n styleUrls: ['../../ng-virtual-list.component.scss', './ng-prerender-container.component.scss'],\r\n host: {\r\n 'style': 'position: relative;'\r\n },\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.ShadowDom,\r\n})\r\nexport class NgPrerenderContainer {\r\n private _list = viewChild<NgPrerenderList>('list');\r\n\r\n enabled = input<boolean>(false);\r\n\r\n direction = input<Direction>(DEFAULT_DIRECTION);\r\n\r\n isVertical = input<boolean>(true);\r\n\r\n scrollbarEnabled = input<boolean>(DEFAULT_SCROLLBAR_ENABLED);\r\n\r\n startOffset = input<number>(0);\r\n\r\n endOffset = input<number>(0);\r\n\r\n bounds = input.required<ISize>();\r\n\r\n dynamic = input<boolean>(DEFAULT_DYNAMIC_SIZE);\r\n\r\n itemSize = input<number>(DEFAULT_ITEM_SIZE);\r\n\r\n trackBy = input<string>(TRACK_BY_PROPERTY_NAME);\r\n\r\n itemRenderer = input<TemplateRef<any>>();\r\n\r\n readonly $render: Observable<PrerenderCache>;\r\n\r\n get active() {\r\n return this._list()?.active ?? false;\r\n }\r\n\r\n constructor() {\r\n const $list = toObservable(this._list);\r\n\r\n this.$render = $list.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(v => v!.$render),\r\n );\r\n }\r\n\r\n clear() {\r\n const list = this._list();\r\n if (!!list) {\r\n list.clear();\r\n }\r\n }\r\n\r\n on(items: IVirtualListCollection | null = null) {\r\n const list = this._list();\r\n if (!!list) {\r\n list.on(items);\r\n }\r\n }\r\n\r\n off() {\r\n const list = this._list();\r\n if (!!list) {\r\n list.off();\r\n }\r\n }\r\n}","<ng-prerender-list #list [bounds]=\"bounds()!\" [direction]=\"direction()\" [dynamic]=\"dynamic()\"\r\n [isVertical]=\"isVertical()\" [itemSize]=\"itemSize()\" [trackBy]=\"trackBy()\" [itemRenderer]=\"itemRenderer()\"\r\n [startOffset]=\"startOffset()\" [endOffset]=\"endOffset()\" [scrollbarEnabled]=\"scrollbarEnabled()\"\r\n [enabled]=\"enabled()\" />","import {\r\n ChangeDetectionStrategy, Component, ComponentRef, computed, DestroyRef, effect, ElementRef, inject, input,\r\n OnDestroy, output, Signal, signal, TemplateRef, ViewChild, viewChild, ViewContainerRef, ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport {\r\n BehaviorSubject, combineLatest, debounceTime, delay, distinctUntilChanged, filter, fromEvent, map,\r\n of, skip, Subject, switchMap, take, takeUntil, tap,\r\n} from 'rxjs';\r\nimport { NgVirtualListItemComponent } from './components/ng-list-item/ng-virtual-list-item.component';\r\nimport {\r\n BEHAVIOR_INSTANT, CLASS_LIST_HORIZONTAL, CLASS_LIST_VERTICAL, DEFAULT_DIRECTION, DEFAULT_DYNAMIC_SIZE,\r\n DEFAULT_ENABLED_BUFFER_OPTIMIZATION, DEFAULT_ITEM_SIZE, DEFAULT_BUFFER_SIZE, DEFAULT_LIST_SIZE, DEFAULT_SNAP, DEFAULT_SNAPPING_METHOD,\r\n HEIGHT_PROP_NAME, LEFT_PROP_NAME, MAX_SCROLL_TO_ITERATIONS, PX, FOCUS, TOP_PROP_NAME, TRACK_BY_PROPERTY_NAME, WIDTH_PROP_NAME,\r\n DEFAULT_MAX_BUFFER_SIZE, DEFAULT_SELECT_METHOD, DEFAULT_SELECT_BY_CLICK, DEFAULT_COLLAPSE_BY_CLICK, DEFAULT_COLLECTION_MODE,\r\n DEFAULT_SCREEN_READER_MESSAGE, DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET, DEFAULT_SNAP_SCROLLTO_END, MIN_PIXELS_FOR_PREVENT_SNAPPING,\r\n MOUSE_DOWN, TOUCH_START, DEFAULT_LANG_TEXT_DIR, DEFAULT_CLICK_DISTANCE, DEFAULT_WAIT_FOR_PREPARATION, DEFAULT_SCROLLBAR_THICKNESS,\r\n DEFAULT_SCROLLBAR_MIN_SIZE, KEY_DOWN, BEHAVIOR_AUTO, DEFAULT_SCROLLBAR_ENABLED, DEFAULT_SCROLLBAR_INTERACTIVE, DEFAULT_OVERSCROLL_ENABLED,\r\n DEFAULT_ANIMATION_PARAMS, DEFAULT_SCROLL_BEHAVIOR, DEFAULT_SNAP_SCROLLTO_START, EMPTY_SCROLL_STATE_VERSION, MAX_REGULAR_SNAPED_COMPONENTS,\r\n PREPARE_ITERATIONS, PREPARATION_REUPDATE_LENGTH, ROLE_LIST_BOX, ROLE_LIST, KEY_TAB, MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL1,\r\n MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL2, PREPARE_ITERATIONS_FOR_UPDATE_ITEMS, PREPARATION_REUPDATE_LENGTH_FOR_UPDATE_ITEMS,\r\n PREPARE_ITERATIONS_FOR_COLLAPSE_ITEMS, PREPARATION_REUPDATE_LENGTH_FOR_COLLAPSE_ITEMS, MAX_NUMBERS_OF_SKIPS_FOR_QUALITY_OPTIMIZATION_LVL1,\r\n DEFAULT_SCROLLING_SETTINGS,\r\n} from './const';\r\nimport {\r\n IRenderVirtualListItem, IVirtualListCollection, IVirtualListItem, IVirtualListItemConfigMap,\r\n} from './models';\r\nimport {\r\n IScrollEvent, IScrollOptions, IAnimationParams, ISize, IRenderStabilizerOptions,\r\n IScrollingSettings,\r\n} from './interfaces';\r\nimport { FocusAlignment, Id } from './types';\r\nimport { IRenderVirtualListCollection } from './models/render-collection.model';\r\nimport {\r\n CollectionMode, CollectionModes, Direction, Directions, FocusAlignments, MethodForSelecting, MethodsForSelecting,\r\n SnappingMethod, SnappingMethods, TextDirection, TextDirections,\r\n} from './enums';\r\nimport { debounce, ScrollEvent, toggleClassName } from './utils';\r\nimport { IGetItemPositionOptions, IUpdateCollectionOptions, TrackBox } from './core/track-box';\r\nimport { isSnappingMethodAdvenced } from './utils/snapping-method';\r\nimport { BaseVirtualListItemComponent } from './components/ng-list-item/base';\r\nimport { Component$1 } from './models/component.model';\r\nimport { isDirection } from './utils/is-direction';\r\nimport { NgVirtualListService } from './ng-virtual-list.service';\r\nimport { isMethodForSelecting } from './utils/is-method-for-selecting';\r\nimport { MethodsForSelectingTypes } from './enums/method-for-selecting-types';\r\nimport { CMap } from './utils/cmap';\r\nimport { validateArray, validateBoolean, validateFloat, validateInt, validateObject, validateString } from './utils/validation';\r\nimport { copyValueAsReadonly, objectAsReadonly } from './utils/object';\r\nimport { isCollectionMode } from './utils/is-collection-mode';\r\nimport { NgScrollerComponent } from './components/ng-scroller/ng-scroller.component';\r\nimport { IScrollToParams } from './components/ng-scroll-view';\r\nimport { NgPrerenderContainer } from './components/ng-prerender-container/ng-prerender-container.component';\r\nimport { IScrollParams } from './interfaces';\r\nimport { formatActualDisplayItems, formatScreenReaderMessage } from './utils/screen-reader-formatter';\r\nimport { validateId, validateIteration, validateScrollBehavior, validateScrollIteration } from './utils/list-validators';\r\nimport { EVENT_KEY_DOWN, KEY_ARR_DOWN, KEY_ARR_LEFT, KEY_ARR_RIGHT, KEY_ARR_UP } from './components/ng-list-item/const';\r\nimport { NgVirtualListPublicService } from './ng-virtual-list-public.service';\r\n\r\n/**\r\n * Virtual list component.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/ng-virtual-list.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-virtual-list',\r\n templateUrl: './ng-virtual-list.component.html',\r\n styleUrl: './ng-virtual-list.component.scss',\r\n host: {\r\n 'style': 'position: relative;'\r\n },\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.ShadowDom,\r\n providers: [NgVirtualListService, NgVirtualListPublicService],\r\n})\r\nexport class NgVirtualListComponent implements OnDestroy {\r\n private static __nextId: number = 0;\r\n\r\n private _id: number = NgVirtualListComponent.__nextId;\r\n\r\n /**\r\n * Readonly. Returns the unique identifier of the component.\r\n */\r\n get id() { return this._id; }\r\n\r\n private _service = inject(NgVirtualListService);\r\n\r\n private _prerender = viewChild<NgPrerenderContainer>('prerender');\r\n\r\n @ViewChild('renderersContainer', { read: ViewContainerRef })\r\n private _listContainerRef: ViewContainerRef | undefined;\r\n\r\n @ViewChild('snapRendererContainer', { read: ViewContainerRef })\r\n private _snapContainerRef: ViewContainerRef | undefined;\r\n\r\n private _scrollerComponent = viewChild<NgScrollerComponent>('scroller');\r\n\r\n private _scroller: Signal<ElementRef<HTMLDivElement> | undefined>;\r\n\r\n private _list: Signal<ElementRef<HTMLDivElement> | undefined>;\r\n\r\n /**\r\n * Fires when the list has been scrolled.\r\n */\r\n onScroll = output<IScrollEvent>();\r\n\r\n /**\r\n * Fires when the list has completed scrolling.\r\n */\r\n onScrollEnd = output<IScrollEvent>();\r\n\r\n /**\r\n * Fires when the viewport size is changed.\r\n */\r\n onViewportChange = output<ISize>();\r\n\r\n /**\r\n * Fires when an element is clicked.\r\n */\r\n onItemClick = output<IRenderVirtualListItem<any> | null>();\r\n\r\n /**\r\n * Fires when elements are selected.\r\n */\r\n onSelect = output<Array<Id> | Id | null>();\r\n\r\n /**\r\n * Fires when elements are collapsed.\r\n */\r\n onCollapse = output<Array<Id> | Id | null>();\r\n\r\n /**\r\n * Fires when the scroll reaches the start.\r\n */\r\n onScrollReachStart = output<void>();\r\n\r\n /**\r\n * Fires when the scroll reaches the end.\r\n */\r\n onScrollReachEnd = output<void>();\r\n\r\n private _$show = new BehaviorSubject<boolean>(false);\r\n readonly $show = this._$show.asObservable();\r\n\r\n private _scrollbarThickness = {\r\n transform: (v: number) => {\r\n const valid = validateInt(v);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarThickness\" parameter must be of type `number`.');\r\n return DEFAULT_SCROLLBAR_THICKNESS;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Scrollbar thickness.\r\n */\r\n scrollbarThickness = input<number>(DEFAULT_SCROLLBAR_THICKNESS, { ...this._scrollbarThickness });\r\n\r\n private _scrollbarMinSize = {\r\n transform: (v: number) => {\r\n const valid = validateInt(v);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarMinSize\" parameter must be of type `number`.');\r\n return DEFAULT_SCROLLBAR_MIN_SIZE;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Minimum scrollbar size.\r\n */\r\n scrollbarMinSize = input<number>(DEFAULT_SCROLLBAR_MIN_SIZE, { ...this._scrollbarMinSize });\r\n\r\n private _scrollbarThumbRenderer = {\r\n transform: (v: TemplateRef<any> | null) => {\r\n const valid = validateObject(v, true, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarThumbRenderer\" parameter must be of type `object`.');\r\n return null;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Scrollbar customization template.\r\n */\r\n scrollbarThumbRenderer = input<TemplateRef<any> | null>(null, { ...this._scrollbarThumbRenderer });\r\n\r\n private _scrollbarThumbParams = {\r\n transform: (v: { [propName: string]: any } | null) => {\r\n const valid = validateObject(v, true, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarThumbParams\" parameter must be of type `object`.');\r\n return null;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Additional options for the scrollbar.\r\n */\r\n scrollbarThumbParams = input<{ [propName: string]: any } | null>({}, { ...this._scrollbarThumbParams });\r\n\r\n private _loading = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"loading\" parameter must be of type `boolean`.');\r\n return false;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * If `true`, the scrollBar goes into loading state. The default value is `false`.\r\n */\r\n loading = input<boolean>(false, { ...this._loading });\r\n\r\n private _waitForPreparation = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"waitForPreparation\" parameter must be of type `boolean`.');\r\n return DEFAULT_WAIT_FOR_PREPARATION;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * If true, it will wait until the list items are fully prepared before displaying them.. The default value is `true`.\r\n */\r\n waitForPreparation = input<boolean>(DEFAULT_WAIT_FOR_PREPARATION, { ...this._waitForPreparation });\r\n\r\n private _clickDistance = {\r\n transform: (v: number) => {\r\n const valid = validateInt(v);\r\n\r\n if (!valid) {\r\n console.error('The \"clickDistance\" parameter must be of type `number`.');\r\n return DEFAULT_CLICK_DISTANCE;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * The maximum scroll distance at which a click event is triggered.\r\n */\r\n clickDistance = input<number>(DEFAULT_CLICK_DISTANCE, { ...this._clickDistance });\r\n\r\n private _itemsOptions = {\r\n transform: (v: IVirtualListCollection | undefined) => {\r\n let valid = validateArray(v, true, true);\r\n if (valid) {\r\n if (v) {\r\n const trackBy = this.trackBy();\r\n for (let i = 0, l = v.length; i < l; i++) {\r\n const item = v[i];\r\n valid = validateObject(item, true, true);\r\n if (valid) {\r\n if (item && !(validateFloat(item?.[trackBy] as number, true) || validateString(item?.[trackBy] as string, true, true))) {\r\n valid = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!valid) {\r\n console.error('The \"items\" parameter must be of type `IVirtualListCollection` or `undefined`.');\r\n return [];\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Collection of list items.\r\n */\r\n items = input.required<IVirtualListCollection>({\r\n ...this._itemsOptions,\r\n });\r\n\r\n private _selectedIdsOptions = {\r\n transform: (v: Array<Id> | Id | undefined) => {\r\n let valid = validateArray(v as any, true, true) || validateString(v as any, true, true) || validateFloat(v as any, true);\r\n if (valid) {\r\n if (v && Array.isArray(v)) {\r\n for (let i = 0, l = v.length; i < l; i++) {\r\n const item = v[i];\r\n valid = validateString(item as any) || validateFloat(item as any);\r\n if (!valid) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!valid) {\r\n console.error('The \"selectedIds\" parameter must be of type `Array<Id> | Id` or `null`.');\r\n return this._isMultiSelecting ? [] : undefined;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n defaultItemValue = input<IVirtualListItem | null>(null);\r\n\r\n /**\r\n * Sets the selected items.\r\n */\r\n selectedIds = input<Array<Id> | Id | null>(null, { ...this._selectedIdsOptions });\r\n\r\n private _collapsedIdsOptions = {\r\n transform: (v: Array<Id>) => {\r\n let valid = validateArray(v as any, true, true);\r\n if (valid) {\r\n if (v && Array.isArray(v)) {\r\n for (let i = 0, l = v.length; i < l; i++) {\r\n const item = v[i];\r\n valid = validateString(item as any) || validateFloat(item as any);\r\n if (!valid) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!valid) {\r\n console.error('The \"collapsedIds\" parameter must be of type `Array<Id>.');\r\n return [];\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Sets the collapsed items.\r\n */\r\n collapsedIds = input<Array<Id>>([], { ...this._collapsedIdsOptions });\r\n\r\n private _selectByClickOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"selectByClick\" parameter must be of type `boolean`.');\r\n return DEFAULT_SELECT_BY_CLICK;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * If `false`, the element is selected using the config.select method passed to the template; \r\n * if `true`, the element is selected by clicking on it. The default value is `true`.\r\n */\r\n selectByClick = input<boolean>(DEFAULT_SELECT_BY_CLICK, { ...this._selectByClickOptions });\r\n\r\n private _collapseByClickOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"collapseByClick\" parameter must be of type `boolean`.');\r\n return DEFAULT_COLLAPSE_BY_CLICK;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * If `false`, the element is collapsed using the config.collapse method passed to the template; \r\n * if `true`, the element is collapsed by clicking on it. The default value is `true`.\r\n */\r\n collapseByClick = input<boolean>(DEFAULT_COLLAPSE_BY_CLICK, { ...this._collapseByClickOptions });\r\n\r\n private _snapOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"snap\" parameter must be of type `boolean`.');\r\n return DEFAULT_SNAP;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Determines whether elements will snap. Default value is \"true\".\r\n */\r\n snap = input<boolean>(DEFAULT_SNAP, { ...this._snapOptions });\r\n\r\n private _snapToEndTransitionInstantOffsetOptions = {\r\n transform: (v: number) => {\r\n const valid = validateFloat(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"snapToEndTransitionInstantOffset\" parameter must be of type `number`.');\r\n return DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Sets the offset value; if the scroll area value is exceeded, the scroll animation will be disabled. Default value is \"0\".\r\n */\r\n snapToEndTransitionInstantOffset = input<number>(DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET, { ...this._snapToEndTransitionInstantOffsetOptions });\r\n\r\n private _scrollStartOffsetOptions = {\r\n transform: (v: number) => {\r\n const valid = validateFloat(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollStartOffset\" parameter must be of type `number`.');\r\n return 0;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Sets the scroll start offset value; Default value is \"0\".\r\n */\r\n scrollStartOffset = input<number>(0, { ...this._scrollStartOffsetOptions });\r\n\r\n private _scrollEndOffsetOptions = {\r\n transform: (v: number) => {\r\n const valid = validateFloat(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollEndOffset\" parameter must be of type `number`.');\r\n return 0;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Sets the scroll end offset value; Default value is \"0\".\r\n */\r\n scrollEndOffset = input<number>(0, { ...this._scrollEndOffsetOptions });\r\n\r\n private _snapScrollToStartOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"snapScrollToStart\" parameter must be of type `boolean`.');\r\n return DEFAULT_SNAP_SCROLLTO_START;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Determines whether the scroll will be anchored to the start of the list. Default value is \"true\".\r\n * This property takes precedence over the snapScrollToEnd property.\r\n * That is, if snapScrollToStart and snapScrollToEnd are enabled, the list will initially snap \r\n * to the beginning; if you move the scroll bar to the end, the list will snap to the end. \r\n * If snapScrollToStart is disabled and snapScrollToEnd is enabled, the list will snap to the end; \r\n * if you move the scroll bar to the beginning, the list will snap to the beginning. \r\n * If both snapScrollToStart and snapScrollToEnd are disabled, the list will never snap to the beginning or end.\r\n */\r\n snapScrollToStart = input<boolean>(DEFAULT_SNAP_SCROLLTO_START, { ...this._snapScrollToStartOptions });\r\n\r\n private _snapScrollToEndOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"snapScrollToEnd\" parameter must be of type `boolean`.');\r\n return DEFAULT_SNAP_SCROLLTO_END;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Determines whether the scroll will be anchored to the утв of the list. Default value is \"true\".\r\n * That is, if snapScrollToStart and snapScrollToEnd are enabled, the list will initially snap \r\n * to the beginning; if you move the scroll bar to the end, the list will snap to the end. \r\n * If snapScrollToStart is disabled and snapScrollToEnd is enabled, the list will snap to the end; \r\n * if you move the scroll bar to the beginning, the list will snap to the beginning. \r\n * If both snapScrollToStart and snapScrollToEnd are disabled, the list will never snap to the beginning or end.\r\n */\r\n snapScrollToEnd = input<boolean>(DEFAULT_SNAP_SCROLLTO_END, { ...this._snapScrollToEndOptions });\r\n\r\n private _snapScrollToBottomOptions = {\r\n transform: () => {\r\n throw Error('The stopSnappingScrollToEnd property is deprecated. Use the snapScrollToEnd property.');\r\n },\r\n } as any;\r\n\r\n /**\r\n * @deprecated\r\n * The stopSnappingScrollToEnd property is deprecated. Use the snapScrollToEnd property.\r\n */\r\n snapScrollToBottom = input<boolean>('deprecated' as any, { ...this._snapScrollToBottomOptions });\r\n\r\n private _scrollbarEnabledOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarEnabled\" parameter must be of type `boolean`.');\r\n return DEFAULT_SCROLLBAR_ENABLED;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Determines whether the scrollbar is shown or not. The default value is \"true\".\r\n */\r\n scrollbarEnabled = input<boolean>(DEFAULT_SCROLLBAR_ENABLED, { ...this._scrollbarEnabledOptions });\r\n\r\n private _scrollbarInteractiveOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarInteractive\" parameter must be of type `boolean`.');\r\n return DEFAULT_SCROLLBAR_INTERACTIVE;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Determines whether scrolling using the scrollbar will be possible. The default value is \"true\".\r\n */\r\n scrollbarInteractive = input<boolean>(DEFAULT_SCROLLBAR_INTERACTIVE, { ...this._scrollbarInteractiveOptions });\r\n\r\n private _scrollBehaviorOptions = {\r\n transform: (v: ScrollBehavior) => {\r\n const valid = validateString(v, true, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollBehavior\" parameter must be of type `boolean`.');\r\n return DEFAULT_SCROLL_BEHAVIOR;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Defines the scrolling behavior for any element on the page. The default value is \"smooth\".\r\n */\r\n scrollBehavior = input<ScrollBehavior>(DEFAULT_SCROLL_BEHAVIOR, { ...this._scrollBehaviorOptions });\r\n\r\n private _scrollingSettingsOptions = {\r\n transform: (v: IScrollingSettings): IScrollingSettings | null => {\r\n let valid = validateObject(v, true, true);\r\n if (valid && !!v) {\r\n const { frictionalForce, mass, maxDistance, maxDuration, speedScale, optimization } = v;\r\n valid = validateFloat(frictionalForce, true);\r\n if (!valid) {\r\n console.error('The \"frictionalForce\" parameter must be of type `number` or `undefined`.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n valid = validateFloat(mass, true);\r\n if (!valid) {\r\n console.error('The \"mass\" parameter must be of type `number` or `undefined`.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n valid = validateFloat(maxDistance, true);\r\n if (!valid) {\r\n console.error('The \"maxDistance\" parameter must be of type `number` or `undefined`.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n valid = validateFloat(maxDuration, true);\r\n if (!valid) {\r\n console.error('The \"maxDuration\" parameter must be of type `number` or `undefined`.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n valid = validateFloat(speedScale, true);\r\n if (!valid) {\r\n console.error('The \"speedScale\" parameter must be of type `number` or `undefined`.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n valid = validateBoolean(optimization, true);\r\n if (!valid) {\r\n console.error('The \"optimization\" parameter must be of type `boolean` or `undefined`.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n }\r\n if (!valid) {\r\n console.error('The \"scrollingSettings\" parameter must be of type `object` or null.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n return {\r\n frictionalForce: v.frictionalForce !== undefined && v.frictionalForce > 0 ? v.frictionalForce : DEFAULT_SCROLLING_SETTINGS.frictionalForce,\r\n mass: v.mass !== undefined && v.mass > 0 ? v.mass : DEFAULT_SCROLLING_SETTINGS.mass,\r\n maxDistance: v.maxDistance !== undefined && v.maxDistance > 0 ? v.maxDistance : DEFAULT_SCROLLING_SETTINGS.maxDistance,\r\n maxDuration: v.maxDuration !== undefined && v.maxDuration > 0 ? v.maxDuration : DEFAULT_SCROLLING_SETTINGS.maxDuration,\r\n speedScale: v.speedScale !== undefined && v.speedScale > 0 ? v.speedScale : DEFAULT_SCROLLING_SETTINGS.speedScale,\r\n optimization: v.optimization ?? DEFAULT_SCROLLING_SETTINGS.optimization,\r\n };\r\n },\r\n } as any;\r\n\r\n /**\r\n * Scrolling settings.\r\n * - frictionalForce - Frictional force. Default value is 0.035.\r\n * - mass - Mass. Default value is 0.005.\r\n * - maxDistance - Maximum scrolling distance. Default value is 12500.\r\n * - maxDuration - Maximum animation duration. Default value is 4000.\r\n * - speedScale - Speed scale. Default value is 15.\r\n * - optimization - Enables scrolling performance optimization. Default value is `true`.\r\n */\r\n scrollingSettings = input<IScrollingSettings>(DEFAULT_SCROLLING_SETTINGS, { ...this._scrollingSettingsOptions });\r\n\r\n\r\n private _animationParamsOptions = {\r\n transform: (v: IAnimationParams) => {\r\n const valid = validateObject(v, true, true);\r\n\r\n if (!valid) {\r\n console.error('The \"animationParams\" parameter must be of type `object`.');\r\n return DEFAULT_ANIMATION_PARAMS;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Animation parameters. The default value is \"{ scrollToItem: 50, navigateToItem: 150 }\".\r\n */\r\n animationParams = input<IAnimationParams>(DEFAULT_ANIMATION_PARAMS, { ...this._animationParamsOptions });\r\n\r\n private _overscrollEnabledOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"overscrollEnabled\" parameter must be of type `boolean`.');\r\n return DEFAULT_OVERSCROLL_ENABLED;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Determines whether the overscroll (re-scroll) feature will work. The default value is \"true\".\r\n */\r\n overscrollEnabled = input<boolean>(DEFAULT_OVERSCROLL_ENABLED, { ...this._overscrollEnabledOptions });\r\n\r\n private _enabledBufferOptimizationOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"enabledBufferOptimization\" parameter must be of type `boolean`.');\r\n return DEFAULT_ENABLED_BUFFER_OPTIMIZATION;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Experimental!\r\n * Enables buffer optimization.\r\n * Can only be used if items in the collection are not added or updated. Otherwise, artifacts in the form of twitching of the scroll area are possible.\r\n * Works only if the property dynamic = true\r\n */\r\n enabledBufferOptimization = input<boolean>(DEFAULT_ENABLED_BUFFER_OPTIMIZATION, { ...this._enabledBufferOptimizationOptions });\r\n\r\n private _itemRendererOptions = {\r\n transform: (v: TemplateRef<any>) => {\r\n let valid = validateObject(v);\r\n if (v && !(typeof v.elementRef === 'object' && typeof v.createEmbeddedView === 'function')) {\r\n valid = false;\r\n }\r\n\r\n if (!valid) {\r\n throw Error('The \"itemRenderer\" parameter must be of type `TemplateRef`.');\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Rendering element template.\r\n */\r\n itemRenderer = input.required<TemplateRef<any>>({ ...this._itemRendererOptions });\r\n\r\n private _itemRenderer = signal<TemplateRef<any> | undefined>(undefined);\r\n\r\n private _itemConfigMapOptions = {\r\n transform: (v: IVirtualListItemConfigMap) => {\r\n let valid = validateObject(v);\r\n if (valid) {\r\n if (v) {\r\n for (let id in v) {\r\n const item = v[id];\r\n if (!item ||\r\n !validateBoolean(item.collapsable, true) ||\r\n !validateBoolean(item.selectable, true) ||\r\n !(item.sticky === undefined || item.sticky === 0 || item.sticky === 1 || item.sticky === 2)\r\n ) {\r\n valid = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n if (!valid) {\r\n console.error('The \"itemConfigMap\" parameter must be of type `IVirtualListItemConfigMap`.');\r\n return {};\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Sets `sticky` position, `collapsable` and `selectable` for the list item element. If `sticky` position is greater than `0`, then `sticky` position is applied. \r\n * If the `sticky` value is greater than `0`, then the `sticky` position mode is enabled for the element. `1` - position start, `2` - position end.\r\n * Default value is `0`.\r\n * `selectable` determines whether an element can be selected or not. Default value is `true`.\r\n * `collapsable` determines whether an element with a `sticky` property greater than zero can collapse and\r\n * collapse elements in front that do not have a `sticky` property.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/models/item-config-map.model.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n itemConfigMap = input<IVirtualListItemConfigMap>({}, { ...this._itemConfigMapOptions });\r\n\r\n private _itemSizeOptions = {\r\n transform: (v: number) => {\r\n const valid = validateFloat(v);\r\n if (!valid) {\r\n console.error('The \"itemSize\" parameter must be of type `number` or `undefined`.');\r\n return DEFAULT_ITEM_SIZE;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * If direction = 'vertical', then the height of a typical element. If direction = 'horizontal', then the width of a typical element.\r\n * If the dynamicSize property is true, the items in the list can have different sizes, and you must specify the itemSize property \r\n * to adjust the sizes of the items in the unallocated area.\r\n */\r\n itemSize = input<number>(DEFAULT_ITEM_SIZE, { ...this._itemSizeOptions });\r\n\r\n private _dynamicSizeOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n if (!valid) {\r\n console.error('The \"dynamicSize\" parameter must be of type `boolean`.');\r\n return DEFAULT_DYNAMIC_SIZE;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * If true, items in the list may have different sizes, and the itemSize property must be specified to adjust\r\n * the sizes of items in the unallocated area.\r\n * If false then the items in the list have a fixed size specified by the itemSize property. The default value is true.\r\n */\r\n dynamicSize = input(DEFAULT_DYNAMIC_SIZE, { ...this._dynamicSizeOptions });\r\n\r\n private _directionOptions = {\r\n transform: (v: Direction) => {\r\n const valid = validateString(v) && (v === 'horizontal' || v === 'vertical');\r\n if (!valid) {\r\n console.error('The \"direction\" parameter must have the value `horizontal` or `vertical`.');\r\n return DEFAULT_DIRECTION;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Determines the direction in which elements are placed. Default value is \"vertical\".\r\n */\r\n direction = input<Direction>(DEFAULT_DIRECTION, { ...this._directionOptions });\r\n\r\n private _collectionModeOptions = {\r\n transform: (v: CollectionMode) => {\r\n const valid = validateString(v) && (v === 'normal' || v === 'lazy');\r\n if (!valid) {\r\n console.error('The \"direction\" parameter must have the value `normal` or `lazy`.');\r\n return DEFAULT_COLLECTION_MODE;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Determines the action modes for collection elements. Default value is \"normal\".\r\n */\r\n collectionMode = input<CollectionMode>(DEFAULT_COLLECTION_MODE, { ...this._collectionModeOptions });\r\n\r\n private _bufferSizeOptions = {\r\n transform: (v: number) => {\r\n const valid = validateInt(v);\r\n if (!valid) {\r\n console.error('The \"bufferSize\" parameter must be of type `number`.');\r\n return DEFAULT_BUFFER_SIZE;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Number of elements outside the scope of visibility. Default value is 2.\r\n */\r\n bufferSize = input<number>(DEFAULT_BUFFER_SIZE, { ...this._bufferSizeOptions });\r\n\r\n private _maxBufferSizeTransform = {\r\n transform: (v: number | undefined) => {\r\n let val = v;\r\n const valid = validateInt(v, true);\r\n if (!valid) {\r\n console.error('The \"maxBufferSize\" parameter must be of type `number`.');\r\n val = DEFAULT_MAX_BUFFER_SIZE;\r\n }\r\n\r\n const bufferSize = this.bufferSize();\r\n if (val === undefined || val <= bufferSize) {\r\n return bufferSize;\r\n }\r\n return val;\r\n }\r\n } as any;\r\n\r\n /**\r\n * Maximum number of elements outside the scope of visibility. Default value is 100.\r\n * If maxBufferSize is set to be greater than bufferSize, then adaptive buffer mode is enabled.\r\n * The greater the scroll size, the more elements are allocated for rendering.\r\n */\r\n maxBufferSize = input<number>(DEFAULT_MAX_BUFFER_SIZE, { ...this._maxBufferSizeTransform });\r\n\r\n private _snappingMethodOptions = {\r\n transform: (v: SnappingMethod) => {\r\n const valid = validateString(v) && (v === SnappingMethods.ADVANCED || v === SnappingMethods.STANDART);\r\n if (!valid) {\r\n console.error(`The \"snappingMethod\" parameter must have the value '${SnappingMethods.ADVANCED}' or '${SnappingMethods.STANDART}'.`);\r\n return DEFAULT_SNAPPING_METHOD;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Snapping method. Default value is 'standart'.\r\n * 'standart' - Classic group visualization.\r\n * 'advanced' - A mask is applied to the viewport area so that the background is displayed underneath the attached group.\r\n */\r\n snappingMethod = input<SnappingMethod>(DEFAULT_SNAPPING_METHOD, { ...this._snappingMethodOptions });\r\n\r\n private _methodForSelectingOptions = {\r\n transform: (v: MethodForSelecting) => {\r\n const valid = validateString(v) && (v === 'none' || v === 'select' || v === 'multi-select');\r\n if (!valid) {\r\n console.error('The \"methodForSelecting\" parameter must have the value `none`, `select` or `multi-select`.');\r\n return DEFAULT_SELECT_METHOD;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Method for selecting list items. Default value is 'none'.\r\n * 'select' - List items are selected one by one.\r\n * 'multi-select' - Multiple selection of list items.\r\n * 'none' - List items are not selectable.\r\n */\r\n methodForSelecting = input<MethodForSelecting>(DEFAULT_SELECT_METHOD, { ...this._methodForSelectingOptions });\r\n\r\n private _trackByOptions = {\r\n transform: (v: string) => {\r\n const valid = validateString(v);\r\n if (!valid) {\r\n console.error('The \"trackBy\" parameter must be of type `string`.');\r\n return TRACK_BY_PROPERTY_NAME;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * The name of the property by which tracking is performed\r\n */\r\n trackBy = input<string>(TRACK_BY_PROPERTY_NAME, { ...this._trackByOptions });\r\n\r\n private _screenReaderMessageOptions = {\r\n transform: (v: string) => {\r\n const valid = validateString(v);\r\n if (!valid) {\r\n console.error('The \"screenReaderMessage\" parameter must be of type `string`.');\r\n return DEFAULT_SCREEN_READER_MESSAGE;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Message for screen reader.\r\n * The message format is: \"some text $1 some text $2\",\r\n * where $1 is the number of the first element of the screen collection,\r\n * $2 is the number of the last element of the screen collection.\r\n */\r\n screenReaderMessage = input<string>(DEFAULT_SCREEN_READER_MESSAGE, { ...this._screenReaderMessageOptions });\r\n\r\n protected readonly screenReaderFormattedMessage = signal<string>(this.screenReaderMessage());\r\n\r\n private _langTextDir = {\r\n transform: (v: TextDirection) => {\r\n const valid = validateString(v);\r\n if (!valid) {\r\n console.error('The \"langTextDir\" parameter must be of type `string`.');\r\n return DEFAULT_LANG_TEXT_DIR;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * A string indicating the direction of text for the locale.\r\n * Can be either \"ltr\" (left-to-right) or \"rtl\" (right-to-left).\r\n */\r\n langTextDir = input<TextDirection>(DEFAULT_LANG_TEXT_DIR, { ...this._langTextDir });\r\n\r\n private _isNotSelecting = this.getIsNotSelecting();\r\n\r\n private _isSingleSelecting = this.getIsSingleSelecting();\r\n\r\n private _isMultiSelecting = this.getIsMultiSelecting();\r\n\r\n private _isSnappingMethodAdvanced: boolean = this.getIsSnappingMethodAdvanced();\r\n\r\n private _isVertical = this.getIsVertical();\r\n protected get isVertical() {\r\n return this._isVertical;\r\n }\r\n\r\n protected readonly focusedElement = signal<Id | null>(null);\r\n\r\n protected readonly classes = signal<{ [cName: string]: boolean }>({});\r\n\r\n private _actualItems = signal<IVirtualListCollection>([]);\r\n\r\n private _collapsedItemIds = signal<Array<Id>>([]);\r\n\r\n private _displayComponents: Array<ComponentRef<BaseVirtualListItemComponent>> = [];\r\n\r\n private _snappedDisplayComponents: Array<ComponentRef<BaseVirtualListItemComponent>> = [];\r\n\r\n private _bounds = signal<ISize | null>(null);\r\n protected get bounds() { return this._bounds; }\r\n\r\n private _totalSize = signal<number>(0);\r\n\r\n private _listBounds = signal<ISize | null>(null);\r\n\r\n private _scrollSize = signal<number>(0);\r\n\r\n private _isScrollStart = signal<boolean>(true);\r\n\r\n private _isScrollEnd = signal<boolean>(false);\r\n\r\n private _resizeSnappedComponentHandler = () => {\r\n const list = this._list(), scroller = this._scroller(), bounds = this._bounds(), snappedComponents = this._snappedDisplayComponents;\r\n if (list && scroller && snappedComponents.length > 0) {\r\n const isVertical = this._isVertical, listBounds = list.nativeElement.getBoundingClientRect();\r\n\r\n for (const comp of snappedComponents) {\r\n if (!!comp) {\r\n comp.instance.regularLength = `${isVertical ? listBounds.width : listBounds.height}${PX}`;\r\n }\r\n }\r\n\r\n const snappingMethod = this.snappingMethod();\r\n if (snappingMethod === SnappingMethods.ADVANCED) {\r\n const snappedComponent = snappedComponents?.[0].instance;\r\n if (!!snappedComponent) {\r\n const { width, height } = bounds ?? { width: 0, height: 0 }, langTextDir = this.langTextDir();\r\n\r\n snappedComponent.element.style.clipPath = `path(\"M 0 0 L 0 ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth} ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth} 0 Z\")`;\r\n\r\n const { width: sWidth, height: sHeight } = snappedComponent.getBounds() ?? { width: 0, height: 0 },\r\n scrollerElement = scroller.nativeElement, delta = snappedComponent.item?.measures.delta ?? 0,\r\n scrollBarSize = this.scrollbarThickness();\r\n\r\n let left: number, right: number, top: number, bottom: number;\r\n if (isVertical) {\r\n left = 0;\r\n right = width - scrollBarSize + 2;\r\n top = sHeight;\r\n bottom = height;\r\n if (langTextDir === TextDirections.RTL) {\r\n scrollerElement.style.clipPath = `path(\"M 0 0 L 0 ${height} L ${width} ${height} L ${width} ${top + delta} L ${scrollBarSize} ${top + delta} L ${scrollBarSize} 0 Z\")`;\r\n } else {\r\n scrollerElement.style.clipPath = `path(\"M 0 ${top + delta} L 0 ${height} L ${width} ${height} L ${width} 0 L ${right} 0 L ${right} ${top + delta} Z\")`;\r\n }\r\n } else {\r\n left = sWidth;\r\n right = width;\r\n top = 0;\r\n bottom = height - scrollBarSize;\r\n scrollerElement.style.clipPath = `path(\"M ${width} 0 L ${width} ${bottom} L 0 ${bottom} L 0 0 L ${width} 0 Z\")`;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n private _resizeSnappedObserver: ResizeObserver | null = null;\r\n\r\n private focusItem = (element: HTMLElement, position: number, align: FocusAlignment = FocusAlignments.CENTER,\r\n behavior: ScrollBehavior = BEHAVIOR_AUTO) => {\r\n if (!this._readyForShow) {\r\n return;\r\n }\r\n const scroller = this._scrollerComponent();\r\n if (!!scroller) {\r\n const { width, height } = this._bounds()!, { width: elementWidth, height: elementHeight } = element.getBoundingClientRect(),\r\n isVertical = this._isVertical,\r\n viewportSize = isVertical ? height : width,\r\n elementSize = isVertical ? elementHeight : elementWidth;\r\n let pos: number = Number.NaN;\r\n switch (align) {\r\n case FocusAlignments.START: {\r\n pos = position;\r\n break;\r\n }\r\n case FocusAlignments.CENTER: {\r\n pos = position - (viewportSize - elementSize) * .5;\r\n break;\r\n }\r\n case FocusAlignments.END: {\r\n pos = position - (viewportSize - elementSize);\r\n break;\r\n }\r\n case FocusAlignments.NONE:\r\n default: {\r\n break;\r\n }\r\n }\r\n if (!Number.isNaN(pos)) {\r\n const scrollWidth = scroller?.scrollWidth ?? 0, scrollHeight = scroller?.scrollHeight ?? 0;\r\n if (isVertical) {\r\n if (pos < 0) {\r\n pos = 0;\r\n }\r\n if (pos > scrollHeight) {\r\n pos = scrollHeight;\r\n }\r\n } else {\r\n if (pos < 0) {\r\n pos = 0;\r\n }\r\n if (pos > scrollWidth) {\r\n pos = scrollWidth;\r\n }\r\n }\r\n\r\n this._trackBox.preventScrollSnapping(true);\r\n const params: IScrollToParams = {\r\n [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: pos, behavior,\r\n fireUpdate: true, blending: true, userAction: true, duration: this.animationParams().navigateToItem,\r\n };\r\n scroller.refresh(false);\r\n scroller.scrollTo(params);\r\n }\r\n }\r\n }\r\n\r\n private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n /**\r\n * Base class of the element component\r\n */\r\n private _itemComponentClass: Component$1<BaseVirtualListItemComponent> = NgVirtualListItemComponent;\r\n protected get itemComponentClass() { return this._itemComponentClass; }\r\n\r\n /**\r\n * Base class trackBox\r\n */\r\n private _trackBoxClass: Component$1<TrackBox> = TrackBox;\r\n\r\n /**\r\n * Dictionary of element sizes by their id\r\n */\r\n private _trackBox: TrackBox = new this._trackBoxClass(this.trackBy());\r\n\r\n private _$update = new Subject<string>();\r\n protected readonly $update = this._$update.asObservable();\r\n\r\n private _$scrollTo = new Subject<IScrollParams>();\r\n protected $scrollTo = this._$scrollTo.asObservable();\r\n\r\n private _$scrollToExecutor = new Subject<IScrollParams>();\r\n protected readonly $scrollToExecutor = this._$scrollToExecutor.asObservable();\r\n\r\n private _$scrollingTo = new BehaviorSubject<boolean>(false);\r\n\r\n private _$scroll = new Subject<IScrollEvent>();\r\n readonly $scroll = this._$scroll.asObservable();\r\n\r\n private _$tick = new Subject<void>();\r\n readonly $tick = this._$tick.asObservable();\r\n\r\n private _$fireUpdate = new Subject<boolean>();\r\n protected readonly $fireUpdate = this._$fireUpdate.asObservable();\r\n\r\n private _$fireUpdateNextFrame = new Subject<boolean>();\r\n protected readonly $fireUpdateNextFrame = this._$fireUpdateNextFrame.asObservable();\r\n\r\n private _$preventScrollSnapping = new BehaviorSubject<boolean>(false);\r\n protected readonly $preventScrollSnapping = this._$preventScrollSnapping.asObservable();\r\n\r\n private _destroyRef = inject(DestroyRef);\r\n\r\n private _updateId: number | undefined;\r\n\r\n private _scrollStateUpdateIndex: number = 0;\r\n\r\n private _readyForShow = false;\r\n\r\n private _cached = false;\r\n\r\n private _isLoading = false;\r\n\r\n protected get cachable() {\r\n return this._prerender()?.active ?? false;\r\n }\r\n\r\n protected get prerenderable() {\r\n return this.dynamicSize() && (this._trackBox?.isSnappedToEnd ?? false);\r\n }\r\n\r\n private _$viewInit = new BehaviorSubject<boolean>(false);\r\n private readonly $viewInit = this._$viewInit.asObservable();\r\n\r\n private _$destroy = new Subject<void>();\r\n private readonly $destroy = this._$destroy.asObservable();\r\n\r\n protected getScrollStateVersion(totalSize: number, scrollSize: number, cacheVersion: number): string {\r\n if (totalSize === -1) {\r\n return EMPTY_SCROLL_STATE_VERSION;\r\n }\r\n if (totalSize < scrollSize) {\r\n this._scrollStateUpdateIndex = this._scrollStateUpdateIndex === Number.MAX_SAFE_INTEGER ? 0 : this._scrollStateUpdateIndex + 1;\r\n }\r\n return `${this._scrollStateUpdateIndex}_${totalSize}_${scrollSize}_${cacheVersion}`;\r\n };\r\n\r\n constructor() {\r\n NgVirtualListComponent.__nextId = NgVirtualListComponent.__nextId + 1 === Number.MAX_SAFE_INTEGER\r\n ? 0 : NgVirtualListComponent.__nextId + 1;\r\n this._id = NgVirtualListComponent.__nextId;\r\n\r\n this._service.initialize(this._id, this._trackBox);\r\n\r\n this._service.animationParams = this.animationParams();\r\n\r\n this._service.$tick.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this._scrollerComponent()?.tick();\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$tick.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this.checkBoundsOfElements();\r\n this._scrollerComponent()?.tick();\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollerComponent = toObservable(this._scrollerComponent),\r\n $resizeViewport = $scrollerComponent.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(scroller => scroller!.$resizeViewport),\r\n ),\r\n $resizeContent = $scrollerComponent.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(scroller => scroller!.$resizeContent),\r\n );\r\n\r\n $resizeViewport.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n tap(v => {\r\n this._bounds.set(v);\r\n this.onAfterResize(true);\r\n }),\r\n ).subscribe();\r\n\r\n $resizeContent.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n tap(v => {\r\n this._listBounds.set(v);\r\n this.onAfterResize();\r\n }),\r\n ).subscribe();\r\n\r\n const $trackBy = toObservable(this.trackBy);\r\n $trackBy.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.trackBy = v;\r\n }),\r\n ).subscribe();\r\n\r\n this._trackBox.displayComponents = this._displayComponents;\r\n\r\n let hasUserAction = false, hasScrollbarUserAction = false;\r\n\r\n this._scroller = computed(() => {\r\n return this._scrollerComponent()?.scrollViewport();\r\n });\r\n\r\n this._list = computed(() => {\r\n return this._scrollerComponent()?.scrollContent();\r\n });\r\n\r\n this._service.$focusItem.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap((params) => {\r\n const { element, position, align, behavior } = params;\r\n this.focusItem(element, position, align, behavior);\r\n }),\r\n ).subscribe();\r\n\r\n const $list = toObservable(this._list).pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n take(1),\r\n );\r\n\r\n const preventKeyboardEvent = (event: KeyboardEvent, isVertical: boolean) => {\r\n const scroller = this._scrollerComponent();\r\n if (!!scroller) {\r\n const scrollStartOffset = this.scrollStartOffset(), scrollable = scroller.scrollable ?? false,\r\n scrollSize = isVertical ? scroller.scrollTop : scroller.scrollLeft,\r\n scrollWeight = isVertical ? scroller.scrollHeight : scroller.scrollWidth;\r\n if (scrollable || scrollSize <= scrollStartOffset || scrollSize >= scrollWeight) {\r\n if (!!event && event.cancelable) {\r\n event.stopImmediatePropagation();\r\n event.preventDefault();\r\n }\r\n }\r\n }\r\n };\r\n\r\n $list.pipe(\r\n takeUntilDestroyed(),\r\n filter(element => !!element),\r\n switchMap(element => {\r\n return fromEvent<KeyboardEvent>(element, EVENT_KEY_DOWN).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(e => {\r\n switch (e.key) {\r\n case KEY_ARR_LEFT:\r\n if (!this.isVertical) {\r\n preventKeyboardEvent(e, this.isVertical);\r\n }\r\n break;\r\n case KEY_ARR_UP:\r\n if (this.isVertical) {\r\n preventKeyboardEvent(e, this.isVertical);\r\n }\r\n break;\r\n case KEY_ARR_RIGHT:\r\n if (!this.isVertical) {\r\n preventKeyboardEvent(e, this.isVertical);\r\n }\r\n break;\r\n case KEY_ARR_DOWN:\r\n if (this.isVertical) {\r\n preventKeyboardEvent(e, this.isVertical);\r\n }\r\n break;\r\n }\r\n return of(null);\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollbarThickness = toObservable(this.scrollbarThickness);\r\n $scrollbarThickness.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n tap(scrollbarThickness => {\r\n this._service.scrollBarSize = scrollbarThickness;\r\n }),\r\n ).subscribe();\r\n\r\n this.$fireUpdateNextFrame.pipe(\r\n takeUntilDestroyed(),\r\n debounceTime(0),\r\n tap(userAction => {\r\n this._$fireUpdate.next(userAction);\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollToItem = this.$scrollTo.pipe(takeUntilDestroyed()),\r\n $mouseDown = fromEvent(this._elementRef.nativeElement, MOUSE_DOWN).pipe(takeUntilDestroyed()),\r\n $touchStart = fromEvent(this._elementRef.nativeElement, TOUCH_START).pipe(takeUntilDestroyed());\r\n\r\n fromEvent<KeyboardEvent>(document, KEY_DOWN).pipe(\r\n takeUntilDestroyed(),\r\n filter(e => e.key === KEY_TAB),\r\n switchMap(e => {\r\n return fromEvent(this._elementRef.nativeElement, FOCUS).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n delay(0),\r\n takeUntil($scrollToItem),\r\n takeUntil($mouseDown),\r\n takeUntil($touchStart),\r\n tap(e => {\r\n this._service.focusFirstElement();\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$scrollToStart.pipe(\r\n takeUntilDestroyed(),\r\n tap(options => {\r\n this.scrollToStart(null, options);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$scrollTo.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n tap(params => {\r\n const { id, cb, options } = params!;\r\n this.scrollTo(id, cb, options);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$scrollToEnd.pipe(\r\n takeUntilDestroyed(),\r\n tap(options => {\r\n this.scrollToEnd(null, options);\r\n }),\r\n ).subscribe();\r\n\r\n effect(() => {\r\n const dir = this.langTextDir() as TextDirection;\r\n this._service.langTextDir = dir;\r\n }, { allowSignalWrites: true });\r\n\r\n effect(() => {\r\n const dist = this.clickDistance();\r\n this._service.clickDistance = dist;\r\n });\r\n\r\n const $viewInit = this.$viewInit,\r\n $prerenderContainer = toObservable(this._prerender);\r\n\r\n const $prerender = $viewInit.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(v => {\r\n return $prerenderContainer.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(v => !!v),\r\n switchMap(v => v!.$render),\r\n );\r\n }),\r\n );\r\n\r\n const $fireUpdate = this.$fireUpdate;\r\n $fireUpdate.pipe(\r\n takeUntilDestroyed(),\r\n tap(userAction => {\r\n hasUserAction = userAction;\r\n }),\r\n ).subscribe();\r\n\r\n const $update = this.$update,\r\n renderStabilizer = (options?: IRenderStabilizerOptions) => {\r\n let renderStabilizerPrevScrollStateVersion = EMPTY_SCROLL_STATE_VERSION,\r\n renderStabilizerUpdateIterations = 0;\r\n const prepareIterations = options?.prepareIterations ?? PREPARE_ITERATIONS,\r\n prepareReupdateLength = options?.prepareReupdateLength ?? PREPARATION_REUPDATE_LENGTH;\r\n return of(null).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(() => {\r\n renderStabilizerPrevScrollStateVersion = EMPTY_SCROLL_STATE_VERSION;\r\n renderStabilizerUpdateIterations = 0;\r\n this._cached = false;\r\n return $update.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n debounceTime(0),\r\n switchMap((v) => {\r\n if (((renderStabilizerPrevScrollStateVersion === EMPTY_SCROLL_STATE_VERSION) || (renderStabilizerPrevScrollStateVersion !== v)) &&\r\n (renderStabilizerUpdateIterations < prepareIterations)) {\r\n if (v !== EMPTY_SCROLL_STATE_VERSION) {\r\n renderStabilizerPrevScrollStateVersion = v;\r\n }\r\n this._$fireUpdate.next(false);\r\n return of(false);\r\n }\r\n if (renderStabilizerPrevScrollStateVersion === v) {\r\n if (renderStabilizerUpdateIterations < prepareReupdateLength) {\r\n renderStabilizerUpdateIterations++;\r\n this._$fireUpdate.next(false);\r\n return of(false);\r\n }\r\n }\r\n renderStabilizerPrevScrollStateVersion = v;\r\n return of(true);\r\n }),\r\n filter(v => !!v),\r\n distinctUntilChanged(),\r\n )\r\n }),\r\n )\r\n };\r\n const $initialRenderStabilizer = renderStabilizer({\r\n prepareIterations: PREPARE_ITERATIONS,\r\n prepareReupdateLength: PREPARATION_REUPDATE_LENGTH,\r\n }),\r\n $updateItemsRenderStabilizer = renderStabilizer({\r\n prepareIterations: PREPARE_ITERATIONS_FOR_UPDATE_ITEMS,\r\n prepareReupdateLength: PREPARATION_REUPDATE_LENGTH_FOR_UPDATE_ITEMS,\r\n }),\r\n $chunkLoadingRenderStabilizer = renderStabilizer({\r\n prepareIterations: PREPARE_ITERATIONS_FOR_UPDATE_ITEMS,\r\n prepareReupdateLength: PREPARATION_REUPDATE_LENGTH_FOR_UPDATE_ITEMS,\r\n }),\r\n $collapseItemsRenderStabilizer = renderStabilizer({\r\n prepareIterations: PREPARE_ITERATIONS_FOR_COLLAPSE_ITEMS,\r\n prepareReupdateLength: PREPARATION_REUPDATE_LENGTH_FOR_COLLAPSE_ITEMS,\r\n }),\r\n $items = toObservable(this.items),\r\n $dynamicSize = toObservable(this.dynamicSize),\r\n $snapScrollToStart = toObservable(this.snapScrollToStart),\r\n $snapScrollToEnd = toObservable(this.snapScrollToEnd),\r\n $waitForPreparation = toObservable(this.waitForPreparation);\r\n\r\n combineLatest([$viewInit, $prerenderContainer, $dynamicSize, $snapScrollToStart, $snapScrollToEnd, $waitForPreparation]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n distinctUntilChanged(),\r\n filter(([init, prerenderContainer]) => !!init && !!prerenderContainer),\r\n debounceTime(0),\r\n switchMap(([, prerenderContainer, dynamicSize, snapScrollToStart, snapScrollToEnd, waitForPreparation]) => {\r\n if (!!dynamicSize && !snapScrollToStart && !!snapScrollToEnd && !!waitForPreparation) {\r\n return $items.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n distinctUntilChanged((p, c) => {\r\n const pLength = p?.length ?? 0, cLength = c?.length ?? 0;\r\n return !((cLength > 0) || (pLength !== cLength && (pLength === 0 || cLength === 0)));\r\n }),\r\n tap(items => {\r\n this._trackBox.resetCollection(items, this.itemSize());\r\n }),\r\n switchMap(i => of((i ?? []).length > 0)),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n if (!v) {\r\n this.cacheClean();\r\n this.cleanup();\r\n this._readyForShow = false;\r\n if (!snapScrollToStart && snapScrollToEnd) {\r\n this._trackBox.isScrollEnd = true;\r\n }\r\n const scrollerComponent = this._scrollerComponent();\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = false;\r\n scrollerComponent.stopScrolling();\r\n }\r\n this.classes.set({ prepared: true });\r\n this._$show.next(true);\r\n } else {\r\n this._trackBox.isScrollEnd = true;\r\n const waitForPreparation = this.waitForPreparation();\r\n if (waitForPreparation) {\r\n if (this.prerenderable) {\r\n this._cached = false;\r\n prerenderContainer!.on(this.items());\r\n }\r\n }\r\n this.classes.set({ prepared: false });\r\n this._$show.next(false);\r\n }\r\n }),\r\n switchMap(v => {\r\n if (!v) {\r\n if (this.prerenderable) {\r\n prerenderContainer!.off();\r\n }\r\n return of(false);\r\n }\r\n const waitForPreparation = this.waitForPreparation();\r\n if (waitForPreparation) {\r\n this._trackBox.isScrollEnd = true;\r\n if (this.prerenderable) {\r\n this._cached = false;\r\n prerenderContainer!.on(this.items());\r\n }\r\n return $initialRenderStabilizer.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n take(1),\r\n tap(() => {\r\n this._trackBox.isScrollEnd = true;\r\n if (this.prerenderable) {\r\n prerenderContainer!.off();\r\n }\r\n this._readyForShow = true;\r\n const scrollerComponent = this._scrollerComponent();\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = true;\r\n }\r\n this.classes.set({ prepared: true });\r\n this._$show.next(true);\r\n }),\r\n );\r\n }\r\n if (this.prerenderable) {\r\n prerenderContainer!.off();\r\n }\r\n this._readyForShow = true;\r\n if (!snapScrollToStart && snapScrollToEnd) {\r\n this._trackBox.isScrollEnd = true;\r\n }\r\n const scrollerComponent = this._scrollerComponent();\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = true;\r\n }\r\n this.classes.set({ prepared: true });\r\n this._$show.next(true);\r\n return of(false);\r\n }),\r\n );\r\n } else {\r\n prerenderContainer!.off();\r\n return $items.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(items => {\r\n if (!items || items.length === 0) {\r\n this.cacheClean();\r\n const scrollerComponent = this._scrollerComponent();\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = false;\r\n }\r\n this.classes.set({ prepared: false });\r\n this._$show.next(false);\r\n }\r\n this._trackBox.resetCollection(items, this.itemSize());\r\n }),\r\n switchMap(i => of((i ?? []).length > 0)),\r\n distinctUntilChanged(),\r\n filter(v => !!v),\r\n tap(() => {\r\n this._readyForShow = true;\r\n if (snapScrollToStart) {\r\n this._trackBox.isScrollStart = true;\r\n } else if (snapScrollToEnd) {\r\n this._trackBox.isScrollEnd = true;\r\n }\r\n const scrollerComponent = this._scrollerComponent();\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = true;\r\n }\r\n this.classes.set({ prepared: true });\r\n this._$show.next(true);\r\n this._$fireUpdate.next(false);\r\n }),\r\n );\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $items.pipe(\r\n map(v => v?.length > 0),\r\n distinctUntilChanged(),\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(v => !!v),\r\n tap(() => {\r\n this._cached = false;\r\n }),\r\n switchMap(() => {\r\n return $prerender.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n debounceTime(0),\r\n take(1),\r\n tap(cache => {\r\n if (!this._readyForShow) {\r\n this._trackBox.refreshCache(cache);\r\n this._cached = true;\r\n this._$fireUpdate.next(true);\r\n }\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$focusedId.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this.focusedElement.set(v ?? null);\r\n }),\r\n ).subscribe();\r\n\r\n $list.pipe(\r\n takeUntilDestroyed(),\r\n filter(element => !!element),\r\n tap(element => {\r\n this._service.listElement = element;\r\n }),\r\n ).subscribe();\r\n\r\n const $defaultItemValue = toObservable(this.defaultItemValue),\r\n $selectByClick = toObservable(this.selectByClick),\r\n $collapseByClick = toObservable(this.collapseByClick),\r\n $isScrollStart = toObservable(this._isScrollStart),\r\n $isScrollFinished = toObservable(this._isScrollEnd),\r\n $scrollStartOffset = toObservable(this.scrollStartOffset),\r\n $scrollEndOffset = toObservable(this.scrollEndOffset),\r\n $isVertical = toObservable(this.direction).pipe(\r\n map(v => this.getIsVertical(v || DEFAULT_DIRECTION)),\r\n );\r\n\r\n $snapScrollToStart.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.snapScrollToStart = v;\r\n }),\r\n ).subscribe();\r\n\r\n $snapScrollToEnd.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.snapScrollToEnd = v;\r\n }),\r\n ).subscribe();\r\n\r\n $isVertical.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.isVertical = v;\r\n }),\r\n ).subscribe();\r\n\r\n $dynamicSize.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.dynamic = v;\r\n }),\r\n ).subscribe();\r\n\r\n $defaultItemValue.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.defaultItemValue = v;\r\n }),\r\n ).subscribe();\r\n\r\n $scrollStartOffset.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._trackBox.scrollStartOffset = this._service.scrollStartOffset = v;\r\n }),\r\n ).subscribe();\r\n\r\n $scrollEndOffset.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._trackBox.scrollEndOffset = this._service.scrollEndOffset = v;\r\n }),\r\n ).subscribe();\r\n\r\n $isScrollStart.pipe(\r\n takeUntilDestroyed(),\r\n skip(1),\r\n distinctUntilChanged(),\r\n debounceTime(0),\r\n filter(v => !!v && this._readyForShow),\r\n tap(() => {\r\n if (this._scrollerComponent()?.scrollable) {\r\n this.onScrollReachStart.emit();\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $isScrollFinished.pipe(\r\n takeUntilDestroyed(),\r\n skip(1),\r\n distinctUntilChanged(),\r\n debounceTime(0),\r\n filter(v => !!v && this._readyForShow),\r\n tap(v => {\r\n if (this._scrollerComponent()?.scrollable) {\r\n this.onScrollReachEnd.emit();\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $selectByClick.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.selectByClick = v;\r\n }),\r\n ).subscribe();\r\n\r\n $collapseByClick.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.collapseByClick = v;\r\n }),\r\n ).subscribe();\r\n\r\n $trackBy.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._trackBox.trackingPropertyName = v;\r\n }),\r\n ).subscribe();\r\n\r\n const $bounds = toObservable(this._bounds).pipe(\r\n filter(b => !!b),\r\n ),\r\n $listBounds = toObservable(this._listBounds).pipe(\r\n filter(b => !!b),\r\n ), $scrollSize = toObservable(this._scrollSize),\r\n $itemSize = toObservable(this.itemSize).pipe(\r\n map(v => v <= 0 ? DEFAULT_ITEM_SIZE : v),\r\n ),\r\n $bufferSize = toObservable(this.bufferSize).pipe(\r\n map(v => v < 0 ? DEFAULT_BUFFER_SIZE : v),\r\n ),\r\n $maxBufferSize = toObservable(this.maxBufferSize).pipe(\r\n map(v => v < 0 ? DEFAULT_BUFFER_SIZE : v),\r\n ),\r\n $itemConfigMap = toObservable(this.itemConfigMap).pipe(\r\n map(v => !v ? {} : v),\r\n ),\r\n $snap = toObservable(this.snap),\r\n $isLazy = toObservable(this.collectionMode).pipe(\r\n map(v => this.getIsLazy(v || DEFAULT_COLLECTION_MODE)),\r\n ),\r\n $enabledBufferOptimization = toObservable(this.enabledBufferOptimization),\r\n $snappingMethod = toObservable(this.snappingMethod).pipe(\r\n map(v => this.getIsSnappingMethodAdvanced(v || DEFAULT_SNAPPING_METHOD)),\r\n ),\r\n $methodForSelecting = toObservable(this.methodForSelecting),\r\n $selectedIds = toObservable(this.selectedIds),\r\n $collapsedIds = toObservable(this.collapsedIds).pipe(\r\n map(v => Array.isArray(v) ? v : []),\r\n ),\r\n $collapsedItemIds = toObservable(this._collapsedItemIds).pipe(\r\n map(v => Array.isArray(v) ? v : []),\r\n ),\r\n $actualItems = toObservable(this._actualItems).pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n debounceTime(0),\r\n ),\r\n $screenReaderMessage = toObservable(this.screenReaderMessage),\r\n $displayItems = this._service.$displayItems,\r\n $cacheVersion = this._service.$cacheVersion;\r\n\r\n combineLatest([$displayItems, $screenReaderMessage, $isVertical, $scrollSize, $bounds]).pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n debounceTime(100),\r\n takeUntilDestroyed(),\r\n tap(([items, screenReaderMessage, isVertical, scrollSize, bounds]) => {\r\n this.screenReaderFormattedMessage.set(\r\n formatScreenReaderMessage(items, screenReaderMessage, scrollSize, isVertical, bounds!)\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n $isLazy.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._trackBox.isLazy = v;\r\n }),\r\n ).subscribe();\r\n\r\n const $itemsComposition = $items.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n switchMap(items => {\r\n return combineLatest([$collapsedItemIds, $itemConfigMap, $trackBy]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n debounceTime(0),\r\n switchMap(([collapsedIds, itemConfigMap, trackBy]) => {\r\n return of({ items, collapsedIds, itemConfigMap, trackBy });\r\n }),\r\n );\r\n }),\r\n );\r\n\r\n $itemsComposition.pipe(\r\n takeUntilDestroyed(),\r\n switchMap(({ items, collapsedIds, itemConfigMap, trackBy }) => {\r\n if (items.length === 0 || !this._readyForShow || !(this.cachable && !this._cached &&\r\n !this._trackBox.isSnappedToStart && this._trackBox.isSnappedToEnd)) {\r\n return of({ items, collapsedIds, itemConfigMap, trackBy });\r\n }\r\n return $updateItemsRenderStabilizer.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n take(1),\r\n debounceTime(0),\r\n switchMap(() => {\r\n return of({ items, collapsedIds, itemConfigMap, trackBy });\r\n }),\r\n );\r\n }),\r\n tap(({ items, collapsedIds, itemConfigMap, trackBy }) => {\r\n const hiddenItems = new CMap<Id, boolean>();\r\n\r\n let isCollapsed = false;\r\n for (let i = 0, l = items.length; i < l; i++) {\r\n const item = items[i], id = item[trackBy], group = (itemConfigMap[id]?.sticky ?? 0) > 0, collapsed = collapsedIds.includes(id);\r\n if (group) {\r\n isCollapsed = collapsed;\r\n } else {\r\n if (isCollapsed) {\r\n hiddenItems.set(id, true);\r\n }\r\n }\r\n }\r\n\r\n const actualItems: IVirtualListCollection = [];\r\n for (let i = 0, l = items.length; i < l; i++) {\r\n const item = items[i], id = item[trackBy];\r\n if (hiddenItems.has(id)) {\r\n continue;\r\n }\r\n actualItems.push(item);\r\n }\r\n\r\n this._actualItems.set(actualItems);\r\n }),\r\n ).subscribe();\r\n\r\n $isVertical.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._isVertical = v;\r\n const el: HTMLElement = this._elementRef.nativeElement;\r\n toggleClassName(el, v ? CLASS_LIST_VERTICAL : CLASS_LIST_HORIZONTAL, v ? CLASS_LIST_HORIZONTAL : CLASS_LIST_VERTICAL);\r\n }),\r\n ).subscribe();\r\n\r\n $snappingMethod.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._isSnappingMethodAdvanced = this._trackBox.isSnappingMethodAdvanced = v;\r\n }),\r\n ).subscribe();\r\n\r\n $methodForSelecting.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n const el = this._list()?.nativeElement;\r\n if (this.getIsMultiSelecting(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isMultiSelecting = true;\r\n this._isNotSelecting = this._isSingleSelecting = false;\r\n if (el) {\r\n el.role = ROLE_LIST_BOX;\r\n }\r\n this._service.methodOfSelecting = MethodsForSelectingTypes.MULTI_SELECT;\r\n } else if (this.getIsSingleSelecting(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isSingleSelecting = true;\r\n this._isNotSelecting = this._isMultiSelecting = false;\r\n if (el) {\r\n el.role = ROLE_LIST_BOX;\r\n }\r\n this._service.methodOfSelecting = MethodsForSelectingTypes.SELECT;\r\n } else if (this.getIsNotSelecting(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isNotSelecting = true;\r\n this._isSingleSelecting = this._isMultiSelecting = false;\r\n if (el) {\r\n el.role = ROLE_LIST;\r\n }\r\n this._service.methodOfSelecting = MethodsForSelectingTypes.NONE;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n const $preventScrollSnapping = this.$preventScrollSnapping;\r\n\r\n $preventScrollSnapping.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n tap(() => {\r\n if (this._readyForShow) {\r\n this._trackBox.isScrollEnd;\r\n this._trackBox.isScrollStart = this._trackBox.isScrollEnd = false;\r\n this._isScrollStart.set(false);\r\n this._isScrollEnd.set(false);\r\n const scroller = this._scrollerComponent();\r\n if (!!scroller) {\r\n this._trackBox.preventScrollSnapping(true);\r\n }\r\n }\r\n }),\r\n tap(() => {\r\n if (this._readyForShow) {\r\n this._$preventScrollSnapping.next(false);\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $collapsedItemIds.pipe(\r\n takeUntilDestroyed(),\r\n filter(() => this._readyForShow),\r\n switchMap(() => {\r\n return $collapseItemsRenderStabilizer.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n take(1),\r\n tap(() => {\r\n this._$fireUpdate.next(true);\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n let isChunkLoading = false;\r\n const $loading = toObservable(this.loading);\r\n $loading.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n skip(1),\r\n filter(v => !v),\r\n switchMap(() => {\r\n isChunkLoading = true;\r\n const scrollbar = this._scrollerComponent();\r\n if (!!scrollbar) {\r\n scrollbar.stopScrollbar();\r\n scrollbar.refreshScrollbar();\r\n }\r\n return $actualItems.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n take(1),\r\n tap(() => {\r\n this._$fireUpdateNextFrame.next(true);\r\n }),\r\n switchMap(() => $chunkLoadingRenderStabilizer.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n take(1),\r\n tap(() => {\r\n isChunkLoading = false;\r\n this._trackBox.resetCacheChunkInfo();\r\n const scrollbar = this._scrollerComponent();\r\n if (!!scrollbar) {\r\n scrollbar.stopScrollbar();\r\n scrollbar.refreshScrollbar();\r\n }\r\n }),\r\n )),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n $loading.pipe(\r\n takeUntilDestroyed(),\r\n skip(1),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n if (v) {\r\n this._isLoading = true;\r\n }\r\n }),\r\n filter(v => !v),\r\n tap(() => {\r\n if (this._readyForShow) {\r\n this._$preventScrollSnapping.next(true);\r\n }\r\n }),\r\n debounceTime(100),\r\n tap(() => {\r\n this._isLoading = false;\r\n }),\r\n ).subscribe();\r\n\r\n const update = (params: {\r\n snapScrollToStart: boolean, snapScrollToEnd: boolean; bounds: ISize; listBounds: ISize; scrollEndOffset: number;\r\n items: IVirtualListCollection<Object>; itemConfigMap: IVirtualListItemConfigMap; scrollSize: number; itemSize: number;\r\n bufferSize: number; maxBufferSize: number; snap: boolean; isVertical: boolean; dynamicSize: boolean;\r\n enabledBufferOptimization: boolean; cacheVersion: number; userAction: boolean; collapsedIds: Array<Id>;\r\n }, optimization: boolean = false, reupdate: boolean = false) => {\r\n const {\r\n snapScrollToStart, snapScrollToEnd, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize,\r\n bufferSize, maxBufferSize, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion, userAction, collapsedIds,\r\n } = params;\r\n const scroller = this._scrollerComponent();\r\n let totalSize = 0;\r\n if (scroller) {\r\n const collapsable = collapsedIds.length > 0, cachable = this.cachable, cached = this._cached, waitingCache = cachable && !cached,\r\n emitUpdate = !this._readyForShow || waitingCache || collapsable || isChunkLoading;\r\n if (this._readyForShow || (cachable && cached)) {\r\n const currentScrollSize = (isVertical ? scroller.scrollTop ?? 0 : scroller.scrollLeft ?? 0),\r\n fireUpdate = emitUpdate || reupdate || (!optimization && !userAction) || this._$scrollingTo.getValue();\r\n let actualScrollSize = !this._readyForShow && snapScrollToEnd ? (isVertical ? scroller.scrollHeight ?? 0 : scroller.scrollWidth ?? 0) :\r\n (isVertical ? scroller.scrollTop ?? 0 : scroller.scrollLeft ?? 0),\r\n displayItems: IRenderVirtualListCollection;\r\n\r\n const { width, height } = bounds, viewportSize = (isVertical ? height : width),\r\n opts: IUpdateCollectionOptions<IVirtualListItem, IVirtualListCollection> = {\r\n bounds: { width, height }, dynamicSize, isVertical, itemSize,\r\n bufferSize, maxBufferSize, scrollSize: actualScrollSize, snap, enabledBufferOptimization,\r\n };\r\n\r\n if (snapScrollToEnd && !this._readyForShow) {\r\n const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize1 } =\r\n this._trackBox.updateCollection(items, itemConfigMap, { ...opts, scrollSize: actualScrollSize });\r\n displayItems = calculatedDisplayItems;\r\n totalSize = calculatedTotalSize1;\r\n } else {\r\n const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize } = this._trackBox.updateCollection(items, itemConfigMap, opts);\r\n displayItems = calculatedDisplayItems;\r\n totalSize = calculatedTotalSize;\r\n }\r\n\r\n scroller.totalSize = totalSize;\r\n\r\n this._totalSize.set(totalSize);\r\n\r\n this._service.collection = displayItems;\r\n\r\n this.resetBoundsSize(isVertical, totalSize);\r\n\r\n this.createDisplayComponentsIfNeed(displayItems);\r\n\r\n this.tracking();\r\n\r\n this.snappingHandler();\r\n\r\n const delta = this._trackBox.delta,\r\n scrollPositionAfterUpdate = Math.round(actualScrollSize + delta),\r\n roundedScrollPositionAfterUpdate = Math.round(scrollPositionAfterUpdate),\r\n roundedMaxPositionAfterUpdate = Math.round(totalSize - viewportSize);\r\n\r\n if (this._isSnappingMethodAdvanced) {\r\n this.updateRegularRenderer();\r\n }\r\n\r\n scroller.delta = delta;\r\n\r\n if ((snapScrollToStart && this._trackBox.isSnappedToStart) ||\r\n (snapScrollToStart && currentScrollSize <= MIN_PIXELS_FOR_PREVENT_SNAPPING)) {\r\n if (currentScrollSize !== roundedScrollPositionAfterUpdate) {\r\n this._trackBox.clearDelta();\r\n\r\n if (this._readyForShow) {\r\n this.emitScrollEvent(true, false, userAction);\r\n }\r\n this._trackBox.isScrollEnd;\r\n const params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: 0, userAction,\r\n fireUpdate: true, behavior: BEHAVIOR_INSTANT,\r\n blending: false, duration: this.animationParams().scrollToItem,\r\n };\r\n scroller?.scrollTo?.(params);\r\n if (emitUpdate) {\r\n this._$update.next(this.getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft, cacheVersion));\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if ((snapScrollToEnd && this._trackBox.isSnappedToEnd) || (!snapScrollToStart && snapScrollToEnd && !scroller.scrollable) ||\r\n (scrollPositionAfterUpdate + MIN_PIXELS_FOR_PREVENT_SNAPPING >= roundedMaxPositionAfterUpdate) ||\r\n (roundedScrollPositionAfterUpdate >= scrollPositionAfterUpdate + MIN_PIXELS_FOR_PREVENT_SNAPPING)) {\r\n this._trackBox.clearDelta();\r\n\r\n if (!this._trackBox.isSnappedToEnd) {\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = true;\r\n }\r\n\r\n if (this._readyForShow) {\r\n this.emitScrollEvent(true, false, false);\r\n }\r\n const params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: roundedMaxPositionAfterUpdate,\r\n fireUpdate: true, behavior: BEHAVIOR_INSTANT, userAction: false,\r\n blending: false, duration: this.animationParams().scrollToItem,\r\n };\r\n scroller?.scrollTo?.(params);\r\n if (emitUpdate) {\r\n this._$update.next(this.getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft, cacheVersion));\r\n }\r\n return;\r\n }\r\n\r\n if (scrollSize !== scrollPositionAfterUpdate &&\r\n ((scrollPositionAfterUpdate >= 0 && scrollPositionAfterUpdate < roundedMaxPositionAfterUpdate) ||\r\n (scrollSize !== roundedMaxPositionAfterUpdate || currentScrollSize !== scrollPositionAfterUpdate))) {\r\n this._trackBox.clearDelta();\r\n\r\n if (this._readyForShow) {\r\n this.emitScrollEvent(true, false, userAction);\r\n }\r\n const params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollPositionAfterUpdate, blending: true, userAction,\r\n fireUpdate, behavior: BEHAVIOR_INSTANT, duration: this.animationParams().scrollToItem,\r\n };\r\n scroller.scrollTo(params);\r\n if (emitUpdate) {\r\n this._$update.next(this.getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft, cacheVersion));\r\n }\r\n return;\r\n }\r\n }\r\n if (emitUpdate) {\r\n this._$update.next(this.getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft, cacheVersion));\r\n }\r\n }\r\n };\r\n\r\n let prevItems: IVirtualListCollection = [];\r\n const debouncedUpdate = debounce(update, 0, MAX_NUMBERS_OF_SKIPS_FOR_QUALITY_OPTIMIZATION_LVL1);\r\n $viewInit.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(() => {\r\n return combineLatest([$snapScrollToStart, $snapScrollToEnd, $bounds, $listBounds, $scrollEndOffset, $actualItems, $itemConfigMap, $scrollSize, $itemSize,\r\n $collapsedItemIds, $bufferSize, $maxBufferSize, $snap, $isVertical, $dynamicSize, $enabledBufferOptimization, $cacheVersion, this.$fireUpdate,\r\n ]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(([\r\n snapScrollToStart, snapScrollToEnd, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize,\r\n collapsedIds, bufferSize, maxBufferSize, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion,\r\n ]) => {\r\n let itemsChanged = false;\r\n if (prevItems !== items) {\r\n itemsChanged = true;\r\n prevItems = items;\r\n }\r\n const enabledOptimization = this.scrollingSettings()?.optimization ?? DEFAULT_SCROLLING_SETTINGS.optimization,\r\n scroller = this._scrollerComponent(), velocity = this._scrollerComponent()?.averageVelocity ?? 0,\r\n maxScrollSize = isVertical ? (scroller?.scrollHeight || 0) : (scroller?.scrollWidth ?? 0),\r\n isEdges = scrollSize === 0 || scrollSize === maxScrollSize, isScrolling = this._$scrollingTo.getValue(),\r\n useDebouncedUpdate = dynamicSize && !itemsChanged && hasUserAction && !isScrolling && (velocity > 0 && velocity < MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL1),\r\n rerenderOptimization = enabledOptimization && dynamicSize && !itemsChanged && (hasUserAction || hasScrollbarUserAction) && !isEdges && velocity > 0 &&\r\n (velocity > MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL2 || hasUserAction);\r\n if (enabledOptimization) {\r\n if (useDebouncedUpdate) {\r\n debouncedUpdate.execute({\r\n snapScrollToStart, snapScrollToEnd, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize, collapsedIds,\r\n bufferSize, maxBufferSize, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion, userAction: hasUserAction,\r\n }, rerenderOptimization, itemsChanged);\r\n return;\r\n }\r\n\r\n debouncedUpdate.dispose();\r\n }\r\n\r\n if (!isScrolling) {\r\n update({\r\n snapScrollToStart, snapScrollToEnd, bounds: bounds!, listBounds: listBounds!, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize, collapsedIds,\r\n bufferSize, maxBufferSize, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion, userAction: hasUserAction,\r\n }, rerenderOptimization, itemsChanged);\r\n }\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $scroller = toObservable(this._scroller).pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n take(1),\r\n ),\r\n $scrollerScroll = $scrollerComponent.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n take(1),\r\n switchMap(scroller => scroller!.$scroll),\r\n ),\r\n $scrollerScrollEnd = $scrollerComponent.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n take(1),\r\n switchMap(scroller => scroller!.$scrollEnd),\r\n ),\r\n $scrollbarScroll = $scrollerComponent.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n take(1),\r\n switchMap(scroller => scroller!.$scrollbarScroll),\r\n );\r\n\r\n const scrollHandler = (userAction: boolean = false) => {\r\n const scroller = this._scrollerComponent();\r\n if (!!scroller) {\r\n const isVertical = this._isVertical, scrollSize = (isVertical ? scroller.scrollTop : scroller.scrollLeft),\r\n actualScrollSize = scrollSize;\r\n\r\n if (this._readyForShow) {\r\n if (userAction) {\r\n this._$preventScrollSnapping.next(true);\r\n }\r\n }\r\n\r\n this._scrollSize.set(actualScrollSize);\r\n }\r\n };\r\n\r\n $scroller.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return $scrollbarScroll.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(userAction => {\r\n hasScrollbarUserAction = userAction;\r\n const scrollerEl = this._scroller()?.nativeElement, scrollerComponent = this._scrollerComponent();\r\n if (scrollerEl && scrollerComponent) {\r\n this.emitScrollEvent(false, this._readyForShow, hasUserAction);\r\n }\r\n if (this._readyForShow) {\r\n if (userAction) {\r\n if (this._trackBox.isSnappedToStart) {\r\n this._$preventScrollSnapping.next(true);\r\n }\r\n if (this._trackBox.isSnappedToEnd) {\r\n this._$preventScrollSnapping.next(true);\r\n }\r\n }\r\n }\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n $scroller.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return $scrollerScroll.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n );\r\n }),\r\n tap(userAction => {\r\n hasUserAction = userAction;\r\n const scrollerEl = this._scroller()?.nativeElement, scrollerComponent = this._scrollerComponent();\r\n if (scrollerEl && scrollerComponent) {\r\n this.emitScrollEvent(false, this._readyForShow, userAction);\r\n }\r\n scrollHandler(userAction);\r\n }),\r\n ).subscribe();\r\n\r\n $scroller.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return $scrollerScrollEnd.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n );\r\n }),\r\n tap(userAction => {\r\n hasUserAction = userAction;\r\n const scrollerEl = this._scroller()?.nativeElement, scrollerComponent = this._scrollerComponent();\r\n if (scrollerEl && scrollerComponent) {\r\n this.emitScrollEvent(true, this._readyForShow, userAction);\r\n }\r\n scrollHandler(userAction);\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollTo = this.$scrollTo,\r\n $scrollToExecutor = this.$scrollToExecutor;\r\n\r\n combineLatest([$scroller, $trackBy, $scrollTo]).pipe(\r\n filter(([scroller]) => scroller !== undefined),\r\n map(([scroller, trackBy, event]) => ({ scroller: scroller, trackBy, event })),\r\n tap(({ event }) => {\r\n this._$scrollingTo.next(true);\r\n this._$scrollToExecutor.next(event);\r\n }),\r\n ).subscribe();\r\n\r\n $scrollToExecutor.pipe(\r\n takeUntilDestroyed(),\r\n switchMap(event => {\r\n const trackBy = this.trackBy(), scrollerComponent = this._scrollerComponent(),\r\n {\r\n id, iteration = 0, blending = false,\r\n isLastIteration = false, scrollCalled = false, cb,\r\n } = event;\r\n const nextIteration = iteration + 1, finished = nextIteration >= MAX_SCROLL_TO_ITERATIONS, fireUpdate = false;\r\n\r\n if (!this._readyForShow) {\r\n return of([finished, { iteration: nextIteration, blending, scrollCalled, cb }]).pipe(delay(0));\r\n }\r\n\r\n debouncedUpdate.dispose();\r\n this._$preventScrollSnapping.next(true);\r\n\r\n if (scrollerComponent) {\r\n const items = this._actualItems();\r\n if (items && items.length) {\r\n const dynamicSize = this.dynamicSize(), itemSize = this.itemSize(), snapScrollToEnd = this.snapScrollToEnd();\r\n\r\n if (dynamicSize) {\r\n const { width, height } = this._bounds() || { width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE },\r\n itemConfigMap = this.itemConfigMap(), items = this._actualItems(), isVertical = this._isVertical,\r\n currentScrollSize = isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft,\r\n opts: IGetItemPositionOptions<IVirtualListItem, IVirtualListCollection> = {\r\n bounds: { width, height }, collection: items, dynamicSize, isVertical: this._isVertical, itemSize,\r\n bufferSize: this.bufferSize(), maxBufferSize: this.maxBufferSize(),\r\n scrollSize: (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),\r\n snap: this.snap(), fromItemId: id, enabledBufferOptimization: this.enabledBufferOptimization(),\r\n };\r\n\r\n let scrollSize = snapScrollToEnd && this._trackBox.isSnappedToEnd ?\r\n (isVertical ? scrollerComponent.scrollHeight : scrollerComponent.scrollWidth) :\r\n this._trackBox.getItemPosition(id, itemConfigMap, opts);\r\n\r\n if (scrollSize === -1) {\r\n return of([finished, { id, blending, iteration: nextIteration, scrollCalled, cb }]).pipe(delay(0));\r\n }\r\n\r\n this._trackBox.clearDelta();\r\n\r\n const { displayItems, totalSize } = this._trackBox.updateCollection(items, itemConfigMap, {\r\n ...opts, scrollSize, fromItemId: isLastIteration ? undefined : id,\r\n }), delta1 = this._trackBox.delta;\r\n\r\n scrollerComponent.totalSize = totalSize;\r\n\r\n this._service.collection = displayItems;\r\n\r\n let actualScrollSize = scrollSize + delta1;\r\n\r\n this.resetBoundsSize(isVertical, totalSize);\r\n\r\n this.createDisplayComponentsIfNeed(displayItems);\r\n\r\n this.tracking();\r\n\r\n this.snappingHandler();\r\n\r\n scrollSize = this._trackBox.getItemPosition(id, itemConfigMap, { ...opts, scrollSize: actualScrollSize, fromItemId: id });\r\n if (scrollSize === -1) {\r\n return of([finished, { id, blending, iteration: nextIteration, scrollCalled, cb }]).pipe(delay(0));\r\n }\r\n const notChanged = scrollSize === currentScrollSize;\r\n if (!notChanged && iteration < MAX_SCROLL_TO_ITERATIONS) {\r\n this._trackBox.clearDelta();\r\n const params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, behavior: BEHAVIOR_INSTANT as ScrollBehavior,\r\n fireUpdate, blending,\r\n };\r\n scrollerComponent?.scrollTo?.(params);\r\n return of([finished, {\r\n id, iteration: nextIteration, blending,\r\n isLastIteration: nextIteration < MAX_SCROLL_TO_ITERATIONS, scrollCalled, cb\r\n }]).pipe(delay(0));\r\n } else {\r\n this._scrollSize.set(actualScrollSize);\r\n return of([true, { id, blending, iteration: nextIteration, scrollCalled, cb }]).pipe(delay(0));\r\n }\r\n } else {\r\n const index = items.findIndex(item => item[trackBy] === id);\r\n if (index > -1) {\r\n const isVertical = this._isVertical,\r\n currentScrollSize = (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),\r\n scrollSize = index * this.itemSize();\r\n if (currentScrollSize !== scrollSize) {\r\n this._$preventScrollSnapping.next(true);\r\n const params: IScrollToParams = {\r\n [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, fireUpdate,\r\n behavior: BEHAVIOR_INSTANT as ScrollBehavior, blending,\r\n };\r\n scrollerComponent?.scrollTo?.(params);\r\n return of([true, { id, blending, iteration: nextIteration, scrollCalled, cb }]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return of([finished, { id, iteration: nextIteration, scrollCalled, cb }]);\r\n }),\r\n takeUntilDestroyed(),\r\n tap(([finished, params]) => {\r\n const scrollParams = params as IScrollParams & { scrollCalled: boolean; };\r\n if (!finished && !scrollParams?.scrollCalled) {\r\n this._$scrollToExecutor.next(params as IScrollParams);\r\n return;\r\n }\r\n\r\n if (this._readyForShow) {\r\n this._trackBox.preventScrollSnapping(true);\r\n }\r\n\r\n this._$scrollingTo.next(false);\r\n if (!this.dynamicSize()) {\r\n this._$fireUpdate.next(true);\r\n this._scrollerComponent()?.refresh(false, true);\r\n }\r\n this.emitScrollEvent(true, false, true);\r\n scrollParams?.cb?.();\r\n }),\r\n ).subscribe();\r\n\r\n const $itemRenderer = toObservable(this.itemRenderer);\r\n\r\n $itemRenderer.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n filter(v => !!v),\r\n tap(v => {\r\n this._itemRenderer.set(v);\r\n }),\r\n ).subscribe();\r\n\r\n $bounds.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n filter(v => !!v),\r\n tap(value => {\r\n const size: ISize = { width: value!.width, height: value!.height };\r\n this.onViewportChange.emit(objectAsReadonly(size));\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$itemClick.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this.onItemClick.emit(objectAsReadonly(v));\r\n }),\r\n ).subscribe();\r\n\r\n let isSelectedIdsFirstEmit = 0;\r\n\r\n this._service.$selectedIds.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n if (this._isSingleSelecting || (this._isMultiSelecting && isSelectedIdsFirstEmit >= 2)) {\r\n const curr = this.selectedIds();\r\n if ((this._isSingleSelecting && JSON.stringify(v) !== JSON.stringify(curr)) ||\r\n (isSelectedIdsFirstEmit === 2 && JSON.stringify(v) !== JSON.stringify(curr)) || isSelectedIdsFirstEmit > 2) {\r\n this.onSelect.emit(copyValueAsReadonly(v));\r\n }\r\n }\r\n if (isSelectedIdsFirstEmit < 3) {\r\n isSelectedIdsFirstEmit++;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $selectedIds.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._service.selectedIds = v;\r\n }),\r\n ).subscribe();\r\n\r\n let isCollapsedIdsFirstEmit = 0;\r\n\r\n this._service.$collapsedIds.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._collapsedItemIds.set(v);\r\n\r\n if (isCollapsedIdsFirstEmit >= 2) {\r\n const curr = this.collapsedIds();\r\n if ((isCollapsedIdsFirstEmit === 2 && JSON.stringify(v) !== JSON.stringify(curr)) || isCollapsedIdsFirstEmit > 2) {\r\n this.onCollapse.emit(copyValueAsReadonly(v));\r\n }\r\n }\r\n if (isCollapsedIdsFirstEmit < 3) {\r\n isCollapsedIdsFirstEmit++;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $collapsedIds.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._service.collapsedIds = v;\r\n }),\r\n ).subscribe();\r\n\r\n this.$destroy.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n debouncedUpdate.dispose();\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this._$viewInit.next(true);\r\n\r\n this._$fireUpdate.next(false);\r\n }\r\n\r\n private onAfterResize(update = false) {\r\n this.snappingHandler();\r\n\r\n if (this._isSnappingMethodAdvanced) {\r\n this.updateRegularRenderer();\r\n }\r\n\r\n if (this._readyForShow && update) {\r\n const scroller = this._scrollerComponent();\r\n if (!!scroller) {\r\n const updatebale = this._readyForShow;\r\n if (updatebale) {\r\n this._$fireUpdate.next(false);\r\n }\r\n scroller.refresh(updatebale, updatebale);\r\n }\r\n }\r\n }\r\n\r\n private checkBoundsOfElements() {\r\n const changed = this._trackBox.checkBoundsOfElements();\r\n if (changed) {\r\n const readyForShow = this._readyForShow,\r\n isScrolling = this._$scrollingTo.getValue();\r\n this._trackBox.changes(true, readyForShow && !isScrolling);\r\n }\r\n }\r\n\r\n private snappingHandler() {\r\n const scroller = this._scrollerComponent();\r\n if (!!scroller) {\r\n const isVertical = this.isVertical,\r\n maxScrollSize = Math.round(isVertical ? scroller.scrollHeight ?? 0 : scroller.scrollWidth ?? 0),\r\n scrollSize = isVertical ? scroller.scrollTop ?? 0 : scroller.scrollLeft ?? 0,\r\n actualScrollSize = Math.round(scrollSize);\r\n if (this._readyForShow && !this._isLoading) {\r\n if (maxScrollSize >= 0) {\r\n const isScrollStart = (actualScrollSize <= MIN_PIXELS_FOR_PREVENT_SNAPPING);\r\n if (isScrollStart) {\r\n this._isScrollStart.set(true);\r\n this._isScrollEnd.set(false);\r\n this._trackBox.isScrollStart = true;\r\n this._trackBox.isScrollEnd = false;\r\n } else {\r\n const isScrollEnd = (actualScrollSize >= (maxScrollSize - MIN_PIXELS_FOR_PREVENT_SNAPPING));\r\n this._isScrollStart.set(false);\r\n this._isScrollEnd.set(isScrollEnd);\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = isScrollEnd;\r\n }\r\n }\r\n } else if (!this._readyForShow) {\r\n const snapScrollToStart = this.snapScrollToStart(), snapScrollToEnd = this.snapScrollToEnd();\r\n if (!snapScrollToStart && snapScrollToEnd) {\r\n this._isScrollStart.set(false);\r\n this._isScrollEnd.set(true);\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = true;\r\n } else if (snapScrollToStart && snapScrollToEnd) {\r\n this._isScrollStart.set(true);\r\n this._isScrollEnd.set(false);\r\n this._trackBox.isScrollStart = true;\r\n this._trackBox.isScrollEnd = false;\r\n } else {\r\n this._isScrollStart.set(false);\r\n this._isScrollEnd.set(false);\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = false;\r\n }\r\n }\r\n }\r\n };\r\n\r\n private emitScrollEvent(isScrollEnd: boolean = false, update: boolean = true, userAction: boolean = false) {\r\n if (!this._readyForShow) {\r\n return;\r\n }\r\n const scrollerEl = this._scroller()?.nativeElement, scrollerComponent = this._scrollerComponent();\r\n if (scrollerEl && scrollerComponent) {\r\n const isVertical = this._isVertical, scrollSize = (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),\r\n maxScrollSize = (isVertical ? scrollerComponent.scrollHeight : scrollerComponent.scrollWidth),\r\n bounds = this._bounds() || { x: 0, y: 0, width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE },\r\n currentScrollSize = this._scrollSize();\r\n this._trackBox.deltaDirection = currentScrollSize > scrollSize ? -1 : currentScrollSize < scrollSize ? 1 : 0;\r\n const itemsRange = formatActualDisplayItems(this._service.displayItems, this.scrollStartOffset(), this.scrollEndOffset(),\r\n scrollSize, isVertical, bounds),\r\n event = new ScrollEvent({\r\n direction: this._trackBox.scrollDirection, container: scrollerEl,\r\n list: this._list()!.nativeElement, delta: this._trackBox.delta,\r\n deltaOfNewItems: this._trackBox.deltaOfNewItems, isVertical,\r\n scrollSize,\r\n itemsRange,\r\n isEnd: !scrollerComponent.scrollable || this._trackBox.isSnappedToEnd || (Math.round(scrollSize) === Math.round(maxScrollSize)),\r\n userAction,\r\n });\r\n if (update) {\r\n this._$scroll.next(event);\r\n }\r\n\r\n if (isScrollEnd) {\r\n this.onScrollEnd.emit(event);\r\n } else {\r\n this.onScroll.emit(event);\r\n }\r\n }\r\n }\r\n\r\n private getIsSnappingMethodAdvanced(m?: SnappingMethod) {\r\n const method = m || this.snappingMethod();\r\n return isSnappingMethodAdvenced(method);\r\n }\r\n\r\n private getIsNotSelecting(m?: MethodForSelecting) {\r\n const method = m || this.methodForSelecting();\r\n return isMethodForSelecting(method, MethodsForSelecting.NONE);\r\n }\r\n\r\n private getIsSingleSelecting(m?: MethodForSelecting) {\r\n const method = m || this.methodForSelecting();\r\n return isMethodForSelecting(method, MethodsForSelecting.SELECT);\r\n }\r\n\r\n private getIsMultiSelecting(m?: MethodForSelecting) {\r\n const method = m || this.methodForSelecting();\r\n return isMethodForSelecting(method, MethodsForSelecting.MULTI_SELECT);\r\n }\r\n\r\n private getIsVertical(d?: Direction) {\r\n const dir = d || this.direction();\r\n return isDirection(dir, Directions.VERTICAL);\r\n }\r\n\r\n private getIsLazy(m?: CollectionMode) {\r\n const mode = m || this.collectionMode();\r\n return isCollectionMode(mode, CollectionModes.LAZY);\r\n }\r\n\r\n private createDisplayComponentsIfNeed(displayItems: IRenderVirtualListCollection | null) {\r\n if (!displayItems || !this._listContainerRef) {\r\n this._trackBox.setDisplayObjectIndexMapById({});\r\n return;\r\n }\r\n\r\n if (this._isSnappingMethodAdvanced && this.snap()) {\r\n if (this._snappedDisplayComponents.length < MAX_REGULAR_SNAPED_COMPONENTS && this._snapContainerRef) {\r\n while (this._snappedDisplayComponents.length < MAX_REGULAR_SNAPED_COMPONENTS) {\r\n const comp = this._snapContainerRef.createComponent(this._itemComponentClass);\r\n comp.instance.renderer = this._itemRenderer();\r\n comp.instance.regular = true;\r\n this._snappedDisplayComponents.push(comp);\r\n this._trackBox.snappedDisplayComponents = this._snappedDisplayComponents;\r\n this._resizeSnappedObserver = new ResizeObserver(this._resizeSnappedComponentHandler);\r\n this._resizeSnappedObserver.observe(comp.instance.element);\r\n }\r\n }\r\n }\r\n\r\n this._trackBox.items = displayItems;\r\n\r\n const listContainerRef = this._listContainerRef;\r\n\r\n const maxLength = displayItems.length, components = this._displayComponents;\r\n\r\n if (!!listContainerRef) {\r\n const doMap: { [id: number]: number } = {};\r\n let i = 0;\r\n for (let l = components.length; i < l; i++) {\r\n const item = components[i];\r\n if (item) {\r\n const id = item.instance.id;\r\n item.instance.renderer = this._itemRenderer();\r\n doMap[id] = i;\r\n }\r\n }\r\n while (components.length < maxLength) {\r\n const comp = listContainerRef.createComponent(this._itemComponentClass);\r\n const id = comp.instance.id;\r\n comp.instance.renderer = this._itemRenderer();\r\n doMap[id] = i;\r\n components.push(comp);\r\n i++;\r\n }\r\n this._trackBox.setDisplayObjectIndexMapById(doMap);\r\n }\r\n }\r\n\r\n private updateRegularRenderer() {\r\n this._resizeSnappedComponentHandler();\r\n }\r\n\r\n /**\r\n * Tracking by id\r\n */\r\n private tracking() {\r\n this._trackBox.track();\r\n }\r\n\r\n private resetBoundsSize(isVertical: boolean, totalSize: number) {\r\n const l = this._list(), prop = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME,\r\n size = totalSize;\r\n if (l && parseInt(l.nativeElement.style[prop]) !== size) {\r\n l.nativeElement.style[prop] = `${size}${PX}`;\r\n }\r\n }\r\n\r\n /**\r\n * Returns the bounds of an element with a given id\r\n */\r\n getItemBounds(id: Id): ISize | null {\r\n return this._service.getItemBounds(id);\r\n }\r\n\r\n /**\r\n * Focus an list item by a given id.\r\n */\r\n focus(id: Id, align: FocusAlignment = FocusAlignments.NONE) {\r\n this._elementRef.nativeElement.focus();\r\n this._service.focusById(id, align, this.scrollBehavior());\r\n }\r\n\r\n /**\r\n * The method scrolls the list to the element with the given `id` and returns the value of the scrolled area.\r\n */\r\n scrollTo(id: Id, cb: (() => void) | null = null, options: IScrollOptions | null = null) {\r\n const behavior = options?.behavior ?? BEHAVIOR_INSTANT,\r\n blending = options?.blending ?? false,\r\n focused = options?.focused ?? true,\r\n iteration = options?.iteration ?? 0;\r\n validateId(id);\r\n validateScrollBehavior(behavior);\r\n validateIteration(iteration);\r\n const actualIteration = validateScrollIteration(iteration);\r\n this._elementRef.nativeElement.focus();\r\n if (!this._scrollerComponent()?.scrollable) {\r\n this.scrollToFinalize(id, focused, cb);\r\n return;\r\n }\r\n this._$scrollTo.next({\r\n id, behavior, blending, iteration: actualIteration, isLastIteration: actualIteration === MAX_SCROLL_TO_ITERATIONS, cb: () => {\r\n this.scrollToFinalize(id, focused, cb);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Scrolls the scroll area to the first item in the collection.\r\n */\r\n scrollToStart(cb: (() => void) | null = null, options: IScrollOptions | null = null) {\r\n const scroller = this._scrollerComponent();\r\n if (scroller) {\r\n scroller.stopScrolling();\r\n }\r\n const behavior = options?.behavior ?? BEHAVIOR_INSTANT,\r\n blending = options?.blending ?? false,\r\n focused = options?.focused ?? true,\r\n iteration = options?.iteration ?? 0;\r\n validateScrollBehavior(behavior);\r\n validateIteration(iteration);\r\n const trackBy = this.trackBy(), items = this.items(), firstItem = items.length > 0 ? items[0] ?? null : null, id = firstItem?.[trackBy] ?? null,\r\n actualIteration = validateScrollIteration(iteration);\r\n if (!!firstItem) {\r\n this._elementRef.nativeElement.focus();\r\n this._$scrollTo.next({\r\n id, behavior, blending, iteration: actualIteration, isLastIteration: actualIteration === MAX_SCROLL_TO_ITERATIONS, cb: () => {\r\n this._isScrollStart.set(true);\r\n this._trackBox.isScrollStart = true;\r\n this._trackBox.isScrollEnd = false;\r\n this._$fireUpdate.next(true);\r\n this.scrollToFinalize(id, focused, cb);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * @deprecated\r\n * The scrollToEndItem method is deprecated. Use the scrollToEnd method.\r\n */\r\n scrollToEndItem(cb?: () => void, options?: IScrollOptions) {\r\n throw Error('The scrollToEndItem method is deprecated. Use the scrollToEnd method.');\r\n }\r\n\r\n /**\r\n * Scrolls the list to the end of the content size.\r\n */\r\n scrollToEnd(cb: (() => void) | null = null, options: IScrollOptions | null = null) {\r\n const scroller = this._scrollerComponent();\r\n if (scroller) {\r\n scroller.stopScrolling();\r\n }\r\n const behavior = options?.behavior ?? BEHAVIOR_INSTANT,\r\n blending = options?.blending ?? false,\r\n focused = options?.focused ?? true,\r\n iteration = options?.iteration ?? 0;\r\n validateScrollBehavior(behavior);\r\n validateIteration(iteration);\r\n const trackBy = this.trackBy(), items = this.items(), latItem = items[items.length > 0 ? items.length - 1 : 0], id = latItem[trackBy],\r\n actualIteration = validateScrollIteration(iteration);\r\n this._elementRef.nativeElement.focus();\r\n if (!this._scrollerComponent()?.scrollable) {\r\n this.scrollToFinalize(id, focused, cb);\r\n return;\r\n }\r\n this._$scrollTo.next({\r\n id, behavior, blending, iteration: actualIteration, isLastIteration: actualIteration === MAX_SCROLL_TO_ITERATIONS, cb: () => {\r\n this._isScrollEnd.set(true);\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = true;\r\n this._$fireUpdate.next(true);\r\n this.scrollToFinalize(id, focused, cb);\r\n }\r\n });\r\n }\r\n\r\n private scrollToFinalize(id: Id, focused: boolean, cb: (() => void) | null) {\r\n if (focused) {\r\n const el = this._service.getFocusedElementById(id);\r\n if (!!el) {\r\n this._service.focus(el, FocusAlignments.NONE);\r\n }\r\n }\r\n if (typeof cb === 'function') {\r\n cb?.();\r\n }\r\n }\r\n\r\n protected cleanup() {\r\n const displayItems: IRenderVirtualListCollection = [];\r\n this._service.collection = displayItems;\r\n this.createDisplayComponentsIfNeed(displayItems);\r\n this.tracking();\r\n this.emitScrollEvent(true, false, false);\r\n }\r\n\r\n /**\r\n * Force clearing the cache.\r\n */\r\n protected cacheClean() {\r\n this._cached = false;\r\n if (this.dynamicSize()) {\r\n this._trackBox.cacheClean();\r\n }\r\n const prerenderContainer = this._prerender();\r\n if (!!prerenderContainer) {\r\n prerenderContainer.clear();\r\n prerenderContainer.off();\r\n }\r\n this._collapsedItemIds.set([]);\r\n this._isScrollStart.set(true);\r\n this._isScrollEnd.set(false);\r\n this._totalSize.set(0);\r\n this._scrollSize.set(0);\r\n const scrollerComponent = this._scrollerComponent();\r\n if (scrollerComponent) {\r\n scrollerComponent.reset();\r\n }\r\n }\r\n\r\n /**\r\n * @deprecated\r\n * The stopSnappingScrollToEnd method is deprecated. Use the preventSnapping method.\r\n */\r\n stopSnappingScrollToEnd() {\r\n throw Error('The stopSnappingScrollToEnd method is deprecated. Use the preventSnapping method.');\r\n }\r\n\r\n /**\r\n * Prevents the list from snapping to its start or end edge.\r\n */\r\n preventSnapping() {\r\n if (!this._readyForShow) {\r\n return;\r\n }\r\n const scroller = this._scrollerComponent();\r\n this._isScrollStart.set(false);\r\n this._isScrollEnd.set(false);\r\n this._trackBox.preventScrollSnapping(true);\r\n if (scroller) {\r\n scroller.stopScrolling();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.dispose();\r\n }\r\n\r\n private dispose() {\r\n this._$destroy.next();\r\n\r\n const updateId = this._updateId;\r\n if (updateId !== undefined) {\r\n cancelAnimationFrame(updateId);\r\n this._updateId = undefined;\r\n }\r\n\r\n if (!!this._trackBox) {\r\n this._trackBox.dispose();\r\n }\r\n\r\n if (!!this._resizeSnappedObserver) {\r\n this._resizeSnappedObserver.disconnect();\r\n }\r\n\r\n if (!!this._snappedDisplayComponents) {\r\n while (this._snappedDisplayComponents.length > 0) {\r\n const comp = this._displayComponents.shift();\r\n comp?.destroy();\r\n }\r\n }\r\n\r\n if (this._displayComponents) {\r\n while (this._displayComponents.length > 0) {\r\n const comp = this._displayComponents.shift();\r\n comp?.destroy();\r\n }\r\n }\r\n }\r\n}\r\n","<div aria-live=\"polite\" aria-atomic=\"true\" class=\"ngvl__screen-reader\">\r\n {{ screenReaderFormattedMessage() }}\r\n</div>\r\n\r\n<ng-prerender-container #prerender [bounds]=\"bounds()!\" [direction]=\"direction()\" [dynamic]=\"dynamicSize()\"\r\n [isVertical]=\"isVertical\" [itemSize]=\"itemSize()\" [trackBy]=\"trackBy()\" [itemRenderer]=\"itemRenderer()\"\r\n [startOffset]=\"scrollStartOffset()\" [endOffset]=\"scrollEndOffset()\" [scrollbarEnabled]=\"scroller.scrollbarShow()\"\r\n [enabled]=\"dynamicSize() && snapScrollToEnd()\" />\r\n\r\n@if (snap()) {\r\n <div localeSensitive [langTextDir]=\"langTextDir()\" #snappedContainer class=\"ngvl__snapped-container\"\r\n [ngClass]=\"classes()\">\r\n <div #snapped part=\"snapped-item\" class=\"ngvl__list-snapper\">\r\n <ng-container #snapRendererContainer></ng-container>\r\n </div>\r\n </div>\r\n}\r\n<ng-scroller #scroller class=\"ngvl__list-scroller\" [classes]=\"classes()\" [startOffset]=\"scrollStartOffset()\"\r\n [direction]=\"direction()\" [endOffset]=\"scrollEndOffset()\" [scrollbarThumbRenderer]=\"scrollbarThumbRenderer()\"\r\n [scrollbarThickness]=\"scrollbarThickness()\" [scrollbarThumbParams]=\"scrollbarThumbParams()\"\r\n [focusedElement]=\"focusedElement()\" [loading]=\"loading()\" [overscrollEnabled]=\"overscrollEnabled()\"\r\n [scrollbarEnabled]=\"scrollbarEnabled()\" [scrollbarInteractive]=\"scrollbarInteractive()\"\r\n [scrollbarMinSize]=\"scrollbarMinSize()\" [scrollBehavior]=\"scrollBehavior()\" [scrollingSettings]=\"scrollingSettings()\">\r\n <ng-container #renderersContainer></ng-container>\r\n</ng-scroller>","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { LocaleSensitiveDirective } from './locale-sensitive.directive';\r\n\r\n@NgModule({\r\n declarations: [LocaleSensitiveDirective],\r\n exports: [LocaleSensitiveDirective],\r\n imports: [CommonModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class LocaleSensitiveModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ItemClickDirective } from './item-click.directive';\r\n\r\n@NgModule({\r\n declarations: [ItemClickDirective],\r\n exports: [ItemClickDirective],\r\n imports: [CommonModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class ItemClickModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgVirtualListItemComponent } from './ng-virtual-list-item.component';\r\nimport { ItemClickModule } from '../../directives';\r\n\r\n@NgModule({\r\n declarations: [NgVirtualListItemComponent],\r\n exports: [NgVirtualListItemComponent],\r\n imports: [CommonModule, ItemClickModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgVirtualListItemModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgScrollBarComponent } from './ng-scroll-bar.component';\r\n\r\n@NgModule({\r\n declarations: [NgScrollBarComponent],\r\n exports: [NgScrollBarComponent],\r\n imports: [CommonModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgScrollBarModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgScrollerComponent } from './ng-scroller.component';\r\nimport { LocaleSensitiveModule } from '../../directives';\r\nimport { NgScrollBarModule } from '../ng-scroll-bar/ng-scroll-bar.module';\r\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\r\n\r\n@NgModule({\r\n declarations: [NgScrollerComponent],\r\n exports: [NgScrollerComponent],\r\n imports: [CommonModule, NgScrollBarModule, LocaleSensitiveModule, CdkScrollableModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgScrollerModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ItemClickModule } from '../../../../directives';\r\nimport { NgPrerenderVirtualListItemComponent } from './ng-prerender-list-item.component';\r\n\r\n@NgModule({\r\n declarations: [NgPrerenderVirtualListItemComponent],\r\n exports: [NgPrerenderVirtualListItemComponent],\r\n imports: [CommonModule, ItemClickModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgPrerenderVirtualListItemModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgPrerenderScrollerComponent } from './ng-prerender-scroller.component';\r\nimport { LocaleSensitiveModule } from '../../../../directives';\r\n\r\n@NgModule({\r\n declarations: [NgPrerenderScrollerComponent],\r\n exports: [NgPrerenderScrollerComponent],\r\n imports: [CommonModule, LocaleSensitiveModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgPrerenderScrollerModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgPrerenderVirtualListItemModule } from '../ng-prerender-list-item/ng-prerender-list-item.module';\r\nimport { NgPrerenderScrollerModule } from '../ng-prerender-scroller/ng-prerender-scroller.module';\r\nimport { NgPrerenderList } from './ng-prerender-list.component';\r\n\r\n@NgModule({\r\n declarations: [NgPrerenderList],\r\n exports: [NgPrerenderList],\r\n imports: [CommonModule, NgPrerenderVirtualListItemModule, NgPrerenderScrollerModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgPrerenderListModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgPrerenderContainer } from './ng-prerender-container.component';\r\nimport { NgPrerenderListModule } from './components/ng-prerender-list/ng-prerender-list.module';\r\n\r\n@NgModule({\r\n declarations: [NgPrerenderContainer],\r\n exports: [NgPrerenderContainer],\r\n imports: [CommonModule, NgPrerenderListModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgPrerenderContainerModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgVirtualListComponent } from './ng-virtual-list.component';\r\nimport { LocaleSensitiveModule } from './directives';\r\nimport { NgVirtualListItemModule } from './components/ng-list-item/ng-virtual-list-item.module';\r\nimport { NgScrollerModule } from './components/ng-scroller/ng-scroller.module';\r\nimport { NgPrerenderContainerModule } from './components/ng-prerender-container/ng-prerender-container.module';\r\n\r\n@NgModule({\r\n declarations: [NgVirtualListComponent],\r\n exports: [NgVirtualListComponent],\r\n imports: [CommonModule, NgVirtualListItemModule, NgScrollerModule, NgPrerenderContainerModule, LocaleSensitiveModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgVirtualListModule { }\r\n","/*\r\n * Public API Surface of ng-virtual-list\r\n */\r\nexport * from './lib/components/ng-scroll-bar/ng-scroll-bar-public.service';\r\nexport * from './lib/components/ng-scroll-bar/types/scrollbar-state';\r\nexport * from './lib/components/ng-scroll-bar/enums/scrollbar-states';\r\nexport * from './lib/components/ng-list-item/ng-virtual-list-item.component';\r\nexport * from './lib/ng-virtual-list-public.service';\r\nexport * from './lib/ng-virtual-list.service';\r\nexport * from './lib/ng-virtual-list.component';\r\nexport * from './lib/ng-virtual-list.module';\r\nexport * from './lib/interfaces';\r\nexport * from './lib/enums';\r\nexport * from './lib/models';\r\nexport * from './lib/types';\r\nexport * from './lib/utils';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["OPACITY_0","PX","ITEM_ID","BehaviorSubject","tap","switchMap","filter","i2.ItemClickDirective","ScrollerDirection","TOP","LEFT","INSTANT","SCROLL_EVENT","takeUntil","ScrollBox","i2.NgScrollBarComponent","i3.LocaleSensitiveDirective","i2.LocaleSensitiveDirective","i1.NgPrerenderScrollerComponent","i1.NgPrerenderList","i2.NgScrollerComponent","i3.NgPrerenderContainer","i4.LocaleSensitiveDirective"],"mappings":"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"}
1
+ {"version":3,"file":"ng-virtual-list.mjs","sources":["../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/enums/scrollbar-states.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.service.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar-public.service.ts","../../../projects/ng-virtual-list/src/lib/enums/alignments.ts","../../../projects/ng-virtual-list/src/lib/enums/collection-modes.ts","../../../projects/ng-virtual-list/src/lib/enums/directions.ts","../../../projects/ng-virtual-list/src/lib/enums/focus-alignments.ts","../../../projects/ng-virtual-list/src/lib/enums/collapsing-modes.ts","../../../projects/ng-virtual-list/src/lib/enums/selecting-modes.ts","../../../projects/ng-virtual-list/src/lib/enums/snap-to-item-aligns.ts","../../../projects/ng-virtual-list/src/lib/enums/snapping-methods.ts","../../../projects/ng-virtual-list/src/lib/enums/spreading-modes.ts","../../../projects/ng-virtual-list/src/lib/enums/text-directions.ts","../../../projects/ng-virtual-list/src/lib/const/index.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/utils/get-element-by-index.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/utils/create-display-id.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/utils/matrix-3d.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/const/index.ts","../../../projects/ng-virtual-list/src/lib/core/events/track-box-events.ts","../../../projects/ng-virtual-list/src/lib/enums/selecting-modes-types.ts","../../../projects/ng-virtual-list/src/lib/utils/validation.ts","../../../projects/ng-virtual-list/src/lib/utils/list-validators.ts","../../../projects/ng-virtual-list/src/lib/utils/get-selector-by-item-id.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list.service.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list-public.service.ts","../../../projects/ng-virtual-list/src/lib/utils/disposable-component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/base/base-virtual-list-item-component.ts","../../../projects/ng-virtual-list/src/lib/directives/virtual-click/virtual-click.directive.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/ng-virtual-list-item.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/ng-virtual-list-item.component.html","../../../projects/ng-virtual-list/src/lib/utils/debounce.ts","../../../projects/ng-virtual-list/src/lib/utils/toggle-class-name.ts","../../../projects/ng-virtual-list/src/lib/utils/scroll-event.ts","../../../projects/ng-virtual-list/src/lib/utils/event-emitter/event-emitter.ts","../../../projects/ng-virtual-list/src/lib/utils/cmap.ts","../../../projects/ng-virtual-list/src/lib/core/cache-map.ts","../../../projects/ng-virtual-list/src/lib/core/utils/get-service-id-prop.ts","../../../projects/ng-virtual-list/src/lib/core/tracker.ts","../../../projects/ng-virtual-list/src/lib/utils/buffer-interpolation.ts","../../../projects/ng-virtual-list/src/lib/utils/object.ts","../../../projects/ng-virtual-list/src/lib/core/const/index.ts","../../../projects/ng-virtual-list/src/lib/core/enums/item-display-methods.ts","../../../projects/ng-virtual-list/src/lib/core/track-box.ts","../../../projects/ng-virtual-list/src/lib/utils/snapping-method.ts","../../../projects/ng-virtual-list/src/lib/utils/is-direction.ts","../../../projects/ng-virtual-list/src/lib/utils/is-select-mode.ts","../../../projects/ng-virtual-list/src/lib/utils/is-collapse-mode.ts","../../../projects/ng-virtual-list/src/lib/utils/is-collection-mode.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/enums/scroller-direction.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/utils/scroll-box.ts","../../../projects/ng-virtual-list/src/lib/utils/animator/const/index.ts","../../../projects/ng-virtual-list/src/lib/utils/animator/ease.ts","../../../projects/ng-virtual-list/src/lib/utils/animator/animator.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/const/index.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/calculate-direction.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/enums/scroller-direction.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/scroll-box.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/matrix-3d.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/get-dir.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/base/base-scroll-view.component.ts","../../../projects/ng-virtual-list/src/lib/utils/is-persentage-value.ts","../../../projects/ng-virtual-list/src/lib/utils/parse-float-or-persentage-value.ts","../../../projects/ng-virtual-list/src/lib/utils/scrolling-direction.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/calculate-velocity.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/ng-scroll-view.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/const/index.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.component.html","../../../projects/ng-virtual-list/src/lib/directives/locale-sensitive/locale-sensitive.directive.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/ng-scroller.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/ng-scroller.component.html","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/events/index.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/core/prerender-track-box.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.html","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.component.html","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/ng-prerender-container.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/ng-prerender-container.component.html","../../../projects/ng-virtual-list/src/lib/utils/screen-reader-formatter.ts","../../../projects/ng-virtual-list/src/lib/utils/parse-arithmetic-expression.ts","../../../projects/ng-virtual-list/src/lib/utils/normalize-collection.ts","../../../projects/ng-virtual-list/src/lib/utils/is-spreading-mode.ts","../../../projects/ng-virtual-list/src/lib/utils/get-scroll-state-version.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list.component.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list.component.html","../../../projects/ng-virtual-list/src/lib/directives/locale-sensitive/locale-sensitive.module.ts","../../../projects/ng-virtual-list/src/lib/directives/virtual-click/virtual-click.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/ng-virtual-list-item.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/ng-scroller.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/ng-prerender-container.module.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list.module.ts","../../../projects/ng-virtual-list/src/lib/transformations/linear.ts","../../../projects/ng-virtual-list/src/lib/transformations/event-horizon.ts","../../../projects/ng-virtual-list/src/lib/transformations/deck-of-cards.ts","../../../projects/ng-virtual-list/src/lib/transformations/deck-of-cards-3d.ts","../../../projects/ng-virtual-list/src/lib/transformations/swipe-3d.ts","../../../projects/ng-virtual-list/src/lib/transformations/index.ts","../../../projects/ng-virtual-list/src/public-api.ts","../../../projects/ng-virtual-list/src/ng-virtual-list.ts"],"sourcesContent":["export enum ScrollbarStates {\r\n NORMAL,\r\n PRESSED,\r\n HOVER,\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\nimport { ScrollbarState } from './types';\r\nimport { ScrollbarStates } from './enums';\r\n\r\n/**\r\n * NgScrollBarService\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.service.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgScrollBarService {\r\n private _$click = new Subject<PointerEvent | MouseEvent>();\r\n readonly $click = this._$click.asObservable();\r\n\r\n private _$state = new BehaviorSubject<ScrollbarState>(ScrollbarStates.NORMAL);\r\n readonly $state = this._$state.asObservable();\r\n\r\n set state(v: ScrollbarState) {\r\n if (this._$state.getValue() !== v) {\r\n this._$state.next(v);\r\n }\r\n }\r\n get state() { return this._$state.getValue(); }\r\n\r\n click(event: PointerEvent | MouseEvent) {\r\n this._$click.next(event);\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { NgScrollBarService } from './ng-scroll-bar.service';\r\n\r\n/**\r\n * NgScrollBarService\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar-public.service.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgScrollBarPublicService {\r\n private _internalService = inject(NgScrollBarService);\r\n\r\n get $click() { return this._internalService.$click; }\r\n\r\n get $state() { return this._internalService.$state; }\r\n}\r\n","/**\r\n * Alignments\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/enums/alignments.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum Alignments {\r\n NONE = 'none',\r\n CENTER = 'center',\r\n}","/**\r\n * Action modes for collection elements.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/enums/collection-modes.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum CollectionModes {\r\n /**\r\n * When adding elements to the beginning of the collection, the scroll remains at the current position.\r\n */\r\n NORMAL = 'normal',\r\n /**\r\n * When adding elements to the beginning of the collection, the scroll is shifted by the sum of the sizes of the new elements.\r\n */\r\n LAZY = 'lazy',\r\n}","/**\r\n * Axis of the arrangement of virtual list elements.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/enums/directions.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum Directions {\r\n /**\r\n * Horizontal axis.\r\n */\r\n HORIZONTAL = 'horizontal',\r\n /**\r\n * Vertical axis.\r\n */\r\n VERTICAL = 'vertical',\r\n}","/**\r\n * Focus Alignments.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/enums/focus-alignments.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum FocusAlignments {\r\n NONE = 'none',\r\n START = 'start',\r\n CENTER = 'center',\r\n END = 'end',\r\n}","/**\r\n * Modes for collapsing list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/enums/collapsing-modes.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum CollapsingModes {\r\n /**\r\n * List items are not selectable.\r\n */\r\n NONE = 'none',\r\n /**\r\n * List items are collapsed one by one.\r\n */\r\n MULTI_COLLAPSE = 'multi-collapse',\r\n /**\r\n * Accordion collapsible list items.\r\n */\r\n ACCORDION = 'accordion',\r\n}","/**\r\n * Mods for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/enums/selecting-modes.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum SelectingModes {\r\n /**\r\n * List items are not selectable.\r\n */\r\n NONE = 'none',\r\n /**\r\n * List items are selected one by one.\r\n */\r\n SELECT = 'select',\r\n /**\r\n * Multiple selection of list items.\r\n */\r\n MULTI_SELECT = 'multi-select',\r\n}","/**\r\n * SnapToAtemAligns.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/enums/snap-to-item-aligns.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum SnapToItemAligns {\r\n /**\r\n * An anchor indicates the beginning of an element.\r\n */\r\n START = 'start',\r\n /**\r\n * The anchor points to the middle of the element.\r\n */\r\n CENTER = 'center',\r\n /**\r\n * An anchor indicates the end of an element.\r\n */\r\n END = 'end',\r\n}","/**\r\n * Snapping method.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/enums/snapping-method.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum SnappingMethods {\r\n /**\r\n * The group is rendered on a background.\r\n */\r\n STANDART = 'standart',\r\n /**\r\n * A mask is applied to the viewport area so that the background is displayed underneath the attached group.\r\n */\r\n ADVANCED = 'advanced',\r\n}","/**\r\n * SpreadingModes.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/enums/spreading-modes.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum SpreadingModes {\r\n /**\r\n * List elements are ordered according to the collection sequence.\r\n */\r\n NORMAL = 'normal',\r\n /**\r\n * List elements are ordered cyclically, forming an infinite list.\r\n */\r\n INFINITY = 'infinity',\r\n}","/**\r\n * TextDirections.\r\n * RTL - right-to-left.\r\n * LTR - left-to-right.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/enums/text-directions.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum TextDirections {\r\n RTL = 'rtl',\r\n LTR = 'ltr',\r\n}","import {\r\n Alignments, CollapsingModes, CollectionModes, SelectingModes, SnappingMethods, SnapToItemAligns, TextDirections, SpreadingModes,\r\n} from \"../enums\";\r\nimport { Directions } from \"../enums/directions\";\r\nimport { IAnimationParams, IScrollingSettings } from '../interfaces';\r\nimport { SpreadingMode } from \"../types\";\r\nimport { Alignment, SnappingDistance, SnapToItemAlign } from \"../types\";\r\n\r\nexport const SERVICE_PROP_DUMMY_ID = '__service-dummy-id__';\r\n\r\nexport const SERVICE_PROP_DUMMY = '__service-dummy__';\r\n\r\nexport const SERVICE_TYPE_DUMMY = '__service-type-dummy__';\r\n\r\nexport const SERVICE_PROP_DUMMY_ENABLED = Symbol('__service-dummy-enabled__');\r\n\r\nexport const MAX_REGULAR_SNAPED_COMPONENTS = 2;\r\n\r\nexport const DEFAULT_ITEM_SIZE = 24;\r\n\r\nexport const DEFAULT_MIN_ITEM_SIZE = 1;\r\n\r\nexport const DEFAULT_MAX_ITEM_SIZE = Number.MAX_SAFE_INTEGER;\r\n\r\nexport const DEFAULT_BUFFER_SIZE = 2;\r\n\r\nexport const DEFAULT_MAX_BUFFER_SIZE = 10;\r\n\r\nexport const DEFAULT_LIST_SIZE = 400;\r\n\r\nexport const DEFAULT_CLICK_DISTANCE = 40;\r\n\r\nexport const DEFAULT_WAIT_FOR_PREPARATION = true;\r\n\r\nexport const DEFAULT_SCROLLBAR_ENABLED = true;\r\n\r\nexport const DEFAULT_SCROLLBAR_INTERACTIVE = true;\r\n\r\nexport const DEFAULT_OVERLAPPING_SCROLLBAR = false;\r\n\r\nexport const DEFAULT_SCROLL_BEHAVIOR: ScrollBehavior = 'smooth';\r\n\r\nexport const NAVIGATION_BY_KEYBOARD_TIMER = 50;\r\n\r\nexport const DEFAULT_SNAP_TO_ITEM = false;\r\n\r\nexport const DEFAULT_SNAP_TO_ITEM_ALIGN: SnapToItemAlign = SnapToItemAligns.CENTER;\r\n\r\nexport const DEFAULT_SNAPPING_DISTANCE: SnappingDistance = '25%';\r\n\r\nexport const DEFAULT_SCROLLING_ONE_BY_ONE = false;\r\n\r\nexport const DEFAULT_ALIGNMENT: Alignment = Alignments.NONE;\r\n\r\nexport const DEFAULT_SPREADING_MODE: SpreadingMode = SpreadingModes.NORMAL;\r\n\r\nexport const DEFAULT_DIVIDES = 1;\r\n\r\nexport const DEFAULT_MOTION_BLUR = 0.15;\r\n\r\nexport const DEFAULT_MOTION_BLUR_ENABLED = false;\r\n\r\nexport const DEFAULT_MAX_MOTION_BLUR = 0.5;\r\n\r\nexport const DEFAULT_ANIMATION_PARAMS: IAnimationParams = {\r\n scrollToItem: 50,\r\n snapToItem: 150,\r\n navigateToItem: 150,\r\n navigateByKeyboard: NAVIGATION_BY_KEYBOARD_TIMER,\r\n};\r\n\r\nexport const DEFAULT_SCROLLING_SETTINGS: IScrollingSettings = {\r\n frictionalForce: 0.035,\r\n mass: 0.005,\r\n maxDistance: 100000,\r\n maxDuration: 4000,\r\n speedScale: 10,\r\n optimization: false,\r\n};\r\n\r\nexport const DEFAULT_OVERSCROLL_ENABLED = true;\r\n\r\nexport const DEFAULT_STICKY_ENABLED = false;\r\n\r\nexport const DEFAULT_SELECT_BY_CLICK = true;\r\n\r\nexport const DEFAULT_ZINDEX_WHEN_SELECTING = null;\r\n\r\nexport const DEFAULT_COLLAPSE_BY_CLICK = true;\r\n\r\nexport const DEFAULT_ENABLED_BUFFER_OPTIMIZATION = false;\r\n\r\nexport const DEFAULT_DYNAMIC_SIZE = true;\r\n\r\nexport const DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET = 1;\r\n\r\nexport const DEFAULT_SNAP_SCROLLTO_START = true;\r\n\r\nexport const DEFAULT_SNAP_SCROLLTO_END = true;\r\n\r\nexport const TRACK_BY_PROPERTY_NAME = 'id';\r\n\r\nexport const DEFAULT_DIRECTION = Directions.VERTICAL;\r\n\r\nexport const DEFAULT_COLLECTION_MODE = CollectionModes.NORMAL;\r\n\r\nexport const DISPLAY_OBJECTS_LENGTH_MESUREMENT_ERROR = 1;\r\n\r\nexport const MAX_SCROLL_TO_ITERATIONS = 5;\r\n\r\nexport const DEFAULT_SNAPPING_METHOD = SnappingMethods.STANDART;\r\n\r\nexport const DEFAULT_COLLAPSING_MODES = CollapsingModes.MULTI_COLLAPSE;\r\n\r\nexport const DEFAULT_SELECTING_MODES = SelectingModes.NONE;\r\n\r\nexport const DEFAULT_SCREEN_READER_MESSAGE = 'Showing items $1 to $2';\r\n\r\nexport const DEFAULT_LANG_TEXT_DIR = TextDirections.LTR;\r\n\r\nexport const DEFAULT_SCROLLBAR_THICKNESS: number = 6;\r\n\r\nexport const DEFAULT_SCROLLBAR_MIN_SIZE: number = 80;\r\n\r\n// presets\r\n\r\nexport const BEHAVIOR_AUTO = 'auto' as ScrollBehavior;\r\n\r\nexport const BEHAVIOR_INSTANT = 'instant' as ScrollBehavior;\r\n\r\nexport const BEHAVIOR_SMOOTH = 'smooth' as ScrollBehavior;\r\n\r\nexport const DISABLED = 'disabled';\r\n\r\nexport const VIEWPORT = 'viewport';\r\n\r\nexport const DISPLAY_BLOCK = 'block';\r\n\r\nexport const DISPLAY_NONE = 'none';\r\n\r\nexport const OPACITY_0 = '0';\r\n\r\nexport const OPACITY_100 = '100';\r\n\r\nexport const VISIBILITY_VISIBLE = 'visible';\r\n\r\nexport const VISIBILITY_HIDDEN = 'hidden';\r\n\r\nexport const SIZE_100_PERSENT = '100%';\r\n\r\nexport const SIZE_AUTO = 'auto';\r\n\r\nexport const UNSET = 'unset';\r\n\r\nexport const LEFT = 'left';\r\n\r\nexport const RIGHT = 'right';\r\n\r\nexport const POSITION = 'position';\r\n\r\nexport const POSITION_RELATIVE = 'relative';\r\n\r\nexport const POSITION_ABSOLUTE = 'absolute';\r\n\r\nexport const TRANSLATE_3D = 'translate3d';\r\n\r\nexport const ZEROS_TRANSLATE_3D = `${TRANSLATE_3D}(0,0,0)`;\r\n\r\nexport const HIDDEN_ZINDEX = '-1';\r\n\r\nexport const DEFAULT_ZINDEX = '0';\r\n\r\nexport const TOP_PROP_NAME = 'top';\r\n\r\nexport const LEFT_PROP_NAME = 'left';\r\n\r\nexport const X_PROP_NAME = 'x';\r\n\r\nexport const Y_PROP_NAME = 'y';\r\n\r\nexport const WIDTH_PROP_NAME = 'width';\r\n\r\nexport const HEIGHT_PROP_NAME = 'height';\r\n\r\nexport const MARGIN_TOP = 'marginTop';\r\n\r\nexport const MARGIN_LEFT = 'marginLeft';\r\n\r\nexport const PX = 'px';\r\n\r\nexport const INTERACTIVE = 'interactive';\r\n\r\nexport const FOCUS = 'focus';\r\n\r\nexport const WHEEL = 'wheel';\r\n\r\nexport const SCROLLER_WHEEL = 'wheel';\r\n\r\nexport const TOUCH_MOVE = 'touchmove';\r\n\r\nexport const TOUCH_START = 'touchstart';\r\n\r\nexport const TOUCH_END = 'touchend';\r\n\r\nexport const TOUCH_LEAVE = 'touchleave';\r\n\r\nexport const TOUCH_OUT = 'touchout';\r\n\r\nexport const MOUSE_MOVE = 'mousemove';\r\n\r\nexport const MOUSE_UP = 'mouseup';\r\n\r\nexport const MOUSE_DOWN = 'mousedown';\r\n\r\nexport const MOUSE_LEAVE = 'mouseleave';\r\n\r\nexport const MOUSE_OUT = 'mouseout';\r\n\r\nexport const POINTER_MOVE = 'pointermove';\r\n\r\nexport const POINTER_UP = 'pointerup';\r\n\r\nexport const POINTER_DOWN = 'pointerdown';\r\n\r\nexport const POINTER_LEAVE = 'pointerleave';\r\n\r\nexport const POINTER_OUT = 'pointerout';\r\n\r\nexport const CLICK = 'click';\r\n\r\nexport const KEY_DOWN = 'keydown';\r\n\r\nexport const KEY_TAB = 'Tab';\r\n\r\nexport const SCROLL = 'scroll';\r\n\r\nexport const SCROLLER_SCROLL = 'scroll';\r\n\r\nexport const SCROLL_END = 'scrollend';\r\n\r\nexport const CLASS_LIST_VERTICAL = 'vertical';\r\n\r\nexport const CLASS_LIST_HORIZONTAL = 'horizontal';\r\n\r\n// styles\r\n\r\nexport const PART_DEFAULT_ITEM = 'item';\r\n\r\nexport const PART_ITEM_NEW = ' item-new';\r\n\r\nexport const PART_ITEM_ODD = ' item-odd';\r\n\r\nexport const PART_ITEM_EVEN = ' item-even';\r\n\r\nexport const PART_ITEM_ROW_ODD = ' item-row-odd';\r\n\r\nexport const PART_ITEM_ROW_EVEN = ' item-row-even';\r\n\r\nexport const PART_ITEM_SNAPPED = ' item-snapped';\r\n\r\nexport const PART_ITEM_SELECTED = ' item-selected';\r\n\r\nexport const PART_ITEM_COLLAPSED = ' item-collapsed';\r\n\r\nexport const PART_ITEM_FOCUSED = ' item-focused';\r\n\r\nexport const PART_DEFAULT_ITEM_FX = 'item-fx';\r\n\r\nexport const PART_ITEM_FX_NEW = ' item-fx-new';\r\n\r\nexport const PART_ITEM_FX_ODD = ' item-fx-odd';\r\n\r\nexport const PART_ITEM_FX_EVEN = ' item-fx-even';\r\n\r\nexport const PART_ITEM_ROW_FX_ODD = ' item-row-fx-odd';\r\n\r\nexport const PART_ITEM_ROW_FX_EVEN = ' item-row-fx-even';\r\n\r\nexport const PART_ITEM_FX_SNAPPED = ' item-fx-snapped';\r\n\r\nexport const PART_ITEM_FX_SELECTED = ' item-fx-selected';\r\n\r\nexport const PART_ITEM_FX_COLLAPSED = ' item-fx-collapsed';\r\n\r\nexport const PART_ITEM_FX_FOCUSED = ' item-fx-focused';\r\n\r\nexport const MIN_PIXELS_FOR_PREVENT_SNAPPING = 10;\r\n\r\nexport const MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL1 = 74;\r\n\r\nexport const MAX_NUMBERS_OF_SKIPS_FOR_QUALITY_OPTIMIZATION_LVL1 = 4;\r\n\r\nexport const RANGE_DISPLAY_ITEMS_END_OFFSET = 20;\r\n\r\nexport const PREPARE_ITERATIONS = 1;\r\n\r\nexport const PREPARATION_REUPDATE_LENGTH = 0;\r\n\r\nexport const PREPARE_ITERATIONS_FOR_UPDATE_ITEMS = 1;\r\n\r\nexport const PREPARATION_REUPDATE_LENGTH_FOR_UPDATE_ITEMS = 0;\r\n\r\nexport const PREPARE_ITERATIONS_FOR_COLLAPSE_ITEMS = 1;\r\n\r\nexport const PREPARATION_REUPDATE_LENGTH_FOR_COLLAPSE_ITEMS = 0;\r\n\r\nexport const EMPTY_SCROLL_STATE_VERSION = '-1';\r\n\r\nexport const ROLE_LIST = 'list';\r\n\r\nexport const ROLE_LIST_BOX = 'listbox';\r\n\r\nexport const ITEM_ID = 'item-id';\r\n\r\nexport const ITEM_CONTAINER = 'ngvl-item';\r\n\r\nexport const PERCENTAGE_VALUE_PATTERN = /^([\\d]+%)$/;\r\n\r\nexport const Z_INDEX_NONE = '-1',\r\n Z_INDEX_0 = '0',\r\n Z_INDEX_1 = '1',\r\n Z_INDEX_2 = '2',\r\n Z_INDEX_3 = '3';","export const NGVL_INDEX = 'ngvl-index',\r\n /**\r\n * getListElementByIndex\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-list-item/utils/get-element-by-index.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n getListElementByIndex = (index: number) => {\r\n return `[${NGVL_INDEX}=\"${index}\"]`;\r\n },\r\n /**\r\n * getListElements\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-list-item/utils/get-element-by-index.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n getListElements = () => {\r\n return `[${NGVL_INDEX}]`;\r\n };\r\n","/**\r\n * createDisplayId\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-list-item/utils/create-display-id.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const createDisplayId = (listId: number, id: number) => {\r\n return `${listId}-${id}`;\r\n};\r\n","/**\r\n * matrix3d\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-list-item/utils/matrix-3d.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const matrix3d = (x: number, y: number, z: number, scaleX: number, scaleY: number, scaleZ: number, rotationX: number, rotationY: number, rotationZ: number) => {\r\n return rotationZ !== 0 ? `${__matrix3d__(x, y, z, scaleX, scaleY, scaleZ, rotationX, rotationY)} rotateZ(${rotationZ}deg)` : __matrix3d__(x, y, z, scaleX, scaleY, scaleZ, rotationX, rotationY);\r\n};\r\n\r\nconst __matrix3d__ = (x: number, y: number, z: number, scaleX: number, scaleY: number, scaleZ: number, rotationX: number, rotationY: number) => {\r\n return `matrix3d(\r\n ${scaleX}, 0, ${rotationX}, 0,\r\n 0, ${scaleY}, ${rotationY}, 0,\r\n 0, 0, 1, 0,\r\n ${x}, ${y}, ${z}, ${scaleZ}\r\n )`;\r\n};\r\n","import { matrix3d } from \"../utils\";\r\nimport { ITemplateContext } from \"../interfaces\";\r\n\r\nexport const ID = 'id',\r\n NGVL_VISIBILITY = 'ngvl-visibility',\r\n MATRIX_3D_HIDDEN = matrix3d(-1000, -1000, 0, 1, 1, 1, 0, 0, 0),\r\n ATTR_AREA_SELECTED = 'area-selected',\r\n POSITION = 'position',\r\n POSITION_ZERO = '0',\r\n ITEM_ID = 'item-id',\r\n KEY_SPACE = ' ',\r\n KEY_ARR_LEFT = 'ArrowLeft',\r\n KEY_ARR_UP = 'ArrowUp',\r\n KEY_ARR_RIGHT = 'ArrowRight',\r\n KEY_ARR_DOWN = 'ArrowDown',\r\n EVENT_FOCUS_IN = 'focusin',\r\n EVENT_FOCUS_OUT = 'focusout',\r\n EVENT_KEY_DOWN = 'keydown',\r\n CLASS_NAME_SNAPPED = 'snapped',\r\n CLASS_NAME_SNAPPED_OUT = 'snapped-out',\r\n CLASS_NAME_FOCUS = 'focus';\r\n\r\n export const DEFAULT_TEMPLATE_CONTEXT: ITemplateContext = {\r\n data: undefined,\r\n prevData: undefined,\r\n nextData: undefined,\r\n measures: null,\r\n config: {\r\n focused: false,\r\n selected: false,\r\n collapsed: false,\r\n new: false,\r\n odd: false,\r\n even: false,\r\n collapsable: false,\r\n sticky: 0,\r\n selectable: false,\r\n snap: false,\r\n snapped: false,\r\n snappedOut: false,\r\n isVertical: false,\r\n dynamic: false,\r\n isSnappingMethodAdvanced: false,\r\n tabIndex: 0,\r\n zIndex: '0',\r\n layoutOffset: 0,\r\n layoutIndexOffset: 0,\r\n opacity: 0,\r\n divides: 0,\r\n snapToItem: false,\r\n snapToItemAlign: \"center\",\r\n isFirst: false,\r\n isLast: false,\r\n fullSize: false,\r\n totalItems: 0,\r\n },\r\n reseted: false,\r\n index: -1,\r\n api: null,\r\n };\r\n","/**\r\n * TrackBoxEvents\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/core/events/track-box-events.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum TrackBoxEvents {\r\n CHANGE = 'change',\r\n TICK = 'tick',\r\n}","/**\r\n * Mods for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/enums/selecting-modes-types.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum SelectingModesTypes {\r\n /**\r\n * List items are not selectable.\r\n */\r\n NONE = 0,\r\n /**\r\n * List items are selected one by one.\r\n */\r\n SELECT = 1,\r\n /**\r\n * Multiple selection of list items.\r\n */\r\n MULTI_SELECT = 2,\r\n}","const isUndefinable = <T = any>(value: T) => {\r\n return value === undefined;\r\n}\r\n\r\nconst isNullable = <T = any>(value: T) => {\r\n return value === null;\r\n}\r\n\r\n/**\r\n * Int validator\r\n * @param value Int\r\n */\r\nexport const validateInt = (value: number | undefined, undefinable = false) => {\r\n return (undefinable && isUndefinable(value)) || !Number.isNaN(Number.parseInt(`${value}`));\r\n};\r\n\r\n/**\r\n * Float validator\r\n * @param value Float\r\n */\r\nexport const validateFloat = (value: number | undefined, undefinable = false) => {\r\n return (undefinable && isUndefinable(value)) || !Number.isNaN(Number.parseFloat(`${value}`));\r\n};\r\n\r\n/**\r\n * String validator\r\n * @param value String\r\n */\r\nexport const validateString = (value: string | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || typeof value === 'string';\r\n};\r\n\r\n/**\r\n * Boolean validator\r\n * @param value Boolean\r\n */\r\nexport const validateBoolean = (value: boolean | undefined, undefinable = false) => {\r\n return (undefinable && isUndefinable(value)) || typeof value === 'boolean';\r\n};\r\n\r\n/**\r\n * Array validator\r\n * @param value Array\r\n */\r\nexport const validateArray = <T = any>(value: Array<T> | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || Array.isArray(value);\r\n};\r\n\r\n/**\r\n * Object validator\r\n * @param value Object\r\n */\r\nexport const validateObject = <T = any>(value: Object & T | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || typeof value === 'object';\r\n};\r\n\r\n/**\r\n * Function validator\r\n * @param value Function\r\n */\r\nexport const validateFunction = <T = any>(value: Object & T | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || typeof value === 'function';\r\n};\r\n","import { MAX_SCROLL_TO_ITERATIONS } from \"../const\";\r\nimport { FocusAlignment, Id } from \"../types\";\r\nimport { validateFloat, validateInt, validateString } from \"./validation\";\r\n\r\nexport const validateScrollIteration = (value: number) => {\r\n const result = Number.isNaN(value) || (value < 0) ? 0 : value > MAX_SCROLL_TO_ITERATIONS ? MAX_SCROLL_TO_ITERATIONS : value;\r\n return result;\r\n},\r\n validateId = (id: Id) => {\r\n const valid = validateString(id as string) || validateFloat(id as number);\r\n if (!valid) {\r\n throw Error('The \"id\" parameter must be of type `Id`.');\r\n }\r\n },\r\n validateScrollBehavior = (behavior: ScrollBehavior | 'auto' | 'instant' | 'smooth') => {\r\n const valid = validateString(behavior as string) && (behavior === 'auto' || behavior === 'instant' || behavior === 'smooth');\r\n if (!valid) {\r\n throw Error('The \"behavior\" parameter must have the value `auto`, `instant` or `smooth`.');\r\n }\r\n },\r\n validateIteration = (iteration: number | undefined) => {\r\n const valid = validateInt(iteration, true);\r\n if (!valid) {\r\n throw Error('The \"iteration\" parameter must be of type `number`.');\r\n }\r\n },\r\n validateFocusAlignment = (align: FocusAlignment) => {\r\n const valid = validateString(align as string) && (align === 'none' || align === 'start' || align === 'center' || align === 'end');\r\n if (!valid) {\r\n throw Error('The \"align\" parameter must have the value `none`, `start`, `center` or `end`.');\r\n }\r\n };","import { ITEM_ID } from \"../const\";\r\nimport { Id } from \"../types\";\r\n\r\nexport const getSelectorByItemId = (id: Id) => {\r\n return `[${ITEM_ID}=\"${id}\"]`;\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';\r\nimport { Subject, takeUntil, tap } from 'rxjs';\r\nimport { TrackBox } from './core/track-box';\r\nimport { TrackBoxEvents } from './core/events';\r\nimport { IRenderVirtualListItem, IVirtualListCollection, IVirtualListItem, IVirtualListItemConfigMap } from './models';\r\nimport { IAnimationParams, IRect, IScrollOptions, ISize } from './interfaces';\r\nimport { IRenderVirtualListCollection } from './models/render-collection.model';\r\nimport { FocusAlignments, TextDirections } from './enums';\r\nimport { TextDirection } from './types';\r\nimport { SelectingModesTypes } from './enums/selecting-modes-types';\r\nimport {\r\n BEHAVIOR_AUTO, BEHAVIOR_INSTANT, DEFAULT_ANIMATION_PARAMS, DEFAULT_CLICK_DISTANCE, DEFAULT_COLLAPSE_BY_CLICK,\r\n DEFAULT_ITEM_SIZE, DEFAULT_SELECT_BY_CLICK, DEFAULT_SNAP_TO_ITEM, DEFAULT_ZINDEX_WHEN_SELECTING, ITEM_CONTAINER,\r\n TRACK_BY_PROPERTY_NAME,\r\n} from './const';\r\nimport { FocusAlignment, Id } from './types';\r\nimport { getListElements, NGVL_INDEX } from './components/ng-list-item/utils';\r\nimport { FocusItemParams } from './types/focus-item-params';\r\nimport { validateFocusAlignment, validateId } from './utils/list-validators';\r\nimport { getSelectorByItemId } from './utils/get-selector-by-item-id';\r\nimport { IScrollToParams } from './interfaces/scroll-to-params';\r\n\r\n/**\r\n * NgVirtualListService\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/ng-virtual-list.service.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgVirtualListService {\r\n protected _$unsubscribe = new Subject<void>();\r\n\r\n private _id: number = 0;\r\n get id() { return this._id; }\r\n\r\n private _nextComponentId: number = 0;\r\n\r\n private _$virtualClick = new Subject<IRenderVirtualListItem<any> | null>();\r\n $virtualClick = this._$virtualClick.asObservable();\r\n\r\n private _$selectedIds = new BehaviorSubject<Array<Id> | Id | null>(null);\r\n $selectedIds = this._$selectedIds.asObservable();\r\n\r\n private _$collapsedIds = new BehaviorSubject<Array<Id>>([]);\r\n $collapsedIds = this._$collapsedIds.asObservable();\r\n\r\n private _$selectingMode = new BehaviorSubject<SelectingModesTypes>(0);\r\n $selectingMode = this._$selectingMode.asObservable();\r\n\r\n set selectingMode(v: SelectingModesTypes) {\r\n this._$selectingMode.next(v);\r\n }\r\n\r\n private _$focusedId = new BehaviorSubject<Id | null>(null);\r\n $focusedId = this._$focusedId.asObservable();\r\n set focusedId(v: Id | null) {\r\n if (this._$focusedId.getValue() !== v) {\r\n this._$focusedId.next(v);\r\n }\r\n }\r\n get focusedId() { return this._$focusedId.getValue(); }\r\n\r\n private _$focusItem = new Subject<FocusItemParams>();\r\n readonly $focusItem = this._$focusItem.asObservable();\r\n\r\n private _$scrollTo = new Subject<IScrollToParams | undefined>();\r\n readonly $scrollTo = this._$scrollTo.asObservable();\r\n\r\n private _$scrollToStart = new Subject<IScrollOptions | undefined>();\r\n readonly $scrollToStart = this._$scrollToStart.asObservable();\r\n\r\n private _$scrollToEnd = new Subject<IScrollOptions | undefined>();\r\n readonly $scrollToEnd = this._$scrollToEnd.asObservable();\r\n\r\n private _$tick = new Subject<void>();\r\n readonly $tick = this._$tick.asObservable();\r\n\r\n private _$cacheVersion = new BehaviorSubject<number>(-1);\r\n readonly $cacheVersion = this._$cacheVersion.asObservable();\r\n\r\n trackBy: string = TRACK_BY_PROPERTY_NAME;\r\n\r\n lastFocusedItemId: number = -1;\r\n\r\n scrollStartOffset: number = 0;\r\n\r\n scrollEndOffset: number = 0;\r\n\r\n zIndexWhenSelecting: string | null = DEFAULT_ZINDEX_WHEN_SELECTING;\r\n\r\n selectByClick: boolean = DEFAULT_SELECT_BY_CLICK;\r\n\r\n collapseByClick: boolean = DEFAULT_COLLAPSE_BY_CLICK;\r\n\r\n defaultItemValue: IVirtualListItem | null = null;\r\n\r\n snapToItem: boolean = DEFAULT_SNAP_TO_ITEM;\r\n\r\n isInfinity: boolean = false;\r\n\r\n isVertical: boolean = true;\r\n\r\n dynamic: boolean = true;\r\n\r\n itemSize: number = DEFAULT_ITEM_SIZE;\r\n\r\n snapScrollToStart: boolean = false;\r\n\r\n snapScrollToEnd: boolean = false;\r\n\r\n animationParams: IAnimationParams = DEFAULT_ANIMATION_PARAMS;\r\n\r\n isNoneCollapse: boolean = false;\r\n\r\n isMultipleCollapse: boolean = false;\r\n\r\n isAccordionCollapse: boolean = false;\r\n\r\n private _trackBox: TrackBox | undefined;\r\n\r\n listElement: HTMLDivElement | null = null;\r\n\r\n items: IVirtualListCollection = [];\r\n\r\n itemConfigMap: IVirtualListItemConfigMap = {};\r\n\r\n private _$displayItems = new BehaviorSubject<IRenderVirtualListCollection>([]);\r\n readonly $displayItems = this._$displayItems.asObservable();\r\n get displayItems() { return this._$displayItems.getValue(); }\r\n\r\n private _collection: IRenderVirtualListCollection = [];\r\n set collection(v: IRenderVirtualListCollection) {\r\n if (this._collection === v) {\r\n return;\r\n }\r\n\r\n this._collection = v;\r\n\r\n this._$displayItems.next(v);\r\n }\r\n get collection() { return this._collection; }\r\n\r\n private _$langTextDir = new BehaviorSubject<TextDirection>(TextDirections.LTR);\r\n readonly $langTextDir = this._$langTextDir.asObservable();\r\n get langTextDir() { return this._$langTextDir.getValue(); }\r\n\r\n private _langTextDir: TextDirection = TextDirections.LTR;\r\n set langTextDir(v: TextDirection) {\r\n if (this._langTextDir === v) {\r\n return;\r\n }\r\n\r\n this._langTextDir = v;\r\n\r\n this._$langTextDir.next(v);\r\n }\r\n\r\n get scrollBarSize() { return this._$scrollBarSize.getValue(); }\r\n\r\n private _scrollBarSize: number = 0;\r\n set scrollBarSize(v: number) {\r\n if (this._scrollBarSize === v) {\r\n return;\r\n }\r\n\r\n this._scrollBarSize = v;\r\n\r\n this._$scrollBarSize.next(v);\r\n }\r\n private _$scrollBarSize = new BehaviorSubject<number>(this._scrollBarSize);\r\n readonly $scrollBarSize = this._$scrollBarSize.asObservable();\r\n\r\n private _$intersectionElementBySnapToItemAlign = new BehaviorSubject<Id | null>(null);\r\n readonly $intersectionElementBySnapToItemAlign = this._$intersectionElementBySnapToItemAlign.asObservable();\r\n\r\n private _$clickDistance = new BehaviorSubject<number>(DEFAULT_CLICK_DISTANCE);\r\n readonly $clickDistance = this._$clickDistance.asObservable();\r\n get clickDistance() { return this._$clickDistance.getValue(); }\r\n\r\n private _clickDistance: number = DEFAULT_CLICK_DISTANCE;\r\n set clickDistance(v: number) {\r\n if (this._clickDistance === v) {\r\n return;\r\n }\r\n\r\n this._clickDistance = v;\r\n\r\n this._$clickDistance.next(v);\r\n }\r\n\r\n private _onTickHandler = () => {\r\n this._$tick.next();\r\n };\r\n\r\n private _onTrackBoxChangeHandler = (v: number) => {\r\n this._$cacheVersion.next(v);\r\n };\r\n\r\n set selectedIds(ids: Array<Id> | Id | null) {\r\n if (JSON.stringify(this._$selectedIds.getValue()) !== JSON.stringify(ids)) {\r\n this._$selectedIds.next(ids);\r\n }\r\n }\r\n\r\n get selectedIds() { return this._$selectedIds.getValue(); }\r\n\r\n set collapsedIds(ids: Array<Id>) {\r\n if (JSON.stringify(this._$collapsedIds.getValue()) !== JSON.stringify(ids)) {\r\n this._$collapsedIds.next(ids);\r\n }\r\n }\r\n\r\n get collapsedIds() { return this._$collapsedIds.getValue(); }\r\n\r\n constructor() {\r\n this._$selectingMode.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n switch (v) {\r\n case SelectingModesTypes.SELECT: {\r\n const curr = this._$selectedIds.getValue();\r\n if (typeof curr !== 'number' && typeof curr !== 'string') {\r\n this._$selectedIds.next(null);\r\n }\r\n break;\r\n }\r\n case SelectingModesTypes.MULTI_SELECT: {\r\n if (!Array.isArray(this._$selectedIds.getValue())) {\r\n this._$selectedIds.next([]);\r\n }\r\n break;\r\n }\r\n case SelectingModesTypes.NONE:\r\n default: {\r\n this._$selectedIds.next(null);\r\n break;\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n virtualClick(data: IRenderVirtualListItem | null) {\r\n this._$virtualClick.next(data);\r\n if (this.collapseByClick) {\r\n const trackBy = this.trackBy, id = (data as any)?.[trackBy] ?? null;\r\n this.collapse(id);\r\n }\r\n if (this.selectByClick) {\r\n const trackBy = this.trackBy, id = (data as any)?.[trackBy] ?? null;\r\n this.select(id);\r\n }\r\n }\r\n\r\n update(immediately: boolean = false) {\r\n this._trackBox?.changes(immediately, false);\r\n }\r\n\r\n private getItemConfig(id: Id) {\r\n const displayItems = this.displayItems;\r\n if (!!displayItems) {\r\n const trackBy = this.trackBy;\r\n return displayItems.find(data => {\r\n const _id = (data as any)?.[trackBy] ?? null;\r\n return _id === id;\r\n })?.config ?? null;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Selects a list item\r\n * @param id \r\n * @param selected - If the value is undefined, then the toggle method is executed, if false or true, then the selection/deselection is performed.\r\n */\r\n select(id: Id, selected?: boolean) {\r\n validateId(id);\r\n const config = this.getItemConfig(id);\r\n if ((!!config && config.selectable)) {\r\n switch (this._$selectingMode.getValue()) {\r\n case SelectingModesTypes.SELECT: {\r\n const curr = this._$selectedIds.getValue() as (Id | undefined);\r\n if (selected === undefined) {\r\n this._$selectedIds.next(curr !== id ? id : null);\r\n } else {\r\n this._$selectedIds.next(selected ? id : null);\r\n }\r\n break;\r\n }\r\n case SelectingModesTypes.MULTI_SELECT: {\r\n const curr = [...(this._$selectedIds.getValue() || []) as Array<Id>],\r\n index = curr.indexOf(id);\r\n if (selected === undefined) {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$selectedIds.next(curr);\r\n } else {\r\n this._$selectedIds.next([...curr, id]);\r\n }\r\n } else if (selected) {\r\n if (index > -1) {\r\n this._$selectedIds.next(curr);\r\n } else {\r\n this._$selectedIds.next([...curr, id]);\r\n }\r\n } else {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$selectedIds.next(curr);\r\n } else {\r\n this._$selectedIds.next(curr);\r\n }\r\n }\r\n break;\r\n }\r\n case SelectingModesTypes.NONE:\r\n default: {\r\n this._$selectedIds.next(null);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Collapse list items\r\n * @param data \r\n * @param collapsed - If the value is undefined, then the toggle method is executed, if false or true, then the collapse/expand is performed.\r\n */\r\n collapse(id: Id, collapsed?: boolean) {\r\n if (this.isNoneCollapse) {\r\n return;\r\n }\r\n\r\n validateId(id);\r\n const config = this.getItemConfig(id);\r\n if ((!!config && config.collapsable)) {\r\n const allGroups: Array<Id> = [];\r\n if (this.isAccordionCollapse) {\r\n const items = this.items, itemConfigMap = this.itemConfigMap, trackBy = this.trackBy;\r\n for (let i = 0, l = items.length; i < l; i++) {\r\n const item = items[i], id = item[trackBy], collapsable = itemConfigMap?.[id]?.collapsable === true;\r\n if (!collapsable) {\r\n continue;\r\n }\r\n allGroups.push(id);\r\n }\r\n }\r\n\r\n const curr = this.isAccordionCollapse ? allGroups : [...(this._$collapsedIds.getValue() || []) as Array<Id>],\r\n index = curr.indexOf(id);\r\n if (!collapsed) {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$collapsedIds.next(curr);\r\n } else {\r\n this._$collapsedIds.next([...curr, id]);\r\n }\r\n } else if (collapsed) {\r\n if (index > -1) {\r\n this._$collapsedIds.next(curr);\r\n } else {\r\n this._$collapsedIds.next([...curr, id]);\r\n }\r\n } else {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$collapsedIds.next(curr);\r\n } else {\r\n this._$collapsedIds.next(curr);\r\n }\r\n }\r\n\r\n if (this.isAccordionCollapse) {\r\n this._$scrollTo.next({\r\n id, cb: null, options: {\r\n delay: 100, focused: true,\r\n },\r\n });\r\n } else {\r\n this._$scrollTo.next({\r\n id, cb: null, options: {\r\n delay: 100, focused: true,\r\n },\r\n });\r\n }\r\n }\r\n }\r\n\r\n getFocusedElementById(id: Id) {\r\n const el = this.listElement?.querySelector<HTMLDivElement>(getSelectorByItemId(id));\r\n if (!!el) {\r\n const focusedEl = el.querySelector<HTMLDivElement>(`.${ITEM_CONTAINER}`);\r\n if (!!focusedEl) {\r\n return focusedEl;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Returns the bounds of an element with a given id\r\n */\r\n getItemBounds(id: Id): ISize | null {\r\n validateId(id);\r\n return this._trackBox?.getItemBounds(id) ?? null;\r\n }\r\n\r\n /**\r\n * Focus an list item by a given id.\r\n */\r\n focusById(id: Id, align: FocusAlignment = FocusAlignments.NONE, scrollBehavior: ScrollBehavior = \"auto\") {\r\n validateId(id);\r\n validateFocusAlignment(align);\r\n const el = this.getFocusedElementById(id);\r\n if (!!el) {\r\n this.focus(el, align, scrollBehavior);\r\n }\r\n }\r\n\r\n focus(element: HTMLElement, align: FocusAlignment = FocusAlignments.CENTER, behavior: ScrollBehavior = BEHAVIOR_AUTO): boolean {\r\n element.focus({ preventScroll: true });\r\n if (!!element.parentElement) {\r\n const position = parseFloat(element.parentElement?.getAttribute('position') ?? '0');\r\n this._$focusItem.next({ element, position, align, behavior });\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n focusList() {\r\n const element = this.listElement;\r\n if (!!element) {\r\n element.focus({ preventScroll: true });\r\n }\r\n }\r\n\r\n focusFirstElement() {\r\n const elements = this.listElement?.querySelectorAll<HTMLDivElement>(getListElements()),\r\n elList = (elements ? Array.from(elements) : []).sort((a, b) => {\r\n const indexA = Number(a.getAttribute(NGVL_INDEX)), indexB = Number(b.getAttribute(NGVL_INDEX));\r\n if (indexA > indexB) return 1;\r\n if (indexA < indexB) return -1;\r\n return 0;\r\n });\r\n let element: HTMLElement | undefined = undefined;\r\n for (let i = 0, l = elList.length; i < l; i++) {\r\n const el = elList[i], index = Number(el.getAttribute(NGVL_INDEX));\r\n if (!!el && index > 0) {\r\n element = el;\r\n break;\r\n }\r\n }\r\n if (!!element) {\r\n this.focus(element, FocusAlignments.CENTER, BEHAVIOR_INSTANT);\r\n }\r\n }\r\n\r\n initialize(id: number, trackBox: TrackBox) {\r\n this._id = id;\r\n this._trackBox = trackBox;\r\n this._trackBox.addEventListener(TrackBoxEvents.TICK, this._onTickHandler);\r\n this._trackBox.addEventListener(TrackBoxEvents.CHANGE, this._onTrackBoxChangeHandler);\r\n }\r\n\r\n generateComponentId() {\r\n return this._nextComponentId = this._nextComponentId === Number.MAX_SAFE_INTEGER\r\n ? 0 : this._nextComponentId + 1;\r\n }\r\n\r\n getComponentBoundsByIntersectionPosition(position: number, maxPosition: number | null = null): (IRect & { id: Id | null; isFirst: boolean; isLast: boolean; }) | null {\r\n return this._trackBox?.getComponentBoundsByIntersectionPosition(position, maxPosition) ?? null;\r\n }\r\n\r\n setIntersectionElementBySnapToItemAlign(id: Id | null) {\r\n if (this._$intersectionElementBySnapToItemAlign.getValue() !== id) {\r\n this._$intersectionElementBySnapToItemAlign.next(id);\r\n }\r\n }\r\n\r\n /**\r\n * The method scrolls the list to the element with the given `id` and returns the value of the scrolled area.\r\n */\r\n scrollTo(id: Id, cb: (() => void) | null = null, options: IScrollOptions | null = null) {\r\n this._$scrollTo.next({ id, cb, options });\r\n }\r\n\r\n /**\r\n * Scrolls the scroll area to the first item in the collection.\r\n */\r\n scrollToStart(options?: IScrollOptions) {\r\n this._$scrollToStart.next(options);\r\n }\r\n\r\n /**\r\n * Scrolls the list to the end of the content size.\r\n */\r\n scrollToEnd(options?: IScrollOptions) {\r\n this._$scrollToEnd.next(options);\r\n }\r\n\r\n dispose(): void {\r\n if (this._$unsubscribe) {\r\n this._$unsubscribe.next();\r\n this._$unsubscribe.complete();\r\n }\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { IRenderVirtualListItem } from './models';\r\nimport { IScrollOptions } from './interfaces';\r\nimport { FocusAlignment, Id } from './types';\r\nimport { FocusItemParams } from './types/focus-item-params';\r\nimport { NgVirtualListService } from './ng-virtual-list.service';\r\nimport { FocusAlignments } from './enums';\r\n\r\n/**\r\n * NgVirtualListPublicService\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/ng-virtual-list-publick.service.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgVirtualListPublicService {\r\n private _internalService = inject(NgVirtualListService);\r\n\r\n /**\r\n * Unique list identifier.\r\n */\r\n get id(): number { return this._internalService.id; }\r\n\r\n /**\r\n * Informs about a click on a list item.\r\n */\r\n get $virtualClick(): Observable<IRenderVirtualListItem<any> | null> { return this._internalService.$virtualClick; };\r\n\r\n /**\r\n * Informs about the selection of a list item(s).\r\n */\r\n get $selectedIds(): Observable<Array<Id> | Id | null> { return this._internalService.$selectedIds; };\r\n\r\n /**\r\n * Informs about the collapse (expanding) of a list element(s).\r\n */\r\n get $collapsedIds(): Observable<Array<Id>> { return this._internalService.$collapsedIds; };\r\n\r\n /**\r\n * Informs the focus on the specified list item.\r\n */\r\n get $focusItem(): Observable<FocusItemParams> { return this._internalService.$focusItem; };\r\n\r\n /**\r\n * Notifies about the next change detection tick. Works similarly to `setTimeout` with a timeout of 0.\r\n */\r\n get $tick(): Observable<void> { return this._internalService.$tick; };\r\n\r\n /**\r\n * Specifies a list of selected items.\r\n */\r\n set selectedIds(ids: Array<Id> | Id | null) {\r\n this._internalService.selectedIds = ids;\r\n }\r\n\r\n /**\r\n * Returns a list of selected items.\r\n */\r\n get selectedIds() { return this._internalService.selectedIds; }\r\n\r\n /**\r\n * Specifies a list of collapsed elements.\r\n */\r\n set collapsedIds(ids: Array<Id>) {\r\n this._internalService.collapsedIds = ids;\r\n }\r\n\r\n /**\r\n * Returns a list of collapsed elements.\r\n */\r\n get collapsedIds() { return this._internalService.collapsedIds; }\r\n\r\n /**\r\n * Updates the list\r\n * @param immediately - Indicates that the list is updated instantly.\r\n */\r\n update(immediately: boolean = false) {\r\n this._internalService.update(immediately);\r\n }\r\n\r\n /**\r\n * Selects a list item\r\n * @param id \r\n * @param selected - If the value is undefined, then the toggle method is executed, if false or true, then the selection/deselection is performed.\r\n */\r\n select(id: Id, selected: boolean | undefined = undefined) {\r\n this._internalService.select(id, selected);\r\n }\r\n\r\n /**\r\n * Collapse list items\r\n * @param id \r\n * @param collapsed - If the value is undefined, then the toggle method is executed, if false or true, then the collapse/expand is performed.\r\n */\r\n collapse(id: Id, collapsed: boolean | undefined = undefined) {\r\n this._internalService.collapse(id, collapsed);\r\n }\r\n\r\n /**\r\n * Focus an list item by a given id.\r\n */\r\n focus(id: Id, align: FocusAlignment = FocusAlignments.NONE, scrollBehavior: ScrollBehavior = \"auto\") {\r\n return this._internalService.focusById(id, align, scrollBehavior)\r\n }\r\n\r\n /**\r\n * The method scrolls the list to the element with the given `id` and returns the value of the scrolled area.\r\n */\r\n scrollTo(id: Id, cb: (() => void) | null = null, options: IScrollOptions | null = null) {\r\n this._internalService.scrollTo(id, cb, options);\r\n }\r\n\r\n /**\r\n * Scrolls the scroll area to the first item in the collection.\r\n */\r\n scrollToStart(options?: IScrollOptions) {\r\n this._internalService.scrollToStart(options);\r\n }\r\n\r\n /**\r\n * Scrolls the list to the end of the content size.\r\n */\r\n scrollToEnd(options?: IScrollOptions) {\r\n this._internalService.scrollToEnd(options);\r\n }\r\n}\r\n","import { Component, OnDestroy } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\n/**\r\n * Base disposable component\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/utils/disposable-component.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n template: ``,\r\n})\r\nexport class DisposableComponent implements OnDestroy {\r\n protected _$unsubscribe = new Subject<void>();\r\n\r\n ngOnDestroy(): void {\r\n if (this._$unsubscribe) {\r\n this._$unsubscribe.next();\r\n this._$unsubscribe.complete();\r\n }\r\n }\r\n}","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, inject, TemplateRef, ViewChild } from '@angular/core';\r\nimport { BehaviorSubject, combineLatest, map, takeUntil, tap } from 'rxjs';\r\nimport { ISize } from '../../../interfaces';\r\nimport { IRenderVirtualListItem } from '../../../models/render-item.model';\r\nimport { IDisplayObjectConfig, IDisplayObjectMeasures } from '../../../models';\r\nimport {\r\n DEFAULT_ZINDEX, DISPLAY_BLOCK, DISPLAY_NONE, HIDDEN_ZINDEX, PART_DEFAULT_ITEM, PART_ITEM_COLLAPSED, PART_ITEM_EVEN,\r\n PART_ITEM_FOCUSED, PART_ITEM_NEW, PART_ITEM_ODD, PART_ITEM_SELECTED, PART_ITEM_SNAPPED, PART_DEFAULT_ITEM_FX, PART_ITEM_FX_COLLAPSED,\r\n PART_ITEM_FX_EVEN, PART_ITEM_FX_FOCUSED, PART_ITEM_FX_NEW, PART_ITEM_FX_ODD, PART_ITEM_FX_SELECTED, PART_ITEM_FX_SNAPPED,\r\n PX, SIZE_100_PERSENT, SIZE_AUTO, TRANSLATE_3D, VISIBILITY_HIDDEN, VISIBILITY_VISIBLE, PART_ITEM_ROW_ODD, PART_ITEM_ROW_EVEN,\r\n PART_ITEM_ROW_FX_ODD, PART_ITEM_ROW_FX_EVEN,\r\n} from '../../../const';\r\nimport { ITemplateContext } from '../interfaces';\r\nimport {\r\n CLASS_NAME_FOCUS, CLASS_NAME_SNAPPED, CLASS_NAME_SNAPPED_OUT, DEFAULT_TEMPLATE_CONTEXT, ID, ITEM_ID, POSITION, POSITION_ZERO,\r\n} from '../const';\r\nimport { TextDirections } from '../../../enums';\r\nimport { TextDirection } from '../../../types';\r\nimport { NgVirtualListPublicService } from '../../../ng-virtual-list-public.service';\r\nimport { createDisplayId, matrix3d } from '../utils';\r\nimport { DisposableComponent } from '../../../utils/disposable-component';\r\nimport { NgVirtualListService } from '../../../ng-virtual-list.service';\r\nimport { IBaseVirtualListItemComponent } from '../../../interfaces/base-virtual-list-item-component';\r\nimport { Color } from '../../../types';\r\n\r\n/**\r\n * BaseVirtualListItemComponent\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/list-item/base/base-virtual-list-item-component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-base-virtual-list-item',\r\n template: '',\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class BaseVirtualListItemComponent extends DisposableComponent implements IBaseVirtualListItemComponent {\r\n @ViewChild('item')\r\n protected _item: ElementRef<HTMLDivElement> | undefined;\r\n\r\n @ViewChild('container')\r\n protected _container: ElementRef<HTMLDivElement> | undefined;\r\n\r\n private _apiService = inject(NgVirtualListPublicService);\r\n\r\n protected readonly _service = inject(NgVirtualListService);\r\n\r\n protected _cdr = inject(ChangeDetectorRef);\r\n\r\n protected _id!: number;\r\n get id() {\r\n return this._id;\r\n }\r\n\r\n protected _listId!: number;\r\n get listId() {\r\n return this._listId;\r\n }\r\n\r\n protected _displayId!: string;\r\n get displayId() {\r\n return this._displayId;\r\n }\r\n\r\n protected _isSelected: boolean = false;\r\n set isSelected(v: boolean) {\r\n if (this._isSelected !== v) {\r\n this._isSelected = v;\r\n\r\n this.update();\r\n }\r\n }\r\n get isSelected() { return this._isSelected; }\r\n\r\n protected _isCollapsed: boolean = false;\r\n\r\n protected _$config = new BehaviorSubject<IDisplayObjectConfig>({} as IDisplayObjectConfig);\r\n $config = this._$config.asObservable();\r\n\r\n protected _$measures = new BehaviorSubject<IDisplayObjectMeasures | null>(null);\r\n $measures = this._$measures.asObservable();\r\n\r\n protected _$focused = new BehaviorSubject<boolean>(false);\r\n $focused = this._$focused.asObservable();\r\n\r\n protected _$part = new BehaviorSubject<string>(PART_DEFAULT_ITEM);\r\n $part = this._$part.asObservable();\r\n\r\n protected _$fxPart = new BehaviorSubject<string>(PART_DEFAULT_ITEM_FX);\r\n $fxPart = this._$fxPart.asObservable();\r\n\r\n protected _data: IRenderVirtualListItem | null = null;\r\n get data() { return this._data; }\r\n protected readonly _$data = new BehaviorSubject<IRenderVirtualListItem | null>(this._data);\r\n protected readonly $data = this._$data.asObservable();\r\n\r\n set item(v: IRenderVirtualListItem | null) {\r\n if (this._data === v || this._data?.id === -1 || !v) {\r\n return;\r\n }\r\n\r\n this._data = v;\r\n\r\n this.updatePartStr(v, this._isSelected, this._isCollapsed);\r\n\r\n this.updateConfig(v);\r\n\r\n this.updateMeasures(v);\r\n\r\n this.update();\r\n\r\n this._$data.next(v);\r\n }\r\n\r\n private _$classes = new BehaviorSubject<{ [cName: string]: boolean; }>({});\r\n $classes = this._$classes.asObservable();\r\n\r\n private _$index = new BehaviorSubject<number>(-1);\r\n $index = this._$index.asObservable();\r\n\r\n private _$templateContext = new BehaviorSubject<ITemplateContext>(DEFAULT_TEMPLATE_CONTEXT);\r\n $templateContext = this._$templateContext.asObservable();\r\n\r\n public regular: boolean = false;\r\n\r\n protected _blendColor: Color | null = null;\r\n\r\n protected _scrollBarSize: number = 0;\r\n\r\n protected _langTextDir: TextDirection = TextDirections.LTR;\r\n\r\n protected _regularLength: string = SIZE_100_PERSENT;\r\n set regularLength(v: string) {\r\n if (this._regularLength === v) {\r\n return;\r\n }\r\n\r\n this._regularLength = v;\r\n\r\n this.update();\r\n }\r\n\r\n get item() {\r\n return this._data;\r\n }\r\n\r\n get itemId() {\r\n return this._data?.id;\r\n }\r\n\r\n get zIndex() {\r\n return this._elementRef.nativeElement.style.zIndex;\r\n }\r\n\r\n get visibility() {\r\n return this._elementRef.nativeElement.style.visibility;\r\n }\r\n\r\n protected itemRenderer: TemplateRef<any> | undefined;\r\n\r\n set renderer(v: TemplateRef<any> | undefined) {\r\n if (this.itemRenderer === v) {\r\n return;\r\n }\r\n\r\n this.itemRenderer = v;\r\n\r\n this._cdr.markForCheck();\r\n }\r\n\r\n protected _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n get element() {\r\n return this._elementRef.nativeElement;\r\n }\r\n\r\n constructor() {\r\n super();\r\n this._id = this._service.generateComponentId();\r\n this._listId = this._service.id;\r\n this._displayId = createDisplayId(this._listId, this._id);\r\n\r\n const $part = this.$part;\r\n $part.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(part => {\r\n this._elementRef.nativeElement.setAttribute('part', part);\r\n }),\r\n ).subscribe();\r\n\r\n const $focus = this._service.$focusedId.pipe(\r\n takeUntil(this._$unsubscribe),\r\n map(id => id === this.itemId),\r\n );\r\n\r\n $focus.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n this.updatePartStr(this._data, this._isSelected, this._isCollapsed);\r\n }),\r\n ).subscribe();\r\n\r\n const $data = this.$data,\r\n $config = this.$config,\r\n $measures = this.$measures;\r\n\r\n combineLatest([$data, $focus]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([data, focus]) => {\r\n const f = focus ?? false,\r\n classes = {\r\n [CLASS_NAME_SNAPPED]: data?.config?.snapped ?? false, [CLASS_NAME_SNAPPED_OUT]: data?.config?.snappedOut ?? false,\r\n [CLASS_NAME_FOCUS]: f,\r\n };\r\n this._$classes.next(classes);\r\n }),\r\n ).subscribe();\r\n\r\n $config.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(config => {\r\n this._$index.next(config?.tabIndex ?? -1);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$data, $config, $measures]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([data, config, measures]) => {\r\n this._$templateContext.next({\r\n data: data?.data, prevData: data?.previouseData, nextData: data?.nextData, measures,\r\n config, reseted: false, index: data?.index ?? - 1, api: this._apiService,\r\n });\r\n }),\r\n ).subscribe();\r\n\r\n if (this._service.isVertical) {\r\n this._elementRef.nativeElement.style.height = `${this._service.itemSize}px`;\r\n } else {\r\n this._elementRef.nativeElement.style.width = `${this._service.itemSize}px`;\r\n }\r\n\r\n this.hide();\r\n }\r\n\r\n protected updateMeasures(v: IRenderVirtualListItem<any> | null) {\r\n this._$measures.next(v?.measures ? { ...v.measures } : null);\r\n\r\n this._cdr.markForCheck();\r\n }\r\n\r\n protected updateConfig(v: IRenderVirtualListItem<any> | null) {\r\n this._$config.next({\r\n ...v?.config || {} as IDisplayObjectConfig, selected: this._isSelected, collapsed: this._isCollapsed, focused: this._$focused.getValue(),\r\n });\r\n\r\n this._cdr.markForCheck();\r\n }\r\n\r\n protected update() {\r\n const data = this._data, regular = this.regular, length = this._regularLength, el = this._elementRef.nativeElement,\r\n itemElement = this._item?.nativeElement, containerElement = this._container?.nativeElement;\r\n if (!!data && !!el && !!itemElement && !!containerElement) {\r\n el.setAttribute(ITEM_ID, `${data.id}`);\r\n const styles = el.style, itemElementStyles = itemElement.style;\r\n if (this._service.zIndexWhenSelecting !== null && this._isSelected) {\r\n styles.zIndex = this._service.zIndexWhenSelecting;\r\n } else {\r\n styles.zIndex = data.config.zIndex;\r\n }\r\n this._blendColor = data.config.blendColor ?? null;\r\n if (!!containerElement && !!data.config.blendColor) {\r\n containerElement.style.opacity = String(data.config.opacity);\r\n }\r\n if (!!data.config.filter) {\r\n styles.filter = data.config.filter;\r\n }\r\n if (this.item?.config?.dynamic && data.config.isStub === true) {\r\n el.style.visibility = VISIBILITY_HIDDEN;\r\n }\r\n if (regular) {\r\n el.setAttribute(POSITION, POSITION_ZERO);\r\n styles.transform = `${TRANSLATE_3D}(${data.config.isVertical ?\r\n (this._langTextDir === TextDirections.RTL ? this._scrollBarSize : 0) :\r\n data.measures.delta}${PX}, ${data.config.isVertical ? data.measures.delta : 0}${PX}, ${POSITION_ZERO})`;\r\n } else {\r\n el.setAttribute(POSITION, `${data.config.isVertical ? data.measures.y : data.measures.x}`);\r\n styles.transform = matrix3d(data.measures.transformedX, data.measures.transformedY, data.measures.z, data.measures.scaleX, data.measures.scaleY,\r\n data.measures.scaleZ, data.measures.rotationX, data.measures.rotationY, data.measures.rotationZ);\r\n }\r\n if (data.config.divides > 1) {\r\n styles.height = data.config.isVertical ? `${data.measures.row.size}${PX}` : `${data.measures.height}${PX}`;\r\n styles.width = data.config.isVertical ? `${data.measures.width}${PX}` : `${data.measures.row.size}${PX}`;\r\n itemElementStyles.minWidth = styles.minWidth = data.config.isVertical ? SIZE_AUTO : `${data.measures.minWidth}${PX}`;\r\n itemElementStyles.maxWidth = styles.maxWidth = data.config.isVertical ? SIZE_AUTO : `${data.measures.maxWidth}${PX}`;\r\n itemElementStyles.minHeight = styles.minHeight = data.config.isVertical ? `${data.measures.minHeight}${PX}` : SIZE_AUTO;\r\n itemElementStyles.maxHeight = styles.maxHeight = data.config.isVertical ? `${data.measures.maxHeight}${PX}` : SIZE_AUTO;\r\n\r\n itemElementStyles.height = data.config.isVertical ? data.config.dynamic ? SIZE_AUTO : `${data.measures.height}${PX}` : regular ? length : `${data.measures.height}${PX}`;\r\n itemElementStyles.width = data.config.isVertical ? regular ? length : `${data.measures.width}${PX}` : data.config.dynamic ? SIZE_AUTO : `${data.measures.width}${PX}`;\r\n } else {\r\n styles.height = data.config.isVertical ? data.config.dynamic ? SIZE_AUTO : `${data.measures.height}${PX}` : regular ? length : `${data.measures.height}${PX}`;\r\n styles.width = data.config.isVertical ? regular ? length : `${data.measures.width}${PX}` : data.config.dynamic ? SIZE_AUTO : `${data.measures.width}${PX}`;\r\n styles.minWidth = data.config.isVertical ? SIZE_AUTO : `${data.measures.minWidth}${PX}`;\r\n styles.maxWidth = data.config.isVertical ? SIZE_AUTO : `${data.measures.maxWidth}${PX}`;\r\n styles.minHeight = data.config.isVertical ? `${data.measures.minHeight}${PX}` : SIZE_AUTO;\r\n styles.maxHeight = data.config.isVertical ? `${data.measures.maxHeight}${PX}` : SIZE_AUTO;\r\n }\r\n } else {\r\n el.removeAttribute(ID);\r\n }\r\n\r\n this._cdr.markForCheck();\r\n }\r\n\r\n protected updatePartStr(v: IRenderVirtualListItem | null, isSelected: boolean, isCollapsed: boolean) {\r\n const odd = v?.config.odd, rowOdd = v?.measures.row.odd;\r\n\r\n let part = PART_DEFAULT_ITEM, fxPart = PART_DEFAULT_ITEM_FX;\r\n part += odd ? PART_ITEM_ODD : PART_ITEM_EVEN;\r\n part += rowOdd ? PART_ITEM_ROW_ODD : PART_ITEM_ROW_EVEN;\r\n fxPart += odd ? PART_ITEM_FX_ODD : PART_ITEM_FX_EVEN;\r\n fxPart += rowOdd ? PART_ITEM_ROW_FX_ODD : PART_ITEM_ROW_FX_EVEN;\r\n if (v ? v.config.snapped : false) {\r\n part += PART_ITEM_SNAPPED;\r\n fxPart += PART_ITEM_FX_SNAPPED;\r\n }\r\n if (isSelected) {\r\n part += PART_ITEM_SELECTED;\r\n fxPart += PART_ITEM_FX_SELECTED;\r\n }\r\n if (isCollapsed) {\r\n part += PART_ITEM_COLLAPSED;\r\n fxPart += PART_ITEM_FX_COLLAPSED;\r\n }\r\n if (v ? v.config.new : false) {\r\n part += PART_ITEM_NEW;\r\n fxPart += PART_ITEM_FX_NEW;\r\n }\r\n if (this.hasFocus()) {\r\n part += PART_ITEM_FOCUSED;\r\n fxPart += PART_ITEM_FX_FOCUSED;\r\n }\r\n this._$part.next(part);\r\n this._$fxPart.next(fxPart);\r\n\r\n this._cdr.markForCheck();\r\n }\r\n\r\n protected hasFocus() {\r\n return this._service.focusedId === this.itemId;\r\n }\r\n\r\n getBounds(): ISize {\r\n const el = this._item?.nativeElement;\r\n if (!!el) {\r\n const width = el.offsetWidth, height = el.offsetHeight;\r\n return { width, height, };\r\n }\r\n return { width: 0, height: 0 };\r\n }\r\n\r\n show() {\r\n if (!this.item?.config?.dynamic) {\r\n return;\r\n }\r\n const el = this._elementRef.nativeElement as HTMLElement,\r\n styles = el.style;\r\n styles.zIndex = this._data?.config?.zIndex ?? DEFAULT_ZINDEX;\r\n if (this.regular) {\r\n if (styles.display === DISPLAY_BLOCK) {\r\n return;\r\n }\r\n\r\n styles.display = DISPLAY_BLOCK;\r\n } else {\r\n const isStub = this._data?.config?.isStub ?? false;\r\n if (!isStub) {\r\n if (styles.visibility === VISIBILITY_VISIBLE) {\r\n return;\r\n }\r\n styles.visibility = VISIBILITY_VISIBLE;\r\n }\r\n }\r\n }\r\n\r\n hide() {\r\n if (!this.item?.config?.dynamic) {\r\n return;\r\n }\r\n const el = this._elementRef.nativeElement,\r\n styles = el.style;\r\n styles.zIndex = HIDDEN_ZINDEX;\r\n if (this.regular) {\r\n if (styles.display === DISPLAY_NONE) {\r\n return;\r\n }\r\n\r\n styles.display = DISPLAY_NONE;\r\n } else {\r\n if (styles.visibility === VISIBILITY_HIDDEN) {\r\n return;\r\n }\r\n\r\n styles.visibility = VISIBILITY_HIDDEN;\r\n }\r\n }\r\n}\r\n","import { Directive, ElementRef, EventEmitter, Input, OnDestroy, Output } from '@angular/core';\r\nimport { fromEvent, of, race, Subject } from 'rxjs';\r\nimport { filter, switchMap, takeUntil, tap } from 'rxjs/operators';\r\n\r\nconst DEFAULT_MAX_DISTANCE = 40;\r\n\r\n/**\r\n * ItemClickDirective\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/directives/item-click/item-click.directive.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Directive({\r\n selector: '[virtualClick]',\r\n standalone: false,\r\n})\r\nexport class VirtualClickDirective implements OnDestroy {\r\n protected _$unsubscribe = new Subject<void>();\r\n\r\n private _maxDistance = DEFAULT_MAX_DISTANCE;\r\n\r\n @Input('maxClickDistance')\r\n set maxDistance(v: number | null) {\r\n this._maxDistance = (v !== null || v !== undefined) ? Number(v) : DEFAULT_MAX_DISTANCE;\r\n }\r\n\r\n @Output()\r\n onVirtualClick = new EventEmitter<PointerEvent | TouchEvent>();\r\n\r\n constructor(private _elementRef: ElementRef) {\r\n const $pointerPressed = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerdown'),\r\n $pointerCancel = race([\r\n fromEvent(window, 'pointerup').pipe(\r\n takeUntil(this._$unsubscribe),\r\n ),\r\n fromEvent<PointerEvent>(window, 'pointerleave').pipe(\r\n takeUntil(this._$unsubscribe),\r\n ),\r\n ]),\r\n $pointerRelease = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerup', { passive: false });\r\n\r\n $pointerPressed.pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(e => {\r\n const x = Math.abs(e.clientX),\r\n y = Math.abs(e.clientY);\r\n return $pointerRelease.pipe(\r\n takeUntil(this._$unsubscribe),\r\n takeUntil(\r\n race([\r\n $pointerCancel,\r\n fromEvent<PointerEvent>(window, 'pointermove').pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(e => {\r\n const xx = x - Math.abs(e.clientX),\r\n yy = y - Math.abs(e.clientY),\r\n dist = Math.sqrt(Math.pow(xx, 2) + Math.pow(yy, 2));\r\n\r\n if (dist > this._maxDistance) {\r\n return of(true);\r\n }\r\n\r\n return of(false);\r\n }),\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n ),\r\n ]),\r\n ),\r\n takeUntil(this._$unsubscribe),\r\n tap(e => {\r\n if (e) {\r\n this.onVirtualClick.emit(e);\r\n }\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this._$unsubscribe) {\r\n this._$unsubscribe.next();\r\n this._$unsubscribe.complete();\r\n }\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, inject, Injector, OnInit } from '@angular/core';\r\nimport { map, tap, combineLatest, fromEvent, switchMap, of, Observable, debounceTime, BehaviorSubject, takeUntil } from 'rxjs';\r\nimport { IRenderVirtualListItem } from '../../models/render-item.model';\r\nimport { Id } from '../../types';\r\nimport {\r\n DEFAULT_CLICK_DISTANCE, NAVIGATION_BY_KEYBOARD_TIMER, VISIBILITY_HIDDEN,\r\n} from '../../const';\r\nimport { BaseVirtualListItemComponent } from './base';\r\nimport { SelectingModesTypes } from '../../enums/selecting-modes-types';\r\nimport { IDisplayObjectConfig } from '../../models';\r\nimport { getListElementByIndex } from './utils';\r\nimport {\r\n ATTR_AREA_SELECTED, EVENT_FOCUS_IN, EVENT_FOCUS_OUT, EVENT_KEY_DOWN, KEY_ARR_DOWN, KEY_ARR_LEFT,\r\n KEY_ARR_RIGHT, KEY_ARR_UP, KEY_SPACE, NGVL_VISIBILITY,\r\n} from './const';\r\n\r\n/**\r\n * Virtual list component.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-list-item/ng-virtual-list-item.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-virtual-list-item',\r\n templateUrl: './ng-virtual-list-item.component.html',\r\n styleUrls: ['./ng-virtual-list-item.component.scss'],\r\n host: {\r\n 'class': 'ngvl__item',\r\n 'role': 'listitem',\r\n },\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgVirtualListItemComponent extends BaseVirtualListItemComponent implements OnInit {\r\n private _$maxClickDistance = new BehaviorSubject<number>(DEFAULT_CLICK_DISTANCE);\r\n $maxClickDistance = this._$maxClickDistance.asObservable();\r\n\r\n protected _injector = inject(Injector);\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this._service.$clickDistance.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._$maxClickDistance.next(v);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$langTextDir.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._langTextDir = v;\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$scrollBarSize.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._scrollBarSize = v;\r\n }),\r\n ).subscribe();\r\n\r\n const $data = this.$data,\r\n $focused = this.$focused;\r\n\r\n\r\n fromEvent(this.element, EVENT_FOCUS_IN).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(e => {\r\n this._service.focusedId = this.itemId ?? null;\r\n this._$focused.next(true);\r\n\r\n this.updateConfig(this._data);\r\n\r\n this.updatePartStr(this._data, this._isSelected, this._isCollapsed);\r\n }),\r\n ).subscribe(),\r\n\r\n fromEvent(this.element, EVENT_FOCUS_OUT).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(e => {\r\n this._$focused.next(false);\r\n\r\n this.updateConfig(this._data);\r\n\r\n this.updatePartStr(this._data, this._isSelected, this._isCollapsed);\r\n }),\r\n ).subscribe();\r\n\r\n $focused.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(this.getNavigationTimeout()),\r\n switchMap(v => {\r\n if (v) {\r\n return this.keyKode();\r\n }\r\n return of(false);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$data, this._service.$selectingMode, this._service.$selectedIds, this._service.$collapsedIds]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n map(([, m, selectedIds, collapsedIds]) => ({ method: m, selectedIds, collapsedIds })),\r\n tap(({ method, selectedIds, collapsedIds }) => {\r\n switch (method) {\r\n case SelectingModesTypes.SELECT: {\r\n const id = selectedIds as Id | undefined, isSelected = id === this.itemId;\r\n this.element.setAttribute(ATTR_AREA_SELECTED, String(isSelected));\r\n this.isSelected = isSelected;\r\n break;\r\n }\r\n case SelectingModesTypes.MULTI_SELECT: {\r\n const actualIds = selectedIds as Array<Id>, isSelected = this.itemId !== undefined && actualIds && actualIds.includes(this.itemId);\r\n this.element.setAttribute(ATTR_AREA_SELECTED, String(isSelected));\r\n this.isSelected = isSelected;\r\n break;\r\n }\r\n case SelectingModesTypes.NONE:\r\n default: {\r\n this.element.removeAttribute(ATTR_AREA_SELECTED);\r\n this.isSelected = false;\r\n break;\r\n }\r\n }\r\n\r\n const actualIds = collapsedIds, isCollapsed = this.itemId !== undefined && actualIds && actualIds.includes(this.itemId);\r\n this._isCollapsed = isCollapsed;\r\n\r\n this.updatePartStr(this._data, this._isSelected, isCollapsed);\r\n\r\n this.updateConfig(this._data);\r\n\r\n this.updateMeasures(this._data);\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n private keyKode() {\r\n return fromEvent<KeyboardEvent>(this.element, EVENT_KEY_DOWN).pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(e => {\r\n switch (e.key) {\r\n case KEY_SPACE: {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n if (!!this._data) {\r\n this._service.select(this._data!.id!);\r\n this._service.collapse(this._data!.id!);\r\n }\r\n break;\r\n }\r\n case KEY_ARR_LEFT:\r\n if (!this._$config.getValue().isVertical) {\r\n return this.toPrevItem(e);\r\n }\r\n break;\r\n case KEY_ARR_UP:\r\n if (this._$config.getValue().isVertical) {\r\n return this.toPrevItem(e);\r\n }\r\n break;\r\n case KEY_ARR_RIGHT:\r\n if (!this._$config.getValue().isVertical) {\r\n return this.toNextItem(e);\r\n }\r\n break;\r\n case KEY_ARR_DOWN:\r\n if (this._$config.getValue().isVertical) {\r\n return this.toNextItem(e);\r\n }\r\n break;\r\n }\r\n return of(null);\r\n }),\r\n );\r\n }\r\n\r\n private getNavigationTimeout() {\r\n return this._service.snapToItem ?\r\n Math.max(this._service.animationParams.snapToItem, this._service.animationParams.navigateByKeyboard ?? NAVIGATION_BY_KEYBOARD_TIMER) :\r\n this._service.animationParams.navigateByKeyboard ?? NAVIGATION_BY_KEYBOARD_TIMER;\r\n }\r\n\r\n private toNextItem(e: Event): Observable<any> {\r\n if (!!e && e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n\r\n const index = this.focusNext();\r\n if (index !== Number.MIN_SAFE_INTEGER) {\r\n this._service.lastFocusedItemId = index;\r\n }\r\n return of(e).pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(this.getNavigationTimeout()),\r\n switchMap(() => {\r\n return this.keyKode();\r\n }),\r\n );\r\n }\r\n\r\n private toPrevItem(e: Event): Observable<any> {\r\n if (!!e && e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n\r\n const index = this.focusPrev();\r\n if (index !== Number.MIN_SAFE_INTEGER) {\r\n this._service.lastFocusedItemId = index;\r\n }\r\n return of(e).pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(this.getNavigationTimeout()),\r\n switchMap(() => {\r\n return this.keyKode();\r\n }),\r\n );\r\n }\r\n\r\n private focusNext(): number {\r\n if (this._service.listElement) {\r\n const tabIndex = this._data?.config?.tabIndex ?? 0, length = this._data?.config.totalItems ?? 0,\r\n l = length > 0 ? (this._service.isInfinity ? (length + 1) : length) : 0;\r\n let index = tabIndex;\r\n while (index <= l) {\r\n index++;\r\n const element = this._service.listElement.querySelector<HTMLDivElement>(getListElementByIndex(index));\r\n if (!!element && element.getAttribute(NGVL_VISIBILITY) !== VISIBILITY_HIDDEN) {\r\n const focused = this._service.focus(element);\r\n if (focused) {\r\n return index;\r\n }\r\n }\r\n }\r\n }\r\n return Number.MIN_SAFE_INTEGER;\r\n }\r\n\r\n private focusPrev(): number {\r\n if (this._service.listElement) {\r\n const tabIndex = this._data?.config?.tabIndex ?? 0, min = -(this._data?.config?.layoutIndexOffset ?? 0);\r\n let index = tabIndex;\r\n while (index >= min) {\r\n index--;\r\n const element = this._service.listElement.querySelector<HTMLDivElement>(getListElementByIndex(index));\r\n if (!!element && element.getAttribute(NGVL_VISIBILITY) !== VISIBILITY_HIDDEN) {\r\n this._service.focus(element);\r\n return index;\r\n }\r\n }\r\n }\r\n return Number.MIN_SAFE_INTEGER;\r\n }\r\n\r\n protected override updateConfig(v: IRenderVirtualListItem<any> | null) {\r\n this._$config.next({\r\n ...v?.config || {} as IDisplayObjectConfig, selected: this._isSelected, collapsed: this._isCollapsed, focused: this._$focused.getValue(),\r\n });\r\n\r\n this._cdr.markForCheck();\r\n }\r\n\r\n onClickHandler() {\r\n this._service.virtualClick(this._data);\r\n }\r\n}\r\n","<ng-container *ngIf=\"($data | async) as data\">\r\n <div #item class=\"ngvl-item\" [ngClass]=\"($classes | async)!\" [part]=\"($part | async)!\" [attr.ngvl-index]=\"($index | async)!\"\r\n [attr.ngvl-visibility]=\"visibility\" tabindex=\"-1\">\r\n <div *ngIf=\"_blendColor\" class=\"ngvl-item__blend-color\" [style.--blend-color]=\"_blendColor\"></div>\r\n <div #container virtualClick [part]=\"$fxPart | async\" [maxClickDistance]=\"$maxClickDistance | async\"\r\n class=\"ngvl-item__container\" [ngClass]=\"($classes | async)!\" (onVirtualClick)=\"onClickHandler()\">\r\n <ng-container [ngTemplateOutlet]=\"itemRenderer ?? null\"\r\n [ngTemplateOutletContext]=\"$templateContext | async\"></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>","export interface IDebounce {\r\n /**\r\n * Call handling method\r\n */\r\n execute: (...args: Array<any>) => void;\r\n /**\r\n * Method of destroying handlers\r\n */\r\n dispose: () => void;\r\n /**\r\n * Indicates whether the handler has been removed (true) or not (false)\r\n */\r\n getIsDisposed: () => boolean;\r\n}\r\n\r\n/**\r\n * Simple debounce function.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/utils/debounce.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n * @param cb - Callback.\r\n * @param debounceTime - Debounce trigger time. \r\n * @param maxSkips - Maximum numbers of skips.\r\n * @returns \r\n */\r\nexport const debounce = (cb: (...args: Array<any>) => void, debounceTime: number = 0, maxSkips: number = 0): IDebounce => {\r\n let timeout: any = null, throws = 0;\r\n const dispose = () => {\r\n if (timeout !== null) {\r\n clearTimeout(timeout);\r\n timeout = null\r\n }\r\n }\r\n const execute = (...args: Array<any>) => {\r\n if (maxSkips > 0) {\r\n if (timeout !== null) {\r\n throws++;\r\n } else {\r\n throws = 0;\r\n }\r\n }\r\n\r\n dispose();\r\n\r\n let called = false;\r\n if (maxSkips > 0) {\r\n if (throws === maxSkips) {\r\n throws = 0;\r\n called = true;\r\n cb(...args);\r\n }\r\n }\r\n\r\n if (!called) {\r\n timeout = setTimeout(() => {\r\n cb(...args);\r\n }, debounceTime);\r\n }\r\n };\r\n const getIsDisposed = () => {\r\n return timeout === null;\r\n };\r\n return {\r\n /**\r\n * Call handling method\r\n */\r\n execute,\r\n /**\r\n * Method of destroying handlers\r\n */\r\n dispose,\r\n /**\r\n * Indicates whether the handler has been removed (true) or not (false)\r\n */\r\n getIsDisposed,\r\n };\r\n};\r\n","/**\r\n * Switch css classes\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/utils/toggle-class-name.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const toggleClassName = (el: HTMLElement, className: string, removeClassName?: string) => {\r\n if (!el.classList.contains(className)) {\r\n el.classList.add(className);\r\n }\r\n if (removeClassName) {\r\n el.classList.remove(removeClassName);\r\n }\r\n};\r\n","import { IScrollEvent } from \"../interfaces\";\r\nimport { ScrollDirection } from '../types';\r\n\r\ninterface IScrollEventParams {\r\n direction: ScrollDirection;\r\n container: HTMLElement;\r\n list: HTMLElement;\r\n delta: number;\r\n deltaOfNewItems: number;\r\n scrollSize: number;\r\n isVertical: boolean;\r\n itemsRange: [number, number] | undefined;\r\n isEnd: boolean;\r\n userAction: boolean;\r\n}\r\n\r\n/**\r\n * Scroll event.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/utils/scroll-event.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class ScrollEvent implements IScrollEvent {\r\n private _direction: ScrollDirection = 1;\r\n get direction() { return this._direction; }\r\n\r\n private _scrollSize: number = 0;\r\n get scrollSize() { return this._scrollSize; }\r\n\r\n private _scrollWeight: number = 0;\r\n get scrollWeight() { return this._scrollWeight; }\r\n\r\n private _isVertical: boolean = true;\r\n get isVertical() { return this._isVertical; }\r\n\r\n private _listSize: number = 0;\r\n get listSize() { return this._listSize; }\r\n\r\n private _size: number = 0;\r\n get size() { return this._size; }\r\n\r\n private _isStart: boolean = true;\r\n get isStart() { return this._isStart; }\r\n\r\n private _isEnd: boolean = false;\r\n get isEnd() { return this._isEnd; }\r\n\r\n private _delta: number = 0;\r\n get delta() { return this._delta; }\r\n\r\n private _deltaOfNewItems: number = 0;\r\n get deltaOfNewItems() { return this._deltaOfNewItems; }\r\n\r\n private _itemsRange: [number, number] | undefined;\r\n get itemsRange() { return this._itemsRange; }\r\n\r\n private _userAction: boolean;\r\n get userAction() { return this._userAction; }\r\n\r\n constructor(params: IScrollEventParams) {\r\n const { direction, container, list, scrollSize, delta, isVertical, deltaOfNewItems, itemsRange, isEnd, userAction } = params;\r\n this._direction = direction;\r\n this._isVertical = isVertical;\r\n this._scrollSize = scrollSize;\r\n this._scrollWeight = isVertical ? container.scrollHeight : container.scrollWidth;\r\n this._listSize = isVertical ? list.offsetHeight : list.offsetWidth;\r\n this._size = isVertical ? container.offsetHeight : container.offsetWidth;\r\n this._isEnd = isEnd;\r\n this._delta = delta;\r\n this._deltaOfNewItems = deltaOfNewItems;\r\n this._isStart = this._scrollSize === 0;\r\n this._itemsRange = itemsRange;\r\n this._userAction = userAction;\r\n }\r\n}","export type TEventHandler = (...args: Array<any>) => void;\r\n\r\n/**\r\n * Event emitter\r\n * @link https://github.com/DjonnyX/data-channel-router/blob/main/library/src/utils/event-emitter/event-emitter.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class EventEmitter<E = string, H = TEventHandler> {\r\n protected _listeners: {\r\n [eventName: string]: Array<TEventHandler>,\r\n } = {};\r\n\r\n protected _disposed: boolean = false;\r\n\r\n constructor() { }\r\n\r\n /**\r\n * Emits the event\r\n */\r\n dispatch(event: E, ...args: Array<any>): void {\r\n const ctx = this;\r\n const listeners = this._listeners[event as unknown as string];\r\n if (Array.isArray(listeners)) {\r\n for (let i = 0, l = listeners.length; i < l; i++) {\r\n const listener = listeners[i];\r\n if (listener) {\r\n listener.apply(ctx, args);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Emits the event async\r\n */\r\n dispatchAsync(event: E, ...args: Array<any>): void {\r\n queueMicrotask(() => {\r\n if (this._disposed) {\r\n return;\r\n }\r\n this.dispatch(event, ...args);\r\n });\r\n }\r\n\r\n /**\r\n * Returns true if the event listener is already subscribed.\r\n */\r\n hasEventListener(eventName: E, handler: H): boolean {\r\n const event = eventName as unknown as string;\r\n if (this._listeners[event] !== undefined) {\r\n const listeners = this._listeners[event];\r\n const index = listeners.findIndex(v => v === (handler as any));\r\n if (index > -1) {\r\n return true;\r\n }\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * Add event listener\r\n */\r\n addEventListener(eventName: E, handler: H): void {\r\n const event = eventName as unknown as string;\r\n if (!this._listeners.hasOwnProperty(event)) {\r\n this._listeners[event] = [];\r\n }\r\n this._listeners[event].push(handler as unknown as TEventHandler);\r\n }\r\n\r\n /**\r\n * Remove event listener\r\n */\r\n removeEventListener(eventName: E, handler: H): void {\r\n const event = eventName as unknown as string;\r\n if (!this._listeners.hasOwnProperty(event)) {\r\n return;\r\n }\r\n const listeners = this._listeners[event], index = listeners.findIndex(v => v === handler as any);\r\n if (index > -1) {\r\n listeners.splice(index, 1);\r\n\r\n if (listeners.length === 0) {\r\n delete this._listeners[event];\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Remove all listeners\r\n */\r\n removeAllListeners() {\r\n const events = Object.keys(this._listeners);\r\n while (events.length > 0) {\r\n const event = events.pop();\r\n if (event) {\r\n const listeners = this._listeners[event];\r\n if (Array.isArray(listeners)) {\r\n while (listeners.length > 0) {\r\n const listener = listeners.pop();\r\n if (listener) {\r\n this.removeEventListener(event as unknown as E, listener as unknown as H);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Method of destroying handlers\r\n */\r\n dispose() {\r\n this._disposed = true;\r\n\r\n this.removeAllListeners();\r\n }\r\n}","export class CMap<K = string, V = any> {\r\n protected _dict: { [k: string | number]: V } = {};\r\n\r\n constructor(dict?: CMap<K, V>) {\r\n this.from(dict);\r\n }\r\n\r\n from(dict?: CMap<K, V>) {\r\n if (dict) {\r\n this._dict = { ...dict._dict };\r\n }\r\n }\r\n\r\n get(key: K) {\r\n const k = String(key);\r\n return this._dict[k];\r\n }\r\n set(key: K, value: V) {\r\n const k = String(key);\r\n this._dict[k] = value;\r\n return this;\r\n }\r\n has(key: K) {\r\n return this._dict.hasOwnProperty(String(key));\r\n }\r\n delete(key: K) {\r\n const k = String(key);\r\n delete this._dict[k];\r\n }\r\n clear() {\r\n this._dict = {};\r\n }\r\n toObject() {\r\n return this._dict;\r\n }\r\n}","import { ScrollDirection } from \"../types\";\r\nimport { debounce } from \"../utils\";\r\nimport { EventEmitter } from \"../utils/event-emitter\";\r\nimport { CMap } from \"../utils/cmap\";\r\n\r\nexport interface ICacheMap<I = any, B = any> {\r\n set: (id: I, bounds: B) => CMap<I, B>;\r\n has: (id: I) => boolean;\r\n get: (id: I) => B | undefined;\r\n delete: (id: I) => void;\r\n clear: () => void;\r\n}\r\n\r\nexport const CACHE_BOX_CHANGE_EVENT_NAME = 'change';\r\n\r\ntype CacheMapEvents = typeof CACHE_BOX_CHANGE_EVENT_NAME;\r\n\r\ntype OnChangeEventListener = (version: number) => void;\r\n\r\ntype CacheMapListeners = OnChangeEventListener;\r\n\r\n/**\r\n * Cache map.\r\n * Emits a change event on each mutation.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/core/cache-map.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class CacheMap<I = string | number, B = any, E = CacheMapEvents, L = CacheMapListeners> extends EventEmitter<E, L> implements ICacheMap {\r\n protected _map = new CMap<I, B>();\r\n\r\n protected _snapshot = new CMap<I, B>();\r\n\r\n protected _version: number = 0;\r\n\r\n protected _previousVersion = this._version;\r\n\r\n protected _lifeCircleId: any;\r\n\r\n protected _delta: number = 0;\r\n\r\n get delta() {\r\n return this._delta;\r\n }\r\n\r\n get version() {\r\n return this._version;\r\n }\r\n\r\n constructor() {\r\n super();\r\n this.lifeCircle();\r\n }\r\n\r\n protected changesDetected() {\r\n return this._version !== this._previousVersion;\r\n }\r\n\r\n protected stopLifeCircle() {\r\n if (this._lifeCircleId !== undefined) {\r\n clearTimeout(this._lifeCircleId);\r\n }\r\n }\r\n\r\n protected nextTick(cb: () => void) {\r\n if (this._disposed) {\r\n return;\r\n }\r\n\r\n this._lifeCircleId = setTimeout(() => {\r\n cb();\r\n });\r\n return this._lifeCircleId;\r\n }\r\n\r\n protected lifeCircle() {\r\n this.fireChangeIfNeed();\r\n\r\n this.lifeCircleDo();\r\n }\r\n\r\n protected lifeCircleDo() {\r\n this._previousVersion = this._version;\r\n\r\n this.nextTick(() => {\r\n this.lifeCircle();\r\n });\r\n }\r\n\r\n protected bumpVersion() {\r\n if (this.changesDetected()) {\r\n return;\r\n }\r\n const v = this._version === Number.MAX_SAFE_INTEGER ? 0 : this._version + 1;\r\n this._version = v;\r\n }\r\n\r\n protected fireChangeIfNeed() {\r\n if (this.changesDetected()) {\r\n this.dispatch(CACHE_BOX_CHANGE_EVENT_NAME as unknown as E, this.version);\r\n }\r\n }\r\n\r\n set(id: I, bounds: B): CMap<I, B> {\r\n if (this._map.has(id)) {\r\n const b: any = this._map.get(id), bb: any = bounds;\r\n if (b.width === bb.width && b.height === bb.height) {\r\n return this._map;\r\n }\r\n return this._map;\r\n }\r\n\r\n const v = this._map.set(id, bounds);\r\n\r\n this.bumpVersion();\r\n\r\n return v;\r\n }\r\n\r\n has(id: I): boolean {\r\n return this._map.has(id);\r\n }\r\n\r\n get(id: I): B | undefined {\r\n return this._map.get(id);\r\n }\r\n\r\n delete(id: I) {\r\n this._map.delete(id);\r\n }\r\n\r\n clear() {\r\n this._map.clear();\r\n }\r\n\r\n snapshot() {\r\n this._snapshot = new CMap(this._map);\r\n }\r\n\r\n override dispose() {\r\n super.dispose();\r\n\r\n this.stopLifeCircle();\r\n\r\n this._snapshot.clear();\r\n\r\n this._map.clear();\r\n }\r\n}","/**\r\n * getServiceIdProp\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/core/utils/get-service-id-prop.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const getServiceIdProp = (trackBy: string) => {\r\n return `__service-id-${trackBy}__`;\r\n};\r\n","import { ComponentRef } from \"@angular/core\";\r\nimport { ScrollDirection } from \"../types\";\r\nimport { IRenderVirtualListCollection } from \"../models/render-collection.model\";\r\nimport { BaseVirtualListItemComponent } from \"../components/ng-list-item/base\";\r\nimport { ISize } from '../interfaces';\r\nimport { Id } from \"../types\";\r\nimport { CMap } from \"../utils/cmap\";\r\nimport { SERVICE_PROP_DUMMY, SERVICE_PROP_DUMMY_ENABLED } from \"../const\";\r\nimport { getServiceIdProp } from \"./utils\";\r\n\r\ntype TrackingPropertyId = string | number;\r\n\r\nexport interface IVirtualListItemComponent<I = any> {\r\n getBounds(): ISize;\r\n itemId: Id;\r\n id: number;\r\n item: I | null;\r\n show: () => void;\r\n hide: () => void;\r\n}\r\n\r\n/**\r\n * Tracks display items by property\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/core/tracker.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class Tracker<C extends BaseVirtualListItemComponent = any> {\r\n /**\r\n * display objects dictionary of indexes by id\r\n */\r\n protected _displayObjectIndexMapById: { [id: number]: number } = {};\r\n\r\n set displayObjectIndexMapById(v: { [id: number]: number }) {\r\n if (this._displayObjectIndexMapById === v) {\r\n return;\r\n }\r\n\r\n this._displayObjectIndexMapById = v;\r\n }\r\n\r\n get displayObjectIndexMapById() {\r\n return this._displayObjectIndexMapById;\r\n }\r\n\r\n /**\r\n * Dictionary displayItems propertyNameId by items propertyNameId\r\n */\r\n protected _trackMap = new CMap<TrackingPropertyId, number>();\r\n\r\n get trackMap() {\r\n return this._trackMap;\r\n }\r\n\r\n protected _trackingPropertyName!: string;\r\n\r\n set trackingPropertyName(v: string) {\r\n this._trackingPropertyName = v;\r\n }\r\n\r\n constructor(trackingPropertyName: string) {\r\n this._trackingPropertyName = trackingPropertyName;\r\n }\r\n\r\n private tearOutSnapedDisplayObjectByItemId = (itemId: Id, snappedComponents: Array<ComponentRef<C>> | null | undefined):\r\n ComponentRef<C> | null => {\r\n if (!snappedComponents || snappedComponents?.length === 0) {\r\n return null;\r\n }\r\n const index = snappedComponents?.findIndex(comp => comp?.instance?.itemId === itemId);\r\n if (index > -1) {\r\n const comp = snappedComponents[index];\r\n snappedComponents.splice(index, 1);\r\n return comp;\r\n }\r\n return snappedComponents.shift() ?? null;\r\n }\r\n\r\n /**\r\n * tracking by propName\r\n */\r\n track(items: IRenderVirtualListCollection, components: Array<ComponentRef<C>>, snappedComponents: Array<ComponentRef<C>> | null | undefined,\r\n direction: ScrollDirection, trackBy: string): void {\r\n if (!items) {\r\n return;\r\n }\r\n\r\n const untrackedItems = [...components], newTrackItems: Array<any> = [],\r\n untrackedComponentsByTypeMap: { [type: string]: Array<{ comp: ComponentRef<C>; index: number }>; } = {},\r\n isDown = direction === 0 || direction === 1, snapped = !!snappedComponents ? [...snappedComponents] : [];\r\n let isRegularSnapped = false;\r\n\r\n const serviceIdProp = getServiceIdProp(trackBy);\r\n for (let i = isDown ? 0 : items.length - 1, l = isDown ? items.length : 0; isDown ? i < l : i >= l; isDown ? i++ : i--) {\r\n const item = items[i],\r\n isDummy = item?.data?.[SERVICE_PROP_DUMMY] && (item?.data?.[SERVICE_PROP_DUMMY] === SERVICE_PROP_DUMMY_ENABLED);\r\n if (isDummy) {\r\n continue;\r\n }\r\n const itemTrackingProperty = (item as any)[serviceIdProp] ?? (item as any)[trackBy];\r\n let snappedComponent: ComponentRef<C> | null | undefined;\r\n if (this._trackMap) {\r\n if (this._trackMap.has(itemTrackingProperty)) {\r\n const diId = this._trackMap.get(itemTrackingProperty),\r\n compIndex = this._displayObjectIndexMapById[diId], comp = components[compIndex] ?? null,\r\n data = item?.data,\r\n compId = comp?.instance?.id ?? null;\r\n if (comp !== null && compId === diId && compId !== null && data?.[SERVICE_PROP_DUMMY] !== SERVICE_PROP_DUMMY_ENABLED) {\r\n const indexByUntrackedItems = untrackedItems.findIndex(v => {\r\n return v.instance.id === compId;\r\n });\r\n if (indexByUntrackedItems > -1) {\r\n if (item.config.snapped || item.config.snappedOut) {\r\n if (snapped.length > 0) {\r\n snappedComponent = this.tearOutSnapedDisplayObjectByItemId(item.id, snapped);\r\n if (!!snappedComponent) {\r\n isRegularSnapped = true;\r\n snappedComponent.instance.item = item;\r\n snappedComponent.instance.show();\r\n }\r\n }\r\n }\r\n\r\n if (!!snappedComponent) {\r\n if (item.config.snapped || item.config.snappedOut) {\r\n comp.instance.item = null;\r\n comp.instance.hide();\r\n } else {\r\n comp.instance.item = item;\r\n comp.instance.show();\r\n }\r\n } else {\r\n comp.instance.item = item;\r\n comp.instance.show();\r\n }\r\n untrackedItems.splice(indexByUntrackedItems, 1);\r\n continue;\r\n }\r\n }\r\n } else {\r\n this._trackMap.delete(itemTrackingProperty);\r\n\r\n }\r\n }\r\n\r\n if (untrackedItems.length > 0) {\r\n newTrackItems.push(item);\r\n }\r\n }\r\n\r\n if (untrackedItems.length > 0) {\r\n for (let i = 0, l = untrackedItems.length; i < l; i++) {\r\n const comp = untrackedItems[i], type = comp?.instance.item?.data?.type;\r\n if (!untrackedComponentsByTypeMap[type]) {\r\n untrackedComponentsByTypeMap[type] = [];\r\n }\r\n untrackedComponentsByTypeMap[type].push({ comp, index: i });\r\n }\r\n }\r\n\r\n for (let i = 0, l = newTrackItems.length; i < l; i++) {\r\n let snappedComponent: ComponentRef<C> | null | undefined;\r\n if (untrackedItems.length > 0) {\r\n const item = newTrackItems[i], itemTrackingProperty = item.id,\r\n type = item.data?.type;\r\n let comp: ComponentRef<C> | undefined;\r\n if (type) {\r\n const list = untrackedComponentsByTypeMap[type];\r\n if (!!list && list.length > 0) {\r\n const untrackedItem = list.shift();\r\n if (untrackedItem) {\r\n comp = untrackedItem.comp;\r\n untrackedItems.slice(untrackedItem.index, 1);\r\n }\r\n }\r\n }\r\n\r\n if (!comp) {\r\n comp = untrackedItems.shift();\r\n }\r\n\r\n if (comp) {\r\n if (item.config.snapped || item.config.snappedOut) {\r\n if (snapped.length > 0) {\r\n snappedComponent = this.tearOutSnapedDisplayObjectByItemId(item.id, snapped);\r\n isRegularSnapped = true;\r\n if (!!snappedComponent) {\r\n snappedComponent.instance.item = item;\r\n snappedComponent.instance.show();\r\n }\r\n }\r\n }\r\n if (!!snappedComponent) {\r\n if (item.config.snapped || item.config.snappedOut) {\r\n comp.instance.item = null;\r\n comp.instance.hide();\r\n } else {\r\n comp.instance.item = item;\r\n comp.instance.show();\r\n }\r\n } else {\r\n comp.instance.item = item;\r\n comp.instance.show();\r\n }\r\n\r\n if (this._trackMap) {\r\n this._trackMap.set(itemTrackingProperty, comp.instance.id);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (untrackedItems.length) {\r\n for (let i = 0, l = untrackedItems.length; i < l; i++) {\r\n const comp = untrackedItems[i];\r\n comp.instance.item = null;\r\n comp.instance.hide();\r\n }\r\n }\r\n\r\n if (!isRegularSnapped) {\r\n for (let i = 0, l = snapped.length; i < l; i++) {\r\n const snappedComponent = snapped[i];\r\n if (!!snappedComponent) {\r\n snappedComponent.instance.item = null;\r\n snappedComponent.instance.hide();\r\n }\r\n }\r\n }\r\n }\r\n\r\n untrackComponentByIdProperty(component?: C): void {\r\n if (!component) {\r\n return;\r\n }\r\n\r\n const propertyIdName = this._trackingPropertyName;\r\n\r\n if (this._trackMap && (component as any)[propertyIdName] !== undefined) {\r\n this._trackMap.delete(propertyIdName);\r\n }\r\n }\r\n\r\n clearTrackMap() {\r\n this._trackMap.clear();\r\n }\r\n\r\n dispose() {\r\n if (this._trackMap) {\r\n this._trackMap.clear();\r\n }\r\n }\r\n}","const DEFAULT_EXTRA = {\r\n extremumThreshold: 2,\r\n bufferSize: 10,\r\n};\r\n\r\nexport interface IExtraOptions {\r\n extremumThreshold?: number;\r\n bufferSize?: number;\r\n}\r\n\r\nexport const bufferInterpolation = (currentBufferValue: number, array: Array<number>, value: number, extra?: IExtraOptions) => {\r\n const {\r\n extremumThreshold = DEFAULT_EXTRA.extremumThreshold,\r\n bufferSize = DEFAULT_EXTRA.bufferSize,\r\n } = extra ?? DEFAULT_EXTRA;\r\n\r\n if (currentBufferValue < value) {\r\n let i = 0;\r\n while (i < extremumThreshold) {\r\n array.push(value);\r\n i++;\r\n }\r\n } else {\r\n array.push(value);\r\n }\r\n\r\n if (array.length > bufferSize) {\r\n while (array.length > bufferSize) {\r\n array.shift();\r\n }\r\n }\r\n\r\n const l = array.length;\r\n let buffer = 0;\r\n\r\n for (let i = 0; i < l; i++) {\r\n buffer += array[i];\r\n }\r\n\r\n return l !== 0 ? Math.ceil(buffer / l) : 0;\r\n};\r\n","export const objectAsReadonly = <T = { [x: string]: any } | null | undefined>(source: T) => {\r\n if (!source) {\r\n return source;\r\n }\r\n\r\n const result = {} as T;\r\n for (const prop in source) {\r\n const value = source[prop];\r\n Object.defineProperty(result, prop, {\r\n value,\r\n writable: false,\r\n enumerable: true,\r\n });\r\n }\r\n\r\n return result;\r\n};\r\n\r\nexport const copyValueAsReadonly = <T = any>(source: T) => {\r\n if (!source) {\r\n return source;\r\n }\r\n\r\n if (Array.isArray(source)) {\r\n return Object.freeze([...source]) as unknown as T;\r\n }\r\n\r\n if (typeof source === 'object') {\r\n return objectAsReadonly(source);\r\n }\r\n\r\n return source;\r\n}","export const START_COLLECTION_PREFIX_ID = 'n',\r\n END_COLLECTION_PREFIX_ID = 'p',\r\n DEFAULT_BUFFER_EXTREMUM_THRESHOLD = 15,\r\n DEFAULT_MAX_BUFFER_SEQUENCE_LENGTH = 30,\r\n DEFAULT_RESET_BUFFER_SIZE_TIMEOUT = 10000,\r\n IS_NEW = 'n';;\r\n","/**\r\n * ItemDisplayMethods\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/core/enums/item-display-methods.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum ItemDisplayMethods {\r\n CREATE,\r\n UPDATE,\r\n DELETE,\r\n NOT_CHANGED,\r\n}","import { ComponentRef } from \"@angular/core\";\r\nimport { IRenderVirtualListCollection, } from \"../models/render-collection.model\";\r\nimport { IRenderVirtualListItem } from \"../models/render-item.model\";\r\nimport { Id } from \"../types/id\";\r\nimport { CACHE_BOX_CHANGE_EVENT_NAME, CacheMap } from \"./cache-map\";\r\nimport { Tracker } from \"./tracker\";\r\nimport { IRect, ISize } from \"../interfaces\";\r\nimport {\r\n DEFAULT_DIVIDES, HEIGHT_PROP_NAME, SERVICE_PROP_DUMMY, SERVICE_PROP_DUMMY_ENABLED, TRACK_BY_PROPERTY_NAME, WIDTH_PROP_NAME,\r\n X_PROP_NAME, Y_PROP_NAME,\r\n} from \"../const\";\r\nimport { IRenderVirtualListItemConfig, IRenderVirtualListItemMeasures, IVirtualListItemConfigMap } from \"../models\";\r\nimport { debounce } from \"../utils\";\r\nimport { CMap } from '../utils/cmap';\r\nimport { bufferInterpolation } from \"../utils/buffer-interpolation\";\r\nimport { BaseVirtualListItemComponent } from \"../components/ng-list-item/base\";\r\nimport { PrerenderCache } from \"../components/ng-prerender-container/types/cache\";\r\nimport { ScrollDirection } from \"../types\";\r\nimport { objectAsReadonly } from \"../utils/object\";\r\nimport { getServiceIdProp } from \"./utils\";\r\nimport {\r\n DEFAULT_BUFFER_EXTREMUM_THRESHOLD, DEFAULT_MAX_BUFFER_SEQUENCE_LENGTH, DEFAULT_RESET_BUFFER_SIZE_TIMEOUT, END_COLLECTION_PREFIX_ID,\r\n IS_NEW, START_COLLECTION_PREFIX_ID,\r\n} from \"./const\";\r\nimport { Z_INDEX_0, Z_INDEX_1, Z_INDEX_2, Z_INDEX_3, } from '../const';\r\nimport {\r\n IGetItemPositionOptions, IGetMetricsReturns, IItem, IMetrics, IRecalculateMetricsOptions, IUpdateCollectionOptions,\r\n IUpdateCollectionReturns,\r\n} from \"./interfaces\";\r\nimport { TrackBoxEvents } from \"./events\";\r\nimport { Cache, CacheMapEvents, CacheMapListeners } from \"./types\";\r\nimport { ItemDisplayMethods } from \"./enums\";\r\n\r\n/**\r\n * An object that performs tracking, calculations and caching.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/core/track-box.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class TrackBox<C extends BaseVirtualListItemComponent = any>\r\n extends CacheMap<Id, Cache, CacheMapEvents, CacheMapListeners> {\r\n\r\n protected _tracker!: Tracker<C>;\r\n\r\n protected _items: IRenderVirtualListCollection | null | undefined;\r\n\r\n set items(v: IRenderVirtualListCollection | null | undefined) {\r\n if (this._items === v) {\r\n return;\r\n }\r\n\r\n this._items = v;\r\n }\r\n\r\n protected _displayComponents: Array<ComponentRef<C>> | null | undefined;\r\n\r\n set displayComponents(v: Array<ComponentRef<C>> | null | undefined) {\r\n if (this._displayComponents === v) {\r\n return;\r\n }\r\n\r\n this._displayComponents = v;\r\n }\r\n\r\n protected _snappedDisplayComponents: Array<ComponentRef<C>> | null | undefined;\r\n\r\n set snappedDisplayComponents(v: Array<ComponentRef<C>> | null | undefined) {\r\n if (this._snappedDisplayComponents === v) {\r\n return;\r\n }\r\n\r\n this._snappedDisplayComponents = v;\r\n }\r\n\r\n protected _scrollDirection: ScrollDirection = 0;\r\n set scrollDirection(v: ScrollDirection) {\r\n if (this._scrollDirection === v) {\r\n return;\r\n }\r\n\r\n this._scrollDirection = v;\r\n }\r\n get scrollDirection() { return this._scrollDirection; }\r\n\r\n protected _trackBy: string = TRACK_BY_PROPERTY_NAME;\r\n set trackBy(v: string) {\r\n if (this._trackBy === v) {\r\n return;\r\n }\r\n\r\n this._trackBy = v;\r\n }\r\n get trackBy() { return this._trackBy; }\r\n\r\n protected _divides: number = DEFAULT_DIVIDES;\r\n\r\n set divides(v: number) {\r\n if (this._divides === v) {\r\n return;\r\n }\r\n\r\n this._divides = v;\r\n }\r\n\r\n protected _isInfinity: boolean = false;\r\n\r\n set isInfinity(v: boolean) {\r\n if (this._isInfinity === v) {\r\n return;\r\n }\r\n\r\n this._isInfinity = v;\r\n }\r\n\r\n protected _isSnappingMethodAdvanced: boolean = false;\r\n\r\n set isSnappingMethodAdvanced(v: boolean) {\r\n if (this._isSnappingMethodAdvanced === v) {\r\n return;\r\n }\r\n\r\n this._isSnappingMethodAdvanced = v;\r\n }\r\n\r\n protected _isLazy: boolean = false;\r\n\r\n set isLazy(v: boolean) {\r\n if (this._isLazy === v) {\r\n return;\r\n }\r\n\r\n this._isLazy = v;\r\n }\r\n\r\n /**\r\n * Set the trackBy property\r\n */\r\n set trackingPropertyName(v: string) {\r\n this._trackingPropertyName = this._tracker.trackingPropertyName = v;\r\n }\r\n\r\n protected _trackingPropertyName: string = TRACK_BY_PROPERTY_NAME;\r\n\r\n protected _isScrollStart: boolean = false;\r\n\r\n set isScrollStart(v: boolean) {\r\n this._isScrollStart = v;\r\n if (v) {\r\n this._isScrollSnapToStart = true;\r\n }\r\n }\r\n\r\n protected _isScrollEnd: boolean = false;\r\n\r\n set isScrollEnd(v: boolean) {\r\n this._isScrollEnd = v;\r\n if (v) {\r\n this._isScrollSnapToEnd = true;\r\n }\r\n }\r\n\r\n protected _isScrollSnapToStart: boolean = false;\r\n\r\n get isSnappedToStart() {\r\n return this._isScrollStart || this._isScrollSnapToStart;\r\n }\r\n\r\n protected _isScrollSnapToEnd: boolean = false;\r\n\r\n get isSnappedToEnd() {\r\n return this._isScrollEnd || this._isScrollSnapToEnd;\r\n }\r\n\r\n protected _scrollStartOffset: number = 0;\r\n set scrollStartOffset(v: number) {\r\n this._scrollStartOffset = v;\r\n }\r\n get scrollStartOffset() {\r\n return this._scrollStartOffset;\r\n }\r\n\r\n protected _scrollEndOffset: number = 0;\r\n set scrollEndOffset(v: number) {\r\n this._scrollEndOffset = v;\r\n }\r\n get scrollEndOffset() {\r\n return this._scrollEndOffset;\r\n }\r\n\r\n constructor(trackingPropertyName: string) {\r\n super();\r\n\r\n this._trackingPropertyName = trackingPropertyName;\r\n\r\n this.initialize();\r\n }\r\n\r\n protected initialize() {\r\n this._tracker = new Tracker(this._trackingPropertyName);\r\n }\r\n\r\n override set(id: Id, cache: Cache): CMap<Id, ISize> {\r\n if (this._map.has(id)) {\r\n const b = this._map.get(id);\r\n if (b?.width === cache.width && b?.height === cache.height) {\r\n return this._map;\r\n }\r\n }\r\n\r\n const v = this._map.set(id, cache);\r\n\r\n this.bumpVersion();\r\n return v;\r\n }\r\n\r\n protected _previousCollection: Array<IItem> | null | undefined;\r\n\r\n protected _deletedItemsMap: { [index: number]: ISize } = {};\r\n\r\n protected _crudDetected = false;\r\n get crudDetected() { return this._crudDetected; }\r\n\r\n protected override fireChangeIfNeed() {\r\n if (this.changesDetected()) {\r\n this.dispatch(TrackBoxEvents.CHANGE, this._version);\r\n }\r\n }\r\n\r\n protected fireTick() {\r\n this.dispatch(TrackBoxEvents.TICK);\r\n }\r\n\r\n protected _previousTotalSize = 0;\r\n\r\n protected _deltaOfNewItems: number = 0;\r\n get deltaOfNewItems() { return this._deltaOfNewItems; }\r\n\r\n isAdaptiveBuffer = true;\r\n\r\n protected _bufferSequenceExtraThreshold = DEFAULT_BUFFER_EXTREMUM_THRESHOLD;\r\n\r\n protected _maxBufferSequenceLength = DEFAULT_MAX_BUFFER_SEQUENCE_LENGTH;\r\n\r\n protected _bufferSizeSequence: Array<number> = [];\r\n\r\n protected _bufferSize: number = 0;\r\n get bufferSize() { return this._bufferSize; }\r\n\r\n protected _defaultBufferSize: number = 0;\r\n\r\n protected _maxBufferSize: number = this._defaultBufferSize;\r\n\r\n protected _resetBufferSizeTimeout: number = DEFAULT_RESET_BUFFER_SIZE_TIMEOUT;\r\n\r\n protected _resetBufferSizeTimer: number | undefined;\r\n\r\n protected _isReseted: boolean = true;\r\n\r\n private _prerenderedCache: PrerenderCache | null = null;\r\n\r\n private _newItems: Array<Id> = [];\r\n\r\n protected override lifeCircle() {\r\n this.fireChangeIfNeed();\r\n\r\n this.fireTick();\r\n\r\n this.lifeCircleDo();\r\n }\r\n\r\n /**\r\n * Scans the collection for deleted items and flushes the deleted item cache.\r\n */\r\n resetCollection<I extends IItem, C extends Array<I>>(currentCollection: C | null | undefined,\r\n itemSize: number): void {\r\n if (currentCollection !== undefined && currentCollection !== null &&\r\n currentCollection === this._previousCollection) {\r\n console.warn('Attention! The collection must be immutable.');\r\n return;\r\n }\r\n\r\n const reseted = ((!this._previousCollection || this._previousCollection.length === 0) &&\r\n (!!currentCollection && currentCollection.length > 0));\r\n\r\n this._isReseted = reseted;\r\n\r\n this.updateCache(this._previousCollection, currentCollection, itemSize);\r\n\r\n this._previousCollection = [...(currentCollection || [])];\r\n }\r\n\r\n /**\r\n * Update the cache of items from the list\r\n */\r\n protected updateCache<I extends IItem, C extends Array<I>>(previousCollection: C | null | undefined,\r\n currentCollection: C | null | undefined,\r\n itemSize: number): void {\r\n const trackBy = this._trackingPropertyName;\r\n let crudDetected = false;\r\n this._newItems = [];\r\n\r\n if (!currentCollection || currentCollection.length === 0) {\r\n if (previousCollection) {\r\n // deleted\r\n for (let i = 0, l = previousCollection.length; i < l; i++) {\r\n const item = previousCollection[i], id = item?.[trackBy];\r\n crudDetected = true;\r\n if (!!item && this._map.has(id)) {\r\n this._map.delete(id);\r\n }\r\n }\r\n }\r\n return;\r\n }\r\n if (!previousCollection || previousCollection.length === 0) {\r\n if (currentCollection) {\r\n // added\r\n for (let i = 0, l = currentCollection.length; i < l; i++) {\r\n crudDetected = true;\r\n const item = currentCollection[i], id = item?.[trackBy];\r\n if (!!item) {\r\n this._map.set(id, { width: itemSize, height: itemSize, method: ItemDisplayMethods.CREATE });\r\n }\r\n }\r\n }\r\n return;\r\n }\r\n const collectionDict: IItem<I> = {};\r\n for (let i = 0, l = currentCollection.length; i < l; i++) {\r\n const item = currentCollection[i];\r\n if (!!item) {\r\n collectionDict[item[trackBy]] = item;\r\n }\r\n }\r\n const notChangedMap: IItem<I> = {}, deletedMap: IItem<I> = {}, deletedItemsMap: { [index: number]: ISize } = {},\r\n updatedMap: IItem<I> = {};\r\n for (let i = 0, l = previousCollection.length; i < l; i++) {\r\n const item = previousCollection[i], id = item?.[trackBy];\r\n if (!!item) {\r\n if (collectionDict.hasOwnProperty(id)) {\r\n if (item === collectionDict[id]) {\r\n // not changed\r\n notChangedMap[item[trackBy]] = item;\r\n this._map.set(id, {\r\n ...(this._map.get(id) || { width: itemSize, height: itemSize }),\r\n method: ItemDisplayMethods.NOT_CHANGED\r\n });\r\n continue;\r\n } else {\r\n // updated\r\n crudDetected = true;\r\n updatedMap[item[trackBy]] = item;\r\n this._map.set(id, {\r\n ...(this._map.get(id) || { width: itemSize, height: itemSize }),\r\n method: ItemDisplayMethods.UPDATE\r\n });\r\n continue;\r\n }\r\n }\r\n\r\n // deleted\r\n crudDetected = true;\r\n deletedMap[id] = item;\r\n deletedItemsMap[i] = this._map.get(id);\r\n this._map.delete(id);\r\n }\r\n }\r\n\r\n for (let i = 0, l = currentCollection.length; i < l; i++) {\r\n const item = currentCollection[i], id = item?.[trackBy];\r\n if (!!item && !deletedMap.hasOwnProperty(id) && !updatedMap.hasOwnProperty(id) &&\r\n !notChangedMap.hasOwnProperty(id)) {\r\n this._newItems.push(id);\r\n // added\r\n crudDetected = true;\r\n this._map.set(id, { width: itemSize, height: itemSize, method: ItemDisplayMethods.CREATE });\r\n }\r\n }\r\n this._crudDetected = crudDetected;\r\n this._deletedItemsMap = deletedItemsMap;\r\n }\r\n\r\n /**\r\n * Finds the position of a collection element by the given Id\r\n */\r\n getItemPosition<I extends IItem, C extends Array<I>>(id: Id, itemConfigMap: IVirtualListItemConfigMap,\r\n options: IGetItemPositionOptions<I, C>): number {\r\n const opt = { fromItemId: id ?? options.fromItemId, itemConfigMap, ...options };\r\n this._defaultBufferSize = opt.bufferSize;\r\n this._maxBufferSize = opt.maxBufferSize;\r\n\r\n const { scrollSize, isFromItemIdFound } = this.recalculateMetrics({\r\n ...opt,\r\n dynamicSize: this._crudDetected || opt.dynamicSize,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap: this._deletedItemsMap,\r\n });\r\n return isFromItemIdFound ? scrollSize : -1;\r\n }\r\n\r\n preventScrollSnapping(clearBuffer: boolean = false) {\r\n this._isScrollStart = this._isScrollEnd = false;\r\n\r\n if (clearBuffer) {\r\n this._isScrollSnapToStart = this._isScrollSnapToEnd = false;\r\n }\r\n }\r\n\r\n /**\r\n * Updates the collection of display objects\r\n */\r\n getMetrics<I extends IItem, C extends Array<I>>(items: C, itemConfigMap: IVirtualListItemConfigMap,\r\n options: IUpdateCollectionOptions<I, C>): IGetMetricsReturns {\r\n const opt = { itemConfigMap, ...options }, crudDetected = this._crudDetected,\r\n deletedItemsMap = this._deletedItemsMap;\r\n this._defaultBufferSize = opt.bufferSize;\r\n this._maxBufferSize = opt.maxBufferSize;\r\n\r\n const metrics = this.recalculateMetrics({\r\n ...opt,\r\n collection: items,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap,\r\n });\r\n\r\n return { totalSize: metrics.totalSize, delta: metrics.delta, crudDetected };\r\n }\r\n\r\n /**\r\n * Updates the collection of display objects\r\n */\r\n updateCollection<I extends IItem, C extends Array<I>>(items: C, itemConfigMap: IVirtualListItemConfigMap,\r\n options: IUpdateCollectionOptions<I, C>): IUpdateCollectionReturns {\r\n const opt = { itemConfigMap, ...options }, dynamicSize = opt.dynamicSize, crudDetected = this._crudDetected,\r\n deletedItemsMap = this._deletedItemsMap;\r\n if (dynamicSize) {\r\n this.cacheElements(opt.isVertical, opt.itemSize);\r\n }\r\n this._defaultBufferSize = opt.bufferSize;\r\n this._maxBufferSize = opt.maxBufferSize;\r\n\r\n const metrics = this.recalculateMetrics({\r\n ...opt,\r\n collection: items,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap,\r\n });\r\n\r\n this._delta += metrics.delta;\r\n\r\n this.updateAdaptiveBufferParams(metrics, items.length);\r\n\r\n this._previousTotalSize = metrics.totalSize;\r\n\r\n this._deletedItemsMap = {};\r\n\r\n this._crudDetected = false;\r\n\r\n if (opt.dynamicSize) {\r\n this.snapshot();\r\n }\r\n\r\n const displayItems = this.generateDisplayCollection(metrics.items, items, itemConfigMap, { ...metrics, });\r\n return { displayItems, totalSize: metrics.totalSize, delta: metrics.delta, crudDetected, leftLayoutOffset: metrics.leftLayoutOffset };\r\n }\r\n\r\n protected _previousScrollSize = 0;\r\n\r\n protected updateAdaptiveBufferParams<I extends IItem>(metrics: IMetrics<I>, totalItemsLength: number) {\r\n this.disposeClearBufferSizeTimer();\r\n\r\n const scrollSize = metrics.scrollSize + this._delta, delta = Math.abs(this._previousScrollSize - scrollSize);\r\n this._previousScrollSize = scrollSize;\r\n const bufferRawSize = Math.min(Math.floor(metrics.typicalItemSize !== 0 ? delta / metrics.typicalItemSize : 0) * 5, totalItemsLength),\r\n minBufferSize = bufferRawSize < this._defaultBufferSize ? this._defaultBufferSize : bufferRawSize,\r\n bufferValue = minBufferSize > this._maxBufferSize ? this._maxBufferSize : minBufferSize;\r\n\r\n this._bufferSize = bufferInterpolation(this._bufferSize, this._bufferSizeSequence, bufferValue, {\r\n extremumThreshold: this._bufferSequenceExtraThreshold,\r\n bufferSize: this._maxBufferSequenceLength,\r\n });\r\n\r\n this.startResetBufferSizeTimer();\r\n }\r\n\r\n protected startResetBufferSizeTimer() {\r\n this._resetBufferSizeTimer = setTimeout(() => {\r\n this._bufferSize = this._defaultBufferSize;\r\n this._bufferSizeSequence = [];\r\n }, this._resetBufferSizeTimeout) as unknown as number;\r\n }\r\n\r\n protected disposeClearBufferSizeTimer() {\r\n clearTimeout(this._resetBufferSizeTimer);\r\n }\r\n\r\n /**\r\n * Calculates the entry into the overscroll area and returns the number of overscroll elements\r\n */\r\n protected getElementNumToEnd<I extends IItem, C extends Array<I>>(i: number, collection: C, map: CMap<Id, ISize>, typicalItemSize: number,\r\n size: number, isVertical: boolean, indexOffset: number = 0, reverse: boolean = false): { num: number, offset: number } {\r\n const trackBy = this._trackingPropertyName, sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME;\r\n let offset = 0, num = 0;\r\n for (let j = collection.length - indexOffset - 1; reverse ? j >= 0 : j >= i; j--) {\r\n const item = collection[j], id = item[trackBy];\r\n let itemSize = 0;\r\n if (map.has(id)) {\r\n const cache = map.get(id);\r\n itemSize = cache && cache[sizeProperty] > 0 ? cache[sizeProperty] : typicalItemSize;\r\n } else {\r\n itemSize = typicalItemSize;\r\n }\r\n if (offset + itemSize > size) {\r\n return { num, offset };\r\n }\r\n offset += itemSize;\r\n num++;\r\n }\r\n return { num, offset };\r\n }\r\n\r\n /**\r\n * Calculates list metrics\r\n */\r\n protected recalculateMetrics<I extends IItem, C extends Array<I>>(options: IRecalculateMetricsOptions<I, C>): IMetrics<I> {\r\n const { fromItemId, bounds, collection, dynamicSize, isVertical, itemSize, minItemSize, maxItemSize, bufferSize: minBufferSize,\r\n scrollSize, stickyEnabled, itemConfigMap, enabledBufferOptimization, previousTotalSize, snapToItem, snapToItemAlign,\r\n deletedItemsMap, itemTransform } = options as IRecalculateMetricsOptions<I, C> & {\r\n itemConfigMap: IVirtualListItemConfigMap,\r\n }, roundedScrollSize = Math.round(scrollSize);\r\n\r\n const trackBy = this._trackingPropertyName, bufferSize = Math.max(minBufferSize, this._bufferSize),\r\n { width, height } = bounds, sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME,\r\n size = isVertical ? height : width, totalLength = collection.length, typicalItemSize = itemSize,\r\n w = isVertical ? width : typicalItemSize, h = isVertical ? typicalItemSize : height,\r\n map = this._map, snapshot = this._snapshot, divides = this._divides,\r\n stickyPos = Math.floor(scrollSize) + this._scrollStartOffset, leftItemsOrRowsWeights: Array<number> = [],\r\n isFromId = fromItemId !== undefined && (typeof fromItemId === 'number' && fromItemId > -1)\r\n || (typeof fromItemId === 'string' && fromItemId > '-1');\r\n\r\n let leftItemsOffset = 0, rightItemsOffset = 0;\r\n if (enabledBufferOptimization) {\r\n switch (this._scrollDirection) {\r\n case 1: {\r\n leftItemsOffset = 0;\r\n rightItemsOffset = bufferSize * divides;\r\n break;\r\n }\r\n case -1: {\r\n leftItemsOffset = bufferSize * divides;\r\n rightItemsOffset = 0;\r\n break;\r\n }\r\n case 0:\r\n default: {\r\n leftItemsOffset = rightItemsOffset = bufferSize * divides;\r\n }\r\n }\r\n } else {\r\n leftItemsOffset = rightItemsOffset = bufferSize * divides;\r\n }\r\n\r\n let itemsFromStartToScrollEnd: number = -1,\r\n itemsFromDisplayEndToOffsetEnd = 0,\r\n itemsFromStartToDisplayEnd = -1,\r\n leftItemLength = 0, rightItemLength = 0,\r\n leftItemsWeight = 0, rightItemsWeight = 0,\r\n leftHiddenItemsWeight = 0,\r\n totalItemsToDisplayEndWeight = 0,\r\n deltaOfNewItems = 0,\r\n leftSizeOfAddedItems = 0,\r\n leftSizeOfUpdatedItems = 0,\r\n leftSizeOfDeletedItems = 0,\r\n itemById: I | null = null,\r\n itemByIdPos: number = this._scrollStartOffset,\r\n isTargetInOverscroll: boolean = false,\r\n actualScrollSize = itemByIdPos,\r\n totalSize = this._scrollStartOffset + this._scrollEndOffset,\r\n startIndex: number,\r\n isFromItemIdFound = false,\r\n deltaFromStartCreation = 0,\r\n isUpdating = false,\r\n leftYOffset = 0,\r\n leftLayoutOffset = 0,\r\n leftLayoutIndexOffset = 0,\r\n rightLayoutIndexOffset = 0;\r\n\r\n const isStart = ((roundedScrollSize === 0) || this.isSnappedToStart);\r\n let stickyItemId: Id | undefined, isNew = false;\r\n\r\n let items: Array<I>;\r\n\r\n // If the list is dynamic or there are new elements in the collection, then it switches to the long algorithm.\r\n if (dynamicSize) {\r\n items = [];\r\n const serviceIdProp = getServiceIdProp(trackBy);\r\n if (isFromId) {\r\n for (let stickyId: Id | undefined = undefined, i = 0, l = collection.length; i < l; i++) {\r\n const item = collection[i], id = item?.[trackBy];\r\n if (itemConfigMap[id]?.sticky === 1) {\r\n stickyId = id;\r\n }\r\n if (!itemConfigMap[id]?.sticky) {\r\n stickyItemId = stickyId;\r\n }\r\n if (id == fromItemId) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let y = this._scrollStartOffset,\r\n stickyComponentSize = 0,\r\n row: {\r\n startItemIndex: number;\r\n endItemIndex: number;\r\n size: number;\r\n snapshotSize: number;\r\n deltaFromStartCreation: number;\r\n leftSizeOfAddedItems: number;\r\n leftSizeOfUpdatedItems: number;\r\n leftSizeOfDeletedItems: number;\r\n deltaOfNewItems: number;\r\n leftItemsOrRowsWeights: number | null;\r\n rightItemsWeight: number;\r\n leftHiddenItemsWeight: number;\r\n totalItemsToDisplayEndWeight: number;\r\n } = {\r\n startItemIndex: 0,\r\n endItemIndex: 0,\r\n size: 0,\r\n snapshotSize: 0,\r\n deltaFromStartCreation: 0,\r\n leftSizeOfAddedItems: 0,\r\n leftSizeOfUpdatedItems: 0,\r\n leftSizeOfDeletedItems: 0,\r\n deltaOfNewItems: 0,\r\n leftItemsOrRowsWeights: null,\r\n rightItemsWeight: 0,\r\n leftHiddenItemsWeight: 0,\r\n totalItemsToDisplayEndWeight: 0,\r\n };\r\n const calculate = (i: number, l: number, li: number, isPrecollection: boolean = false, idPrefix: string | null = null) => {\r\n const ii = i + 1;\r\n if (ii > l) {\r\n return false;\r\n }\r\n const collectionItem = collection[i],\r\n id = collectionItem[trackBy],\r\n sticky = itemConfigMap?.[id]?.sticky ?? 0,\r\n isNewRow = i % divides === 0,\r\n isLastItemInRow = ii % divides === 0,\r\n isLastItem = i === li,\r\n isRowEnd = (isLastItemInRow || (!isLastItemInRow && isLastItem));\r\n items.push(isPrecollection ? { ...collectionItem, [serviceIdProp]: `_${idPrefix}-${id}_` } : collectionItem);\r\n if (isNewRow || row === null) {\r\n row = {\r\n startItemIndex: i + 1,\r\n endItemIndex: i + divides,\r\n size: 0,\r\n snapshotSize: 0,\r\n deltaFromStartCreation: 0,\r\n leftSizeOfAddedItems: 0,\r\n leftSizeOfUpdatedItems: 0,\r\n leftSizeOfDeletedItems: 0,\r\n deltaOfNewItems: 0,\r\n leftItemsOrRowsWeights: null,\r\n rightItemsWeight: 0,\r\n leftHiddenItemsWeight: 0,\r\n totalItemsToDisplayEndWeight: 0,\r\n };\r\n }\r\n let componentSize = 0, rowSizeDelta = 0, itemDisplayMethod: ItemDisplayMethods = ItemDisplayMethods.NOT_CHANGED;\r\n if (map.has(id)) {\r\n const cache = map.get(id);\r\n componentSize = cache[sizeProperty] > 0 ? cache[sizeProperty] : typicalItemSize;\r\n itemDisplayMethod = cache?.method ?? ItemDisplayMethods.UPDATE;\r\n const isItemNew = this._newItems.indexOf(id) > -1 || (this._isLazy && isStart && !this._isReseted);\r\n isNew = isItemNew;\r\n if (isNew) {\r\n isUpdating = true;\r\n }\r\n const snapshotBounds = snapshot.get(id),\r\n snapshotSize = snapshotBounds ? snapshotBounds[sizeProperty] : typicalItemSize;\r\n\r\n row.size = Math.max(row.size, componentSize);\r\n row.snapshotSize = Math.max(row.snapshotSize, snapshotSize);\r\n\r\n rowSizeDelta = row.size - row.snapshotSize;\r\n\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.UPDATE: {\r\n map.set(id, { ...cache, method: isNew ? ItemDisplayMethods.UPDATE : ItemDisplayMethods.NOT_CHANGED, [IS_NEW]: isNew });\r\n if (isRowEnd && isNew && y <= (scrollSize + size + deltaFromStartCreation + componentSize)) {\r\n row.deltaFromStartCreation = rowSizeDelta;\r\n rowSizeDelta = 0;\r\n }\r\n break;\r\n }\r\n case ItemDisplayMethods.CREATE: {\r\n rowSizeDelta = typicalItemSize;\r\n map.set(id, { ...cache, method: ItemDisplayMethods.UPDATE, [IS_NEW]: isNew });\r\n if (isRowEnd && isNew && y <= (scrollSize + size + deltaFromStartCreation + componentSize)) {\r\n row.deltaFromStartCreation = rowSizeDelta;\r\n rowSizeDelta = 0;\r\n }\r\n break;\r\n }\r\n }\r\n } else {\r\n componentSize = typicalItemSize;\r\n row.size = Math.max(row.size, componentSize);\r\n row.snapshotSize = row.size;\r\n rowSizeDelta = row.size - row.snapshotSize;\r\n }\r\n\r\n if (deletedItemsMap.hasOwnProperty(i)) {\r\n const cache = deletedItemsMap[i], size = cache?.[sizeProperty] ?? typicalItemSize;\r\n if (y < scrollSize + this._scrollStartOffset - size) {\r\n row.leftSizeOfDeletedItems = Math.max(row.leftSizeOfDeletedItems, size);\r\n }\r\n }\r\n\r\n if (isFromId) {\r\n if (itemById === null) {\r\n if (id != fromItemId && id === stickyItemId && sticky === 1) {\r\n stickyComponentSize = componentSize;\r\n y -= stickyComponentSize;\r\n }\r\n\r\n if (id == fromItemId) {\r\n isFromItemIdFound = true;\r\n\r\n const { num, offset } = this.getElementNumToEnd(i, collection, map, typicalItemSize, size, isVertical),\r\n leftViewportSize = size - offset;\r\n if (leftViewportSize > 0) {\r\n const { num: num1, offset: offset1 } = this.getElementNumToEnd(i + num, collection, map, typicalItemSize, size, isVertical, 0, true),\r\n deltaNum = (num1 - num), deltaOffset = (offset1 - offset);\r\n totalItemsToDisplayEndWeight += offset;\r\n itemsFromStartToScrollEnd -= deltaNum;\r\n rightItemsWeight = rightItemLength = 0;\r\n leftHiddenItemsWeight -= deltaOffset;\r\n leftItemsOrRowsWeights.splice(leftItemsOrRowsWeights.length - deltaNum, deltaNum);\r\n y -= deltaOffset;\r\n }\r\n\r\n itemById = collectionItem;\r\n itemByIdPos = y;\r\n } else {\r\n leftItemsOrRowsWeights.push(componentSize);\r\n leftHiddenItemsWeight += componentSize;\r\n itemsFromStartToScrollEnd = row.startItemIndex;\r\n }\r\n }\r\n } else if (y <= scrollSize - componentSize) {\r\n if (row.leftItemsOrRowsWeights === null) {\r\n row.leftItemsOrRowsWeights = 0;\r\n }\r\n row.leftItemsOrRowsWeights = Math.max(row.leftItemsOrRowsWeights, componentSize);\r\n row.leftHiddenItemsWeight = Math.max(row.leftHiddenItemsWeight, componentSize);\r\n if (!isPrecollection) {\r\n itemsFromStartToScrollEnd = row.startItemIndex;\r\n }\r\n }\r\n\r\n if (isFromId) {\r\n if (itemById === null || y < itemByIdPos + size + componentSize) {\r\n itemsFromStartToDisplayEnd = row.endItemIndex;\r\n totalItemsToDisplayEndWeight += componentSize;\r\n itemsFromDisplayEndToOffsetEnd = itemsFromStartToDisplayEnd + rightItemsOffset;\r\n }\r\n } else if (y <= scrollSize + size + componentSize) {\r\n if (!isPrecollection) {\r\n itemsFromStartToDisplayEnd = row.endItemIndex;\r\n itemsFromDisplayEndToOffsetEnd = itemsFromStartToDisplayEnd + rightItemsOffset;\r\n }\r\n row.totalItemsToDisplayEndWeight = Math.max(row.totalItemsToDisplayEndWeight, componentSize);\r\n\r\n if (isRowEnd && y <= scrollSize + componentSize) {\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.CREATE: {\r\n row.leftSizeOfAddedItems = rowSizeDelta;\r\n break;\r\n }\r\n case ItemDisplayMethods.UPDATE:\r\n case ItemDisplayMethods.NOT_CHANGED: {\r\n row.leftSizeOfUpdatedItems = rowSizeDelta;\r\n break;\r\n }\r\n case ItemDisplayMethods.DELETE: {\r\n row.leftSizeOfDeletedItems = rowSizeDelta;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (isRowEnd && itemDisplayMethod === ItemDisplayMethods.CREATE) {\r\n row.deltaOfNewItems = rowSizeDelta;\r\n }\r\n } else {\r\n if (isRowEnd && i < itemsFromDisplayEndToOffsetEnd) {\r\n row.rightItemsWeight = Math.max(row.rightItemsWeight, componentSize);\r\n }\r\n }\r\n\r\n if (isRowEnd) {\r\n if (!isPrecollection) {\r\n deltaFromStartCreation += row.deltaFromStartCreation;\r\n leftSizeOfAddedItems += row.leftSizeOfAddedItems;\r\n leftSizeOfUpdatedItems += row.leftSizeOfUpdatedItems;\r\n leftSizeOfDeletedItems += row.leftSizeOfDeletedItems;\r\n deltaOfNewItems += row.deltaOfNewItems;\r\n rightItemsWeight += row.rightItemsWeight;\r\n totalItemsToDisplayEndWeight += row.totalItemsToDisplayEndWeight;\r\n leftHiddenItemsWeight += row.leftHiddenItemsWeight;\r\n if (row.leftItemsOrRowsWeights !== null) {\r\n leftItemsOrRowsWeights.push(row.leftItemsOrRowsWeights);\r\n }\r\n }\r\n totalSize += row.size;\r\n y += row.size;\r\n }\r\n return true;\r\n }\r\n\r\n if (this._isInfinity) {\r\n const viewportSize = isVertical ? height : width;\r\n let buffSize = -1;\r\n if (scrollSize <= viewportSize) {\r\n let i = 0, l = collection.length, li = l > 0 ? (l - 1) : 0;\r\n if (l > 0) {\r\n const limit = viewportSize;\r\n while (y <= limit || buffSize > -1) {\r\n const ii = i + 1;\r\n if (buffSize === -1) {\r\n buffSize = leftItemsOffset;\r\n }\r\n if (y >= limit) {\r\n buffSize--;\r\n }\r\n if (!calculate(li - i, l, li, true, START_COLLECTION_PREFIX_ID)) {\r\n break;\r\n }\r\n if (ii === l) {\r\n i = 0;\r\n } else {\r\n i++;\r\n }\r\n }\r\n\r\n items.reverse();\r\n leftYOffset = y;\r\n leftLayoutOffset = viewportSize * .5;\r\n leftLayoutIndexOffset = i;\r\n y = this._scrollStartOffset;\r\n totalSize = this._scrollStartOffset + this._scrollEndOffset;\r\n itemsFromStartToDisplayEnd = itemsFromDisplayEndToOffsetEnd = 0;\r\n\r\n (row as any) = null;\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0, l = collection.length, li = l - 1; i < l; i++) {\r\n if (!calculate(i, l, li)) {\r\n break;\r\n }\r\n }\r\n\r\n if (this._isInfinity) {\r\n (row as any) = null;\r\n\r\n const yy = y, currentTotalSize = totalSize, viewportSize = isVertical ? height : width,\r\n normalizedTotalSize = totalSize + viewportSize;\r\n row = {\r\n startItemIndex: 0,\r\n endItemIndex: 0,\r\n size: 0,\r\n snapshotSize: 0,\r\n deltaFromStartCreation: 0,\r\n leftSizeOfAddedItems: 0,\r\n leftSizeOfUpdatedItems: 0,\r\n leftSizeOfDeletedItems: 0,\r\n deltaOfNewItems: 0,\r\n leftItemsOrRowsWeights: null,\r\n rightItemsWeight: 0,\r\n leftHiddenItemsWeight: 0,\r\n totalItemsToDisplayEndWeight: 0,\r\n };\r\n const l = collection.length, li = l - 1;\r\n let i = 0, count = 0;\r\n while (y < normalizedTotalSize) {\r\n const ii = i + 1;\r\n if (!calculate(i, l, li, true, END_COLLECTION_PREFIX_ID)) {\r\n break;\r\n }\r\n if (ii === l) {\r\n i = 0;\r\n } else {\r\n i++;\r\n }\r\n count++;\r\n }\r\n y = yy;\r\n totalSize = currentTotalSize;\r\n rightLayoutIndexOffset = count;\r\n }\r\n\r\n actualScrollSize = (isFromId ? itemByIdPos : scrollSize);\r\n\r\n if (itemsFromStartToScrollEnd <= -1) {\r\n itemsFromStartToScrollEnd = 0;\r\n }\r\n if (itemsFromStartToDisplayEnd <= -1) {\r\n itemsFromStartToDisplayEnd = 0;\r\n }\r\n\r\n leftItemsOrRowsWeights.splice(0, leftItemsOrRowsWeights.length - bufferSize);\r\n leftItemsOrRowsWeights.forEach(v => {\r\n leftItemsWeight += v;\r\n });\r\n\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, leftItemsOffset);\r\n rightItemLength = itemsFromStartToDisplayEnd + rightItemsOffset > totalLength\r\n ? totalLength - itemsFromStartToDisplayEnd : rightItemsOffset;\r\n\r\n startIndex = (Math.ceil(Math.min(itemsFromStartToScrollEnd - leftItemLength, totalLength > 0 ? totalLength - 1 : 0) / divides) * divides);\r\n } else\r\n // Buffer optimization does not work on fast linear algorithm\r\n {\r\n const dividedTypicalItemSize = typicalItemSize / divides, bufferItemNumbers = bufferSize * divides;\r\n itemsFromStartToScrollEnd = Math.floor(dividedTypicalItemSize !== 0 ? (scrollSize / dividedTypicalItemSize) : 0);\r\n itemsFromStartToDisplayEnd = Math.ceil(dividedTypicalItemSize !== 0 ? ((scrollSize + size) / dividedTypicalItemSize) : 0);\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, bufferSize * divides);\r\n rightItemLength = (itemsFromStartToDisplayEnd + bufferItemNumbers) > totalLength\r\n ? totalLength - itemsFromStartToDisplayEnd : bufferItemNumbers;\r\n leftItemsWeight = Math.floor(leftItemLength * dividedTypicalItemSize / typicalItemSize) * typicalItemSize;\r\n rightItemsWeight = Math.floor(rightItemLength * dividedTypicalItemSize / typicalItemSize) * typicalItemSize;\r\n leftHiddenItemsWeight = Math.floor(itemsFromStartToScrollEnd * dividedTypicalItemSize / typicalItemSize) * typicalItemSize;\r\n totalItemsToDisplayEndWeight = Math.floor(itemsFromStartToDisplayEnd * dividedTypicalItemSize / typicalItemSize) * typicalItemSize;\r\n totalSize = (totalLength * dividedTypicalItemSize) + this._scrollStartOffset + this._scrollEndOffset;\r\n const k = totalSize !== 0 ? previousTotalSize / totalSize : 0;\r\n\r\n if (isFromId) {\r\n const index = collection.findIndex(item => item[trackBy] == fromItemId);\r\n if (index > -1) {\r\n itemByIdPos = this._scrollStartOffset + Math.floor(index * dividedTypicalItemSize / divides);\r\n isFromItemIdFound = true;\r\n }\r\n }\r\n\r\n actualScrollSize = (isFromId ? itemByIdPos : scrollSize * k);\r\n\r\n items = [];\r\n\r\n if (this._isInfinity) {\r\n const viewportSize = isVertical ? height : width;\r\n let buffSize = -1, y = this._scrollStartOffset;\r\n if (scrollSize <= viewportSize) {\r\n let i = 0, l = collection.length, li = l > 0 ? (l - 1) : 0;\r\n if (l > 0) {\r\n const limit = viewportSize;\r\n while (y <= limit || buffSize > -1) {\r\n const ii = i + 1;\r\n if (buffSize === -1) {\r\n buffSize = leftItemsOffset;\r\n }\r\n if (y >= limit) {\r\n buffSize--;\r\n }\r\n const itemIndex = li - i;\r\n if (collection.length > itemIndex) {\r\n items.push(collection[itemIndex] as I);\r\n } else {\r\n break;\r\n }\r\n const isLastItemInRow = ii % divides === 0,\r\n isLastItem = i === li;\r\n if (isLastItemInRow || (!isLastItemInRow && isLastItem)) {\r\n y += dividedTypicalItemSize;\r\n }\r\n if (ii === l) {\r\n i = 0;\r\n } else {\r\n i++;\r\n }\r\n }\r\n\r\n items.reverse();\r\n leftYOffset = y;\r\n leftLayoutOffset = viewportSize * .5;\r\n leftLayoutIndexOffset = i;\r\n }\r\n }\r\n }\r\n\r\n items.push(...collection);\r\n\r\n if (this._isInfinity) {\r\n let y = Math.floor(totalSize / dividedTypicalItemSize) * dividedTypicalItemSize;\r\n const viewportSize = isVertical ? height : width,\r\n normalizedTotalSize = totalSize + viewportSize;\r\n const l = collection.length, li = l - 1;\r\n let i = 0, count = 0;\r\n while (y < normalizedTotalSize) {\r\n const ii = i + 1;\r\n if (collection.length <= i) {\r\n break;\r\n }\r\n items.push(collection[i]);\r\n const isLastItemInRow = ii % divides === 0,\r\n isLastItem = i === li;\r\n if (isLastItemInRow || (!isLastItemInRow && isLastItem)) {\r\n y += dividedTypicalItemSize;\r\n }\r\n if (ii === l) {\r\n i = 0;\r\n } else {\r\n i++;\r\n }\r\n count++;\r\n }\r\n rightLayoutIndexOffset = count;\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, leftItemsOffset);\r\n rightItemLength = itemsFromStartToDisplayEnd + rightItemsOffset > totalLength\r\n ? totalLength - itemsFromStartToDisplayEnd : rightItemsOffset;\r\n\r\n startIndex = (Math.ceil(Math.min(itemsFromStartToScrollEnd - leftItemLength, totalLength > 0 ? totalLength - 1 : 0) / divides) * divides);\r\n } else {\r\n startIndex = Math.min(itemsFromStartToScrollEnd - leftItemLength, totalLength > 0 ? totalLength - 1 : 0);\r\n }\r\n }\r\n\r\n const itemsOnDisplayWeight = totalItemsToDisplayEndWeight - leftItemsWeight,\r\n itemsOnDisplayLength = itemsFromStartToDisplayEnd - itemsFromStartToScrollEnd,\r\n startPosition = this._scrollStartOffset + leftHiddenItemsWeight - leftItemsWeight - leftYOffset,\r\n renderItems = (Math.ceil((itemsOnDisplayLength + leftItemLength + rightItemLength) / divides) * divides) + rightLayoutIndexOffset,\r\n startCreationDelta = deltaFromStartCreation > 0 ? deltaFromStartCreation : 0,\r\n delta = leftSizeOfUpdatedItems + leftSizeOfAddedItems - leftSizeOfDeletedItems + startCreationDelta;\r\n this._deltaOfNewItems = deltaOfNewItems;\r\n\r\n if (isFromId && !isTargetInOverscroll) {\r\n actualScrollSize -= this._scrollStartOffset;\r\n }\r\n\r\n const metrics: IMetrics<I> = {\r\n delta,\r\n normalizedItemWidth: w,\r\n normalizedItemHeight: h,\r\n width,\r\n height,\r\n dynamicSize,\r\n divides,\r\n itemSize,\r\n minItemSize,\r\n maxItemSize,\r\n items,\r\n itemsFromStartToScrollEnd,\r\n itemsFromStartToDisplayEnd,\r\n itemsOnDisplayWeight,\r\n itemsOnDisplayLength,\r\n isVertical,\r\n leftHiddenItemsWeight,\r\n leftItemLength,\r\n leftItemsWeight,\r\n leftLayoutOffset,\r\n leftLayoutIndexOffset,\r\n renderItems,\r\n rightItemLength,\r\n rightItemsWeight,\r\n scrollSize: actualScrollSize,\r\n leftSizeOfAddedItems,\r\n sizeProperty,\r\n stickyEnabled,\r\n stickyPos,\r\n startIndex,\r\n startPosition,\r\n totalItemsToDisplayEndWeight,\r\n totalLength,\r\n totalSize,\r\n typicalItemSize,\r\n isFromItemIdFound,\r\n isUpdating,\r\n snapToItem,\r\n snapToItemAlign,\r\n itemTransform,\r\n };\r\n\r\n return metrics;\r\n }\r\n\r\n refreshCache(cache: PrerenderCache) {\r\n this._prerenderedCache = cache;\r\n }\r\n\r\n clearDelta(): void {\r\n this._delta = this._deltaOfNewItems = 0;\r\n }\r\n\r\n changes(immediately: boolean = false, force: boolean = false): void {\r\n if (immediately) {\r\n if (force) {\r\n this.bumpVersion();\r\n }\r\n this._previousVersion = this._version;\r\n this.dispatch(CACHE_BOX_CHANGE_EVENT_NAME as CacheMapEvents, this.version);\r\n } else {\r\n if (force) {\r\n this.bumpVersion();\r\n return;\r\n }\r\n if (this.changesDetected()) {\r\n return;\r\n }\r\n this.bumpVersion();\r\n }\r\n }\r\n\r\n /**\r\n * Returns true if the bounds of at least one screen object have changed.\r\n */\r\n checkBoundsOfElements(): boolean {\r\n if (!this._displayComponents) {\r\n return false;\r\n }\r\n\r\n for (let i = 0, l = this._displayComponents.length; i < l; i++) {\r\n const component = this._displayComponents[i], itemId = component.instance.itemId;\r\n if (itemId === undefined) {\r\n continue;\r\n }\r\n const bounds = component.instance.getBounds(), cache = this.get(itemId);\r\n if (!!bounds && !!cache) {\r\n if (bounds.width !== cache.width || bounds.height !== cache.height) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n protected generateDisplayCollection<I extends IItem, C extends Array<I>>(items: C, actualItems: C, itemConfigMap: IVirtualListItemConfigMap,\r\n metrics: IMetrics<I>): IRenderVirtualListCollection {\r\n const {\r\n width,\r\n height,\r\n normalizedItemWidth,\r\n normalizedItemHeight,\r\n dynamicSize,\r\n divides,\r\n itemsOnDisplayLength,\r\n itemsFromStartToScrollEnd,\r\n isVertical,\r\n leftLayoutOffset: layoutOffset,\r\n leftLayoutIndexOffset: layoutIndexOffset,\r\n renderItems: renderItemsLength,\r\n scrollSize,\r\n sizeProperty,\r\n stickyEnabled,\r\n stickyPos,\r\n startPosition,\r\n totalLength,\r\n startIndex,\r\n typicalItemSize,\r\n minItemSize,\r\n maxItemSize,\r\n snapToItem,\r\n snapToItemAlign,\r\n itemTransform,\r\n } = metrics,\r\n displayItems: IRenderVirtualListCollection = [];\r\n\r\n if (items.length) {\r\n const trackBy = this._trackingPropertyName, actualSnippedPosition = stickyPos,\r\n isSnappingMethodAdvanced = this._isSnappingMethodAdvanced,\r\n deltaOffet = (isSnappingMethodAdvanced ? scrollSize : 0),\r\n scrollDirection = this._scrollDirection,\r\n boundsSize = isVertical ? height : width, actualEndSnippedPosition = scrollSize + boundsSize - this._scrollEndOffset;\r\n let pos = startPosition,\r\n renderItems = renderItemsLength,\r\n stickyItem: IRenderVirtualListItem | undefined, nextSticky: IRenderVirtualListItem | undefined, stickyItemIndex = -1,\r\n stickyItemSize = 0, endStickyItem: IRenderVirtualListItem | undefined, nextEndSticky: IRenderVirtualListItem | undefined,\r\n endStickyItemIndex = -1, endStickyItemSize = 0;\r\n\r\n const li = layoutIndexOffset + actualItems.length - 1;\r\n if (stickyEnabled) {\r\n for (let i = Math.min(itemsFromStartToScrollEnd > 0 ? (divides > 1 ? (itemsFromStartToScrollEnd - 1) : itemsFromStartToScrollEnd) : 0, totalLength - 1); i >= 0; i--) {\r\n const collectionItem = items[i],\r\n isDummy = collectionItem?.[SERVICE_PROP_DUMMY] && (collectionItem?.[SERVICE_PROP_DUMMY] === SERVICE_PROP_DUMMY_ENABLED);\r\n if (!collectionItem || isDummy) {\r\n continue;\r\n }\r\n const rowIndex = Math.floor(((items.length - layoutIndexOffset + i) + 1) / divides), id = collectionItem[trackBy], cache = this.get(id)!, sticky = itemConfigMap[id]?.sticky ?? 0,\r\n selectable = itemConfigMap[id]?.selectable ?? true,\r\n collapsable = itemConfigMap[id]?.collapsable ?? false,\r\n size = dynamicSize ? cache?.[sizeProperty] > 0 ? cache?.[sizeProperty] : typicalItemSize : typicalItemSize,\r\n absoluteStartPosition = pos - (scrollSize - size) - size,\r\n ratio = size !== 0 ? boundsSize / size : 0, absoluteStartPositionPercent = -(boundsSize !== 0 ? absoluteStartPosition / boundsSize : 0) * ratio,\r\n absoluteEndPosition = boundsSize - (absoluteStartPositionPercent + size),\r\n absoluteEndPositionPercent = (absoluteStartPositionPercent + (boundsSize !== 0 ? (absoluteEndPosition + size) / boundsSize : 0) * ratio),\r\n x = isVertical ? 0 : actualSnippedPosition,\r\n y = isVertical ? actualSnippedPosition : 0;\r\n if (sticky === 1) {\r\n const isOdd = (items.length - layoutIndexOffset + i) % 2 != 0,\r\n measures: IRenderVirtualListItemMeasures = {\r\n x,\r\n y,\r\n transformedX: x,\r\n transformedY: y,\r\n z: 0,\r\n rotationX: 0,\r\n rotationY: 0,\r\n rotationZ: 0,\r\n scaleX: 1,\r\n scaleY: 1,\r\n scaleZ: 1,\r\n width: isVertical ? normalizedItemWidth : size,\r\n height: isVertical ? size : normalizedItemHeight,\r\n minWidth: minItemSize,\r\n minHeight: minItemSize,\r\n maxWidth: maxItemSize,\r\n maxHeight: maxItemSize,\r\n size,\r\n row: {\r\n size,\r\n odd: rowIndex % 2 != 0,\r\n even: rowIndex % 2 == 0,\r\n },\r\n position: pos,\r\n boundsSize,\r\n scrollSize,\r\n absoluteStartPosition,\r\n absoluteStartPositionPercent,\r\n absoluteEndPosition,\r\n absoluteEndPositionPercent,\r\n scrollDirection,\r\n delta: sticky === 1 ? this._scrollStartOffset : sticky === 2 ? actualEndSnippedPosition - deltaOffet - size : 0,\r\n }, config: IRenderVirtualListItemConfig = {\r\n fullSize: true,\r\n isFirst: i === layoutIndexOffset,\r\n isLast: i === li,\r\n new: (cache as Cache)?.[IS_NEW] === true,\r\n odd: isOdd,\r\n even: !isOdd,\r\n isVertical,\r\n collapsable,\r\n selectable,\r\n sticky,\r\n snap: stickyEnabled,\r\n snapped: true,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n layoutOffset,\r\n layoutIndexOffset,\r\n totalItems: items.length,\r\n snapToItem,\r\n snapToItemAlign,\r\n tabIndex: i - layoutIndexOffset,\r\n divides,\r\n opacity: 1,\r\n zIndex: Z_INDEX_1,\r\n };\r\n\r\n const itemData: I = collectionItem;\r\n\r\n stickyItem = {\r\n index: i, id, measures, data: itemData, previouseData: i > 0 ? items[i - 1] : null,\r\n nextData: i < totalLength ? items[i + 1] : null, config,\r\n };\r\n stickyItemIndex = i;\r\n stickyItemSize = size;\r\n\r\n displayItems.push(stickyItem);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (stickyEnabled) {\r\n const si = itemsFromStartToScrollEnd + itemsOnDisplayLength - 1, startIndex = si < 0 ? si : si;\r\n for (let i = Math.min(startIndex, totalLength > 0 ? totalLength - 1 : 0),\r\n rowIndex = Math.floor(((items.length - layoutIndexOffset + i) + 1) / divides),\r\n l = totalLength; i < l; i++) {\r\n const collectionItem = items[i],\r\n isDummy = collectionItem?.[SERVICE_PROP_DUMMY] && (collectionItem?.[SERVICE_PROP_DUMMY] === SERVICE_PROP_DUMMY_ENABLED);\r\n if (!collectionItem || isDummy) {\r\n continue;\r\n }\r\n const id = collectionItem[trackBy], cache = this.get(id)!, sticky = itemConfigMap[id]?.sticky ?? 0,\r\n selectable = itemConfigMap[id]?.selectable ?? true,\r\n collapsable = itemConfigMap[id]?.collapsable ?? false,\r\n size = dynamicSize\r\n ? cache?.[sizeProperty] || typicalItemSize\r\n : typicalItemSize;\r\n if (sticky === 2) {\r\n const isOdd = (items.length - layoutIndexOffset + i) % 2 != 0,\r\n w = isVertical ? normalizedItemWidth : size, h = isVertical ? size : normalizedItemHeight,\r\n absoluteStartPosition = pos - (scrollSize - size) - size, ratio = size !== 0 ? boundsSize / size : 0, absoluteStartPositionPercent = -(boundsSize !== 0 ? absoluteStartPosition / boundsSize : 0) * ratio,\r\n absoluteEndPosition = boundsSize - (absoluteStartPositionPercent + size),\r\n absoluteEndPositionPercent = (absoluteStartPositionPercent + (boundsSize !== 0 ? (absoluteEndPosition + size) / boundsSize : 0) * ratio),\r\n x = isVertical ? 0 : actualEndSnippedPosition - w,\r\n y = isVertical ? actualEndSnippedPosition - h : 0,\r\n measures: IRenderVirtualListItemMeasures = {\r\n x,\r\n y,\r\n transformedX: x,\r\n transformedY: y,\r\n z: 0,\r\n rotationX: 0,\r\n rotationY: 0,\r\n rotationZ: 0,\r\n scaleX: 1,\r\n scaleY: 1,\r\n scaleZ: 1,\r\n size,\r\n row: {\r\n size,\r\n odd: rowIndex % 2 != 0,\r\n even: rowIndex % 2 == 0,\r\n },\r\n position: pos,\r\n boundsSize,\r\n scrollSize,\r\n absoluteStartPosition,\r\n absoluteStartPositionPercent,\r\n absoluteEndPosition,\r\n absoluteEndPositionPercent,\r\n width: w,\r\n height: h,\r\n minWidth: minItemSize,\r\n minHeight: minItemSize,\r\n maxWidth: maxItemSize,\r\n maxHeight: maxItemSize,\r\n scrollDirection,\r\n delta: actualEndSnippedPosition - deltaOffet - size,\r\n }, config: IRenderVirtualListItemConfig = {\r\n fullSize: true,\r\n isFirst: i === layoutIndexOffset,\r\n isLast: i === li,\r\n new: (cache as Cache)?.[IS_NEW] === true,\r\n odd: isOdd,\r\n even: !isOdd,\r\n isVertical,\r\n collapsable,\r\n selectable,\r\n sticky,\r\n snap: stickyEnabled,\r\n snapped: true,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n layoutOffset,\r\n layoutIndexOffset,\r\n totalItems: items.length,\r\n snapToItem,\r\n snapToItemAlign,\r\n tabIndex: i - layoutIndexOffset,\r\n divides,\r\n opacity: 1,\r\n zIndex: Z_INDEX_1,\r\n };\r\n\r\n const itemData: I = collectionItem;\r\n\r\n endStickyItem = {\r\n index: i, id, measures, data: itemData, previouseData: i > 0 ? items[i - 1] : null,\r\n nextData: i < totalLength ? items[i + 1] : null, config,\r\n };\r\n endStickyItemIndex = i;\r\n endStickyItemSize = size;\r\n\r\n displayItems.push(endStickyItem);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n const collectionLength = items.length;\r\n let i = startIndex,\r\n ci = 0,\r\n row: {\r\n size: number;\r\n odd: boolean;\r\n even: boolean;\r\n } = {\r\n size: 0,\r\n odd: false,\r\n even: false,\r\n };\r\n while (renderItems > 0) {\r\n if (i >= collectionLength) {\r\n break;\r\n }\r\n const collectionItem = items[i];\r\n if (!collectionItem) {\r\n break;\r\n }\r\n\r\n const isDummy = collectionItem?.[SERVICE_PROP_DUMMY] && (collectionItem?.[SERVICE_PROP_DUMMY] === SERVICE_PROP_DUMMY_ENABLED),\r\n ii = i + 1,\r\n rowIndex = Math.floor(((items.length - layoutIndexOffset + i) + 1) / divides),\r\n id = collectionItem[trackBy],\r\n cache = this.get(id)!,\r\n size = isDummy ? typicalItemSize : (dynamicSize ? cache?.[sizeProperty] || typicalItemSize : typicalItemSize),\r\n divSize = (isVertical ? normalizedItemWidth : normalizedItemHeight) / divides;\r\n\r\n if (i % divides === 0) {\r\n ci = 0;\r\n row = {\r\n size,\r\n odd: rowIndex % 2 !== 0,\r\n even: rowIndex % 2 === 0,\r\n };\r\n } else {\r\n row.size = Math.max(row.size, size);\r\n ci++;\r\n }\r\n\r\n if (!isDummy) {\r\n if ((isSnappingMethodAdvanced || id !== stickyItem?.id) && id !== endStickyItem?.id) {\r\n const isOdd = (items.length - layoutIndexOffset + i) % 2 != 0,\r\n sticky = itemConfigMap[id]?.sticky ?? 0,\r\n fullSize = itemConfigMap[id]?.fullSize ?? false,\r\n selectable = itemConfigMap[id]?.selectable ?? true,\r\n collapsable = itemConfigMap[id]?.collapsable ?? false,\r\n snapped = stickyEnabled && (sticky === 1 && (pos <= scrollSize + this._scrollStartOffset) || sticky === 2 && (pos >= scrollSize + boundsSize - size)),\r\n absoluteStartPosition = pos - scrollSize, ratio = size !== 0 ? boundsSize / size : 0, absoluteStartPositionPercent = -(boundsSize !== 0 ? absoluteStartPosition / boundsSize : 0) * ratio,\r\n absoluteEndPosition = boundsSize - (absoluteStartPositionPercent + size),\r\n absoluteEndPositionPercent = (absoluteStartPositionPercent + (boundsSize !== 0 ? (absoluteEndPosition + size) / boundsSize : 0) * ratio),\r\n x = isVertical ? divSize * ((sticky || fullSize) ? 0 : ci) : pos,\r\n y = isVertical ? pos : divSize * ((sticky || fullSize) ? 0 : ci),\r\n measures: IRenderVirtualListItemMeasures = {\r\n x,\r\n y,\r\n transformedX: x,\r\n transformedY: y,\r\n z: 0,\r\n rotationX: 0,\r\n rotationY: 0,\r\n rotationZ: 0,\r\n scaleX: 1,\r\n scaleY: 1,\r\n scaleZ: 1,\r\n size,\r\n row,\r\n position: pos,\r\n boundsSize,\r\n scrollSize,\r\n absoluteStartPosition,\r\n absoluteStartPositionPercent,\r\n absoluteEndPosition,\r\n absoluteEndPositionPercent,\r\n width: isVertical ? ((sticky || fullSize) ? normalizedItemWidth : (normalizedItemWidth / divides)) : size,\r\n height: isVertical ? size : ((sticky || fullSize) ? normalizedItemHeight : (normalizedItemHeight / divides)),\r\n minWidth: minItemSize,\r\n minHeight: minItemSize,\r\n maxWidth: maxItemSize,\r\n maxHeight: maxItemSize,\r\n scrollDirection,\r\n delta: sticky === 1 ? actualSnippedPosition : sticky === 2 ? actualEndSnippedPosition - deltaOffet - size : 0,\r\n }, config: IRenderVirtualListItemConfig = {\r\n isFirst: i === layoutIndexOffset,\r\n isLast: i === li,\r\n new: (cache as Cache)?.[IS_NEW] === true,\r\n odd: isOdd,\r\n even: !isOdd,\r\n isVertical,\r\n collapsable,\r\n selectable,\r\n sticky: sticky,\r\n snap: stickyEnabled,\r\n snapped: false,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n layoutOffset,\r\n layoutIndexOffset,\r\n totalItems: items.length,\r\n snapToItem,\r\n snapToItemAlign,\r\n tabIndex: i - layoutIndexOffset,\r\n isStub: (isSnappingMethodAdvanced && id === stickyItem?.id),\r\n divides,\r\n opacity: 1,\r\n zIndex: Z_INDEX_0,\r\n fullSize,\r\n };\r\n\r\n if (snapped) {\r\n config.zIndex = Z_INDEX_2;\r\n }\r\n\r\n const itemData: I = collectionItem;\r\n\r\n const item: IRenderVirtualListItem = {\r\n index: i, id, measures, data: itemData, previouseData: i > 0 ? items[i - 1] : null,\r\n nextData: i < totalLength ? items[i + 1] : null, config,\r\n };\r\n if (!nextSticky && stickyItemIndex < i && sticky === 1 && (pos <= scrollSize + this._scrollStartOffset + size + stickyItemSize)) {\r\n item.measures.x = isVertical ? 0 : snapped ? actualSnippedPosition : pos;\r\n item.measures.y = isVertical ? snapped ? actualSnippedPosition : pos : 0;\r\n nextSticky = item;\r\n nextSticky.config.snapped = snapped;\r\n nextSticky.measures.delta = (isVertical ? item.measures.y : item.measures.x) - scrollSize;\r\n nextSticky.config.zIndex = Z_INDEX_3;\r\n }\r\n if (!nextEndSticky && endStickyItemIndex > i && sticky === 2 &&\r\n (pos >= actualEndSnippedPosition - size - endStickyItemSize)) {\r\n item.measures.x = isVertical ? 0 : snapped ? actualEndSnippedPosition - size : pos;\r\n item.measures.y = isVertical ? snapped ? actualEndSnippedPosition - size : pos : 0;\r\n nextEndSticky = item;\r\n nextEndSticky.config.zIndex = Z_INDEX_3;\r\n nextEndSticky.config.snapped = snapped;\r\n nextEndSticky.measures.delta = (isVertical ? item.measures.y : item.measures.x) - scrollSize;\r\n }\r\n\r\n displayItems.push(item);\r\n }\r\n }\r\n\r\n renderItems--;\r\n if (ii % divides === 0 || renderItems <= 0) {\r\n pos += row.size;\r\n }\r\n i++;\r\n }\r\n\r\n const axis = isVertical ? Y_PROP_NAME : X_PROP_NAME;\r\n\r\n if (!!nextSticky && !!stickyItem && nextSticky.measures[axis] <= actualSnippedPosition + stickyItemSize) {\r\n if (nextSticky.measures[axis] > scrollSize - stickyItemSize) {\r\n stickyItem.measures[axis] = nextSticky.measures[axis] - stickyItemSize;\r\n stickyItem.config.snapped = nextSticky.config.snapped = false;\r\n stickyItem.config.snappedOut = true;\r\n stickyItem.config.sticky = 1;\r\n stickyItem.measures.delta = (isVertical ? stickyItem.measures.y : stickyItem.measures.x) - scrollSize;\r\n } else {\r\n nextSticky.config.snapped = true;\r\n nextSticky.measures.delta = (isVertical ? nextSticky.measures.y : nextSticky.measures.x) - scrollSize;\r\n stickyItem.measures[axis] = stickyItem.measures[axis] + stickyItem.measures[sizeProperty];\r\n }\r\n }\r\n\r\n if (!!nextEndSticky && !!endStickyItem &&\r\n (nextEndSticky.measures[axis] >= actualEndSnippedPosition - endStickyItemSize - nextEndSticky.measures[sizeProperty])) {\r\n if (nextEndSticky.measures[axis] < actualEndSnippedPosition - nextEndSticky.measures[sizeProperty]) {\r\n endStickyItem.measures[axis] = nextEndSticky.measures[axis] + nextEndSticky.measures[sizeProperty];\r\n endStickyItem.config.snapped = nextEndSticky.config.snapped = false;\r\n endStickyItem.config.snappedOut = true;\r\n endStickyItem.config.sticky = 2;\r\n endStickyItem.measures.delta = (isVertical ? endStickyItem.measures.y : endStickyItem.measures.x) - scrollSize;\r\n } else {\r\n nextEndSticky.config.snapped = true;\r\n nextEndSticky.measures[axis] = actualEndSnippedPosition - nextEndSticky.measures[sizeProperty];\r\n nextEndSticky.measures.delta = (isVertical ? nextEndSticky.measures.y : nextEndSticky.measures.x) - scrollSize;\r\n endStickyItem.measures[axis] = nextEndSticky.measures[axis] + nextEndSticky.measures[sizeProperty];\r\n }\r\n }\r\n\r\n if (itemTransform !== null) {\r\n for (let i = 0, l = displayItems.length; i < l; i++) {\r\n const item = displayItems[i];\r\n if (!!item) {\r\n const transformation = itemTransform(item.index, objectAsReadonly(item.measures), objectAsReadonly(item.config));\r\n item.measures.transformedX = transformation.x;\r\n item.measures.transformedY = transformation.y;\r\n item.measures.z = transformation.z;\r\n item.measures.rotationX = transformation.rotationX;\r\n item.measures.rotationY = transformation.rotationY;\r\n item.measures.rotationZ = transformation.rotationZ;\r\n item.measures.scaleX = transformation.scaleX;\r\n item.measures.scaleY = transformation.scaleY;\r\n item.measures.scaleZ = transformation.scaleZ;\r\n item.config.opacity = transformation.opacity;\r\n item.config.filter = transformation.filter;\r\n item.config.blendColor = transformation.blendColor;\r\n item.config.zIndex = String(transformation.zIndex);\r\n }\r\n }\r\n }\r\n }\r\n return displayItems;\r\n }\r\n\r\n resetPositions() {\r\n this._tracker.clearTrackMap();\r\n\r\n this.track();\r\n }\r\n\r\n /**\r\n * tracking by propName\r\n */\r\n track(): void {\r\n if (!this._items || !this._displayComponents) {\r\n return;\r\n }\r\n\r\n this._tracker.track(this._items, this._displayComponents, this._snappedDisplayComponents, this._scrollDirection, this._trackBy);\r\n }\r\n\r\n setDisplayObjectIndexMapById(v: { [id: number]: number }): void {\r\n this._tracker.displayObjectIndexMapById = v;\r\n }\r\n\r\n untrackComponentByIdProperty(component?: C | undefined) {\r\n this._tracker.untrackComponentByIdProperty(component);\r\n }\r\n\r\n getItemBounds(id: Id): ISize | null {\r\n if (this.has(id)) {\r\n return this.get(id) ?? null;\r\n }\r\n return null;\r\n }\r\n\r\n getComponentBoundsByIntersectionPosition(position: number, maxPosition: number | null = null): (IRect & { id: Id | null; isFirst: boolean; isLast: boolean; }) | null {\r\n const components = this._displayComponents;\r\n let first: (IRect & { id: Id | null; isFirst: boolean; isLast: boolean; }) | null = null,\r\n last: (IRect & { id: Id | null; isFirst: boolean; isLast: boolean; }) | null = null;\r\n if (!!components) {\r\n for (const comp of components) {\r\n const id = comp.instance.itemId ?? null, isVertical = comp.instance.item?.config?.isVertical,\r\n x = comp.instance.item?.measures?.x ?? 0,\r\n y = comp.instance.item?.measures?.y ?? 0,\r\n isFirst = comp.instance.item?.config?.isFirst ?? false,\r\n isLast = comp.instance.item?.config?.isLast ?? false,\r\n { width, height } = comp.instance.getBounds(),\r\n pos = position;\r\n if (isVertical && (pos >= y && pos < y + height)) {\r\n return { id, x, y, width, height, isFirst, isLast };\r\n } else if (!isVertical && (pos >= x && pos < x + width)) {\r\n return { id, x, y, width, height, isFirst, isLast };\r\n }\r\n if (isFirst) {\r\n first = { id, x, y, width, height, isFirst, isLast };\r\n } else if (isLast) {\r\n last = { id, x, y, width, height, isFirst, isLast };\r\n }\r\n }\r\n }\r\n if (position < 0) {\r\n return first;\r\n }\r\n if (maxPosition !== null && position > maxPosition) {\r\n return last;\r\n }\r\n return null;\r\n }\r\n private _debouncedIsScrollStartOff = debounce(() => {\r\n this._isScrollStart = false;\r\n });\r\n\r\n protected cacheElements(isVertical: boolean, itemSize: number): void {\r\n if (!this._displayComponents) {\r\n return;\r\n }\r\n\r\n for (let i = 0, l = this._displayComponents.length; i < l; i++) {\r\n const component = this._displayComponents[i], itemId = component.instance.itemId;\r\n if (itemId === undefined) {\r\n continue;\r\n }\r\n const bounds = component.instance.getBounds();\r\n this.set(itemId, {\r\n ...this.get(itemId), ...bounds,\r\n width: bounds.width || (isVertical ? 0 : itemSize),\r\n height: bounds.height || (isVertical ? itemSize : 0),\r\n });\r\n if (this._isLazy && (this._isScrollStart)) {\r\n this._debouncedIsScrollStartOff.execute();\r\n }\r\n }\r\n const cache = this._prerenderedCache;\r\n if (!!cache) {\r\n for (const id in cache) {\r\n const cacheItem = cache[id];\r\n this.set(id, { ...(this.get(id) || {}), ...cacheItem });\r\n }\r\n this._prerenderedCache = null;\r\n }\r\n }\r\n\r\n resetCacheChunkInfo(): void {\r\n this._newItems = [];\r\n }\r\n\r\n cacheClean() {\r\n this._map.clear();\r\n this._snapshot.clear();\r\n }\r\n\r\n override dispose() {\r\n super.dispose();\r\n\r\n this.disposeClearBufferSizeTimer();\r\n\r\n if (!!this._debouncedIsScrollStartOff) {\r\n this._debouncedIsScrollStartOff.dispose();\r\n }\r\n\r\n if (!!this._tracker) {\r\n this._tracker.dispose();\r\n }\r\n }\r\n}\r\n","import { SnappingMethods } from \"../enums\";\r\nimport { SnappingMethod } from \"../types\";\r\n\r\nconst ADVANCED_PATTERNS: Array<SnappingMethod> = [SnappingMethods.ADVANCED, SnappingMethods.STANDART, 'advanced', 'standart'],\r\n DEFAULT_PATTERN: Array<SnappingMethod> = [SnappingMethods.STANDART, 'standart'];\r\n\r\nexport const isSnappingMethodAdvenced = (method: SnappingMethod): boolean => {\r\n return ADVANCED_PATTERNS.includes(method);\r\n}\r\n\r\nexport const isSnappingMethodDefault = (method: SnappingMethod): boolean => {\r\n return DEFAULT_PATTERN.includes(method);\r\n}","import { Directions } from \"../enums\";\r\nimport { Direction } from \"../types\";\r\n\r\nconst HORIZONTAL_ALIASES = [Directions.HORIZONTAL, 'horizontal'],\r\n VERTICAL_ALIASES = [Directions.VERTICAL, 'vertical'];\r\n\r\n/**\r\n * Determines the axis membership of a virtual list\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/utils/is-direction.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isDirection = (src: Direction, expected: Direction): boolean => {\r\n if (HORIZONTAL_ALIASES.includes(expected)) {\r\n return HORIZONTAL_ALIASES.includes(src);\r\n }\r\n return VERTICAL_ALIASES.includes(src);\r\n}","import { SelectingModes } from \"../enums\";\r\nimport { SelectingMode } from \"../types\";\r\n\r\nconst NONE_ALIASES = [SelectingModes.NONE, 'none'],\r\n SELECT_ALIASES = [SelectingModes.SELECT, 'select'],\r\n MULTI_SELECT_ALIASES = [SelectingModes.MULTI_SELECT, 'multi-select'];\r\n\r\n/**\r\n * Defines the mode for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/utils/is-select-mode.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isSelectMode = (src: SelectingMode, expected: SelectingMode): boolean => {\r\n if (NONE_ALIASES.includes(expected)) {\r\n return NONE_ALIASES.includes(src);\r\n } else if (SELECT_ALIASES.includes(expected)) {\r\n return SELECT_ALIASES.includes(src);\r\n }\r\n return MULTI_SELECT_ALIASES.includes(src);\r\n}\r\n","import { CollapsingModes } from \"../enums\";\r\nimport { CollapsingMode } from \"../types\";\r\n\r\nconst NONE_ALIASES = [CollapsingModes.NONE, 'none'],\r\n MULTIMPLE_ALIASES = [CollapsingModes.MULTI_COLLAPSE, 'multi-collapse'],\r\n ACCORDION_ALIASES = [CollapsingModes.ACCORDION, 'accordion'];\r\n\r\n/**\r\n * Defines the mode for collapsing list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/utils/is-collapse-mode.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isCollapseMode = (src: CollapsingMode, expected: CollapsingMode): boolean => {\r\n if (NONE_ALIASES.includes(expected)) {\r\n return NONE_ALIASES.includes(src);\r\n } else if (MULTIMPLE_ALIASES.includes(expected)) {\r\n return MULTIMPLE_ALIASES.includes(src);\r\n }\r\n return ACCORDION_ALIASES.includes(src);\r\n}\r\n","import { CollectionModes } from \"../enums\";\r\nimport { CollectionMode } from \"../types\";\r\n\r\nconst NORMAL_ALIASES = [CollectionModes.NORMAL, 'normal'],\r\n LAZY_ALIASES = [CollectionModes.LAZY, 'lazy'];\r\n\r\n/**\r\n * Determines the axis membership of a virtual list\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/utils/is-collection-mode.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isCollectionMode = (src: CollectionMode, expected: CollectionMode): boolean => {\r\n if (LAZY_ALIASES.includes(expected)) {\r\n return LAZY_ALIASES.includes(src);\r\n }\r\n return NORMAL_ALIASES.includes(src);\r\n}","export enum ScrollerDirection {\r\n HORIZONTAL = 'horizontal',\r\n VERTICAL = 'vertical',\r\n}","import { GradientColorPositions } from \"../../../types/gradient-color-positions\";\r\nimport { ScrollerDirection, ScrollerDirections } from \"../enums\";\r\n\r\ninterface ICalculateScrollParams {\r\n direction: ScrollerDirections;\r\n viewportWidth: number;\r\n viewportHeight: number;\r\n contentWidth: number;\r\n contentHeight: number;\r\n startOffset: number;\r\n endOffset: number;\r\n positionX: number;\r\n positionY: number;\r\n minSize: number;\r\n}\r\n\r\ninterface ICalculateScrollPositionParams {\r\n scrollSize: number;\r\n position: number;\r\n}\r\n\r\ninterface ICalculateScrollMetrics {\r\n gradientPos: [number, number];\r\n size: number;\r\n pos: number;\r\n}\r\n\r\n/**\r\n * ScrollBox\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/scroller/utils/scroll-box.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class ScrollBox {\r\n calculateScroll({\r\n direction,\r\n viewportWidth,\r\n viewportHeight,\r\n contentWidth,\r\n contentHeight,\r\n startOffset,\r\n endOffset,\r\n positionX,\r\n positionY,\r\n minSize,\r\n }: ICalculateScrollParams) {\r\n const isVertical = direction === ScrollerDirection.VERTICAL;\r\n let x = 0, y = 0, thumbPosition = 0, thumbSize = 0, thumbGradientPositions: GradientColorPositions = [0, 0];\r\n if (isVertical) {\r\n const { gradientPos, size, pos, } = this.getMetrics(positionY, viewportHeight, contentHeight, startOffset, endOffset, minSize);\r\n thumbGradientPositions = gradientPos;\r\n thumbSize = size;\r\n thumbPosition = pos;\r\n } else {\r\n const { gradientPos, size, pos, } = this.getMetrics(positionX, viewportWidth, contentWidth, startOffset, endOffset, minSize);\r\n thumbGradientPositions = gradientPos;\r\n thumbSize = size;\r\n thumbPosition = pos;\r\n }\r\n return {\r\n x,\r\n y,\r\n thumbSize,\r\n thumbPosition,\r\n thumbGradientPositions,\r\n };\r\n }\r\n\r\n private getMetrics(inputPosition: number, viewportSize: number, contentSize: number, startOffset: number, endOffset: number,\r\n minSize: number): ICalculateScrollMetrics {\r\n let thumbPosition = 0, thumbSize = 0;\r\n const vh = viewportSize - startOffset - endOffset, ch = contentSize - startOffset - endOffset,\r\n ratio = ch > 0 ? vh / ch : 1, ts = vh * ratio, ats = Math.max(ts, minSize), atsDelta = ats - ts,\r\n rh = (ch !== 0 ? (inputPosition / ch) : 0),\r\n pos = startOffset + ((vh - atsDelta) * rh),\r\n size = ats, asp = pos, bRatio = size !== 0 ? vh / size : 0,\r\n aspp = -(vh !== 0 ? asp / vh : 0) * bRatio, aep = vh - (aspp + size),\r\n aepp = (aspp + (vh !== 0 ? (aep + size) / vh : 0) * bRatio);\r\n thumbSize = ats;\r\n thumbPosition = pos;\r\n return {\r\n gradientPos: [aspp, aepp],\r\n size,\r\n pos,\r\n };\r\n }\r\n\r\n getScrollPositionByScrollBar({\r\n scrollSize,\r\n position,\r\n }: ICalculateScrollPositionParams) {\r\n const pos = (position * scrollSize);\r\n return {\r\n position: pos,\r\n };\r\n }\r\n}","export const DEFAULT_WITH_DELTA = false,\r\n DEFAULT_ANIMATION_DURATION = 500,\r\n ANIMATOR_MIN_TIMESTAMP = 1000 / 30,\r\n MIN_ANIMATED_VALUE = 10;\r\n","export const easeOutQuad = (t: number) => {\r\n return t * (2 - t);\r\n};\r\n\r\nexport const easeLinear = (t: number) => {\r\n return t + t;\r\n};\r\n","import { ANIMATOR_MIN_TIMESTAMP, DEFAULT_ANIMATION_DURATION, DEFAULT_WITH_DELTA } from './const';\r\nimport { easeLinear } from './ease';\r\nimport { IAnimatorParams, IAnimatorUpdateData } from './interfaces';\r\n\r\n/**\r\n * Animator\r\n * @link https://github.com/DjonnyX/data-channel-router/blob/main/library/src/utils/animator/animator.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class Animator {\r\n private static _nextId: number = 0;\r\n\r\n private _animationId: number = 0;\r\n\r\n private _currentId: number = Animator._nextId;\r\n\r\n private generateId() {\r\n return Animator._nextId = Animator._nextId === Number.MAX_SAFE_INTEGER\r\n ? 0 : Animator._nextId + 1;\r\n }\r\n\r\n animate(params: IAnimatorParams) {\r\n this.stop();\r\n\r\n const id = this.generateId();\r\n this._currentId = id;\r\n\r\n const {\r\n withDelta = DEFAULT_WITH_DELTA, startValue, endValue, duration = DEFAULT_ANIMATION_DURATION,\r\n getPropValue, easingFunction = easeLinear, onUpdate, onComplete,\r\n } = params;\r\n\r\n const startTime = performance.now();\r\n let isCanceled = false, prevPos = startValue, start = startValue, startPosDelta = 0, delta = 0, prevTime = startTime,\r\n diff = endValue - start, isFinished = false;\r\n\r\n const step = (currentTime: number) => {\r\n if (id !== this._currentId) {\r\n isCanceled = true;\r\n }\r\n\r\n if (!!isCanceled) {\r\n return;\r\n }\r\n\r\n const cPos = getPropValue?.() || 0;\r\n let startDelta = 0;\r\n if (cPos !== prevPos) {\r\n startDelta = cPos - prevPos;\r\n startPosDelta += startDelta;\r\n }\r\n\r\n const elapsed = currentTime - startTime,\r\n progress = start === endValue ? 1 : Math.min(duration > 0 ? elapsed / duration : 0, 1),\r\n easedProgress = easingFunction(progress),\r\n val = (withDelta ? startPosDelta : 0) + start + diff * easedProgress,\r\n currentValue = val,\r\n t = performance.now();\r\n\r\n isFinished = progress === 1;\r\n\r\n delta = currentValue - startDelta - prevPos;\r\n\r\n const ts = t - prevTime, timestamp = ts < ANIMATOR_MIN_TIMESTAMP ? ANIMATOR_MIN_TIMESTAMP : ts;\r\n\r\n prevTime = t;\r\n prevPos = currentValue;\r\n\r\n if (onUpdate !== undefined) {\r\n const data: IAnimatorUpdateData = {\r\n id,\r\n delta,\r\n elapsed,\r\n value: !withDelta && isFinished ? endValue : currentValue,\r\n timestamp,\r\n };\r\n onUpdate(data);\r\n }\r\n\r\n if (isFinished) {\r\n if (onComplete !== undefined) {\r\n const data: IAnimatorUpdateData = {\r\n id,\r\n delta,\r\n elapsed,\r\n value: withDelta ? currentValue : endValue,\r\n timestamp,\r\n };\r\n onComplete(data);\r\n }\r\n } else {\r\n this._animationId = requestAnimationFrame(step);\r\n }\r\n }\r\n\r\n this._animationId = requestAnimationFrame(step);\r\n }\r\n\r\n stop() {\r\n cancelAnimationFrame(this._animationId);\r\n }\r\n\r\n dispose() {\r\n this.stop();\r\n }\r\n}\r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { SCROLLER_SCROLL } from \"../../../const\";\r\n\r\nexport const SCROLL_VIEW_INVERSION = new InjectionToken<boolean>('ScrollViewInversion');\r\n\r\nexport const SCROLL_VIEW_OVERSCROLL_ENABLED = new InjectionToken<boolean>('ScrollViewOverscrollEnabled');\r\n\r\nexport const SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO = new InjectionToken<boolean>('ScrollViewNormalizeValueFromZero');\r\n\r\nexport const TOP = 'top',\r\n LEFT = 'left',\r\n INSTANT = 'instant',\r\n AUTO = 'auto',\r\n SMOOTH = 'smooth',\r\n DURATION = 2000,\r\n FRICTION_FORCE = .035,\r\n MAX_DURATION = 4000,\r\n ANIMATION_DURATION = 50,\r\n MASS = .005,\r\n MAX_DIST = 12500,\r\n MAX_VELOCITY_TIMESTAMP = 100,\r\n SPEED_SCALE = 15,\r\n OVERSCROLL_START_ITERATION = 2,\r\n INTERSECTION_DISTANCE = 1;\r\n\r\nexport const MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS = 5,\r\n INSTANT_VELOCITY_SCALE = 1000;\r\n\r\nexport const SCROLL_EVENT = new Event(SCROLLER_SCROLL);\r\n","/**\r\n * calculateDirection\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/calculate-direction.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const calculateDirection = (buffer: Array<[number, number]>) => {\r\n for (let i = buffer.length - 1, l = 0; i >= l; i--) {\r\n const v = buffer[i];\r\n if (v[0] === 0) {\r\n continue;\r\n }\r\n return Math.sign(v[0]);\r\n }\r\n return 1;\r\n};\r\n","/**\r\n * ScrollerDirection\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/enums/scroller-direction.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum ScrollerDirection {\r\n HORIZONTAL = 'horizontal',\r\n VERTICAL = 'vertical',\r\n}","import { GradientColorPositions } from \"../../../types/gradient-color-positions\";\r\nimport { ScrollerDirection, ScrollerDirections } from \"../enums\";\r\n\r\ninterface ICalculateScrollParams {\r\n direction: ScrollerDirections;\r\n viewportWidth: number;\r\n viewportHeight: number;\r\n contentWidth: number;\r\n contentHeight: number;\r\n startOffset: number;\r\n endOffset: number;\r\n positionX: number;\r\n positionY: number;\r\n minSize: number;\r\n}\r\n\r\ninterface ICalculateScrollPositionParams {\r\n scrollSize: number;\r\n position: number;\r\n}\r\n\r\n/**\r\n * ScrollBox\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/scroll-box.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class ScrollBox {\r\n calculateScroll({\r\n direction,\r\n viewportWidth,\r\n viewportHeight,\r\n contentWidth,\r\n contentHeight,\r\n startOffset,\r\n endOffset,\r\n positionX,\r\n positionY,\r\n minSize,\r\n }: ICalculateScrollParams) {\r\n const isVertical = direction === ScrollerDirection.VERTICAL;\r\n let x = 0, y = 0, thumbPosition = 0, thumbSize = 0, thumbGradientPositions: GradientColorPositions = [0, 0];\r\n if (isVertical) {\r\n y = positionY;\r\n const vh = viewportHeight - startOffset - endOffset, ch = contentHeight - startOffset - endOffset,\r\n ratio = ch > 0 ? vh / ch : 1, ts = vh * ratio, ats = Math.max(ts, minSize), atsDelta = ats - ts, rh = (ch !== 0 ? (y / ch) : 0),\r\n pos = startOffset + ((vh - atsDelta) * rh),\r\n size = ats, asp = pos, bRatio = size !== 0 ? vh / size : 0,\r\n aspp = -(vh !== 0 ? asp / vh : 0) * bRatio, aep = vh - (aspp + size),\r\n aepp = (aspp + (vh !== 0 ? (aep + size) / vh : 0) * bRatio);\r\n thumbGradientPositions[0] = aspp;\r\n thumbGradientPositions[1] = aepp;\r\n thumbSize = ats;\r\n thumbPosition = pos;\r\n } else {\r\n x = positionX;\r\n const vw = viewportWidth - startOffset - endOffset, cw = contentWidth - startOffset - endOffset,\r\n ratio = cw > 0 ? vw / cw : 1, ts = vw * ratio, ats = Math.max(ts, minSize), atsDelta = ats - ts, rw = (cw !== 0 ? (x / cw) : 0),\r\n pos = startOffset + ((vw - atsDelta) * rw),\r\n size = ats, asp = pos, bRatio = size !== 0 ? vw / size : 0,\r\n aspp = -(vw !== 0 ? asp / vw : 0) * bRatio, aep = vw - (aspp + size),\r\n aepp = (aspp + (vw !== 0 ? (aep + size) / vw : 0) * bRatio);\r\n thumbGradientPositions[0] = aspp;\r\n thumbGradientPositions[1] = aepp;\r\n thumbSize = ats;\r\n thumbPosition = pos;\r\n }\r\n return {\r\n x,\r\n y,\r\n thumbSize,\r\n thumbPosition,\r\n thumbGradientPositions,\r\n };\r\n }\r\n\r\n getScrollPositionByScrollBar({\r\n scrollSize,\r\n position,\r\n }: ICalculateScrollPositionParams) {\r\n const pos = (position * scrollSize);\r\n return {\r\n position: pos,\r\n };\r\n }\r\n}","/**\r\n * matrix3d\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/matrix-3d.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const matrix3d = (x: number, y: number) => {\r\n return `matrix3d(\r\n 1, 0, 0, 0,\r\n 0, 1, 0, 0,\r\n 0, 0, 1, 0,\r\n ${x}, ${y}, 0, 1\r\n )`;\r\n};\r\n","/**\r\n * getDir\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/get-dir.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const getDir = (p: number, c: number) => {\r\n return p < c ? 1 : p > c ? -1 : 0;\r\n}","import {\r\n Component, ElementRef, inject, Input, ViewChild,\r\n} from '@angular/core';\r\nimport { BehaviorSubject, distinctUntilChanged, Subject, takeUntil, tap } from 'rxjs';\r\nimport { ScrollerDirection, ScrollerDirections } from '../enums';\r\nimport { ISize } from '../../../interfaces';\r\nimport { SCROLL_VIEW_INVERSION, SCROLL_VIEW_OVERSCROLL_ENABLED } from '../const';\r\nimport { DisposableComponent } from '../../../utils/disposable-component';\r\n\r\n/**\r\n * BaseScrollView\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/base/base-scroll-view.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'base-scroll-view',\r\n template: '',\r\n})\r\nexport class BaseScrollView extends DisposableComponent {\r\n @ViewChild('scrollContent')\r\n scrollContent: ElementRef<HTMLDivElement> | undefined;\r\n\r\n @ViewChild('scrollViewport')\r\n scrollViewport: ElementRef<HTMLDivElement> | undefined;\r\n\r\n protected _$direction = new BehaviorSubject<ScrollerDirections | any>(ScrollerDirection.VERTICAL);\r\n readonly $direction = this._$direction.asObservable();\r\n @Input()\r\n set direction(v: ScrollerDirections | any) {\r\n if (this._$direction.getValue() !== v) {\r\n this._$direction.next(v);\r\n }\r\n }\r\n get direction() { return this._$direction.getValue(); }\r\n\r\n protected _$startOffset = new BehaviorSubject<number>(0);\r\n readonly $startOffset = this._$startOffset.asObservable();\r\n @Input()\r\n set startOffset(v: number) {\r\n if (this._$startOffset.getValue() !== v) {\r\n this._$startOffset.next(v);\r\n }\r\n }\r\n get startOffset() { return this._$startOffset.getValue(); }\r\n\r\n protected _$endOffset = new BehaviorSubject<number>(0);\r\n readonly $endOffset = this._$endOffset.asObservable();\r\n @Input()\r\n set endOffset(v: number) {\r\n if (this._$endOffset.getValue() !== v) {\r\n this._$endOffset.next(v);\r\n }\r\n }\r\n get endOffset() { return this._$endOffset.getValue(); }\r\n\r\n protected _$alignmentStartOffset = new BehaviorSubject<number>(0);\r\n readonly $alignmentStartOffset = this._$alignmentStartOffset.asObservable();\r\n @Input()\r\n set alignmentStartOffset(v: number) {\r\n if (this._$alignmentStartOffset.getValue() !== v) {\r\n this._$alignmentStartOffset.next(v);\r\n }\r\n }\r\n get alignmentStartOffset() { return this._$alignmentStartOffset.getValue(); }\r\n\r\n protected _$alignmentEndOffset = new BehaviorSubject<number>(0);\r\n readonly $alignmentEndOffset = this._$alignmentEndOffset.asObservable();\r\n @Input()\r\n set alignmentEndOffset(v: number) {\r\n if (this._$alignmentEndOffset.getValue() !== v) {\r\n this._$alignmentEndOffset.next(v);\r\n }\r\n }\r\n get alignmentEndOffset() { return this._$alignmentEndOffset.getValue(); }\r\n\r\n protected _$isInfinity = new BehaviorSubject<boolean>(false);\r\n readonly $isInfinity = this._$isInfinity.asObservable();\r\n @Input()\r\n set isInfinity(v: boolean) {\r\n if (this._$isInfinity.getValue() !== v) {\r\n this._$isInfinity.next(v);\r\n }\r\n }\r\n get isInfinity() { return this._$isInfinity.getValue(); }\r\n\r\n protected _$isVertical = new BehaviorSubject<boolean>(true);\r\n readonly $isVertical = this._$isVertical.asObservable();\r\n\r\n protected _$grabbing = new BehaviorSubject<boolean>(false);\r\n readonly $grabbing = this._$grabbing.asObservable();\r\n\r\n protected _inversion = inject(SCROLL_VIEW_INVERSION);\r\n\r\n protected _overscrollEnabled = inject(SCROLL_VIEW_OVERSCROLL_ENABLED);\r\n\r\n protected _$updateScrollBar = new Subject<void>();\r\n protected $updateScrollBar = this._$updateScrollBar.asObservable();\r\n\r\n get scrollable() {\r\n const { width, height } = this._$viewportBounds.getValue(),\r\n isVertical = this._$isVertical.getValue(),\r\n viewportSize = isVertical ? height : width,\r\n totalSize = this._totalSize;\r\n return this._inversion ? (totalSize < viewportSize) : (totalSize > viewportSize);\r\n }\r\n\r\n protected _isMoving = false;\r\n get isMoving() {\r\n return this._isMoving;\r\n }\r\n\r\n protected _x: number = 0;\r\n set x(v: number) {\r\n this._x = this._actualX = v;\r\n\r\n this.normalizeScrollSize();\r\n }\r\n get x() { return this._x; }\r\n\r\n protected _y: number = 0;\r\n set y(v: number) {\r\n this._y = this._actualY = v;\r\n\r\n this.normalizeScrollSize();\r\n }\r\n get y() { return this._y; }\r\n\r\n protected _actualTotalSize: number = 0;\r\n protected _totalSize: number = 0;\r\n set totalSize(v: number) {\r\n if (this._totalSize !== v) {\r\n this._totalSize = v;\r\n const startOffset = this._$startOffset.getValue(), endOffset = this._$alignmentEndOffset.getValue();\r\n this._actualTotalSize = v + startOffset + endOffset;\r\n\r\n this.normalizeScrollSize();\r\n }\r\n }\r\n get totalSize() {\r\n return this._totalSize;\r\n }\r\n\r\n protected _startLayoutOffset: number = 0;\r\n set startLayoutOffset(v: number) {\r\n if (this._startLayoutOffset !== v) {\r\n this._startLayoutOffset = v;\r\n }\r\n }\r\n get startLayoutOffset() { return this._startLayoutOffset; }\r\n\r\n get actualScrollHeight() {\r\n const { height: viewportHeight } = this._$viewportBounds.getValue(),\r\n totalSize = this._actualTotalSize,\r\n isVertical = this._$isVertical.getValue(),\r\n startOffset = this._$startOffset.getValue(),\r\n endOffset = this._$endOffset.getValue();\r\n if (this._inversion) {\r\n return totalSize > viewportHeight ? isVertical ? endOffset : 0 : viewportHeight - totalSize;\r\n }\r\n return totalSize < viewportHeight ? isVertical ? startOffset : 0 : totalSize - viewportHeight;\r\n }\r\n\r\n get actualScrollWidth() {\r\n const { width: viewportWidth } = this._$viewportBounds.getValue(),\r\n totalSize = this._actualTotalSize,\r\n isVertical = this._$isVertical.getValue(),\r\n startOffset = this._$startOffset.getValue(),\r\n endOffset = this._$endOffset.getValue();\r\n if (this._inversion) {\r\n return totalSize > viewportWidth ? isVertical ? 0 : endOffset : viewportWidth - totalSize;\r\n }\r\n return totalSize < viewportWidth ? isVertical ? 0 : startOffset : totalSize - viewportWidth;\r\n }\r\n\r\n protected _actualX: number = 0;\r\n get actualScrollLeft() {\r\n return this._actualX;\r\n }\r\n\r\n protected _actualY: number = 0;\r\n get actualScrollTop() {\r\n return this._actualY;\r\n }\r\n\r\n get scrollLeft() {\r\n return this._x;\r\n }\r\n\r\n get scrollTop() {\r\n return this._y;\r\n }\r\n\r\n get scrollWidth() {\r\n const { width: viewportWidth } = this._$viewportBounds.getValue(),\r\n { width: contentWidth } = this._$contentBounds.getValue(),\r\n isVertical = this._$isVertical.getValue(),\r\n startOffset = this._$startOffset.getValue(),\r\n endOffset = this._$endOffset.getValue();\r\n if (this._inversion) {\r\n return contentWidth > viewportWidth ? isVertical ? 0 : endOffset : (viewportWidth - (contentWidth + this._$alignmentEndOffset.getValue()));\r\n }\r\n return contentWidth < viewportWidth ? isVertical ? 0 : startOffset : ((contentWidth + this._$alignmentEndOffset.getValue()) - viewportWidth);\r\n }\r\n\r\n get scrollHeight() {\r\n const { height: viewportHeight } = this._$viewportBounds.getValue(),\r\n { height: contentHeight } = this._$contentBounds.getValue(),\r\n isVertical = this._$isVertical.getValue(),\r\n startOffset = this._$startOffset.getValue(),\r\n endOffset = this._$endOffset.getValue();\r\n if (this._inversion) {\r\n return contentHeight > viewportHeight ? isVertical ? endOffset : 0 : (viewportHeight - (contentHeight + this._$alignmentEndOffset.getValue()));\r\n }\r\n return contentHeight < viewportHeight ? isVertical ? startOffset : 0 : ((contentHeight + this._$alignmentEndOffset.getValue()) - viewportHeight);\r\n }\r\n\r\n protected _$viewportBounds = new BehaviorSubject<ISize>({ width: 0, height: 0 });\r\n readonly $viewportBounds = this._$viewportBounds.asObservable();\r\n\r\n protected _$contentBounds = new BehaviorSubject<ISize>({ width: 0, height: 0 });\r\n readonly $contentBounds = this._$contentBounds.asObservable();\r\n\r\n protected _isCoordinatesOverrided: boolean = false;\r\n\r\n constructor() {\r\n super();\r\n\r\n const $direction = this.$direction;\r\n $direction.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._$isVertical.next(v === ScrollerDirection.VERTICAL);\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n tick() {\r\n this.onResizeContent();\r\n this.onResizeViewport();\r\n }\r\n\r\n protected overrideCoordinates(x: number, y: number) { }\r\n\r\n protected normalizeScrollSize() {\r\n if (this._$isInfinity.getValue()) {\r\n const isVertical = this._$isVertical.getValue();\r\n if (isVertical) {\r\n const scrollSize = (this._totalSize - this._$viewportBounds.getValue().height);\r\n if (this._y < 0) {\r\n this._isCoordinatesOverrided = true;\r\n const currentPosition = scrollSize;\r\n this.overrideCoordinates(this._x, currentPosition);\r\n this._y = currentPosition;\r\n return true;\r\n } else if (this._y > scrollSize) {\r\n this._isCoordinatesOverrided = true;\r\n const currentPosition = 0;\r\n this.overrideCoordinates(this._x, currentPosition);\r\n this._y = currentPosition;\r\n return true;\r\n }\r\n } else {\r\n const scrollSize = (this._totalSize - this._$viewportBounds.getValue().width);\r\n if (this._x < 0) {\r\n this._isCoordinatesOverrided = true;\r\n const currentPosition = scrollSize;\r\n this.overrideCoordinates(currentPosition, this._y);\r\n this._x = currentPosition;\r\n return true;\r\n } else if (this._x > scrollSize) {\r\n this._isCoordinatesOverrided = true;\r\n const currentPosition = 0;\r\n this.overrideCoordinates(currentPosition, this._y);\r\n this._x = currentPosition;\r\n return true;\r\n }\r\n }\r\n }\r\n this._isCoordinatesOverrided = false;\r\n return false;\r\n }\r\n\r\n protected onResizeViewport() {\r\n const viewport = this.scrollViewport?.nativeElement;\r\n if (!!viewport) {\r\n const isVertical = this._$isVertical.getValue(),\r\n startOffset = this._$startOffset.getValue(),\r\n endOffset = this._$endOffset.getValue(),\r\n w = viewport.offsetWidth,\r\n h = viewport.offsetHeight,\r\n width = isVertical ? w : (w - startOffset - endOffset),\r\n height = isVertical ? (h - startOffset - endOffset) : h,\r\n bounds = this._$viewportBounds.getValue();\r\n if (bounds.width === width && bounds.height === height) {\r\n return;\r\n }\r\n this._$viewportBounds.next({ width, height });\r\n }\r\n }\r\n\r\n protected onResizeContent(value: number | null = null) {\r\n const content = this.scrollContent?.nativeElement;\r\n if (!!content) {\r\n const isVertical = this._$isVertical.getValue(),\r\n startOffset = this._$startOffset.getValue(),\r\n w = content.offsetWidth,\r\n h = content.offsetHeight,\r\n width = isVertical ? w : value ?? (w - startOffset),\r\n height = isVertical ? value ?? (h - startOffset) : h,\r\n bounds = this._$contentBounds.getValue();\r\n if (bounds.width === width && bounds.height === height) {\r\n return;\r\n }\r\n this._$contentBounds.next({ width, height });\r\n }\r\n }\r\n}","import { PERCENTAGE_VALUE_PATTERN } from \"../const\";\r\n\r\n/**\r\n * isPercentageValue\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/utils/is-persentage-value.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isPercentageValue = (value: number | `${number}%` | string) => {\r\n if (value === undefined || typeof value === 'number') {\r\n return false;\r\n }\r\n return PERCENTAGE_VALUE_PATTERN.test(value);\r\n};","import { isPercentageValue } from \"./is-persentage-value\";\r\n\r\nconst PERSENTS_100 = 100,\r\n PERSENTS_1 = 1,\r\n SIZE_PERSENT = '%',\r\n CHAR_NONE = '';\r\n\r\n/**\r\n * parseFloatOrPersentageValue\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/utils/parse-float-or-persentage-value.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const parseFloatOrPersentageValue = (value: number | `${number}%` | string): number => {\r\n const isPercentage = isPercentageValue(value);\r\n if (isPercentage) {\r\n const v = parseFloat(String(value).replace(SIZE_PERSENT, CHAR_NONE));\r\n return v / (isPercentage ? PERSENTS_100 : PERSENTS_1);\r\n }\r\n return value as number;\r\n}\r\n","import { BehaviorSubject } from \"rxjs\";\r\nimport { ScrollDirection } from \"../types\";\r\n\r\n/**\r\n * ScrollingDirection\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/utils/scrolling-direction.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class ScrollingDirection {\r\n private _value: number = 0;\r\n\r\n private _$direction = new BehaviorSubject<ScrollDirection>(0);\r\n readonly $direction = this._$direction.asObservable();\r\n\r\n constructor(private _length: number = 5) { }\r\n\r\n add(v: ScrollDirection) {\r\n this._value += v;\r\n const dir = this._value < this._length ? -this._length : this._value > this._length ? this._length : this._value,\r\n result = dir === 0 ? 0 : Math.sign(dir) as ScrollDirection;\r\n this._$direction.next(result);\r\n }\r\n\r\n get(): ScrollDirection {\r\n return this._$direction.getValue();\r\n }\r\n\r\n clear() {\r\n this._value = 0;\r\n this._$direction.next(0);\r\n }\r\n}","import { INSTANT_VELOCITY_SCALE } from \"../const\";\r\n\r\n/**\r\n * calculateVelocity\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/calculate-velocity.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const calculateVelocity = (startPosition: number, currentPosition: number, timestamp: number) => {\r\n const s = currentPosition - startPosition, t = timestamp;\r\n return t !== 0 ? (s / t) * INSTANT_VELOCITY_SCALE : 0;\r\n}","import {\r\n Component, inject, Input, ViewChild,\r\n} from '@angular/core';\r\nimport { CdkScrollable } from '@angular/cdk/scrolling';\r\nimport { BehaviorSubject, debounceTime, delay, filter, fromEvent, map, of, race, Subject, switchMap, takeUntil, tap } from 'rxjs';\r\nimport { ANIMATOR_MIN_TIMESTAMP, Animator, Easing, easeOutQuad } from '../../utils/animator';\r\nimport {\r\n BEHAVIOR_INSTANT, DEFAULT_ANIMATION_PARAMS, DEFAULT_OVERSCROLL_ENABLED, DEFAULT_SCROLL_BEHAVIOR, DEFAULT_SCROLLING_ONE_BY_ONE,\r\n DEFAULT_SCROLLING_SETTINGS, DEFAULT_SNAP_TO_ITEM, DEFAULT_SNAP_TO_ITEM_ALIGN, DEFAULT_SNAPPING_DISTANCE, INTERACTIVE, MOUSE_DOWN,\r\n MOUSE_MOVE, MOUSE_UP, TOUCH_END, TOUCH_MOVE, TOUCH_START, WHEEL,\r\n} from '../../const';\r\nimport { IScrollToParams } from './interfaces';\r\nimport {\r\n ANIMATION_DURATION, AUTO, DURATION, FRICTION_FORCE, INSTANT, LEFT, MASS, MAX_DIST, MAX_DURATION, MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS,\r\n MAX_VELOCITY_TIMESTAMP, OVERSCROLL_START_ITERATION, SCROLL_EVENT, SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, SMOOTH, SPEED_SCALE, TOP,\r\n} from './const';\r\nimport { calculateDirection, matrix3d } from './utils';\r\nimport { BaseScrollView } from './base/base-scroll-view.component';\r\nimport { IAnimationParams, IScrollingSettings } from '../../interfaces';\r\nimport { SnapToItemAligns } from '../../enums';\r\nimport { NgVirtualListService } from '../../ng-virtual-list.service';\r\nimport { Id, SnappingDistance, SnapToItemAlign } from '../../types';\r\nimport { parseFloatOrPersentageValue } from '../../utils/parse-float-or-persentage-value';\r\nimport { isPercentageValue } from '../../utils/is-persentage-value';\r\nimport { ScrollingDirection } from '../../utils/scrolling-direction';\r\nimport { calculateVelocity } from './utils/calculate-velocity';\r\n\r\n/**\r\n * NgScrollView\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/ng-scroll-view.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-scroll-view',\r\n template: '',\r\n})\r\nexport class NgScrollView extends BaseScrollView {\r\n @ViewChild('scrollViewport', { read: CdkScrollable })\r\n readonly cdkScrollable: CdkScrollable | undefined;\r\n\r\n protected _service = inject(NgVirtualListService);\r\n\r\n protected _$scrollBehavior = new BehaviorSubject<ScrollBehavior>(DEFAULT_SCROLL_BEHAVIOR);\r\n readonly $scrollBehavior = this._$scrollBehavior.asObservable();\r\n @Input()\r\n set scrollBehavior(v: ScrollBehavior) {\r\n if (this._$scrollBehavior.getValue() !== v) {\r\n this._$scrollBehavior.next(v);\r\n }\r\n }\r\n get scrollBehavior() { return this._$scrollBehavior.getValue(); }\r\n\r\n protected _$overscrollEnabled = new BehaviorSubject<boolean>(DEFAULT_OVERSCROLL_ENABLED);\r\n readonly $overscrollEnabled = this._$overscrollEnabled.asObservable();\r\n @Input()\r\n set overscrollEnabled(v: boolean) {\r\n if (this._$overscrollEnabled.getValue() !== v) {\r\n this._$overscrollEnabled.next(v);\r\n }\r\n }\r\n get overscrollEnabled() { return this._$overscrollEnabled.getValue(); }\r\n\r\n protected _$scrollingSettings = new BehaviorSubject<IScrollingSettings>(DEFAULT_SCROLLING_SETTINGS);\r\n readonly $scrollingSettings = this._$scrollingSettings.asObservable();\r\n @Input()\r\n set scrollingSettings(v: IScrollingSettings) {\r\n if (this._$scrollingSettings.getValue() !== v) {\r\n this._$scrollingSettings.next(v);\r\n }\r\n }\r\n get scrollingSettings() { return this._$scrollingSettings.getValue(); }\r\n\r\n protected _$snapToItem = new BehaviorSubject<boolean>(DEFAULT_SNAP_TO_ITEM);\r\n readonly $snapToItem = this._$snapToItem.asObservable();\r\n @Input()\r\n set snapToItem(v: boolean) {\r\n if (this._$snapToItem.getValue() !== v) {\r\n this._$snapToItem.next(v);\r\n }\r\n }\r\n get snapToItem() { return this._$snapToItem.getValue(); }\r\n\r\n protected _$scrollingOneByOne = new BehaviorSubject<boolean>(DEFAULT_SCROLLING_ONE_BY_ONE);\r\n readonly $scrollingOneByOne = this._$scrollingOneByOne.asObservable();\r\n @Input()\r\n set scrollingOneByOne(v: boolean) {\r\n if (this._$scrollingOneByOne.getValue() !== v) {\r\n this._$scrollingOneByOne.next(v);\r\n }\r\n }\r\n get scrollingOneByOne() { return this._$scrollingOneByOne.getValue(); }\r\n\r\n protected _$snapToItemAlign = new BehaviorSubject<SnapToItemAlign>(DEFAULT_SNAP_TO_ITEM_ALIGN);\r\n readonly $snapToItemAlign = this._$snapToItemAlign.asObservable();\r\n @Input()\r\n set snapToItemAlign(v: SnapToItemAlign) {\r\n if (this._$snapToItemAlign.getValue() !== v) {\r\n this._$snapToItemAlign.next(v);\r\n }\r\n }\r\n get snapToItemAlign() { return this._$snapToItemAlign.getValue(); }\r\n\r\n protected _$snappingDistance = new BehaviorSubject<SnappingDistance>(DEFAULT_SNAPPING_DISTANCE);\r\n readonly $snappingDistance = this._$snappingDistance.asObservable();\r\n @Input()\r\n set snappingDistance(v: SnappingDistance) {\r\n if (this._$snappingDistance.getValue() !== v) {\r\n this._$snappingDistance.next(v);\r\n }\r\n }\r\n get snappingDistance() { return this._$snappingDistance.getValue(); }\r\n\r\n protected _$animationParams = new BehaviorSubject<IAnimationParams>(DEFAULT_ANIMATION_PARAMS);\r\n readonly $animationParams = this._$animationParams.asObservable();\r\n @Input()\r\n set animationParams(v: IAnimationParams) {\r\n if (this._$animationParams.getValue() !== v) {\r\n this._$animationParams.next(v);\r\n }\r\n }\r\n get animationParams() { return this._$animationParams.getValue(); }\r\n\r\n protected _normalizeValueFromZero = inject(SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO);\r\n\r\n protected _isScrollsTo: boolean = false;\r\n\r\n protected _scrollDirection = new ScrollingDirection();\r\n get scrollDirection() {\r\n return this._scrollDirection.get();\r\n }\r\n\r\n get $scrollDirection() { return this._scrollDirection.$direction; }\r\n\r\n protected _$wheel = new Subject<number>();\r\n readonly $wheel = this._$wheel.asObservable();\r\n\r\n protected _$scroll = new Subject<boolean>();\r\n readonly $scroll = this._$scroll.asObservable();\r\n\r\n protected _$scrollEnd = new Subject<boolean>();\r\n readonly $scrollEnd = this._$scrollEnd.asObservable();\r\n\r\n protected _velocities: Array<number> = [];\r\n\r\n protected _$velocity = new BehaviorSubject<number>(0);\r\n protected $velocity = this._$velocity.asObservable();\r\n get velocity() { return this._$velocity.getValue(); }\r\n\r\n protected _$averageVelocity = new BehaviorSubject<number>(0);\r\n protected $averageVelocity = this._$averageVelocity.asObservable();\r\n get averageVelocity() { return this._$averageVelocity.getValue(); }\r\n\r\n private _measureVelocityTimestamp: number = Date.now();\r\n\r\n private _measureVelocityLastPosition: number = this._$isVertical.getValue() ? this._y : this._x;\r\n\r\n private _startPosition = 0;\r\n\r\n protected _animator = new Animator();\r\n\r\n protected _interactive = true;\r\n\r\n private _overscrollIteration: number = 0;\r\n\r\n override set x(v: number) {\r\n this.setX(v);\r\n }\r\n override get x() { return this._x; }\r\n\r\n protected setX(x: number, snap: boolean = true, normalize: boolean = true) {\r\n if (x !== undefined && !Number.isNaN(x)) {\r\n this.updateDirection(x, this._y);\r\n\r\n this._x = this._actualY = x;\r\n\r\n if (normalize) {\r\n this.normalizeScrollSize();\r\n }\r\n\r\n this.refreshCoordinate(this._x, this._y);\r\n\r\n this.measureVelocity();\r\n\r\n if (snap) {\r\n this.checkIntersectionComponent();\r\n }\r\n }\r\n }\r\n\r\n override set y(v: number) {\r\n this.setY(v);\r\n }\r\n override get y() { return this._y; }\r\n\r\n protected setY(y: number, snap: boolean = true, normalize: boolean = true) {\r\n if (y !== undefined && !Number.isNaN(y)) {\r\n this.updateDirection(y, this._y);\r\n\r\n this._y = this._actualY = y;\r\n\r\n if (normalize) {\r\n this.normalizeScrollSize();\r\n }\r\n\r\n this.refreshCoordinate(this._x, this._y);\r\n\r\n this.measureVelocity();\r\n\r\n if (snap) {\r\n this.checkIntersectionComponent();\r\n }\r\n }\r\n }\r\n\r\n protected _delta: number = 0;\r\n set delta(v: number) {\r\n this._delta = v;\r\n this._startPosition += v;\r\n }\r\n\r\n override set startLayoutOffset(v: number) {\r\n if (this._startLayoutOffset !== v) {\r\n this._startLayoutOffset = v;\r\n\r\n this.refreshCoordinate(this._x, this._y);\r\n }\r\n }\r\n override get startLayoutOffset() { return this._startLayoutOffset; }\r\n\r\n protected _intersectionComponentId: Id | null = null;\r\n\r\n protected _isAlignmentAnimation = false;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngAfterViewInit() {\r\n let mouseCanceled = false,\r\n touchCanceled = false;\r\n\r\n const $viewportBounds = this.$viewportBounds;\r\n $viewportBounds.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n tap(() => {\r\n this._isMoving = false;\r\n this._$grabbing.next(false);\r\n if (!mouseCanceled || !touchCanceled) {\r\n this.stopMoving();\r\n }\r\n mouseCanceled = touchCanceled = true;\r\n if (this.snapToItem || this.scrollingOneByOne) {\r\n this.stopScrolling(true);\r\n this.alignPosition(true, true);\r\n }\r\n this._$scrollEnd.next(false);\r\n }),\r\n ).subscribe();\r\n\r\n const $wheel = this.$wheel;\r\n $wheel.pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(v => of(this.averageVelocity)),\r\n debounceTime(100),\r\n tap(v => {\r\n this.snapWithInitialForceIfNecessary(v);\r\n this._scrollDirection.clear();\r\n }),\r\n ).subscribe();\r\n\r\n const $viewport = of(this.scrollViewport).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n ), $content = of(this.scrollContent).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n ), $wheelEmitter = this._inversion ? $viewport : $content;\r\n\r\n $wheelEmitter.pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(content => {\r\n return fromEvent<WheelEvent>(content, WHEEL, { passive: false }).pipe(\r\n filter(() => this._interactive),\r\n takeUntil(this._$unsubscribe),\r\n tap(e => {\r\n const isVertical = this._$isVertical.getValue();\r\n this.emitScrollableEvent();\r\n this.checkOverscroll(e);\r\n this.stopScrolling(true);\r\n const scrollSize = isVertical ? this.scrollHeight : this.scrollWidth,\r\n startPos = isVertical ? this._y : this._x,\r\n delta = isVertical ? e.deltaY : e.deltaX, dp = (startPos + delta),\r\n position = this.isInfinity ? dp : (dp < 0 ? 0 : dp > scrollSize ? scrollSize : dp);\r\n this.scroll({ [isVertical ? TOP : LEFT]: position, behavior: INSTANT, userAction: true, blending: false, fireUpdate: true });\r\n this._$wheel.next(delta);\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $mouseUp = race([\r\n fromEvent<MouseEvent>(window, MOUSE_UP, { passive: true }).pipe(\r\n takeUntil(this._$unsubscribe),\r\n ),\r\n $content.pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(content => fromEvent<MouseEvent>(content, MOUSE_UP, { passive: true }))\r\n ),\r\n ]),\r\n $mouseDragCancel = $mouseUp.pipe(\r\n takeUntil(this._$unsubscribe),\r\n delay(0),\r\n tap(() => {\r\n this._isMoving = false;\r\n this._$grabbing.next(false);\r\n if (!mouseCanceled) {\r\n this.stopMoving();\r\n }\r\n mouseCanceled = true;\r\n if (this.snapToItem && this.scrollingOneByOne) {\r\n this._isAlignmentAnimation = false;\r\n this.alignPosition(true, true);\r\n }\r\n this._$scrollEnd.next(true);\r\n }),\r\n );\r\n\r\n $content.pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(content => {\r\n return fromEvent<MouseEvent>(content, MOUSE_DOWN, { passive: false }).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(() => this._interactive),\r\n switchMap(e => {\r\n return race([fromEvent<MouseEvent>(window, MOUSE_UP, { passive: false }), fromEvent<MouseEvent>(content, MOUSE_UP, { passive: false })]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n takeUntil(fromEvent<MouseEvent>(window, MOUSE_MOVE, { passive: false })),\r\n tap(e => {\r\n this._isMoving = false;\r\n this._$grabbing.next(false);\r\n if (!mouseCanceled) {\r\n this.stopMoving();\r\n }\r\n mouseCanceled = true;\r\n if (this.snapToItem || this.scrollingOneByOne) {\r\n this._isAlignmentAnimation = false;\r\n this.alignPosition(true, true);\r\n }\r\n this._$scrollEnd.next(true);\r\n }),\r\n );\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n $content.pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(content => {\r\n return fromEvent<MouseEvent>(content, MOUSE_DOWN, { passive: false }).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => this._interactive),\r\n switchMap(e => {\r\n mouseCanceled = false;\r\n this._scrollDirection.clear();\r\n this.cancelOverscroll();\r\n this.onDragStart();\r\n this.stopScrolling(true);\r\n this.stopMoving();\r\n const target = e.target as HTMLElement;\r\n if (target.classList.contains(INTERACTIVE)) {\r\n return of(undefined);\r\n }\r\n const inversion = this._inversion, isVertical = this._$isVertical.getValue();\r\n this._isMoving = true;\r\n this._$grabbing.next(true);\r\n this._startPosition = (isVertical ? this.y : this.x);\r\n let prevClientPosition = isVertical ? e.clientY : e.clientX,\r\n startClientPos = prevClientPosition,\r\n offsets = new Array<[number, number]>(),\r\n velocities = new Array<[number, number]>(),\r\n startTime = Date.now();\r\n return fromEvent<MouseEvent>(window, MOUSE_MOVE, { passive: false }).pipe(\r\n takeUntil(this._$unsubscribe),\r\n takeUntil($mouseDragCancel),\r\n tap(e => {\r\n this.checkOverscroll(e);\r\n }),\r\n switchMap(e => {\r\n const { position, currentPos, endTime, scrollDelta } =\r\n this.calculatePosition(isVertical, e, inversion, startClientPos, startTime, prevClientPosition, offsets, velocities);\r\n prevClientPosition = currentPos;\r\n this.move(isVertical, position, true, true, true);\r\n const offset = Math.abs(position) - Math.abs(isVertical ? this._y : this._x),\r\n scrollSize = isVertical ? this.scrollHeight : this.scrollWidth,\r\n viewportSize = isVertical ? this._$viewportBounds.getValue().height : this._$viewportBounds.getValue().width;\r\n if (position >= (scrollSize - viewportSize * .5) || position <= 0) {\r\n startClientPos -= offset;\r\n }\r\n startTime = endTime;\r\n return race([fromEvent<MouseEvent>(window, MOUSE_UP, { passive: false }), fromEvent<MouseEvent>(content, MOUSE_UP, { passive: false })]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n takeUntil($mouseDragCancel),\r\n tap(e => {\r\n mouseCanceled = true;\r\n this.cancelOverscroll();\r\n const endTime = Date.now(),\r\n timestamp = endTime - startTime,\r\n { v0 } = this.calculateVelocity(offsets, scrollDelta, timestamp),\r\n { a0 } = this.calculateAcceleration(velocities, v0, timestamp);\r\n this._isMoving = false;\r\n this._$grabbing.next(false);\r\n if (!this.snapIfNecessary(v0, false) && this.scrollBehavior !== BEHAVIOR_INSTANT) {\r\n this.moveWithAcceleration(isVertical, position, 0, v0, a0, timestamp);\r\n } else {\r\n this.snapIfNecessary(v0);\r\n this._$scrollEnd.next(true);\r\n }\r\n }),\r\n );\r\n }),\r\n );\r\n })\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $touchUp = race(\r\n [\r\n fromEvent<TouchEvent>(window, TOUCH_END, { passive: false }).pipe(\r\n takeUntil(this._$unsubscribe),\r\n ),\r\n $content.pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(content => fromEvent<TouchEvent>(content, TOUCH_END, { passive: false })),\r\n ),\r\n ]\r\n ),\r\n $touchCanceler = $touchUp.pipe(\r\n takeUntil(this._$unsubscribe),\r\n delay(0),\r\n tap(() => {\r\n this._isMoving = false;\r\n this._$grabbing.next(false);\r\n if (!touchCanceled) {\r\n this.stopMoving();\r\n }\r\n touchCanceled = true;\r\n if (this.snapToItem && this.scrollingOneByOne) {\r\n this._isAlignmentAnimation = false;\r\n this.alignPosition(true, true);\r\n }\r\n this._$scrollEnd.next(true);\r\n }),\r\n );\r\n\r\n $content.pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(content => {\r\n return fromEvent<TouchEvent>(content, TOUCH_START, { passive: false }).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(() => this._interactive),\r\n switchMap(e => {\r\n return race([fromEvent<TouchEvent>(window, TOUCH_END, { passive: false }), fromEvent<TouchEvent>(content, TOUCH_END, { passive: false })]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n takeUntil(fromEvent<TouchEvent>(window, TOUCH_MOVE, { passive: false })),\r\n tap(e => {\r\n this._isMoving = false;\r\n this._$grabbing.next(false);\r\n if (!touchCanceled) {\r\n this.stopMoving();\r\n }\r\n touchCanceled = true;\r\n if (this.snapToItem || this.scrollingOneByOne) {\r\n this._isAlignmentAnimation = false;\r\n this.alignPosition(true, true);\r\n }\r\n this._$scrollEnd.next(true);\r\n }),\r\n );\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n $content.pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(content => {\r\n return fromEvent<TouchEvent>(content, TOUCH_START, { passive: false }).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(() => this._interactive),\r\n switchMap(e => {\r\n touchCanceled = false;\r\n this._scrollDirection.clear();\r\n this.cancelOverscroll();\r\n this.onDragStart();\r\n this.stopScrolling(true);\r\n this.stopMoving();\r\n const target = e.target as HTMLElement;\r\n if (target.classList.contains(INTERACTIVE)) {\r\n return of(undefined);\r\n }\r\n const inversion = this._inversion, isVertical = this._$isVertical.getValue();\r\n this._isMoving = true;\r\n this._$grabbing.next(true);\r\n this._startPosition = (isVertical ? this.y : this.x);\r\n let prevClientPosition = isVertical ? e.touches[e.touches.length - 1].clientY : e.touches[e.touches.length - 1].clientX,\r\n startClientPos = prevClientPosition,\r\n offsets = new Array<[number, number]>(), velocities = new Array<[number, number]>(),\r\n startTime = Date.now();\r\n return fromEvent<TouchEvent>(window, TOUCH_MOVE, { passive: false }).pipe(\r\n takeUntil(this._$unsubscribe),\r\n takeUntil($touchCanceler),\r\n tap(e => {\r\n this.checkOverscroll(e);\r\n }),\r\n switchMap(e => {\r\n const { position, currentPos, endTime, scrollDelta } =\r\n this.calculatePosition(isVertical, e, inversion, startClientPos, startTime, prevClientPosition, offsets, velocities);\r\n prevClientPosition = currentPos;\r\n this.move(isVertical, position, true, true, true);\r\n const offset = Math.abs(position) - Math.abs(isVertical ? this._y : this._x),\r\n scrollSize = isVertical ? this.scrollHeight : this.scrollWidth,\r\n viewportSize = isVertical ? this._$viewportBounds.getValue().height : this._$viewportBounds.getValue().width;\r\n if (position >= (scrollSize - viewportSize * .5) || position <= 0) {\r\n startClientPos -= offset;\r\n }\r\n startTime = endTime;\r\n return race([fromEvent<TouchEvent>(window, TOUCH_END, { passive: false }), fromEvent<TouchEvent>(content, TOUCH_END, { passive: false })]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n takeUntil($touchCanceler),\r\n tap(e => {\r\n touchCanceled = true;\r\n this.cancelOverscroll();\r\n const endTime = Date.now(),\r\n timestamp = endTime - startTime,\r\n { v0 } = this.calculateVelocity(offsets, scrollDelta, timestamp),\r\n { a0 } = this.calculateAcceleration(velocities, v0, timestamp);\r\n this._isMoving = false;\r\n this._$grabbing.next(false);\r\n if (!this.snapIfNecessary(v0, false) && this.scrollBehavior !== BEHAVIOR_INSTANT) {\r\n this.moveWithAcceleration(isVertical, position, 0, v0, a0, timestamp);\r\n } else {\r\n this.snapIfNecessary(v0);\r\n this._$scrollEnd.next(true);\r\n }\r\n }),\r\n );\r\n }),\r\n );\r\n })\r\n );\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n protected updateDirection(position: number, prePosition: number) {\r\n const delta = (position - this._delta) - prePosition;\r\n this._scrollDirection.add(delta > 0 ? 1 : delta < 0 ? -1 : 0);\r\n }\r\n\r\n protected override overrideCoordinates(x: number, y: number) {\r\n super.overrideCoordinates(x, y);\r\n const position = Math.abs(this._$isVertical.getValue() ? y : x);\r\n this._measureVelocityTimestamp = Date.now();\r\n this._measureVelocityLastPosition = position;\r\n this.refreshCoordinate(x, y);\r\n }\r\n\r\n protected measureVelocity() {\r\n const timestamp = Date.now();\r\n if (timestamp === this._measureVelocityTimestamp) {\r\n return;\r\n }\r\n const position = Math.abs(this._$isVertical.getValue() ? this._y : this._x);\r\n if (!this.isInfinity) {\r\n if (position <= 0 || position >= (this._$isVertical.getValue() ? this.scrollHeight : this.scrollWidth)) {\r\n this._velocities = [0];\r\n this._$averageVelocity.next(0);\r\n this._measureVelocityLastPosition = position;\r\n this._measureVelocityTimestamp = timestamp;\r\n return;\r\n }\r\n }\r\n if (this._delta !== 0) {\r\n return;\r\n }\r\n const timeDelta = timestamp - this._measureVelocityTimestamp,\r\n positionDelta = Math.abs(position - this._measureVelocityLastPosition),\r\n velocity = timeDelta > 0 ? positionDelta / timeDelta : 0;\r\n let avgVelocity = this._velocities.length > 0 ? this._velocities.reduce((p, c) => p + c) : 0;\r\n if (this._velocities.length >= MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS) {\r\n this._velocities.shift();\r\n }\r\n avgVelocity += velocity;\r\n this._$velocity.next(velocity);\r\n this._velocities.push(velocity);\r\n this._$averageVelocity.next(avgVelocity / MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS);\r\n this._measureVelocityLastPosition = position;\r\n this._measureVelocityTimestamp = timestamp;\r\n }\r\n\r\n protected stopMoving() { }\r\n\r\n private snapIfNecessary(v0: number, withInitialForce: boolean = true, animated: boolean = true, force: boolean = false) {\r\n const scrollDirection = this._scrollDirection.get() || (force ? 1 : 0);\r\n if (scrollDirection === 0) {\r\n return false;\r\n }\r\n const snapToItem = this.snapToItem;\r\n if (!!snapToItem) {\r\n const scrollingOneByOne = this.scrollingOneByOne;\r\n if (scrollingOneByOne) {\r\n return this.alignPosition();\r\n }\r\n if (withInitialForce) {\r\n return this.snapWithInitialForceIfNecessary(v0, animated, force);\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n protected snapWithInitialForceIfNecessary(v0: number | null = null, animated = true, force: boolean = false) {\r\n const t = this.animationParams.snapToItem * .01, s = this.getSnappedComponentSize(),\r\n va = s !== null && t !== 0 ? (s / t) : 0;\r\n if (va >= Math.abs(v0 ?? this.averageVelocity)) {\r\n return this.alignPosition(animated, force);\r\n }\r\n return false;\r\n }\r\n\r\n private calculatePosition(isVertical: boolean, e: MouseEvent | TouchEvent | any, inversion: boolean, startClientPos: number, startTime: number,\r\n prevClientPosition: number, offsets: Array<[number, number]>, velocities: Array<[number, number]>\r\n ) {\r\n const currentPos = isVertical ? e.touches?.[e.touches?.length - 1]?.clientY || e.clientY : e.touches?.[e.touches?.length - 1]?.clientX || e.clientX,\r\n scrollSize = isVertical ? this.scrollHeight : this.scrollWidth, delta = (inversion ? -1 : 1) * (startClientPos - currentPos),\r\n dp = this._startPosition + delta, position = this.isInfinity ? dp : dp < 0 ? 0 : dp > scrollSize ? scrollSize : dp,\r\n endTime = Date.now(), timestamp = endTime - startTime, scrollDelta = prevClientPosition === 0 ? 0 : prevClientPosition - currentPos,\r\n { v0 } = this.calculateVelocity(offsets, scrollDelta, timestamp);\r\n this.calculateAcceleration(velocities, v0, timestamp);\r\n return { position, currentPos, endTime, scrollDelta };\r\n }\r\n\r\n private cancelOverscroll() {\r\n if (!this.overscrollEnabled) {\r\n return;\r\n }\r\n this._overscrollIteration = 0;\r\n }\r\n\r\n private checkOverscrollByAxis(e: Event, pos: number, limit: number) {\r\n const p = Math.abs(pos);\r\n if (p > 0 && p < limit) {\r\n if (e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n this._overscrollIteration = 0;\r\n } else {\r\n if (this._overscrollIteration < OVERSCROLL_START_ITERATION) {\r\n this._overscrollIteration++;\r\n if (e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n }\r\n }\r\n }\r\n\r\n private checkOverscroll(e: Event) {\r\n if (!this._overscrollEnabled || !this.overscrollEnabled) {\r\n if (e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n return;\r\n }\r\n if (this._overscrollEnabled) {\r\n if (this._$isVertical.getValue()) {\r\n this.checkOverscrollByAxis(e, this._y, this.scrollHeight);\r\n } else {\r\n this.checkOverscrollByAxis(e, this._x, this.scrollWidth);\r\n }\r\n }\r\n }\r\n\r\n private calculateVelocity(offsets: Array<[number, number]>, delta: number, timestamp: number, indexOffset: number = 10) {\r\n offsets.push([delta, timestamp < ANIMATOR_MIN_TIMESTAMP ? ANIMATOR_MIN_TIMESTAMP : timestamp]);\r\n\r\n const len = offsets.length, startIndex = len > indexOffset ? len - indexOffset : 0, lastVSign = calculateDirection(offsets),\r\n speedScale = this.scrollingSettings?.speedScale ?? SPEED_SCALE;\r\n let vSum = 0;\r\n for (let i = startIndex, l = offsets.length; i < l; i++) {\r\n const p0 = offsets[i];\r\n if (lastVSign !== Math.sign(p0[0])) {\r\n continue;\r\n }\r\n\r\n const v0 = (p0[1] !== 0 ? lastVSign * Math.abs(p0[0] / p0[1]) * speedScale : 0);\r\n vSum += Math.sign(v0) * Math.pow(v0, 4) * .003;\r\n }\r\n\r\n const l = Math.min(offsets.length, indexOffset), v0 = l > 0 ? (vSum / l) : 0;\r\n return { v0 };\r\n }\r\n\r\n private calculateAcceleration(velocities: Array<[number, number]>, delta: number, timestamp: number, indexOffset: number = 10) {\r\n velocities.push([delta, timestamp < ANIMATOR_MIN_TIMESTAMP ? ANIMATOR_MIN_TIMESTAMP : timestamp]);\r\n const len = velocities.length, startIndex = len > indexOffset ? len - indexOffset : 0;\r\n let aSum = 0, prevV0: [number, number] | undefined, iteration = 0, lastVSign = calculateDirection(velocities);\r\n const mass = this.scrollingSettings?.mass ?? MASS;\r\n for (let i = startIndex, l = velocities.length; i < l; i++) {\r\n const v00 = prevV0, v01 = velocities[i];\r\n if (lastVSign !== Math.sign(v01[0])) {\r\n continue;\r\n }\r\n if (v00) {\r\n const a0 = timestamp < MAX_VELOCITY_TIMESTAMP ? (v00[1] !== 0 ? (lastVSign * Math.abs(Math.abs(v01[0]) - Math.abs(v00[0]))) / Math.abs(v00[1]) : 0) : 0.1;\r\n aSum = (aSum * mass) + a0;\r\n prevV0 = v01;\r\n }\r\n prevV0 = v01;\r\n iteration++;\r\n }\r\n\r\n const a0 = aSum * (this.scrollingSettings?.frictionalForce ?? FRICTION_FORCE);\r\n return { a0 };\r\n }\r\n\r\n stopScrolling(force: boolean = false) {\r\n if (this._isAlignmentAnimation && !force) {\r\n return;\r\n }\r\n this._isAlignmentAnimation = false;\r\n this._animator.stop();\r\n }\r\n\r\n protected move(isVertical: boolean, position: number, blending: boolean = false, userAction: boolean = false, fireUpdate: boolean = true) {\r\n this.scroll({ [isVertical ? TOP : LEFT]: position, behavior: INSTANT, blending, userAction, fireUpdate });\r\n }\r\n\r\n protected moveWithAcceleration(isVertical: boolean, position: number, v0: number, v: number, a0: number, timestamp: number) {\r\n if (a0 !== 0 && timestamp < MAX_VELOCITY_TIMESTAMP) {\r\n const dvSign = Math.sign(v),\r\n mass = this.scrollingSettings?.mass ?? MASS,\r\n duration = DURATION, maxDuration = this.scrollingSettings?.maxDuration ?? MAX_DURATION,\r\n maxDist = this.scrollingSettings?.maxDistance ?? MAX_DIST,\r\n maxDistance = dvSign * maxDist, s = (dvSign * Math.abs((a0 * Math.pow(duration, 2)) * .5) / 1000) / mass,\r\n distance = Math.abs(s) < maxDist ? s : maxDistance, positionWithVelocity = position + (this._inversion ? -1 : 1) * distance,\r\n vmax = Math.max(Math.abs(v0), Math.abs(v)),\r\n ad = Math.abs(vmax !== 0 ? Math.sqrt(vmax) : 0) * 10 / mass,\r\n aDuration = ad < maxDuration ? ad : maxDuration,\r\n startPosition = isVertical ? this.y : this.x;\r\n this.animate(startPosition, Math.round(positionWithVelocity), aDuration, easeOutQuad, true);\r\n } else {\r\n this.alignPosition(true, true);\r\n }\r\n }\r\n\r\n protected normalizeValue(value: number) {\r\n if (this.isInfinity) {\r\n return value;\r\n }\r\n const isVertical = this._$isVertical.getValue(),\r\n startOffset = this._normalizeValueFromZero ? 0 : this.startOffset,\r\n scrollSize = this.scrollable ? ((isVertical ? this.scrollHeight : this.scrollWidth) - this.alignmentEndOffset) : 0,\r\n result = this.scrollable ? (value <= startOffset ? startOffset : value > scrollSize ? scrollSize : value) : startOffset;\r\n return result;\r\n }\r\n\r\n protected animate(startValue: number, endValue: number, duration = ANIMATION_DURATION, easingFunction: Easing = easeOutQuad,\r\n userAction: boolean = false, alignmentAtComplete: boolean = true, skipOverridedCoordinates: boolean = false) {\r\n const isVertical = this._$isVertical.getValue();\r\n let iteration = 0, position = startValue;\r\n this._isAlignmentAnimation = !alignmentAtComplete;\r\n\r\n this._animator.animate({\r\n withDelta: this._service.dynamic && !this.isInfinity,\r\n startValue,\r\n endValue,\r\n duration,\r\n easingFunction,\r\n getPropValue: () => {\r\n return isVertical ? this._y : this._x;\r\n }, onUpdate: ({ value, timestamp, elapsed }) => {\r\n if (this._isCoordinatesOverrided && !skipOverridedCoordinates) {\r\n this._isCoordinatesOverrided = false;\r\n const currentCoordinate = isVertical ? this._y : this._x, delta = endValue - value;\r\n this.animate(currentCoordinate, currentCoordinate + delta, duration - elapsed, easingFunction, userAction, alignmentAtComplete);\r\n return;\r\n }\r\n const v0 = calculateVelocity(position, value, timestamp) ?? this.averageVelocity;\r\n position = value;\r\n if (alignmentAtComplete && !this._isAlignmentAnimation && !skipOverridedCoordinates) {\r\n if (iteration < MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS || !this.snapIfNecessary(v0)) {\r\n this.move(isVertical, value, false, userAction);\r\n }\r\n } else {\r\n this.move(isVertical, value, false, userAction);\r\n }\r\n iteration++;\r\n this._service.update(true);\r\n }, onComplete: ({ value, timestamp }) => {\r\n this._isAlignmentAnimation = false;\r\n const v0 = calculateVelocity(position, value, timestamp);\r\n if (alignmentAtComplete && !this._isAlignmentAnimation && !skipOverridedCoordinates) {\r\n this.snapIfNecessary(v0);\r\n } else {\r\n this.move(isVertical, value, false, userAction);\r\n }\r\n this._$scrollEnd.next(userAction);\r\n this._service.update(true);\r\n this.onAnimationComplete(value);\r\n },\r\n });\r\n }\r\n\r\n protected getSnappedComponentSize() {\r\n const align = this.snapToItemAlign, isVertical = this._$isVertical.getValue(), sd = this.snappingDistance,\r\n snappingDistance = parseFloatOrPersentageValue(sd),\r\n isPersentageSnappingDistance = isPercentageValue(sd);\r\n let size: number | null = null;\r\n const scrollDirection = this._scrollDirection.get(),\r\n currentPosition = (isVertical ? this.scrollTop : this.scrollLeft) - this._startLayoutOffset,\r\n currentComponentBounds = this._service.getComponentBoundsByIntersectionPosition(currentPosition),\r\n currentComponentSize = isVertical ? currentComponentBounds?.height ?? 0 : currentComponentBounds?.width ?? 0;\r\n switch (align) {\r\n case SnapToItemAligns.START: {\r\n const offset = ((scrollDirection === 1 ? currentComponentSize : 0) - (isPersentageSnappingDistance ? currentComponentSize * snappingDistance : snappingDistance)) * scrollDirection,\r\n componentBounds = this._service.getComponentBoundsByIntersectionPosition(currentPosition + offset);\r\n if (!!componentBounds) {\r\n const { width, height } = componentBounds,\r\n compSize = isVertical ? height : width;\r\n size = compSize;\r\n }\r\n break;\r\n }\r\n case SnapToItemAligns.CENTER: {\r\n const viewportSize = isVertical ? this._$viewportBounds.getValue().height : this._$viewportBounds.getValue().width,\r\n offset = (currentComponentSize * .5 - (isPersentageSnappingDistance ? currentComponentSize * snappingDistance : snappingDistance)) * scrollDirection,\r\n actualPos = currentPosition + offset + viewportSize * .5,\r\n maxPos = isVertical ? this.scrollHeight : this.scrollWidth,\r\n pos = Math.min(actualPos, maxPos);\r\n const componentBounds = this._service.getComponentBoundsByIntersectionPosition(pos);\r\n if (!!componentBounds) {\r\n const { width, height } = componentBounds,\r\n compSize = isVertical ? height : width;\r\n size = compSize;\r\n }\r\n break;\r\n }\r\n case SnapToItemAligns.END: {\r\n const viewportSize = isVertical ? this._$viewportBounds.getValue().height : this._$viewportBounds.getValue().width,\r\n offset = ((scrollDirection === 1 ? currentComponentSize : 0) - (isPersentageSnappingDistance ? currentComponentSize * snappingDistance : snappingDistance)) * scrollDirection,\r\n actualPos = currentPosition + offset + viewportSize,\r\n maxPos = isVertical ? this.scrollHeight : this.scrollWidth,\r\n pos = Math.min(actualPos, maxPos);\r\n const componentBounds = this._service.getComponentBoundsByIntersectionPosition(pos);\r\n if (!!componentBounds) {\r\n const { width, height } = componentBounds,\r\n compSize = isVertical ? height : width;\r\n size = compSize;\r\n }\r\n break;\r\n }\r\n }\r\n return size;\r\n }\r\n\r\n protected alignPosition(animated: boolean = true, force: boolean = false) {\r\n if (!this.snapToItem || this._isAlignmentAnimation) {\r\n return false;\r\n }\r\n this.stopScrolling(true);\r\n const scrollDirection = this._scrollDirection.get() || (force ? 1 : 0);\r\n if (scrollDirection === 0) {\r\n return false;\r\n }\r\n const align = this.snapToItemAlign, isVertical = this._$isVertical.getValue(),\r\n viewportSize = isVertical ? this._$viewportBounds.getValue().height : this._$viewportBounds.getValue().width,\r\n sd = this.snappingDistance,\r\n snappingDistance = parseFloatOrPersentageValue(sd),\r\n isPersentageSnappingDistance = isPercentageValue(sd);\r\n let position: number | null = null, size: number = 0;\r\n const currentPosition = (isVertical ? this.scrollTop : this.scrollLeft) - this._startLayoutOffset,\r\n currentComponentBounds = this._service.getComponentBoundsByIntersectionPosition(currentPosition),\r\n currentComponentSize = isVertical ? currentComponentBounds?.height ?? 0 : currentComponentBounds?.width ?? 0;\r\n switch (align) {\r\n case SnapToItemAligns.START: {\r\n const offset = ((scrollDirection === 1 ? currentComponentSize : 0) - (isPersentageSnappingDistance ? currentComponentSize * snappingDistance : snappingDistance)) * scrollDirection,\r\n componentBounds = this._service.getComponentBoundsByIntersectionPosition(currentPosition + offset);\r\n if (!!componentBounds) {\r\n const { x, y, width, height } = componentBounds, startOffset = this.startOffset, alignmentStartOffset = this.alignmentStartOffset,\r\n componentPosition = isVertical ? y : x;\r\n size = isVertical ? height : width;\r\n const maxPos = (isVertical ? this.scrollHeight : this.scrollWidth) - (startOffset - alignmentStartOffset) + this._startLayoutOffset;\r\n position = componentPosition - (startOffset - alignmentStartOffset) + this._startLayoutOffset;\r\n if (this.isInfinity) {\r\n if (position < 0 || position > maxPos) {\r\n position = maxPos;\r\n if (isVertical) {\r\n this._y = this.scrollHeight;\r\n } else {\r\n this._x = this.scrollWidth;\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case SnapToItemAligns.CENTER: {\r\n const offset = (currentComponentSize * .5 - (isPersentageSnappingDistance ? currentComponentSize * snappingDistance : snappingDistance)) * scrollDirection,\r\n actualPos = currentPosition + offset + viewportSize * .5,\r\n maxPos = isVertical ? this.scrollHeight : this.scrollWidth,\r\n pos = Math.min(actualPos, maxPos);\r\n const componentBounds = this._service.getComponentBoundsByIntersectionPosition(pos);\r\n if (!!componentBounds) {\r\n const { x, y, width, height } = componentBounds, startOffset = this.startOffset, alignmentStartOffset = this.alignmentStartOffset,\r\n componentPosition = isVertical ? y : x;\r\n size = isVertical ? height : width;\r\n const maxPos = (isVertical ? this.scrollHeight : this.scrollWidth) - size * .5 - viewportSize * .5 - (startOffset - alignmentStartOffset) * .5;\r\n position = componentPosition + size * .5 - viewportSize * .5 - (startOffset - alignmentStartOffset) * .5 + this._startLayoutOffset;\r\n if (this.isInfinity) {\r\n if (position <= 0 || position > maxPos) {\r\n position = maxPos;\r\n if (isVertical) {\r\n this._y = this.scrollHeight;\r\n } else {\r\n this._x = this.scrollWidth;\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case SnapToItemAligns.END: {\r\n const offset = ((scrollDirection === 1 ? currentComponentSize : 0) - (isPersentageSnappingDistance ? currentComponentSize * snappingDistance : snappingDistance)) * scrollDirection,\r\n actualPos = currentPosition + offset + viewportSize,\r\n maxPos = isVertical ? this.scrollHeight : this.scrollWidth,\r\n pos = Math.min(actualPos, maxPos);\r\n const componentBounds = this._service.getComponentBoundsByIntersectionPosition(pos);\r\n if (!!componentBounds) {\r\n const { x, y, width, height } = componentBounds,\r\n componentPosition = isVertical ? y : x;\r\n size = isVertical ? height : width;\r\n position = componentPosition - viewportSize + this._startLayoutOffset;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n const cPos = (isVertical ? this.scrollTop : this.scrollLeft);\r\n\r\n if (position !== null && position !== cPos) {\r\n this.stopScrolling(true);\r\n this.animate(cPos, position, animated ? this.animationParams.snapToItem : 1, easeOutQuad, false, false, true);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n protected checkIntersectionComponent() {\r\n const align = this.snapToItemAlign, isVertical = this._$isVertical.getValue(),\r\n viewportSize = isVertical ? this._$viewportBounds.getValue().height : this._$viewportBounds.getValue().width;\r\n let componentId: Id | null = null;\r\n const currentPosition = (isVertical ? this.scrollTop : this.scrollLeft) - this._startLayoutOffset;\r\n switch (align) {\r\n case SnapToItemAligns.START: {\r\n const maxPos = isVertical ? this.scrollHeight : this.scrollWidth,\r\n componentBounds = this._service.getComponentBoundsByIntersectionPosition(currentPosition, maxPos);\r\n if (!!componentBounds) {\r\n const { id } = componentBounds;\r\n componentId = id;\r\n }\r\n break;\r\n }\r\n case SnapToItemAligns.CENTER: {\r\n const actualPos = currentPosition + viewportSize * .5,\r\n maxPos = isVertical ? this.scrollHeight : this.scrollWidth,\r\n pos = Math.min(actualPos, maxPos);\r\n const componentBounds = this._service.getComponentBoundsByIntersectionPosition(pos, maxPos);\r\n if (!!componentBounds) {\r\n const { id } = componentBounds;\r\n componentId = id;\r\n }\r\n break;\r\n }\r\n case SnapToItemAligns.END: {\r\n const actualPos = currentPosition + viewportSize,\r\n maxPos = isVertical ? this.scrollHeight : this.scrollWidth,\r\n pos = Math.min(actualPos, maxPos);\r\n const componentBounds = this._service.getComponentBoundsByIntersectionPosition(pos, maxPos);\r\n if (!!componentBounds) {\r\n const { id } = componentBounds;\r\n componentId = id;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n if (componentId !== this._intersectionComponentId && componentId !== null) {\r\n this._service.setIntersectionElementBySnapToItemAlign(componentId);\r\n }\r\n this._intersectionComponentId = componentId;\r\n }\r\n\r\n protected onAnimationComplete(position: number) { }\r\n\r\n fireScroll(userAction: boolean = false) {\r\n this._$updateScrollBar.next();\r\n this.emitScrollableEvent();\r\n this.fireScrollEvent(userAction);\r\n }\r\n\r\n scrollLimits(value?: number | undefined, silent: boolean = false): boolean {\r\n if (!this.isInfinity) {\r\n const x = value !== undefined ? value : this._x, y = value !== undefined ? value : this._y, isVertical = this._$isVertical.getValue();\r\n if (isVertical) {\r\n const yy = this.normalizeValue(y);\r\n if (y !== yy) {\r\n if (silent) {\r\n this._y = yy;\r\n this.refreshCoordinate(this._x, this._y);\r\n } else {\r\n this.y = yy;\r\n }\r\n return true;\r\n }\r\n } else {\r\n const xx = this.normalizeValue(x);\r\n if (x !== xx) {\r\n if (silent) {\r\n this._x = xx;\r\n this.refreshCoordinate(this._x, this._y);\r\n } else {\r\n this.x = xx;\r\n }\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n scroll(params: IScrollToParams) {\r\n const posX = params.x || params.left || 0,\r\n posY = params.y || params.top || 0,\r\n userAction = params.userAction ?? false,\r\n snap = params.snap ?? true,\r\n normalize = params.normalize ?? true,\r\n ease = params.ease || easeOutQuad,\r\n fireUpdate = params.fireUpdate ?? true,\r\n behavior = params.behavior ?? INSTANT,\r\n blending = params.blending ?? true,\r\n force = params.force ?? false,\r\n duration = params.duration ?? ANIMATION_DURATION,\r\n isVertical = this._$isVertical.getValue();\r\n\r\n const x = this.normalizeValue(posX),\r\n y = this.normalizeValue(posY),\r\n prevX = this._x,\r\n prevY = this._y;\r\n if (behavior === AUTO || behavior === SMOOTH) {\r\n if (isVertical) {\r\n if (prevY !== y) {\r\n this.animate(prevY, y, duration, ease, userAction);\r\n }\r\n } else {\r\n if (prevX !== x) {\r\n this.animate(prevX, x, duration, ease, userAction);\r\n }\r\n }\r\n } else {\r\n if (isVertical) {\r\n if (this._y !== y || force) {\r\n if (!blending) {\r\n this.stopScrolling(force);\r\n }\r\n this.setY(y, snap, normalize);\r\n this.emitScrollableEvent();\r\n if (fireUpdate) {\r\n this.fireScrollEvent(userAction);\r\n }\r\n }\r\n } else {\r\n if (this._x !== x || force) {\r\n if (!blending) {\r\n this.stopScrolling(force);\r\n }\r\n this.setX(x, snap, normalize);\r\n this.emitScrollableEvent();\r\n if (fireUpdate) {\r\n this.fireScrollEvent(userAction);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected emitScrollableEvent() {\r\n if (!!this.cdkScrollable) {\r\n this.cdkScrollable.getElementRef()?.nativeElement?.dispatchEvent(SCROLL_EVENT);\r\n }\r\n }\r\n\r\n refreshCoordinate(x: number, y: number) {\r\n const scrollContent = this.scrollContent?.nativeElement as HTMLDivElement;\r\n scrollContent.style.transform = matrix3d((this._inversion ? 1 : -1) * x + (this._$isVertical.getValue() ? 0 : this._startLayoutOffset),\r\n (this._inversion ? 1 : -1) * y + (this._$isVertical.getValue() ? this._startLayoutOffset : 0));\r\n }\r\n\r\n protected fireScrollEvent(userAction: boolean) {\r\n this._$scroll.next(userAction);\r\n }\r\n\r\n protected onDragStart() { }\r\n\r\n reset(offset: number = 0) {\r\n this.stopScrolling();\r\n this.move(this._$isVertical.getValue(), offset);\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n\r\n if (this._animator) {\r\n this._animator.dispose();\r\n }\r\n }\r\n}","import { IScrollBarTemplateContext } from \"../interfaces\";\r\n\r\nexport const DEFAULT_THICKNESS = 6,\r\n DEFAULT_SIZE = 6,\r\n PX = 'px',\r\n WIDTH = 'width',\r\n HEIGHT = 'height',\r\n OPACITY = 'opacity',\r\n OPACITY_0 = '0',\r\n OPACITY_1 = '1',\r\n TRANSITION = 'transition',\r\n NONE = 'none',\r\n TRANSITION_FADE_IN = `${OPACITY} 500ms ease-out`;\r\n\r\nexport const DEFAULT_SCROLLBAR_TEMPLATE_CONTEXT: IScrollBarTemplateContext = {\r\n api: null,\r\n width: 0,\r\n height: 0,\r\n fillPositions: [0, 1],\r\n params: {}\r\n}\r\n","import { Component, ElementRef, EventEmitter, inject, Input, Output, TemplateRef, ViewChild } from '@angular/core';\r\nimport { BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, filter, fromEvent, of, startWith, Subject, switchMap, takeUntil, tap } from 'rxjs';\r\nimport { GradientColorPositions } from '../../types/gradient-color-positions';\r\nimport { NgScrollView, SCROLL_VIEW_INVERSION } from '../ng-scroll-view';\r\nimport { IScrollBarDragEvent, IScrollBarTemplateContext } from './interfaces';\r\nimport {\r\n DEFAULT_LANG_TEXT_DIR, DEFAULT_OVERLAPPING_SCROLLBAR, DEFAULT_SCROLLBAR_INTERACTIVE, LEFT, POSITION, POSITION_ABSOLUTE,\r\n POSITION_RELATIVE, RIGHT, SIZE_100_PERSENT, SIZE_AUTO, UNSET,\r\n} from '../../const';\r\nimport {\r\n DEFAULT_SCROLLBAR_TEMPLATE_CONTEXT,\r\n DEFAULT_SIZE, DEFAULT_THICKNESS, HEIGHT, NONE, OPACITY, OPACITY_0, OPACITY_1, PX, TRANSITION, TRANSITION_FADE_IN, WIDTH,\r\n} from './const';\r\nimport { SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, SCROLL_VIEW_OVERSCROLL_ENABLED } from '../ng-scroll-view/const';\r\nimport { NgScrollBarService } from './ng-scroll-bar.service';\r\nimport { NgScrollBarPublicService } from './ng-scroll-bar-public.service';\r\nimport { ScrollbarStates } from './enums';\r\nimport { TextDirection } from '../../types';\r\nimport { TextDirections } from '../../enums';\r\n\r\n/**\r\n * ScrollBar component.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-scroll-bar',\r\n providers: [\r\n { provide: SCROLL_VIEW_INVERSION, useValue: true },\r\n { provide: SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, useValue: false },\r\n { provide: SCROLL_VIEW_OVERSCROLL_ENABLED, useValue: false },\r\n NgScrollBarService,\r\n NgScrollBarPublicService,\r\n ],\r\n standalone: false,\r\n templateUrl: './ng-scroll-bar.component.html',\r\n styleUrls: ['./ng-scroll-bar.component.scss',]\r\n})\r\nexport class NgScrollBarComponent extends NgScrollView {\r\n @ViewChild('defaultRenderer', { read: TemplateRef<any> })\r\n protected _defaultRenderer: TemplateRef<any> | undefined = undefined;\r\n\r\n protected _scrollBarService = inject(NgScrollBarService);\r\n\r\n private _apiService = inject(NgScrollBarPublicService);\r\n\r\n private _$loading = new BehaviorSubject<boolean>(false);\r\n readonly $loading = this._$loading.asObservable();\r\n\r\n @Input()\r\n set loading(v: boolean) {\r\n this._$loading.next(v);\r\n }\r\n get loading() { return this._$loading.getValue(); }\r\n\r\n @Output()\r\n onDrag = new EventEmitter<IScrollBarDragEvent>();\r\n\r\n @Output()\r\n onDragEnd = new EventEmitter<IScrollBarDragEvent>();\r\n\r\n private _$thumbGradientPositions = new BehaviorSubject<GradientColorPositions>([0, 0]);\r\n readonly $thumbGradientPositions = this._$thumbGradientPositions.asObservable();\r\n\r\n @Input()\r\n set thumbGradientPositions(v: GradientColorPositions) {\r\n if (this._$thumbGradientPositions.getValue() !== v) {\r\n this._$thumbGradientPositions.next(v);\r\n }\r\n }\r\n get thumbGradientPositions() { return this._$thumbGradientPositions.getValue(); }\r\n\r\n private _$size = new BehaviorSubject<number>(DEFAULT_SIZE);\r\n readonly $size = this._$size.asObservable();\r\n\r\n @Input()\r\n set size(v: number) {\r\n if (this._$size.getValue() !== v) {\r\n this._$size.next(v);\r\n }\r\n }\r\n get size() { return this._$size.getValue(); }\r\n\r\n private _$thickness = new BehaviorSubject<number>(DEFAULT_THICKNESS);\r\n readonly $thickness = this._$thickness.asObservable();\r\n\r\n @Input()\r\n set thickness(v: number) {\r\n if (this._$thickness.getValue() !== v) {\r\n this._$thickness.next(v);\r\n }\r\n }\r\n get thickness() { return this._$thickness.getValue(); }\r\n\r\n private _$scrollbarMinSize = new BehaviorSubject<number>(0);\r\n readonly $scrollbarMinSize = this._$scrollbarMinSize.asObservable();\r\n\r\n @Input()\r\n set scrollbarMinSize(v: number) {\r\n if (this._$scrollbarMinSize.getValue() !== v) {\r\n this._$scrollbarMinSize.next(v);\r\n }\r\n }\r\n get scrollbarMinSize() { return this._$endOffset.getValue(); }\r\n\r\n private _$prepared = new BehaviorSubject<boolean>(false);\r\n readonly $prepared = this._$prepared.asObservable();\r\n\r\n @Input()\r\n set prepared(v: boolean) {\r\n if (this._$prepared.getValue() !== v) {\r\n this._$prepared.next(v);\r\n }\r\n }\r\n get prepared() { return this._$prepared.getValue(); }\r\n\r\n private _$langTextDir = new BehaviorSubject<TextDirection>(DEFAULT_LANG_TEXT_DIR);\r\n readonly $langTextDir = this._$langTextDir.asObservable();\r\n\r\n @Input()\r\n set langTextDir(v: TextDirection) {\r\n if (this._$langTextDir.getValue() !== v) {\r\n this._$langTextDir.next(v);\r\n }\r\n }\r\n get langTextDir() { return this._$langTextDir.getValue(); }\r\n\r\n private _$interactive = new BehaviorSubject<boolean>(DEFAULT_SCROLLBAR_INTERACTIVE);\r\n readonly $interactive = this._$interactive.asObservable();\r\n\r\n @Input()\r\n set interactive(v: boolean) {\r\n if (this._$interactive.getValue() !== v) {\r\n this._$interactive.next(v);\r\n }\r\n }\r\n get interactive() { return this._$interactive.getValue(); }\r\n\r\n private _$overlapping = new BehaviorSubject<boolean>(DEFAULT_OVERLAPPING_SCROLLBAR);\r\n readonly $overlapping = this._$overlapping.asObservable();\r\n\r\n @Input()\r\n set overlapping(v: boolean) {\r\n if (this._$overlapping.getValue() !== v) {\r\n this._$overlapping.next(v);\r\n }\r\n }\r\n get overlapping() { return this._$overlapping.getValue(); }\r\n\r\n private _$show = new BehaviorSubject<boolean>(false);\r\n readonly $show = this._$show.asObservable();\r\n\r\n @Input()\r\n set show(v: boolean) {\r\n if (this._$show.getValue() !== v) {\r\n this._$show.next(v);\r\n }\r\n }\r\n get show() { return this._$show.getValue(); }\r\n\r\n private _$params = new BehaviorSubject<{ [propName: string]: any } | null>({});\r\n readonly $params = this._$params.asObservable();\r\n\r\n @Input()\r\n set params(v: { [propName: string]: any } | null) {\r\n if (this._$params.getValue() !== v) {\r\n this._$params.next(v);\r\n }\r\n }\r\n get params() { return this._$params.getValue(); }\r\n\r\n private _$renderer = new BehaviorSubject<TemplateRef<any> | null>(null);\r\n readonly $renderer = this._$renderer.asObservable();\r\n\r\n @Input()\r\n set renderer(v: TemplateRef<any> | null) {\r\n if (this._$renderer.getValue() !== v) {\r\n this._$renderer.next(v);\r\n }\r\n }\r\n get renderer() { return this._$renderer.getValue(); }\r\n\r\n private _$thumbRenderer = new BehaviorSubject<TemplateRef<any> | null>(this._defaultRenderer ?? null);\r\n readonly $thumbRenderer = this._$thumbRenderer.asObservable();\r\n\r\n private _$hoverState = new BehaviorSubject<boolean>(false);\r\n readonly $hoverState = this._$hoverState.asObservable();\r\n\r\n private _$pressedState = new BehaviorSubject<boolean>(false);\r\n readonly $pressedState = this._$pressedState.asObservable();\r\n\r\n private _$templateContext = new BehaviorSubject<IScrollBarTemplateContext>(DEFAULT_SCROLLBAR_TEMPLATE_CONTEXT);\r\n readonly $templateContext = this._$templateContext.asObservable();\r\n\r\n private _$styles = new BehaviorSubject<{ [styleName: string]: any }>({});\r\n readonly $styles = this._$styles.asObservable();\r\n\r\n private _$thumbWidth = new BehaviorSubject<number>(0);\r\n readonly $thumbWidth = this._$thumbWidth.asObservable();\r\n\r\n private _$thumbHeight = new BehaviorSubject<number>(0);\r\n readonly $thumbHeight = this._$thumbHeight.asObservable();\r\n\r\n private _$scrollingCancel = new Subject<void>();\r\n protected readonly $scrollingCancel = this._$scrollingCancel.asObservable();\r\n\r\n private _elementRef = inject(ElementRef);\r\n\r\n constructor() {\r\n super();\r\n\r\n const $thumbWidth = this.$thumbWidth,\r\n $thumbHeight = this.$thumbHeight,\r\n $thumbGradientPositions = this.$thumbGradientPositions,\r\n $params = this.$params;\r\n\r\n combineLatest([$thumbWidth, $thumbHeight, $thumbGradientPositions, $params]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n tap(([thumbWidth, thumbHeight, thumbGradientPositions, params]) => {\r\n const context: IScrollBarTemplateContext = {\r\n api: this._apiService,\r\n width: thumbWidth,\r\n height: thumbHeight,\r\n fillPositions: thumbGradientPositions,\r\n params: params ?? {},\r\n };\r\n this._$templateContext.next(context);\r\n }),\r\n ).subscribe();\r\n\r\n const $renderer = this.$renderer.pipe(\r\n startWith(null),\r\n ),\r\n $defaultRenderer = of(this._defaultRenderer);\r\n\r\n combineLatest([$renderer, $defaultRenderer]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(([renderer, defaultRenderer]) => {\r\n return of((renderer ?? defaultRenderer) ?? null);\r\n }),\r\n debounceTime(0),\r\n tap(v => {\r\n this._$thumbRenderer.next(v);\r\n }),\r\n ).subscribe();\r\n\r\n const $prepared = this.$prepared;\r\n $prepared.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n tap(() => {\r\n this.scrollLimits();\r\n this.refreshCoordinate(this._x, this._y);\r\n this.fireScrollEvent(false);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([this.$isVertical, this.$thickness, this.$size]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(([isVertical, thickness, size]) => {\r\n this._$thumbWidth.next(isVertical ? thickness : size);\r\n this._$thumbHeight.next(isVertical ? size : thickness);\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n override ngAfterViewInit(): void {\r\n super.ngAfterViewInit();\r\n\r\n const $wheel = this.$wheel;\r\n $wheel.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(100),\r\n tap(() => {\r\n const event = this.createDragEvent(true);\r\n if (!!event) {\r\n this.onDragEnd.emit(event);\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n const $pointerDown = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerdown').pipe(\r\n takeUntil(this._$unsubscribe),\r\n ), $pointerUp = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerup').pipe(\r\n takeUntil(this._$unsubscribe),\r\n ), $docPointerUp = fromEvent<PointerEvent>(document, 'pointerup').pipe(\r\n takeUntil(this._$unsubscribe),\r\n ), $pointerEnter = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerenter').pipe(\r\n takeUntil(this._$unsubscribe),\r\n ), $pointerLeave = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerleave').pipe(\r\n takeUntil(this._$unsubscribe),\r\n );\r\n\r\n $pointerDown.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(e => {\r\n this._$pressedState.next(this.thumbHit(e.clientX, e.clientY));\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$docPointerUp, $pointerUp]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n this._$pressedState.next(false);\r\n }),\r\n ).subscribe();\r\n\r\n $pointerEnter.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n this._$hoverState.next(true);\r\n }),\r\n ).subscribe();\r\n\r\n $pointerLeave.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n this._$hoverState.next(false);\r\n }),\r\n ).subscribe();\r\n\r\n const $pressedState = this.$pressedState.pipe(\r\n takeUntil(this._$unsubscribe),\r\n ), $hoverState = this.$hoverState.pipe(\r\n takeUntil(this._$unsubscribe),\r\n );\r\n\r\n combineLatest([\r\n $pressedState, $hoverState,\r\n ]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n distinctUntilChanged(),\r\n tap(([pressed, hover]) => {\r\n if (pressed) {\r\n this._scrollBarService.state = ScrollbarStates.PRESSED;\r\n return;\r\n } else if (hover) {\r\n this._scrollBarService.state = ScrollbarStates.HOVER;\r\n return;\r\n }\r\n this._scrollBarService.state = ScrollbarStates.NORMAL;\r\n return;\r\n }),\r\n ).subscribe();\r\n\r\n this.$size.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this.totalSize = v;\r\n }),\r\n ).subscribe();\r\n\r\n this.$interactive.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this.interactive = v;\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([this.$show, this.$isVertical, this.$thickness]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(([show, isVertical, thickness]) => {\r\n const sizePropName = isVertical ? WIDTH : HEIGHT;\r\n this._$styles.next({\r\n [sizePropName]: `${show ? thickness : 0}${PX}`,\r\n [OPACITY]: show ? OPACITY_1 : OPACITY_0, [TRANSITION]: show ? TRANSITION_FADE_IN : NONE,\r\n });\r\n }),\r\n ).subscribe();\r\n\r\n const $overlapping = this.$overlapping, $langTextDir = this.$langTextDir;\r\n combineLatest([$overlapping, $langTextDir]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([overlapping, langTextDir]) => {\r\n const el = this._elementRef.nativeElement;\r\n if (!!el) {\r\n el.style[POSITION] = overlapping ? POSITION_ABSOLUTE : POSITION_RELATIVE;\r\n el.style[LEFT] = overlapping && langTextDir === TextDirections.RTL ? '0' : UNSET;\r\n el.style[RIGHT] = overlapping && langTextDir === TextDirections.LTR ? '0' : UNSET;\r\n el.style[WIDTH] = overlapping ? SIZE_AUTO : SIZE_100_PERSENT;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n this.$scroll.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n const event = this.createDragEvent(v);\r\n if (!!event) {\r\n this.onDrag.emit(event);\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollEnd = this.$scrollEnd;\r\n $scrollEnd.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(userAction => {\r\n const event = this.createDragEvent(userAction);\r\n if (!!event) {\r\n this.onDragEnd.emit(event);\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n const $renderer = this.$renderer, $defaultRenderer = of(this._defaultRenderer);\r\n combineLatest([$renderer, $defaultRenderer]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n tap(([renderer, defaultRenderer]) => {\r\n this._$thumbRenderer.next(renderer || defaultRenderer || null);\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n private createDragEvent(userAction: boolean) {\r\n const isVertical = this._$isVertical.getValue(), scrollSize = isVertical ? this.scrollHeight : this.scrollWidth,\r\n scrollContent = this.scrollContent?.nativeElement as HTMLElement,\r\n scrollViewport = this.scrollViewport?.nativeElement as HTMLDivElement;\r\n if (!!scrollViewport && !!scrollContent) {\r\n const contentSize = isVertical ? scrollContent.offsetHeight : scrollContent.offsetWidth,\r\n viewportSize = isVertical ? scrollViewport.offsetHeight : scrollViewport.offsetWidth;\r\n const event: IScrollBarDragEvent = {\r\n position: scrollSize !== 0 ? ((isVertical ? this._y : this._x) / scrollSize) : 0,\r\n min: scrollSize !== 0 ? (this.startOffset / scrollSize) : 0,\r\n max: scrollSize !== 0 ? ((viewportSize - this.endOffset - contentSize) / scrollSize) : 0,\r\n animation: !this._isMoving,\r\n userAction,\r\n };\r\n return event;\r\n }\r\n return null;\r\n }\r\n\r\n private thumbHit(x: number, y: number): boolean {\r\n const thumb = this.scrollContent?.nativeElement;\r\n if (!!thumb) {\r\n const { x: tX, y: tY, width: tWidth, height: tHeight } = thumb.getBoundingClientRect();\r\n if ((x >= tX && x <= tX + tWidth) && (y >= tY && y <= tY + tHeight)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n click(event: PointerEvent | MouseEvent) {\r\n this._scrollBarService.click(event);\r\n }\r\n}\r\n","<div #scrollViewport class=\"track\" part=\"scrollbar-track\" [ngStyle]=\"$styles | async\"\r\n [ngClass]=\"{grabbing: $grabbing | async}\">\r\n <div #scrollContent class=\"thumb\" part=\"scrollbar-thumb\" [class.horizontal]=\"($isVertical | async)! == false\"\r\n (pointerdown)=\"click($event)\">\r\n <ng-container [ngTemplateOutlet]=\"($thumbRenderer | async)!\"\r\n [ngTemplateOutletContext]=\"($templateContext | async)!\"></ng-container>\r\n </div>\r\n</div>\r\n\r\n<ng-template #defaultRenderer let-api=\"api\" let-width=\"width\" let-height=\"height\" let-fillPositions=\"fillPositions\"\r\n let-params=\"params\">\r\n <div class=\"shape\" part=\"scrollbar-thumb__shape\" [style.width.px]=\"width\" [style.height.px]=\"height\"></div>\r\n</ng-template>","import { Directive, ElementRef, Input, OnDestroy } from '@angular/core';\r\nimport { BehaviorSubject, combineLatest, Subject, takeUntil, tap } from 'rxjs';\r\nimport { TextDirections } from '../../enums';\r\nimport { ScrollerDirection, ScrollerDirections } from '../../components/ng-scroller/enums';\r\nimport { isDirection } from '../../utils/is-direction';\r\nimport { TextDirection } from '../../types';\r\n\r\nconst RIGHT = 'right',\r\n DIR = 'dir';\r\n\r\n/**\r\n * LocaleSensitiveDirective\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/directives/locale-sensitive/locale-sensitive.directive.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Directive({\r\n selector: '[localeSensitive]',\r\n standalone: false,\r\n})\r\nexport class LocaleSensitiveDirective implements OnDestroy {\r\n protected _$unsubscribe = new Subject<void>();\r\n\r\n private _$langTextDir = new BehaviorSubject<TextDirection>(TextDirections.LTR);\r\n readonly $langTextDir = this._$langTextDir.asObservable();\r\n\r\n @Input()\r\n set langTextDir(v: TextDirection) {\r\n this._$langTextDir.next(v);\r\n }\r\n get langTextDir() { return this._$langTextDir.getValue(); }\r\n\r\n\r\n private _$listDir = new BehaviorSubject<ScrollerDirections | null>(ScrollerDirection.VERTICAL);\r\n readonly $listDir = this._$listDir.asObservable();\r\n\r\n @Input()\r\n set listDir(v: ScrollerDirections | null) {\r\n this._$listDir.next(v);\r\n }\r\n get listDir() { return this._$listDir.getValue(); }\r\n\r\n constructor(private _elementRef: ElementRef<HTMLElement>) {\r\n const $langTextDir = this.$langTextDir,\r\n $listDir = this.$listDir;\r\n\r\n combineLatest([$langTextDir, $listDir]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([dir, listDir]) => {\r\n const element = this._elementRef.nativeElement as HTMLElement,\r\n isVertical = isDirection(listDir!, ScrollerDirection.VERTICAL);\r\n element.setAttribute(DIR, isVertical ? dir : TextDirections.LTR);\r\n if (dir === TextDirections.RTL && isVertical) {\r\n element.style.textAlign = RIGHT;\r\n element.classList.add(TextDirections.RTL);\r\n element.classList.remove(TextDirections.LTR);\r\n } else {\r\n element.classList.add(TextDirections.LTR);\r\n element.classList.remove(TextDirections.RTL);\r\n }\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this._$unsubscribe) {\r\n this._$unsubscribe.next();\r\n this._$unsubscribe.complete();\r\n }\r\n }\r\n}\r\n","import { Component, ElementRef, EventEmitter, Input, Output, TemplateRef, ViewChild } from '@angular/core';\r\nimport { BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, filter, from, of, Subject, takeUntil, tap } from 'rxjs';\r\nimport { ScrollBox } from './utils';\r\nimport { Id, TextDirection } from '../../types';\r\nimport { NgScrollBarComponent } from \"../ng-scroll-bar/ng-scroll-bar.component\";\r\nimport { GradientColorPositions } from '../../types/gradient-color-positions';\r\nimport {\r\n BEHAVIOR_INSTANT, DEFAULT_MAX_MOTION_BLUR, DEFAULT_MOTION_BLUR, DEFAULT_MOTION_BLUR_ENABLED, DEFAULT_OVERLAPPING_SCROLLBAR, DEFAULT_SCROLLBAR_ENABLED,\r\n DEFAULT_SCROLLBAR_INTERACTIVE, DEFAULT_SCROLLBAR_MIN_SIZE, DEFAULT_SCROLLBAR_THICKNESS, LEFT_PROP_NAME, PX, SCROLLER_SCROLL, TOP_PROP_NAME,\r\n} from '../../const';\r\nimport { TextDirections } from '../../enums';\r\nimport { IScrollToParams, NgScrollView, SCROLL_VIEW_INVERSION } from '../ng-scroll-view';\r\nimport { IScrollBarDragEvent } from '../ng-scroll-bar/interfaces';\r\nimport { SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, SCROLL_VIEW_OVERSCROLL_ENABLED } from '../ng-scroll-view/const';\r\nimport { ISize } from '../../interfaces';\r\n\r\nconst TOP = 'top',\r\n LEFT = 'left',\r\n INSTANT = 'instant' as ScrollBehavior,\r\n MOTION_BLUR = 'motion-blur';\r\n\r\nexport const SCROLL_EVENT = new Event(SCROLLER_SCROLL);\r\n\r\n/**\r\n * The scroller for the NgVirtualList item component\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-scroller/ng-scroller.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-scroller',\r\n providers: [\r\n { provide: SCROLL_VIEW_INVERSION, useValue: false },\r\n { provide: SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, useValue: true },\r\n { provide: SCROLL_VIEW_OVERSCROLL_ENABLED, useValue: true },\r\n ],\r\n standalone: false,\r\n templateUrl: './ng-scroller.component.html',\r\n styleUrls: ['./ng-scroller.component.scss'],\r\n})\r\nexport class NgScrollerComponent extends NgScrollView {\r\n @ViewChild('scrollBar', { read: NgScrollBarComponent })\r\n readonly scrollBar: NgScrollBarComponent | undefined;\r\n\r\n @ViewChild('filter')\r\n readonly filter: ElementRef<SVGFEGaussianBlurElement> | undefined;\r\n\r\n @Output()\r\n readonly onScrollbarVisible = new EventEmitter<boolean>();\r\n\r\n private _$scrollbarEnabled = new BehaviorSubject<boolean>(DEFAULT_SCROLLBAR_ENABLED);\r\n readonly $scrollbarEnabled = this._$scrollbarEnabled.asObservable();\r\n\r\n @Input()\r\n set scrollbarEnabled(v: boolean) {\r\n if (this._$scrollbarEnabled.getValue() !== v) {\r\n this._$scrollbarEnabled.next(v);\r\n }\r\n }\r\n get scrollbarEnabled() { return this._$scrollbarEnabled.getValue(); }\r\n\r\n private _$scrollbarInteractive = new BehaviorSubject<boolean>(DEFAULT_SCROLLBAR_INTERACTIVE);\r\n readonly $scrollbarInteractive = this._$scrollbarInteractive.asObservable();\r\n\r\n @Input()\r\n set scrollbarInteractive(v: boolean) {\r\n if (this._$scrollbarInteractive.getValue() !== v) {\r\n this._$scrollbarInteractive.next(v);\r\n }\r\n }\r\n get scrollbarInteractive() { return this._$scrollbarInteractive.getValue(); }\r\n\r\n private _$focusedElement = new BehaviorSubject<Id | undefined>(undefined);\r\n readonly $focusedElement = this._$focusedElement.asObservable();\r\n\r\n @Input()\r\n set focusedElement(v: Id | undefined) {\r\n if (this._$focusedElement.getValue() !== v) {\r\n this._$focusedElement.next(v);\r\n }\r\n }\r\n get focusedElement() { return this._$focusedElement.getValue(); }\r\n\r\n private _$overlappingScrollbar = new BehaviorSubject<boolean>(DEFAULT_OVERLAPPING_SCROLLBAR);\r\n readonly $overlappingScrollbar = this._$overlappingScrollbar.asObservable();\r\n\r\n @Input()\r\n set overlappingScrollbar(v: boolean) {\r\n if (this._$overlappingScrollbar.getValue() !== v) {\r\n this._$overlappingScrollbar.next(v);\r\n }\r\n }\r\n get overlappingScrollbar() { return this._$overlappingScrollbar.getValue(); }\r\n\r\n private _$content = new BehaviorSubject<HTMLElement | undefined>(undefined);\r\n readonly $content = this._$focusedElement.asObservable();\r\n\r\n @Input()\r\n set content(v: HTMLElement | undefined) {\r\n if (this._$content.getValue() !== v) {\r\n this._$content.next(v);\r\n }\r\n }\r\n get content() { return this._$content.getValue(); }\r\n\r\n private _$loading = new BehaviorSubject<boolean>(false);\r\n readonly $loading = this._$loading.asObservable();\r\n\r\n @Input()\r\n set loading(v: boolean) {\r\n if (this._$loading.getValue() !== v) {\r\n this._$loading.next(v);\r\n }\r\n }\r\n get loading() { return this._$loading.getValue(); }\r\n\r\n private _$classes = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n readonly $classes = this._$classes.asObservable();\r\n\r\n @Input()\r\n set classes(v: { [cName: string]: boolean }) {\r\n if (this._$classes.getValue() !== v) {\r\n this._$classes.next(v);\r\n }\r\n }\r\n get classes() { return this._$classes.getValue(); }\r\n\r\n private _$scrollbarMinSize = new BehaviorSubject<number>(DEFAULT_SCROLLBAR_MIN_SIZE);\r\n readonly $scrollbarMinSize = this._$scrollbarMinSize.asObservable();\r\n\r\n @Input()\r\n set scrollbarMinSize(v: number) {\r\n if (this._$scrollbarMinSize.getValue() !== v) {\r\n this._$scrollbarMinSize.next(v);\r\n }\r\n }\r\n get scrollbarMinSize() { return this._$scrollbarMinSize.getValue(); }\r\n\r\n private _$scrollbarThickness = new BehaviorSubject<number>(DEFAULT_SCROLLBAR_THICKNESS);\r\n readonly $scrollbarThickness = this._$scrollbarThickness.asObservable();\r\n\r\n @Input()\r\n set scrollbarThickness(v: number) {\r\n if (this._$scrollbarThickness.getValue() !== v) {\r\n this._$scrollbarThickness.next(v);\r\n }\r\n }\r\n get scrollbarThickness() { return this._$scrollbarThickness.getValue(); }\r\n\r\n private _$scrollbarThumbRenderer = new BehaviorSubject<TemplateRef<any> | null>(null);\r\n readonly $scrollbarThumbRenderer = this._$scrollbarThumbRenderer.asObservable();\r\n\r\n @Input()\r\n set scrollbarThumbRenderer(v: TemplateRef<any> | null) {\r\n if (this._$scrollbarThumbRenderer.getValue() !== v) {\r\n this._$scrollbarThumbRenderer.next(v);\r\n }\r\n }\r\n get scrollbarThumbRenderer() { return this._$scrollbarThumbRenderer.getValue(); }\r\n\r\n private _$scrollbarThumbParams = new BehaviorSubject<{ [propName: string]: any } | null>(null);\r\n readonly $scrollbarThumbParams = this._$scrollbarThumbParams.asObservable();\r\n\r\n @Input()\r\n set scrollbarThumbParams(v: { [propName: string]: any } | null) {\r\n if (this._$scrollbarThumbParams.getValue() !== v) {\r\n this._$scrollbarThumbParams.next(v);\r\n }\r\n }\r\n get scrollbarThumbParams() { return this._$scrollbarThumbParams.getValue(); }\r\n\r\n private _$motionBlur = new BehaviorSubject<number | 'disabled'>(DEFAULT_MOTION_BLUR);\r\n readonly $motionBlur = this._$motionBlur.asObservable();\r\n\r\n @Input()\r\n set motionBlur(v: number | 'disabled') {\r\n if (this._$motionBlur.getValue() !== v) {\r\n this._$motionBlur.next(v);\r\n }\r\n }\r\n get motionBlur() { return this._$motionBlur.getValue(); }\r\n\r\n private _$maxMotionBlur = new BehaviorSubject<number>(DEFAULT_MAX_MOTION_BLUR);\r\n readonly $maxMotionBlur = this._$maxMotionBlur.asObservable();\r\n\r\n @Input()\r\n set maxMotionBlur(v: number) {\r\n if (this._$maxMotionBlur.getValue() !== v) {\r\n this._$maxMotionBlur.next(v);\r\n }\r\n }\r\n get maxMotionBlur() { return this._$maxMotionBlur.getValue(); }\r\n\r\n private _$motionBlurEnabled = new BehaviorSubject<boolean>(DEFAULT_MOTION_BLUR_ENABLED);\r\n readonly $motionBlurEnabled = this._$motionBlurEnabled.asObservable();\r\n\r\n @Input()\r\n set motionBlurEnabled(v: boolean) {\r\n if (this._$motionBlurEnabled.getValue() !== v) {\r\n this._$motionBlurEnabled.next(v);\r\n }\r\n }\r\n get motionBlurEnabled() { return this._$motionBlurEnabled.getValue(); }\r\n\r\n private _$actualClasses = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n readonly $actualClasses = this._$actualClasses.asObservable();\r\n\r\n private _$containerClasses = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n readonly $containerClasses = this._$containerClasses.asObservable();\r\n\r\n private _$thumbGradientPositions = new BehaviorSubject<GradientColorPositions>([0, 0]);\r\n readonly $thumbGradientPositions = this._$thumbGradientPositions.asObservable();\r\n\r\n private _$thumbSize = new BehaviorSubject<number>(0);\r\n readonly $thumbSize = this._$thumbSize.asObservable();\r\n\r\n private _$thumbColorPositions = new BehaviorSubject<GradientColorPositions>([0, 0]);\r\n readonly $thumbColorPositions = this._$thumbColorPositions.asObservable();\r\n\r\n private _$actualThumbSize = new BehaviorSubject<number>(0);\r\n readonly $actualThumbSize = this._$actualThumbSize.asObservable();\r\n\r\n private _$scrollbarShow = new BehaviorSubject<boolean>(false);\r\n readonly $scrollbarShow = this._$scrollbarShow.asObservable();\r\n\r\n private _$show = new BehaviorSubject<boolean>(false);\r\n readonly $show = this._$show.asObservable();\r\n\r\n private _$preparedSignal = new BehaviorSubject<boolean>(false);\r\n readonly $preparedSignal = this._$preparedSignal.asObservable();\r\n\r\n private _$langTextDir = new BehaviorSubject<TextDirection>(TextDirections.LTR);\r\n readonly $langTextDir = this._$langTextDir.asObservable();\r\n\r\n private _$listStyles = new BehaviorSubject<{ perspectiveOrigin: string }>({ perspectiveOrigin: 'center' });\r\n readonly $listStyles = this._$listStyles.asObservable();\r\n\r\n private _scrollBox = new ScrollBox();\r\n\r\n get host() {\r\n return this.scrollViewport?.nativeElement;\r\n }\r\n\r\n private _$scrollbarScroll = new Subject<boolean>();\r\n readonly $scrollbarScroll = this._$scrollbarScroll.asObservable();\r\n\r\n private _prepared = false;\r\n set prepared(v: boolean) {\r\n if (this._prepared !== v) {\r\n this._prepared = v;\r\n this._$preparedSignal.next(v);\r\n }\r\n }\r\n\r\n protected override setX(x: number, snap: boolean = true, normalize: boolean = true) {\r\n if (x !== undefined && !Number.isNaN(x)) {\r\n this.updateDirection(x, this._x);\r\n\r\n this._x = this._actualX = x;\r\n\r\n const overridden = normalize ? this.normalizeScrollSize() : false;\r\n\r\n this.refreshCoordinate(this._x, this._y);\r\n\r\n if (!overridden) {\r\n this.measureVelocity();\r\n }\r\n\r\n this.updateScrollBar();\r\n\r\n this.recalculatePerspective();\r\n\r\n if (snap) {\r\n this.checkIntersectionComponent();\r\n }\r\n }\r\n }\r\n\r\n protected override setY(y: number, snap: boolean = true, normalize: boolean = true) {\r\n if (y !== undefined && !Number.isNaN(y)) {\r\n this.updateDirection(y, this._y);\r\n\r\n this._y = this._actualY = y;\r\n\r\n const overridden = normalize ? this.normalizeScrollSize() : false;\r\n\r\n this.refreshCoordinate(this._x, this._y);\r\n\r\n if (!overridden) {\r\n this.measureVelocity();\r\n }\r\n\r\n this.updateScrollBar();\r\n\r\n this.recalculatePerspective();\r\n\r\n if (snap) {\r\n this.checkIntersectionComponent();\r\n }\r\n }\r\n }\r\n\r\n override set startLayoutOffset(v: number) {\r\n if (this._startLayoutOffset !== v) {\r\n this._startLayoutOffset = v;\r\n\r\n this.refreshCoordinate(this._x, this._y);\r\n\r\n this.recalculatePerspective();\r\n }\r\n }\r\n override get startLayoutOffset() { return this._startLayoutOffset; }\r\n\r\n private _$viewInitialized = new BehaviorSubject<boolean>(false);\r\n readonly $viewInitialized = this._$viewInitialized.asObservable();\r\n\r\n private _isScrollbarUserAction: boolean = false;\r\n get isScrollbarUserAction() {\r\n return this._isScrollbarUserAction;\r\n }\r\n\r\n protected _$resizeViewport = new Subject<ISize>();\r\n readonly $resizeViewport = this._$resizeViewport.asObservable();\r\n\r\n protected _$resizeContent = new Subject<ISize>();\r\n readonly $resizeContent = this._$resizeContent.asObservable();\r\n\r\n protected _filterId: string;\r\n\r\n protected _filter: string;\r\n\r\n constructor() {\r\n super();\r\n\r\n this._filterId = `${this._service.id}-${MOTION_BLUR}`;\r\n this._filter = `url(#${this._filterId})`;\r\n }\r\n\r\n override ngAfterViewInit(): void {\r\n super.ngAfterViewInit();\r\n\r\n const $filter = of(this.filter),\r\n $motionBlur = this.$motionBlur,\r\n $maxMotionBlur = this.$maxMotionBlur,\r\n $motionBlurEnabled = this.$motionBlurEnabled,\r\n $isVertical = this.$isVertical;\r\n\r\n const $scrollbarScroll = this.$scrollbarScroll;\r\n $scrollbarScroll.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(50),\r\n tap(() => {\r\n this.dropVelocity();\r\n this.fireScrollEvent(false);\r\n }),\r\n ).subscribe();\r\n\r\n const $averageVelocity = this.$averageVelocity;\r\n combineLatest([$isVertical, $averageVelocity, $filter, $motionBlurEnabled, $motionBlur, $maxMotionBlur]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(([, , f, e, mb]) => !!f && (!!e && mb !== 0)),\r\n tap(([isVertical, v, filter, , mb, mbMax]) => {\r\n const _v = v * (mb as number), value = _v > mbMax ? mbMax : _v;\r\n filter!.nativeElement.setStdDeviation(isVertical ? 0 : v * value, isVertical ? v * value : 0);\r\n }),\r\n debounceTime(50),\r\n tap(([, , filter, ,]) => {\r\n filter!.nativeElement.setStdDeviation(0, 0);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$langTextDir.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n tap(v => {\r\n this._$langTextDir.next(v);\r\n })\r\n ).subscribe();\r\n\r\n const $prepare = this.$preparedSignal;\r\n $prepare.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n tap(() => {\r\n this.updateScrollBarHandler(true, false, true);\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollbarEnabled = this.$scrollbarEnabled,\r\n $scrollbarShow = this.$scrollbarShow;\r\n\r\n combineLatest([$scrollbarEnabled, $scrollbarShow, this.$preparedSignal]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([scrollbarEnabled, scrollbarShow, prepared]) => {\r\n this._$show.next(scrollbarEnabled && scrollbarShow && prepared);\r\n }),\r\n ).subscribe();\r\n\r\n const $startOffset = this.$startOffset,\r\n $endOffset = this.$endOffset,\r\n $scrollbarMinSize = this.$scrollbarMinSize,\r\n $thumbSize = this.$thumbSize;\r\n\r\n from([$endOffset, $startOffset, $thumbSize, $scrollbarMinSize, $isVertical]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n tap(() => {\r\n this.updateScrollBar();\r\n }),\r\n ).subscribe();\r\n\r\n const $updateScrollBar = this.$updateScrollBar;\r\n\r\n $updateScrollBar.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n tap(() => {\r\n this.updateScrollBarHandler(!this._isScrollbarUserAction);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([this.$classes, this.$direction, this.$grabbing, this.$motionBlurEnabled]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n debounceTime(0),\r\n tap(([classes, direction, grabbing, filtered]) => {\r\n this._$actualClasses.next({ ...classes, [direction]: true, grabbing, filtered });\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([this.$contentBounds, this.$viewportBounds, this.$isVertical, this.$direction, this.$grabbing, this.$scrollbarEnabled, this.$overlappingScrollbar]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n debounceTime(0),\r\n tap(([contentBounds, viewportBounds, isVertical, direction, grabbing, scrollbarEnabled, overlappingScrollbar]) => {\r\n const { width: contentWidth, height: contentHeight } = contentBounds,\r\n { width, height } = viewportBounds,\r\n viewportSize = isVertical ? height : width,\r\n contentSize = isVertical ? contentHeight : contentWidth;\r\n this._$containerClasses.next({ [direction]: true, grabbing, enabled: scrollbarEnabled, scrollable: contentSize > viewportSize, overlapping: overlappingScrollbar });\r\n }),\r\n ).subscribe();\r\n\r\n this.$viewInitialized.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n tap(() => {\r\n this.updateScrollBarHandler();\r\n }),\r\n ).subscribe();\r\n\r\n this.$thumbGradientPositions.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n tap(v => {\r\n this._$thumbColorPositions.next(v);\r\n }),\r\n ).subscribe();\r\n\r\n this.$thumbSize.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n tap(v => {\r\n this._$actualThumbSize.next(v);\r\n }),\r\n ).subscribe();\r\n\r\n this._$viewInitialized.next(true);\r\n }\r\n\r\n private recalculatePerspective() {\r\n const isVertical = this._$isVertical.getValue(), scrollSize = (isVertical ? this.scrollTop : this.scrollLeft) - this._startLayoutOffset,\r\n { width, height } = this._$viewportBounds.getValue();\r\n this._$listStyles.next({\r\n perspectiveOrigin: `${isVertical ? width * .5 : (scrollSize + width * .5)}${PX} ${isVertical ? (scrollSize + height * .5) : height * .5}${PX}`\r\n });\r\n }\r\n\r\n protected override onResizeViewport() {\r\n const viewport = this.scrollViewport?.nativeElement;\r\n if (!!viewport) {\r\n const bounds: ISize = { width: viewport.offsetWidth, height: viewport.offsetHeight }, b = this._$viewportBounds.getValue();\r\n if (bounds.width === b.width && bounds.height === b.height) {\r\n return;\r\n }\r\n this._$viewportBounds.next(bounds);\r\n this.updateScrollBar();\r\n this._$resizeViewport.next(bounds);\r\n }\r\n }\r\n\r\n protected override onResizeContent(value: number | null = null) {\r\n const content = this.scrollContent?.nativeElement;\r\n if (!!content) {\r\n const isVertical = this._$isVertical.getValue(), bounds: ISize = {\r\n width: isVertical ? content.offsetWidth : (value ?? content.offsetWidth),\r\n height: isVertical ? (value ?? content.offsetHeight) : content.offsetHeight\r\n }, b = this._$contentBounds.getValue();\r\n if (value === null && bounds.width === b.width && bounds.height === b.height) {\r\n return;\r\n }\r\n this._$contentBounds.next(bounds);\r\n this.updateScrollBar();\r\n this._$resizeContent.next(bounds);\r\n }\r\n }\r\n\r\n private updateScrollBarHandler(update: boolean = false, blending: boolean = true, fireUpdate: boolean = false) {\r\n const direction = this.direction,\r\n isVertical = this._$isVertical.getValue(),\r\n viewportBounds = this._$viewportBounds.getValue(),\r\n contentBounds = this._$contentBounds.getValue(),\r\n startOffset = this.startOffset,\r\n endOffset = this.endOffset,\r\n {\r\n thumbSize,\r\n thumbPosition,\r\n thumbGradientPositions,\r\n } = this._scrollBox.calculateScroll({\r\n direction,\r\n viewportWidth: viewportBounds.width,\r\n viewportHeight: viewportBounds.height,\r\n contentWidth: contentBounds.width,\r\n contentHeight: contentBounds.height,\r\n startOffset,\r\n endOffset,\r\n positionX: this._x,\r\n positionY: this._y,\r\n minSize: this.scrollbarMinSize,\r\n });\r\n\r\n this._$thumbGradientPositions.next(thumbGradientPositions);\r\n this._$thumbSize.next(thumbSize);\r\n const actualThumbPosition = thumbPosition < startOffset ? startOffset : thumbPosition;\r\n if (update) {\r\n this.scrollBar?.scroll({\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: actualThumbPosition, fireUpdate, behavior: BEHAVIOR_INSTANT,\r\n userAction: false, blending,\r\n });\r\n }\r\n this._$scrollbarShow.next(this.scrollable && this.scrollbarEnabled);\r\n };\r\n\r\n override tick() {\r\n super.tick();\r\n\r\n this.scrollBar?.tick();\r\n }\r\n\r\n private updateScrollBar() {\r\n this._$updateScrollBar.next();\r\n }\r\n\r\n refreshScrollbar() {\r\n this.updateScrollBarHandler(true, false, false);\r\n }\r\n\r\n protected override onDragStart() {\r\n super.onDragStart();\r\n\r\n this.stopScrollbar();\r\n\r\n this._isScrollbarUserAction = false;\r\n\r\n this.updateScrollBar();\r\n }\r\n\r\n override reset() {\r\n super.reset();\r\n this.totalSize = 0;\r\n this.onResizeContent(0);\r\n this.stopScrollbar();\r\n this.refresh(true, true);\r\n this.prepared = false;\r\n }\r\n\r\n refresh(fireUpdate: boolean = false, updateScrollbar: boolean = true) {\r\n if (updateScrollbar) {\r\n this.stopScrolling();\r\n }\r\n\r\n this.scrollLimits();\r\n\r\n this.refreshCoordinate(this._x, this._y);\r\n\r\n if (updateScrollbar) {\r\n this.updateScrollBarHandler(false);\r\n this.emitScrollableEvent();\r\n }\r\n\r\n if (fireUpdate) {\r\n this.fireScrollEvent(false);\r\n }\r\n }\r\n\r\n snapIfNeed(animated = true) {\r\n this.snapWithInitialForceIfNecessary(null, animated, true);\r\n }\r\n\r\n startScrollTo() {\r\n this.stopScrollbar();\r\n this.stopScrolling(true);\r\n this._scrollDirection.clear();\r\n this.dropVelocity();\r\n this._isScrollsTo = true;\r\n }\r\n\r\n finishedScrollTo() {\r\n this._isScrollsTo = false;\r\n this._scrollDirection.clear();\r\n this.dropVelocity();\r\n this.checkIntersectionComponent();\r\n this.fireScrollEvent(true);\r\n }\r\n\r\n scrollTo(params: IScrollToParams) {\r\n const userAction = params?.userAction ?? true;\r\n if (userAction) {\r\n this._isScrollbarUserAction = false;\r\n this.scrollBar?.stopScrolling();\r\n }\r\n this.scroll({ ...params, userAction: userAction });\r\n }\r\n\r\n stopScrollbar() {\r\n if (!!this.scrollBar) {\r\n this.scrollBar.stopScrolling();\r\n this.alignPosition();\r\n this.dropVelocity();\r\n }\r\n }\r\n\r\n private dropVelocity() {\r\n this._velocities = [0];\r\n this._$velocity.next(0);\r\n this._$averageVelocity.next(0);\r\n }\r\n\r\n protected override stopMoving() {\r\n super.stopMoving();\r\n this.dropVelocity();\r\n }\r\n\r\n protected override onAnimationComplete(position: number) {\r\n this.dropVelocity();\r\n this._$scrollEnd.next(false);\r\n }\r\n\r\n onScrollBarDragHandler(event: IScrollBarDragEvent) {\r\n const { position, min, max, userAction } = event;\r\n this._isScrollbarUserAction = userAction;\r\n if (!userAction) {\r\n return;\r\n }\r\n this._$scrollbarScroll.next(true);\r\n this.stopScrolling(true);\r\n const isVertical = this._$isVertical.getValue(),\r\n {\r\n position: absolutePosition,\r\n } = this._scrollBox.getScrollPositionByScrollBar({\r\n scrollSize: isVertical ? this.scrollHeight : this.scrollWidth,\r\n position,\r\n });\r\n\r\n this.scrollTo({\r\n [isVertical ? TOP : LEFT]: absolutePosition, behavior: INSTANT,\r\n blending: false, userAction: true, fireUpdate: true,\r\n });\r\n this.emitScrollableEvent();\r\n this._service.update(false);\r\n }\r\n\r\n onScrollBarDragEndHandler(event: IScrollBarDragEvent) {\r\n const { position, min, max, userAction } = event;\r\n this._isScrollbarUserAction = userAction;\r\n if (!userAction) {\r\n return;\r\n }\r\n this._isScrollbarUserAction = false;\r\n this.dropVelocity();\r\n this._service.update(false);\r\n const isEdge = this.fireUpdateIfEdgesDetected(position, min, max, true, true);\r\n if (!isEdge) {\r\n this.alignPosition();\r\n }\r\n this._scrollDirection.clear();\r\n this._$scrollbarScroll.next(true);\r\n this.fireScrollEvent(true);\r\n }\r\n\r\n private fireUpdateIfEdgesDetected(position: number, min: number = 0, max: number = 1, animation: boolean = false, userAction: boolean = false) {\r\n if (userAction && animation) {\r\n if (position <= min) {\r\n this._service.scrollToStart();\r\n return true;\r\n } else if (position >= max) {\r\n this._service.scrollToEnd();\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n}","<div localeSensitive [langTextDir]=\"($langTextDir | async)!\" [listDir]=\"($direction | async)!\" class=\"ngvl__container\"\r\n [ngClass]=\"($containerClasses | async)!\">\r\n <svg part=\"viewport\" width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n <filter [id]=\"_filterId\">\r\n <feGaussianBlur #filter></feGaussianBlur>\r\n </filter>\r\n <foreignObject xmlns=\"http://www.w3.org/1999/xhtml\" width=\"100%\" height=\"100%\" class=\"ngvl__viewport\">\r\n <div class=\"ngvl__scroller-wrapper\" [class.filtered]=\"($motionBlurEnabled | async)!\" [style.filter]=\"($motionBlurEnabled | async)! ? _filter : 'unset'\">\r\n <div cdkScrollable #scrollViewport part=\"scroller\" class=\"ngvl__scroller\">\r\n <div #scrollContent [attr.aria-orientation]=\"($direction | async)!\"\r\n [attr.aria-activedescendant]=\"$focusedElement | async\" tabindex=\"0\" part=\"list\" class=\"ngvl__list\"\r\n [ngClass]=\"($actualClasses | async)!\" [ngStyle]=\"($listStyles | async)!\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n </foreignObject>\r\n </svg>\r\n <ng-container *ngIf=\"($scrollbarEnabled | async)!\">\r\n <ng-scroll-bar #scrollBar [direction]=\"($direction | async)!\" [size]=\"($actualThumbSize | async)!\" [renderer]=\"($scrollbarThumbRenderer | async)!\"\r\n [thickness]=\"($scrollbarThickness | async)!\" [params]=\"($scrollbarThumbParams | async)!\" [loading]=\"($loading | async)!\" [overlapping]=\"($overlappingScrollbar | async)!\"\r\n [thumbGradientPositions]=\"($thumbColorPositions | async)!\" [prepared]=\"($preparedSignal | async)!\" [interactive]=\"($scrollbarInteractive | async)!\"\r\n [show]=\"($show | async)!\" [startOffset]=\"($startOffset | async)!\" [langTextDir]=\"($langTextDir | async)!\"\r\n [endOffset]=\"($endOffset | async)!\" [overscrollEnabled]=\"($overscrollEnabled | async)!\" [scrollBehavior]=\"($scrollBehavior | async)!\"\r\n [scrollbarMinSize]=\"($scrollbarMinSize | async)!\" (onDrag)=\"onScrollBarDragHandler($event)\"\r\n (onDragEnd)=\"onScrollBarDragEndHandler($event)\"></ng-scroll-bar>\r\n </ng-container>\r\n</div>","import { PrerenderCache } from \"../types/cache\";\r\n\r\nexport enum PrerenderTrackBoxEvents {\r\n RESIZE = 'resize',\r\n};\r\n\r\nexport type PrerenderTrackBoxResizeHandler = (cache: PrerenderCache) => void;\r\n\r\nexport type PrerenderTrackBoxHandlers = PrerenderTrackBoxResizeHandler;\r\n","import { ComponentRef, ViewContainerRef } from \"@angular/core\";\r\nimport { IRenderVirtualListItem, IVirtualListCollection, IVirtualListItem } from \"../../../models\";\r\nimport { Id } from \"../../../types\";\r\nimport { ISize } from '../../../interfaces';\r\nimport { CMap } from \"../../../utils/cmap\";\r\nimport { PrerenderCache } from \"../types/cache\";\r\nimport { BaseVirtualListItemComponent } from \"../../ng-list-item/base\";\r\nimport { IPrerenderTrackBoxRefreshParams } from \"../interfaces\";\r\nimport { DEFAULT_DIVIDES, DEFAULT_DYNAMIC_SIZE, DEFAULT_ITEM_SIZE, DEFAULT_SNAP_TO_ITEM_ALIGN, TRACK_BY_PROPERTY_NAME } from \"../../../const\";\r\nimport { Component$1 } from \"../../../models/component.model\";\r\nimport { EventEmitter } from \"../../../utils/event-emitter/event-emitter\";\r\nimport { PrerenderTrackBoxEvents, PrerenderTrackBoxHandlers } from \"../events\";\r\n\r\nconst createItemData = (data: IVirtualListItem, isVertical: boolean, bounds: ISize, boundsSize: number,\r\n dynamic: boolean, divides: number, itemSize: number, id: Id, index: number): IRenderVirtualListItem => {\r\n const w = (isVertical ? (bounds.width / divides) : itemSize) as any,\r\n h = (isVertical ? itemSize : (bounds.height / divides)) as any;\r\n return {\r\n index,\r\n id,\r\n measures: {\r\n position: 0,\r\n scrollSize: 0,\r\n size: itemSize,\r\n row: {\r\n size: itemSize,\r\n odd: false,\r\n even: false\r\n },\r\n boundsSize,\r\n absoluteStartPosition: 0,\r\n absoluteStartPositionPercent: 0,\r\n absoluteEndPosition: 0,\r\n absoluteEndPositionPercent: 0,\r\n delta: 0,\r\n x: 0,\r\n y: 0,\r\n transformedX: 0,\r\n transformedY: 0,\r\n z: 0,\r\n rotationX: 0,\r\n rotationY: 0,\r\n rotationZ: 0,\r\n scaleX: 0,\r\n scaleY: 0,\r\n scaleZ: 0,\r\n width: w,\r\n height: h,\r\n minWidth: 0,\r\n minHeight: 0,\r\n maxWidth: Number.MAX_SAFE_INTEGER,\r\n maxHeight: Number.MAX_SAFE_INTEGER,\r\n scrollDirection: 0,\r\n },\r\n data,\r\n previouseData: data,\r\n nextData: data,\r\n config: {\r\n new: false,\r\n odd: false,\r\n even: false,\r\n collapsable: false,\r\n sticky: 0,\r\n selectable: false,\r\n snap: false,\r\n snapped: false,\r\n snappedOut: false,\r\n isVertical,\r\n dynamic,\r\n isSnappingMethodAdvanced: false,\r\n divides: 1,\r\n tabIndex: 0,\r\n opacity: 1,\r\n zIndex: \"0\",\r\n snapToItem: false,\r\n snapToItemAlign: DEFAULT_SNAP_TO_ITEM_ALIGN,\r\n layoutOffset: 0,\r\n isFirst: false,\r\n isLast: false,\r\n fullSize: false,\r\n layoutIndexOffset: 0,\r\n totalItems: 0,\r\n },\r\n }\r\n}\r\n\r\n/**\r\n * PrerenderTrackBox\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/prerender-container/core/prerender-track-box.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class PrerenderTrackBox extends EventEmitter<PrerenderTrackBoxEvents, PrerenderTrackBoxHandlers> {\r\n private _map: CMap<Id, ISize> | null = new CMap<Id, ISize>();\r\n\r\n private _items: IVirtualListCollection | null = new Array<IVirtualListItem>();\r\n\r\n private _container: ViewContainerRef | null = null;\r\n\r\n private _componentClass: Component$1<BaseVirtualListItemComponent> | null = null;\r\n\r\n private _components: Array<ComponentRef<BaseVirtualListItemComponent>> | null = new Array<ComponentRef<BaseVirtualListItemComponent>>();\r\n\r\n private _componentsResizeObserver: ResizeObserver | null = new ResizeObserver(() => {\r\n const components = this._components;\r\n if (!!components) {\r\n for (const comp of components) {\r\n const { width, height } = comp.instance.getBounds();\r\n this._map?.set(comp.instance.itemId!, { width, height });\r\n }\r\n }\r\n this.dispatch(PrerenderTrackBoxEvents.RESIZE, (this._map?.toObject() || {}));\r\n });\r\n\r\n private _active: boolean = true;\r\n get active() { return this._active; }\r\n\r\n private refresh(componentClass: Component$1<BaseVirtualListItemComponent>, bounds: ISize, params: IPrerenderTrackBoxRefreshParams) {\r\n const isVertical = params.isVertical ?? true,\r\n dynamic = params.dynamic ?? DEFAULT_DYNAMIC_SIZE,\r\n divides = params.divides ?? DEFAULT_DIVIDES,\r\n itemsSize = params.itemSize ?? DEFAULT_ITEM_SIZE,\r\n trackBy = params.trackBy ?? TRACK_BY_PROPERTY_NAME,\r\n itemRenderer = params.itemRenderer,\r\n boundsSize = isVertical ? bounds.height : bounds.width,\r\n items = this._items, components = this._components,\r\n resizeObserver = this._componentsResizeObserver;\r\n\r\n if (!items || !components || !this._container) {\r\n return;\r\n }\r\n let totalSize = 0, j = 0;\r\n for (let i = items.length - 1, l = 0; i >= l; i--) {\r\n if (totalSize > boundsSize) {\r\n break;\r\n }\r\n const item = items[i];\r\n if (!!item) {\r\n const id = item[trackBy], index = items.length - i - 1;\r\n let comp: ComponentRef<BaseVirtualListItemComponent>;\r\n if (components.length <= j) {\r\n comp = this._container.createComponent(componentClass);\r\n comp.instance.renderer = itemRenderer;\r\n if (!!resizeObserver) {\r\n resizeObserver.observe(comp.instance.element);\r\n }\r\n components.push(comp);\r\n } else {\r\n comp = components[j];\r\n }\r\n comp.instance.item = createItemData(item, isVertical, bounds, boundsSize, dynamic, divides, itemsSize, id, index);\r\n comp.instance.show();\r\n const { width, height } = comp.instance.getBounds(),\r\n w = isVertical ? width : width < itemsSize ? itemsSize : width,\r\n h = isVertical ? height < itemsSize ? itemsSize : height : height;\r\n totalSize += isVertical ? h : w;\r\n j++;\r\n }\r\n }\r\n }\r\n\r\n create(container: ViewContainerRef) {\r\n this._container = container;\r\n }\r\n\r\n reset(componentClass: Component$1<BaseVirtualListItemComponent>, items: IVirtualListCollection,\r\n bounds: ISize, params: IPrerenderTrackBoxRefreshParams) {\r\n this._items = items;\r\n this._componentClass = componentClass;\r\n this.refresh(componentClass, bounds, params);\r\n }\r\n\r\n getCache(): PrerenderCache {\r\n return !!this._map ? this._map.toObject() : {};\r\n }\r\n\r\n clear() {\r\n if (!!this._map) {\r\n this._map.clear();\r\n }\r\n }\r\n\r\n on() {\r\n if (this._active) {\r\n return;\r\n }\r\n\r\n this._active = true;\r\n const components = this._components;\r\n if (!!components) {\r\n const observer = this._componentsResizeObserver;\r\n for (const comp of components) {\r\n if (!!comp && !!observer) {\r\n observer.observe(comp.instance.element);\r\n }\r\n }\r\n }\r\n }\r\n\r\n off() {\r\n if (!this._active) {\r\n return;\r\n }\r\n\r\n this._active = false;\r\n if (!!this._componentsResizeObserver) {\r\n this._componentsResizeObserver?.disconnect();\r\n }\r\n }\r\n\r\n override dispose() {\r\n super.dispose();\r\n\r\n if (!!this._map) {\r\n this._map.clear();\r\n this._map = null;\r\n }\r\n\r\n if (!!this._items) {\r\n this._items = null;\r\n }\r\n\r\n if (!!this._componentClass) {\r\n this._componentClass = null;\r\n }\r\n\r\n if (!!this._container) {\r\n this._container = null;\r\n }\r\n\r\n if (!!this._components) {\r\n this._components = null;\r\n }\r\n\r\n if (!!this._componentsResizeObserver) {\r\n this._componentsResizeObserver.disconnect();\r\n this._componentsResizeObserver = null;\r\n }\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { NgVirtualListItemComponent } from '../../../ng-list-item/ng-virtual-list-item.component';\r\nimport {\r\n DEFAULT_ZINDEX, DISPLAY_BLOCK, DISPLAY_NONE, HIDDEN_ZINDEX, PX, SIZE_AUTO, VISIBILITY_HIDDEN, VISIBILITY_VISIBLE,\r\n} from '../../../../const';\r\nimport { ID, POSITION, POSITION_ZERO } from '../../../ng-list-item/const';\r\n\r\n/**\r\n * NgPrerenderVirtualListItemComponent\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-prerender-virtual-list-item',\r\n templateUrl: '../../../ng-list-item/ng-virtual-list-item.component.html',\r\n styleUrls: ['../../../ng-list-item/ng-virtual-list-item.component.scss', './ng-prerender-list-item.component.scss'],\r\n host: {\r\n 'class': 'ngvl__item',\r\n 'role': 'listitem',\r\n },\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgPrerenderVirtualListItemComponent extends NgVirtualListItemComponent {\r\n protected override update() {\r\n const data = this._data, regular = this.regular, length = this._regularLength, el = this._elementRef.nativeElement,\r\n itemElement = this._item?.nativeElement, containerElement = this._container?.nativeElement;\r\n if (!!data && !!el && !!itemElement && !!containerElement) {\r\n const styles = el.style, itemElementStyles = itemElement.style;\r\n el.setAttribute(ID, `${data.id}`);\r\n styles.zIndex = data.config.zIndex;\r\n if (regular) {\r\n el.setAttribute(POSITION, POSITION_ZERO);\r\n } else {\r\n el.setAttribute(POSITION, `${data.config.isVertical ? data.measures.y : data.measures.x}`);\r\n }\r\n if (data.config.divides > 1) {\r\n styles.height = data.config.isVertical ? `${data.measures.row.size}${PX}` : `${data.measures.height}${PX}`;\r\n styles.width = data.config.isVertical ? `${data.measures.width}${PX}` : `${data.measures.row.size}${PX}`;\r\n itemElementStyles.minWidth = styles.minWidth = `${data.measures.minWidth}${PX}`;\r\n itemElementStyles.maxWidth = styles.maxWidth = `${data.measures.maxWidth}${PX}`;\r\n itemElementStyles.minHeight = styles.minHeight = `${data.measures.minHeight}${PX}`;\r\n itemElementStyles.maxHeight = styles.maxHeight = `${data.measures.maxHeight}${PX}`;\r\n\r\n itemElementStyles.height = data.config.isVertical ? data.config.dynamic ? SIZE_AUTO : `${data.measures.height}${PX}` : regular ? length : `${data.measures.height}${PX}`;\r\n itemElementStyles.width = data.config.isVertical ? regular ? length : `${data.measures.width}${PX}` : data.config.dynamic ? SIZE_AUTO : `${data.measures.width}${PX}`;\r\n } else {\r\n styles.height = data.config.isVertical ? data.config.dynamic ? SIZE_AUTO : `${data.measures.height}${PX}` : regular ? length : `${data.measures.height}${PX}`;\r\n styles.width = data.config.isVertical ? regular ? length : `${data.measures.width}${PX}` : data.config.dynamic ? SIZE_AUTO : `${data.measures.width}${PX}`;\r\n styles.minWidth = `${data.measures.minWidth}${PX}`;\r\n styles.maxWidth = `${data.measures.maxWidth}${PX}`;\r\n styles.minHeight = `${data.measures.minHeight}${PX}`;\r\n styles.maxHeight = `${data.measures.maxHeight}${PX}`;\r\n }\r\n } else {\r\n el.removeAttribute(ID);\r\n }\r\n }\r\n\r\n override show() {\r\n const el = this._elementRef.nativeElement as HTMLElement,\r\n styles = el.style;\r\n styles.zIndex = this._data?.config?.zIndex ?? DEFAULT_ZINDEX;\r\n if (this.regular) {\r\n if (styles.display === DISPLAY_BLOCK) {\r\n return;\r\n }\r\n\r\n styles.display = DISPLAY_BLOCK;\r\n } else {\r\n if (styles.visibility === VISIBILITY_VISIBLE) {\r\n return;\r\n }\r\n\r\n styles.visibility = VISIBILITY_VISIBLE;\r\n }\r\n }\r\n\r\n override hide() {\r\n const el = this._elementRef.nativeElement,\r\n styles = el.style;\r\n styles.zIndex = HIDDEN_ZINDEX;\r\n if (this.regular) {\r\n if (styles.display === DISPLAY_NONE) {\r\n return;\r\n }\r\n\r\n styles.display = DISPLAY_NONE;\r\n } else {\r\n if (styles.visibility === VISIBILITY_HIDDEN) {\r\n return;\r\n }\r\n\r\n styles.visibility = VISIBILITY_HIDDEN;\r\n }\r\n }\r\n}","import { ChangeDetectionStrategy, Component, Input, ViewChild } from '@angular/core';\r\nimport { BehaviorSubject, combineLatest, from, takeUntil, tap } from 'rxjs';\r\nimport { TextDirections } from '../../../../enums';\r\nimport { TextDirection } from '../../../../types';\r\nimport { BaseScrollView } from '../../../ng-scroll-view/base/base-scroll-view.component';\r\nimport { SCROLL_VIEW_INVERSION } from '../../../ng-scroll-view';\r\nimport { BEHAVIOR_INSTANT, DEFAULT_SCROLLBAR_ENABLED, LEFT_PROP_NAME, TOP_PROP_NAME } from '../../../../const';\r\nimport { NgScrollBarComponent } from '../../../ng-scroll-bar/ng-scroll-bar.component';\r\nimport { ScrollBox } from '../../../ng-scroller/utils';\r\nimport { SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, SCROLL_VIEW_OVERSCROLL_ENABLED } from '../../../ng-scroll-view/const';\r\n\r\n/**\r\n * NgPrerenderScrollerComponent\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-prerender-scroller',\r\n templateUrl: './ng-prerender-scroller.component.html',\r\n styleUrls: ['../../../ng-scroller/ng-scroller.component.scss'],\r\n providers: [\r\n { provide: SCROLL_VIEW_INVERSION, useValue: false },\r\n { provide: SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, useValue: true },\r\n { provide: SCROLL_VIEW_OVERSCROLL_ENABLED, useValue: false },\r\n ],\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgPrerenderScrollerComponent extends BaseScrollView {\r\n @ViewChild('scrollBar', { read: NgScrollBarComponent })\r\n scrollBar: NgScrollBarComponent | undefined;\r\n\r\n protected _$langTextDir = new BehaviorSubject<TextDirection>(TextDirections.LTR);\r\n readonly $langTextDir = this._$langTextDir.asObservable();\r\n\r\n protected _$scrollbarEnabled = new BehaviorSubject<boolean>(DEFAULT_SCROLLBAR_ENABLED);\r\n readonly $scrollbarEnabled = this._$scrollbarEnabled.asObservable();\r\n @Input()\r\n set scrollbarEnabled(v: boolean) {\r\n if (this._$scrollbarEnabled.getValue() !== v) {\r\n this._$scrollbarEnabled.next(v);\r\n }\r\n }\r\n get scrollbarEnabled() { return this._$scrollbarEnabled.getValue(); }\r\n\r\n protected _$classes = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n readonly $classes = this._$classes.asObservable();\r\n @Input()\r\n set classes(v: { [cName: string]: boolean }) {\r\n if (this._$classes.getValue() !== v) {\r\n this._$classes.next(v);\r\n }\r\n }\r\n get classes() { return this._$classes.getValue(); }\r\n\r\n protected _$actualClasses = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n readonly $actualClasses = this._$actualClasses.asObservable();\r\n\r\n protected _$containerClasses = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n readonly $containerClasses = this._$containerClasses.asObservable();\r\n\r\n protected _$thumbSize = new BehaviorSubject<number>(0);\r\n readonly $thumbSize = this._$thumbSize.asObservable();\r\n\r\n protected _$scrollbarShow = new BehaviorSubject<boolean>(false);\r\n readonly $scrollbarShow = this._$scrollbarShow.asObservable();\r\n\r\n override set x(v: number) {\r\n if (v !== undefined && !Number.isNaN(v)) {\r\n this._x = this._actualX = v;\r\n\r\n this.updateScrollBar();\r\n }\r\n }\r\n override get x() { return this._x; }\r\n\r\n override set y(v: number) {\r\n if (v !== undefined && !Number.isNaN(v)) {\r\n this._y = this._actualY = v;\r\n\r\n this.updateScrollBar();\r\n }\r\n }\r\n override get y() { return this._y; }\r\n\r\n protected override onResizeViewport() {\r\n const viewport = this.scrollViewport?.nativeElement;\r\n if (viewport) {\r\n this._$viewportBounds.next({ width: viewport.offsetWidth, height: viewport.offsetHeight });\r\n this.updateScrollBar();\r\n }\r\n }\r\n\r\n protected override onResizeContent() {\r\n const content = this.scrollContent?.nativeElement;\r\n if (content) {\r\n this._$contentBounds.next({ width: content.offsetWidth, height: content.offsetHeight });\r\n this.updateScrollBar();\r\n }\r\n }\r\n\r\n private _scrollBox = new ScrollBox();\r\n\r\n constructor() {\r\n super();\r\n\r\n const $classes = this.$classes,\r\n $direction = this.$direction;\r\n\r\n combineLatest(([$classes, $direction])).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([classes, direction]) => {\r\n this._$actualClasses.next({ ...classes, [direction]: true });\r\n }),\r\n ).subscribe();\r\n\r\n const $contentBounds = this.$contentBounds,\r\n $viewportBounds = this.$viewportBounds,\r\n $isVertical = this.$isVertical,\r\n $scrollbarEnabled = this.$scrollbarEnabled;\r\n\r\n combineLatest([$direction, $scrollbarEnabled, $isVertical, $contentBounds, $viewportBounds]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([direction, scrollbarEnabled]) => {\r\n this._$containerClasses.next({ [direction]: true, enabled: scrollbarEnabled, scrollable: scrollbarEnabled });\r\n }),\r\n ).subscribe();\r\n\r\n const $startOffset = this.$startOffset,\r\n $endOffset = this.$endOffset,\r\n $thumbSize = this.$thumbSize;\r\n\r\n from([$endOffset, $startOffset, $thumbSize, $isVertical]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n this.updateScrollBar();\r\n }),\r\n ).subscribe();\r\n\r\n const $updateScrollBar = this.$updateScrollBar;\r\n\r\n $updateScrollBar.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n this.updateScrollBarHandler(true);\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n private updateScrollBarHandler(update: boolean = false) {\r\n const direction = this._$direction.getValue(),\r\n isVertical = this._$isVertical.getValue(),\r\n startOffset = this._$startOffset.getValue(),\r\n endOffset = this._$endOffset.getValue(),\r\n scrollContent = this.scrollContent?.nativeElement as HTMLElement,\r\n scrollViewport = this.scrollViewport?.nativeElement as HTMLDivElement,\r\n {\r\n thumbSize,\r\n thumbPosition,\r\n } = this._scrollBox.calculateScroll({\r\n direction,\r\n viewportWidth: scrollViewport.offsetWidth, viewportHeight: scrollViewport.offsetHeight,\r\n contentWidth: scrollContent.offsetWidth, contentHeight: scrollContent.offsetHeight,\r\n startOffset,\r\n endOffset,\r\n positionX: this._x,\r\n positionY: this._y,\r\n minSize: 1,\r\n });\r\n\r\n this._$thumbSize.next(thumbSize);\r\n if (update) {\r\n this.scrollBar?.scroll({\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: thumbPosition, fireUpdate: false, behavior: BEHAVIOR_INSTANT,\r\n userAction: false, blending: true,\r\n });\r\n }\r\n this._$scrollbarShow.next(this.scrollable);\r\n }\r\n\r\n protected updateScrollBar() {\r\n this._$updateScrollBar.next();\r\n }\r\n}\r\n","<div localeSensitive [langTextDir]=\"($langTextDir | async)!\" [listDir]=\"($direction | async)\" class=\"ngvl__container\"\r\n [ngClass]=\"($containerClasses | async)!\">\r\n <div #scrollViewport part=\"scroller\" class=\"ngvl__scroller\">\r\n <div #scrollContent part=\"list\" class=\"ngvl__list\" [ngClass]=\"($actualClasses | async)\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>","import {\r\n ChangeDetectionStrategy, Component, ElementRef, inject, Input, OnDestroy, TemplateRef, ViewChild,\r\n ViewContainerRef, ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport { BehaviorSubject, combineLatest, filter, Subject, Subscription, takeUntil, tap } from \"rxjs\";\r\nimport { toggleClassName } from \"../../../../utils\";\r\nimport {\r\n CLASS_LIST_HORIZONTAL, CLASS_LIST_VERTICAL, DEFAULT_DIRECTION, DEFAULT_DIVIDES, DEFAULT_DYNAMIC_SIZE, DEFAULT_ITEM_SIZE,\r\n DEFAULT_SCROLLBAR_ENABLED, PX, TRACK_BY_PROPERTY_NAME,\r\n} from \"../../../../const\";\r\nimport { ISize } from '../../../../interfaces';\r\nimport { IVirtualListCollection } from \"../../../../models\";\r\nimport { PrerenderCache } from \"../../types/cache\";\r\nimport { BaseVirtualListItemComponent } from \"../../../ng-list-item/base\";\r\nimport { Component$1 } from \"../../../../models/component.model\";\r\nimport { PrerenderTrackBox } from \"../../core\";\r\nimport { PrerenderTrackBoxEvents } from \"../../events\";\r\nimport { NgPrerenderVirtualListItemComponent } from \"../ng-prerender-list-item/ng-prerender-list-item.component\";\r\nimport { Direction } from \"../../../../types\";\r\nimport { DisposableComponent } from \"../../../../utils/disposable-component\";\r\n\r\n/**\r\n * NgPrerenderList\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-prerender-list',\r\n templateUrl: './ng-prerender-list.component.html',\r\n styleUrls: ['../../../../ng-virtual-list.component.scss', './ng-prerender-list.component.scss'],\r\n host: {\r\n 'style': 'position: relative;'\r\n },\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.ShadowDom,\r\n})\r\nexport class NgPrerenderList extends DisposableComponent implements OnDestroy {\r\n @ViewChild('renderersContainer', { read: ViewContainerRef })\r\n private _listContainerRef: ViewContainerRef | undefined;\r\n\r\n protected _$enabled = new BehaviorSubject<boolean>(false);\r\n readonly $enabled = this._$enabled.asObservable();\r\n @Input()\r\n set enabled(v: boolean) {\r\n if (this._$enabled.getValue() !== v) {\r\n this._$enabled.next(v);\r\n }\r\n }\r\n get enabled() { return this._$enabled.getValue(); }\r\n\r\n protected _$direction = new BehaviorSubject<Direction>(DEFAULT_DIRECTION);\r\n readonly $direction = this._$direction.asObservable();\r\n @Input()\r\n set direction(v: Direction) {\r\n if (this._$direction.getValue() !== v) {\r\n this._$direction.next(v);\r\n }\r\n }\r\n get direction() { return this._$direction.getValue(); }\r\n\r\n protected _$isVertical = new BehaviorSubject<boolean>(true);\r\n readonly $isVertical = this._$isVertical.asObservable();\r\n @Input()\r\n set isVertical(v: boolean) {\r\n if (this._$isVertical.getValue() !== v) {\r\n this._$isVertical.next(v);\r\n }\r\n }\r\n get isVertical() { return this._$isVertical.getValue(); }\r\n\r\n protected _$scrollbarEnabled = new BehaviorSubject<boolean>(DEFAULT_SCROLLBAR_ENABLED);\r\n readonly $scrollbarEnabled = this._$scrollbarEnabled.asObservable();\r\n @Input()\r\n set scrollbarEnabled(v: boolean) {\r\n if (this._$scrollbarEnabled.getValue() !== v) {\r\n this._$scrollbarEnabled.next(v);\r\n }\r\n }\r\n get scrollbarEnabled() { return this._$scrollbarEnabled.getValue(); }\r\n\r\n protected _$startOffset = new BehaviorSubject<number>(0);\r\n readonly $startOffset = this._$startOffset.asObservable();\r\n @Input()\r\n set startOffset(v: number) {\r\n if (this._$startOffset.getValue() !== v) {\r\n this._$startOffset.next(v);\r\n }\r\n }\r\n get startOffset() { return this._$startOffset.getValue(); }\r\n\r\n protected _$endOffset = new BehaviorSubject<number>(0);\r\n readonly $endOffset = this._$endOffset.asObservable();\r\n @Input()\r\n set endOffset(v: number) {\r\n if (this._$endOffset.getValue() !== v) {\r\n this._$endOffset.next(v);\r\n }\r\n }\r\n get endOffset() { return this._$endOffset.getValue(); }\r\n\r\n protected _$bounds = new BehaviorSubject<ISize | null>({ width: 0, height: 0 });\r\n readonly $bounds = this._$bounds.asObservable();\r\n @Input()\r\n set bounds(v: ISize | null) {\r\n if (this._$bounds.getValue() !== v) {\r\n this._$bounds.next(v);\r\n }\r\n }\r\n get bounds() { return this._$bounds.getValue(); }\r\n\r\n protected _$dynamic = new BehaviorSubject<boolean>(DEFAULT_DYNAMIC_SIZE);\r\n readonly $dynamic = this._$dynamic.asObservable();\r\n @Input()\r\n set dynamic(v: boolean) {\r\n if (this._$dynamic.getValue() !== v) {\r\n this._$dynamic.next(v);\r\n }\r\n }\r\n get dynamic() { return this._$dynamic.getValue(); }\r\n\r\n protected _$itemSize = new BehaviorSubject<number>(DEFAULT_ITEM_SIZE);\r\n readonly $itemSize = this._$itemSize.asObservable();\r\n @Input()\r\n set itemSize(v: number) {\r\n if (this._$itemSize.getValue() !== v) {\r\n this._$itemSize.next(v);\r\n }\r\n }\r\n get itemSize() { return this._$itemSize.getValue(); }\r\n\r\n protected _$trackBy = new BehaviorSubject<string>(TRACK_BY_PROPERTY_NAME);\r\n readonly $trackBy = this._$trackBy.asObservable();\r\n @Input()\r\n set trackBy(v: string) {\r\n if (this._$trackBy.getValue() !== v) {\r\n this._$trackBy.next(v);\r\n }\r\n }\r\n get trackBy() { return this._$trackBy.getValue(); }\r\n\r\n protected _$divides = new BehaviorSubject<number>(DEFAULT_DIVIDES);\r\n readonly $divides = this._$divides.asObservable();\r\n @Input()\r\n set divides(v: number) {\r\n if (this._$divides.getValue() !== v) {\r\n this._$divides.next(v);\r\n }\r\n }\r\n get divides() { return this._$divides.getValue(); }\r\n\r\n protected _$items = new BehaviorSubject<IVirtualListCollection>([]);\r\n readonly $items = this._$items.asObservable();\r\n @Input()\r\n set items(v: IVirtualListCollection) {\r\n if (this._$items.getValue() !== v) {\r\n this._$items.next(v);\r\n }\r\n }\r\n get items() { return this._$items.getValue(); }\r\n\r\n protected _$itemRenderer = new BehaviorSubject<TemplateRef<any> | null>(null);\r\n readonly $itemRenderer = this._$itemRenderer.asObservable();\r\n @Input()\r\n set itemRenderer(v: TemplateRef<any> | null) {\r\n if (this._$itemRenderer.getValue() !== v) {\r\n this._$itemRenderer.next(v);\r\n }\r\n }\r\n get itemRenderer() { return this._$itemRenderer.getValue(); }\r\n\r\n protected _$itemComponentClass = new BehaviorSubject<Component$1<BaseVirtualListItemComponent>>(NgPrerenderVirtualListItemComponent);\r\n readonly $itemComponentClass = this._$itemComponentClass.asObservable();\r\n @Input()\r\n set itemComponentClass(v: Component$1<BaseVirtualListItemComponent>) {\r\n if (this._$itemComponentClass.getValue() !== v) {\r\n this._$itemComponentClass.next(v);\r\n }\r\n }\r\n get itemComponentClass() { return this._$itemComponentClass.getValue(); }\r\n\r\n protected _$classes = new BehaviorSubject<{ [cName: string]: boolean }>({ prepared: true });\r\n readonly $classes = this._$classes.asObservable();\r\n\r\n private _$render = new Subject<PrerenderCache>();\r\n $render = this._$render.asObservable();\r\n\r\n private _$componentResize = new Subject<PrerenderCache>();\r\n protected $componentResize = this._$componentResize.asObservable();\r\n\r\n private _trackBox: PrerenderTrackBox | null = new PrerenderTrackBox();\r\n\r\n private _onTrackBoxResizeHandler = (cache: PrerenderCache) => {\r\n this._$componentResize.next(cache);\r\n };\r\n\r\n private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n get active() { return this._trackBox?.active ?? false; }\r\n\r\n private _activated: boolean = false;\r\n\r\n private _subscriptions = new Array<Subscription>();\r\n\r\n constructor() {\r\n super();\r\n\r\n const $enabled = this.$enabled;\r\n $enabled.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(enabled => {\r\n if (enabled) {\r\n this.activate();\r\n } else {\r\n this.deactivate();\r\n }\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n activate() {\r\n if (this._activated) {\r\n return;\r\n }\r\n this._activated = true;\r\n\r\n this._trackBox!.addEventListener(PrerenderTrackBoxEvents.RESIZE, this._onTrackBoxResizeHandler);\r\n\r\n this._subscriptions.push(this.$isVertical.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n const el = this._elementRef.nativeElement;\r\n toggleClassName(el, v ? CLASS_LIST_VERTICAL : CLASS_LIST_HORIZONTAL, v ? CLASS_LIST_HORIZONTAL : CLASS_LIST_VERTICAL);\r\n }),\r\n ).subscribe());\r\n\r\n this._subscriptions.push(this.$bounds.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n tap(bounds => {\r\n const { width, height } = bounds!,\r\n el = this._elementRef.nativeElement;\r\n el.style.width = `${width}${PX}`;\r\n el.style.height = `${height}${PX}`;\r\n }),\r\n ).subscribe());\r\n\r\n this._subscriptions.push(combineLatest([this.$bounds, this.$items]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(([b, i]) => !!b && !!i),\r\n tap(([bounds, items]) => {\r\n if (this.active && !!this._trackBox) {\r\n this._trackBox.reset(this._$itemComponentClass.getValue(), items, this._$bounds.getValue()!, {\r\n itemRenderer: this._$itemRenderer.getValue()!,\r\n dynamic: this._$dynamic.getValue(),\r\n divides: this._$divides.getValue(),\r\n itemSize: this._$itemSize.getValue(),\r\n isVertical: this._$isVertical.getValue(),\r\n trackBy: this._$trackBy.getValue(),\r\n });\r\n }\r\n }),\r\n ).subscribe());\r\n\r\n const $componentResize = this.$componentResize;\r\n this._subscriptions.push($componentResize.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(cache => {\r\n this._$render.next(cache);\r\n }),\r\n ).subscribe());\r\n }\r\n\r\n deactivate() {\r\n if (!this._activated) {\r\n return;\r\n }\r\n this._activated = false;\r\n\r\n this.off();\r\n\r\n if (!!this._trackBox) {\r\n this._trackBox!.removeEventListener(PrerenderTrackBoxEvents.RESIZE, this._onTrackBoxResizeHandler);\r\n }\r\n\r\n const subscriptions = this._subscriptions;\r\n for (const subscr of subscriptions) {\r\n if (!subscr.closed) {\r\n subscr.unsubscribe();\r\n }\r\n }\r\n this._subscriptions = [];\r\n }\r\n\r\n clear() {\r\n if (!!this._trackBox) {\r\n this._trackBox.clear();\r\n }\r\n }\r\n\r\n on(items: IVirtualListCollection | null = null) {\r\n if (!!this._trackBox) {\r\n this._trackBox.on();\r\n this._$items.next(items ?? []);\r\n }\r\n }\r\n\r\n off() {\r\n if (!!this._trackBox) {\r\n this._trackBox.off();\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this._trackBox!.create(this._listContainerRef!);\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n\r\n this.dispose();\r\n }\r\n\r\n dispose() {\r\n this._subscriptions = [];\r\n\r\n if (!!this._trackBox) {\r\n this._trackBox.dispose();\r\n this._trackBox = null;\r\n }\r\n }\r\n}","<ng-prerender-scroller #scroller class=\"ngvl__list-scroller\" [classes]=\"($classes | async)!\"\r\n [direction]=\"($direction | async)!\" [scrollbarEnabled]=\"($scrollbarEnabled | async)!\"\r\n [startOffset]=\"($startOffset | async)!\" [endOffset]=\"($endOffset | async)!\">\r\n <ng-container #renderersContainer></ng-container>\r\n</ng-prerender-scroller>","import {\r\n ChangeDetectionStrategy, Component, Input, TemplateRef, ViewChild, ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport { filter, Observable, of, switchMap, takeUntil } from \"rxjs\";\r\nimport {\r\n DEFAULT_DIRECTION, DEFAULT_DIVIDES, DEFAULT_DYNAMIC_SIZE, DEFAULT_ITEM_SIZE, DEFAULT_SCROLLBAR_ENABLED, TRACK_BY_PROPERTY_NAME,\r\n} from \"../../const\";\r\nimport { ISize } from '../../interfaces';\r\nimport { IVirtualListCollection } from \"../../models\";\r\nimport { Direction } from \"../../types\";\r\nimport { NgPrerenderList } from \"./components/ng-prerender-list/ng-prerender-list.component\";\r\nimport { PrerenderCache } from \"./types\";\r\nimport { DisposableComponent } from \"../../utils/disposable-component\";\r\n\r\n/**\r\n * Prerender container.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/components/ng-prerender-container/ng-prerender-container.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-prerender-container',\r\n templateUrl: './ng-prerender-container.component.html',\r\n styleUrls: ['../../ng-virtual-list.component.scss', './ng-prerender-container.component.scss'],\r\n host: {\r\n 'style': 'position: relative;'\r\n },\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.ShadowDom,\r\n})\r\nexport class NgPrerenderContainer extends DisposableComponent {\r\n @ViewChild('list', { read: NgPrerenderList })\r\n private _list: NgPrerenderList | null = null;\r\n\r\n @Input()\r\n enabled: boolean = false;\r\n\r\n @Input()\r\n direction: Direction | any = DEFAULT_DIRECTION;\r\n\r\n @Input()\r\n isVertical: boolean = true;\r\n\r\n @Input()\r\n scrollbarEnabled: boolean = DEFAULT_SCROLLBAR_ENABLED;\r\n\r\n @Input()\r\n startOffset: number = 0;\r\n\r\n @Input()\r\n endOffset: number = 0;\r\n\r\n @Input()\r\n bounds!: ISize;\r\n\r\n @Input()\r\n dynamic: boolean = DEFAULT_DYNAMIC_SIZE;\r\n\r\n @Input()\r\n itemSize: number = DEFAULT_ITEM_SIZE;\r\n\r\n @Input()\r\n trackBy: string = TRACK_BY_PROPERTY_NAME;\r\n\r\n @Input()\r\n divides: number = DEFAULT_DIVIDES;\r\n\r\n itemRenderer!: TemplateRef<any>;\r\n\r\n $render!: Observable<PrerenderCache>;\r\n\r\n get active() {\r\n return this._list?.active ?? false;\r\n }\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngAfterViewInit() {\r\n const $list = of(this._list);\r\n\r\n this.$render = $list.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n switchMap(v => v!.$render),\r\n );\r\n }\r\n\r\n clear() {\r\n const list = this._list;\r\n if (!!list) {\r\n list.clear();\r\n }\r\n }\r\n\r\n on(items: IVirtualListCollection | null = null) {\r\n const list = this._list;\r\n if (!!list) {\r\n list.on(items);\r\n }\r\n }\r\n\r\n off() {\r\n const list = this._list;\r\n if (!!list) {\r\n list.off();\r\n }\r\n }\r\n}","<ng-prerender-list #list [bounds]=\"bounds!\" [direction]=\"direction\" [dynamic]=\"dynamic\" [isVertical]=\"isVertical\"\r\n [itemSize]=\"itemSize\" [trackBy]=\"trackBy\" [itemRenderer]=\"itemRenderer\" [startOffset]=\"startOffset\"\r\n [divides]=\"divides\" [endOffset]=\"endOffset\" [scrollbarEnabled]=\"scrollbarEnabled\"\r\n [enabled]=\"enabled\"></ng-prerender-list>","import { RANGE_DISPLAY_ITEMS_END_OFFSET } from \"../const\";\r\nimport { IRenderVirtualListItem } from \"../models\";\r\nimport { IRenderVirtualListCollection } from \"../models/render-collection.model\";\r\nimport { ISize } from \"../interfaces\";\r\n\r\nexport const formatScreenReaderMessage = (items: IRenderVirtualListCollection, messagePattern: string | undefined, scrollSize: number,\r\n isVertical: boolean, bounds: ISize) => {\r\n if (!messagePattern) {\r\n return '';\r\n }\r\n const list = items ?? [], size = isVertical ? bounds.height : bounds.width;\r\n let start = Number.NaN, end = Number.NaN, prevItem: IRenderVirtualListItem | undefined;\r\n for (let i = 0, l = list.length; i < l; i++) {\r\n const item = list[i], position = isVertical ? item.measures.y : item.measures.x,\r\n itemSize = isVertical ? item.measures.height : item.measures.width;\r\n if (((position + itemSize) >= scrollSize) && Number.isNaN(start)) {\r\n start = item.index + 1;\r\n }\r\n if ((position >= (scrollSize + size)) && Number.isNaN(end) && prevItem) {\r\n end = prevItem.index + 1;\r\n }\r\n prevItem = item;\r\n }\r\n if (Number.isNaN(start) || Number.isNaN(end)) {\r\n return '';\r\n }\r\n let formatted = messagePattern ?? '';\r\n formatted = formatted.replace('$1', `${start}`);\r\n formatted = formatted.replace('$2', `${end}`);\r\n return formatted;\r\n};\r\n\r\nexport const formatActualDisplayItems = (items: IRenderVirtualListCollection, startOffset: number, endOffset: number, scrollSize: number,\r\n isVertical: boolean, bounds: ISize): [number, number] | undefined => {\r\n const list = items ?? [], size = isVertical ? bounds.height : bounds.width;\r\n let start = Number.NaN, end = Number.NaN;\r\n for (let i = 0, l = list.length; i < l; i++) {\r\n const item = list[i], position = isVertical ? item.measures.y : item.measures.x,\r\n itemSize = isVertical ? item.measures.height : item.measures.width;\r\n if ((position + itemSize <= scrollSize + startOffset)) {\r\n start = item.index;\r\n }\r\n if (((position) <= (scrollSize + size - endOffset + RANGE_DISPLAY_ITEMS_END_OFFSET))) {\r\n end = item.index;\r\n }\r\n }\r\n if (Number.isNaN(start) || Number.isNaN(end)) {\r\n return undefined;\r\n }\r\n return [start, end];\r\n};\r\n","import { ArithmeticExpression } from \"../types\";\r\nimport { isPercentageValue } from \"./is-persentage-value\";\r\nimport { parseFloatOrPersentageValue } from \"./parse-float-or-persentage-value\";\r\n\r\nconst WHITESPACE = ' ', PLUS = '+', MINUS = '-', OPERATORS = [PLUS, MINUS];\r\n\r\nconst calculate = (exp: string, reference: number, operator: -1 | 1 = 1) => {\r\n let result: number = 0;\r\n const isPercentage = isPercentageValue(exp);\r\n if (isPercentage) {\r\n const v = parseFloatOrPersentageValue(exp);\r\n result += (reference * v) * operator;\r\n } else {\r\n result += (Number(exp) ?? 0) * operator;\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * parseArithmeticExpression\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/utils/parse-arithmetic-expression.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const parseArithmeticExpression = (value: ArithmeticExpression, reference: number): number => {\r\n if (typeof value === 'number') {\r\n return value;\r\n }\r\n\r\n let result: number = 0, operator: 1 | -1 = 1, exp: string = '';\r\n for (let i = 0, l = value.length; i < l; i++) {\r\n const char = value[i], isLast = i === l - 1;\r\n if ((char === WHITESPACE) || isLast) {\r\n if (isLast) {\r\n exp = `${exp}${char}`;\r\n }\r\n if (exp.length > 0) {\r\n result += calculate(exp, reference, operator);\r\n }\r\n exp = '';\r\n continue;\r\n }\r\n else if (OPERATORS.indexOf(char) > -1) {\r\n if (exp.length > 0) {\r\n result += calculate(exp, reference, operator);\r\n }\r\n exp = '';\r\n operator = char === PLUS ? 1 : -1;\r\n continue;\r\n } else {\r\n exp = `${exp}${char}`;\r\n }\r\n }\r\n return result;\r\n}\r\n","import { SERVICE_PROP_DUMMY, SERVICE_PROP_DUMMY_ENABLED, SERVICE_PROP_DUMMY_ID, SERVICE_TYPE_DUMMY } from \"../const\";\r\nimport { IVirtualListCollection, IVirtualListItemConfigMap } from \"../models\";\r\n\r\n/**\r\n * normalizeCollection\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/utils/normalize-collection.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const normalizeCollection = (items: IVirtualListCollection, itemConfigMap: IVirtualListItemConfigMap, trackBy: string, divides: number) => {\r\n if (divides > 1) {\r\n const normalizedItems: IVirtualListCollection<any | null> = [];\r\n let ci = -1, emptyId = Number.MIN_SAFE_INTEGER, offset = 0;\r\n for (let i = 0, l = items.length; i < l; i++) {\r\n const ii = i + offset, item = items[i], id = item[trackBy] ?? null, config = id !== null ? itemConfigMap[id] : null,\r\n fullSize = !!config ? ((!!config.sticky && config.sticky > 0) || (config.fullSize === true)) : false;\r\n\r\n if ((ii % divides) === 0) {\r\n ci = 0;\r\n } else {\r\n ci++;\r\n }\r\n\r\n if (fullSize && ii > 0 && ci !== 0) {\r\n for (let j = ci; j < divides; j++) {\r\n const dummyId = `${SERVICE_PROP_DUMMY_ID}-${i},${j}`;\r\n normalizedItems.push({ [trackBy]: dummyId, [SERVICE_PROP_DUMMY]: SERVICE_PROP_DUMMY_ENABLED, type: SERVICE_TYPE_DUMMY });\r\n emptyId++;\r\n offset++;\r\n }\r\n }\r\n normalizedItems.push(item);\r\n if (fullSize && (i < (l - 1))) {\r\n for (let j = 1; j < divides; j++) {\r\n const dummyId = `${SERVICE_PROP_DUMMY_ID}-${i},${j}`;\r\n normalizedItems.push({ [trackBy]: dummyId, [SERVICE_PROP_DUMMY]: SERVICE_PROP_DUMMY_ENABLED, type: SERVICE_TYPE_DUMMY });\r\n emptyId++;\r\n offset++;\r\n }\r\n }\r\n }\r\n return normalizedItems;\r\n }\r\n return items;\r\n}\r\n","import { SpreadingModes } from \"../enums\";\r\nimport { SpreadingMode } from \"../types\";\r\n\r\nconst NORMAL_ALIASES = [SpreadingModes.NORMAL, 'normal'],\r\n INFINITY_ALIASES = [SpreadingModes.INFINITY, 'infinity'];\r\n\r\n/**\r\n * Determines the display mode of list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/utils/is-select-mode.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isSpreadingMode = (src: SpreadingMode, expected: SpreadingMode): boolean => {\r\n if (INFINITY_ALIASES.includes(expected)) {\r\n return INFINITY_ALIASES.includes(src);\r\n }\r\n return NORMAL_ALIASES.includes(src);\r\n}\r\n","import { EMPTY_SCROLL_STATE_VERSION } from \"../const\";\r\n\r\nexport const getScrollStateVersion = (totalSize: number, scrollSize: number): string => {\r\n if (totalSize === -1) {\r\n return EMPTY_SCROLL_STATE_VERSION;\r\n }\r\n let scrollStateUpdateIndex = 0;\r\n if (totalSize < scrollSize) {\r\n scrollStateUpdateIndex = scrollStateUpdateIndex === Number.MAX_SAFE_INTEGER ? 0 : scrollStateUpdateIndex + 1;\r\n }\r\n return `${scrollStateUpdateIndex}_${totalSize}_${scrollSize}`;\r\n};\r\n","import {\r\n ChangeDetectionStrategy, Component, ComponentRef, ElementRef, EventEmitter, inject, Input,\r\n OnDestroy, Output, TemplateRef, ViewChild, ViewContainerRef, ViewEncapsulation,\r\n} from '@angular/core';\r\nimport {\r\n BehaviorSubject, combineLatest, debounceTime, delay, distinctUntilChanged, filter, fromEvent, map,\r\n Observable,\r\n of, skip, Subject, switchMap, take, takeUntil, tap,\r\n} from 'rxjs';\r\nimport { NgVirtualListItemComponent } from './components/ng-list-item/ng-virtual-list-item.component';\r\nimport {\r\n BEHAVIOR_INSTANT, CLASS_LIST_HORIZONTAL, CLASS_LIST_VERTICAL, DEFAULT_DIRECTION, DEFAULT_DYNAMIC_SIZE,\r\n DEFAULT_ENABLED_BUFFER_OPTIMIZATION, DEFAULT_ITEM_SIZE, DEFAULT_BUFFER_SIZE, DEFAULT_LIST_SIZE, DEFAULT_STICKY_ENABLED, DEFAULT_SNAPPING_METHOD,\r\n HEIGHT_PROP_NAME, LEFT_PROP_NAME, MAX_SCROLL_TO_ITERATIONS, PX, FOCUS, TOP_PROP_NAME, TRACK_BY_PROPERTY_NAME, WIDTH_PROP_NAME,\r\n DEFAULT_MAX_BUFFER_SIZE, DEFAULT_SELECTING_MODES, DEFAULT_SELECT_BY_CLICK, DEFAULT_COLLAPSE_BY_CLICK, DEFAULT_COLLECTION_MODE,\r\n DEFAULT_SCREEN_READER_MESSAGE, DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET, DEFAULT_SNAP_SCROLLTO_END, MIN_PIXELS_FOR_PREVENT_SNAPPING,\r\n MOUSE_DOWN, TOUCH_START, DEFAULT_LANG_TEXT_DIR, DEFAULT_CLICK_DISTANCE, DEFAULT_WAIT_FOR_PREPARATION, DEFAULT_SCROLLBAR_THICKNESS,\r\n DEFAULT_SCROLLBAR_MIN_SIZE, KEY_DOWN, BEHAVIOR_AUTO, DEFAULT_SCROLLBAR_ENABLED, DEFAULT_SCROLLBAR_INTERACTIVE, DEFAULT_OVERSCROLL_ENABLED,\r\n DEFAULT_ANIMATION_PARAMS, DEFAULT_SCROLL_BEHAVIOR, DEFAULT_SNAP_SCROLLTO_START, EMPTY_SCROLL_STATE_VERSION, MAX_REGULAR_SNAPED_COMPONENTS,\r\n PREPARE_ITERATIONS, PREPARATION_REUPDATE_LENGTH, ROLE_LIST_BOX, ROLE_LIST, KEY_TAB, MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL1,\r\n PREPARE_ITERATIONS_FOR_UPDATE_ITEMS, PREPARATION_REUPDATE_LENGTH_FOR_UPDATE_ITEMS, PREPARE_ITERATIONS_FOR_COLLAPSE_ITEMS,\r\n PREPARATION_REUPDATE_LENGTH_FOR_COLLAPSE_ITEMS, MAX_NUMBERS_OF_SKIPS_FOR_QUALITY_OPTIMIZATION_LVL1, DEFAULT_SCROLLING_SETTINGS,\r\n DEFAULT_SNAP_TO_ITEM, DEFAULT_SNAP_TO_ITEM_ALIGN, VIEWPORT, DEFAULT_MOTION_BLUR, DEFAULT_MAX_MOTION_BLUR, DEFAULT_SCROLLING_ONE_BY_ONE,\r\n DEFAULT_MOTION_BLUR_ENABLED, DEFAULT_DIVIDES, DEFAULT_SNAPPING_DISTANCE, DEFAULT_MAX_ITEM_SIZE, DEFAULT_MIN_ITEM_SIZE,\r\n DEFAULT_ALIGNMENT, DEFAULT_COLLAPSING_MODES, DEFAULT_SPREADING_MODE, DEFAULT_ZINDEX_WHEN_SELECTING,\r\n DEFAULT_OVERLAPPING_SCROLLBAR,\r\n} from './const';\r\nimport {\r\n IRenderVirtualListItem, IVirtualListCollection, IVirtualListItem, IVirtualListItemConfigMap,\r\n} from './models';\r\nimport {\r\n IScrollEvent, IScrollOptions, IAnimationParams, ISize, IRenderStabilizerOptions, IScrollingSettings,\r\n} from './interfaces';\r\nimport {\r\n Alignment, ArithmeticExpression, FocusAlignment, Id, ItemTransform, SnappingDistance, CollectionMode, Direction, SelectingMode,\r\n SnappingMethod, SnapToItemAlign, TextDirection, CollapsingMode,\r\n SpreadingMode,\r\n} from './types';\r\nimport { IRenderVirtualListCollection } from './models/render-collection.model';\r\nimport {\r\n Alignments, CollectionModes, Directions, FocusAlignments, SelectingModes, SnappingMethods, SnapToItemAligns, SpreadingModes, TextDirections,\r\n} from './enums';\r\nimport { debounce, ScrollEvent, toggleClassName } from './utils';\r\nimport { TrackBox } from './core/track-box';\r\nimport { isSnappingMethodAdvenced } from './utils/snapping-method';\r\nimport { BaseVirtualListItemComponent } from './components/ng-list-item/base';\r\nimport { Component$1 } from './models/component.model';\r\nimport { isDirection } from './utils/is-direction';\r\nimport { NgVirtualListService } from './ng-virtual-list.service';\r\nimport { isSelectMode } from './utils/is-select-mode';\r\nimport { isCollapseMode } from './utils/is-collapse-mode';\r\nimport { SelectingModesTypes } from './enums/selecting-modes-types';\r\nimport { CMap } from './utils/cmap';\r\nimport {\r\n validateArray, validateBoolean, validateFloat, validateFunction, validateInt, validateObject, validateString,\r\n} from './utils/validation';\r\nimport { copyValueAsReadonly, objectAsReadonly } from './utils/object';\r\nimport { isCollectionMode } from './utils/is-collection-mode';\r\nimport { NgScrollerComponent } from './components/ng-scroller/ng-scroller.component';\r\nimport { IScrollToParams } from './components/ng-scroll-view';\r\nimport { NgPrerenderContainer } from './components/ng-prerender-container/ng-prerender-container.component';\r\nimport { IScrollParams } from './interfaces';\r\nimport { formatActualDisplayItems, formatScreenReaderMessage } from './utils/screen-reader-formatter';\r\nimport { validateId, validateIteration, validateScrollBehavior, validateScrollIteration } from './utils/list-validators';\r\nimport { EVENT_KEY_DOWN, KEY_ARR_DOWN, KEY_ARR_LEFT, KEY_ARR_RIGHT, KEY_ARR_UP } from './components/ng-list-item/const';\r\nimport { NgVirtualListPublicService } from './ng-virtual-list-public.service';\r\nimport { isPercentageValue } from './utils/is-persentage-value';\r\nimport { parseArithmeticExpression } from './utils/parse-arithmetic-expression';\r\nimport { normalizeCollection } from './utils/normalize-collection';\r\nimport { CollapsingModes } from './enums';\r\nimport { isSpreadingMode } from './utils/is-spreading-mode';\r\nimport { IGetItemPositionOptions, IUpdateCollectionOptions } from './core/interfaces';\r\nimport { getScrollStateVersion } from './utils/get-scroll-state-version';\r\nimport { DisposableComponent } from './utils/disposable-component';\r\n\r\n/**\r\n * Virtual list component.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/ng-virtual-list.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-virtual-list',\r\n templateUrl: './ng-virtual-list.component.html',\r\n styleUrls: ['./ng-virtual-list.component.scss'],\r\n host: {\r\n 'style': 'position: relative;'\r\n },\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.ShadowDom,\r\n providers: [NgVirtualListService, NgVirtualListPublicService],\r\n})\r\nexport class NgVirtualListComponent extends DisposableComponent implements OnDestroy {\r\n private static __nextId: number = 0;\r\n\r\n private _id: number = NgVirtualListComponent.__nextId;\r\n\r\n /**\r\n * Readonly. Returns the unique identifier of the component.\r\n */\r\n get id() { return this._id; }\r\n\r\n private _service = inject(NgVirtualListService);\r\n\r\n @ViewChild('prerender', { read: NgPrerenderContainer })\r\n private _prerender: NgPrerenderContainer | undefined;\r\n\r\n @ViewChild('renderersContainer', { read: ViewContainerRef })\r\n private _listContainerRef: ViewContainerRef | undefined;\r\n\r\n @ViewChild('snapRendererContainer', { read: ViewContainerRef })\r\n private _snapContainerRef: ViewContainerRef | undefined;\r\n\r\n @ViewChild('scroller', { read: NgScrollerComponent })\r\n private _scrollerComponent: NgScrollerComponent | undefined;\r\n\r\n private _$scroller = new BehaviorSubject<ElementRef<HTMLDivElement> | undefined>(undefined);\r\n protected readonly $scroller = this._$scroller.asObservable();\r\n\r\n private _$list = new BehaviorSubject<ElementRef<HTMLDivElement> | undefined>(undefined);\r\n protected readonly $list = this._$list.asObservable();\r\n\r\n /**\r\n * Fires when the list has been scrolled.\r\n */\r\n @Output()\r\n onScroll = new EventEmitter<IScrollEvent>();\r\n\r\n /**\r\n * Fires when the list has completed scrolling.\r\n */\r\n @Output()\r\n onScrollEnd = new EventEmitter<IScrollEvent>();\r\n\r\n /**\r\n * Fires when the viewport size is changed.\r\n */\r\n @Output()\r\n onViewportChange = new EventEmitter<ISize>();\r\n\r\n /**\r\n * Emit the component ID when an element crosses the alignment line specified by the snapToItemAlign property.\r\n */\r\n @Output()\r\n onSnapItem = new EventEmitter<Id>();\r\n\r\n /**\r\n * Fires when an element is clicked.\r\n */\r\n @Output()\r\n onItemClick = new EventEmitter<IRenderVirtualListItem<any> | null>();\r\n\r\n /**\r\n * Fires when elements are selected.\r\n */\r\n @Output()\r\n onSelect = new EventEmitter<Array<Id> | Id | null>();\r\n\r\n /**\r\n * Fires when elements are collapsed.\r\n */\r\n @Output()\r\n onCollapse = new EventEmitter<Array<Id>>();\r\n\r\n /**\r\n * Fires when the scroll reaches the start.\r\n */\r\n @Output()\r\n onScrollReachStart = new EventEmitter<void>();\r\n\r\n /**\r\n * Fires when the scroll reaches the end.\r\n */\r\n @Output()\r\n onScrollReachEnd = new EventEmitter<void>();\r\n\r\n private _$show = new BehaviorSubject<boolean>(false);\r\n readonly $show = this._$show.asObservable();\r\n\r\n private _$initialized = new BehaviorSubject<boolean>(false);\r\n readonly $initialized = this._$initialized.asObservable();\r\n\r\n private _$scrollbarThickness = new BehaviorSubject<number>(DEFAULT_SCROLLBAR_THICKNESS);\r\n protected readonly $scrollbarThickness = this._$scrollbarThickness.asObservable();\r\n\r\n private _scrollbarThicknessTransform = (v: number) => {\r\n const valid = validateInt(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarThickness\" parameter must be of type `number`.');\r\n return DEFAULT_SCROLLBAR_THICKNESS;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Scrollbar thickness.\r\n */\r\n @Input()\r\n set scrollbarThickness(v: number) {\r\n if (this._$scrollbarThickness.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollbarThicknessTransform(v);\r\n\r\n this._$scrollbarThickness.next(transformedValue);\r\n };\r\n get scrollbarThickness() { return this._$scrollbarThickness.getValue(); }\r\n\r\n private _$scrollbarMinSize = new BehaviorSubject<number>(DEFAULT_SCROLLBAR_MIN_SIZE);\r\n protected readonly $scrollbarMinSize = this._$scrollbarMinSize.asObservable();\r\n\r\n private _scrollbarMinSizeTransform = (v: number) => {\r\n const valid = validateInt(v);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarMinSize\" parameter must be of type `number`.');\r\n return DEFAULT_SCROLLBAR_MIN_SIZE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Minimum scrollbar size.\r\n */\r\n @Input()\r\n set scrollbarMinSize(v: number) {\r\n if (this._$scrollbarMinSize.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollbarMinSizeTransform(v);\r\n\r\n this._$scrollbarMinSize.next(transformedValue);\r\n };\r\n get scrollbarMinSize() { return this._$scrollbarMinSize.getValue() as number; }\r\n\r\n private _$scrollbarThumbRenderer = new BehaviorSubject<TemplateRef<any> | null>(null);\r\n protected readonly $scrollbarThumbRenderer = this._$scrollbarThumbRenderer.asObservable();\r\n\r\n private _scrollbarThumbRendererTransform = (v: TemplateRef<any> | null) => {\r\n const valid = validateObject(v, true, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarThumbRenderer\" parameter must be of type `object`.');\r\n return null;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Scrollbar customization template.\r\n */\r\n @Input()\r\n set scrollbarThumbRenderer(v: TemplateRef<any> | null) {\r\n if (this._$scrollbarThumbRenderer.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollbarThumbRendererTransform(v);\r\n\r\n this._$scrollbarThumbRenderer.next(transformedValue);\r\n };\r\n get scrollbarThumbRenderer() { return this._$scrollbarThumbRenderer.getValue(); }\r\n\r\n private _$scrollbarThumbParams = new BehaviorSubject<{ [propName: string]: any } | null>({});\r\n protected readonly $scrollbarThumbParams = this._$scrollbarThumbParams.asObservable();\r\n\r\n private _scrollbarThumbParamsTransform = (v: { [propName: string]: any } | null) => {\r\n const valid = validateObject(v, true, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarThumbParams\" parameter must be of type `object`.');\r\n return null;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Additional options for the scrollbar.\r\n */\r\n @Input()\r\n set scrollbarThumbParams(v: { [propName: string]: any } | null) {\r\n if (this._$scrollbarThumbParams.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollbarThumbParamsTransform(v);\r\n\r\n this._$scrollbarThumbParams.next(transformedValue);\r\n };\r\n get scrollbarThumbParams() { return this._$scrollbarThumbParams.getValue(); }\r\n\r\n private _loading = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"loading\" parameter must be of type `boolean`.');\r\n return false;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n private _$loading = new BehaviorSubject<boolean>(false);\r\n protected readonly $loading = this._$loading.asObservable();\r\n\r\n private _loadingTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"loading\" parameter must be of type `boolean`.');\r\n return false;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * If `true`, the scrollBar goes into loading state. The default value is `false`.\r\n */\r\n @Input()\r\n set loading(v: boolean) {\r\n if (this._$loading.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._loadingTransform(v);\r\n\r\n this._$loading.next(transformedValue);\r\n };\r\n get loading() { return this._$loading.getValue() as boolean; }\r\n\r\n private _$waitForPreparation = new BehaviorSubject<boolean>(DEFAULT_WAIT_FOR_PREPARATION);\r\n protected readonly $waitForPreparation = this._$waitForPreparation.asObservable();\r\n\r\n private _waitForPreparationTransform = (v: boolean) => {\r\n const valid = validateObject(v);\r\n\r\n if (!valid) {\r\n console.error('The \"waitForPreparation\" parameter must be of type `boolean`.');\r\n return DEFAULT_WAIT_FOR_PREPARATION;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * If true, it will wait until the list items are fully prepared before displaying them.. The default value is `true`.\r\n */\r\n @Input()\r\n set waitForPreparation(v: boolean) {\r\n if (this._$waitForPreparation.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._waitForPreparationTransform(v);\r\n\r\n this._$waitForPreparation.next(transformedValue);\r\n };\r\n get waitForPreparation() { return this._$waitForPreparation.getValue() as boolean; }\r\n\r\n private _$clickDistance = new BehaviorSubject<number>(DEFAULT_CLICK_DISTANCE);\r\n protected readonly $clickDistance = this._$clickDistance.asObservable();\r\n\r\n private _clickDistanceTransform = (v: number) => {\r\n const valid = validateInt(v);\r\n\r\n if (!valid) {\r\n console.error('The \"clickDistance\" parameter must be of type `number`.');\r\n return DEFAULT_CLICK_DISTANCE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * The maximum scroll distance at which a click event is triggered.\r\n */\r\n @Input()\r\n set clickDistance(v: number) {\r\n if (this._$clickDistance.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._clickDistanceTransform(v);\r\n\r\n this._$clickDistance.next(transformedValue);\r\n };\r\n get clickDistance() { return this._$clickDistance.getValue() as number; }\r\n\r\n private _$items = new BehaviorSubject<IVirtualListCollection>([]);\r\n protected readonly $items = this._$items.asObservable();\r\n\r\n private _itemsTransform = (v: IVirtualListCollection) => {\r\n let valid = validateArray(v, true, true);\r\n if (valid) {\r\n if (v) {\r\n const trackBy = this.trackBy;\r\n for (let i = 0, l = v.length; i < l; i++) {\r\n const item = v[i];\r\n valid = validateObject(item, true, true);\r\n if (valid) {\r\n if (item && !(validateFloat(item?.[trackBy] as number, true) || validateString(item?.[trackBy] as string, true, true))) {\r\n valid = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!valid) {\r\n console.error('The \"items\" parameter must be of type `IVirtualListCollection` or `null`.');\r\n return [];\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Collection of list items.\r\n */\r\n @Input()\r\n set items(v: IVirtualListCollection) {\r\n if (this._$items.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._itemsTransform(v);\r\n\r\n this._$items.next(transformedValue);\r\n };\r\n get items() { return this._$items.getValue() as IVirtualListCollection; }\r\n\r\n private _$selectedIds = new BehaviorSubject<Array<Id> | Id | null>(null);\r\n protected readonly $selectedIds = this._$selectedIds.asObservable();\r\n\r\n private _selectedIdsTransform = (v: Array<Id> | Id | null) => {\r\n let valid = validateArray(v as any, true, true) || validateString(v as any, true, true) || validateFloat(v as any, true);\r\n if (valid) {\r\n if (v && Array.isArray(v)) {\r\n for (let i = 0, l = v.length; i < l; i++) {\r\n const item = v[i];\r\n valid = validateString(item as any) || validateFloat(item as any);\r\n if (!valid) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!valid) {\r\n console.error('The \"selectedIds\" parameter must be of type `Array<Id> | Id` or `null`.');\r\n return this._isMultiSelection ? [] : null;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets the selected items.\r\n */\r\n @Input()\r\n set selectedIds(v: Array<Id> | Id | null) {\r\n if (this._$selectedIds.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._selectedIdsTransform(v);\r\n\r\n this._$selectedIds.next(transformedValue);\r\n };\r\n get selectedIds() { return this._$selectedIds.getValue(); }\r\n\r\n private _$defaultItemValue = new BehaviorSubject<IVirtualListItem | null>(null);\r\n protected readonly $defaultItemValue = this._$defaultItemValue.asObservable();\r\n\r\n @Input()\r\n set defaultItemValue(v: IVirtualListItem | null) {\r\n if (this._$defaultItemValue.getValue() === v) {\r\n return;\r\n }\r\n\r\n this._$defaultItemValue.next(v);\r\n };\r\n get defaultItemValue() { return this._$defaultItemValue.getValue(); }\r\n\r\n private _$collapsedIds = new BehaviorSubject<Array<Id>>([]);\r\n protected readonly $collapsedIds = this._$collapsedIds.asObservable();\r\n\r\n private _collapsedIdsTransform = (v: Array<Id>) => {\r\n let valid = validateArray(v as any, true, true);\r\n if (valid) {\r\n if (v && Array.isArray(v)) {\r\n for (let i = 0, l = v.length; i < l; i++) {\r\n const item = v[i];\r\n valid = validateString(item as any) || validateFloat(item as any);\r\n if (!valid) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!valid) {\r\n console.error('The \"collapsedIds\" parameter must be of type `Array<Id>`.');\r\n return [];\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets the collapsed items.\r\n */\r\n @Input()\r\n set collapsedIds(v: Array<Id>) {\r\n if (this._$collapsedIds.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._collapsedIdsTransform(v);\r\n\r\n this._$collapsedIds.next(transformedValue);\r\n };\r\n get collapsedIds() { return this._$collapsedIds.getValue(); }\r\n\r\n private _$selectByClick = new BehaviorSubject<boolean>(DEFAULT_SELECT_BY_CLICK);\r\n protected readonly $selectByClick = this._$selectByClick.asObservable();\r\n\r\n private _selectByClickTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"selectByClick\" parameter must be of type `boolean`.');\r\n return DEFAULT_SELECT_BY_CLICK;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * If `false`, the element is selected using the config.api method passed to the template; \r\n * if `true`, the element is selected by clicking on it. The default value is `true`.\r\n */\r\n @Input()\r\n set selectByClick(v: boolean) {\r\n if (this._$selectByClick.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._selectByClickTransform(v);\r\n\r\n this._$selectByClick.next(transformedValue);\r\n };\r\n get selectByClick() { return this._$selectByClick.getValue(); }\r\n\r\n private _$collapseByClick = new BehaviorSubject<boolean>(DEFAULT_COLLAPSE_BY_CLICK);\r\n protected readonly $collapseByClick = this._$collapseByClick.asObservable();\r\n\r\n private _collapseByClickTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"collapseByClick\" parameter must be of type `boolean`.');\r\n return DEFAULT_COLLAPSE_BY_CLICK;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * If `false`, the element is collapsed using the config.collapse method passed to the template; \r\n * if `true`, the element is collapsed by clicking on it. The default value is `true`.\r\n */\r\n @Input()\r\n set collapseByClick(v: boolean) {\r\n if (this._$collapseByClick.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._collapseByClickTransform(v);\r\n\r\n this._$collapseByClick.next(transformedValue);\r\n };\r\n get collapseByClick() { return this._$collapseByClick.getValue(); }\r\n\r\n /**\r\n * @deprecated\r\n * Use the `stickyEnabled` property instead.\r\n */\r\n @Input()\r\n set snap(v: boolean) {\r\n throw Error(`Property snap is deprecated. Use the \\`stickyEnabled\\` property instead.`);\r\n };\r\n\r\n private _$stickyEnabled = new BehaviorSubject<boolean>(DEFAULT_STICKY_ENABLED);\r\n protected readonly $stickyEnabled = this._$stickyEnabled.asObservable();\r\n\r\n private _stickyEnabledTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"stickyEnabled\" parameter must be of type `boolean`.');\r\n return DEFAULT_STICKY_ENABLED;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines whether items with the given `sticky` in `itemConfigMap` will stick to the edges. Default value is \"true\".\r\n */\r\n @Input()\r\n set stickyEnabled(v: boolean) {\r\n if (this._$stickyEnabled.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._stickyEnabledTransform(v);\r\n\r\n this._$stickyEnabled.next(transformedValue);\r\n };\r\n get stickyEnabled() { return this._$stickyEnabled.getValue(); }\r\n\r\n private _$snapToEndTransitionInstantOffset = new BehaviorSubject<number>(DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET);\r\n protected readonly $snapToEndTransitionInstantOffset = this._$snapToEndTransitionInstantOffset.asObservable();\r\n\r\n private _snapToEndTransitionInstantOffsetTransform = (v: number) => {\r\n const valid = validateFloat(v);\r\n\r\n if (!valid) {\r\n console.error('The \"snapToEndTransitionInstantOffset\" parameter must be of type `number`.');\r\n return DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets the offset value; if the scroll area value is exceeded, the scroll animation will be disabled. Default value is \"0\".\r\n */\r\n @Input()\r\n set snapToEndTransitionInstantOffset(v: number) {\r\n if (this._$snapToEndTransitionInstantOffset.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._snapToEndTransitionInstantOffsetTransform(v);\r\n\r\n this._$snapToEndTransitionInstantOffset.next(transformedValue);\r\n };\r\n get snapToEndTransitionInstantOffset() { return this._$snapToEndTransitionInstantOffset.getValue(); }\r\n\r\n private _$scrollStartOffset = new BehaviorSubject<ArithmeticExpression>(0);\r\n protected readonly $scrollStartOffset = this._$scrollStartOffset.asObservable();\r\n\r\n private _scrollStartOffsetTransform = (v: number) => {\r\n const valid = validateFloat(v, true) || isPercentageValue(v);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollStartOffset\" parameter must be one of type `number` or `string`.');\r\n return 0;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets the scroll start offset value. Can be specified in absolute or percentage values.\r\n * Supports arithmetic expressions of addition `50% + 25` or subtraction `50% - 25`. Default value is \"0\".\r\n */\r\n @Input()\r\n set scrollStartOffset(v: ArithmeticExpression) {\r\n if (this._$scrollStartOffset.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollStartOffsetTransform(v as any);\r\n\r\n this._$scrollStartOffset.next(transformedValue);\r\n };\r\n get scrollStartOffset() { return this._$scrollStartOffset.getValue(); }\r\n\r\n private _$scrollEndOffset = new BehaviorSubject<ArithmeticExpression>(0);\r\n protected readonly $scrollEndOffset = this._$scrollEndOffset.asObservable();\r\n\r\n private _scrollEndOffsetTransform = (v: number) => {\r\n const valid = validateFloat(v, true) || isPercentageValue(v);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollEndOffset\" parameter must be one of type `number` or `string`.');\r\n return 0;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets the scroll end offset value. Can be specified in absolute or percentage values.\r\n * Supports arithmetic expressions of addition `50% + 25` or subtraction `50% - 25`. Default value is \"0\".\r\n */\r\n @Input()\r\n set scrollEndOffset(v: ArithmeticExpression) {\r\n if (this._$scrollEndOffset.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollEndOffsetTransform(v as any);\r\n\r\n this._$scrollEndOffset.next(transformedValue);\r\n };\r\n get scrollEndOffset() { return this._$scrollEndOffset.getValue(); }\r\n\r\n private _$snapScrollToStart = new BehaviorSubject<boolean>(DEFAULT_SNAP_SCROLLTO_START);\r\n protected readonly $snapScrollToStart = this._$snapScrollToStart.asObservable();\r\n\r\n private _snapScrollToStartTransform = (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"snapScrollToStart\" parameter must be of type `boolean`.');\r\n return DEFAULT_SNAP_SCROLLTO_START;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines whether the scroll will be anchored to the start of the list. Default value is \"true\".\r\n * This property takes precedence over the snapScrollToEnd property.\r\n * That is, if snapScrollToStart and snapScrollToEnd are enabled, the list will initially snap \r\n * to the beginning; if you move the scroll bar to the end, the list will snap to the end. \r\n * If snapScrollToStart is disabled and snapScrollToEnd is enabled, the list will snap to the end; \r\n * if you move the scroll bar to the beginning, the list will snap to the beginning. \r\n * If both snapScrollToStart and snapScrollToEnd are disabled, the list will never snap to the beginning or end.\r\n * In the `spreadingMode=SpreadingModes.INFINITY` mode, the `snapScrollToStart` property is automatically disabled, since the list has no beginning or end.\r\n */\r\n @Input()\r\n set snapScrollToStart(v: boolean) {\r\n if (this._$snapScrollToStart.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._snapScrollToStartTransform(v);\r\n\r\n this._$snapScrollToStart.next(transformedValue);\r\n };\r\n get snapScrollToStart() { return this._$snapScrollToStart.getValue(); }\r\n\r\n private _$snapScrollToEnd = new BehaviorSubject<boolean>(DEFAULT_SNAP_SCROLLTO_END);\r\n protected readonly $snapScrollToEnd = this._$snapScrollToEnd.asObservable();\r\n\r\n private _snapScrollToEndTransform = (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"snapScrollToEnd\" parameter must be of type `boolean`.');\r\n return DEFAULT_SNAP_SCROLLTO_END;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines whether the scroll will be anchored to the утв of the list. Default value is \"true\".\r\n * That is, if snapScrollToStart and snapScrollToEnd are enabled, the list will initially snap \r\n * to the beginning; if you move the scroll bar to the end, the list will snap to the end. \r\n * If snapScrollToStart is disabled and snapScrollToEnd is enabled, the list will snap to the end; \r\n * if you move the scroll bar to the beginning, the list will snap to the beginning. \r\n * If both snapScrollToStart and snapScrollToEnd are disabled, the list will never snap to the beginning or end.\r\n * In the `spreadingMode=SpreadingModes.INFINITY` mode, the `snapScrollToEnd` property is automatically disabled, since the list has no beginning or end.\r\n */\r\n @Input()\r\n set snapScrollToEnd(v: boolean) {\r\n if (this._$snapScrollToEnd.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._snapScrollToEndTransform(v);\r\n\r\n this._$snapScrollToEnd.next(transformedValue);\r\n };\r\n get snapScrollToEnd() { return this._$snapScrollToEnd.getValue(); }\r\n\r\n /**\r\n * @deprecated\r\n * The stopSnappingScrollToEnd property is deprecated. Use the snapScrollToEnd property.\r\n */\r\n @Input()\r\n set snapScrollToBottom(v: boolean) {\r\n throw Error('The stopSnappingScrollToEnd property is deprecated. Use the snapScrollToEnd property.');\r\n }\r\n\r\n\r\n private _$scrollbarEnabled = new BehaviorSubject<boolean>(DEFAULT_SCROLLBAR_ENABLED);\r\n protected readonly $scrollbarEnabled = this._$scrollbarEnabled.asObservable();\r\n\r\n private _scrollbarEnabledTransform = (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarEnabled\" parameter must be of type `boolean`.');\r\n return DEFAULT_SCROLLBAR_ENABLED;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines whether the scrollbar is shown or not. The default value is \"true\".\r\n */\r\n @Input()\r\n set scrollbarEnabled(v: boolean) {\r\n if (this._$scrollbarEnabled.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollbarEnabledTransform(v);\r\n\r\n this._$scrollbarEnabled.next(transformedValue);\r\n };\r\n get scrollbarEnabled() { return this._$scrollbarEnabled.getValue(); }\r\n\r\n private _$scrollbarInteractive = new BehaviorSubject<boolean>(DEFAULT_SCROLLBAR_INTERACTIVE);\r\n protected readonly $scrollbarInteractive = this._$scrollbarInteractive.asObservable();\r\n\r\n private _scrollbarInteractiveTransform = (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarInteractive\" parameter must be of type `boolean`.');\r\n return DEFAULT_SCROLLBAR_INTERACTIVE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines whether scrolling using the scrollbar will be possible. The default value is \"true\".\r\n */\r\n @Input()\r\n set scrollbarInteractive(v: boolean) {\r\n if (this._$scrollbarInteractive.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollbarInteractiveTransform(v);\r\n\r\n this._$scrollbarInteractive.next(transformedValue);\r\n };\r\n get scrollbarInteractive() { return this._$scrollbarInteractive.getValue(); }\r\n\r\n private _$overlappingScrollbar = new BehaviorSubject<boolean>(DEFAULT_OVERLAPPING_SCROLLBAR);\r\n protected readonly $overlappingScrollbar = this._$overlappingScrollbar.asObservable();\r\n\r\n private _overlappingScrollbarTransform = (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"overlappingScrollbar\" parameter must be of type `boolean`.');\r\n return DEFAULT_OVERLAPPING_SCROLLBAR;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines whether the scroll bar will overlap the list. The default value is \"false\".\r\n */\r\n @Input()\r\n set overlappingScrollbar(v: boolean) {\r\n if (this._$overlappingScrollbar.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._overlappingScrollbarTransform(v);\r\n\r\n this._$overlappingScrollbar.next(transformedValue);\r\n };\r\n get overlappingScrollbar() { return this._$overlappingScrollbar.getValue(); }\r\n\r\n private _$scrollBehavior = new BehaviorSubject<ScrollBehavior>(DEFAULT_SCROLL_BEHAVIOR);\r\n protected readonly $scrollBehavior = this._$scrollBehavior.asObservable();\r\n\r\n private _scrollBehaviorTransform = (v: ScrollBehavior) => {\r\n const valid = validateString(v, true, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollBehavior\" parameter must be of type `boolean`.');\r\n return DEFAULT_SCROLL_BEHAVIOR;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Defines the scrolling behavior for any element on the page. The default value is \"smooth\".\r\n */\r\n @Input()\r\n set scrollBehavior(v: ScrollBehavior) {\r\n if (this._$scrollBehavior.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollBehaviorTransform(v);\r\n\r\n this._$scrollBehavior.next(transformedValue);\r\n };\r\n get scrollBehavior() { return this._$scrollBehavior.getValue(); }\r\n\r\n\r\n\r\n\r\n\r\n\r\n private _$scrollingSettings = new BehaviorSubject<IScrollingSettings>(DEFAULT_SCROLLING_SETTINGS);\r\n protected readonly $scrollingSettings = this._$scrollingSettings.asObservable();\r\n\r\n private _scrollingSettingsTransform = (v: IScrollingSettings): IScrollingSettings => {\r\n let valid = validateObject(v, true, true);\r\n if (valid && !!v) {\r\n const { frictionalForce, mass, maxDistance, maxDuration, speedScale, optimization } = v;\r\n valid = validateFloat(frictionalForce, true);\r\n if (!valid) {\r\n console.error('The \"frictionalForce\" parameter must be of type `number` or `undefined`.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n valid = validateFloat(mass, true);\r\n if (!valid) {\r\n console.error('The \"mass\" parameter must be of type `number` or `undefined`.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n valid = validateFloat(maxDistance, true);\r\n if (!valid) {\r\n console.error('The \"maxDistance\" parameter must be of type `number` or `undefined`.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n valid = validateFloat(maxDuration, true);\r\n if (!valid) {\r\n console.error('The \"maxDuration\" parameter must be of type `number` or `undefined`.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n valid = validateFloat(speedScale, true);\r\n if (!valid) {\r\n console.error('The \"speedScale\" parameter must be of type `number` or `undefined`.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n valid = validateBoolean(optimization, true);\r\n if (!valid) {\r\n console.error('The \"optimization\" parameter must be of type `boolean` or `undefined`.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n }\r\n if (!valid) {\r\n console.error('The \"scrollingSettings\" parameter must be of type `object` or null.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n return {\r\n frictionalForce: v.frictionalForce !== undefined && v.frictionalForce > 0 ? v.frictionalForce : DEFAULT_SCROLLING_SETTINGS.frictionalForce,\r\n mass: v.mass !== undefined && v.mass > 0 ? v.mass : DEFAULT_SCROLLING_SETTINGS.mass,\r\n maxDistance: v.maxDistance !== undefined && v.maxDistance > 0 ? v.maxDistance : DEFAULT_SCROLLING_SETTINGS.maxDistance,\r\n maxDuration: v.maxDuration !== undefined && v.maxDuration > 0 ? v.maxDuration : DEFAULT_SCROLLING_SETTINGS.maxDuration,\r\n speedScale: v.speedScale !== undefined && v.speedScale > 0 ? v.speedScale : DEFAULT_SCROLLING_SETTINGS.speedScale,\r\n optimization: v.optimization ?? DEFAULT_SCROLLING_SETTINGS.optimization,\r\n };\r\n };\r\n\r\n /**\r\n * Scrolling settings.\r\n * - frictionalForce - Frictional force. Default value is 0.035.\r\n * - mass - Mass. Default value is 0.005.\r\n * - maxDistance - Maximum scrolling distance. Default value is 100000.\r\n * - maxDuration - Maximum animation duration. Default value is 4000.\r\n * - speedScale - Speed scale. Default value is 10.\r\n * - optimization - Enables scrolling performance optimization. Default value is `true`.\r\n */\r\n @Input()\r\n set scrollingSettings(v: IScrollingSettings) {\r\n if (this._$scrollingSettings.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollingSettingsTransform(v);\r\n\r\n this._$scrollingSettings.next(transformedValue);\r\n };\r\n get scrollingSettings() { return this._$scrollingSettings.getValue(); }\r\n\r\n private _$itemTransform = new BehaviorSubject<ItemTransform | null>(null);\r\n protected readonly $itemTransform = this._$itemTransform.asObservable();\r\n\r\n private _itemTransformTransform = (v: any) => {\r\n let valid = validateFunction(v, true, true);\r\n if (!valid) {\r\n console.error('The \"itemTransform\" parameter must be of type `ItemTransform` or `null`.');\r\n return null;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Custom transformation of element's position, rotation, scale, opacity and zIndex. The default value is `null`.\r\n */\r\n @Input()\r\n set itemTransform(v: ItemTransform | null) {\r\n if (this._$itemTransform.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._itemTransformTransform(v);\r\n\r\n this._$itemTransform.next(transformedValue);\r\n };\r\n get itemTransform() { return this._$itemTransform.getValue(); }\r\n\r\n private _$snapToItem = new BehaviorSubject<boolean>(DEFAULT_SNAP_TO_ITEM);\r\n protected readonly $snapToItem = this._$snapToItem.asObservable();\r\n\r\n private _snapToItemTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"snapToItem\" parameter must be of type `boolean`.');\r\n return DEFAULT_SNAP_TO_ITEM;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Snap to an item. The default value is `false`.\r\n */\r\n @Input()\r\n set snapToItem(v: boolean) {\r\n if (this._$snapToItem.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._snapToItemTransform(v);\r\n\r\n this._$snapToItem.next(transformedValue);\r\n };\r\n get snapToItem() { return this._$snapToItem.getValue(); }\r\n\r\n private _$snapToItemAlign = new BehaviorSubject<SnapToItemAlign>(DEFAULT_SNAP_TO_ITEM_ALIGN);\r\n protected readonly $snapToItemAlign = this._$snapToItemAlign.asObservable();\r\n\r\n private _snapToItemAlignTransform = (v: SnapToItemAlign) => {\r\n const valid = validateString(v) && (v === 'start' || v === 'center' || v === 'end');\r\n\r\n if (!valid) {\r\n console.error('The \"snapToItemAlign\" parameter must be one of `start`, `center` or `end`.');\r\n return DEFAULT_SNAP_TO_ITEM_ALIGN;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Alignment for snapToItem. Available values ​​are `start`, `center`, and `end`. The default value is `center`.\r\n */\r\n @Input()\r\n set snapToItemAlign(v: SnapToItemAlign) {\r\n if (this._$snapToItemAlign.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._snapToItemAlignTransform(v);\r\n\r\n this._$snapToItemAlign.next(transformedValue);\r\n };\r\n get snapToItemAlign() { return this._$snapToItemAlign.getValue(); }\r\n\r\n private _$snappingDistance = new BehaviorSubject<SnappingDistance>(DEFAULT_SNAPPING_DISTANCE);\r\n protected readonly $snappingDistance = this._$snappingDistance.asObservable();\r\n\r\n private _snappingDistanceTransform = (v: SnappingDistance | any) => {\r\n const valid = validateString(v) || validateFloat(v);\r\n\r\n if (!valid) {\r\n console.error('The \"snappingDistance\" parameter must be of type `number` or `string`.');\r\n return DEFAULT_SNAPPING_DISTANCE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Snapping activation distance. Can be specified as a percentage of the element size or in absolute values.\r\n * The default value is `25%`.\r\n */\r\n @Input()\r\n set snappingDistance(v: SnappingDistance) {\r\n if (this._$snappingDistance.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._snappingDistanceTransform(v);\r\n\r\n this._$snappingDistance.next(transformedValue);\r\n };\r\n get snappingDistance() { return this._$snappingDistance.getValue(); }\r\n\r\n private _$scrollingOneByOne = new BehaviorSubject<boolean>(DEFAULT_SCROLLING_ONE_BY_ONE);\r\n protected readonly $scrollingOneByOne = this._$scrollingOneByOne.asObservable();\r\n\r\n private _scrollingOneByOneTransform = (v: any) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollingOneByOne\" parameter must be of type `boolean`.');\r\n return DEFAULT_SCROLLING_ONE_BY_ONE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Specifies whether to scroll one item at a time if true and the scrollToItem property is set. The default value is `false`.\r\n */\r\n @Input()\r\n set scrollingOneByOne(v: boolean) {\r\n if (this._$scrollingOneByOne.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollingOneByOneTransform(v);\r\n\r\n this._$scrollingOneByOne.next(transformedValue);\r\n };\r\n get scrollingOneByOne() { return this._$scrollingOneByOne.getValue(); }\r\n\r\n private _$alignment = new BehaviorSubject<Alignment>(DEFAULT_ALIGNMENT);\r\n protected readonly $alignment = this._$alignment.asObservable();\r\n\r\n private _alignmentTransform = (v: Alignment) => {\r\n const valid = validateString(v) && (v === 'none' || v === 'center');\r\n\r\n if (!valid) {\r\n console.error('The \"alignment\" parameter must be one of `none` or `centert`.');\r\n return DEFAULT_ALIGNMENT;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines the alignment of the list. Two modes are available: `none` and `center`. The `center` mode aligns the list items to the center of the viewport, ideal for use with the `itemTransform` property.\r\n * The `none` mode means no alignment. The default value is `none`.\r\n */\r\n @Input()\r\n set alignment(v: Alignment) {\r\n if (this._$alignment.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._alignmentTransform(v);\r\n\r\n this._$alignment.next(transformedValue);\r\n };\r\n get alignment() { return this._$alignment.getValue(); }\r\n\r\n private _$zIndexWhenSelecting = new BehaviorSubject<string | null>(DEFAULT_ZINDEX_WHEN_SELECTING);\r\n protected readonly $zIndexWhenSelecting = this._$zIndexWhenSelecting.asObservable();\r\n\r\n private _zIndexWhenSelectingTransform = (v: string | null) => {\r\n const valid = validateString(v, true, true);\r\n\r\n if (!valid) {\r\n console.error('The \"zIndexWhenSelecting\" parameter must be of type `number` or `null`.');\r\n return DEFAULT_ZINDEX_WHEN_SELECTING;\r\n }\r\n return v ?? null;\r\n };\r\n\r\n /**\r\n * Defines the zIndex when a list item is selected. The default value is `null`.\r\n */\r\n @Input()\r\n set zIndexWhenSelecting(v: string | null) {\r\n if (this._$zIndexWhenSelecting.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._zIndexWhenSelectingTransform(v);\r\n\r\n this._$zIndexWhenSelecting.next(transformedValue);\r\n };\r\n get zIndexWhenSelecting() { return this._$zIndexWhenSelecting.getValue(); }\r\n\r\n private _$spreadingMode = new BehaviorSubject<SpreadingMode>(DEFAULT_SPREADING_MODE);\r\n protected readonly $spreadingMode = this._$spreadingMode.asObservable();\r\n\r\n private _spreadingModeTransform = (v: SpreadingMode) => {\r\n const valid = validateString(v) && (v === 'normal' || v === 'infinity');\r\n\r\n if (!valid) {\r\n console.error('The \"spreadingMode\" parameter must be one of `normal` or `infinity`.');\r\n return DEFAULT_SPREADING_MODE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * The order of list elements. Available values ​​are `standard` and `infinity`.\r\n * `normal` — list elements are ordered according to the collection sequence.\r\n * `infinity` — list elements are ordered cyclically, forming an infinite list.\r\n * When set to `infinity`, the `alignment` property is forced to the value `Alignments.CENTER`, the `scrollbarEnabled` property is forced to the `false`\r\n * The default value is `standard`.\r\n */\r\n @Input()\r\n set spreadingMode(v: SpreadingMode) {\r\n if (this._$spreadingMode.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._spreadingModeTransform(v);\r\n\r\n this._$spreadingMode.next(transformedValue);\r\n };\r\n get spreadingMode() { return this._$spreadingMode.getValue(); }\r\n\r\n private _$divides = new BehaviorSubject<number>(DEFAULT_DIVIDES);\r\n protected readonly $divides = this._$divides.asObservable();\r\n\r\n private _dividesTransform = (v: number) => {\r\n const valid = validateFloat(v);\r\n\r\n if (!valid) {\r\n console.error('The \"divides\" parameter must be of type `number`.');\r\n return DEFAULT_DIVIDES;\r\n }\r\n return v <= 0 ? DEFAULT_DIVIDES : v;\r\n };\r\n\r\n /**\r\n * Column or row numbers. The default value is `1`.\r\n */\r\n @Input()\r\n set divides(v: number) {\r\n if (this._$divides.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._dividesTransform(v);\r\n\r\n this._$divides.next(transformedValue);\r\n };\r\n get divides() { return this._$divides.getValue(); }\r\n\r\n private _$motionBlur = new BehaviorSubject<number>(DEFAULT_MOTION_BLUR);\r\n protected readonly $motionBlur = this._$motionBlur.asObservable();\r\n\r\n private _motionBlurTransform = (v: number) => {\r\n const valid = validateFloat(v);\r\n\r\n if (!valid) {\r\n console.error('The \"motionBlur\" parameter must be of type `number`.');\r\n return DEFAULT_DIVIDES;\r\n }\r\n return v <= 0 ? DEFAULT_DIVIDES : v;\r\n };\r\n\r\n /**\r\n * Motion blur effect. The default value is `0.15`.\r\n */\r\n @Input()\r\n set motionBlur(v: number) {\r\n if (this._$motionBlur.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._motionBlurTransform(v);\r\n\r\n this._$motionBlur.next(transformedValue);\r\n };\r\n get motionBlur() { return this._$motionBlur.getValue(); }\r\n\r\n private _$maxMotionBlur = new BehaviorSubject<number>(DEFAULT_MAX_MOTION_BLUR);\r\n protected readonly $maxMotionBlur = this._$maxMotionBlur.asObservable();\r\n\r\n private _maxMotionBlurTransform = (v: number) => {\r\n const valid = validateFloat(v);\r\n\r\n if (!valid) {\r\n console.error('The \"maxMotionBlur\" parameter must be of type `number`.');\r\n return DEFAULT_MAX_MOTION_BLUR;\r\n }\r\n return v <= 0 ? DEFAULT_MAX_MOTION_BLUR : v;\r\n };\r\n\r\n /**\r\n * Maximum motion blur effect. The default value is `0.5`.\r\n */\r\n @Input()\r\n set maxMotionBlur(v: number) {\r\n if (this._$maxMotionBlur.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._maxMotionBlurTransform(v);\r\n\r\n this._$maxMotionBlur.next(transformedValue);\r\n };\r\n get maxMotionBlur() { return this._$maxMotionBlur.getValue(); }\r\n\r\n private _$motionBlurEnabled = new BehaviorSubject<boolean>(DEFAULT_MOTION_BLUR_ENABLED);\r\n protected readonly $motionBlurEnabled = this._$motionBlurEnabled.asObservable();\r\n\r\n private _motionBlurEnabledTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"motionBlurEnabled\" parameter must be of type `boolean`.');\r\n return DEFAULT_MOTION_BLUR_ENABLED;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines whether to apply motion blur or not. The default value is `false`.\r\n */\r\n @Input()\r\n set motionBlurEnabled(v: boolean) {\r\n if (this._$motionBlurEnabled.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._motionBlurEnabledTransform(v);\r\n\r\n this._$motionBlurEnabled.next(transformedValue);\r\n };\r\n get motionBlurEnabled() { return this._$motionBlurEnabled.getValue(); }\r\n\r\n\r\n\r\n private _$animationParams = new BehaviorSubject<IAnimationParams>(DEFAULT_ANIMATION_PARAMS);\r\n protected readonly $animationParams = this._$animationParams.asObservable();\r\n\r\n private _animationParamsTransform = (v: IAnimationParams) => {\r\n const valid = validateObject(v, true, true);\r\n\r\n if (!validateFloat(v.scrollToItem)) {\r\n console.error('The \"scrollToItem\" parameter must be of type `number`.');\r\n return DEFAULT_ANIMATION_PARAMS;\r\n }\r\n if (!validateFloat(v.snapToItem)) {\r\n console.error('The \"snapToItem\" parameter must be of type `number`.');\r\n return DEFAULT_ANIMATION_PARAMS;\r\n }\r\n if (!validateFloat(v.navigateByKeyboard)) {\r\n console.error('The \"navigateByKeyboard\" parameter must be of type `number`.');\r\n return DEFAULT_ANIMATION_PARAMS;\r\n }\r\n if (!validateFloat(v.navigateToItem)) {\r\n console.error('The \"navigateToItem\" parameter must be of type `number`.');\r\n return DEFAULT_ANIMATION_PARAMS;\r\n }\r\n if (!valid) {\r\n console.error('The \"animationParams\" parameter must be of type `object`.');\r\n return DEFAULT_ANIMATION_PARAMS;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Animation parameters. The default value is \"{ scrollToItem: 50, snapToItem: 150, navigateToItem: 150, navigateByKeyboard: 50 }\".\r\n */\r\n @Input()\r\n set animationParams(v: IAnimationParams) {\r\n if (this._$animationParams.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._animationParamsTransform(v);\r\n\r\n this._$animationParams.next(transformedValue);\r\n };\r\n get animationParams() { return this._$animationParams.getValue(); }\r\n\r\n private _$overscrollEnabled = new BehaviorSubject<boolean>(DEFAULT_OVERSCROLL_ENABLED);\r\n protected readonly $overscrollEnabled = this._$overscrollEnabled.asObservable();\r\n\r\n private _overscrollEnabledTransform = (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"overscrollEnabled\" parameter must be of type `boolean`.');\r\n return DEFAULT_OVERSCROLL_ENABLED;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines whether the overscroll (re-scroll) feature will work. The default value is \"true\".\r\n */\r\n @Input()\r\n set overscrollEnabled(v: boolean) {\r\n if (this._$overscrollEnabled.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._overscrollEnabledTransform(v);\r\n\r\n this._$overscrollEnabled.next(transformedValue);\r\n };\r\n get overscrollEnabled() { return this._$overscrollEnabled.getValue(); }\r\n\r\n private _$enabledBufferOptimization = new BehaviorSubject<boolean>(DEFAULT_ENABLED_BUFFER_OPTIMIZATION);\r\n protected readonly $enabledBufferOptimization = this._$enabledBufferOptimization.asObservable();\r\n\r\n private _enabledBufferOptimizationTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"enabledBufferOptimization\" parameter must be of type `boolean`.');\r\n return DEFAULT_ENABLED_BUFFER_OPTIMIZATION;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Experimental!\r\n * Enables buffer optimization.\r\n * Can only be used if items in the collection are not added or updated. Otherwise, artifacts in the form of twitching of the scroll area are possible.\r\n * Works only if the property dynamic = true\r\n */\r\n @Input()\r\n set enabledBufferOptimization(v: boolean) {\r\n if (this._$enabledBufferOptimization.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._enabledBufferOptimizationTransform(v);\r\n\r\n this._$enabledBufferOptimization.next(transformedValue);\r\n };\r\n get enabledBufferOptimization() { return this._$enabledBufferOptimization.getValue(); }\r\n\r\n private _$itemRenderer = new BehaviorSubject<TemplateRef<any> | undefined>(undefined);\r\n protected readonly $itemRenderer = this._$itemRenderer.asObservable();\r\n\r\n private _itemRendererTransform = (v: TemplateRef<any>) => {\r\n let valid = validateObject(v);\r\n if (v && !(typeof v.elementRef === 'object' && typeof v.createEmbeddedView === 'function')) {\r\n valid = false;\r\n }\r\n\r\n if (!valid) {\r\n throw Error('The \"itemRenderer\" parameter must be of type `TemplateRef`.');\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Rendering element template.\r\n */\r\n @Input()\r\n set itemRenderer(v: TemplateRef<any>) {\r\n if (this._$itemRenderer.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._itemRendererTransform(v);\r\n\r\n this._$itemRenderer.next(transformedValue);\r\n };\r\n get itemRenderer() { return this._$itemRenderer.getValue() as TemplateRef<any>; }\r\n\r\n private _$itemConfigMap = new BehaviorSubject<IVirtualListItemConfigMap>({});\r\n protected readonly $itemConfigMap = this._$itemConfigMap.asObservable();\r\n\r\n private _itemConfigMapTransform = (v: IVirtualListItemConfigMap) => {\r\n let valid = validateObject(v);\r\n if (valid) {\r\n if (v) {\r\n for (let id in v) {\r\n const item = v[id];\r\n if (!item ||\r\n !validateBoolean(item.collapsable, true) ||\r\n !validateBoolean(item.selectable, true) ||\r\n !(item.sticky === undefined || item.sticky === 0 || item.sticky === 1 || item.sticky === 2)\r\n ) {\r\n valid = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n if (!valid) {\r\n console.error('The \"itemConfigMap\" parameter must be of type `IVirtualListItemConfigMap`.');\r\n return {};\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets `sticky` position, `fullSize`, `collapsable` and `selectable` for the list item element. If `sticky` position is greater than `0`, then `sticky` position is applied. \r\n * If the `sticky` value is greater than `0`, then the `sticky` position mode is enabled for the element. `1` - position start, `2` - position end.\r\n * Default value is `0`.\r\n * `selectable` determines whether an element can be selected or not. Default value is `true`.\r\n * `collapsable` determines whether an element with a `sticky` property greater than zero can collapse and\r\n * collapse elements in front that do not have a `sticky` property.\r\n * `fullSize` determines the size of an element when rendering lists with cell divisions. If sticky is 1 or 2, fullSize automatically becomes true. The default value is false.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/models/item-config-map.model.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n @Input()\r\n set itemConfigMap(v: IVirtualListItemConfigMap) {\r\n if (this._$itemConfigMap.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._itemConfigMapTransform(v);\r\n\r\n this._$itemConfigMap.next(transformedValue);\r\n };\r\n get itemConfigMap() { return this._$itemConfigMap.getValue(); }\r\n\r\n private _$itemSize = new BehaviorSubject<number>(DEFAULT_ITEM_SIZE);\r\n protected readonly $itemSize = this._$itemSize.asObservable();\r\n\r\n private _itemSizeTransform = (v: any) => {\r\n const valid = validateFloat(v) || v === VIEWPORT;\r\n if (!valid) {\r\n console.error('The \"itemSize\" parameter must be one of `number`, `viewport` or `undefined`.');\r\n return DEFAULT_ITEM_SIZE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * If direction = 'vertical', then the height of a typical element. If direction = 'horizontal', then the width of a typical element.\r\n * If the `dynamicSize` property is true, the items in the list can have different sizes, and you must specify the `itemSize` property \r\n * to adjust the sizes of the items in the unallocated area.\r\n * If the value is 'viewport', the sizes of elements are automatically resized to fit the viewport size.\r\n */\r\n @Input()\r\n set itemSize(v: number | 'viewport') {\r\n if (this._$itemSize.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._itemSizeTransform(v);\r\n\r\n this._$itemSize.next(transformedValue);\r\n };\r\n get itemSize() { return this._$itemSize.getValue(); }\r\n\r\n private _$minItemSize = new BehaviorSubject<number>(DEFAULT_ITEM_SIZE);\r\n protected readonly $minItemSize = this._$minItemSize.asObservable();\r\n\r\n private _minItemSizeTransform = (v: any) => {\r\n const valid = validateFloat(v) || v === VIEWPORT;\r\n if (!valid) {\r\n console.error('The \"minItemSize\" parameter must be one of `number`, `viewport` or `undefined`.');\r\n return DEFAULT_ITEM_SIZE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * If the `dynamicSize` property is enabled, the minimum size of the element is set.\r\n * If the value is 'viewport', the sizes of elements are automatically resized to fit the viewport size.\r\n */\r\n @Input()\r\n set minItemSize(v: number | 'viewport') {\r\n if (this._$minItemSize.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._minItemSizeTransform(v);\r\n\r\n this._$minItemSize.next(transformedValue);\r\n };\r\n get minItemSize() { return this._$minItemSize.getValue(); }\r\n\r\n private _$maxItemSize = new BehaviorSubject<number>(DEFAULT_MAX_ITEM_SIZE);\r\n protected readonly $maxItemSize = this._$maxItemSize.asObservable();\r\n\r\n private _maxItemSizeTransform = (v: any) => {\r\n const valid = validateFloat(v) || v === VIEWPORT;\r\n if (!valid) {\r\n console.error('The \"maxItemSize\" parameter must be one of `number`, `viewport` or `undefined`.');\r\n return DEFAULT_ITEM_SIZE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * If the `dynamicSize` property is enabled, the maximum size of the element is set.\r\n * If the value is 'viewport', the sizes of elements are automatically resized to fit the viewport size.\r\n */\r\n @Input()\r\n set maxItemSize(v: number | 'viewport') {\r\n if (this._$maxItemSize.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._maxItemSizeTransform(v);\r\n\r\n this._$maxItemSize.next(transformedValue);\r\n };\r\n get maxItemSize() { return this._$maxItemSize.getValue(); }\r\n\r\n private _$dynamicSize = new BehaviorSubject<boolean>(DEFAULT_DYNAMIC_SIZE);\r\n protected readonly $dynamicSize = this._$dynamicSize.asObservable();\r\n\r\n private _dynamicSizeTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n if (!valid) {\r\n console.error('The \"dynamicSize\" parameter must be of type `boolean`.');\r\n return DEFAULT_DYNAMIC_SIZE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * If true, items in the list may have different sizes, and the itemSize property must be specified to adjust\r\n * the sizes of items in the unallocated area.\r\n * If false then the items in the list have a fixed size specified by the itemSize property. The default value is true.\r\n */\r\n @Input()\r\n set dynamicSize(v: boolean) {\r\n if (this._$dynamicSize.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._dynamicSizeTransform(v);\r\n\r\n this._$dynamicSize.next(transformedValue);\r\n };\r\n get dynamicSize() { return this._$dynamicSize.getValue(); }\r\n\r\n private _$direction = new BehaviorSubject<Direction>(DEFAULT_DIRECTION);\r\n protected readonly $direction = this._$direction.asObservable();\r\n\r\n private _directionTransform = (v: Direction) => {\r\n const valid = validateString(v) && (v === 'horizontal' || v === 'vertical');\r\n if (!valid) {\r\n console.error('The \"direction\" parameter must be one of `horizontal` or `vertical`.');\r\n return DEFAULT_DIRECTION;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines the direction in which elements are placed. Default value is \"vertical\".\r\n */\r\n @Input()\r\n set direction(v: Direction) {\r\n if (this._$direction.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._directionTransform(v);\r\n\r\n this._$direction.next(transformedValue);\r\n };\r\n get direction() { return this._$direction.getValue(); }\r\n\r\n private _$collectionMode = new BehaviorSubject<CollectionMode>(DEFAULT_COLLECTION_MODE);\r\n protected readonly $collectionMode = this._$collectionMode.asObservable();\r\n\r\n private _collectionModeTransform = (v: CollectionMode) => {\r\n const valid = validateString(v) && (v === 'normal' || v === 'lazy');\r\n if (!valid) {\r\n console.error('The \"direction\" parameter must be one of `normal` or `lazy`.');\r\n return DEFAULT_COLLECTION_MODE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines the action modes for collection elements. Default value is \"normal\".\r\n */\r\n @Input()\r\n set collectionMode(v: CollectionMode) {\r\n if (this._$collectionMode.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._collectionModeTransform(v);\r\n\r\n this._$collectionMode.next(transformedValue);\r\n };\r\n get collectionMode() { return this._$collectionMode.getValue(); }\r\n\r\n private _$bufferSize = new BehaviorSubject<number>(DEFAULT_BUFFER_SIZE);\r\n protected readonly $bufferSize = this._$bufferSize.asObservable();\r\n\r\n private _bufferSizeTransform = (v: number) => {\r\n const valid = validateInt(v);\r\n if (!valid) {\r\n console.error('The \"bufferSize\" parameter must be of type `number`.');\r\n return DEFAULT_BUFFER_SIZE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Number of elements outside the scope of visibility. Default value is 2.\r\n */\r\n @Input()\r\n set bufferSize(v: number) {\r\n if (this._$bufferSize.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._bufferSizeTransform(v);\r\n\r\n this._$bufferSize.next(transformedValue);\r\n };\r\n get bufferSize() { return this._$bufferSize.getValue(); }\r\n\r\n private _$maxBufferSize = new BehaviorSubject<number>(DEFAULT_MAX_BUFFER_SIZE);\r\n protected readonly $maxBufferSize = this._$maxBufferSize.asObservable();\r\n\r\n private _maxBufferSizeTransform = (v: number) => {\r\n let val = v;\r\n const valid = validateInt(v, true);\r\n if (!valid) {\r\n console.error('The \"maxBufferSize\" parameter must be of type `number`.');\r\n val = DEFAULT_MAX_BUFFER_SIZE;\r\n }\r\n\r\n const bufferSize = this.bufferSize;\r\n if (val === undefined || val <= bufferSize) {\r\n return bufferSize;\r\n }\r\n return val;\r\n };\r\n\r\n /**\r\n * Maximum number of elements outside the scope of visibility. Default value is 100.\r\n * If maxBufferSize is set to be greater than bufferSize, then adaptive buffer mode is enabled.\r\n * The greater the scroll size, the more elements are allocated for rendering.\r\n */\r\n @Input()\r\n set maxBufferSize(v: number) {\r\n const val = this._maxBufferSizeTransform(v);\r\n if (this._$maxBufferSize.getValue() === val) {\r\n return;\r\n }\r\n\r\n this._$maxBufferSize.next(val);\r\n };\r\n get maxBufferSize() { return this._$maxBufferSize.getValue(); }\r\n\r\n private _$snappingMethod = new BehaviorSubject<SnappingMethod>(DEFAULT_SNAPPING_METHOD);\r\n protected readonly $snappingMethod = this._$snappingMethod.asObservable();\r\n\r\n private _snappingMethodTransform = (v: SnappingMethod) => {\r\n const valid = validateString(v) && (v === SnappingMethods.ADVANCED || v === SnappingMethods.STANDART);\r\n if (!valid) {\r\n console.error(`The \"snappingMethod\" parameter must have the value '${SnappingMethods.ADVANCED}' or '${SnappingMethods.STANDART}'.`);\r\n return DEFAULT_SNAPPING_METHOD;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Snapping method. Default value is 'standart'.\r\n * 'standart' - Classic group visualization.\r\n * 'advanced' - A mask is applied to the viewport area so that the background is displayed underneath the attached group.\r\n */\r\n @Input()\r\n set snappingMethod(v: SnappingMethod) {\r\n if (this._$snappingMethod.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._snappingMethodTransform(v);\r\n\r\n this._$snappingMethod.next(transformedValue);\r\n };\r\n get snappingMethod() { return this._$snappingMethod.getValue(); }\r\n\r\n private _$collapsingMode = new BehaviorSubject<CollapsingMode>(DEFAULT_COLLAPSING_MODES);\r\n protected readonly $collapsingMode = this._$collapsingMode.asObservable();\r\n\r\n private _collapsingModeTransform = (v: CollapsingMode) => {\r\n const valid = validateString(v) && (v === CollapsingModes.NONE || v === CollapsingModes.MULTI_COLLAPSE || v === CollapsingModes.ACCORDION);\r\n if (!valid) {\r\n console.error(`The \"collapsingMode\" parameter must have the value '${SnappingMethods.ADVANCED}' or '${SnappingMethods.STANDART}'.`);\r\n return DEFAULT_COLLAPSING_MODES;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Mode for collapsing list items. \r\n * `none` - List items are not selectable.\r\n * `multi-collapse` - List items are collapsed one by one.\r\n * 'accordion' - Accordion collapsible list items.\r\n * Default value is `multi-collapse\r\n */\r\n @Input()\r\n set collapsingMode(v: CollapsingMode) {\r\n if (this._$collapsingMode.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._collapsingModeTransform(v);\r\n\r\n this._$collapsingMode.next(transformedValue);\r\n };\r\n get collapsingMode() { return this._$collapsingMode.getValue(); }\r\n\r\n /**\r\n * @deprecated\r\n * The \"methodForSelecting\" property is deprecated. Use the \"selectMode\" property.\r\n */\r\n @Input()\r\n set methodForSelecting(v: any) {\r\n throw new Error('The \"methodForSelecting\" property is deprecated. Use the \"selectMode\" property instead.');\r\n };\r\n\r\n private _$selectingMode = new BehaviorSubject<SelectingMode>(DEFAULT_SELECTING_MODES);\r\n protected readonly $selectingMode = this._$selectingMode.asObservable();\r\n\r\n private _selectingModeTransform = (v: SelectingMode) => {\r\n const valid = validateString(v) && (v === 'none' || v === 'select' || v === 'multi-select');\r\n if (!valid) {\r\n console.error('The \"selectingMode\" parameter must be one of `none`, `select` or `multi-select`.');\r\n return DEFAULT_SELECTING_MODES;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Method for selecting list items. Default value is 'none'.\r\n * 'select' - List items are selected one by one.\r\n * 'multi-select' - Multiple selection of list items.\r\n * 'none' - List items are not selectable.\r\n */\r\n @Input()\r\n set selectingMode(v: SelectingMode) {\r\n if (this._$selectingMode.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._selectingModeTransform(v);\r\n\r\n this._$selectingMode.next(transformedValue);\r\n };\r\n get selectingMode() { return this._$selectingMode.getValue(); }\r\n\r\n private _$trackBy = new BehaviorSubject<string>(TRACK_BY_PROPERTY_NAME);\r\n protected readonly $trackBy = this._$trackBy.asObservable();\r\n\r\n private _trackByTransform = (v: string) => {\r\n const valid = validateString(v);\r\n if (!valid) {\r\n console.error('The \"trackBy\" parameter must be of type `string`.');\r\n return TRACK_BY_PROPERTY_NAME;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * The name of the property by which tracking is performed\r\n */\r\n @Input()\r\n set trackBy(v: string) {\r\n if (this._$trackBy.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._trackByTransform(v);\r\n\r\n this._$trackBy.next(transformedValue);\r\n };\r\n get trackBy() { return this._$trackBy.getValue(); }\r\n\r\n private _$screenReaderMessage = new BehaviorSubject<string>(DEFAULT_SCREEN_READER_MESSAGE);\r\n protected readonly $screenReaderMessage = this._$screenReaderMessage.asObservable();\r\n\r\n private _screenReaderMessageTransform = (v: string) => {\r\n const valid = validateString(v);\r\n if (!valid) {\r\n console.error('The \"screenReaderMessage\" parameter must be of type `string`.');\r\n return DEFAULT_SCREEN_READER_MESSAGE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Message for screen reader.\r\n * The message format is: \"some text $1 some text $2\",\r\n * where $1 is the number of the first element of the screen collection,\r\n * $2 is the number of the last element of the screen collection.\r\n */\r\n @Input()\r\n protected set screenReaderMessage(v: string) {\r\n if (this._$screenReaderMessage.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._screenReaderMessageTransform(v);\r\n\r\n this._$screenReaderMessage.next(transformedValue);\r\n };\r\n protected get screenReaderMessage() { return this._$screenReaderMessage.getValue(); }\r\n\r\n private _$screenReaderFormattedMessage = new BehaviorSubject<string>(DEFAULT_SCREEN_READER_MESSAGE);\r\n protected $screenReaderFormattedMessage = this._$screenReaderFormattedMessage.asObservable();\r\n\r\n private _$langTextDir = new BehaviorSubject<TextDirection>(DEFAULT_LANG_TEXT_DIR);\r\n protected readonly $langTextDir = this._$langTextDir.asObservable();\r\n\r\n private _langTextDirTransform = (v: TextDirection) => {\r\n const valid = validateString(v);\r\n if (!valid) {\r\n console.error('The \"langTextDir\" parameter must be of type `string`.');\r\n return DEFAULT_LANG_TEXT_DIR;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * A string indicating the direction of text for the locale.\r\n * Can be either \"ltr\" (left-to-right) or \"rtl\" (right-to-left).\r\n */\r\n @Input()\r\n set langTextDir(v: TextDirection) {\r\n if (this._$langTextDir.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._langTextDirTransform(v);\r\n\r\n this._$langTextDir.next(transformedValue);\r\n };\r\n get langTextDir() { return this._$langTextDir.getValue(); }\r\n\r\n private _isSingleSelection = this.getIsSingleSelection();\r\n\r\n private _isMultiSelection = this.getIsMultiSelection();\r\n\r\n private _isMultipleCollapse = this.getIsMultipleCollapse();\r\n\r\n private _isAccordionCollapse = this.getIsAccordionCollapse();\r\n\r\n private _isSnappingMethodAdvanced: boolean = this.getIsSnappingMethodAdvanced();\r\n\r\n protected _$isInfinity = new BehaviorSubject<boolean>(false);\r\n protected $isInfinity = this._$isInfinity.asObservable();\r\n protected get isInfinity() {\r\n return this._$isInfinity.getValue();\r\n }\r\n\r\n private _isVertical = this.getIsVertical();\r\n protected get isVertical() {\r\n return this._isVertical;\r\n }\r\n\r\n private _$isVertical = new BehaviorSubject<boolean>(this.isVertical);\r\n protected $isVertical = this._$isVertical.asObservable();\r\n\r\n private _$focusedElement = new BehaviorSubject<Id | null>(null);\r\n protected $focusedElement = this._$focusedElement.asObservable();\r\n\r\n private _$classes = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n protected $classes = this._$classes.asObservable();\r\n\r\n private _$prerenderEnabled = new BehaviorSubject<boolean>(false);\r\n protected $prerenderEnabled = this._$prerenderEnabled.asObservable();\r\n\r\n private _$actualItems = new BehaviorSubject<IVirtualListCollection>([]);\r\n\r\n private _$collapsedItemIds = new BehaviorSubject<Array<Id>>([]);\r\n\r\n private _displayComponents: Array<ComponentRef<BaseVirtualListItemComponent>> = [];\r\n\r\n private _snappedDisplayComponents: Array<ComponentRef<BaseVirtualListItemComponent>> = [];\r\n\r\n private _$bounds = new BehaviorSubject<ISize | null>(null);\r\n protected $bounds: Observable<ISize | null> = this._$bounds.asObservable();\r\n\r\n private _$actualScrollbarEnabled = new BehaviorSubject<boolean>(this.scrollbarEnabled);\r\n protected $actualScrollbarEnabled: Observable<boolean> = this._$actualScrollbarEnabled.asObservable();\r\n\r\n private _$actualAlignment = new BehaviorSubject<Alignment>(this.alignment);\r\n protected $actualAlignment: Observable<Alignment> = this._$actualAlignment.asObservable();\r\n protected get actualAlignment() { return this._$actualAlignment.getValue(); }\r\n\r\n private _$actualItemSize = new BehaviorSubject<number>(0);\r\n protected $actualItemSize: Observable<number> = this._$actualItemSize.asObservable();\r\n protected get actualItemSize() { return this._$actualItemSize.getValue(); }\r\n\r\n private _$actualMinItemSize = new BehaviorSubject<number>(0);\r\n protected $actualMinItemSize: Observable<number> = this._$actualMinItemSize.asObservable();\r\n protected get actualMinItemSize() { return this._$actualMinItemSize.getValue(); }\r\n\r\n private _$actualMaxItemSize = new BehaviorSubject<number>(0);\r\n protected $actualMaxItemSize: Observable<number> = this._$actualMaxItemSize.asObservable();\r\n protected get actualMaxItemSize() { return this._$actualMaxItemSize.getValue(); }\r\n\r\n private _$totalSize = new BehaviorSubject<number>(0);\r\n\r\n private _$listBounds = new BehaviorSubject<ISize | null>(null);\r\n\r\n private _$scrollSize = new BehaviorSubject<number>(0);\r\n protected readonly $scrollSize = this._$scrollSize.asObservable();\r\n\r\n private _$isScrollStart = new BehaviorSubject<boolean>(true);\r\n\r\n private _$isScrollEnd = new BehaviorSubject<boolean>(false);\r\n\r\n private _$precalculatedScrollStartOffset = new BehaviorSubject<number>(0);\r\n\r\n private _$precalculatedScrollEndOffset = new BehaviorSubject<number>(0);\r\n\r\n private _$actualScrollStartOffset = new BehaviorSubject<number>(0);\r\n protected $actualScrollStartOffset = this._$actualScrollStartOffset.asObservable();\r\n\r\n private _$actualScrollEndOffset = new BehaviorSubject<number>(0);\r\n protected $actualScrollEndOffset = this._$actualScrollEndOffset.asObservable();\r\n\r\n private _$startOffset = new BehaviorSubject<number>(0);\r\n protected $startOffset = this._$startOffset.asObservable();\r\n\r\n private _$endOffset = new BehaviorSubject<number>(0);\r\n protected $endOffset = this._$endOffset.asObservable();\r\n\r\n private _$actualSnapScrollToStart = new BehaviorSubject<boolean>(false);\r\n\r\n private _$actualSnapScrollToEnd = new BehaviorSubject<boolean>(false);\r\n\r\n private _$alignmentScrollStartOffset = new BehaviorSubject<number>(0);\r\n protected $alignmentScrollStartOffset = this._$alignmentScrollStartOffset.asObservable();\r\n\r\n private _$alignmentScrollEndOffset = new BehaviorSubject<number>(0);\r\n protected $alignmentScrollEndOffset = this._$alignmentScrollEndOffset.asObservable();\r\n\r\n private _resizeSnappedComponentHandler = () => {\r\n const list = this._$list.getValue(), scroller = this._$scroller.getValue(), bounds = this._$bounds.getValue(), snappedComponents = this._snappedDisplayComponents;\r\n if (!!list && !!scroller && snappedComponents.length > 0) {\r\n const isVertical = this._isVertical, listBounds = list.nativeElement.getBoundingClientRect();\r\n\r\n for (const comp of snappedComponents) {\r\n if (!!comp) {\r\n comp.instance.regularLength = `${isVertical ? listBounds.width : listBounds.height}${PX}`;\r\n }\r\n }\r\n\r\n const snappingMethod = this.snappingMethod;\r\n if (snappingMethod === SnappingMethods.ADVANCED) {\r\n const snappedComponent = snappedComponents?.[0]?.instance;\r\n if (!!snappedComponent) {\r\n const { width, height } = bounds ?? { width: 0, height: 0 }, langTextDir = this.langTextDir;\r\n\r\n snappedComponent.element.style.clipPath = `path(\"M 0 0 L 0 ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth} ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth} 0 Z\")`;\r\n\r\n const { width: sWidth, height: sHeight } = snappedComponent.getBounds() ?? { width: 0, height: 0 },\r\n scrollerElement = scroller.nativeElement, delta = snappedComponent.item?.measures.delta ?? 0,\r\n scrollBarSize = this.scrollbarThickness;\r\n\r\n let right: number, top: number, bottom: number;\r\n if (isVertical) {\r\n right = width - scrollBarSize + 2;\r\n top = sHeight;\r\n bottom = height;\r\n if (langTextDir === TextDirections.RTL) {\r\n scrollerElement.style.clipPath = `path(\"M 0 0 L 0 ${height} L ${width} ${height} L ${width} ${top + delta} L ${scrollBarSize} ${top + delta} L ${scrollBarSize} 0 Z\")`;\r\n } else {\r\n scrollerElement.style.clipPath = `path(\"M 0 ${top + delta} L 0 ${height} L ${width} ${height} L ${width} 0 L ${right} 0 L ${right} ${top + delta} Z\")`;\r\n }\r\n } else {\r\n right = width;\r\n top = 0;\r\n bottom = height - scrollBarSize;\r\n scrollerElement.style.clipPath = `path(\"M ${width} 0 L ${width} ${bottom} L 0 ${bottom} L 0 0 L ${width} 0 Z\")`;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n private _resizeSnappedObserver: ResizeObserver | null = null;\r\n\r\n private focusItem = (element: HTMLElement, position: number, align: FocusAlignment = FocusAlignments.CENTER,\r\n behavior: ScrollBehavior = BEHAVIOR_AUTO) => {\r\n if (!this._readyForShow) {\r\n return;\r\n }\r\n const scroller = this._scrollerComponent;\r\n if (!!scroller) {\r\n const { width, height } = this._$bounds.getValue()!, { width: elementWidth, height: elementHeight } = element.getBoundingClientRect(),\r\n isVertical = this._isVertical,\r\n viewportSize = isVertical ? height : width,\r\n elementSize = isVertical ? elementHeight : elementWidth;\r\n let pos: number = Number.NaN;\r\n switch (align) {\r\n case FocusAlignments.START: {\r\n pos = position + scroller.startLayoutOffset;\r\n break;\r\n }\r\n case FocusAlignments.CENTER: {\r\n pos = position - (viewportSize - elementSize) * .5 + scroller.startLayoutOffset;\r\n break;\r\n }\r\n case FocusAlignments.END: {\r\n pos = position - (viewportSize - elementSize) + scroller.startLayoutOffset;\r\n break;\r\n }\r\n case FocusAlignments.NONE:\r\n default: {\r\n break;\r\n }\r\n }\r\n if (!Number.isNaN(pos)) {\r\n this._trackBox.preventScrollSnapping(true);\r\n const params: IScrollToParams = {\r\n [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: pos, behavior, snap: false, normalize: true,\r\n fireUpdate: false, blending: false, userAction: false,\r\n duration: this.snapToItem ? Math.max(this.animationParams.scrollToItem, this.animationParams.navigateToItem) : this.animationParams.navigateToItem,\r\n };\r\n scroller.scrollTo(params);\r\n }\r\n }\r\n }\r\n\r\n private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n /**\r\n * Base class of the element component\r\n */\r\n private _itemComponentClass: Component$1<BaseVirtualListItemComponent> = NgVirtualListItemComponent;\r\n protected get itemComponentClass() { return this._itemComponentClass; }\r\n\r\n /**\r\n * Base class trackBox\r\n */\r\n private _trackBoxClass: Component$1<TrackBox> = TrackBox;\r\n\r\n /**\r\n * Dictionary of element sizes by their id\r\n */\r\n private _trackBox: TrackBox = new this._trackBoxClass(this.trackBy);\r\n\r\n private _$update = new Subject<string>();\r\n protected readonly $update = this._$update.asObservable();\r\n\r\n private _$scrollTo = new Subject<IScrollParams>();\r\n protected $scrollTo = this._$scrollTo.asObservable();\r\n\r\n private _$scrollToExecutor = new Subject<IScrollParams>();\r\n protected readonly $scrollToExecutor = this._$scrollToExecutor.asObservable();\r\n\r\n private _$scrollingTo = new BehaviorSubject<boolean>(false);\r\n\r\n private _$scroll = new Subject<IScrollEvent>();\r\n readonly $scroll = this._$scroll.asObservable();\r\n\r\n private _$tick = new Subject<void>();\r\n readonly $tick = this._$tick.asObservable();\r\n\r\n private _$fireUpdate = new Subject<boolean>();\r\n protected readonly $fireUpdate = this._$fireUpdate.asObservable();\r\n\r\n private _$fireUpdateNextFrame = new Subject<boolean>();\r\n protected readonly $fireUpdateNextFrame = this._$fireUpdateNextFrame.asObservable();\r\n\r\n private _$preventScrollSnapping = new BehaviorSubject<boolean>(false);\r\n protected readonly $preventScrollSnapping = this._$preventScrollSnapping.asObservable();\r\n\r\n private _updateId: number | undefined;\r\n\r\n private _readyForShow = false;\r\n\r\n private _cached = false;\r\n\r\n private _isLoading = false;\r\n\r\n protected get cachable() {\r\n return this._prerender?.active ?? false;\r\n }\r\n\r\n protected get prerenderable() {\r\n return this.dynamicSize && (this._trackBox?.isSnappedToEnd ?? false);\r\n }\r\n\r\n private _$viewInit = new BehaviorSubject<boolean>(false);\r\n private readonly $viewInit = this._$viewInit.asObservable();\r\n\r\n private _$destroy = new Subject<void>();\r\n private readonly $destroy = this._$destroy.asObservable();\r\n\r\n constructor() {\r\n super();\r\n NgVirtualListComponent.__nextId = NgVirtualListComponent.__nextId + 1 === Number.MAX_SAFE_INTEGER\r\n ? 0 : NgVirtualListComponent.__nextId + 1;\r\n this._id = NgVirtualListComponent.__nextId;\r\n\r\n this._service.initialize(this._id, this._trackBox);\r\n\r\n const $dynamicSize = this.$dynamicSize,\r\n $snapScrollToEnd = this.$snapScrollToEnd;\r\n combineLatest([$dynamicSize, $snapScrollToEnd]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([dynamicSize, snapScrollToEnd]) => {\r\n this._$prerenderEnabled.next(dynamicSize && snapScrollToEnd);\r\n }),\r\n ).subscribe();\r\n\r\n this.$animationParams.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.animationParams = v;\r\n }),\r\n ).subscribe();\r\n\r\n this.$spreadingMode.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._$isInfinity.next(isSpreadingMode(v, SpreadingModes.INFINITY));\r\n }),\r\n ).subscribe();\r\n\r\n this.$actualScrollStartOffset.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n tap(v => {\r\n this._$startOffset.next(v);\r\n }),\r\n ).subscribe();\r\n\r\n this.$actualScrollEndOffset.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n tap(v => {\r\n this._$endOffset.next(v);\r\n }),\r\n ).subscribe();\r\n\r\n const $isInfinity = this.$isInfinity;\r\n $isInfinity.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._trackBox.isInfinity = this._service.isInfinity = v;\r\n }),\r\n ).subscribe();\r\n\r\n const $zIndexWhenSelecting = this.$zIndexWhenSelecting;\r\n $zIndexWhenSelecting.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.zIndexWhenSelecting = v;\r\n }),\r\n ).subscribe();\r\n\r\n const $bounds = this._$bounds.asObservable().pipe(\r\n filter(b => !!b),\r\n ),\r\n $rawScrollStartOffset = this.$scrollStartOffset,\r\n $rawScrollEndOffset = this.$scrollEndOffset;\r\n\r\n combineLatest([$bounds, $rawScrollStartOffset]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(([v]) => !!v),\r\n tap(([bounds, value]) => {\r\n const val = parseArithmeticExpression(value, this.isVertical ? bounds!.height : bounds!.width);\r\n this._$precalculatedScrollStartOffset.next(val);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$bounds, $rawScrollEndOffset]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(([v]) => !!v),\r\n tap(([bounds, value]) => {\r\n const val = parseArithmeticExpression(value, this.isVertical ? bounds!.height : bounds!.width);\r\n this._$precalculatedScrollEndOffset.next(val);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$intersectionElementBySnapToItemAlign.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => v !== null),\r\n tap(id => {\r\n this.onSnapItem.emit(id!);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$tick.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n this._scrollerComponent?.tick();\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$tick.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(() => this.dynamicSize === true),\r\n tap(() => {\r\n this.checkBoundsOfElements();\r\n this._scrollerComponent?.tick();\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n ngAfterViewInit() {\r\n const _$created = new BehaviorSubject<boolean>(false),\r\n $created = _$created.asObservable();\r\n\r\n combineLatest([$created, this.$show]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(([created, shown]) => created && shown),\r\n debounceTime(1),\r\n tap(v => {\r\n this._$initialized.next(true);\r\n }),\r\n ).subscribe();\r\n\r\n this._$scroller.next(this._scrollerComponent?.scrollViewport);\r\n this._$list.next(this._scrollerComponent?.scrollContent);\r\n\r\n const $bounds = this._$bounds.asObservable().pipe(\r\n filter(b => !!b),\r\n ),\r\n $scrollerComponent = of(this._scrollerComponent),\r\n $resizeViewport = $scrollerComponent.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n switchMap(scroller => scroller!.$resizeViewport),\r\n ),\r\n $resizeContent = $scrollerComponent.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n switchMap(scroller => scroller!.$resizeContent),\r\n );\r\n\r\n $scrollerComponent.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n switchMap(scroller => scroller!.$scrollDirection),\r\n tap(v => {\r\n this._trackBox.scrollDirection = v;\r\n }),\r\n ).subscribe();\r\n\r\n $resizeViewport.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n tap(v => {\r\n this._$bounds.next(v);\r\n this.onAfterResize(true);\r\n }),\r\n ).subscribe();\r\n\r\n $resizeContent.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n tap(v => {\r\n this._$listBounds.next(v);\r\n this.onAfterResize();\r\n }),\r\n ).subscribe();\r\n\r\n const $trackBy = this.$trackBy;\r\n $trackBy.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.trackBy = this._trackBox.trackBy = v;\r\n }),\r\n ).subscribe();\r\n\r\n this._trackBox.displayComponents = this._displayComponents;\r\n\r\n let hasUserAction = false;\r\n\r\n const $itemSize = this.$itemSize.pipe(\r\n map(v => typeof v === 'number' && v <= 0 ? DEFAULT_ITEM_SIZE : v),\r\n ),\r\n $minItemSize = this.$minItemSize.pipe(\r\n map(v => typeof v === 'number' && v <= 0 ? DEFAULT_MIN_ITEM_SIZE : v),\r\n ),\r\n $maxItemSize = this.$maxItemSize.pipe(\r\n map(v => typeof v === 'number' && v <= 0 ? DEFAULT_MAX_ITEM_SIZE : v),\r\n ),\r\n $scrollStartOffset = this.$actualScrollStartOffset.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n ),\r\n $scrollEndOffset = this.$actualScrollEndOffset.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n );\r\n\r\n combineLatest([$minItemSize, $bounds, $scrollStartOffset, $scrollEndOffset]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(([v, bounds, startOffset, endOffset]) => {\r\n if ((v as any) === VIEWPORT) {\r\n const isVertical = this.isVertical, viewportBounds = bounds,\r\n result = (isVertical ? (viewportBounds?.height ?? 0) : (viewportBounds?.width ?? 0)) - startOffset - endOffset;\r\n return of(result <= 0 ? 1 : result);\r\n }\r\n return of(v);\r\n }),\r\n tap(v => {\r\n this._$actualMinItemSize.next(v);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$maxItemSize, $bounds, $scrollStartOffset, $scrollEndOffset]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(([v, bounds, startOffset, endOffset]) => {\r\n if ((v as any) === VIEWPORT) {\r\n const isVertical = this.isVertical, viewportBounds = bounds,\r\n result = (isVertical ? (viewportBounds?.height ?? 0) : (viewportBounds?.width ?? 0)) - startOffset - endOffset;\r\n return of(result <= 0 ? 1 : result);\r\n }\r\n return of(v);\r\n }),\r\n tap(v => {\r\n this._$actualMaxItemSize.next(v);\r\n }),\r\n ).subscribe();\r\n\r\n const $actualMinItemSize = this.$actualMinItemSize,\r\n $actualMaxItemSize = this.$actualMaxItemSize;\r\n\r\n combineLatest([$itemSize, $bounds, $actualMinItemSize, $actualMaxItemSize, $scrollStartOffset, $scrollEndOffset]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(([v, bounds, min, max, startOffset, endOffset]) => {\r\n if ((v as any) === VIEWPORT) {\r\n const isVertical = this.isVertical, viewportBounds = bounds,\r\n result = (isVertical ? (viewportBounds?.height ?? 0) : (viewportBounds?.width ?? 0)) - startOffset - endOffset;\r\n return of(result < min ? min : (result > max ? max : result));\r\n }\r\n return of(v < min ? min : (v > max ? max : v));\r\n }),\r\n tap(v => {\r\n this._$actualItemSize.next(v);\r\n this._service.itemSize = v;\r\n }),\r\n ).subscribe();\r\n\r\n const $actualItemSize = this.$actualItemSize,\r\n $actualItems = this._$actualItems.asObservable().pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n );\r\n\r\n this._service.$focusItem.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(params => {\r\n const { element, position, align, behavior } = params;\r\n this.focusItem(element, position, align, behavior);\r\n }),\r\n ).subscribe();\r\n\r\n const $list = this.$list.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n take(1),\r\n );\r\n\r\n const preventKeyboardEvent = (event: KeyboardEvent, isVertical: boolean) => {\r\n const scroller = this._scrollerComponent;\r\n if (!!scroller) {\r\n const scrollStartOffset = this._$actualScrollStartOffset.getValue(), scrollable = scroller.scrollable ?? false,\r\n scrollSize = isVertical ? scroller.scrollTop : scroller.scrollLeft,\r\n scrollWeight = isVertical ? scroller.scrollHeight : scroller.scrollWidth;\r\n if (scrollable || scrollSize <= scrollStartOffset || scrollSize >= scrollWeight) {\r\n if (!!event && event.cancelable) {\r\n event.stopImmediatePropagation();\r\n event.preventDefault();\r\n }\r\n }\r\n }\r\n };\r\n\r\n $list.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(element => !!element),\r\n switchMap(element => {\r\n return fromEvent<KeyboardEvent>(element, EVENT_KEY_DOWN).pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(e => {\r\n switch (e.key) {\r\n case KEY_ARR_LEFT:\r\n if (!this.isVertical) {\r\n preventKeyboardEvent(e, this.isVertical);\r\n }\r\n break;\r\n case KEY_ARR_UP:\r\n if (this.isVertical) {\r\n preventKeyboardEvent(e, this.isVertical);\r\n }\r\n break;\r\n case KEY_ARR_RIGHT:\r\n if (!this.isVertical) {\r\n preventKeyboardEvent(e, this.isVertical);\r\n }\r\n break;\r\n case KEY_ARR_DOWN:\r\n if (this.isVertical) {\r\n preventKeyboardEvent(e, this.isVertical);\r\n }\r\n break;\r\n }\r\n return of(null);\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollbarThickness = this.$scrollbarThickness;\r\n $scrollbarThickness.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n tap(scrollbarThickness => {\r\n this._service.scrollBarSize = scrollbarThickness;\r\n }),\r\n ).subscribe();\r\n\r\n this.$fireUpdateNextFrame.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n tap(userAction => {\r\n this._$fireUpdate.next(userAction);\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollToItem = this.$scrollTo.pipe(\r\n takeUntil(this._$unsubscribe),\r\n ),\r\n $mouseDown = fromEvent(this._elementRef.nativeElement, MOUSE_DOWN).pipe(\r\n takeUntil(this._$unsubscribe),\r\n ),\r\n $touchStart = fromEvent(this._elementRef.nativeElement, TOUCH_START).pipe(\r\n takeUntil(this._$unsubscribe),\r\n );\r\n\r\n fromEvent<KeyboardEvent>(document, KEY_DOWN).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(e => e.key === KEY_TAB),\r\n switchMap(e => {\r\n return fromEvent(this._elementRef.nativeElement, FOCUS).pipe(\r\n takeUntil(this._$unsubscribe),\r\n delay(0),\r\n takeUntil($scrollToItem),\r\n takeUntil($mouseDown),\r\n takeUntil($touchStart),\r\n tap(e => {\r\n this._service.focusFirstElement();\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$scrollToStart.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(options => {\r\n this.scrollToStart(null, options);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$scrollTo.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n tap(params => {\r\n const { id, cb, options } = params!;\r\n this.scrollTo(id, cb, options);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$scrollToEnd.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(options => {\r\n this.scrollToEnd(null, options);\r\n }),\r\n ).subscribe();\r\n\r\n this.$langTextDir.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._service.langTextDir = v;\r\n }),\r\n ).subscribe();\r\n\r\n this.$clickDistance.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._service.clickDistance = v;\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([this.$snapScrollToStart, this.$isInfinity]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([snapScrollToStart, isInfinity]) => {\r\n this._$actualSnapScrollToStart.next(isInfinity ? false : snapScrollToStart);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([this.$snapScrollToEnd, this.$isInfinity]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([snapScrollToEnd, isInfinity]) => {\r\n this._$actualSnapScrollToEnd.next(isInfinity ? false : snapScrollToEnd);\r\n }),\r\n ).subscribe();\r\n\r\n const $viewInit = this.$viewInit,\r\n $prerenderContainer = of(this._prerender);\r\n\r\n const $prerender = $viewInit.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n switchMap(v => {\r\n return $prerenderContainer.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n switchMap(v => v!.$render),\r\n );\r\n }),\r\n );\r\n\r\n const $fireUpdate = this.$fireUpdate;\r\n $fireUpdate.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(userAction => {\r\n hasUserAction = userAction;\r\n }),\r\n ).subscribe();\r\n\r\n const $update = this.$update,\r\n renderStabilizer = (options?: IRenderStabilizerOptions) => {\r\n let renderStabilizerPrevScrollStateVersion = EMPTY_SCROLL_STATE_VERSION,\r\n renderStabilizerUpdateIterations = 0;\r\n const prepareIterations = options?.prepareIterations ?? PREPARE_ITERATIONS,\r\n prepareReupdateLength = options?.prepareReupdateLength ?? PREPARATION_REUPDATE_LENGTH;\r\n return of(null).pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(() => {\r\n renderStabilizerPrevScrollStateVersion = EMPTY_SCROLL_STATE_VERSION;\r\n renderStabilizerUpdateIterations = 0;\r\n this._cached = false;\r\n return $update.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n switchMap(v => {\r\n if (((renderStabilizerPrevScrollStateVersion === EMPTY_SCROLL_STATE_VERSION) || (renderStabilizerPrevScrollStateVersion !== v)) &&\r\n (renderStabilizerUpdateIterations < prepareIterations)) {\r\n if (v !== EMPTY_SCROLL_STATE_VERSION) {\r\n renderStabilizerPrevScrollStateVersion = v;\r\n }\r\n this._$fireUpdate.next(false);\r\n return of(false);\r\n }\r\n if (renderStabilizerPrevScrollStateVersion === v) {\r\n if (renderStabilizerUpdateIterations < prepareReupdateLength) {\r\n renderStabilizerUpdateIterations++;\r\n this._$fireUpdate.next(false);\r\n return of(false);\r\n }\r\n }\r\n renderStabilizerPrevScrollStateVersion = v;\r\n return of(true);\r\n }),\r\n filter(v => !!v),\r\n distinctUntilChanged(),\r\n )\r\n }),\r\n )\r\n };\r\n const $initialRenderStabilizer = renderStabilizer({\r\n prepareIterations: PREPARE_ITERATIONS,\r\n prepareReupdateLength: PREPARATION_REUPDATE_LENGTH,\r\n }),\r\n $updateItemsRenderStabilizer = renderStabilizer({\r\n prepareIterations: PREPARE_ITERATIONS_FOR_UPDATE_ITEMS,\r\n prepareReupdateLength: PREPARATION_REUPDATE_LENGTH_FOR_UPDATE_ITEMS,\r\n }),\r\n $chunkLoadingRenderStabilizer = renderStabilizer({\r\n prepareIterations: PREPARE_ITERATIONS_FOR_UPDATE_ITEMS,\r\n prepareReupdateLength: PREPARATION_REUPDATE_LENGTH_FOR_UPDATE_ITEMS,\r\n }),\r\n $collapseItemsRenderStabilizer = renderStabilizer({\r\n prepareIterations: PREPARE_ITERATIONS_FOR_COLLAPSE_ITEMS,\r\n prepareReupdateLength: PREPARATION_REUPDATE_LENGTH_FOR_COLLAPSE_ITEMS,\r\n }),\r\n $itemConfigMap = this.$itemConfigMap.pipe(\r\n map(v => !v ? {} : v),\r\n ),\r\n $divides = this.$divides,\r\n $dynamicSize = this.$dynamicSize,\r\n $snapScrollToStart = this._$actualSnapScrollToStart.asObservable(),\r\n $snapScrollToEnd = this._$actualSnapScrollToEnd.asObservable(),\r\n $waitForPreparation = this.$waitForPreparation,\r\n $items = this.$items;\r\n\r\n combineLatest([$viewInit, $prerenderContainer, $divides, $dynamicSize, $snapScrollToStart, $snapScrollToEnd, $waitForPreparation]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n filter(([init, prerenderContainer]) => !!init && !!prerenderContainer),\r\n debounceTime(0),\r\n switchMap(([, prerenderContainer, divides, dynamicSize, snapScrollToStart, snapScrollToEnd, waitForPreparation]) => {\r\n if (!!dynamicSize && !snapScrollToStart && !!snapScrollToEnd && !!waitForPreparation) {\r\n const $collection = (divides > 1 ? $actualItems : $items);\r\n return $collection.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged((p, c) => {\r\n const pLength = p?.length ?? 0, cLength = c?.length ?? 0;\r\n return !((cLength > 0) || (pLength !== cLength && (pLength === 0 || cLength === 0)));\r\n }),\r\n tap(items => {\r\n this._trackBox.resetCollection(items, this.actualItemSize);\r\n }),\r\n switchMap(i => of((i ?? []).length > 0)),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n if (!v) {\r\n this.cacheClean();\r\n this.cleanup();\r\n this._readyForShow = false;\r\n if (!snapScrollToStart && snapScrollToEnd) {\r\n this._trackBox.isScrollEnd = true;\r\n }\r\n const scrollerComponent = this._scrollerComponent;\r\n if (!!scrollerComponent) {\r\n scrollerComponent.prepared = false;\r\n scrollerComponent.stopScrolling();\r\n scrollerComponent.refresh();\r\n }\r\n this._$classes.next({ prepared: true });\r\n this._$show.next(true);\r\n } else {\r\n this._trackBox.isScrollEnd = true;\r\n const waitForPreparation = this.waitForPreparation;\r\n if (waitForPreparation) {\r\n if (this.prerenderable) {\r\n this._cached = false;\r\n prerenderContainer!.on(this.items);\r\n }\r\n }\r\n this._$classes.next({ prepared: false });\r\n this._$show.next(false);\r\n }\r\n }),\r\n switchMap(v => {\r\n if (!v) {\r\n if (this.prerenderable) {\r\n prerenderContainer!.off();\r\n }\r\n return of(false);\r\n }\r\n const waitForPreparation = this.waitForPreparation;\r\n if (waitForPreparation) {\r\n this._trackBox.isScrollEnd = true;\r\n if (this.prerenderable) {\r\n this._cached = false;\r\n prerenderContainer!.on(this.items);\r\n }\r\n return $initialRenderStabilizer.pipe(\r\n takeUntil(this._$unsubscribe),\r\n take(1),\r\n tap(() => {\r\n this._trackBox.isScrollEnd = true;\r\n if (this.prerenderable) {\r\n prerenderContainer!.off();\r\n }\r\n this._readyForShow = true;\r\n const scrollerComponent = this._scrollerComponent;\r\n if (!!scrollerComponent) {\r\n scrollerComponent.prepared = true;\r\n scrollerComponent.refresh();\r\n }\r\n this._$classes.next({ prepared: true });\r\n this._$show.next(true);\r\n }),\r\n );\r\n }\r\n if (this.prerenderable) {\r\n prerenderContainer!.off();\r\n }\r\n this._readyForShow = true;\r\n if (!snapScrollToStart && snapScrollToEnd) {\r\n this._trackBox.isScrollEnd = true;\r\n }\r\n const scrollerComponent = this._scrollerComponent;\r\n if (!!scrollerComponent) {\r\n scrollerComponent.prepared = true;\r\n scrollerComponent.refresh();\r\n }\r\n this._$classes.next({ prepared: true });\r\n this._$show.next(true);\r\n return of(false);\r\n }),\r\n );\r\n } else {\r\n prerenderContainer!.off();\r\n const $collection = (divides > 1 ? $actualItems : $items);\r\n return $collection.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(items => {\r\n if (!items || items.length === 0) {\r\n this.cacheClean();\r\n const scrollerComponent = this._scrollerComponent;\r\n if (!!scrollerComponent) {\r\n scrollerComponent.prepared = false;\r\n }\r\n this._$classes.next({ prepared: false });\r\n this._$show.next(false);\r\n }\r\n this._trackBox.resetCollection(items, this.actualItemSize);\r\n }),\r\n switchMap(i => of((i ?? []).length > 0)),\r\n distinctUntilChanged(),\r\n filter(v => !!v),\r\n tap(() => {\r\n this._readyForShow = true;\r\n if (snapScrollToStart) {\r\n this._trackBox.isScrollStart = true;\r\n } else if (snapScrollToEnd) {\r\n this._trackBox.isScrollEnd = true;\r\n }\r\n const scrollerComponent = this._scrollerComponent;\r\n if (!!scrollerComponent) {\r\n scrollerComponent.prepared = true;\r\n scrollerComponent.refresh();\r\n }\r\n this._$classes.next({ prepared: true });\r\n this._$show.next(true);\r\n this._$fireUpdate.next(false);\r\n }),\r\n );\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $items.pipe(\r\n map(v => v?.length > 0),\r\n distinctUntilChanged(),\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n tap(() => {\r\n this._cached = false;\r\n }),\r\n switchMap(() => {\r\n return $prerender.pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n take(1),\r\n tap(cache => {\r\n if (!this._readyForShow) {\r\n this._trackBox.refreshCache(cache);\r\n this._cached = true;\r\n this._$fireUpdate.next(true);\r\n }\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$focusedId.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._$focusedElement.next(v ?? null);\r\n }),\r\n ).subscribe();\r\n\r\n $list.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(element => !!element),\r\n tap(element => {\r\n this._service.listElement = element;\r\n }),\r\n ).subscribe();\r\n\r\n const $defaultItemValue = this.$defaultItemValue,\r\n $selectByClick = this.$selectByClick,\r\n $collapseByClick = this.$collapseByClick,\r\n $isScrollStart = this._$isScrollStart.asObservable(),\r\n $isScrollFinished = this._$isScrollEnd.asObservable(),\r\n $isVertical = this.$direction.pipe(\r\n map(v => this.getIsVertical(v || DEFAULT_DIRECTION)),\r\n );\r\n\r\n $snapScrollToStart.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.snapScrollToStart = v;\r\n }),\r\n ).subscribe();\r\n\r\n $snapScrollToEnd.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.snapScrollToEnd = v;\r\n }),\r\n ).subscribe();\r\n\r\n $isVertical.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.isVertical = v;\r\n }),\r\n ).subscribe();\r\n\r\n $dynamicSize.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.dynamic = v;\r\n }),\r\n ).subscribe();\r\n\r\n $defaultItemValue.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.defaultItemValue = v;\r\n }),\r\n ).subscribe();\r\n\r\n $scrollStartOffset.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._trackBox.scrollStartOffset = this._service.scrollStartOffset = v;\r\n }),\r\n ).subscribe();\r\n\r\n $scrollEndOffset.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._trackBox.scrollEndOffset = this._service.scrollEndOffset = v;\r\n }),\r\n ).subscribe();\r\n\r\n $isScrollStart.pipe(\r\n takeUntil(this._$unsubscribe),\r\n skip(1),\r\n distinctUntilChanged(),\r\n debounceTime(0),\r\n filter(v => !!v && this._readyForShow),\r\n tap(() => {\r\n if (this._scrollerComponent?.scrollable) {\r\n this.onScrollReachStart.emit();\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $isScrollFinished.pipe(\r\n takeUntil(this._$unsubscribe),\r\n skip(1),\r\n distinctUntilChanged(),\r\n debounceTime(0),\r\n filter(v => !!v && this._readyForShow),\r\n tap(v => {\r\n if (this._scrollerComponent?.scrollable) {\r\n this.onScrollReachEnd.emit();\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $selectByClick.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.selectByClick = v;\r\n }),\r\n ).subscribe();\r\n\r\n $collapseByClick.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.collapseByClick = v;\r\n }),\r\n ).subscribe();\r\n\r\n $trackBy.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._trackBox.trackingPropertyName = v;\r\n }),\r\n ).subscribe();\r\n\r\n $divides.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._trackBox.divides = v;\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([this.$alignment, this.$isInfinity]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([alignment, isInfinity]) => {\r\n this._$actualAlignment.next(isInfinity ? Alignments.CENTER : alignment);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([this.$scrollbarEnabled, this.$isInfinity]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n tap(([scrollbarEnabled, isInfinity]) => {\r\n this._$actualScrollbarEnabled.next(isInfinity ? false : scrollbarEnabled);\r\n }),\r\n ).subscribe();\r\n\r\n const $alignment = this.$actualAlignment,\r\n $precalculatedScrollStartOffset = this._$precalculatedScrollStartOffset.asObservable(),\r\n $precalculatedScrollEndOffset = this._$precalculatedScrollEndOffset.asObservable(),\r\n $listBounds = this._$listBounds.asObservable().pipe(\r\n filter(b => !!b),\r\n ), $scrollSize = this._$scrollSize.asObservable(),\r\n $bufferSize = this.$bufferSize.pipe(\r\n map(v => v < 0 ? DEFAULT_BUFFER_SIZE : v),\r\n ),\r\n $maxBufferSize = this.$maxBufferSize.pipe(\r\n map(v => v < 0 ? DEFAULT_BUFFER_SIZE : v),\r\n ),\r\n $snapToItem = this.$snapToItem,\r\n $snapToItemAlign = this.$snapToItemAlign,\r\n $stickyEnabled = this.$stickyEnabled,\r\n $isLazy = this.$collectionMode.pipe(\r\n map(v => this.getIsLazy(v || DEFAULT_COLLECTION_MODE)),\r\n ),\r\n $enabledBufferOptimization = this.$enabledBufferOptimization,\r\n $snappingMethod = this.$snappingMethod.pipe(\r\n map(v => this.getIsSnappingMethodAdvanced(v || DEFAULT_SNAPPING_METHOD)),\r\n ),\r\n $collapsingMode = this.$collapsingMode,\r\n $selectingMode = this.$selectingMode,\r\n $selectedIds = this.$selectedIds,\r\n $collapsedIds = this.$collapsedIds.pipe(\r\n distinctUntilChanged(),\r\n map(v => Array.isArray(v) ? v : []),\r\n ),\r\n $collapsedItemIds = this._$collapsedItemIds.asObservable().pipe(\r\n distinctUntilChanged(),\r\n map(v => Array.isArray(v) ? v : []),\r\n ),\r\n $itemTransform = this.$itemTransform,\r\n $screenReaderMessage = this.$screenReaderMessage,\r\n $displayItems = this._service.$displayItems,\r\n $cacheVersion = this._service.$cacheVersion;\r\n\r\n $snapToItem.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.snapToItem = v;\r\n }),\r\n ).subscribe();\r\n\r\n $actualItems.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.items = v;\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$actualItems, $viewInit]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(([, init]) => init),\r\n debounceTime(0),\r\n tap(() => {\r\n this._scrollerComponent?.snapIfNeed();\r\n }),\r\n ).subscribe();\r\n\r\n $itemConfigMap.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.itemConfigMap = v;\r\n }),\r\n ).subscribe();\r\n\r\n $collapsedIds.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._service.collapsedIds = v;\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$displayItems, $screenReaderMessage, $isVertical, $scrollSize, $bounds]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n debounceTime(100),\r\n takeUntil(this._$unsubscribe),\r\n tap(([items, screenReaderMessage, isVertical, scrollSize, bounds]) => {\r\n this._$screenReaderFormattedMessage.next(\r\n formatScreenReaderMessage(items, screenReaderMessage, scrollSize, isVertical, bounds!)\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n $isLazy.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._trackBox.isLazy = v;\r\n }),\r\n ).subscribe();\r\n\r\n const $itemsComposition = $items.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n switchMap(items => {\r\n return combineLatest([$collapsedItemIds, $itemConfigMap, $trackBy, $divides]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n debounceTime(0),\r\n switchMap(([collapsedIds, itemConfigMap, trackBy, divides]) => {\r\n return of({ items, collapsedIds, itemConfigMap, trackBy, divides });\r\n }),\r\n );\r\n }),\r\n );\r\n\r\n $itemsComposition.pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(({ items, collapsedIds, itemConfigMap, trackBy, divides }) => {\r\n if (items.length === 0 || !this._readyForShow || !(this.cachable && !this._cached &&\r\n !this._trackBox.isSnappedToStart && this._trackBox.isSnappedToEnd)) {\r\n return of({ items, collapsedIds, itemConfigMap, trackBy, divides });\r\n }\r\n return $updateItemsRenderStabilizer.pipe(\r\n takeUntil(this._$unsubscribe),\r\n take(1),\r\n debounceTime(0),\r\n switchMap(() => {\r\n return of({ items, collapsedIds, itemConfigMap, trackBy, divides });\r\n }),\r\n );\r\n }),\r\n tap(({ items, collapsedIds, itemConfigMap, trackBy, divides }) => {\r\n const hiddenItems = new CMap<Id, boolean>();\r\n\r\n let isCollapsed = false;\r\n for (let i = 0, l = items.length; i < l; i++) {\r\n const item = items[i], id = item?.[trackBy];\r\n if (!!item) {\r\n const group = (itemConfigMap[id]?.sticky ?? 0) > 0, collapsed = collapsedIds.includes(id);\r\n if (!!group) {\r\n isCollapsed = collapsed;\r\n } else {\r\n if (isCollapsed) {\r\n hiddenItems.set(id, true);\r\n }\r\n }\r\n }\r\n }\r\n\r\n const actualItems: IVirtualListCollection = [];\r\n for (let i = 0, l = items.length; i < l; i++) {\r\n const item = items[i], id = item?.[trackBy];\r\n if (!!item && hiddenItems.has(id)) {\r\n continue;\r\n }\r\n actualItems.push(item);\r\n }\r\n\r\n const normalizedCollection = normalizeCollection(actualItems, itemConfigMap, trackBy, divides);\r\n\r\n this._$actualItems.next(normalizedCollection);\r\n }),\r\n ).subscribe();\r\n\r\n $isVertical.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._isVertical = v;\r\n const el: HTMLElement = this._elementRef.nativeElement;\r\n toggleClassName(el, v ? CLASS_LIST_VERTICAL : CLASS_LIST_HORIZONTAL, v ? CLASS_LIST_HORIZONTAL : CLASS_LIST_VERTICAL);\r\n }),\r\n ).subscribe();\r\n\r\n $snappingMethod.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._isSnappingMethodAdvanced = this._trackBox.isSnappingMethodAdvanced = v;\r\n }),\r\n ).subscribe();\r\n\r\n $selectingMode.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n const el = this._$list.getValue()?.nativeElement;\r\n if (this.getIsMultiSelection(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isMultiSelection = true;\r\n this._isSingleSelection = false;\r\n if (!!el) {\r\n (el as any).role = ROLE_LIST_BOX;\r\n }\r\n this._service.selectingMode = SelectingModesTypes.MULTI_SELECT;\r\n } else if (this.getIsSingleSelection(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isSingleSelection = true;\r\n this._isMultiSelection = false;\r\n if (!!el) {\r\n (el as any).role = ROLE_LIST_BOX;\r\n }\r\n this._service.selectingMode = SelectingModesTypes.SELECT;\r\n } else if (this.getIsNoneSelection(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isSingleSelection = this._isMultiSelection = false;\r\n if (!!el) {\r\n (el as any).role = ROLE_LIST;\r\n }\r\n this._service.selectingMode = SelectingModesTypes.NONE;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $collapsingMode.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n if (this.getIsNoneCollapse()) {\r\n this._service.isNoneCollapse = true;\r\n this._service.isAccordionCollapse = this._service.isMultipleCollapse = this._isAccordionCollapse = this._isMultipleCollapse = false;\r\n } else if (this.getIsMultipleCollapse()) {\r\n this._service.isMultipleCollapse = this._isMultipleCollapse = true;\r\n this._service.isAccordionCollapse = this._service.isNoneCollapse = this._isAccordionCollapse = false;\r\n } else if (this.getIsAccordionCollapse()) {\r\n this._service.isAccordionCollapse = this._isAccordionCollapse = true;\r\n this._service.isMultipleCollapse = this._service.isNoneCollapse = this._isMultipleCollapse = false;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n const $preventScrollSnapping = this.$preventScrollSnapping;\r\n\r\n $preventScrollSnapping.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n tap(() => {\r\n if (this._readyForShow) {\r\n this._trackBox.isScrollEnd;\r\n this._trackBox.isScrollStart = this._trackBox.isScrollEnd = false;\r\n this._$isScrollStart.next(false);\r\n this._$isScrollEnd.next(false);\r\n const scroller = this._scrollerComponent;\r\n if (!!scroller) {\r\n this._trackBox.preventScrollSnapping(true);\r\n }\r\n }\r\n }),\r\n tap(() => {\r\n if (this._readyForShow) {\r\n this._$preventScrollSnapping.next(false);\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $collapsedItemIds.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(() => this._readyForShow),\r\n switchMap(() => {\r\n return $collapseItemsRenderStabilizer.pipe(\r\n takeUntil(this._$unsubscribe),\r\n take(1),\r\n tap(() => {\r\n this._$fireUpdate.next(true);\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n let isChunkLoading = false;\r\n const $loading = this.$loading;\r\n $loading.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n skip(1),\r\n filter(v => !v),\r\n switchMap(() => {\r\n isChunkLoading = true;\r\n const scrollbar = this._scrollerComponent;\r\n if (!!scrollbar) {\r\n scrollbar.stopScrollbar();\r\n scrollbar.refreshScrollbar();\r\n }\r\n return $actualItems.pipe(\r\n takeUntil(this._$unsubscribe),\r\n take(1),\r\n tap(() => {\r\n this._$fireUpdateNextFrame.next(true);\r\n }),\r\n switchMap(() => $chunkLoadingRenderStabilizer.pipe(\r\n takeUntil(this._$unsubscribe),\r\n take(1),\r\n tap(() => {\r\n isChunkLoading = false;\r\n this._trackBox.resetCacheChunkInfo();\r\n const scrollbar = this._scrollerComponent;\r\n if (!!scrollbar) {\r\n scrollbar.stopScrollbar();\r\n scrollbar.refreshScrollbar();\r\n }\r\n }),\r\n )),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n $loading.pipe(\r\n takeUntil(this._$unsubscribe),\r\n skip(1),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n if (v) {\r\n this._isLoading = true;\r\n }\r\n }),\r\n filter(v => !v),\r\n tap(() => {\r\n if (this._readyForShow) {\r\n this._$preventScrollSnapping.next(true);\r\n }\r\n }),\r\n debounceTime(100),\r\n tap(() => {\r\n this._isLoading = false;\r\n }),\r\n ).subscribe();\r\n\r\n const update = (params: {\r\n alignment: Alignment; precalculatedScrollStartOffset: number; precalculatedScrollEndOffset: number; trackBy: string; isInfinity: boolean;\r\n snapScrollToStart: boolean, snapScrollToEnd: boolean; bounds: ISize; listBounds: ISize; scrollEndOffset: number;\r\n items: IVirtualListCollection<Object>; itemConfigMap: IVirtualListItemConfigMap; scrollSize: number; itemSize: number;\r\n minItemSize: number; maxItemSize: number; bufferSize: number; maxBufferSize: number; stickyEnabled: boolean; isVertical: boolean;\r\n dynamicSize: boolean; divides: number; enabledBufferOptimization: boolean; cacheVersion: number; userAction: boolean;\r\n snapToItem: boolean, snapToItemAlign: SnapToItemAlign, collapsedIds: Array<Id>; itemTransform: ItemTransform | null;\r\n }) => {\r\n const {\r\n alignment, precalculatedScrollStartOffset, precalculatedScrollEndOffset, trackBy, isInfinity,\r\n snapScrollToStart, snapScrollToEnd, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize, minItemSize,\r\n maxItemSize, divides, bufferSize, maxBufferSize, stickyEnabled, isVertical, dynamicSize, enabledBufferOptimization, snapToItem,\r\n snapToItemAlign, cacheVersion, userAction, collapsedIds, itemTransform,\r\n } = params;\r\n const scroller = this._scrollerComponent;\r\n let totalSize = 0;\r\n if (!!scroller) {\r\n const isInfinity = this.isInfinity, collapsable = collapsedIds.length > 0, cachable = this.cachable, cached = this._cached, waitingCache = cachable && !cached,\r\n emitUpdate = !this._readyForShow || waitingCache || collapsable || isChunkLoading,\r\n fireUpdate = !this._readyForShow || this._$scrollingTo.getValue(),\r\n fireUpdateAtEdges = fireUpdate || !isInfinity;\r\n if (this._readyForShow || (cachable && cached)) {\r\n const currentScrollSize = (isVertical ? scroller.scrollTop : scroller.scrollLeft);\r\n let actualScrollSize = !this._readyForShow && snapScrollToEnd ? (isVertical ? scroller.scrollHeight : scroller.scrollWidth) :\r\n (isVertical ? scroller.scrollTop : scroller.scrollLeft),\r\n leftLayoutOffset = 0,\r\n displayItems: IRenderVirtualListCollection;\r\n\r\n const { width, height } = bounds, viewportSize = (isVertical ? height : width),\r\n opts: IUpdateCollectionOptions<IVirtualListItem, IVirtualListCollection> = {\r\n bounds: { width, height }, dynamicSize, isVertical, itemSize, minItemSize, maxItemSize, bufferSize, maxBufferSize,\r\n scrollSize: actualScrollSize, stickyEnabled, enabledBufferOptimization, snapToItem, snapToItemAlign, itemTransform,\r\n };\r\n\r\n if (snapScrollToEnd && !this._readyForShow) {\r\n const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize1, leftLayoutOffset: leftLayoutOffset1 } =\r\n this._trackBox.updateCollection(items, itemConfigMap, { ...opts, scrollSize: actualScrollSize });\r\n displayItems = calculatedDisplayItems;\r\n totalSize = calculatedTotalSize1;\r\n leftLayoutOffset = leftLayoutOffset1;\r\n } else {\r\n const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize, leftLayoutOffset: leftLayoutOffset1 } = this._trackBox.updateCollection(items, itemConfigMap, opts);\r\n displayItems = calculatedDisplayItems;\r\n totalSize = calculatedTotalSize;\r\n leftLayoutOffset = leftLayoutOffset1;\r\n }\r\n\r\n scroller.totalSize = totalSize;\r\n\r\n scroller.startLayoutOffset = leftLayoutOffset;\r\n\r\n this._$totalSize.next(totalSize);\r\n\r\n this._service.collection = displayItems;\r\n\r\n this.resetBoundsSize(isVertical, totalSize);\r\n\r\n this.createDisplayComponentsIfNeed(displayItems);\r\n\r\n this.tracking();\r\n\r\n this.snappingHandler();\r\n\r\n if (!_$created.getValue()) {\r\n _$created.next(true);\r\n }\r\n\r\n const delta = this._trackBox.delta,\r\n scrollPositionAfterUpdate = actualScrollSize + delta,\r\n roundedScrollPositionAfterUpdate = scrollPositionAfterUpdate,\r\n roundedMaxPositionAfterUpdate = isVertical ? scroller.scrollHeight : scroller.scrollWidth;\r\n\r\n if (this._isSnappingMethodAdvanced) {\r\n this.updateRegularRenderer();\r\n }\r\n\r\n switch (alignment) {\r\n case Alignments.NONE: {\r\n this._$actualScrollStartOffset.next(precalculatedScrollStartOffset);\r\n this._$actualScrollEndOffset.next(precalculatedScrollEndOffset);\r\n break;\r\n }\r\n case Alignments.CENTER: {\r\n const firstItemId: Id | null = items.length > 0 ? (items[0]?.[trackBy] ?? null) : null,\r\n endItemId: Id | null = items.length > 0 ? (items?.[items.length - 1]?.[trackBy] ?? null) : null,\r\n alignmentStartOffset = viewportSize * .5 - (firstItemId !== null ? (isVertical ? (this._service.getItemBounds(firstItemId)?.height ?? 0) :\r\n (this._service.getItemBounds(firstItemId)?.width ?? 0)) : 0) * (isInfinity ? 0 : .5),\r\n alignmentEndOffset = viewportSize * .5 - (endItemId !== null ? (isVertical ? (this._service.getItemBounds(endItemId)?.height ?? 0) :\r\n (this._service.getItemBounds(endItemId)?.width ?? 0)) : 0) * (isInfinity ? 0 : .5);\r\n\r\n this._$alignmentScrollStartOffset.next(alignmentStartOffset);\r\n this._$alignmentScrollEndOffset.next(alignmentEndOffset);\r\n this._$actualScrollStartOffset.next(precalculatedScrollStartOffset + alignmentStartOffset);\r\n this._$actualScrollEndOffset.next(precalculatedScrollEndOffset + alignmentEndOffset);\r\n break;\r\n }\r\n }\r\n\r\n scroller.delta = delta;\r\n\r\n if ((snapScrollToStart && this._trackBox.isSnappedToStart && scroller.scrollable) ||\r\n (snapScrollToStart && currentScrollSize <= MIN_PIXELS_FOR_PREVENT_SNAPPING)) {\r\n if (currentScrollSize !== roundedScrollPositionAfterUpdate) {\r\n this._trackBox.clearDelta();\r\n\r\n if (this._readyForShow) {\r\n this.emitScrollEvent(true, false, userAction);\r\n }\r\n this._trackBox.isScrollEnd;\r\n const params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: 0, userAction,\r\n fireUpdate: fireUpdateAtEdges, behavior: BEHAVIOR_INSTANT,\r\n blending: false, duration: this.animationParams.scrollToItem,\r\n };\r\n scroller?.scrollTo?.(params);\r\n if (emitUpdate) {\r\n this._$update.next(getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft));\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if ((snapScrollToEnd && this._trackBox.isSnappedToEnd) || (snapScrollToEnd && !scroller.scrollable) ||\r\n (scrollPositionAfterUpdate + MIN_PIXELS_FOR_PREVENT_SNAPPING >= roundedMaxPositionAfterUpdate) ||\r\n (roundedScrollPositionAfterUpdate >= scrollPositionAfterUpdate + MIN_PIXELS_FOR_PREVENT_SNAPPING)) {\r\n this._trackBox.clearDelta();\r\n\r\n if (!this._trackBox.isSnappedToEnd) {\r\n this._trackBox.isScrollEnd = true;\r\n this._trackBox.isScrollStart = false;\r\n }\r\n\r\n if (this._readyForShow) {\r\n this.emitScrollEvent(true, false, false);\r\n }\r\n const params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: roundedMaxPositionAfterUpdate,\r\n fireUpdate: fireUpdateAtEdges, behavior: BEHAVIOR_INSTANT, userAction: false,\r\n blending: false, duration: this.animationParams.scrollToItem,\r\n };\r\n scroller?.scrollTo?.(params);\r\n if (emitUpdate) {\r\n this._$update.next(getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft));\r\n }\r\n return;\r\n }\r\n\r\n if (scrollSize !== scrollPositionAfterUpdate &&\r\n ((scrollPositionAfterUpdate >= 0 && scrollPositionAfterUpdate < roundedMaxPositionAfterUpdate) ||\r\n (scrollSize !== roundedMaxPositionAfterUpdate || currentScrollSize !== scrollPositionAfterUpdate))) {\r\n this._trackBox.clearDelta();\r\n\r\n if (this._readyForShow) {\r\n this.emitScrollEvent(true, false, userAction);\r\n }\r\n const params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollPositionAfterUpdate, blending: true, userAction,\r\n fireUpdate, behavior: BEHAVIOR_INSTANT, duration: this.animationParams.scrollToItem,\r\n };\r\n scroller.scrollTo(params);\r\n if (emitUpdate) {\r\n this._$update.next(getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft));\r\n }\r\n return;\r\n }\r\n }\r\n if (emitUpdate) {\r\n this._$update.next(getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft));\r\n }\r\n }\r\n };\r\n\r\n let prevItems: IVirtualListCollection = [];\r\n const debouncedUpdate = debounce(update, 0, MAX_NUMBERS_OF_SKIPS_FOR_QUALITY_OPTIMIZATION_LVL1);\r\n $viewInit.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n switchMap(() => {\r\n return combineLatest([$trackBy, this.$isInfinity, $snapScrollToStart, $snapScrollToEnd, $bounds, $listBounds, $scrollEndOffset, $actualItems, $itemConfigMap, $scrollSize,\r\n $actualItemSize, $actualMinItemSize, $actualMaxItemSize, $collapsedItemIds, $bufferSize, $maxBufferSize, $stickyEnabled, $isVertical,\r\n $dynamicSize, $divides, $snapToItem, $snapToItemAlign, $enabledBufferOptimization, $itemTransform, $alignment,\r\n $precalculatedScrollStartOffset, $precalculatedScrollEndOffset, $cacheVersion, this.$fireUpdate,\r\n ]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([\r\n trackBy, isInfinity, snapScrollToStart, snapScrollToEnd, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize, minItemSize,\r\n maxItemSize, collapsedIds, bufferSize, maxBufferSize, stickyEnabled, isVertical, dynamicSize, divides, snapToItem, snapToItemAlign,\r\n enabledBufferOptimization, itemTransform, alignment, precalculatedScrollStartOffset, precalculatedScrollEndOffset, cacheVersion,\r\n ]) => {\r\n let itemsChanged = false;\r\n if (prevItems !== items) {\r\n itemsChanged = true;\r\n prevItems = items;\r\n }\r\n const enabledOptimization = this.scrollingSettings?.optimization ?? DEFAULT_SCROLLING_SETTINGS.optimization,\r\n velocity = this._scrollerComponent?.averageVelocity ?? 0,\r\n isScrolling = this._$scrollingTo.getValue(),\r\n useDebouncedUpdate = (dynamicSize && !itemTransform) && !(snapScrollToEnd && this._trackBox.isSnappedToEnd) && !itemsChanged && hasUserAction && !isScrolling &&\r\n (velocity > 0 && velocity < MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL1);\r\n if (enabledOptimization) {\r\n if (useDebouncedUpdate) {\r\n debouncedUpdate.execute({\r\n trackBy, isInfinity, snapScrollToStart, snapScrollToEnd, bounds: bounds!, listBounds: listBounds!, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize, minItemSize,\r\n maxItemSize, collapsedIds, bufferSize, maxBufferSize, stickyEnabled, isVertical, dynamicSize, divides, enabledBufferOptimization, itemTransform,\r\n snapToItem, snapToItemAlign, alignment, precalculatedScrollStartOffset, precalculatedScrollEndOffset, cacheVersion, userAction: hasUserAction,\r\n });\r\n return;\r\n }\r\n\r\n debouncedUpdate.dispose();\r\n }\r\n\r\n if (!isScrolling) {\r\n update({\r\n trackBy, isInfinity, snapScrollToStart, snapScrollToEnd, bounds: bounds!, listBounds: listBounds!, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize, minItemSize,\r\n maxItemSize, collapsedIds, bufferSize, maxBufferSize, stickyEnabled, isVertical, dynamicSize, divides, enabledBufferOptimization, itemTransform,\r\n snapToItem, snapToItemAlign, alignment, precalculatedScrollStartOffset, precalculatedScrollEndOffset, cacheVersion, userAction: hasUserAction,\r\n });\r\n }\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $scroller = this.$scroller.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n take(1),\r\n ),\r\n $scrollerScroll = $scrollerComponent.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n take(1),\r\n switchMap(scroller => scroller!.$scroll),\r\n ),\r\n $scrollerScrollEnd = $scrollerComponent.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n take(1),\r\n switchMap(scroller => scroller!.$scrollEnd),\r\n ),\r\n $scrollbarScroll = $scrollerComponent.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n take(1),\r\n switchMap(scroller => scroller!.$scrollbarScroll),\r\n );\r\n\r\n const scrollHandler = (userAction: boolean = false) => {\r\n const scroller = this._scrollerComponent;\r\n if (!!scroller) {\r\n const isVertical = this._isVertical,\r\n scrollSize = (isVertical ? scroller.scrollTop : scroller.scrollLeft),\r\n actualScrollSize = scrollSize;\r\n\r\n if (this._readyForShow) {\r\n if (userAction) {\r\n this._$preventScrollSnapping.next(true);\r\n }\r\n }\r\n\r\n this._$scrollSize.next(actualScrollSize);\r\n }\r\n };\r\n\r\n $scroller.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return $scrollbarScroll.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(userAction => {\r\n const scrollerEl = this._$scroller.getValue()?.nativeElement, scrollerComponent = this._scrollerComponent;\r\n if (!!scrollerEl && !!scrollerComponent) {\r\n this.emitScrollEvent(false, this._readyForShow, hasUserAction);\r\n }\r\n if (this._readyForShow) {\r\n if (userAction) {\r\n if (this._trackBox.isSnappedToStart) {\r\n this._$preventScrollSnapping.next(true);\r\n }\r\n if (this._trackBox.isSnappedToEnd) {\r\n this._$preventScrollSnapping.next(true);\r\n }\r\n }\r\n }\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n $scroller.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return $scrollerScroll.pipe(\r\n takeUntil(this._$unsubscribe),\r\n );\r\n }),\r\n tap(userAction => {\r\n hasUserAction = userAction;\r\n const scrollerEl = this._$scroller.getValue()?.nativeElement, scrollerComponent = this._scrollerComponent;\r\n if (!!scrollerEl && !!scrollerComponent) {\r\n this.emitScrollEvent(false, this._readyForShow, userAction);\r\n }\r\n scrollHandler(userAction);\r\n }),\r\n ).subscribe();\r\n\r\n $scroller.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return $scrollerScrollEnd.pipe(\r\n takeUntil(this._$unsubscribe),\r\n );\r\n }),\r\n tap(userAction => {\r\n hasUserAction = userAction;\r\n const scrollerEl = this._$scroller.getValue()?.nativeElement, scrollerComponent = this._scrollerComponent;\r\n if (!!scrollerEl && !!scrollerComponent) {\r\n this.emitScrollEvent(true, this._readyForShow, userAction);\r\n }\r\n scrollHandler(userAction);\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollTo = this.$scrollTo,\r\n $scrollToExecutor = this.$scrollToExecutor;\r\n\r\n combineLatest([$scroller, $trackBy, $scrollTo]).pipe(\r\n filter(([scroller, , event]) => !!scroller && !!event),\r\n map(([scroller, trackBy, event]) => ({ scroller: scroller, trackBy, event })),\r\n switchMap(({ event }) => {\r\n const d = event?.delay ?? 0;\r\n if (d > 0) {\r\n return of(event).pipe(\r\n takeUntil(this._$unsubscribe),\r\n delay(d),\r\n );\r\n }\r\n return of(event);\r\n }),\r\n tap(event => {\r\n this._$scrollingTo.next(true);\r\n this._$scrollToExecutor.next(event);\r\n }),\r\n ).subscribe();\r\n\r\n $scrollToExecutor.pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(event => {\r\n const trackBy = this.trackBy, scrollerComponent = this._scrollerComponent,\r\n { id, iteration = 0, blending = false, isLastIteration = false, cb } = event;\r\n const nextIteration = iteration + 1, finished = nextIteration >= MAX_SCROLL_TO_ITERATIONS, fireUpdate = false;\r\n\r\n if (!this._readyForShow) {\r\n return of([finished, { id, iteration: nextIteration, blending, cb }]).pipe(delay(0));\r\n }\r\n\r\n debouncedUpdate.dispose();\r\n this._$preventScrollSnapping.next(true);\r\n\r\n if (!!scrollerComponent) {\r\n scrollerComponent.startScrollTo();\r\n\r\n const items = this._$actualItems.getValue();\r\n if (!!items && items.length) {\r\n const dynamicSize = this.dynamicSize, itemSize = this.actualItemSize, minItemSize = this.actualMinItemSize,\r\n maxItemSize = this.actualMaxItemSize, snapScrollToEnd = this.snapScrollToEnd;\r\n\r\n if (dynamicSize) {\r\n const { width, height } = this._$bounds.getValue() || { width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE },\r\n itemConfigMap = this.itemConfigMap, isVertical = this._isVertical,\r\n currentScrollSize = isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft,\r\n opts: IGetItemPositionOptions<IVirtualListItem, IVirtualListCollection> = {\r\n bounds: { width, height }, collection: items, dynamicSize, isVertical: this._isVertical, itemSize, minItemSize, maxItemSize,\r\n bufferSize: this.bufferSize, maxBufferSize: this.maxBufferSize, itemTransform: this.itemTransform,\r\n scrollSize: (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),\r\n snapToItem: this.snapToItem, snapToItemAlign: this.snapToItemAlign,\r\n stickyEnabled: this.stickyEnabled, fromItemId: id, enabledBufferOptimization: this.enabledBufferOptimization,\r\n };\r\n\r\n let scrollSize = snapScrollToEnd && this._trackBox.isSnappedToEnd ?\r\n (isVertical ? scrollerComponent.scrollHeight : scrollerComponent.scrollWidth) :\r\n this._trackBox.getItemPosition(id, itemConfigMap, opts);\r\n\r\n if (scrollSize === -1) {\r\n return of([finished, { id, blending, iteration: nextIteration, cb }]).pipe(delay(0));\r\n }\r\n\r\n this._trackBox.clearDelta();\r\n\r\n const viewportSize = (isVertical ? height : width),\r\n { displayItems, totalSize, leftLayoutOffset } = this._trackBox.updateCollection(items, itemConfigMap, {\r\n ...opts, scrollSize, fromItemId: isLastIteration ? undefined : id,\r\n }), delta1 = this._trackBox.delta;\r\n\r\n const normalizedTotalSize = totalSize < viewportSize ? viewportSize : totalSize;\r\n\r\n scrollerComponent.startLayoutOffset = leftLayoutOffset;\r\n\r\n scrollerComponent.totalSize = normalizedTotalSize;\r\n\r\n this._service.collection = displayItems;\r\n\r\n let actualScrollSize = scrollSize + delta1;\r\n\r\n this.resetBoundsSize(isVertical, normalizedTotalSize);\r\n\r\n this.createDisplayComponentsIfNeed(displayItems);\r\n\r\n this.tracking();\r\n\r\n this.snappingHandler();\r\n\r\n scrollSize = this._trackBox.getItemPosition(id, itemConfigMap, { ...opts, scrollSize: actualScrollSize, fromItemId: id });\r\n\r\n if (this.isInfinity) {\r\n if (this.snapToItem) {\r\n const itemBounds = this._trackBox.getItemBounds(id);\r\n if (!!itemBounds) {\r\n const itemSize = isVertical ? itemBounds.height : itemBounds.width;\r\n switch (this.snapToItemAlign) {\r\n case SnapToItemAligns.CENTER: {\r\n scrollSize += itemSize * .5;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (scrollSize === -1) {\r\n return of([finished, { id, blending, iteration: nextIteration, cb }]).pipe(delay(0));\r\n }\r\n const notChanged = scrollSize === currentScrollSize;\r\n if (!notChanged && iteration < MAX_SCROLL_TO_ITERATIONS) {\r\n this._trackBox.clearDelta();\r\n const params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, behavior: BEHAVIOR_INSTANT as ScrollBehavior,\r\n fireUpdate, blending, force: true, snap: false, normalize: false,\r\n };\r\n scrollerComponent?.scrollTo?.(params);\r\n return of([finished, {\r\n id, iteration: nextIteration, blending,\r\n isLastIteration: nextIteration < MAX_SCROLL_TO_ITERATIONS, cb\r\n }]).pipe(delay(0));\r\n } else {\r\n this._$scrollSize.next(actualScrollSize);\r\n return of([true, { id, blending, iteration: nextIteration, cb }]).pipe(delay(0));\r\n }\r\n } else {\r\n const index = items.findIndex(item => item[trackBy] === id);\r\n if (index > -1) {\r\n const isVertical = this._isVertical, itemSize = this.actualItemSize;\r\n let scrollSize = index * itemSize;\r\n\r\n if (this.isInfinity) {\r\n if (this.snapToItem) {\r\n switch (this.snapToItemAlign) {\r\n case SnapToItemAligns.CENTER: {\r\n scrollSize += itemSize * .5;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n const { width, height } = this._$bounds.getValue() || { width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE },\r\n itemConfigMap = this.itemConfigMap, items = this._$actualItems.getValue(),\r\n opts: IGetItemPositionOptions<IVirtualListItem, IVirtualListCollection> = {\r\n bounds: { width, height }, collection: items, dynamicSize, isVertical: this._isVertical, itemSize, minItemSize, maxItemSize,\r\n bufferSize: this.bufferSize, maxBufferSize: this.maxBufferSize, itemTransform: this.itemTransform,\r\n scrollSize: (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),\r\n snapToItem: this.snapToItem, snapToItemAlign: this.snapToItemAlign,\r\n stickyEnabled: this.stickyEnabled, fromItemId: id, enabledBufferOptimization: this.enabledBufferOptimization,\r\n };\r\n\r\n this._trackBox.clearDelta();\r\n\r\n const viewportSize = (isVertical ? height : width),\r\n { displayItems, totalSize, leftLayoutOffset } = this._trackBox.updateCollection(items, itemConfigMap, {\r\n ...opts, scrollSize, fromItemId: isLastIteration ? undefined : id,\r\n });\r\n\r\n const actualTotalSize = this.isInfinity ? (totalSize + viewportSize) : totalSize;\r\n\r\n const normalizedTotalSize = actualTotalSize < viewportSize ? viewportSize : actualTotalSize;\r\n\r\n scrollerComponent.startLayoutOffset = leftLayoutOffset;\r\n\r\n scrollerComponent.totalSize = normalizedTotalSize;\r\n\r\n this._service.collection = displayItems;\r\n\r\n this.resetBoundsSize(isVertical, normalizedTotalSize);\r\n\r\n this.createDisplayComponentsIfNeed(displayItems);\r\n\r\n this.tracking();\r\n\r\n this.snappingHandler();\r\n\r\n this._$preventScrollSnapping.next(true);\r\n\r\n const params: IScrollToParams = {\r\n [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, fireUpdate: false,\r\n behavior: BEHAVIOR_INSTANT as ScrollBehavior, blending, force: true, snap: false, normalize: false,\r\n };\r\n scrollerComponent?.scrollTo?.(params);\r\n return of([true, { id, blending, iteration: nextIteration, cb }]);\r\n }\r\n }\r\n }\r\n }\r\n return of([finished, { id, iteration: nextIteration, blending, cb }]);\r\n }),\r\n takeUntil(this._$unsubscribe),\r\n tap(([finished, params]) => {\r\n if (!finished) {\r\n this._$scrollToExecutor.next(params as IScrollParams);\r\n return;\r\n }\r\n\r\n if (this._readyForShow) {\r\n this._trackBox.preventScrollSnapping(true);\r\n }\r\n\r\n this._$scrollingTo.next(false);\r\n this._scrollerComponent?.finishedScrollTo();\r\n this._$fireUpdate.next(true);\r\n this.emitScrollEvent(true, false, true);\r\n const scrollParams = params as IScrollParams & { scrollCalled: boolean; };\r\n scrollParams?.cb?.();\r\n }),\r\n delay(100),\r\n tap(([finished]) => {\r\n if (finished) {\r\n this._scrollerComponent?.snapIfNeed();\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n const $itemRenderer = this.$itemRenderer;\r\n\r\n $itemRenderer.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n filter(v => !!v),\r\n tap(v => {\r\n this._$itemRenderer.next(v);\r\n }),\r\n ).subscribe();\r\n\r\n $bounds.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n filter(v => !!v),\r\n tap(value => {\r\n const size: ISize = { width: value!.width, height: value!.height };\r\n this.onViewportChange.emit(objectAsReadonly(size));\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$virtualClick.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this.onItemClick.emit(objectAsReadonly(v));\r\n }),\r\n ).subscribe();\r\n\r\n let isSelectedIdsFirstEmit = 0;\r\n\r\n this._service.$selectedIds.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n if (this._isSingleSelection || (this._isMultiSelection && isSelectedIdsFirstEmit >= 2)) {\r\n const curr = this.selectedIds;\r\n if ((this._isSingleSelection && JSON.stringify(v) !== JSON.stringify(curr)) ||\r\n (isSelectedIdsFirstEmit === 2 && JSON.stringify(v) !== JSON.stringify(curr)) || isSelectedIdsFirstEmit > 2) {\r\n this.onSelect.emit(copyValueAsReadonly(v));\r\n }\r\n }\r\n if (isSelectedIdsFirstEmit < 3) {\r\n isSelectedIdsFirstEmit++;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $selectedIds.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._service.selectedIds = v;\r\n }),\r\n ).subscribe();\r\n\r\n $viewInit.pipe(\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n switchMap(() => {\r\n return this._service.$collapsedIds.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n const curr = this._$collapsedItemIds.getValue();\r\n if ((this._isAccordionCollapse || this._isMultipleCollapse) && (JSON.stringify(v) !== JSON.stringify(curr))) {\r\n this._$collapsedItemIds.next(v);\r\n this.onCollapse.emit(copyValueAsReadonly(v));\r\n }\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$collapsingMode, $items, $itemConfigMap, $trackBy]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(([collapsingMode, items, itemConfigMap, trackBy]) => {\r\n const isAccordion = isCollapseMode(collapsingMode, CollapsingModes.ACCORDION);\r\n if (isAccordion) {\r\n const allGroups: Array<Id> = [];\r\n if (this._isAccordionCollapse) {\r\n for (let i = 0, l = items.length; i < l; i++) {\r\n const item = items[i], id = item[trackBy], collapsable = itemConfigMap?.[id]?.collapsable === true;\r\n if (!collapsable) {\r\n continue;\r\n }\r\n allGroups.push(id);\r\n }\r\n }\r\n if ((this._isAccordionCollapse || this._isMultipleCollapse) && (JSON.stringify(this._$collapsedItemIds.getValue()) !== JSON.stringify(allGroups))) {\r\n this._$collapsedItemIds.next(allGroups);\r\n this.onCollapse.emit(copyValueAsReadonly(allGroups));\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $collapsedItemIds.pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._service.collapsedIds = v;\r\n }),\r\n ).subscribe();\r\n\r\n this.$destroy.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(() => {\r\n debouncedUpdate.dispose();\r\n }),\r\n ).subscribe();\r\n\r\n this._$viewInit.next(true);\r\n\r\n this._$fireUpdate.next(false);\r\n }\r\n\r\n private onAfterResize(update = false) {\r\n this.snappingHandler();\r\n\r\n if (this._isSnappingMethodAdvanced) {\r\n this.updateRegularRenderer();\r\n }\r\n\r\n if (this._readyForShow && update) {\r\n const scroller = this._scrollerComponent;\r\n if (!!scroller) {\r\n const updatebale = this._readyForShow;\r\n if (updatebale) {\r\n this._$fireUpdate.next(false);\r\n }\r\n scroller.refresh(updatebale, updatebale);\r\n }\r\n }\r\n }\r\n\r\n private checkBoundsOfElements() {\r\n const changed = this._trackBox.checkBoundsOfElements();\r\n if (changed) {\r\n const readyForShow = this._readyForShow,\r\n isScrolling = this._$scrollingTo.getValue();\r\n this._trackBox.changes(true, readyForShow && !isScrolling);\r\n }\r\n }\r\n\r\n private snappingHandler() {\r\n const scroller = this._scrollerComponent;\r\n if (!!scroller) {\r\n const isVertical = this.isVertical,\r\n maxScrollSize = Math.round(isVertical ? scroller.scrollHeight ?? 0 : scroller.scrollWidth ?? 0),\r\n scrollSize = isVertical ? scroller.scrollTop ?? 0 : scroller.scrollLeft ?? 0,\r\n actualScrollSize = Math.round(scrollSize);\r\n if (this._readyForShow && !this._isLoading) {\r\n const isScrollEnd = (actualScrollSize >= (maxScrollSize - MIN_PIXELS_FOR_PREVENT_SNAPPING)) || !scroller.scrollable || this._trackBox.isScrollEnd;\r\n if (isScrollEnd) {\r\n this._$isScrollStart.next(false);\r\n this._$isScrollEnd.next(true);\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = true;\r\n } else {\r\n const isScrollStart = (actualScrollSize <= MIN_PIXELS_FOR_PREVENT_SNAPPING);\r\n this._$isScrollStart.next(isScrollStart);\r\n this._$isScrollEnd.next(false);\r\n this._trackBox.isScrollStart = isScrollStart;\r\n this._trackBox.isScrollEnd = false;\r\n }\r\n } else if (!this._readyForShow) {\r\n const snapScrollToStart = this._$actualSnapScrollToStart.getValue(), snapScrollToEnd = this._$actualSnapScrollToEnd.getValue();\r\n if (!snapScrollToStart && snapScrollToEnd) {\r\n this._$isScrollStart.next(false);\r\n this._$isScrollEnd.next(true);\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = true;\r\n } else if (snapScrollToStart && snapScrollToEnd) {\r\n this._$isScrollStart.next(true);\r\n this._$isScrollEnd.next(false);\r\n this._trackBox.isScrollStart = true;\r\n this._trackBox.isScrollEnd = false;\r\n } else {\r\n this._$isScrollStart.next(false);\r\n this._$isScrollEnd.next(false);\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = false;\r\n }\r\n }\r\n }\r\n };\r\n\r\n private emitScrollEvent(isScrollEnd: boolean = false, update: boolean = true, userAction: boolean = false) {\r\n if (!this._readyForShow) {\r\n return;\r\n }\r\n const scrollerEl = this._$scroller.getValue()?.nativeElement, scrollerComponent = this._scrollerComponent;\r\n if (scrollerEl && scrollerComponent) {\r\n const isVertical = this._isVertical, scrollSize = (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),\r\n maxScrollSize = (isVertical ? scrollerComponent.scrollHeight : scrollerComponent.scrollWidth),\r\n bounds = this._$bounds.getValue() || { x: 0, y: 0, width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE };\r\n const itemsRange = formatActualDisplayItems(this._service.displayItems, this._$actualScrollStartOffset.getValue(), this._$actualScrollEndOffset.getValue(),\r\n scrollSize, isVertical, bounds),\r\n event = new ScrollEvent({\r\n direction: this._scrollerComponent?.scrollDirection ?? 0, container: scrollerEl,\r\n list: this._$list.getValue()!.nativeElement, delta: this._trackBox.delta,\r\n deltaOfNewItems: this._trackBox.deltaOfNewItems, isVertical,\r\n scrollSize,\r\n itemsRange,\r\n isEnd: !scrollerComponent.scrollable || this._trackBox.isSnappedToEnd || (Math.round(scrollSize) === Math.round(maxScrollSize)),\r\n userAction,\r\n });\r\n if (update) {\r\n this._$scroll.next(event);\r\n }\r\n\r\n if (isScrollEnd) {\r\n this.onScrollEnd.emit(event);\r\n } else {\r\n this.onScroll.emit(event);\r\n }\r\n }\r\n }\r\n\r\n private getIsSnappingMethodAdvanced(m?: SnappingMethod) {\r\n const method = m || this.snappingMethod;\r\n return isSnappingMethodAdvenced(method);\r\n }\r\n\r\n private getIsNoneSelection(m?: SelectingMode) {\r\n const mode = m || this.selectingMode;\r\n return isSelectMode(mode, SelectingModes.NONE);\r\n }\r\n\r\n private getIsSingleSelection(m?: SelectingMode) {\r\n const mode = m || this.selectingMode;\r\n return isSelectMode(mode, SelectingModes.SELECT);\r\n }\r\n\r\n private getIsMultiSelection(m?: SelectingMode) {\r\n const mode = m || this.selectingMode;\r\n return isSelectMode(mode, SelectingModes.MULTI_SELECT);\r\n }\r\n\r\n private getIsNoneCollapse(m?: CollapsingMode) {\r\n const mode = m || this.collapsingMode;\r\n return isCollapseMode(mode, CollapsingModes.NONE);\r\n }\r\n\r\n private getIsMultipleCollapse(m?: CollapsingMode) {\r\n const mode = m || this.collapsingMode;\r\n return isCollapseMode(mode, CollapsingModes.MULTI_COLLAPSE);\r\n }\r\n\r\n private getIsAccordionCollapse(m?: CollapsingMode) {\r\n const mode = m || this.collapsingMode;\r\n return isCollapseMode(mode, CollapsingModes.ACCORDION);\r\n }\r\n\r\n private getIsVertical(d?: Direction) {\r\n const dir = d || this.direction;\r\n return isDirection(dir, Directions.VERTICAL);\r\n }\r\n\r\n private getIsLazy(m?: CollectionMode) {\r\n const mode = m || this.collectionMode;\r\n return isCollectionMode(mode, CollectionModes.LAZY);\r\n }\r\n\r\n private createDisplayComponentsIfNeed(displayItems: IRenderVirtualListCollection | null) {\r\n if (!displayItems || !this._listContainerRef) {\r\n this._trackBox.setDisplayObjectIndexMapById({});\r\n return;\r\n }\r\n\r\n if (this._isSnappingMethodAdvanced && this.stickyEnabled) {\r\n if (this._snappedDisplayComponents.length < MAX_REGULAR_SNAPED_COMPONENTS && !!this._snapContainerRef) {\r\n while (this._snappedDisplayComponents.length < MAX_REGULAR_SNAPED_COMPONENTS) {\r\n const comp = this._snapContainerRef.createComponent(this._itemComponentClass);\r\n comp.instance.renderer = this._$itemRenderer.getValue();\r\n comp.instance.regular = true;\r\n this._snappedDisplayComponents.push(comp);\r\n this._trackBox.snappedDisplayComponents = this._snappedDisplayComponents;\r\n this._resizeSnappedObserver = new ResizeObserver(this._resizeSnappedComponentHandler);\r\n this._resizeSnappedObserver.observe(comp.instance.element);\r\n }\r\n }\r\n }\r\n\r\n this._trackBox.items = displayItems;\r\n\r\n const listContainerRef = this._listContainerRef;\r\n\r\n const maxLength = displayItems.length, components = this._displayComponents;\r\n\r\n if (!!listContainerRef) {\r\n const doMap: { [id: number]: number } = {};\r\n let i = 0;\r\n for (let l = components.length; i < l; i++) {\r\n const item = components[i];\r\n if (!!item) {\r\n const id = item.instance.id;\r\n item.instance.renderer = this._$itemRenderer.getValue();\r\n doMap[id] = i;\r\n }\r\n }\r\n while (components.length < maxLength) {\r\n const comp = listContainerRef.createComponent(this._itemComponentClass);\r\n const id = comp.instance.id;\r\n comp.instance.renderer = this._$itemRenderer.getValue();\r\n doMap[id] = i;\r\n components.push(comp);\r\n i++;\r\n }\r\n this._trackBox.setDisplayObjectIndexMapById(doMap);\r\n }\r\n }\r\n\r\n private updateRegularRenderer() {\r\n this._resizeSnappedComponentHandler();\r\n }\r\n\r\n /**\r\n * Tracking by id\r\n */\r\n private tracking() {\r\n this._trackBox.track();\r\n }\r\n\r\n private resetBoundsSize(isVertical: boolean, totalSize: number) {\r\n const l = this._$list.getValue(), prop = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME,\r\n size = totalSize;\r\n if (!!l && parseInt(l.nativeElement.style[prop]) !== size) {\r\n l.nativeElement.style[prop] = `${size}${PX}`;\r\n }\r\n }\r\n\r\n /**\r\n * Returns the bounds of an element with a given id\r\n */\r\n getItemBounds(id: Id): ISize | null {\r\n return this._service.getItemBounds(id);\r\n }\r\n\r\n /**\r\n * Focus an list item by a given id.\r\n */\r\n focus(id: Id, align: FocusAlignment = FocusAlignments.NONE) {\r\n this._elementRef.nativeElement.focus();\r\n this._service.focusById(id, align, this.scrollBehavior);\r\n }\r\n\r\n /**\r\n * The method scrolls the list to the element with the given `id` and returns the value of the scrolled area.\r\n */\r\n scrollTo(id: Id, cb: (() => void) | null = null, options: IScrollOptions | null = null) {\r\n const behavior = options?.behavior ?? BEHAVIOR_INSTANT,\r\n blending = options?.blending ?? false,\r\n focused = options?.focused ?? true,\r\n delay = options?.delay ?? 0,\r\n iteration = options?.iteration ?? 0;\r\n validateId(id);\r\n validateScrollBehavior(behavior);\r\n validateIteration(iteration);\r\n const actualIteration = validateScrollIteration(iteration);\r\n this._elementRef.nativeElement.focus();\r\n if (!this._scrollerComponent?.scrollable && !this.isInfinity) {\r\n this.scrollToFinalize(id, focused, cb);\r\n return;\r\n }\r\n this._$scrollTo.next({\r\n id, behavior, blending, delay, iteration: actualIteration, isLastIteration: actualIteration === MAX_SCROLL_TO_ITERATIONS, cb: () => {\r\n this.scrollToFinalize(id, focused, cb);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Scrolls the scroll area to the first item in the collection.\r\n */\r\n scrollToStart(cb: (() => void) | null = null, options: IScrollOptions | null = null) {\r\n const scroller = this._scrollerComponent;\r\n if (!!scroller) {\r\n const scrollSize = this.isVertical ? scroller.scrollTop : scroller.scrollLeft;\r\n if (scrollSize === 0) {\r\n return;\r\n }\r\n scroller.stopScrolling();\r\n }\r\n const behavior = options?.behavior ?? BEHAVIOR_INSTANT,\r\n blending = options?.blending ?? false,\r\n focused = options?.focused ?? true,\r\n delay = options?.delay ?? 0,\r\n iteration = options?.iteration ?? 0;\r\n validateScrollBehavior(behavior);\r\n validateIteration(iteration);\r\n const trackBy = this.trackBy, items = this._$actualItems.getValue(), firstItem = items.length > 0 ? items[0] ?? null : null, id = firstItem?.[trackBy] ?? null,\r\n actualIteration = validateScrollIteration(iteration);\r\n if (!!firstItem) {\r\n this._elementRef.nativeElement.focus();\r\n this._$scrollTo.next({\r\n id, behavior, blending, delay, iteration: actualIteration, isLastIteration: actualIteration === MAX_SCROLL_TO_ITERATIONS, cb: () => {\r\n this._$isScrollStart.next(true);\r\n this._trackBox.isScrollStart = true;\r\n this._trackBox.isScrollEnd = false;\r\n this._$fireUpdate.next(true);\r\n this.scrollToFinalize(id, focused, cb);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * @deprecated\r\n * The scrollToEndItem method is deprecated. Use the scrollToEnd method.\r\n */\r\n scrollToEndItem(cb?: () => void, options?: IScrollOptions) {\r\n throw Error('The scrollToEndItem method is deprecated. Use the scrollToEnd method.');\r\n }\r\n\r\n /**\r\n * Scrolls the list to the end of the content size.\r\n */\r\n scrollToEnd(cb: (() => void) | null = null, options: IScrollOptions | null = null) {\r\n const scroller = this._scrollerComponent;\r\n if (!!scroller) {\r\n const isVertical = this.isVertical,\r\n scrollSize = isVertical ? scroller.scrollTop : scroller.scrollLeft,\r\n maxScrollSize = isVertical ? scroller.scrollHeight : scroller.scrollTop;\r\n if (scrollSize === maxScrollSize) {\r\n return;\r\n }\r\n scroller.stopScrolling();\r\n }\r\n const behavior = options?.behavior ?? BEHAVIOR_INSTANT,\r\n blending = options?.blending ?? false,\r\n focused = options?.focused ?? true,\r\n delay = options?.delay ?? 0,\r\n iteration = options?.iteration ?? 0;\r\n validateScrollBehavior(behavior);\r\n validateIteration(iteration);\r\n const trackBy = this.trackBy, items = this._$actualItems.getValue(), latItem = items[items.length > 0 ? items.length - 1 : 0], id = latItem?.[trackBy] ?? null,\r\n actualIteration = validateScrollIteration(iteration);\r\n if (latItem === null) {\r\n return;\r\n }\r\n this._elementRef.nativeElement.focus();\r\n if (!this._scrollerComponent?.scrollable) {\r\n this.scrollToFinalize(id, focused, cb);\r\n return;\r\n }\r\n this._$scrollTo.next({\r\n id, behavior, blending, delay, iteration: actualIteration, isLastIteration: actualIteration === MAX_SCROLL_TO_ITERATIONS, cb: () => {\r\n this._$isScrollEnd.next(true);\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = true;\r\n this._$fireUpdate.next(true);\r\n this.scrollToFinalize(id, focused, cb);\r\n }\r\n });\r\n }\r\n\r\n private scrollToFinalize(id: Id, focused: boolean, cb: (() => void) | null) {\r\n if (focused) {\r\n const el = this._service.getFocusedElementById(id);\r\n if (!!el) {\r\n this._service.focus(el, FocusAlignments.NONE);\r\n }\r\n }\r\n if (typeof cb === 'function') {\r\n cb?.();\r\n }\r\n }\r\n\r\n protected cleanup() {\r\n const displayItems: IRenderVirtualListCollection = [];\r\n this._service.collection = displayItems;\r\n this.createDisplayComponentsIfNeed(displayItems);\r\n this.tracking();\r\n this.emitScrollEvent(true, false, false);\r\n }\r\n\r\n /**\r\n * Force clearing the cache.\r\n */\r\n protected cacheClean() {\r\n this._cached = false;\r\n if (this.dynamicSize) {\r\n this._trackBox.cacheClean();\r\n }\r\n const prerenderContainer = this._prerender;\r\n if (!!prerenderContainer) {\r\n prerenderContainer.clear();\r\n prerenderContainer.off();\r\n }\r\n this._$collapsedItemIds.next([]);\r\n this._$isScrollStart.next(true);\r\n this._$isScrollEnd.next(false);\r\n this._$totalSize.next(0);\r\n this._$scrollSize.next(0);\r\n const scroller = this._scrollerComponent;\r\n if (!!scroller) {\r\n scroller.reset();\r\n }\r\n }\r\n\r\n /**\r\n * @deprecated\r\n * The stopSnappingScrollToEnd method is deprecated. Use the preventSnapping method.\r\n */\r\n stopSnappingScrollToEnd() {\r\n throw Error('The stopSnappingScrollToEnd method is deprecated. Use the preventSnapping method.');\r\n }\r\n\r\n /**\r\n * Prevents the list from snapping to its start or end edge.\r\n */\r\n preventSnapping() {\r\n if (!this._readyForShow) {\r\n return;\r\n }\r\n const scroller = this._scrollerComponent;\r\n this._$isScrollStart.next(false);\r\n this._$isScrollEnd.next(false);\r\n this._trackBox.preventScrollSnapping(true);\r\n if (scroller) {\r\n scroller.stopScrolling();\r\n }\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n this.dispose();\r\n }\r\n\r\n private dispose() {\r\n this._$destroy.next();\r\n\r\n const updateId = this._updateId;\r\n if (updateId !== undefined) {\r\n cancelAnimationFrame(updateId);\r\n this._updateId = undefined;\r\n }\r\n\r\n if (this._service) {\r\n this._service.dispose();\r\n }\r\n\r\n if (!!this._trackBox) {\r\n this._trackBox.dispose();\r\n }\r\n\r\n if (!!this._resizeSnappedObserver) {\r\n this._resizeSnappedObserver.disconnect();\r\n }\r\n\r\n if (!!this._snappedDisplayComponents) {\r\n while (this._snappedDisplayComponents.length > 0) {\r\n const comp = this._snappedDisplayComponents.shift();\r\n comp?.destroy();\r\n }\r\n }\r\n\r\n if (this._displayComponents) {\r\n while (this._displayComponents.length > 0) {\r\n const comp = this._displayComponents.shift();\r\n comp?.destroy();\r\n }\r\n }\r\n }\r\n}\r\n","<div aria-live=\"polite\" aria-atomic=\"true\" class=\"ngvl__screen-reader\">\r\n {{ $screenReaderFormattedMessage | async }}\r\n</div>\r\n\r\n<ng-prerender-container #prerender [bounds]=\"($bounds | async)!\" [direction]=\"($direction | async)!\"\r\n [dynamic]=\"($dynamicSize | async)!\" [divides]=\"($divides | async)!\" [isVertical]=\"($isVertical | async)!\"\r\n [itemSize]=\"($actualItemSize | async)!\" [trackBy]=\"($trackBy | async)!\" [itemRenderer]=\"($itemRenderer | async)!\"\r\n [startOffset]=\"($startOffset | async)!\" [endOffset]=\"($endOffset | async)!\"\r\n [scrollbarEnabled]=\"(scroller.$scrollbarShow | async)!\"\r\n [enabled]=\"($prerenderEnabled | async)!\"></ng-prerender-container>\r\n\r\n<ng-container *ngIf=\"($stickyEnabled | async)!\">\r\n <div localeSensitive [langTextDir]=\"($langTextDir | async)!\" #snappedContainer class=\"ngvl__snapped-container\"\r\n [ngClass]=\"($classes | async)\">\r\n <div #snapped part=\"snapped-item\" class=\"ngvl__list-snapper\">\r\n <ng-container #snapRendererContainer></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-scroller #scroller class=\"ngvl__list-scroller\" [classes]=\"($classes | async)!\"\r\n [startOffset]=\"($startOffset | async)!\" [endOffset]=\"($endOffset | async)!\"\r\n [alignmentStartOffset]=\"($alignmentScrollStartOffset | async)!\"\r\n [alignmentEndOffset]=\"($alignmentScrollEndOffset | async)!\" [direction]=\"($direction | async)!\"\r\n [scrollbarThumbRenderer]=\"($scrollbarThumbRenderer | async)!\" [isInfinity]=\"($isInfinity | async)!\"\r\n [scrollbarThickness]=\"($scrollbarThickness | async)!\" [scrollbarThumbParams]=\"($scrollbarThumbParams | async)!\"\r\n [animationParams]=\"($animationParams | async)!\" [focusedElement]=\"($focusedElement | async)!\"\r\n [loading]=\"($loading | async)!\" [overscrollEnabled]=\"($overscrollEnabled | async)!\"\r\n [snappingDistance]=\"($snappingDistance | async)!\" [overlappingScrollbar]=\"($overlappingScrollbar | async)!\"\r\n [scrollbarEnabled]=\"($actualScrollbarEnabled | async)!\" [scrollbarInteractive]=\"($scrollbarInteractive | async)!\"\r\n [snapToItem]=\"($snapToItem | async)!\" [snapToItemAlign]=\"($snapToItemAlign | async)!\"\r\n [scrollbarMinSize]=\"($scrollbarMinSize | async)!\" [scrollBehavior]=\"($scrollBehavior | async)!\"\r\n [scrollingSettings]=\"($scrollingSettings | async)!\" [scrollingOneByOne]=\"($scrollingOneByOne | async)!\"\r\n [motionBlur]=\"($motionBlur | async)!\" [maxMotionBlur]=\"($maxMotionBlur | async)!\"\r\n [motionBlurEnabled]=\"($motionBlurEnabled | async)!\">\r\n <ng-container #renderersContainer></ng-container>\r\n</ng-scroller>","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { LocaleSensitiveDirective } from './locale-sensitive.directive';\r\n\r\n@NgModule({\r\n declarations: [LocaleSensitiveDirective],\r\n exports: [LocaleSensitiveDirective],\r\n imports: [CommonModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class LocaleSensitiveModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { VirtualClickDirective } from './virtual-click.directive';\r\n\r\n@NgModule({\r\n declarations: [VirtualClickDirective],\r\n exports: [VirtualClickDirective],\r\n imports: [CommonModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class VirtualClickModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgVirtualListItemComponent } from './ng-virtual-list-item.component';\r\nimport { VirtualClickModule } from '../../directives';\r\n\r\n@NgModule({\r\n declarations: [NgVirtualListItemComponent],\r\n exports: [NgVirtualListItemComponent],\r\n imports: [CommonModule, VirtualClickModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgVirtualListItemModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgScrollBarComponent } from './ng-scroll-bar.component';\r\n\r\n@NgModule({\r\n declarations: [NgScrollBarComponent],\r\n exports: [NgScrollBarComponent],\r\n imports: [CommonModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgScrollBarModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgScrollerComponent } from './ng-scroller.component';\r\nimport { LocaleSensitiveModule } from '../../directives';\r\nimport { NgScrollBarModule } from '../ng-scroll-bar/ng-scroll-bar.module';\r\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\r\n\r\n@NgModule({\r\n declarations: [NgScrollerComponent],\r\n exports: [NgScrollerComponent],\r\n imports: [CommonModule, NgScrollBarModule, LocaleSensitiveModule, CdkScrollableModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgScrollerModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { VirtualClickModule } from '../../../../directives';\r\nimport { NgPrerenderVirtualListItemComponent } from './ng-prerender-list-item.component';\r\n\r\n@NgModule({\r\n declarations: [NgPrerenderVirtualListItemComponent],\r\n exports: [NgPrerenderVirtualListItemComponent],\r\n imports: [CommonModule, VirtualClickModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgPrerenderVirtualListItemModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgPrerenderScrollerComponent } from './ng-prerender-scroller.component';\r\nimport { LocaleSensitiveModule } from '../../../../directives';\r\n\r\n@NgModule({\r\n declarations: [NgPrerenderScrollerComponent],\r\n exports: [NgPrerenderScrollerComponent],\r\n imports: [CommonModule, LocaleSensitiveModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgPrerenderScrollerModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgPrerenderVirtualListItemModule } from '../ng-prerender-list-item/ng-prerender-list-item.module';\r\nimport { NgPrerenderScrollerModule } from '../ng-prerender-scroller/ng-prerender-scroller.module';\r\nimport { NgPrerenderList } from './ng-prerender-list.component';\r\n\r\n@NgModule({\r\n declarations: [NgPrerenderList],\r\n exports: [NgPrerenderList],\r\n imports: [CommonModule, NgPrerenderVirtualListItemModule, NgPrerenderScrollerModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgPrerenderListModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgPrerenderContainer } from './ng-prerender-container.component';\r\nimport { NgPrerenderListModule } from './components/ng-prerender-list/ng-prerender-list.module';\r\n\r\n@NgModule({\r\n declarations: [NgPrerenderContainer],\r\n exports: [NgPrerenderContainer],\r\n imports: [CommonModule, NgPrerenderListModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgPrerenderContainerModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgVirtualListComponent } from './ng-virtual-list.component';\r\nimport { LocaleSensitiveModule } from './directives';\r\nimport { NgVirtualListItemModule } from './components/ng-list-item/ng-virtual-list-item.module';\r\nimport { NgScrollerModule } from './components/ng-scroller/ng-scroller.module';\r\nimport { NgPrerenderContainerModule } from './components/ng-prerender-container/ng-prerender-container.module';\r\n\r\n@NgModule({\r\n declarations: [NgVirtualListComponent],\r\n exports: [NgVirtualListComponent],\r\n imports: [CommonModule, NgVirtualListItemModule, NgScrollerModule, NgPrerenderContainerModule, LocaleSensitiveModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgVirtualListModule { }\r\n","import { PX } from '../const';\r\nimport { IItemTransformation } from '../interfaces';\r\nimport { IRenderVirtualListItemConfig, IRenderVirtualListItemMeasures } from '../models';\r\nimport { Color, ItemTransform } from '../types';\r\n\r\nconst UNSET = 'unset';\r\n\r\nexport interface ILintearOptions {\r\n /**\r\n * Depth Of Field. Default value is `null`.\r\n */\r\n dof?: number;\r\n /**\r\n * Fog color. Default value is `null`.\r\n */\r\n fogColor?: Color;\r\n /**\r\n * Fog weight. Default value is `null`.\r\n */\r\n fogWeight?: number;\r\n /**\r\n * Spacing between items. Default value is `0.5`.\r\n */\r\n spacingBetweenItems?: number;\r\n}\r\n\r\n/**\r\n * linear\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/transformations/linear.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const linear = (options?: ILintearOptions): ItemTransform => {\r\n const dof = options?.dof ?? null,\r\n fogColor = options?.fogColor ?? null,\r\n fogWeight = options?.fogWeight ?? null,\r\n spacingBetweenItems = options?.spacingBetweenItems ?? .5;\r\n return (index: number, measures: IRenderVirtualListItemMeasures,\r\n config: IRenderVirtualListItemConfig): IItemTransformation => {\r\n const result: IItemTransformation = {\r\n x: 0,\r\n y: 0,\r\n z: 0,\r\n rotationX: 0,\r\n rotationY: 0,\r\n rotationZ: 0,\r\n scaleX: 1,\r\n scaleY: 1,\r\n scaleZ: 1,\r\n opacity: 1,\r\n zIndex: 1,\r\n },\r\n isVertical = config.isVertical,\r\n boundsSize = measures.boundsSize,\r\n scrollSize = measures.scrollSize,\r\n itemSize = isVertical ? measures.height : measures.width,\r\n itemSizeHalf = itemSize * .5,\r\n boundsSizeHalf = boundsSize * .5,\r\n xx = isVertical ? measures.x : (measures.x + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize),\r\n yy = isVertical ? (measures.y + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize) : measures.y,\r\n pxOffset = isVertical ? boundsSizeHalf : xx, px = isVertical ? 1 : (pxOffset / boundsSizeHalf),\r\n pyOffset = isVertical ? yy : boundsSizeHalf, py = isVertical ? (pyOffset / boundsSizeHalf) : 1;\r\n\r\n if (config.snapped || config.snappedOut) {\r\n result.x = measures.x;\r\n result.y = measures.y;\r\n result.zIndex = config.zIndex;\r\n } else {\r\n result.x = isVertical ? xx : (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (xx * spacingBetweenItems));\r\n result.y = isVertical ? (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (yy * spacingBetweenItems)) : yy;\r\n const s = (isVertical ? Math.abs(yy) : Math.abs(xx)) / boundsSize, scale = Math.pow(1 - s * .15, 4);\r\n result.zIndex = 100 - Math.floor(Math.abs(isVertical ? py : px) * 100);\r\n if (!!dof) {\r\n const blur = (s * dof) - 1,\r\n actualBlur = blur > 0 ? blur : 0;\r\n result.filter = actualBlur ? `blur(${actualBlur}${PX})` : UNSET;\r\n }\r\n if (!!fogColor) {\r\n result.opacity = fogWeight ? Math.pow(scale, fogWeight) : scale;\r\n result.blendColor = fogColor;\r\n }\r\n }\r\n return result;\r\n }\r\n}","import { PX } from '../const';\r\nimport { IItemTransformation } from '../interfaces';\r\nimport { IRenderVirtualListItemConfig, IRenderVirtualListItemMeasures } from '../models';\r\nimport { Color, ItemTransform } from '../types';\r\n\r\nconst UNSET = 'unset';\r\n\r\nexport interface IEventHorizonOptions {\r\n /**\r\n * Depth Of Field. Default value is `null`.\r\n */\r\n dof?: number;\r\n /**\r\n * Fog color. Default value is `null`.\r\n */\r\n fogColor?: Color;\r\n /**\r\n * Fog weight. Default value is `null`.\r\n */\r\n fogWeight?: number;\r\n /**\r\n * Spacing between items. Default value is `0.5`.\r\n */\r\n spacingBetweenItems?: number;\r\n}\r\n\r\n/**\r\n * eventHorizon\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/transformations/event-horizon.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const eventHorizon = (options?: IEventHorizonOptions): ItemTransform => {\r\n const dof = options?.dof ?? null,\r\n fogColor = options?.fogColor ?? null,\r\n fogWeight = options?.fogWeight ?? null,\r\n spacingBetweenItems = options?.spacingBetweenItems ?? .025;\r\n return (index: number, measures: IRenderVirtualListItemMeasures,\r\n config: IRenderVirtualListItemConfig): IItemTransformation => {\r\n const result: IItemTransformation = {\r\n x: 0,\r\n y: 0,\r\n z: 0,\r\n rotationX: 0,\r\n rotationY: 0,\r\n rotationZ: 0,\r\n scaleX: 1,\r\n scaleY: 1,\r\n scaleZ: 1,\r\n opacity: 1,\r\n zIndex: 1,\r\n },\r\n isVertical = config.isVertical,\r\n boundsSize = measures.boundsSize,\r\n scrollSize = measures.scrollSize,\r\n itemSize = isVertical ? measures.height : measures.width,\r\n itemSizeHalf = itemSize * .5,\r\n boundsSizeHalf = boundsSize * .5,\r\n xx = isVertical ? measures.x : (measures.x + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize),\r\n yy = isVertical ? (measures.y + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize) : measures.y,\r\n pxOffset = isVertical ? boundsSizeHalf : xx, px = isVertical ? 1 : (pxOffset / boundsSizeHalf),\r\n pyOffset = isVertical ? yy : boundsSizeHalf, py = isVertical ? (pyOffset / boundsSizeHalf) : 1;\r\n\r\n if (config.snapped || config.snappedOut) {\r\n result.x = measures.x;\r\n result.y = measures.y;\r\n result.zIndex = config.zIndex;\r\n } else {\r\n result.x = isVertical ? xx : (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (xx * Math.pow(px, 2) * spacingBetweenItems));\r\n result.y = isVertical ? (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (yy * Math.pow(py, 2) * spacingBetweenItems)) : yy;\r\n const s = (isVertical ? Math.abs(yy) : Math.abs(xx)) / boundsSize, scale = Math.pow(1 - s * .15, 4);\r\n result.zIndex = 100 - Math.floor(Math.abs(isVertical ? py : px) * 100);\r\n if (!!dof) {\r\n const blur = (s * dof) - 1,\r\n actualBlur = blur > 0 ? blur : 0;\r\n result.filter = actualBlur ? `blur(${actualBlur}${PX})` : UNSET;\r\n }\r\n if (!!fogColor) {\r\n result.opacity = fogWeight ? Math.pow(scale, fogWeight) : scale;\r\n result.blendColor = fogColor;\r\n }\r\n }\r\n return result;\r\n }\r\n}","import { PX } from '../const';\r\nimport { IItemTransformation } from '../interfaces';\r\nimport { IRenderVirtualListItemConfig, IRenderVirtualListItemMeasures } from '../models';\r\nimport { Color, ItemTransform } from '../types';\r\n\r\nconst UNSET = 'unset',\r\n B_LIMIT = 0.5;\r\n\r\nexport interface IDeckOfCardsOptions {\r\n /**\r\n * Depth Of Field. Default value is `null`.\r\n */\r\n dof?: number;\r\n /**\r\n * Fog color. Default value is `null`.\r\n */\r\n fogColor?: Color;\r\n /**\r\n * Fog weight. Default value is `null`.\r\n */\r\n fogWeight?: number;\r\n /**\r\n * Spacing between items. Default value is `0.5`.\r\n */\r\n spacingBetweenItems?: number;\r\n /**\r\n * Depth. Default value is `0.15`.\r\n */\r\n depth?: number;\r\n /**\r\n * Scale. Default value is `0.15`.\r\n */\r\n scale?: number;\r\n /**\r\n * Scale X. Default value is `null`.\r\n */\r\n scaleX?: number | null;\r\n /**\r\n * Scale Y. Default value is `null`.\r\n */\r\n scaleY?: number | null;\r\n /**\r\n * Depth exponent. Default value is `4`.\r\n */\r\n depthPow?: number;\r\n /**\r\n * Sinusoidal distribution. Default value is `false`.\r\n */\r\n sineWave?: boolean;\r\n}\r\n\r\n/**\r\n * deckOfCards\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/transformations/deck-of-cards.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const deckOfCards = (options?: IDeckOfCardsOptions): ItemTransform => {\r\n const dof = options?.dof ?? null,\r\n fogColor = options?.fogColor ?? null,\r\n fogWeight = options?.fogWeight ?? null,\r\n spacingBetweenItems = options?.spacingBetweenItems ?? .5,\r\n depth = options?.depth ?? .15,\r\n scaleValue = options?.scale ?? .15,\r\n scaleXValue = options?.scaleX ?? null,\r\n scaleYValue = options?.scaleY ?? null,\r\n depthPow = options?.depthPow ?? 4,\r\n sineWave = options?.sineWave ?? false;\r\n return (index: number, measures: IRenderVirtualListItemMeasures,\r\n config: IRenderVirtualListItemConfig): IItemTransformation => {\r\n const result: IItemTransformation = {\r\n x: 0,\r\n y: 0,\r\n z: 0,\r\n rotationX: 0,\r\n rotationY: 0,\r\n rotationZ: 0,\r\n scaleX: 1,\r\n scaleY: 1,\r\n scaleZ: 1,\r\n opacity: 1,\r\n zIndex: 1,\r\n },\r\n isVertical = config.isVertical,\r\n boundsSize = measures.boundsSize,\r\n scrollSize = measures.scrollSize,\r\n itemSize = isVertical ? measures.height : measures.width,\r\n itemSizeHalf = itemSize * .5,\r\n boundsSizeHalf = boundsSize * .5,\r\n xx = isVertical ? measures.x : (measures.x + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize),\r\n yy = isVertical ? (measures.y + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize) : measures.y,\r\n pxOffset = isVertical ? boundsSizeHalf : xx, px = isVertical ? 1 : (pxOffset / boundsSizeHalf),\r\n pyOffset = isVertical ? yy : boundsSizeHalf, py = isVertical ? (pyOffset / boundsSizeHalf) : 1;\r\n\r\n if (config.snapped || config.snappedOut) {\r\n result.x = measures.x;\r\n result.y = measures.y;\r\n result.zIndex = config.zIndex;\r\n } else {\r\n result.x = isVertical ? xx : (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (xx * spacingBetweenItems * (sineWave ? Math.abs(Math.sin(px)) : 1)));\r\n result.y = isVertical ? (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (yy * spacingBetweenItems * (sineWave ? Math.abs(Math.sin(py)) : 1))) : yy;\r\n const s = (isVertical ? Math.abs(yy) : Math.abs(xx)) / boundsSize, scale = Math.pow(1 - s * scaleValue, depthPow),\r\n scaleX = scaleXValue !== null ? Math.pow(1 - s * scaleXValue, depthPow) : null,\r\n scaleY = scaleYValue !== null ? Math.pow(1 - s * scaleYValue, depthPow) : null,\r\n dofScale = Math.pow(1 - s * depth, depthPow);\r\n if (scaleXValue === null && scaleYValue === null) {\r\n result.scaleX = result.scaleY = scale;\r\n } else {\r\n result.scaleX = scaleX !== null ? scaleX : 1;\r\n result.scaleY = scaleY !== null ? scaleY : 1;\r\n }\r\n result.zIndex = 100 - Math.floor(Math.abs(isVertical ? py : px) * 100);\r\n if (!!dof) {\r\n const blur = (s * dof) - B_LIMIT,\r\n actualBlur = blur > 0 ? blur : 0;\r\n result.filter = actualBlur ? `blur(${actualBlur}${PX})` : UNSET;\r\n }\r\n if (!!fogColor) {\r\n result.opacity = fogWeight ? Math.pow(dofScale, fogWeight) : scale;\r\n result.blendColor = fogColor;\r\n }\r\n }\r\n return result;\r\n }\r\n}","import { PX } from '../const';\r\nimport { IItemTransformation } from '../interfaces';\r\nimport { IRenderVirtualListItemConfig, IRenderVirtualListItemMeasures } from '../models';\r\nimport { Color, ItemTransform } from '../types';\r\n\r\nconst UNSET = 'unset',\r\n B_LIMIT = 0.5;\r\n\r\nexport interface IDeckOfCards3DOptions {\r\n /**\r\n * Depth Of Field. Default value is `null`.\r\n */\r\n dof?: number;\r\n /**\r\n * Fog color. Default value is `null`.\r\n */\r\n fogColor?: Color;\r\n /**\r\n * Fog weight. Default value is `null`.\r\n */\r\n fogWeight?: number;\r\n /**\r\n * Spacing between items. Default value is `0.5`.\r\n */\r\n spacingBetweenItems?: number;\r\n /**\r\n * Angle of inclination. Default value is `1`.\r\n */\r\n angle?: number;\r\n /**\r\n * Depth. Default value is `0.15`.\r\n */\r\n depth?: number;\r\n /**\r\n * Scale. Default value is `0.15`.\r\n */\r\n scale?: number;\r\n /**\r\n * Scale X. Default value is `null`.\r\n */\r\n scaleX?: number | null;\r\n /**\r\n * Scale Y. Default value is `null`.\r\n */\r\n scaleY?: number | null;\r\n /**\r\n * Depth exponent. Default value is `4`.\r\n */\r\n depthPow?: number;\r\n /**\r\n * Sinusoidal distribution. Default value is `false`.\r\n */\r\n sineWave?: boolean;\r\n}\r\n\r\n/**\r\n * deckOfCards3D\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/transformations/deck-of-cards-3d.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const deckOfCards3D = (options?: IDeckOfCards3DOptions): ItemTransform => {\r\n const dof = options?.dof ?? null,\r\n fogColor = options?.fogColor ?? null,\r\n fogWeight = options?.fogWeight ?? null,\r\n spacingBetweenItems = options?.spacingBetweenItems ?? .5,\r\n angle = options?.angle ?? 1,\r\n depth = options?.depth ?? .15,\r\n scaleValue = options?.scale ?? .15,\r\n scaleXValue = options?.scaleX ?? null,\r\n scaleYValue = options?.scaleY ?? null,\r\n depthPow = options?.depthPow ?? 4,\r\n sineWave = options?.sineWave ?? false;\r\n return (index: number, measures: IRenderVirtualListItemMeasures,\r\n config: IRenderVirtualListItemConfig): IItemTransformation => {\r\n const result: IItemTransformation = {\r\n x: 0,\r\n y: 0,\r\n z: 0,\r\n rotationX: 0,\r\n rotationY: 0,\r\n rotationZ: 0,\r\n scaleX: 1,\r\n scaleY: 1,\r\n scaleZ: 1,\r\n opacity: 1,\r\n zIndex: 1,\r\n },\r\n isVertical = config.isVertical,\r\n boundsSize = measures.boundsSize,\r\n scrollSize = measures.scrollSize,\r\n itemSize = isVertical ? measures.height : measures.width,\r\n itemSizeHalf = itemSize * .5,\r\n boundsSizeHalf = boundsSize * .5,\r\n xx = isVertical ? measures.x : (measures.x + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize),\r\n yy = isVertical ? (measures.y + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize) : measures.y,\r\n pxOffset = isVertical ? boundsSizeHalf : xx, px = isVertical ? 1 : (pxOffset / boundsSizeHalf),\r\n pyOffset = isVertical ? yy : boundsSizeHalf, py = isVertical ? (pyOffset / boundsSizeHalf) : 1;\r\n if (config.snapped || config.snappedOut) {\r\n result.x = measures.x;\r\n result.y = measures.y;\r\n result.zIndex = config.zIndex;\r\n } else {\r\n result.x = isVertical ? xx : (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (xx * spacingBetweenItems * (sineWave ? Math.abs(Math.sin(px)) : 1)));\r\n result.y = isVertical ? (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (yy * spacingBetweenItems * (sineWave ? Math.abs(Math.sin(py)) : 1))) : yy;\r\n const s = (isVertical ? Math.abs(yy) : Math.abs(xx)) / boundsSize, scale = Math.pow(1 - s * scaleValue, depthPow),\r\n scaleX = scaleXValue !== null ? Math.pow(1 - s * scaleXValue, depthPow) : null,\r\n scaleY = scaleYValue !== null ? Math.pow(1 - s * scaleYValue, depthPow) : null,\r\n dofScale = Math.pow(1 - s * depth, depthPow);\r\n if (scaleXValue === null && scaleYValue === null) {\r\n const z = scale + .1;\r\n result.z = z > 1 ? 1 : z;\r\n result.scaleX = result.scaleY = scale;\r\n } else {\r\n result.scaleX = scaleX !== null ? scaleX : 1;\r\n result.scaleY = scaleY !== null ? scaleY : 1;\r\n }\r\n result.rotationX = (isVertical ? py : px) * 200 * angle;\r\n result.zIndex = 100 - Math.floor(Math.abs(isVertical ? py : px) * 100);\r\n if (!!dof) {\r\n const blur = (s * dof) - B_LIMIT,\r\n actualBlur = blur > 0 ? blur : 0;\r\n result.filter = actualBlur ? `blur(${actualBlur}${PX})` : UNSET;\r\n }\r\n if (!!fogColor) {\r\n result.opacity = fogWeight ? Math.pow(dofScale, fogWeight) : scale;\r\n result.blendColor = fogColor;\r\n }\r\n }\r\n return result;\r\n }\r\n}","import { PX } from '../const';\r\nimport { IItemTransformation } from '../interfaces';\r\nimport { IRenderVirtualListItemConfig, IRenderVirtualListItemMeasures } from '../models';\r\nimport { Color, ItemTransform } from '../types';\r\n\r\nconst UNSET = 'unset',\r\n B_LIMIT = 0.5;\r\n\r\nexport interface ISwipe3DOptions {\r\n /**\r\n * Depth Of Field. Default value is `null`.\r\n */\r\n dof?: number;\r\n /**\r\n * Fog color. Default value is `null`.\r\n */\r\n fogColor?: Color;\r\n /**\r\n * Fog weight. Default value is `null`.\r\n */\r\n fogWeight?: number;\r\n /**\r\n * Spacing between items. Default value is `0.5`.\r\n */\r\n spacingBetweenItems?: number;\r\n /**\r\n * Angle of inclination. Default value is `1`.\r\n */\r\n angle?: number;\r\n /**\r\n * Depth. Default value is `1.5`.\r\n */\r\n depth?: number;\r\n /**\r\n * Depth exponent. Default value is `4`.\r\n */\r\n depthPow?: number;\r\n}\r\n\r\n/**\r\n * swipe3D\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/transformations/swipe-3d.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const swipe3D = (options?: ISwipe3DOptions): ItemTransform => {\r\n const dof = options?.dof ?? null,\r\n fogColor = options?.fogColor ?? null,\r\n fogWeight = options?.fogWeight ?? null,\r\n spacingBetweenItems = options?.spacingBetweenItems ?? .35,\r\n angle = options?.angle ?? 25,\r\n depth = options?.depth ?? .15,\r\n depthPow = options?.depthPow ?? 4;\r\n return (index: number, measures: IRenderVirtualListItemMeasures,\r\n config: IRenderVirtualListItemConfig): IItemTransformation => {\r\n const result: IItemTransformation = {\r\n x: 0,\r\n y: 0,\r\n z: 0,\r\n rotationX: 0,\r\n rotationY: 0,\r\n rotationZ: 0,\r\n scaleX: 1,\r\n scaleY: 1,\r\n scaleZ: 1,\r\n opacity: 1,\r\n zIndex: 1,\r\n },\r\n isVertical = config.isVertical,\r\n boundsSize = measures.boundsSize,\r\n scrollSize = measures.scrollSize,\r\n itemSize = isVertical ? measures.height : measures.width,\r\n itemSizeHalf = itemSize * .5,\r\n boundsSizeHalf = boundsSize * .5,\r\n xx = isVertical ? measures.x : (measures.x + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize),\r\n yy = isVertical ? (measures.y + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize) : measures.y,\r\n pxOffset = isVertical ? boundsSizeHalf : xx, px = isVertical ? 1 : (pxOffset / boundsSizeHalf),\r\n pyOffset = isVertical ? yy : boundsSizeHalf, py = isVertical ? (pyOffset / boundsSizeHalf) : 1;\r\n if (config.snapped || config.snappedOut) {\r\n result.x = measures.x;\r\n result.y = measures.y;\r\n result.zIndex = config.zIndex;\r\n } else {\r\n const rx = isVertical ? xx : (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + xx * Math.pow(px, 2) * spacingBetweenItems),\r\n ry = isVertical ? (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + yy * Math.pow(py, 2) * spacingBetweenItems) : yy;\r\n result.x = rx;\r\n result.y = ry;\r\n const s = (isVertical ? Math.abs(yy) : Math.abs(xx)) / boundsSize, scale = Math.pow(1 - s * depth, depthPow);\r\n const z = scale + .1;\r\n result.z = z > 1 ? 1 : z;\r\n result.rotationZ = (Math.pow(s, 4) * -angle);\r\n result.zIndex = -index;\r\n if (!!dof) {\r\n const blur = (s * dof) - B_LIMIT,\r\n actualBlur = blur > 0 ? blur : 0;\r\n result.filter = actualBlur ? `blur(${actualBlur}${PX})` : UNSET;\r\n }\r\n if (!!fogColor) {\r\n result.opacity = fogWeight ? Math.pow(scale, fogWeight) : scale;\r\n result.blendColor = fogColor;\r\n }\r\n }\r\n return result;\r\n }\r\n}","import { linear } from \"./linear\";\r\nimport { eventHorizon } from \"./event-horizon\";\r\nimport { deckOfCards } from \"./deck-of-cards\";\r\nimport { deckOfCards3D } from \"./deck-of-cards-3d\";\r\nimport { swipe3D } from \"./swipe-3d\";\r\n\r\nexport const ItemTransformations = {\r\n EVENT_HORIZON: eventHorizon,\r\n LINEAR: linear,\r\n DECK_OF_CARDS: deckOfCards,\r\n DECK_OF_CARDS_3D: deckOfCards3D,\r\n SWIPE_3D: swipe3D,\r\n};\r\n","/*\r\n * Public API Surface of ng-virtual-list\r\n */\r\nexport * from './lib/components/ng-scroll-bar/ng-scroll-bar-public.service';\r\nexport * from './lib/components/ng-scroll-bar/types/scrollbar-state';\r\nexport * from './lib/components/ng-scroll-bar/enums/scrollbar-states';\r\nexport * from './lib/components/ng-list-item/ng-virtual-list-item.component';\r\nexport * from './lib/ng-virtual-list-public.service';\r\nexport * from './lib/ng-virtual-list.service';\r\nexport * from './lib/ng-virtual-list.component';\r\nexport * from './lib/ng-virtual-list.module';\r\nexport * from './lib/directives/virtual-click/virtual-click.directive';\r\nexport * from './lib/directives/virtual-click/virtual-click.module';\r\nexport * from './lib/transformations';\r\nexport * from './lib/interfaces';\r\nexport * from './lib/enums';\r\nexport * from './lib/models';\r\nexport * from './lib/types';\r\nexport * from './lib/utils';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["OPACITY_0","UNSET","LEFT","RIGHT","POSITION","PX","ITEM_ID","matrix3d","BehaviorSubject","EventEmitter","takeUntil","tap","switchMap","i2.VirtualClickDirective","NONE_ALIASES","NORMAL_ALIASES","ScrollerDirection","TOP","INSTANT","SCROLL_EVENT","filter","ScrollBox","i2.NgScrollBarComponent","i3.LocaleSensitiveDirective","i2.LocaleSensitiveDirective","i1.NgPrerenderScrollerComponent","i2","i1.NgPrerenderList","i2.NgScrollerComponent","i3.NgPrerenderContainer","i4.LocaleSensitiveDirective","B_LIMIT"],"mappings":"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"}