ng-virtual-list 16.12.0 → 16.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/README.md +1 -11
  2. package/esm2022/lib/components/ng-list-item/ng-virtual-list-item.component.mjs +3 -3
  3. package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.component.mjs +3 -3
  4. package/esm2022/lib/components/ng-scroll-view/ng-scroll-view.component.mjs +5 -7
  5. package/esm2022/lib/core/interfaces/recalculate-metrics-options.mjs +1 -1
  6. package/esm2022/lib/core/track-box.mjs +24 -19
  7. package/esm2022/lib/core/tracker.mjs +12 -9
  8. package/esm2022/lib/ng-virtual-list.component.mjs +49 -35
  9. package/esm2022/lib/utils/animator/animator.mjs +2 -2
  10. package/esm2022/lib/utils/animator/interfaces/animator-params.mjs +1 -1
  11. package/esm2022/lib/utils/animator/interfaces/animator-update-data.mjs +1 -1
  12. package/esm2022/lib/utils/animator/types/easing.mjs +1 -1
  13. package/esm2022/lib/utils/event-emitter/event-emitter.mjs +2 -2
  14. package/esm2022/lib/utils/event-emitter/interfaces/event-emitter.mjs +1 -1
  15. package/fesm2022/ng-virtual-list.mjs +91 -72
  16. package/fesm2022/ng-virtual-list.mjs.map +1 -1
  17. package/lib/core/interfaces/recalculate-metrics-options.d.ts +2 -1
  18. package/lib/ng-virtual-list.component.d.ts +1 -0
  19. package/lib/utils/animator/animator.d.ts +1 -1
  20. package/lib/utils/animator/interfaces/animator-params.d.ts +1 -1
  21. package/lib/utils/animator/interfaces/animator-update-data.d.ts +1 -1
  22. package/lib/utils/animator/types/easing.d.ts +1 -1
  23. package/lib/utils/event-emitter/event-emitter.d.ts +1 -1
  24. package/lib/utils/event-emitter/interfaces/event-emitter.d.ts +1 -1
  25. package/package.json +1 -1
@@ -2,7 +2,7 @@ import { ANIMATOR_MIN_TIMESTAMP, DEFAULT_ANIMATION_DURATION, DEFAULT_WITH_DELTA
2
2
  import { easeLinear } from './ease';
3
3
  /**
4
4
  * Animator
5
- * @link https://github.com/DjonnyX/data-channel-router/blob/main/library/src/utils/animator/animator.ts
5
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/library/src/utils/animator/animator.ts
6
6
  * @author Evgenii Alexandrovich Grebennikov
7
7
  * @email djonnyx@gmail.com
8
8
  */
@@ -75,4 +75,4 @@ export class Animator {
75
75
  this.stop();
76
76
  }
77
77
  }
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi91dGlscy9hbmltYXRvci9hbmltYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsMEJBQTBCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUdwQzs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBQ1gsTUFBTSxDQUFDLE9BQU8sR0FBVyxDQUFDLENBQUM7SUFFM0IsWUFBWSxHQUFXLENBQUMsQ0FBQztJQUV6QixVQUFVLEdBQVcsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUV0QyxVQUFVO1FBQ2hCLE9BQU8sUUFBUSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxnQkFBZ0I7WUFDcEUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELE9BQU8sQ0FBQyxNQUF1QjtRQUM3QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFWixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFFckIsTUFBTSxFQUNKLFNBQVMsR0FBRyxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsR0FBRywwQkFBMEIsRUFDM0YsWUFBWSxFQUFFLGNBQWMsR0FBRyxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsR0FDaEUsR0FBRyxNQUFNLENBQUM7UUFFWCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDcEMsSUFBSSxVQUFV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QUFZLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBTklNQVRPUl9NSU5fVElNRVNUQU1QLCBERUZBVUxUX0FOSU1BVElPTl9EVVJBVElPTiwgREVGQVVMVF9XSVRIX0RFTFRBIH0gZnJvbSAnLi9jb25zdCc7XHJcbmltcG9ydCB7IGVhc2VMaW5lYXIgfSBmcm9tICcuL2Vhc2UnO1xyXG5pbXBvcnQgeyBJQW5pbWF0b3JQYXJhbXMsIElBbmltYXRvclVwZGF0ZURhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xyXG5cclxuLyoqXHJcbiAqIEFuaW1hdG9yXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL2RhdGEtY2hhbm5lbC1yb3V0ZXIvYmxvYi9tYWluL2xpYnJhcnkvc3JjL3V0aWxzL2FuaW1hdG9yL2FuaW1hdG9yLnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBBbGV4YW5kcm92aWNoIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEFuaW1hdG9yIHtcclxuICBwcml2YXRlIHN0YXRpYyBfbmV4dElkOiBudW1iZXIgPSAwO1xyXG5cclxuICBwcml2YXRlIF9hbmltYXRpb25JZDogbnVtYmVyID0gMDtcclxuXHJcbiAgcHJpdmF0ZSBfY3VycmVudElkOiBudW1iZXIgPSBBbmltYXRvci5fbmV4dElkO1xyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlSWQoKSB7XHJcbiAgICByZXR1cm4gQW5pbWF0b3IuX25leHRJZCA9IEFuaW1hdG9yLl9uZXh0SWQgPT09IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXHJcbiAgICAgID8gMCA6IEFuaW1hdG9yLl9uZXh0SWQgKyAxO1xyXG4gIH1cclxuXHJcbiAgYW5pbWF0ZShwYXJhbXM6IElBbmltYXRvclBhcmFtcykge1xyXG4gICAgdGhpcy5zdG9wKCk7XHJcblxyXG4gICAgY29uc3QgaWQgPSB0aGlzLmdlbmVyYXRlSWQoKTtcclxuICAgIHRoaXMuX2N1cnJlbnRJZCA9IGlkO1xyXG5cclxuICAgIGNvbnN0IHtcclxuICAgICAgd2l0aERlbHRhID0gREVGQVVMVF9XSVRIX0RFTFRBLCBzdGFydFZhbHVlLCBlbmRWYWx1ZSwgZHVyYXRpb24gPSBERUZBVUxUX0FOSU1BVElPTl9EVVJBVElPTixcclxuICAgICAgZ2V0UHJvcFZhbHVlLCBlYXNpbmdGdW5jdGlvbiA9IGVhc2VMaW5lYXIsIG9uVXBkYXRlLCBvbkNvbXBsZXRlLFxyXG4gICAgfSA9IHBhcmFtcztcclxuXHJcbiAgICBjb25zdCBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcclxuICAgIGxldCBpc0NhbmNlbGVkID0gZmFsc2UsIHByZXZQb3MgPSBzdGFydFZhbHVlLCBzdGFydCA9IHN0YXJ0VmFsdWUsIHN0YXJ0UG9zRGVsdGEgPSAwLCBkZWx0YSA9IDAsIHByZXZUaW1lID0gc3RhcnRUaW1lLFxyXG4gICAgICBkaWZmID0gZW5kVmFsdWUgLSBzdGFydCwgaXNGaW5pc2hlZCA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IHN0ZXAgPSAoY3VycmVudFRpbWU6IG51bWJlcikgPT4ge1xyXG4gICAgICBpZiAoaWQgIT09IHRoaXMuX2N1cnJlbnRJZCkge1xyXG4gICAgICAgIGlzQ2FuY2VsZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoISFpc0NhbmNlbGVkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBjUG9zID0gZ2V0UHJvcFZhbHVlPy4oKSB8fCAwO1xyXG4gICAgICBsZXQgc3RhcnREZWx0YSA9IDA7XHJcbiAgICAgIGlmIChjUG9zICE9PSBwcmV2UG9zKSB7XHJcbiAgICAgICAgc3RhcnREZWx0YSA9IGNQb3MgLSBwcmV2UG9zO1xyXG4gICAgICAgIHN0YXJ0UG9zRGVsdGEgKz0gc3RhcnREZWx0YTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZWxhcHNlZCA9IGN1cnJlbnRUaW1lIC0gc3RhcnRUaW1lLFxyXG4gICAgICAgIHByb2dyZXNzID0gc3RhcnQgPT09IGVuZFZhbHVlID8gMSA6IE1hdGgubWluKGR1cmF0aW9uID4gMCA/IGVsYXBzZWQgLyBkdXJhdGlvbiA6IDAsIDEpLFxyXG4gICAgICAgIGVhc2VkUHJvZ3Jlc3MgPSBlYXNpbmdGdW5jdGlvbihwcm9ncmVzcyksXHJcbiAgICAgICAgdmFsID0gKHdpdGhEZWx0YSA/IHN0YXJ0UG9zRGVsdGEgOiAwKSArIHN0YXJ0ICsgZGlmZiAqIGVhc2VkUHJvZ3Jlc3MsXHJcbiAgICAgICAgY3VycmVudFZhbHVlID0gdmFsLFxyXG4gICAgICAgIHQgPSBwZXJmb3JtYW5jZS5ub3coKTtcclxuXHJcbiAgICAgIGlzRmluaXNoZWQgPSBwcm9ncmVzcyA9PT0gMTtcclxuXHJcbiAgICAgIGRlbHRhID0gY3VycmVudFZhbHVlIC0gc3RhcnREZWx0YSAtIHByZXZQb3M7XHJcblxyXG4gICAgICBjb25zdCB0cyA9IHQgLSBwcmV2VGltZSwgdGltZXN0YW1wID0gdHMgPCBBTklNQVRPUl9NSU5fVElNRVNUQU1QID8gQU5JTUFUT1JfTUlOX1RJTUVTVEFNUCA6IHRzO1xyXG5cclxuICAgICAgcHJldlRpbWUgPSB0O1xyXG4gICAgICBwcmV2UG9zID0gY3VycmVudFZhbHVlO1xyXG5cclxuICAgICAgaWYgKG9uVXBkYXRlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjb25zdCBkYXRhOiBJQW5pbWF0b3JVcGRhdGVEYXRhID0ge1xyXG4gICAgICAgICAgaWQsXHJcbiAgICAgICAgICBkZWx0YSxcclxuICAgICAgICAgIGVsYXBzZWQsXHJcbiAgICAgICAgICB2YWx1ZTogIXdpdGhEZWx0YSAmJiBpc0ZpbmlzaGVkID8gZW5kVmFsdWUgOiBjdXJyZW50VmFsdWUsXHJcbiAgICAgICAgICB0aW1lc3RhbXAsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBvblVwZGF0ZShkYXRhKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzRmluaXNoZWQpIHtcclxuICAgICAgICBpZiAob25Db21wbGV0ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBjb25zdCBkYXRhOiBJQW5pbWF0b3JVcGRhdGVEYXRhID0ge1xyXG4gICAgICAgICAgICBpZCxcclxuICAgICAgICAgICAgZGVsdGEsXHJcbiAgICAgICAgICAgIGVsYXBzZWQsXHJcbiAgICAgICAgICAgIHZhbHVlOiB3aXRoRGVsdGEgPyBjdXJyZW50VmFsdWUgOiBlbmRWYWx1ZSxcclxuICAgICAgICAgICAgdGltZXN0YW1wLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIG9uQ29tcGxldGUoZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2FuaW1hdGlvbklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fYW5pbWF0aW9uSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XHJcbiAgfVxyXG5cclxuICBzdG9wKCkge1xyXG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0aW9uSWQpO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMuc3RvcCgpO1xyXG4gIH1cclxufVxyXG4iXX0=
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi91dGlscy9hbmltYXRvci9hbmltYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsMEJBQTBCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUdwQzs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBQ1gsTUFBTSxDQUFDLE9BQU8sR0FBVyxDQUFDLENBQUM7SUFFM0IsWUFBWSxHQUFXLENBQUMsQ0FBQztJQUV6QixVQUFVLEdBQVcsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUV0QyxVQUFVO1FBQ2hCLE9BQU8sUUFBUSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxnQkFBZ0I7WUFDcEUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELE9BQU8sQ0FBQyxNQUF1QjtRQUM3QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFWixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFFckIsTUFBTSxFQUNKLFNBQVMsR0FBRyxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsR0FBRywwQkFBMEIsRUFDM0YsWUFBWSxFQUFFLGNBQWMsR0FBRyxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsR0FDaEUsR0FBRyxNQUFNLENBQUM7UUFFWCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDcEMsSUFBSSxVQUFV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QUFZLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBTklNQVRPUl9NSU5fVElNRVNUQU1QLCBERUZBVUxUX0FOSU1BVElPTl9EVVJBVElPTiwgREVGQVVMVF9XSVRIX0RFTFRBIH0gZnJvbSAnLi9jb25zdCc7XHJcbmltcG9ydCB7IGVhc2VMaW5lYXIgfSBmcm9tICcuL2Vhc2UnO1xyXG5pbXBvcnQgeyBJQW5pbWF0b3JQYXJhbXMsIElBbmltYXRvclVwZGF0ZURhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xyXG5cclxuLyoqXHJcbiAqIEFuaW1hdG9yXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iL21haW4vbGlicmFyeS9zcmMvdXRpbHMvYW5pbWF0b3IvYW5pbWF0b3IudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEFsZXhhbmRyb3ZpY2ggR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQW5pbWF0b3Ige1xyXG4gIHByaXZhdGUgc3RhdGljIF9uZXh0SWQ6IG51bWJlciA9IDA7XHJcblxyXG4gIHByaXZhdGUgX2FuaW1hdGlvbklkOiBudW1iZXIgPSAwO1xyXG5cclxuICBwcml2YXRlIF9jdXJyZW50SWQ6IG51bWJlciA9IEFuaW1hdG9yLl9uZXh0SWQ7XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVJZCgpIHtcclxuICAgIHJldHVybiBBbmltYXRvci5fbmV4dElkID0gQW5pbWF0b3IuX25leHRJZCA9PT0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcclxuICAgICAgPyAwIDogQW5pbWF0b3IuX25leHRJZCArIDE7XHJcbiAgfVxyXG5cclxuICBhbmltYXRlKHBhcmFtczogSUFuaW1hdG9yUGFyYW1zKSB7XHJcbiAgICB0aGlzLnN0b3AoKTtcclxuXHJcbiAgICBjb25zdCBpZCA9IHRoaXMuZ2VuZXJhdGVJZCgpO1xyXG4gICAgdGhpcy5fY3VycmVudElkID0gaWQ7XHJcblxyXG4gICAgY29uc3Qge1xyXG4gICAgICB3aXRoRGVsdGEgPSBERUZBVUxUX1dJVEhfREVMVEEsIHN0YXJ0VmFsdWUsIGVuZFZhbHVlLCBkdXJhdGlvbiA9IERFRkFVTFRfQU5JTUFUSU9OX0RVUkFUSU9OLFxyXG4gICAgICBnZXRQcm9wVmFsdWUsIGVhc2luZ0Z1bmN0aW9uID0gZWFzZUxpbmVhciwgb25VcGRhdGUsIG9uQ29tcGxldGUsXHJcbiAgICB9ID0gcGFyYW1zO1xyXG5cclxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xyXG4gICAgbGV0IGlzQ2FuY2VsZWQgPSBmYWxzZSwgcHJldlBvcyA9IHN0YXJ0VmFsdWUsIHN0YXJ0ID0gc3RhcnRWYWx1ZSwgc3RhcnRQb3NEZWx0YSA9IDAsIGRlbHRhID0gMCwgcHJldlRpbWUgPSBzdGFydFRpbWUsXHJcbiAgICAgIGRpZmYgPSBlbmRWYWx1ZSAtIHN0YXJ0LCBpc0ZpbmlzaGVkID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3Qgc3RlcCA9IChjdXJyZW50VGltZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGlmIChpZCAhPT0gdGhpcy5fY3VycmVudElkKSB7XHJcbiAgICAgICAgaXNDYW5jZWxlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghIWlzQ2FuY2VsZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGNQb3MgPSBnZXRQcm9wVmFsdWU/LigpIHx8IDA7XHJcbiAgICAgIGxldCBzdGFydERlbHRhID0gMDtcclxuICAgICAgaWYgKGNQb3MgIT09IHByZXZQb3MpIHtcclxuICAgICAgICBzdGFydERlbHRhID0gY1BvcyAtIHByZXZQb3M7XHJcbiAgICAgICAgc3RhcnRQb3NEZWx0YSArPSBzdGFydERlbHRhO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBlbGFwc2VkID0gY3VycmVudFRpbWUgLSBzdGFydFRpbWUsXHJcbiAgICAgICAgcHJvZ3Jlc3MgPSBzdGFydCA9PT0gZW5kVmFsdWUgPyAxIDogTWF0aC5taW4oZHVyYXRpb24gPiAwID8gZWxhcHNlZCAvIGR1cmF0aW9uIDogMCwgMSksXHJcbiAgICAgICAgZWFzZWRQcm9ncmVzcyA9IGVhc2luZ0Z1bmN0aW9uKHByb2dyZXNzKSxcclxuICAgICAgICB2YWwgPSAod2l0aERlbHRhID8gc3RhcnRQb3NEZWx0YSA6IDApICsgc3RhcnQgKyBkaWZmICogZWFzZWRQcm9ncmVzcyxcclxuICAgICAgICBjdXJyZW50VmFsdWUgPSB2YWwsXHJcbiAgICAgICAgdCA9IHBlcmZvcm1hbmNlLm5vdygpO1xyXG5cclxuICAgICAgaXNGaW5pc2hlZCA9IHByb2dyZXNzID09PSAxO1xyXG5cclxuICAgICAgZGVsdGEgPSBjdXJyZW50VmFsdWUgLSBzdGFydERlbHRhIC0gcHJldlBvcztcclxuXHJcbiAgICAgIGNvbnN0IHRzID0gdCAtIHByZXZUaW1lLCB0aW1lc3RhbXAgPSB0cyA8IEFOSU1BVE9SX01JTl9USU1FU1RBTVAgPyBBTklNQVRPUl9NSU5fVElNRVNUQU1QIDogdHM7XHJcblxyXG4gICAgICBwcmV2VGltZSA9IHQ7XHJcbiAgICAgIHByZXZQb3MgPSBjdXJyZW50VmFsdWU7XHJcblxyXG4gICAgICBpZiAob25VcGRhdGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGE6IElBbmltYXRvclVwZGF0ZURhdGEgPSB7XHJcbiAgICAgICAgICBpZCxcclxuICAgICAgICAgIGRlbHRhLFxyXG4gICAgICAgICAgZWxhcHNlZCxcclxuICAgICAgICAgIHZhbHVlOiAhd2l0aERlbHRhICYmIGlzRmluaXNoZWQgPyBlbmRWYWx1ZSA6IGN1cnJlbnRWYWx1ZSxcclxuICAgICAgICAgIHRpbWVzdGFtcCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIG9uVXBkYXRlKGRhdGEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNGaW5pc2hlZCkge1xyXG4gICAgICAgIGlmIChvbkNvbXBsZXRlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGNvbnN0IGRhdGE6IElBbmltYXRvclVwZGF0ZURhdGEgPSB7XHJcbiAgICAgICAgICAgIGlkLFxyXG4gICAgICAgICAgICBkZWx0YSxcclxuICAgICAgICAgICAgZWxhcHNlZCxcclxuICAgICAgICAgICAgdmFsdWU6IHdpdGhEZWx0YSA/IGN1cnJlbnRWYWx1ZSA6IGVuZFZhbHVlLFxyXG4gICAgICAgICAgICB0aW1lc3RhbXAsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgb25Db21wbGV0ZShkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fYW5pbWF0aW9uSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9hbmltYXRpb25JZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtcclxuICB9XHJcblxyXG4gIHN0b3AoKSB7XHJcbiAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9hbmltYXRpb25JZCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5zdG9wKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0b3ItcGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvdXRpbHMvYW5pbWF0b3IvaW50ZXJmYWNlcy9hbmltYXRvci1wYXJhbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVhc2luZyB9IGZyb20gXCIuLi90eXBlc1wiO1xyXG5pbXBvcnQgeyBJQW5pbWF0b3JVcGRhdGVEYXRhIH0gZnJvbSBcIi4vYW5pbWF0b3ItdXBkYXRlLWRhdGFcIjtcclxuXHJcbi8qKlxyXG4gKiBJQW5pbWF0b3JQYXJhbXNcclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvZGF0YS1jaGFubmVsLXJvdXRlci9ibG9iL21haW4vbGlicmFyeS9zcmMvdXRpbHMvYW5pbWF0b3IvaW50ZXJmYWNlcy9hbmltYXRvci1wYXJhbXMudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEFsZXhhbmRyb3ZpY2ggR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElBbmltYXRvclBhcmFtcyB7XHJcbiAgICBzdGFydFZhbHVlOiBudW1iZXI7XHJcbiAgICBlbmRWYWx1ZTogbnVtYmVyO1xyXG4gICAgZHVyYXRpb24/OiBudW1iZXI7XHJcbiAgICB3aXRoRGVsdGE/OiBib29sZWFuO1xyXG4gICAgZ2V0UHJvcFZhbHVlPzogKCkgPT4gbnVtYmVyO1xyXG4gICAgZWFzaW5nRnVuY3Rpb24/OiBFYXNpbmc7XHJcbiAgICBvblVwZGF0ZT86IChkYXRhOiBJQW5pbWF0b3JVcGRhdGVEYXRhKSA9PiB2b2lkO1xyXG4gICAgb25Db21wbGV0ZT86IChkYXRhOiBJQW5pbWF0b3JVcGRhdGVEYXRhKSA9PiB2b2lkO1xyXG59Il19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0b3ItcGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvdXRpbHMvYW5pbWF0b3IvaW50ZXJmYWNlcy9hbmltYXRvci1wYXJhbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVhc2luZyB9IGZyb20gXCIuLi90eXBlc1wiO1xyXG5pbXBvcnQgeyBJQW5pbWF0b3JVcGRhdGVEYXRhIH0gZnJvbSBcIi4vYW5pbWF0b3ItdXBkYXRlLWRhdGFcIjtcclxuXHJcbi8qKlxyXG4gKiBJQW5pbWF0b3JQYXJhbXNcclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvbWFpbi9saWJyYXJ5L3NyYy91dGlscy9hbmltYXRvci9pbnRlcmZhY2VzL2FuaW1hdG9yLXBhcmFtcy50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgQWxleGFuZHJvdmljaCBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUFuaW1hdG9yUGFyYW1zIHtcclxuICAgIHN0YXJ0VmFsdWU6IG51bWJlcjtcclxuICAgIGVuZFZhbHVlOiBudW1iZXI7XHJcbiAgICBkdXJhdGlvbj86IG51bWJlcjtcclxuICAgIHdpdGhEZWx0YT86IGJvb2xlYW47XHJcbiAgICBnZXRQcm9wVmFsdWU/OiAoKSA9PiBudW1iZXI7XHJcbiAgICBlYXNpbmdGdW5jdGlvbj86IEVhc2luZztcclxuICAgIG9uVXBkYXRlPzogKGRhdGE6IElBbmltYXRvclVwZGF0ZURhdGEpID0+IHZvaWQ7XHJcbiAgICBvbkNvbXBsZXRlPzogKGRhdGE6IElBbmltYXRvclVwZGF0ZURhdGEpID0+IHZvaWQ7XHJcbn0iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0b3ItdXBkYXRlLWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi91dGlscy9hbmltYXRvci9pbnRlcmZhY2VzL2FuaW1hdG9yLXVwZGF0ZS1kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogSUFuaW1hdG9yVXBkYXRlRGF0YVxyXG4gKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vRGpvbm55WC9kYXRhLWNoYW5uZWwtcm91dGVyL2Jsb2IvbWFpbi9saWJyYXJ5L3NyYy91dGlscy9hbmltYXRvci9pbnRlcmZhY2VzL2FuaW1hdG9yLXVwZGF0ZS1kYXRhLnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBBbGV4YW5kcm92aWNoIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJQW5pbWF0b3JVcGRhdGVEYXRhIHtcclxuICAgIGlkOiBudW1iZXI7XHJcbiAgICB0aW1lc3RhbXA6IG51bWJlcjtcclxuICAgIGVsYXBzZWQ6IG51bWJlcjtcclxuICAgIGRlbHRhOiBudW1iZXI7XHJcbiAgICB2YWx1ZTogbnVtYmVyO1xyXG59Il19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0b3ItdXBkYXRlLWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi91dGlscy9hbmltYXRvci9pbnRlcmZhY2VzL2FuaW1hdG9yLXVwZGF0ZS1kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogSUFuaW1hdG9yVXBkYXRlRGF0YVxyXG4gKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vRGpvbm55WC9uZy12aXJ0dWFsLWxpc3QvYmxvYi9tYWluL2xpYnJhcnkvc3JjL3V0aWxzL2FuaW1hdG9yL2ludGVyZmFjZXMvYW5pbWF0b3ItdXBkYXRlLWRhdGEudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEFsZXhhbmRyb3ZpY2ggR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElBbmltYXRvclVwZGF0ZURhdGEge1xyXG4gICAgaWQ6IG51bWJlcjtcclxuICAgIHRpbWVzdGFtcDogbnVtYmVyO1xyXG4gICAgZWxhcHNlZDogbnVtYmVyO1xyXG4gICAgZGVsdGE6IG51bWJlcjtcclxuICAgIHZhbHVlOiBudW1iZXI7XHJcbn0iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWFzaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvdXRpbHMvYW5pbWF0b3IvdHlwZXMvZWFzaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogRWFzaW5nXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL2RhdGEtY2hhbm5lbC1yb3V0ZXIvYmxvYi9tYWluL2xpYnJhcnkvc3JjL3V0aWxzL2FuaW1hdG9yL3R5cGVzL2Vhc2luZy50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgQWxleGFuZHJvdmljaCBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbmV4cG9ydCB0eXBlIEVhc2luZyA9ICh2OiBudW1iZXIpID0+IG51bWJlcjtcclxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWFzaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvdXRpbHMvYW5pbWF0b3IvdHlwZXMvZWFzaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogRWFzaW5nXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iL21haW4vbGlicmFyeS9zcmMvdXRpbHMvYW5pbWF0b3IvdHlwZXMvZWFzaW5nLnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBBbGV4YW5kcm92aWNoIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuZXhwb3J0IHR5cGUgRWFzaW5nID0gKHY6IG51bWJlcikgPT4gbnVtYmVyO1xyXG4iXX0=
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Event emitter
3
- * @link https://github.com/DjonnyX/data-channel-router/blob/main/library/src/utils/event-emitter/event-emitter.ts
3
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/library/src/utils/event-emitter/event-emitter.ts
4
4
  * @author Evgenii Alexandrovich Grebennikov
5
5
  * @email djonnyx@gmail.com
6
6
  */
@@ -102,4 +102,4 @@ export class EventEmitter {
102
102
  this.removeAllListeners();
103
103
  }
104
104
  }
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtZW1pdHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL3V0aWxzL2V2ZW50LWVtaXR0ZXIvZXZlbnQtZW1pdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBQ1gsVUFBVSxHQUVoQixFQUFFLENBQUM7SUFFRyxTQUFTLEdBQVksS0FBSyxDQUFDO0lBRXJDLGdCQUFnQixDQUFDO0lBRWpCOztPQUVHO0lBQ0gsUUFBUSxDQUFDLEtBQVEsRUFBRSxHQUFHLElBQWdCO1FBQ2xDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQztRQUNqQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQTBCLENBQUMsQ0FBQztRQUM5RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDOUMsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5QixJQUFJLFFBQVEsRUFBRTtvQkFDVixRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDN0I7YUFDSjtTQUNKO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYSxDQUFDLEtBQVEsRUFBRSxHQUFHLElBQWdCO1FBQ3ZDLGNBQWMsQ0FBQyxHQUFHLEVBQUU7WUFDaEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNoQixPQUFPO2FBQ1Y7WUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ2xDLENBQUMs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cmdzOiBBcnJheTxhbnk+KSA9PiB2b2lkO1xyXG5cclxuLyoqXHJcbiAqIEV2ZW50IGVtaXR0ZXJcclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvZGF0YS1jaGFubmVsLXJvdXRlci9ibG9iL21haW4vbGlicmFyeS9zcmMvdXRpbHMvZXZlbnQtZW1pdHRlci9ldmVudC1lbWl0dGVyLnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBBbGV4YW5kcm92aWNoIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEV2ZW50RW1pdHRlcjxFID0gc3RyaW5nLCBIID0gVEV2ZW50SGFuZGxlcj4ge1xyXG4gICAgcHJvdGVjdGVkIF9saXN0ZW5lcnM6IHtcclxuICAgICAgICBbZXZlbnROYW1lOiBzdHJpbmddOiBBcnJheTxURXZlbnRIYW5kbGVyPixcclxuICAgIH0gPSB7fTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX2Rpc3Bvc2VkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVtaXRzIHRoZSBldmVudFxyXG4gICAgICovXHJcbiAgICBkaXNwYXRjaChldmVudDogRSwgLi4uYXJnczogQXJyYXk8YW55Pik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXM7XHJcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzW2V2ZW50IGFzIHVua25vd24gYXMgc3RyaW5nXTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShsaXN0ZW5lcnMpKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lci5hcHBseShjdHgsIGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW1pdHMgdGhlIGV2ZW50IGFzeW5jXHJcbiAgICAgKi9cclxuICAgIGRpc3BhdGNoQXN5bmMoZXZlbnQ6IEUsIC4uLmFyZ3M6IEFycmF5PGFueT4pOiB2b2lkIHtcclxuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2goZXZlbnQsIC4uLmFyZ3MpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBldmVudCBsaXN0ZW5lciBpcyBhbHJlYWR5IHN1YnNjcmliZWQuXHJcbiAgICAgKi9cclxuICAgIGhhc0V2ZW50TGlzdGVuZXIoZXZlbnROYW1lOiBFLCBoYW5kbGVyOiBIKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgZXZlbnQgPSBldmVudE5hbWUgYXMgdW5rbm93biBhcyBzdHJpbmc7XHJcbiAgICAgICAgaWYgKHRoaXMuX2xpc3RlbmVyc1tldmVudF0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnNbZXZlbnRdO1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGxpc3RlbmVycy5maW5kSW5kZXgodiA9PiB2ID09PSAoaGFuZGxlciBhcyBhbnkpKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGV2ZW50IGxpc3RlbmVyXHJcbiAgICAgKi9cclxuICAgIGFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lOiBFLCBoYW5kbGVyOiBIKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZXZlbnQgPSBldmVudE5hbWUgYXMgdW5rbm93biBhcyBzdHJpbmc7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9saXN0ZW5lcnMuaGFzT3duUHJvcGVydHkoZXZlbnQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xpc3RlbmVyc1tldmVudF0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fbGlzdGVuZXJzW2V2ZW50XS5wdXNoKGhhbmRsZXIgYXMgdW5rbm93biBhcyBURXZlbnRIYW5kbGVyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBldmVudCBsaXN0ZW5lclxyXG4gICAgICovXHJcbiAgICByZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZTogRSwgaGFuZGxlcjogSCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGV2ZW50ID0gZXZlbnROYW1lIGFzIHVua25vd24gYXMgc3RyaW5nO1xyXG4gICAgICAgIGlmICghdGhpcy5fbGlzdGVuZXJzLmhhc093blByb3BlcnR5KGV2ZW50KSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVyc1tldmVudF0sIGluZGV4ID0gbGlzdGVuZXJzLmZpbmRJbmRleCh2ID0+IHYgPT09IGhhbmRsZXIgYXMgYW55KTtcclxuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChsaXN0ZW5lcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fbGlzdGVuZXJzW2V2ZW50XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBhbGwgbGlzdGVuZXJzXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUFsbExpc3RlbmVycygpIHtcclxuICAgICAgICBjb25zdCBldmVudHMgPSBPYmplY3Qua2V5cyh0aGlzLl9saXN0ZW5lcnMpO1xyXG4gICAgICAgIHdoaWxlIChldmVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBldmVudCA9IGV2ZW50cy5wb3AoKTtcclxuICAgICAgICAgICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnNbZXZlbnRdO1xyXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdGVuZXJzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChsaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXN0ZW5lciA9IGxpc3RlbmVycy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQgYXMgdW5rbm93biBhcyBFLCBsaXN0ZW5lciBhcyB1bmtub3duIGFzIEgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kIG9mIGRlc3Ryb3lpbmcgaGFuZGxlcnNcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZSgpIHtcclxuICAgICAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XHJcbiAgICB9XHJcbn0iXX0=
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtZW1pdHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL3V0aWxzL2V2ZW50LWVtaXR0ZXIvZXZlbnQtZW1pdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBQ1gsVUFBVSxHQUVoQixFQUFFLENBQUM7SUFFRyxTQUFTLEdBQVksS0FBSyxDQUFDO0lBRXJDLGdCQUFnQixDQUFDO0lBRWpCOztPQUVHO0lBQ0gsUUFBUSxDQUFDLEtBQVEsRUFBRSxHQUFHLElBQWdCO1FBQ2xDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQztRQUNqQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQTBCLENBQUMsQ0FBQztRQUM5RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDOUMsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5QixJQUFJLFFBQVEsRUFBRTtvQkFDVixRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDN0I7YUFDSjtTQUNKO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYSxDQUFDLEtBQVEsRUFBRSxHQUFHLElBQWdCO1FBQ3ZDLGNBQWMsQ0FBQyxHQUFHLEVBQUU7WUFDaEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNoQixPQUFPO2FBQ1Y7WUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ2xDLENBQUMs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cmdzOiBBcnJheTxhbnk+KSA9PiB2b2lkO1xyXG5cclxuLyoqXHJcbiAqIEV2ZW50IGVtaXR0ZXJcclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvbWFpbi9saWJyYXJ5L3NyYy91dGlscy9ldmVudC1lbWl0dGVyL2V2ZW50LWVtaXR0ZXIudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEFsZXhhbmRyb3ZpY2ggR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRXZlbnRFbWl0dGVyPEUgPSBzdHJpbmcsIEggPSBURXZlbnRIYW5kbGVyPiB7XHJcbiAgICBwcm90ZWN0ZWQgX2xpc3RlbmVyczoge1xyXG4gICAgICAgIFtldmVudE5hbWU6IHN0cmluZ106IEFycmF5PFRFdmVudEhhbmRsZXI+LFxyXG4gICAgfSA9IHt9O1xyXG5cclxuICAgIHByb3RlY3RlZCBfZGlzcG9zZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW1pdHMgdGhlIGV2ZW50XHJcbiAgICAgKi9cclxuICAgIGRpc3BhdGNoKGV2ZW50OiBFLCAuLi5hcmdzOiBBcnJheTxhbnk+KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcztcclxuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnNbZXZlbnQgYXMgdW5rbm93biBhcyBzdHJpbmddO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGxpc3RlbmVycykpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0ZW5lciA9IGxpc3RlbmVyc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmFwcGx5KGN0eCwgYXJncyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0cyB0aGUgZXZlbnQgYXN5bmNcclxuICAgICAqL1xyXG4gICAgZGlzcGF0Y2hBc3luYyhldmVudDogRSwgLi4uYXJnczogQXJyYXk8YW55Pik6IHZvaWQge1xyXG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaChldmVudCwgLi4uYXJncyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGV2ZW50IGxpc3RlbmVyIGlzIGFscmVhZHkgc3Vic2NyaWJlZC5cclxuICAgICAqL1xyXG4gICAgaGFzRXZlbnRMaXN0ZW5lcihldmVudE5hbWU6IEUsIGhhbmRsZXI6IEgpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBldmVudCA9IGV2ZW50TmFtZSBhcyB1bmtub3duIGFzIHN0cmluZztcclxuICAgICAgICBpZiAodGhpcy5fbGlzdGVuZXJzW2V2ZW50XSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVyc1tldmVudF07XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gbGlzdGVuZXJzLmZpbmRJbmRleCh2ID0+IHYgPT09IChoYW5kbGVyIGFzIGFueSkpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgZXZlbnQgbGlzdGVuZXJcclxuICAgICAqL1xyXG4gICAgYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWU6IEUsIGhhbmRsZXI6IEgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBldmVudCA9IGV2ZW50TmFtZSBhcyB1bmtub3duIGFzIHN0cmluZztcclxuICAgICAgICBpZiAoIXRoaXMuX2xpc3RlbmVycy5oYXNPd25Qcm9wZXJ0eShldmVudCkpIHtcclxuICAgICAgICAgICAgdGhpcy5fbGlzdGVuZXJzW2V2ZW50XSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9saXN0ZW5lcnNbZXZlbnRdLnB1c2goaGFuZGxlciBhcyB1bmtub3duIGFzIFRFdmVudEhhbmRsZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGV2ZW50IGxpc3RlbmVyXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lOiBFLCBoYW5kbGVyOiBIKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZXZlbnQgPSBldmVudE5hbWUgYXMgdW5rbm93biBhcyBzdHJpbmc7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9saXN0ZW5lcnMuaGFzT3duUHJvcGVydHkoZXZlbnQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzW2V2ZW50XSwgaW5kZXggPSBsaXN0ZW5lcnMuZmluZEluZGV4KHYgPT4gdiA9PT0gaGFuZGxlciBhcyBhbnkpO1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGxpc3RlbmVycy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9saXN0ZW5lcnNbZXZlbnRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnNcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQWxsTGlzdGVuZXJzKCkge1xyXG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IE9iamVjdC5rZXlzKHRoaXMuX2xpc3RlbmVycyk7XHJcbiAgICAgICAgd2hpbGUgKGV2ZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gZXZlbnRzLnBvcCgpO1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVyc1tldmVudF07XHJcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShsaXN0ZW5lcnMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVyID0gbGlzdGVuZXJzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCBhcyB1bmtub3duIGFzIEUsIGxpc3RlbmVyIGFzIHVua25vd24gYXMgSCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2Qgb2YgZGVzdHJveWluZyBoYW5kbGVyc1xyXG4gICAgICovXHJcbiAgICBkaXNwb3NlKCkge1xyXG4gICAgICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcclxuICAgIH1cclxufSJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtZW1pdHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL3V0aWxzL2V2ZW50LWVtaXR0ZXIvaW50ZXJmYWNlcy9ldmVudC1lbWl0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBURXZlbnRIYW5kbGVyID0gKC4uLmFyZ3M6IEFycmF5PGFueT4pID0+IHZvaWQ7XHJcblxyXG4vKipcclxuICogRXZlbnQgZW1pdHRlciBpbnRlcmZhY2VcclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvZGF0YS1jaGFubmVsLXJvdXRlci9ibG9iL21haW4vbGlicmFyeS9zcmMvdXRpbHMvZXZlbnQtZW1pdHRlci9pbnRlcmZhY2VzL0lFdmVudEVtaXR0ZXIudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEFsZXhhbmRyb3ZpY2ggR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElFdmVudEVtaXR0ZXI8RSA9IHN0cmluZywgSCA9IFRFdmVudEhhbmRsZXI+IHtcclxuICAgIC8qKlxyXG4gICAgICogRW1pdHMgdGhlIGV2ZW50XHJcbiAgICAgKi9cclxuICAgIGRpc3BhdGNoOiAoZXZlbnQ6IEUsIC4uLmFyZ3M6IEFycmF5PGFueT4pID0+IHZvaWQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0cyB0aGUgZXZlbnQgYXN5bmNcclxuICAgICAqL1xyXG4gICAgZGlzcGF0Y2hBc3luYzogKGV2ZW50OiBFLCAuLi5hcmdzOiBBcnJheTxhbnk+KSA9PiB2b2lkO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBldmVudCBsaXN0ZW5lciBpcyBhbHJlYWR5IHN1YnNjcmliZWQuXHJcbiAgICAgKi9cclxuICAgIGhhc0V2ZW50TGlzdGVuZXI6IChldmVudE5hbWU6IEUsIGhhbmRsZXI6IEgpID0+IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgZXZlbnQgbGlzdGVuZXJcclxuICAgICAqL1xyXG4gICAgYWRkRXZlbnRMaXN0ZW5lcjogKGV2ZW50TmFtZTogRSwgaGFuZGxlcjogSCkgPT4gdm9pZDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBldmVudCBsaXN0ZW5lclxyXG4gICAgICovXHJcbiAgICByZW1vdmVFdmVudExpc3RlbmVyOiAoZXZlbnROYW1lOiBFLCBoYW5kbGVyOiBIKSA9PiB2b2lkO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnNcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQWxsTGlzdGVuZXJzOiAoKSA9PiB2b2lkO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kIG9mIGRlc3Ryb3lpbmcgaGFuZGxlcnNcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogKCkgPT4gdm9pZDtcclxufSJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtZW1pdHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL3V0aWxzL2V2ZW50LWVtaXR0ZXIvaW50ZXJmYWNlcy9ldmVudC1lbWl0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBURXZlbnRIYW5kbGVyID0gKC4uLmFyZ3M6IEFycmF5PGFueT4pID0+IHZvaWQ7XHJcblxyXG4vKipcclxuICogRXZlbnQgZW1pdHRlciBpbnRlcmZhY2VcclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvbWFpbi9saWJyYXJ5L3NyYy91dGlscy9ldmVudC1lbWl0dGVyL2ludGVyZmFjZXMvSUV2ZW50RW1pdHRlci50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgQWxleGFuZHJvdmljaCBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUV2ZW50RW1pdHRlcjxFID0gc3RyaW5nLCBIID0gVEV2ZW50SGFuZGxlcj4ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0cyB0aGUgZXZlbnRcclxuICAgICAqL1xyXG4gICAgZGlzcGF0Y2g6IChldmVudDogRSwgLi4uYXJnczogQXJyYXk8YW55PikgPT4gdm9pZDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVtaXRzIHRoZSBldmVudCBhc3luY1xyXG4gICAgICovXHJcbiAgICBkaXNwYXRjaEFzeW5jOiAoZXZlbnQ6IEUsIC4uLmFyZ3M6IEFycmF5PGFueT4pID0+IHZvaWQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGV2ZW50IGxpc3RlbmVyIGlzIGFscmVhZHkgc3Vic2NyaWJlZC5cclxuICAgICAqL1xyXG4gICAgaGFzRXZlbnRMaXN0ZW5lcjogKGV2ZW50TmFtZTogRSwgaGFuZGxlcjogSCkgPT4gYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBldmVudCBsaXN0ZW5lclxyXG4gICAgICovXHJcbiAgICBhZGRFdmVudExpc3RlbmVyOiAoZXZlbnROYW1lOiBFLCBoYW5kbGVyOiBIKSA9PiB2b2lkO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGV2ZW50IGxpc3RlbmVyXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXI6IChldmVudE5hbWU6IEUsIGhhbmRsZXI6IEgpID0+IHZvaWQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgYWxsIGxpc3RlbmVyc1xyXG4gICAgICovXHJcbiAgICByZW1vdmVBbGxMaXN0ZW5lcnM6ICgpID0+IHZvaWQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2Qgb2YgZGVzdHJveWluZyBoYW5kbGVyc1xyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiAoKSA9PiB2b2lkO1xyXG59Il19
@@ -1725,14 +1725,14 @@ class NgVirtualListItemComponent extends BaseVirtualListItemComponent {
1725
1725
  this._service.virtualClick(this._data);
1726
1726
  }
1727
1727
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgVirtualListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1728
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NgVirtualListItemComponent, selector: "ng-virtual-list-item", host: { attributes: { "role": "listitem" }, classAttribute: "ngvl__item" }, usesInheritance: true, ngImport: i0, template: "<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>", styles: [":host{display:block;position:absolute;left:0;top:0;box-sizing:border-box;overflow:hidden;-webkit-tap-highlight-color:transparent;-webkit-user-drag:none;-moz-user-drag:none;text-rendering:optimizeSpeed;image-rendering:auto}.ngvl-item{position:relative;margin:0;padding:0;overflow:hidden;outline:none;width:inherit;height:inherit;box-sizing:border-box}.ngvl-item__blend-color{position:absolute;left:0;top:0;width:100%;height:100%;background-color:var(--blend-color);z-index:-1}.ngvl-item__container{margin:0;padding:0;width:100%;height:100%;box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: VirtualClickDirective, selector: "[virtualClick]", inputs: ["maxClickDistance"], outputs: ["onVirtualClick"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1728
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NgVirtualListItemComponent, selector: "ng-virtual-list-item", host: { attributes: { "role": "listitem" }, classAttribute: "ngvl__item" }, usesInheritance: true, ngImport: i0, template: "<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>", styles: [":host{display:block;position:absolute;left:0;top:0;box-sizing:border-box;overflow:hidden;-webkit-tap-highlight-color:transparent;-webkit-user-drag:none;-moz-user-drag:none;text-rendering:optimizeSpeed;image-rendering:auto}.ngvl-item{position:relative;margin:0;padding:0;overflow:hidden;outline:none;width:inherit;height:inherit;box-sizing:border-box}.ngvl-item__blend-color{position:absolute;left:0;top:0;width:100%;height:100%;background-color:var(--blend-color);z-index:-1}.ngvl-item__container{margin:0;padding:0;width:100%;height:100%;box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: VirtualClickDirective, selector: "[virtualClick]", inputs: ["maxClickDistance"], outputs: ["onVirtualClick"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1729
1729
  }
1730
1730
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgVirtualListItemComponent, decorators: [{
1731
1731
  type: Component,
1732
1732
  args: [{ selector: 'ng-virtual-list-item', host: {
1733
1733
  'class': 'ngvl__item',
1734
1734
  'role': 'listitem',
1735
- }, standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<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>", styles: [":host{display:block;position:absolute;left:0;top:0;box-sizing:border-box;overflow:hidden;-webkit-tap-highlight-color:transparent;-webkit-user-drag:none;-moz-user-drag:none;text-rendering:optimizeSpeed;image-rendering:auto}.ngvl-item{position:relative;margin:0;padding:0;overflow:hidden;outline:none;width:inherit;height:inherit;box-sizing:border-box}.ngvl-item__blend-color{position:absolute;left:0;top:0;width:100%;height:100%;background-color:var(--blend-color);z-index:-1}.ngvl-item__container{margin:0;padding:0;width:100%;height:100%;box-sizing:border-box}\n"] }]
1735
+ }, standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<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>", styles: [":host{display:block;position:absolute;left:0;top:0;box-sizing:border-box;overflow:hidden;-webkit-tap-highlight-color:transparent;-webkit-user-drag:none;-moz-user-drag:none;text-rendering:optimizeSpeed;image-rendering:auto}.ngvl-item{position:relative;margin:0;padding:0;overflow:hidden;outline:none;width:inherit;height:inherit;box-sizing:border-box}.ngvl-item__blend-color{position:absolute;left:0;top:0;width:100%;height:100%;background-color:var(--blend-color);z-index:-1}.ngvl-item__container{margin:0;padding:0;width:100%;height:100%;box-sizing:border-box}\n"] }]
1736
1736
  }], ctorParameters: function () { return []; } });
1737
1737
 
1738
1738
  /**
@@ -1861,7 +1861,7 @@ class ScrollEvent {
1861
1861
 
1862
1862
  /**
1863
1863
  * Event emitter
1864
- * @link https://github.com/DjonnyX/data-channel-router/blob/main/library/src/utils/event-emitter/event-emitter.ts
1864
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/library/src/utils/event-emitter/event-emitter.ts
1865
1865
  * @author Evgenii Alexandrovich Grebennikov
1866
1866
  * @email djonnyx@gmail.com
1867
1867
  */
@@ -2164,7 +2164,7 @@ class Tracker {
2164
2164
  }
2165
2165
  const untrackedItems = [...components], newTrackItems = [], untrackedComponentsByTypeMap = {}, isDown = direction === 0 || direction === 1, snapped = !!snappedComponents ? [...snappedComponents] : [];
2166
2166
  let isRegularSnapped = false;
2167
- const serviceIdProp = getServiceIdProp(trackBy);
2167
+ const serviceIdProp = getServiceIdProp(trackBy), snappedItems = new Array();
2168
2168
  for (let i = isDown ? 0 : items.length - 1, l = isDown ? items.length : 0; isDown ? i < l : i >= l; isDown ? i++ : i--) {
2169
2169
  const item = items[i], isDummy = item?.data?.[SERVICE_PROP_DUMMY] && (item?.data?.[SERVICE_PROP_DUMMY] === SERVICE_PROP_DUMMY_ENABLED);
2170
2170
  if (isDummy) {
@@ -2187,6 +2187,7 @@ class Tracker {
2187
2187
  isRegularSnapped = true;
2188
2188
  snappedComponent.instance.item = item;
2189
2189
  snappedComponent.instance.show();
2190
+ snappedItems.push(snappedComponent);
2190
2191
  }
2191
2192
  }
2192
2193
  }
@@ -2252,6 +2253,7 @@ class Tracker {
2252
2253
  if (!!snappedComponent) {
2253
2254
  snappedComponent.instance.item = item;
2254
2255
  snappedComponent.instance.show();
2256
+ snappedItems.push(snappedComponent);
2255
2257
  }
2256
2258
  }
2257
2259
  }
@@ -2282,13 +2284,14 @@ class Tracker {
2282
2284
  comp.instance.hide();
2283
2285
  }
2284
2286
  }
2285
- if (!isRegularSnapped) {
2286
- for (let i = 0, l = snapped.length; i < l; i++) {
2287
- const snappedComponent = snapped[i];
2288
- if (!!snappedComponent) {
2289
- snappedComponent.instance.item = null;
2290
- snappedComponent.instance.hide();
2291
- }
2287
+ for (let i = 0, l = snapped.length; i < l; i++) {
2288
+ const snappedComponent = snapped[i];
2289
+ if (snappedItems.indexOf(snappedComponent) > -1) {
2290
+ continue;
2291
+ }
2292
+ if (!!snappedComponent) {
2293
+ snappedComponent.instance.item = null;
2294
+ snappedComponent.instance.hide();
2292
2295
  }
2293
2296
  }
2294
2297
  }
@@ -2768,7 +2771,7 @@ class TrackBox extends CacheMap {
2768
2771
  * Calculates list metrics
2769
2772
  */
2770
2773
  recalculateMetrics(options) {
2771
- const { fromItemId, bounds, collection, dynamicSize, isVertical, itemSize, minItemSize, maxItemSize, bufferSize: minBufferSize, scrollSize, stickyEnabled, itemConfigMap, enabledBufferOptimization, previousTotalSize, snapToItem, snapToItemAlign, deletedItemsMap, itemTransform } = options, roundedScrollSize = Math.round(scrollSize);
2774
+ const { alignment, fromItemId, bounds, collection, dynamicSize, isVertical, itemSize, minItemSize, maxItemSize, bufferSize: minBufferSize, scrollSize, stickyEnabled, itemConfigMap, enabledBufferOptimization, previousTotalSize, snapToItem, snapToItemAlign, deletedItemsMap, itemTransform } = options, roundedScrollSize = Math.round(scrollSize);
2772
2775
  const trackBy = this._trackingPropertyName, bufferSize = Math.max(minBufferSize, this._bufferSize), { width, height } = bounds, sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME, size = isVertical ? height : width, totalLength = collection.length, typicalItemSize = itemSize, w = isVertical ? width : typicalItemSize, h = isVertical ? typicalItemSize : height, map = this._map, snapshot = this._snapshot, divides = this._divides, stickyPos = Math.floor(scrollSize) + this._scrollStartOffset, leftItemsOrRowsWeights = [], isFromId = fromItemId !== undefined && (typeof fromItemId === 'number' && fromItemId > -1)
2773
2776
  || (typeof fromItemId === 'string' && fromItemId > '-1');
2774
2777
  let leftItemsOffset = 0, rightItemsOffset = 0;
@@ -2908,15 +2911,17 @@ class TrackBox extends CacheMap {
2908
2911
  }
2909
2912
  if (id == fromItemId) {
2910
2913
  isFromItemIdFound = true;
2911
- const { num, offset } = this.getElementNumToEnd(i, collection, map, typicalItemSize, size, isVertical), leftViewportSize = size - offset;
2912
- if (leftViewportSize > 0) {
2913
- const { num: num1, offset: offset1 } = this.getElementNumToEnd(i + num, collection, map, typicalItemSize, size, isVertical, 0, true), deltaNum = (num1 - num), deltaOffset = (offset1 - offset);
2914
- totalItemsToDisplayEndWeight += offset;
2915
- itemsFromStartToScrollEnd -= deltaNum;
2916
- rightItemsWeight = rightItemLength = 0;
2917
- leftHiddenItemsWeight -= deltaOffset;
2918
- leftItemsOrRowsWeights.splice(leftItemsOrRowsWeights.length - deltaNum, deltaNum);
2919
- y -= deltaOffset;
2914
+ if (alignment !== Alignments.CENTER) {
2915
+ const { num, offset } = this.getElementNumToEnd(i, collection, map, typicalItemSize, size, isVertical), leftViewportSize = size - offset;
2916
+ if (leftViewportSize > 0) {
2917
+ const { num: num1, offset: offset1 } = this.getElementNumToEnd(i + num, collection, map, typicalItemSize, size, isVertical, 0, true), deltaNum = (num1 - num), deltaOffset = (offset1 - offset);
2918
+ totalItemsToDisplayEndWeight += offset;
2919
+ itemsFromStartToScrollEnd -= deltaNum;
2920
+ rightItemsWeight = rightItemLength = 0;
2921
+ leftHiddenItemsWeight -= deltaOffset;
2922
+ leftItemsOrRowsWeights.splice(leftItemsOrRowsWeights.length - deltaNum, deltaNum);
2923
+ y -= deltaOffset;
2924
+ }
2920
2925
  }
2921
2926
  itemById = collectionItem;
2922
2927
  itemByIdPos = y;
@@ -3103,7 +3108,7 @@ class TrackBox extends CacheMap {
3103
3108
  rightItemsWeight = Math.floor(rightItemLength * dividedTypicalItemSize / typicalItemSize) * typicalItemSize;
3104
3109
  leftHiddenItemsWeight = Math.floor(itemsFromStartToScrollEnd * dividedTypicalItemSize / typicalItemSize) * typicalItemSize;
3105
3110
  totalItemsToDisplayEndWeight = Math.floor(itemsFromStartToDisplayEnd * dividedTypicalItemSize / typicalItemSize) * typicalItemSize;
3106
- totalSize = (totalLength * dividedTypicalItemSize) + this._scrollStartOffset + this._scrollEndOffset;
3111
+ totalSize = (Math.ceil(totalLength / divides) * divides * dividedTypicalItemSize) + this._scrollStartOffset + this._scrollEndOffset;
3107
3112
  const k = totalSize !== 0 ? previousTotalSize / totalSize : 0;
3108
3113
  if (isFromId) {
3109
3114
  const index = collection.findIndex(item => item[trackBy] == fromItemId);
@@ -3479,7 +3484,7 @@ class TrackBox extends CacheMap {
3479
3484
  }
3480
3485
  if (!isDummy) {
3481
3486
  if ((isSnappingMethodAdvanced || id !== stickyItem?.id) && id !== endStickyItem?.id) {
3482
- const isOdd = (items.length - layoutIndexOffset + i) % 2 != 0, sticky = itemConfigMap[id]?.sticky ?? 0, fullSize = itemConfigMap[id]?.fullSize ?? false, selectable = itemConfigMap[id]?.selectable ?? true, collapsable = itemConfigMap[id]?.collapsable ?? false, snapped = stickyEnabled && (sticky === 1 && (pos <= scrollSize + this._scrollStartOffset) || sticky === 2 && (pos >= scrollSize + boundsSize - size)), absoluteStartPosition = pos - scrollSize, ratio = size !== 0 ? boundsSize / size : 0, absoluteStartPositionPercent = -(boundsSize !== 0 ? absoluteStartPosition / boundsSize : 0) * ratio, absoluteEndPosition = boundsSize - (absoluteStartPositionPercent + size), absoluteEndPositionPercent = (absoluteStartPositionPercent + (boundsSize !== 0 ? (absoluteEndPosition + size) / boundsSize : 0) * ratio), x = isVertical ? divSize * ((sticky || fullSize) ? 0 : ci) : pos, y = isVertical ? pos : divSize * ((sticky || fullSize) ? 0 : ci), measures = {
3487
+ const isOdd = (items.length - layoutIndexOffset + i) % 2 != 0, sticky = itemConfigMap[id]?.sticky ?? 0, fullSize = itemConfigMap[id]?.fullSize ?? false, selectable = itemConfigMap[id]?.selectable ?? true, collapsable = itemConfigMap[id]?.collapsable ?? false, snapped = stickyEnabled && ((sticky === 1 && (pos <= scrollSize + this._scrollStartOffset)) || (sticky === 2 && (pos >= scrollSize + boundsSize - size))), absoluteStartPosition = pos - scrollSize, ratio = size !== 0 ? boundsSize / size : 0, absoluteStartPositionPercent = -(boundsSize !== 0 ? absoluteStartPosition / boundsSize : 0) * ratio, absoluteEndPosition = boundsSize - (absoluteStartPositionPercent + size), absoluteEndPositionPercent = (absoluteStartPositionPercent + (boundsSize !== 0 ? (absoluteEndPosition + size) / boundsSize : 0) * ratio), x = isVertical ? divSize * ((sticky || fullSize) ? 0 : ci) : pos, y = isVertical ? pos : divSize * ((sticky || fullSize) ? 0 : ci), measures = {
3483
3488
  x,
3484
3489
  y,
3485
3490
  transformedX: x,
@@ -3507,7 +3512,7 @@ class TrackBox extends CacheMap {
3507
3512
  maxWidth: maxItemSize,
3508
3513
  maxHeight: maxItemSize,
3509
3514
  scrollDirection,
3510
- delta: sticky === 1 ? actualSnippedPosition : sticky === 2 ? actualEndSnippedPosition - deltaOffet - size : 0,
3515
+ delta: sticky === 1 ? actualSnippedPosition : (sticky === 2 ? (actualEndSnippedPosition - deltaOffet - size) : 0),
3511
3516
  }, config = {
3512
3517
  isFirst: i === layoutIndexOffset,
3513
3518
  isLast: i === li,
@@ -3517,7 +3522,7 @@ class TrackBox extends CacheMap {
3517
3522
  isVertical,
3518
3523
  collapsable,
3519
3524
  selectable,
3520
- sticky: sticky,
3525
+ sticky,
3521
3526
  snap: stickyEnabled,
3522
3527
  snapped: false,
3523
3528
  snappedOut: false,
@@ -3570,9 +3575,9 @@ class TrackBox extends CacheMap {
3570
3575
  i++;
3571
3576
  }
3572
3577
  const axis = isVertical ? Y_PROP_NAME : X_PROP_NAME;
3573
- if (!!nextSticky && !!stickyItem && nextSticky.measures[axis] <= actualSnippedPosition + stickyItemSize) {
3574
- if (nextSticky.measures[axis] > scrollSize - stickyItemSize) {
3575
- stickyItem.measures[axis] = nextSticky.measures[axis] - stickyItemSize;
3578
+ if (!!nextSticky && !!stickyItem && nextSticky.measures[axis] <= actualSnippedPosition + stickyItem.measures[sizeProperty]) {
3579
+ if (nextSticky.measures[axis] > actualSnippedPosition) {
3580
+ stickyItem.measures[axis] = nextSticky.measures[axis] - stickyItem.measures[sizeProperty];
3576
3581
  stickyItem.config.snapped = nextSticky.config.snapped = false;
3577
3582
  stickyItem.config.snappedOut = true;
3578
3583
  stickyItem.config.sticky = 1;
@@ -3581,7 +3586,8 @@ class TrackBox extends CacheMap {
3581
3586
  else {
3582
3587
  nextSticky.config.snapped = true;
3583
3588
  nextSticky.measures.delta = (isVertical ? nextSticky.measures.y : nextSticky.measures.x) - scrollSize;
3584
- stickyItem.measures[axis] = stickyItem.measures[axis] + stickyItem.measures[sizeProperty];
3589
+ stickyItem.measures[axis] = nextSticky.measures[axis] - stickyItem.measures[sizeProperty];
3590
+ stickyItem.measures.delta = (isVertical ? stickyItem.measures.y : stickyItem.measures.x) - scrollSize;
3585
3591
  }
3586
3592
  }
3587
3593
  if (!!nextEndSticky && !!endStickyItem &&
@@ -3598,6 +3604,7 @@ class TrackBox extends CacheMap {
3598
3604
  nextEndSticky.measures[axis] = actualEndSnippedPosition - nextEndSticky.measures[sizeProperty];
3599
3605
  nextEndSticky.measures.delta = (isVertical ? nextEndSticky.measures.y : nextEndSticky.measures.x) - scrollSize;
3600
3606
  endStickyItem.measures[axis] = nextEndSticky.measures[axis] + nextEndSticky.measures[sizeProperty];
3607
+ endStickyItem.measures.delta = (isVertical ? endStickyItem.measures.y : endStickyItem.measures.x) - scrollSize;
3601
3608
  }
3602
3609
  }
3603
3610
  if (itemTransform !== null) {
@@ -3865,7 +3872,7 @@ const easeLinear = (t) => {
3865
3872
 
3866
3873
  /**
3867
3874
  * Animator
3868
- * @link https://github.com/DjonnyX/data-channel-router/blob/main/library/src/utils/animator/animator.ts
3875
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/library/src/utils/animator/animator.ts
3869
3876
  * @author Evgenii Alexandrovich Grebennikov
3870
3877
  * @email djonnyx@gmail.com
3871
3878
  */
@@ -4889,7 +4896,7 @@ class NgScrollView extends BaseScrollView {
4889
4896
  }
4890
4897
  animate(startValue, endValue, duration = ANIMATION_DURATION, easingFunction = easeOutQuad, userAction = false, alignmentAtComplete = true, skipOverridedCoordinates = false) {
4891
4898
  const isVertical = this._$isVertical.getValue();
4892
- let iteration = 0, position = startValue;
4899
+ let position = startValue;
4893
4900
  this._isAlignmentAnimation = !alignmentAtComplete;
4894
4901
  this._animator.animate({
4895
4902
  withDelta: this._service.dynamic && !this.isInfinity,
@@ -4906,17 +4913,16 @@ class NgScrollView extends BaseScrollView {
4906
4913
  this.animate(currentCoordinate, currentCoordinate + delta, duration - elapsed, easingFunction, userAction, alignmentAtComplete);
4907
4914
  return;
4908
4915
  }
4909
- const v0 = calculateVelocity(position, value, timestamp) ?? this.averageVelocity;
4916
+ const v0 = calculateVelocity(position, value - this._delta, timestamp) ?? this.averageVelocity;
4910
4917
  position = value;
4911
4918
  if (alignmentAtComplete && !this._isAlignmentAnimation && !skipOverridedCoordinates) {
4912
- if (iteration < MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS || !this.snapIfNecessary(v0)) {
4919
+ if (!this.snapIfNecessary(v0)) {
4913
4920
  this.move(isVertical, value, false, userAction);
4914
4921
  }
4915
4922
  }
4916
4923
  else {
4917
4924
  this.move(isVertical, value, false, userAction);
4918
4925
  }
4919
- iteration++;
4920
4926
  this._service.update(true);
4921
4927
  }, onComplete: ({ value, timestamp }) => {
4922
4928
  this._isAlignmentAnimation = false;
@@ -4968,10 +4974,9 @@ class NgScrollView extends BaseScrollView {
4968
4974
  return size;
4969
4975
  }
4970
4976
  alignPosition(animated = true, force = false) {
4971
- if (!this.snapToItem || this._isAlignmentAnimation) {
4977
+ if (!this.snapToItem || (this._isAlignmentAnimation && !force)) {
4972
4978
  return false;
4973
4979
  }
4974
- this.stopScrolling(true);
4975
4980
  const scrollDirection = this._scrollDirection.get() || (force ? 1 : 0);
4976
4981
  if (scrollDirection === 0) {
4977
4982
  return false;
@@ -6384,14 +6389,14 @@ class NgPrerenderVirtualListItemComponent extends NgVirtualListItemComponent {
6384
6389
  }
6385
6390
  }
6386
6391
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgPrerenderVirtualListItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
6387
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NgPrerenderVirtualListItemComponent, selector: "ng-prerender-virtual-list-item", host: { attributes: { "role": "listitem" }, classAttribute: "ngvl__item" }, usesInheritance: true, ngImport: i0, template: "<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>", styles: [":host{display:block;position:absolute;left:0;top:0;box-sizing:border-box;overflow:hidden;-webkit-tap-highlight-color:transparent;-webkit-user-drag:none;-moz-user-drag:none;text-rendering:optimizeSpeed;image-rendering:auto}.ngvl-item{position:relative;margin:0;padding:0;overflow:hidden;outline:none;width:inherit;height:inherit;box-sizing:border-box}.ngvl-item__blend-color{position:absolute;left:0;top:0;width:100%;height:100%;background-color:var(--blend-color);z-index:-1}.ngvl-item__container{margin:0;padding:0;width:100%;height:100%;box-sizing:border-box}\n", ":host{display:block;position:absolute!important;left:0;top:0;box-sizing:border-box;overflow:hidden;-webkit-tap-highlight-color:transparent;-webkit-user-drag:none;-moz-user-drag:none;pointer-events:none;-webkit-user-select:none;user-select:none;text-rendering:optimizeSpeed;image-rendering:pixelated}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: VirtualClickDirective, selector: "[virtualClick]", inputs: ["maxClickDistance"], outputs: ["onVirtualClick"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6392
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NgPrerenderVirtualListItemComponent, selector: "ng-prerender-virtual-list-item", host: { attributes: { "role": "listitem" }, classAttribute: "ngvl__item" }, usesInheritance: true, ngImport: i0, template: "<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>", styles: [":host{display:block;position:absolute;left:0;top:0;box-sizing:border-box;overflow:hidden;-webkit-tap-highlight-color:transparent;-webkit-user-drag:none;-moz-user-drag:none;text-rendering:optimizeSpeed;image-rendering:auto}.ngvl-item{position:relative;margin:0;padding:0;overflow:hidden;outline:none;width:inherit;height:inherit;box-sizing:border-box}.ngvl-item__blend-color{position:absolute;left:0;top:0;width:100%;height:100%;background-color:var(--blend-color);z-index:-1}.ngvl-item__container{margin:0;padding:0;width:100%;height:100%;box-sizing:border-box}\n", ":host{display:block;position:absolute!important;left:0;top:0;box-sizing:border-box;overflow:hidden;-webkit-tap-highlight-color:transparent;-webkit-user-drag:none;-moz-user-drag:none;pointer-events:none;-webkit-user-select:none;user-select:none;text-rendering:optimizeSpeed;image-rendering:pixelated}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: VirtualClickDirective, selector: "[virtualClick]", inputs: ["maxClickDistance"], outputs: ["onVirtualClick"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6388
6393
  }
6389
6394
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgPrerenderVirtualListItemComponent, decorators: [{
6390
6395
  type: Component,
6391
6396
  args: [{ selector: 'ng-prerender-virtual-list-item', host: {
6392
6397
  'class': 'ngvl__item',
6393
6398
  'role': 'listitem',
6394
- }, standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<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>", styles: [":host{display:block;position:absolute;left:0;top:0;box-sizing:border-box;overflow:hidden;-webkit-tap-highlight-color:transparent;-webkit-user-drag:none;-moz-user-drag:none;text-rendering:optimizeSpeed;image-rendering:auto}.ngvl-item{position:relative;margin:0;padding:0;overflow:hidden;outline:none;width:inherit;height:inherit;box-sizing:border-box}.ngvl-item__blend-color{position:absolute;left:0;top:0;width:100%;height:100%;background-color:var(--blend-color);z-index:-1}.ngvl-item__container{margin:0;padding:0;width:100%;height:100%;box-sizing:border-box}\n", ":host{display:block;position:absolute!important;left:0;top:0;box-sizing:border-box;overflow:hidden;-webkit-tap-highlight-color:transparent;-webkit-user-drag:none;-moz-user-drag:none;pointer-events:none;-webkit-user-select:none;user-select:none;text-rendering:optimizeSpeed;image-rendering:pixelated}\n"] }]
6399
+ }, standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<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>", styles: [":host{display:block;position:absolute;left:0;top:0;box-sizing:border-box;overflow:hidden;-webkit-tap-highlight-color:transparent;-webkit-user-drag:none;-moz-user-drag:none;text-rendering:optimizeSpeed;image-rendering:auto}.ngvl-item{position:relative;margin:0;padding:0;overflow:hidden;outline:none;width:inherit;height:inherit;box-sizing:border-box}.ngvl-item__blend-color{position:absolute;left:0;top:0;width:100%;height:100%;background-color:var(--blend-color);z-index:-1}.ngvl-item__container{margin:0;padding:0;width:100%;height:100%;box-sizing:border-box}\n", ":host{display:block;position:absolute!important;left:0;top:0;box-sizing:border-box;overflow:hidden;-webkit-tap-highlight-color:transparent;-webkit-user-drag:none;-moz-user-drag:none;pointer-events:none;-webkit-user-select:none;user-select:none;text-rendering:optimizeSpeed;image-rendering:pixelated}\n"] }]
6395
6400
  }] });
6396
6401
 
6397
6402
  /**
@@ -9279,7 +9284,7 @@ class NgVirtualListComponent extends DisposableComponent {
9279
9284
  this._isLoading = false;
9280
9285
  })).subscribe();
9281
9286
  const update = (params) => {
9282
- const { alignment, precalculatedScrollStartOffset, precalculatedScrollEndOffset, trackBy, isInfinity, snapScrollToStart, snapScrollToEnd, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize, minItemSize, maxItemSize, divides, bufferSize, maxBufferSize, stickyEnabled, isVertical, dynamicSize, enabledBufferOptimization, snapToItem, snapToItemAlign, cacheVersion, userAction, collapsedIds, itemTransform, } = params;
9287
+ const { alignment, snapScrollToStart, snapScrollToEnd, bounds, items, itemConfigMap, scrollSize, itemSize, minItemSize, maxItemSize, bufferSize, maxBufferSize, stickyEnabled, isVertical, dynamicSize, enabledBufferOptimization, snapToItem, snapToItemAlign, userAction, collapsedIds, itemTransform, } = params;
9283
9288
  const scroller = this._scrollerComponent;
9284
9289
  let totalSize = 0;
9285
9290
  if (!!scroller) {
@@ -9289,7 +9294,7 @@ class NgVirtualListComponent extends DisposableComponent {
9289
9294
  let actualScrollSize = !this._readyForShow && snapScrollToEnd ? (isVertical ? scroller.scrollHeight : scroller.scrollWidth) :
9290
9295
  (isVertical ? scroller.scrollTop : scroller.scrollLeft), leftLayoutOffset = 0, displayItems;
9291
9296
  const { width, height } = bounds, viewportSize = (isVertical ? height : width), opts = {
9292
- bounds: { width, height }, dynamicSize, isVertical, itemSize, minItemSize, maxItemSize, bufferSize, maxBufferSize,
9297
+ alignment, bounds: { width, height }, dynamicSize, isVertical, itemSize, minItemSize, maxItemSize, bufferSize, maxBufferSize,
9293
9298
  scrollSize: actualScrollSize, stickyEnabled, enabledBufferOptimization, snapToItem, snapToItemAlign, itemTransform,
9294
9299
  };
9295
9300
  if (snapScrollToEnd && !this._readyForShow) {
@@ -9297,12 +9302,24 @@ class NgVirtualListComponent extends DisposableComponent {
9297
9302
  displayItems = calculatedDisplayItems;
9298
9303
  totalSize = calculatedTotalSize1;
9299
9304
  leftLayoutOffset = leftLayoutOffset1;
9305
+ if (!!itemTransform && dynamicSize && this._trackBox.delta !== 0) {
9306
+ const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize1, leftLayoutOffset: leftLayoutOffset1 } = this._trackBox.updateCollection(items, itemConfigMap, { ...opts, scrollSize: actualScrollSize + this._trackBox.delta });
9307
+ displayItems = calculatedDisplayItems;
9308
+ totalSize = calculatedTotalSize1;
9309
+ leftLayoutOffset = leftLayoutOffset1;
9310
+ }
9300
9311
  }
9301
9312
  else {
9302
9313
  const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize, leftLayoutOffset: leftLayoutOffset1 } = this._trackBox.updateCollection(items, itemConfigMap, opts);
9303
9314
  displayItems = calculatedDisplayItems;
9304
9315
  totalSize = calculatedTotalSize;
9305
9316
  leftLayoutOffset = leftLayoutOffset1;
9317
+ if (!!itemTransform && dynamicSize && this._trackBox.delta !== 0) {
9318
+ const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize, leftLayoutOffset: leftLayoutOffset1 } = this._trackBox.updateCollection(items, itemConfigMap, { ...opts, scrollSize: actualScrollSize + this._trackBox.delta });
9319
+ displayItems = calculatedDisplayItems;
9320
+ totalSize = calculatedTotalSize;
9321
+ leftLayoutOffset = leftLayoutOffset1;
9322
+ }
9306
9323
  }
9307
9324
  scroller.totalSize = totalSize;
9308
9325
  scroller.startLayoutOffset = leftLayoutOffset;
@@ -9319,23 +9336,7 @@ class NgVirtualListComponent extends DisposableComponent {
9319
9336
  if (this._isSnappingMethodAdvanced) {
9320
9337
  this.updateRegularRenderer();
9321
9338
  }
9322
- switch (alignment) {
9323
- case Alignments.NONE: {
9324
- this._$actualScrollStartOffset.next(precalculatedScrollStartOffset);
9325
- this._$actualScrollEndOffset.next(precalculatedScrollEndOffset);
9326
- break;
9327
- }
9328
- case Alignments.CENTER: {
9329
- const firstItemId = items.length > 0 ? (items[0]?.[trackBy] ?? null) : null, endItemId = items.length > 0 ? (items?.[items.length - 1]?.[trackBy] ?? null) : null, alignmentStartOffset = viewportSize * .5 - (firstItemId !== null ? (isVertical ? (this._service.getItemBounds(firstItemId)?.height ?? 0) :
9330
- (this._service.getItemBounds(firstItemId)?.width ?? 0)) : 0) * (isInfinity ? 0 : .5), alignmentEndOffset = viewportSize * .5 - (endItemId !== null ? (isVertical ? (this._service.getItemBounds(endItemId)?.height ?? 0) :
9331
- (this._service.getItemBounds(endItemId)?.width ?? 0)) : 0) * (isInfinity ? 0 : .5);
9332
- this._$alignmentScrollStartOffset.next(alignmentStartOffset);
9333
- this._$alignmentScrollEndOffset.next(alignmentEndOffset);
9334
- this._$actualScrollStartOffset.next(precalculatedScrollStartOffset + alignmentStartOffset);
9335
- this._$actualScrollEndOffset.next(precalculatedScrollEndOffset + alignmentEndOffset);
9336
- break;
9337
- }
9338
- }
9339
+ this.updateOffsetsByAllignment();
9339
9340
  scroller.delta = delta;
9340
9341
  if ((snapScrollToStart && this._trackBox.isSnappedToStart && scroller.scrollable) ||
9341
9342
  (snapScrollToStart && currentScrollSize <= MIN_PIXELS_FOR_PREVENT_SNAPPING)) {
@@ -9514,6 +9515,7 @@ class NgVirtualListComponent extends DisposableComponent {
9514
9515
  const dynamicSize = this.dynamicSize, itemSize = this.actualItemSize, minItemSize = this.actualMinItemSize, maxItemSize = this.actualMaxItemSize, snapScrollToEnd = this.snapScrollToEnd;
9515
9516
  if (dynamicSize) {
9516
9517
  const { width, height } = this._$bounds.getValue() || { width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE }, itemConfigMap = this.itemConfigMap, isVertical = this._isVertical, currentScrollSize = isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft, opts = {
9518
+ alignment: this._$actualAlignment.getValue(),
9517
9519
  bounds: { width, height }, collection: items, dynamicSize, isVertical: this._isVertical, itemSize, minItemSize, maxItemSize,
9518
9520
  bufferSize: this.bufferSize, maxBufferSize: this.maxBufferSize, itemTransform: this.itemTransform,
9519
9521
  scrollSize: (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),
@@ -9539,21 +9541,8 @@ class NgVirtualListComponent extends DisposableComponent {
9539
9541
  this.createDisplayComponentsIfNeed(displayItems);
9540
9542
  this.tracking();
9541
9543
  this.snappingHandler();
9544
+ this.updateOffsetsByAllignment();
9542
9545
  scrollSize = this._trackBox.getItemPosition(id, itemConfigMap, { ...opts, scrollSize: actualScrollSize, fromItemId: id });
9543
- if (this.isInfinity) {
9544
- if (this.snapToItem) {
9545
- const itemBounds = this._trackBox.getItemBounds(id);
9546
- if (!!itemBounds) {
9547
- const itemSize = isVertical ? itemBounds.height : itemBounds.width;
9548
- switch (this.snapToItemAlign) {
9549
- case SnapToItemAligns.CENTER: {
9550
- scrollSize += itemSize * .5;
9551
- break;
9552
- }
9553
- }
9554
- }
9555
- }
9556
- }
9557
9546
  if (scrollSize === -1) {
9558
9547
  return of([finished, { id, blending, iteration: nextIteration, cb }]).pipe(delay(0));
9559
9548
  }
@@ -9591,6 +9580,7 @@ class NgVirtualListComponent extends DisposableComponent {
9591
9580
  }
9592
9581
  }
9593
9582
  const { width, height } = this._$bounds.getValue() || { width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE }, itemConfigMap = this.itemConfigMap, items = this._$actualItems.getValue(), opts = {
9583
+ alignment: this._$actualAlignment.getValue(),
9594
9584
  bounds: { width, height }, collection: items, dynamicSize, isVertical: this._isVertical, itemSize, minItemSize, maxItemSize,
9595
9585
  bufferSize: this.bufferSize, maxBufferSize: this.maxBufferSize, itemTransform: this.itemTransform,
9596
9586
  scrollSize: (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),
@@ -9610,6 +9600,7 @@ class NgVirtualListComponent extends DisposableComponent {
9610
9600
  this.createDisplayComponentsIfNeed(displayItems);
9611
9601
  this.tracking();
9612
9602
  this.snappingHandler();
9603
+ this.updateOffsetsByAllignment();
9613
9604
  this._$preventScrollSnapping.next(true);
9614
9605
  const params = {
9615
9606
  [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, fireUpdate: false,
@@ -9636,7 +9627,7 @@ class NgVirtualListComponent extends DisposableComponent {
9636
9627
  this.emitScrollEvent(true, false, true);
9637
9628
  const scrollParams = params;
9638
9629
  scrollParams?.cb?.();
9639
- }), delay(100), tap(([finished]) => {
9630
+ }), delay(0), tap(([finished]) => {
9640
9631
  if (finished) {
9641
9632
  this._scrollerComponent?.snapIfNeed();
9642
9633
  }
@@ -9677,6 +9668,14 @@ class NgVirtualListComponent extends DisposableComponent {
9677
9668
  }
9678
9669
  }));
9679
9670
  })).subscribe();
9671
+ combineLatest([$itemConfigMap, $dynamicSize, $divides]).pipe(takeUntil(this._$unsubscribe), filter$1(([itemConfigMap, dynamicSize, divides]) => !!itemConfigMap && !dynamicSize && divides > 1), tap(([itemConfigMap]) => {
9672
+ for (const id in itemConfigMap) {
9673
+ const metaData = itemConfigMap[id];
9674
+ if (metaData?.fullSize || metaData?.sticky === 1 || metaData?.sticky === 2) {
9675
+ throw Error('The accelerated rendering algorithm `[dynamicSize]="false"` cannot correctly handle non-uniform lists (the itemConfigMap specifies full-size elements). For correct rendering, specify `[dynamicSize]="true"`.');
9676
+ }
9677
+ }
9678
+ })).subscribe();
9680
9679
  combineLatest([$collapsingMode, $items, $itemConfigMap, $trackBy]).pipe(takeUntil(this._$unsubscribe), tap(([collapsingMode, items, itemConfigMap, trackBy]) => {
9681
9680
  const isAccordion = isCollapseMode(collapsingMode, CollapsingModes.ACCORDION);
9682
9681
  if (isAccordion) {
@@ -9878,6 +9877,26 @@ class NgVirtualListComponent extends DisposableComponent {
9878
9877
  this._trackBox.setDisplayObjectIndexMapById(doMap);
9879
9878
  }
9880
9879
  }
9880
+ updateOffsetsByAllignment() {
9881
+ const alignment = this._$actualAlignment.getValue(), items = this._$actualItems.getValue(), trackBy = this.trackBy, isInfinity = this.isInfinity, isVertical = this._isVertical, { width, height } = this._$bounds.getValue() || { width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE }, viewportSize = isVertical ? height : width, precalculatedScrollStartOffset = this._$precalculatedScrollStartOffset.getValue(), precalculatedScrollEndOffset = this._$precalculatedScrollEndOffset.getValue();
9882
+ switch (alignment) {
9883
+ case Alignments.NONE: {
9884
+ this._$actualScrollStartOffset.next(precalculatedScrollStartOffset);
9885
+ this._$actualScrollEndOffset.next(precalculatedScrollEndOffset);
9886
+ break;
9887
+ }
9888
+ case Alignments.CENTER: {
9889
+ const firstItemId = items.length > 0 ? (items[0]?.[trackBy] ?? null) : null, endItemId = items.length > 0 ? (items?.[items.length - 1]?.[trackBy] ?? null) : null, alignmentStartOffset = viewportSize * .5 - (firstItemId !== null ? (isVertical ? (this._service.getItemBounds(firstItemId)?.height ?? 0) :
9890
+ (this._service.getItemBounds(firstItemId)?.width ?? 0)) : 0) * (isInfinity ? 0 : .5), alignmentEndOffset = viewportSize * .5 - (endItemId !== null ? (isVertical ? (this._service.getItemBounds(endItemId)?.height ?? 0) :
9891
+ (this._service.getItemBounds(endItemId)?.width ?? 0)) : 0) * (isInfinity ? 0 : .5);
9892
+ this._$alignmentScrollStartOffset.next(alignmentStartOffset);
9893
+ this._$alignmentScrollEndOffset.next(alignmentEndOffset);
9894
+ this._$actualScrollStartOffset.next(precalculatedScrollStartOffset + alignmentStartOffset);
9895
+ this._$actualScrollEndOffset.next(precalculatedScrollEndOffset + alignmentEndOffset);
9896
+ break;
9897
+ }
9898
+ }
9899
+ }
9881
9900
  updateRegularRenderer() {
9882
9901
  this._resizeSnappedComponentHandler();
9883
9902
  }