🚀 Big News:Socket Has Acquired Secure Annex.Learn More
Socket
Book a DemoSign in
Socket

ngx-infinite-scroll

Package Overview
Dependencies
Maintainers
1
Versions
70
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ngx-infinite-scroll - npm Package Compare versions

Comparing version
8.0.2
to
9.0.0
+11
public-api.d.ts
/**
* Angular library starter.
* Build an Angular library compatible with AoT compilation & Tree shaking.
* Written by Roberto Simonetti.
* MIT license.
* https://github.com/robisim74/angular-library-starter
*/
/**
* Entry point for all public APIs of the package.
*/
export * from './src/ngx-infinite-scroll';
+43
-19

@@ -9,3 +9,3 @@ (function (global, factory) {

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -62,3 +62,3 @@ /**

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -140,3 +140,3 @@ /** @type {?} */

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -172,3 +172,3 @@ /**

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -193,3 +193,3 @@ /**

: windowElement.nativeElement;
return Object.assign({}, resolver, { container: container });
return Object.assign(Object.assign({}, resolver), { container: container });
}

@@ -202,3 +202,6 @@ /**

/** @type {?} */
var isWindow = ['Window', 'global'].some(function (obj) { return Object.prototype.toString.call(windowElement).includes(obj); });
var isWindow = ['Window', 'global'].some(( /**
* @param {?} obj
* @return {?}
*/function (obj) { return Object.prototype.toString.call(windowElement).includes(obj); }));
return isWindow;

@@ -328,3 +331,3 @@ }

var offsetTop = axis.offsetTopKey();
if (isNaN(window[pageYOffset])) {
if (isNaN(window.pageYOffset)) {
return getDocumentElement(isWindow, elem)[scrollTop];

@@ -341,3 +344,3 @@ }

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -432,3 +435,3 @@ /**

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -503,3 +506,3 @@ var ScrollState = /** @class */ (function () {

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -531,12 +534,26 @@ /**

};
return attachScrollEvent(options).pipe(rxjs_operators.mergeMap(function () { return rxjs.of(calculatePoints(element, resolver)); }), rxjs_operators.map(function (positionStats) { return toInfiniteScrollParams(scrollState.lastScrollPosition, positionStats, distance); }), rxjs_operators.tap(function (_a) {
return attachScrollEvent(options).pipe(rxjs_operators.mergeMap(( /**
* @return {?}
*/function () { return rxjs.of(calculatePoints(element, resolver)); })), rxjs_operators.map(( /**
* @param {?} positionStats
* @return {?}
*/function (positionStats) { return toInfiniteScrollParams(scrollState.lastScrollPosition, positionStats, distance); })), rxjs_operators.tap(( /**
* @param {?} __0
* @return {?}
*/function (_a) {
var stats = _a.stats;
return scrollState.updateScroll(stats.scrolled, stats.totalToScroll);
}), rxjs_operators.filter(function (_a) {
})), rxjs_operators.filter(( /**
* @param {?} __0
* @return {?}
*/function (_a) {
var fire = _a.fire, scrollDown = _a.scrollDown, totalToScroll = _a.stats.totalToScroll;
return shouldTriggerEvents(config.alwaysCallback, fire, scrollState.isTriggeredScroll(totalToScroll, scrollDown));
}), rxjs_operators.tap(function (_a) {
})), rxjs_operators.tap(( /**
* @param {?} __0
* @return {?}
*/function (_a) {
var scrollDown = _a.scrollDown, totalToScroll = _a.stats.totalToScroll;
scrollState.updateTriggeredFlag(totalToScroll, scrollDown);
}), rxjs_operators.map(toInfiniteScrollAction));
})), rxjs_operators.map(toInfiniteScrollAction));
}

@@ -592,3 +609,3 @@ /**

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -652,3 +669,5 @@ var InfiniteScrollDirective = /** @class */ (function () {

if (hasWindowDefined()) {
this.zone.runOutsideAngular(function () {
this.zone.runOutsideAngular(( /**
* @return {?}
*/function () {
_this.disposeScroller = createScroller({

@@ -665,4 +684,9 @@ fromRoot: _this.fromRoot,

upDistance: _this.infiniteScrollUpDistance
}).subscribe(function (payload) { return _this.zone.run(function () { return _this.handleOnScroll(payload); }); });
});
}).subscribe(( /**
* @param {?} payload
* @return {?}
*/function (payload) { return _this.zone.run(( /**
* @return {?}
*/function () { return _this.handleOnScroll(payload); })); }));
}));
}

@@ -727,3 +751,3 @@ };

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -730,0 +754,0 @@ var InfiniteScrollModule = /** @class */ (function () {

@@ -1,1 +0,1 @@

{"version":3,"file":"ngx-infinite-scroll.umd.js","sources":["../../src/modules/ngx-infinite-scroll.module.ts","../../src/modules/infinite-scroll.directive.ts","../../src/services/scroll-register.ts","../../src/services/scroll-state.ts","../../src/services/scroll-resolver.ts","../../src/services/position-resolver.ts","../../src/services/event-trigger.ts","../../src/services/axis-resolver.ts","../../src/services/ngx-ins-utils.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\n\nimport { InfiniteScrollDirective } from './infinite-scroll.directive';\n\n@NgModule({\n declarations: [InfiniteScrollDirective],\n exports: [InfiniteScrollDirective],\n imports: [],\n providers: []\n})\nexport class InfiniteScrollModule { }\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges\n} from '@angular/core';\nimport {Subscription} from 'rxjs';\n\nimport { IInfiniteScrollEvent, IInfiniteScrollAction } from '../models';\nimport { hasWindowDefined, inputPropChanged } from '../services/ngx-ins-utils';\nimport { createScroller, InfiniteScrollActions } from '../services/scroll-register';\n\n@Directive({\n selector: '[infiniteScroll], [infinite-scroll], [data-infinite-scroll]'\n})\nexport class InfiniteScrollDirective\n implements OnDestroy, OnChanges, AfterViewInit {\n @Output() scrolled = new EventEmitter<IInfiniteScrollEvent>();\n @Output() scrolledUp = new EventEmitter<IInfiniteScrollEvent>();\n\n @Input() infiniteScrollDistance: number = 2;\n @Input() infiniteScrollUpDistance: number = 1.5;\n @Input() infiniteScrollThrottle: number = 150;\n @Input() infiniteScrollDisabled: boolean = false;\n @Input() infiniteScrollContainer: any = null;\n @Input() scrollWindow: boolean = true;\n @Input() immediateCheck: boolean = false;\n @Input() horizontal: boolean = false;\n @Input() alwaysCallback: boolean = false;\n @Input() fromRoot: boolean = false;\n\n private disposeScroller: Subscription;\n\n constructor(private element: ElementRef, private zone: NgZone) { }\n\n ngAfterViewInit() {\n if (!this.infiniteScrollDisabled) {\n this.setup();\n }\n }\n\n ngOnChanges({ infiniteScrollContainer, infiniteScrollDisabled, infiniteScrollDistance }: SimpleChanges) {\n const containerChanged = inputPropChanged(infiniteScrollContainer);\n const disabledChanged = inputPropChanged(infiniteScrollDisabled);\n const distanceChanged = inputPropChanged(infiniteScrollDistance);\n const shouldSetup = (!disabledChanged && !this.infiniteScrollDisabled) ||\n (disabledChanged && !infiniteScrollDisabled.currentValue) || distanceChanged;\n\n if (containerChanged || disabledChanged || distanceChanged) {\n this.destroyScroller();\n if (shouldSetup) {\n this.setup();\n }\n }\n }\n\n setup() {\n if (hasWindowDefined()) {\n this.zone.runOutsideAngular(() => {\n this.disposeScroller = createScroller({\n fromRoot: this.fromRoot,\n alwaysCallback: this.alwaysCallback,\n disable: this.infiniteScrollDisabled,\n downDistance: this.infiniteScrollDistance,\n element: this.element,\n horizontal: this.horizontal,\n scrollContainer: this.infiniteScrollContainer,\n scrollWindow: this.scrollWindow,\n throttle: this.infiniteScrollThrottle,\n upDistance: this.infiniteScrollUpDistance\n }).subscribe((payload: any) => this.zone.run(() => this.handleOnScroll(payload)));\n });\n }\n }\n\n handleOnScroll({ type, payload }: IInfiniteScrollAction) {\n switch (type) {\n case InfiniteScrollActions.DOWN:\n return this.scrolled.emit(payload);\n\n case InfiniteScrollActions.UP:\n return this.scrolledUp.emit(payload);\n\n default:\n return;\n }\n }\n\n ngOnDestroy() {\n this.destroyScroller();\n }\n\n destroyScroller() {\n if (this.disposeScroller) {\n this.disposeScroller.unsubscribe();\n }\n }\n}\n","import { Observable, of, fromEvent } from 'rxjs';\nimport { map, mergeMap, tap, sampleTime, filter } from 'rxjs/operators';\n\nimport * as Models from '../models';\nimport { AxisResolver } from './axis-resolver';\nimport { shouldTriggerEvents } from './event-trigger';\nimport { resolveContainerElement } from './ngx-ins-utils';\nimport { calculatePoints, createResolver } from './position-resolver';\nimport * as ScrollResolver from './scroll-resolver';\nimport { ScrollState } from './scroll-state';\n\nexport function createScroller(config: Models.IScroller) {\n const { scrollContainer, scrollWindow, element, fromRoot } = config;\n const resolver = createResolver({\n axis: new AxisResolver(!config.horizontal),\n windowElement: resolveContainerElement(\n scrollContainer,\n scrollWindow,\n element,\n fromRoot\n )\n });\n const scrollState = new ScrollState({\n totalToScroll: calculatePoints(element, resolver)\n });\n const options: Models.IScrollRegisterConfig = {\n container: resolver.container,\n throttle: config.throttle\n };\n const distance = {\n up: config.upDistance,\n down: config.downDistance\n };\n return attachScrollEvent(options).pipe(\n mergeMap(() => of(calculatePoints(element, resolver))),\n map((positionStats: Models.IPositionStats) =>\n toInfiniteScrollParams(\n scrollState.lastScrollPosition,\n positionStats,\n distance\n )\n ),\n tap(({ stats }: Models.IScrollParams) =>\n scrollState.updateScroll(stats.scrolled, stats.totalToScroll)\n ),\n filter(\n ({ fire, scrollDown, stats: { totalToScroll } }: Models.IScrollParams) =>\n shouldTriggerEvents(\n config.alwaysCallback,\n fire,\n scrollState.isTriggeredScroll(totalToScroll, scrollDown)\n )\n ),\n tap(({ scrollDown, stats: { totalToScroll } }: Models.IScrollParams) => {\n scrollState.updateTriggeredFlag(totalToScroll, scrollDown);\n }),\n map(toInfiniteScrollAction)\n );\n}\n\nexport function attachScrollEvent(\n options: Models.IScrollRegisterConfig\n): Observable<{}> {\n let obs = fromEvent(options.container, 'scroll');\n // For an unknown reason calling `sampleTime()` causes trouble for many users, even with `options.throttle = 0`.\n // Let's avoid calling the function unless needed.\n // See https://github.com/orizens/ngx-infinite-scroll/issues/198\n if (options.throttle) {\n obs = obs.pipe(sampleTime(options.throttle));\n }\n return obs;\n}\n\nexport function toInfiniteScrollParams(\n lastScrollPosition: number,\n stats: Models.IPositionStats,\n distance: Models.IScrollerDistance\n): Models.IScrollParams {\n const { scrollDown, fire } = ScrollResolver.getScrollStats(\n lastScrollPosition,\n stats,\n distance\n );\n return {\n scrollDown,\n fire,\n stats\n };\n}\n\nexport const InfiniteScrollActions = {\n DOWN: '[NGX_ISE] DOWN',\n UP: '[NGX_ISE] UP'\n};\n\nexport function toInfiniteScrollAction(\n response: Models.IScrollParams\n): Models.IInfiniteScrollAction {\n const {\n scrollDown,\n stats: { scrolled: currentScrollPosition }\n } = response;\n return {\n type: scrollDown ? InfiniteScrollActions.DOWN : InfiniteScrollActions.UP,\n payload: {\n currentScrollPosition\n }\n };\n}\n","import { IScrollState, IScrollerDistance } from '../models';\n\nexport class ScrollState implements IScrollState {\n lastScrollPosition = 0;\n lastTotalToScroll = 0;\n totalToScroll = 0;\n triggered: IScrollerDistance = {\n down: 0,\n up: 0\n };\n\n constructor({ totalToScroll }) {\n this.totalToScroll = totalToScroll;\n }\n\n updateScrollPosition(position: number) {\n return (this.lastScrollPosition = position);\n }\n\n updateTotalToScroll(totalToScroll: number) {\n if (this.lastTotalToScroll !== totalToScroll) {\n this.lastTotalToScroll = this.totalToScroll;\n this.totalToScroll = totalToScroll;\n }\n }\n\n updateScroll(scrolledUntilNow: number, totalToScroll: number) {\n this.updateScrollPosition(scrolledUntilNow);\n this.updateTotalToScroll(totalToScroll);\n }\n\n updateTriggeredFlag(scroll, isScrollingDown: boolean) {\n if (isScrollingDown) {\n this.triggered.down = scroll;\n } else {\n this.triggered.up = scroll;\n }\n }\n\n isTriggeredScroll(totalToScroll, isScrollingDown: boolean) {\n return isScrollingDown\n ? this.triggered.down === totalToScroll\n : this.triggered.up === totalToScroll;\n }\n}\n","import { IPositionStats, IScrollState, IScrollerDistance } from '../models';\n\nexport function shouldFireScrollEvent(\n container: IPositionStats,\n distance: IScrollerDistance,\n scrollingDown: boolean\n) {\n let remaining: number;\n let containerBreakpoint: number;\n if (container.totalToScroll <= 0) {\n return false;\n }\n\n const scrolledUntilNow = container.isWindow ? container.scrolled : container.height + container.scrolled;\n if (scrollingDown) {\n remaining =\n (container.totalToScroll - scrolledUntilNow) / container.totalToScroll;\n containerBreakpoint = distance.down / 10;\n } else {\n const totalHiddenContentHeight =\n container.scrolled + (container.totalToScroll - scrolledUntilNow);\n remaining = container.scrolled / totalHiddenContentHeight;\n containerBreakpoint = distance.up / 10;\n }\n\n const shouldFireEvent: boolean = remaining <= containerBreakpoint;\n return shouldFireEvent;\n}\n\nexport function isScrollingDownwards(\n lastScrollPosition: number,\n container: IPositionStats\n) {\n return lastScrollPosition < container.scrolled;\n}\n\nexport function getScrollStats(\n lastScrollPosition: number,\n container: IPositionStats,\n distance: IScrollerDistance\n) {\n const scrollDown = isScrollingDownwards(lastScrollPosition, container);\n return {\n fire: shouldFireScrollEvent(container, distance, scrollDown),\n scrollDown\n };\n}\n\nexport function updateScrollPosition(\n position: number,\n scrollState: IScrollState\n) {\n return (scrollState.lastScrollPosition = position);\n}\n\nexport function updateTotalToScroll(\n totalToScroll: number,\n scrollState: IScrollState\n) {\n if (scrollState.lastTotalToScroll !== totalToScroll) {\n scrollState.lastTotalToScroll = scrollState.totalToScroll;\n scrollState.totalToScroll = totalToScroll;\n }\n}\n\nexport function isSameTotalToScroll(scrollState: IScrollState) {\n return scrollState.totalToScroll === scrollState.lastTotalToScroll;\n}\n\nexport function updateTriggeredFlag(\n scroll,\n scrollState: IScrollState,\n triggered: boolean,\n isScrollingDown: boolean\n) {\n if (isScrollingDown) {\n scrollState.triggered.down = scroll;\n } else {\n scrollState.triggered.up = scroll;\n }\n}\n\nexport function isTriggeredScroll(\n totalToScroll,\n scrollState: IScrollState,\n isScrollingDown: boolean\n) {\n return isScrollingDown\n ? scrollState.triggered.down === totalToScroll\n : scrollState.triggered.up === totalToScroll;\n}\n\nexport function updateScrollState(\n scrollState: IScrollState,\n scrolledUntilNow: number,\n totalToScroll: number\n) {\n updateScrollPosition(scrolledUntilNow, scrollState);\n updateTotalToScroll(totalToScroll, scrollState);\n // const isSameTotal = isSameTotalToScroll(scrollState);\n // if (!isSameTotal) {\n // updateTriggeredFlag(scrollState, false, isScrollingDown);\n // }\n}\n","import { ElementRef } from '@angular/core';\n\nimport { ContainerRef, IPositionElements, IPositionStats, IResolver } from '../models';\nimport { AxisResolver } from './axis-resolver';\n\nexport function createResolver({\n windowElement,\n axis\n}: IPositionElements): IResolver {\n return createResolverWithContainer(\n { axis, isWindow: isElementWindow(windowElement) },\n windowElement\n );\n}\n\nexport function createResolverWithContainer(\n resolver,\n windowElement: ContainerRef\n) {\n const container =\n resolver.isWindow || (windowElement && !windowElement.nativeElement)\n ? windowElement\n : windowElement.nativeElement;\n return { ...resolver, container };\n}\n\nexport function isElementWindow(windowElement: ContainerRef): boolean {\n const isWindow = ['Window', 'global'].some((obj: string) =>\n Object.prototype.toString.call(windowElement).includes(obj)\n );\n return isWindow;\n}\n\nexport function getDocumentElement(isContainerWindow: boolean, windowElement) {\n return isContainerWindow ? windowElement.document.documentElement : null;\n}\n\nexport function calculatePoints(element: ElementRef, resolver: IResolver) {\n const height = extractHeightForElement(resolver);\n return resolver.isWindow\n ? calculatePointsForWindow(height, element, resolver)\n : calculatePointsForElement(height, element, resolver);\n}\n\nexport function calculatePointsForWindow(\n height: number,\n element: ElementRef,\n resolver: IResolver\n): IPositionStats {\n const { axis, container, isWindow } = resolver;\n const { offsetHeightKey, clientHeightKey } = extractHeightPropKeys(axis);\n // scrolled until now / current y point\n const scrolled =\n height +\n getElementPageYOffset(\n getDocumentElement(isWindow, container),\n axis,\n isWindow\n );\n // total height / most bottom y point\n const nativeElementHeight = getElementHeight(\n element.nativeElement,\n isWindow,\n offsetHeightKey,\n clientHeightKey\n );\n const totalToScroll =\n getElementOffsetTop(element.nativeElement, axis, isWindow) +\n nativeElementHeight;\n return { height, scrolled, totalToScroll, isWindow };\n}\n\nexport function calculatePointsForElement(\n height: number,\n element: ElementRef,\n resolver: IResolver\n): IPositionStats {\n const { axis, container } = resolver;\n // perhaps use container.offsetTop instead of 'scrollTop'\n const scrolled = container[axis.scrollTopKey()];\n const totalToScroll = container[axis.scrollHeightKey()];\n return { height, scrolled, totalToScroll, isWindow: false };\n}\n\nexport function extractHeightPropKeys(axis: AxisResolver) {\n return {\n offsetHeightKey: axis.offsetHeightKey(),\n clientHeightKey: axis.clientHeightKey()\n };\n}\n\nexport function extractHeightForElement({\n container,\n isWindow,\n axis\n}: IResolver) {\n const { offsetHeightKey, clientHeightKey } = extractHeightPropKeys(axis);\n return getElementHeight(\n container,\n isWindow,\n offsetHeightKey,\n clientHeightKey\n );\n}\nexport function getElementHeight(\n elem: any,\n isWindow: boolean,\n offsetHeightKey: string,\n clientHeightKey: string\n) {\n if (isNaN(elem[offsetHeightKey])) {\n const docElem = getDocumentElement(isWindow, elem);\n return docElem ? docElem[clientHeightKey] : 0;\n } else {\n return elem[offsetHeightKey];\n }\n}\n\nexport function getElementOffsetTop(\n elem: ContainerRef,\n axis: AxisResolver,\n isWindow: boolean\n) {\n const topKey = axis.topKey();\n // elem = elem.nativeElement;\n if (!elem.getBoundingClientRect) {\n // || elem.css('none')) {\n return;\n }\n return (\n elem.getBoundingClientRect()[topKey] +\n getElementPageYOffset(elem, axis, isWindow)\n );\n}\n\nexport function getElementPageYOffset(\n elem: ContainerRef,\n axis: AxisResolver,\n isWindow: boolean\n) {\n const pageYOffset = axis.pageYOffsetKey();\n const scrollTop = axis.scrollTopKey();\n const offsetTop = axis.offsetTopKey();\n\n if (isNaN(window[pageYOffset])) {\n return getDocumentElement(isWindow, elem)[scrollTop];\n } else if (elem.ownerDocument) {\n return elem.ownerDocument.defaultView[pageYOffset];\n } else {\n return elem[offsetTop];\n }\n}\n","import { IInfiniteScrollEvent, IPositionStats } from '../models';\n\nexport interface IScrollerProps extends IDistanceRange {\n container: IPositionStats;\n alwaysCallback: boolean;\n disabled: boolean;\n}\n\nexport interface ITriggerEvents {\n down: (event: any) => any;\n up: (event: any) => any;\n}\n\nexport interface IDistanceRange {\n down: number;\n up: number;\n}\n\nexport interface IScrollConfig {\n alwaysCallback: boolean;\n shouldFireScrollEvent: boolean;\n}\n\nexport function shouldTriggerEvents(\n alwaysCallback: boolean,\n shouldFireScrollEvent: boolean,\n isTriggeredCurrentTotal: boolean\n) {\n if (alwaysCallback && shouldFireScrollEvent) {\n return true;\n }\n if (!isTriggeredCurrentTotal && shouldFireScrollEvent) {\n return true;\n }\n return false;\n}\n","const VerticalProps = {\n clientHeight: \"clientHeight\",\n offsetHeight: \"offsetHeight\",\n scrollHeight: \"scrollHeight\",\n pageYOffset: \"pageYOffset\",\n offsetTop: \"offsetTop\",\n scrollTop: \"scrollTop\",\n top: \"top\"\n};\n\nconst HorizontalProps = {\n clientHeight: \"clientWidth\",\n offsetHeight: \"offsetWidth\",\n scrollHeight: \"scrollWidth\",\n pageYOffset: \"pageXOffset\",\n offsetTop: \"offsetLeft\",\n scrollTop: \"scrollLeft\",\n top: \"left\"\n};\n\nexport class AxisResolver {\n private propsMap: any;\n\n constructor(private vertical: boolean = true) {\n this.propsMap = vertical ? VerticalProps : HorizontalProps;\n }\n clientHeightKey() {\n return this.propsMap.clientHeight;\n }\n offsetHeightKey() {\n return this.propsMap.offsetHeight;\n }\n scrollHeightKey() {\n return this.propsMap.scrollHeight;\n }\n pageYOffsetKey() {\n return this.propsMap.pageYOffset;\n }\n offsetTopKey() {\n return this.propsMap.offsetTop;\n }\n scrollTopKey() {\n return this.propsMap.scrollTop;\n }\n topKey() {\n return this.propsMap.top;\n }\n}\n","import { ElementRef, SimpleChange } from '@angular/core';\n\nexport function resolveContainerElement(\n selector: string | any,\n scrollWindow,\n defaultElement,\n fromRoot: boolean\n): any {\n const hasWindow = window && !!window.document && window.document.documentElement;\n let container = hasWindow && scrollWindow ? window : defaultElement;\n if (selector) {\n const containerIsString =\n selector && hasWindow && typeof selector === 'string';\n container = containerIsString\n ? findElement(selector, defaultElement.nativeElement, fromRoot)\n : selector;\n if (!container) {\n throw new Error('ngx-infinite-scroll {resolveContainerElement()}: selector for');\n }\n }\n return container;\n}\n\nexport function findElement(\n selector: string | any,\n customRoot: ElementRef | any,\n fromRoot: boolean\n) {\n const rootEl = fromRoot ? window.document : customRoot;\n return rootEl.querySelector(selector);\n}\n\nexport function inputPropChanged(prop: SimpleChange): boolean {\n return prop && !prop.firstChange;\n}\n\nexport function hasWindowDefined(): boolean {\n return typeof window !== 'undefined';\n}\n"],"names":["NgModule","Input","Output","NgZone","ElementRef","Directive","EventEmitter","sampleTime","fromEvent","map","tap","filter","mergeMap","of"],"mappings":"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"}
{"version":3,"file":"ngx-infinite-scroll.umd.js","sources":["../../src/modules/ngx-infinite-scroll.module.ts","../../src/modules/infinite-scroll.directive.ts","../../src/services/scroll-register.ts","../../src/services/scroll-state.ts","../../src/services/scroll-resolver.ts","../../src/services/position-resolver.ts","../../src/services/event-trigger.ts","../../src/services/axis-resolver.ts","../../src/services/ngx-ins-utils.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\n\nimport { InfiniteScrollDirective } from './infinite-scroll.directive';\n\n@NgModule({\n declarations: [InfiniteScrollDirective],\n exports: [InfiniteScrollDirective],\n imports: [],\n providers: []\n})\nexport class InfiniteScrollModule { }\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges\n} from '@angular/core';\nimport {Subscription} from 'rxjs';\n\nimport { IInfiniteScrollEvent, IInfiniteScrollAction } from '../models';\nimport { hasWindowDefined, inputPropChanged } from '../services/ngx-ins-utils';\nimport { createScroller, InfiniteScrollActions } from '../services/scroll-register';\n\n@Directive({\n selector: '[infiniteScroll], [infinite-scroll], [data-infinite-scroll]'\n})\nexport class InfiniteScrollDirective\n implements OnDestroy, OnChanges, AfterViewInit {\n @Output() scrolled = new EventEmitter<IInfiniteScrollEvent>();\n @Output() scrolledUp = new EventEmitter<IInfiniteScrollEvent>();\n\n @Input() infiniteScrollDistance: number = 2;\n @Input() infiniteScrollUpDistance: number = 1.5;\n @Input() infiniteScrollThrottle: number = 150;\n @Input() infiniteScrollDisabled: boolean = false;\n @Input() infiniteScrollContainer: any = null;\n @Input() scrollWindow: boolean = true;\n @Input() immediateCheck: boolean = false;\n @Input() horizontal: boolean = false;\n @Input() alwaysCallback: boolean = false;\n @Input() fromRoot: boolean = false;\n\n private disposeScroller: Subscription;\n\n constructor(private element: ElementRef, private zone: NgZone) { }\n\n ngAfterViewInit() {\n if (!this.infiniteScrollDisabled) {\n this.setup();\n }\n }\n\n ngOnChanges({ infiniteScrollContainer, infiniteScrollDisabled, infiniteScrollDistance }: SimpleChanges) {\n const containerChanged = inputPropChanged(infiniteScrollContainer);\n const disabledChanged = inputPropChanged(infiniteScrollDisabled);\n const distanceChanged = inputPropChanged(infiniteScrollDistance);\n const shouldSetup = (!disabledChanged && !this.infiniteScrollDisabled) ||\n (disabledChanged && !infiniteScrollDisabled.currentValue) || distanceChanged;\n\n if (containerChanged || disabledChanged || distanceChanged) {\n this.destroyScroller();\n if (shouldSetup) {\n this.setup();\n }\n }\n }\n\n setup() {\n if (hasWindowDefined()) {\n this.zone.runOutsideAngular(() => {\n this.disposeScroller = createScroller({\n fromRoot: this.fromRoot,\n alwaysCallback: this.alwaysCallback,\n disable: this.infiniteScrollDisabled,\n downDistance: this.infiniteScrollDistance,\n element: this.element,\n horizontal: this.horizontal,\n scrollContainer: this.infiniteScrollContainer,\n scrollWindow: this.scrollWindow,\n throttle: this.infiniteScrollThrottle,\n upDistance: this.infiniteScrollUpDistance\n }).subscribe((payload: any) => this.zone.run(() => this.handleOnScroll(payload)));\n });\n }\n }\n\n handleOnScroll({ type, payload }: IInfiniteScrollAction) {\n switch (type) {\n case InfiniteScrollActions.DOWN:\n return this.scrolled.emit(payload);\n\n case InfiniteScrollActions.UP:\n return this.scrolledUp.emit(payload);\n\n default:\n return;\n }\n }\n\n ngOnDestroy() {\n this.destroyScroller();\n }\n\n destroyScroller() {\n if (this.disposeScroller) {\n this.disposeScroller.unsubscribe();\n }\n }\n}\n","import { Observable, of, fromEvent } from 'rxjs';\nimport { map, mergeMap, tap, sampleTime, filter } from 'rxjs/operators';\n\nimport * as Models from '../models';\nimport { AxisResolver } from './axis-resolver';\nimport { shouldTriggerEvents } from './event-trigger';\nimport { resolveContainerElement } from './ngx-ins-utils';\nimport { calculatePoints, createResolver } from './position-resolver';\nimport * as ScrollResolver from './scroll-resolver';\nimport { ScrollState } from './scroll-state';\n\nexport function createScroller(config: Models.IScroller) {\n const { scrollContainer, scrollWindow, element, fromRoot } = config;\n const resolver = createResolver({\n axis: new AxisResolver(!config.horizontal),\n windowElement: resolveContainerElement(\n scrollContainer,\n scrollWindow,\n element,\n fromRoot\n )\n });\n const scrollState = new ScrollState({\n totalToScroll: calculatePoints(element, resolver)\n });\n const options: Models.IScrollRegisterConfig = {\n container: resolver.container,\n throttle: config.throttle\n };\n const distance = {\n up: config.upDistance,\n down: config.downDistance\n };\n return attachScrollEvent(options).pipe(\n mergeMap(() => of(calculatePoints(element, resolver))),\n map((positionStats: Models.IPositionStats) =>\n toInfiniteScrollParams(\n scrollState.lastScrollPosition,\n positionStats,\n distance\n )\n ),\n tap(({ stats }: Models.IScrollParams) =>\n scrollState.updateScroll(stats.scrolled, stats.totalToScroll)\n ),\n filter(\n ({ fire, scrollDown, stats: { totalToScroll } }: Models.IScrollParams) =>\n shouldTriggerEvents(\n config.alwaysCallback,\n fire,\n scrollState.isTriggeredScroll(totalToScroll, scrollDown)\n )\n ),\n tap(({ scrollDown, stats: { totalToScroll } }: Models.IScrollParams) => {\n scrollState.updateTriggeredFlag(totalToScroll, scrollDown);\n }),\n map(toInfiniteScrollAction)\n );\n}\n\nexport function attachScrollEvent(\n options: Models.IScrollRegisterConfig\n): Observable<{}> {\n let obs = fromEvent(options.container, 'scroll');\n // For an unknown reason calling `sampleTime()` causes trouble for many users, even with `options.throttle = 0`.\n // Let's avoid calling the function unless needed.\n // See https://github.com/orizens/ngx-infinite-scroll/issues/198\n if (options.throttle) {\n obs = obs.pipe(sampleTime(options.throttle));\n }\n return obs;\n}\n\nexport function toInfiniteScrollParams(\n lastScrollPosition: number,\n stats: Models.IPositionStats,\n distance: Models.IScrollerDistance\n): Models.IScrollParams {\n const { scrollDown, fire } = ScrollResolver.getScrollStats(\n lastScrollPosition,\n stats,\n distance\n );\n return {\n scrollDown,\n fire,\n stats\n };\n}\n\nexport const InfiniteScrollActions = {\n DOWN: '[NGX_ISE] DOWN',\n UP: '[NGX_ISE] UP'\n};\n\nexport function toInfiniteScrollAction(\n response: Models.IScrollParams\n): Models.IInfiniteScrollAction {\n const {\n scrollDown,\n stats: { scrolled: currentScrollPosition }\n } = response;\n return {\n type: scrollDown ? InfiniteScrollActions.DOWN : InfiniteScrollActions.UP,\n payload: {\n currentScrollPosition\n }\n };\n}\n","import { IScrollState, IScrollerDistance } from '../models';\n\nexport class ScrollState implements IScrollState {\n lastScrollPosition = 0;\n lastTotalToScroll = 0;\n totalToScroll = 0;\n triggered: IScrollerDistance = {\n down: 0,\n up: 0\n };\n\n constructor({ totalToScroll }) {\n this.totalToScroll = totalToScroll;\n }\n\n updateScrollPosition(position: number) {\n return (this.lastScrollPosition = position);\n }\n\n updateTotalToScroll(totalToScroll: number) {\n if (this.lastTotalToScroll !== totalToScroll) {\n this.lastTotalToScroll = this.totalToScroll;\n this.totalToScroll = totalToScroll;\n }\n }\n\n updateScroll(scrolledUntilNow: number, totalToScroll: number) {\n this.updateScrollPosition(scrolledUntilNow);\n this.updateTotalToScroll(totalToScroll);\n }\n\n updateTriggeredFlag(scroll, isScrollingDown: boolean) {\n if (isScrollingDown) {\n this.triggered.down = scroll;\n } else {\n this.triggered.up = scroll;\n }\n }\n\n isTriggeredScroll(totalToScroll, isScrollingDown: boolean) {\n return isScrollingDown\n ? this.triggered.down === totalToScroll\n : this.triggered.up === totalToScroll;\n }\n}\n","import { IPositionStats, IScrollState, IScrollerDistance } from '../models';\n\nexport function shouldFireScrollEvent(\n container: IPositionStats,\n distance: IScrollerDistance,\n scrollingDown: boolean\n) {\n let remaining: number;\n let containerBreakpoint: number;\n if (container.totalToScroll <= 0) {\n return false;\n }\n\n const scrolledUntilNow = container.isWindow ? container.scrolled : container.height + container.scrolled;\n if (scrollingDown) {\n remaining =\n (container.totalToScroll - scrolledUntilNow) / container.totalToScroll;\n containerBreakpoint = distance.down / 10;\n } else {\n const totalHiddenContentHeight =\n container.scrolled + (container.totalToScroll - scrolledUntilNow);\n remaining = container.scrolled / totalHiddenContentHeight;\n containerBreakpoint = distance.up / 10;\n }\n\n const shouldFireEvent: boolean = remaining <= containerBreakpoint;\n return shouldFireEvent;\n}\n\nexport function isScrollingDownwards(\n lastScrollPosition: number,\n container: IPositionStats\n) {\n return lastScrollPosition < container.scrolled;\n}\n\nexport function getScrollStats(\n lastScrollPosition: number,\n container: IPositionStats,\n distance: IScrollerDistance\n) {\n const scrollDown = isScrollingDownwards(lastScrollPosition, container);\n return {\n fire: shouldFireScrollEvent(container, distance, scrollDown),\n scrollDown\n };\n}\n\nexport function updateScrollPosition(\n position: number,\n scrollState: IScrollState\n) {\n return (scrollState.lastScrollPosition = position);\n}\n\nexport function updateTotalToScroll(\n totalToScroll: number,\n scrollState: IScrollState\n) {\n if (scrollState.lastTotalToScroll !== totalToScroll) {\n scrollState.lastTotalToScroll = scrollState.totalToScroll;\n scrollState.totalToScroll = totalToScroll;\n }\n}\n\nexport function isSameTotalToScroll(scrollState: IScrollState) {\n return scrollState.totalToScroll === scrollState.lastTotalToScroll;\n}\n\nexport function updateTriggeredFlag(\n scroll,\n scrollState: IScrollState,\n triggered: boolean,\n isScrollingDown: boolean\n) {\n if (isScrollingDown) {\n scrollState.triggered.down = scroll;\n } else {\n scrollState.triggered.up = scroll;\n }\n}\n\nexport function isTriggeredScroll(\n totalToScroll,\n scrollState: IScrollState,\n isScrollingDown: boolean\n) {\n return isScrollingDown\n ? scrollState.triggered.down === totalToScroll\n : scrollState.triggered.up === totalToScroll;\n}\n\nexport function updateScrollState(\n scrollState: IScrollState,\n scrolledUntilNow: number,\n totalToScroll: number\n) {\n updateScrollPosition(scrolledUntilNow, scrollState);\n updateTotalToScroll(totalToScroll, scrollState);\n // const isSameTotal = isSameTotalToScroll(scrollState);\n // if (!isSameTotal) {\n // updateTriggeredFlag(scrollState, false, isScrollingDown);\n // }\n}\n","import { ElementRef } from '@angular/core';\n\nimport { ContainerRef, IPositionElements, IPositionStats, IResolver } from '../models';\nimport { AxisResolver } from './axis-resolver';\n\nexport function createResolver({\n windowElement,\n axis\n}: IPositionElements): IResolver {\n return createResolverWithContainer(\n { axis, isWindow: isElementWindow(windowElement) },\n windowElement\n );\n}\n\nexport function createResolverWithContainer(\n resolver,\n windowElement: ContainerRef\n) {\n const container =\n resolver.isWindow || (windowElement && !windowElement.nativeElement)\n ? windowElement\n : windowElement.nativeElement;\n return { ...resolver, container };\n}\n\nexport function isElementWindow(windowElement: ContainerRef): boolean {\n const isWindow = ['Window', 'global'].some((obj: string) =>\n Object.prototype.toString.call(windowElement).includes(obj)\n );\n return isWindow;\n}\n\nexport function getDocumentElement(isContainerWindow: boolean, windowElement) {\n return isContainerWindow ? windowElement.document.documentElement : null;\n}\n\nexport function calculatePoints(element: ElementRef, resolver: IResolver) {\n const height = extractHeightForElement(resolver);\n return resolver.isWindow\n ? calculatePointsForWindow(height, element, resolver)\n : calculatePointsForElement(height, element, resolver);\n}\n\nexport function calculatePointsForWindow(\n height: number,\n element: ElementRef,\n resolver: IResolver\n): IPositionStats {\n const { axis, container, isWindow } = resolver;\n const { offsetHeightKey, clientHeightKey } = extractHeightPropKeys(axis);\n // scrolled until now / current y point\n const scrolled =\n height +\n getElementPageYOffset(\n getDocumentElement(isWindow, container),\n axis,\n isWindow\n );\n // total height / most bottom y point\n const nativeElementHeight = getElementHeight(\n element.nativeElement,\n isWindow,\n offsetHeightKey,\n clientHeightKey\n );\n const totalToScroll =\n getElementOffsetTop(element.nativeElement, axis, isWindow) +\n nativeElementHeight;\n return { height, scrolled, totalToScroll, isWindow };\n}\n\nexport function calculatePointsForElement(\n height: number,\n element: ElementRef,\n resolver: IResolver\n): IPositionStats {\n const { axis, container } = resolver;\n // perhaps use container.offsetTop instead of 'scrollTop'\n const scrolled = container[axis.scrollTopKey()];\n const totalToScroll = container[axis.scrollHeightKey()];\n return { height, scrolled, totalToScroll, isWindow: false };\n}\n\nexport function extractHeightPropKeys(axis: AxisResolver) {\n return {\n offsetHeightKey: axis.offsetHeightKey(),\n clientHeightKey: axis.clientHeightKey()\n };\n}\n\nexport function extractHeightForElement({\n container,\n isWindow,\n axis\n}: IResolver) {\n const { offsetHeightKey, clientHeightKey } = extractHeightPropKeys(axis);\n return getElementHeight(\n container,\n isWindow,\n offsetHeightKey,\n clientHeightKey\n );\n}\nexport function getElementHeight(\n elem: any,\n isWindow: boolean,\n offsetHeightKey: string,\n clientHeightKey: string\n) {\n if (isNaN(elem[offsetHeightKey])) {\n const docElem = getDocumentElement(isWindow, elem);\n return docElem ? docElem[clientHeightKey] : 0;\n } else {\n return elem[offsetHeightKey];\n }\n}\n\nexport function getElementOffsetTop(\n elem: ContainerRef,\n axis: AxisResolver,\n isWindow: boolean\n) {\n const topKey = axis.topKey();\n // elem = elem.nativeElement;\n if (!elem.getBoundingClientRect) {\n // || elem.css('none')) {\n return;\n }\n return (\n elem.getBoundingClientRect()[topKey] +\n getElementPageYOffset(elem, axis, isWindow)\n );\n}\n\nexport function getElementPageYOffset(\n elem: ContainerRef,\n axis: AxisResolver,\n isWindow: boolean\n) {\n const pageYOffset = axis.pageYOffsetKey();\n const scrollTop = axis.scrollTopKey();\n const offsetTop = axis.offsetTopKey();\n\n if (isNaN(window.pageYOffset)) {\n return getDocumentElement(isWindow, elem)[scrollTop];\n } else if (elem.ownerDocument) {\n return elem.ownerDocument.defaultView[pageYOffset];\n } else {\n return elem[offsetTop];\n }\n}\n","import { IInfiniteScrollEvent, IPositionStats } from '../models';\n\nexport interface IScrollerProps extends IDistanceRange {\n container: IPositionStats;\n alwaysCallback: boolean;\n disabled: boolean;\n}\n\nexport interface ITriggerEvents {\n down: (event: any) => any;\n up: (event: any) => any;\n}\n\nexport interface IDistanceRange {\n down: number;\n up: number;\n}\n\nexport interface IScrollConfig {\n alwaysCallback: boolean;\n shouldFireScrollEvent: boolean;\n}\n\nexport function shouldTriggerEvents(\n alwaysCallback: boolean,\n shouldFireScrollEvent: boolean,\n isTriggeredCurrentTotal: boolean\n) {\n if (alwaysCallback && shouldFireScrollEvent) {\n return true;\n }\n if (!isTriggeredCurrentTotal && shouldFireScrollEvent) {\n return true;\n }\n return false;\n}\n","const VerticalProps = {\n clientHeight: \"clientHeight\",\n offsetHeight: \"offsetHeight\",\n scrollHeight: \"scrollHeight\",\n pageYOffset: \"pageYOffset\",\n offsetTop: \"offsetTop\",\n scrollTop: \"scrollTop\",\n top: \"top\"\n};\n\nconst HorizontalProps = {\n clientHeight: \"clientWidth\",\n offsetHeight: \"offsetWidth\",\n scrollHeight: \"scrollWidth\",\n pageYOffset: \"pageXOffset\",\n offsetTop: \"offsetLeft\",\n scrollTop: \"scrollLeft\",\n top: \"left\"\n};\n\nexport class AxisResolver {\n private propsMap: any;\n\n constructor(private vertical: boolean = true) {\n this.propsMap = vertical ? VerticalProps : HorizontalProps;\n }\n clientHeightKey() {\n return this.propsMap.clientHeight;\n }\n offsetHeightKey() {\n return this.propsMap.offsetHeight;\n }\n scrollHeightKey() {\n return this.propsMap.scrollHeight;\n }\n pageYOffsetKey() {\n return this.propsMap.pageYOffset;\n }\n offsetTopKey() {\n return this.propsMap.offsetTop;\n }\n scrollTopKey() {\n return this.propsMap.scrollTop;\n }\n topKey() {\n return this.propsMap.top;\n }\n}\n","import { ElementRef, SimpleChange } from '@angular/core';\n\nexport function resolveContainerElement(\n selector: string | any,\n scrollWindow,\n defaultElement,\n fromRoot: boolean\n): any {\n const hasWindow = window && !!window.document && window.document.documentElement;\n let container = hasWindow && scrollWindow ? window : defaultElement;\n if (selector) {\n const containerIsString =\n selector && hasWindow && typeof selector === 'string';\n container = containerIsString\n ? findElement(selector, defaultElement.nativeElement, fromRoot)\n : selector;\n if (!container) {\n throw new Error('ngx-infinite-scroll {resolveContainerElement()}: selector for');\n }\n }\n return container;\n}\n\nexport function findElement(\n selector: string | any,\n customRoot: ElementRef | any,\n fromRoot: boolean\n) {\n const rootEl = fromRoot ? window.document : customRoot;\n return rootEl.querySelector(selector);\n}\n\nexport function inputPropChanged(prop: SimpleChange): boolean {\n return prop && !prop.firstChange;\n}\n\nexport function hasWindowDefined(): boolean {\n return typeof window !== 'undefined';\n}\n"],"names":["NgModule","Input","Output","NgZone","ElementRef","Directive","EventEmitter","sampleTime","fromEvent","map","tap","filter","of","mergeMap"],"mappings":"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"}

@@ -1,2 +0,2 @@

!function(global,factory){"object"==typeof exports&&"undefined"!=typeof module?factory(exports,require("@angular/core"),require("rxjs"),require("rxjs/operators")):"function"==typeof define&&define.amd?define(["exports","@angular/core","rxjs","rxjs/operators"],factory):factory((global.ng=global.ng||{},global.ng.ngxInfiniteScroll=global.ng.ngxInfiniteScroll||{}),global.ng.core,global.rxjs,global.rxjs_operators)}(this,function(exports,_angular_core,rxjs,rxjs_operators){"use strict";function resolveContainerElement(selector,scrollWindow,defaultElement,fromRoot){var hasWindow=window&&!!window.document&&window.document.documentElement,container=hasWindow&&scrollWindow?window:defaultElement;if(selector){if(!(container=selector&&hasWindow&&"string"==typeof selector?findElement(selector,defaultElement.nativeElement,fromRoot):selector))throw new Error("ngx-infinite-scroll {resolveContainerElement()}: selector for")}return container}function findElement(selector,customRoot,fromRoot){return(fromRoot?window.document:customRoot).querySelector(selector)}function inputPropChanged(prop){return prop&&!prop.firstChange}function hasWindowDefined(){return"undefined"!=typeof window}function shouldTriggerEvents(alwaysCallback,shouldFireScrollEvent,isTriggeredCurrentTotal){return!(!alwaysCallback||!shouldFireScrollEvent)||!(isTriggeredCurrentTotal||!shouldFireScrollEvent)}function createResolver(_a){var windowElement=_a.windowElement;return createResolverWithContainer({axis:_a.axis,isWindow:isElementWindow(windowElement)},windowElement)}function createResolverWithContainer(resolver,windowElement){var container=resolver.isWindow||windowElement&&!windowElement.nativeElement?windowElement:windowElement.nativeElement;return Object.assign({},resolver,{container:container})}function isElementWindow(windowElement){return["Window","global"].some(function(obj){return Object.prototype.toString.call(windowElement).includes(obj)})}function getDocumentElement(isContainerWindow,windowElement){return isContainerWindow?windowElement.document.documentElement:null}function calculatePoints(element,resolver){var height=extractHeightForElement(resolver);return resolver.isWindow?calculatePointsForWindow(height,element,resolver):calculatePointsForElement(height,element,resolver)}function calculatePointsForWindow(height,element,resolver){var axis=resolver.axis,container=resolver.container,isWindow=resolver.isWindow,_a=extractHeightPropKeys(axis),offsetHeightKey=_a.offsetHeightKey,clientHeightKey=_a.clientHeightKey,scrolled=height+getElementPageYOffset(getDocumentElement(isWindow,container),axis,isWindow),nativeElementHeight=getElementHeight(element.nativeElement,isWindow,offsetHeightKey,clientHeightKey);return{height:height,scrolled:scrolled,totalToScroll:getElementOffsetTop(element.nativeElement,axis,isWindow)+nativeElementHeight,isWindow:isWindow}}function calculatePointsForElement(height,element,resolver){var axis=resolver.axis,container=resolver.container;return{height:height,scrolled:container[axis.scrollTopKey()],totalToScroll:container[axis.scrollHeightKey()],isWindow:!1}}function extractHeightPropKeys(axis){return{offsetHeightKey:axis.offsetHeightKey(),clientHeightKey:axis.clientHeightKey()}}function extractHeightForElement(_a){var container=_a.container,isWindow=_a.isWindow,axis=_a.axis,_b=extractHeightPropKeys(axis);return getElementHeight(container,isWindow,_b.offsetHeightKey,_b.clientHeightKey)}function getElementHeight(elem,isWindow,offsetHeightKey,clientHeightKey){if(isNaN(elem[offsetHeightKey])){var docElem=getDocumentElement(isWindow,elem);return docElem?docElem[clientHeightKey]:0}return elem[offsetHeightKey]}function getElementOffsetTop(elem,axis,isWindow){var topKey=axis.topKey();if(elem.getBoundingClientRect)return elem.getBoundingClientRect()[topKey]+getElementPageYOffset(elem,axis,isWindow)}function getElementPageYOffset(elem,axis,isWindow){var pageYOffset=axis.pageYOffsetKey(),scrollTop=axis.scrollTopKey(),offsetTop=axis.offsetTopKey();return isNaN(window[pageYOffset])?getDocumentElement(isWindow,elem)[scrollTop]:elem.ownerDocument?elem.ownerDocument.defaultView[pageYOffset]:elem[offsetTop]}function shouldFireScrollEvent(container,distance,scrollingDown){var remaining,containerBreakpoint;if(container.totalToScroll<=0)return!1;var scrolledUntilNow=container.isWindow?container.scrolled:container.height+container.scrolled;if(scrollingDown)remaining=(container.totalToScroll-scrolledUntilNow)/container.totalToScroll,containerBreakpoint=distance.down/10;else{var totalHiddenContentHeight=container.scrolled+(container.totalToScroll-scrolledUntilNow);remaining=container.scrolled/totalHiddenContentHeight,containerBreakpoint=distance.up/10}return remaining<=containerBreakpoint}function isScrollingDownwards(lastScrollPosition,container){return lastScrollPosition<container.scrolled}function getScrollStats(lastScrollPosition,container,distance){var scrollDown=isScrollingDownwards(lastScrollPosition,container);return{fire:shouldFireScrollEvent(container,distance,scrollDown),scrollDown:scrollDown}}function createScroller(config){var scrollContainer=config.scrollContainer,scrollWindow=config.scrollWindow,element=config.element,fromRoot=config.fromRoot,resolver=createResolver({axis:new AxisResolver(!config.horizontal),windowElement:resolveContainerElement(scrollContainer,scrollWindow,element,fromRoot)}),scrollState=new ScrollState({totalToScroll:calculatePoints(element,resolver)}),options={container:resolver.container,throttle:config.throttle},distance={up:config.upDistance,down:config.downDistance};return attachScrollEvent(options).pipe(rxjs_operators.mergeMap(function(){return rxjs.of(calculatePoints(element,resolver))}),rxjs_operators.map(function(positionStats){return toInfiniteScrollParams(scrollState.lastScrollPosition,positionStats,distance)}),rxjs_operators.tap(function(_a){var stats=_a.stats;return scrollState.updateScroll(stats.scrolled,stats.totalToScroll)}),rxjs_operators.filter(function(_a){var fire=_a.fire,scrollDown=_a.scrollDown,totalToScroll=_a.stats.totalToScroll;return shouldTriggerEvents(config.alwaysCallback,fire,scrollState.isTriggeredScroll(totalToScroll,scrollDown))}),rxjs_operators.tap(function(_a){var scrollDown=_a.scrollDown,totalToScroll=_a.stats.totalToScroll;scrollState.updateTriggeredFlag(totalToScroll,scrollDown)}),rxjs_operators.map(toInfiniteScrollAction))}function attachScrollEvent(options){var obs=rxjs.fromEvent(options.container,"scroll");return options.throttle&&(obs=obs.pipe(rxjs_operators.sampleTime(options.throttle))),obs}function toInfiniteScrollParams(lastScrollPosition,stats,distance){var _a=getScrollStats(lastScrollPosition,stats,distance);return{scrollDown:_a.scrollDown,fire:_a.fire,stats:stats}}function toInfiniteScrollAction(response){var scrollDown=response.scrollDown,currentScrollPosition=response.stats.scrolled;return{type:scrollDown?InfiniteScrollActions.DOWN:InfiniteScrollActions.UP,payload:{currentScrollPosition:currentScrollPosition}}}var VerticalProps={clientHeight:"clientHeight",offsetHeight:"offsetHeight",scrollHeight:"scrollHeight",pageYOffset:"pageYOffset",offsetTop:"offsetTop",scrollTop:"scrollTop",top:"top"},HorizontalProps={clientHeight:"clientWidth",offsetHeight:"offsetWidth",scrollHeight:"scrollWidth",pageYOffset:"pageXOffset",offsetTop:"offsetLeft",scrollTop:"scrollLeft",top:"left"},AxisResolver=function(){function AxisResolver(vertical){void 0===vertical&&(vertical=!0),this.vertical=vertical,this.propsMap=vertical?VerticalProps:HorizontalProps}return AxisResolver.prototype.clientHeightKey=function(){return this.propsMap.clientHeight},AxisResolver.prototype.offsetHeightKey=function(){return this.propsMap.offsetHeight},AxisResolver.prototype.scrollHeightKey=function(){return this.propsMap.scrollHeight},AxisResolver.prototype.pageYOffsetKey=function(){return this.propsMap.pageYOffset},AxisResolver.prototype.offsetTopKey=function(){return this.propsMap.offsetTop},AxisResolver.prototype.scrollTopKey=function(){return this.propsMap.scrollTop},AxisResolver.prototype.topKey=function(){return this.propsMap.top},AxisResolver}(),ScrollState=function(){function ScrollState(_a){var totalToScroll=_a.totalToScroll;this.lastScrollPosition=0,this.lastTotalToScroll=0,this.totalToScroll=0,this.triggered={down:0,up:0},this.totalToScroll=totalToScroll}return ScrollState.prototype.updateScrollPosition=function(position){return this.lastScrollPosition=position},ScrollState.prototype.updateTotalToScroll=function(totalToScroll){this.lastTotalToScroll!==totalToScroll&&(this.lastTotalToScroll=this.totalToScroll,this.totalToScroll=totalToScroll)},ScrollState.prototype.updateScroll=function(scrolledUntilNow,totalToScroll){this.updateScrollPosition(scrolledUntilNow),this.updateTotalToScroll(totalToScroll)},ScrollState.prototype.updateTriggeredFlag=function(scroll,isScrollingDown){isScrollingDown?this.triggered.down=scroll:this.triggered.up=scroll},ScrollState.prototype.isTriggeredScroll=function(totalToScroll,isScrollingDown){return isScrollingDown?this.triggered.down===totalToScroll:this.triggered.up===totalToScroll},ScrollState}(),InfiniteScrollActions={DOWN:"[NGX_ISE] DOWN",UP:"[NGX_ISE] UP"},InfiniteScrollDirective=function(){function InfiniteScrollDirective(element,zone){this.element=element,this.zone=zone,this.scrolled=new _angular_core.EventEmitter,this.scrolledUp=new _angular_core.EventEmitter,this.infiniteScrollDistance=2,this.infiniteScrollUpDistance=1.5,this.infiniteScrollThrottle=150,this.infiniteScrollDisabled=!1,this.infiniteScrollContainer=null,this.scrollWindow=!0,this.immediateCheck=!1,this.horizontal=!1,this.alwaysCallback=!1,this.fromRoot=!1}return InfiniteScrollDirective.prototype.ngAfterViewInit=function(){this.infiniteScrollDisabled||this.setup()},InfiniteScrollDirective.prototype.ngOnChanges=function(_a){var infiniteScrollContainer=_a.infiniteScrollContainer,infiniteScrollDisabled=_a.infiniteScrollDisabled,infiniteScrollDistance=_a.infiniteScrollDistance,containerChanged=inputPropChanged(infiniteScrollContainer),disabledChanged=inputPropChanged(infiniteScrollDisabled),distanceChanged=inputPropChanged(infiniteScrollDistance),shouldSetup=!disabledChanged&&!this.infiniteScrollDisabled||disabledChanged&&!infiniteScrollDisabled.currentValue||distanceChanged;(containerChanged||disabledChanged||distanceChanged)&&(this.destroyScroller(),shouldSetup&&this.setup())},InfiniteScrollDirective.prototype.setup=function(){var _this=this;hasWindowDefined()&&this.zone.runOutsideAngular(function(){_this.disposeScroller=createScroller({fromRoot:_this.fromRoot,alwaysCallback:_this.alwaysCallback,disable:_this.infiniteScrollDisabled,downDistance:_this.infiniteScrollDistance,element:_this.element,horizontal:_this.horizontal,scrollContainer:_this.infiniteScrollContainer,scrollWindow:_this.scrollWindow,throttle:_this.infiniteScrollThrottle,upDistance:_this.infiniteScrollUpDistance}).subscribe(function(payload){return _this.zone.run(function(){return _this.handleOnScroll(payload)})})})},InfiniteScrollDirective.prototype.handleOnScroll=function(_a){var type=_a.type,payload=_a.payload;switch(type){case InfiniteScrollActions.DOWN:return this.scrolled.emit(payload);case InfiniteScrollActions.UP:return this.scrolledUp.emit(payload);default:return}},InfiniteScrollDirective.prototype.ngOnDestroy=function(){this.destroyScroller()},InfiniteScrollDirective.prototype.destroyScroller=function(){this.disposeScroller&&this.disposeScroller.unsubscribe()},InfiniteScrollDirective}();InfiniteScrollDirective.decorators=[{type:_angular_core.Directive,args:[{selector:"[infiniteScroll], [infinite-scroll], [data-infinite-scroll]"}]}],InfiniteScrollDirective.ctorParameters=function(){return[{type:_angular_core.ElementRef},{type:_angular_core.NgZone}]},InfiniteScrollDirective.propDecorators={scrolled:[{type:_angular_core.Output}],scrolledUp:[{type:_angular_core.Output}],infiniteScrollDistance:[{type:_angular_core.Input}],infiniteScrollUpDistance:[{type:_angular_core.Input}],infiniteScrollThrottle:[{type:_angular_core.Input}],infiniteScrollDisabled:[{type:_angular_core.Input}],infiniteScrollContainer:[{type:_angular_core.Input}],scrollWindow:[{type:_angular_core.Input}],immediateCheck:[{type:_angular_core.Input}],horizontal:[{type:_angular_core.Input}],alwaysCallback:[{type:_angular_core.Input}],fromRoot:[{type:_angular_core.Input}]};var InfiniteScrollModule=function(){function InfiniteScrollModule(){}return InfiniteScrollModule}();InfiniteScrollModule.decorators=[{type:_angular_core.NgModule,args:[{declarations:[InfiniteScrollDirective],exports:[InfiniteScrollDirective],imports:[],providers:[]}]}],exports.InfiniteScrollDirective=InfiniteScrollDirective,exports.InfiniteScrollModule=InfiniteScrollModule,Object.defineProperty(exports,"__esModule",{value:!0})});
!function(global,factory){"object"==typeof exports&&"undefined"!=typeof module?factory(exports,require("@angular/core"),require("rxjs"),require("rxjs/operators")):"function"==typeof define&&define.amd?define(["exports","@angular/core","rxjs","rxjs/operators"],factory):factory((global.ng=global.ng||{},global.ng.ngxInfiniteScroll=global.ng.ngxInfiniteScroll||{}),global.ng.core,global.rxjs,global.rxjs_operators)}(this,function(exports,_angular_core,rxjs,rxjs_operators){"use strict";function resolveContainerElement(selector,scrollWindow,defaultElement,fromRoot){var hasWindow=window&&!!window.document&&window.document.documentElement,container=hasWindow&&scrollWindow?window:defaultElement;if(selector){if(!(container=selector&&hasWindow&&"string"==typeof selector?findElement(selector,defaultElement.nativeElement,fromRoot):selector))throw new Error("ngx-infinite-scroll {resolveContainerElement()}: selector for")}return container}function findElement(selector,customRoot,fromRoot){return(fromRoot?window.document:customRoot).querySelector(selector)}function inputPropChanged(prop){return prop&&!prop.firstChange}function hasWindowDefined(){return"undefined"!=typeof window}function shouldTriggerEvents(alwaysCallback,shouldFireScrollEvent,isTriggeredCurrentTotal){return!(!alwaysCallback||!shouldFireScrollEvent)||!(isTriggeredCurrentTotal||!shouldFireScrollEvent)}function createResolver(_a){var windowElement=_a.windowElement;return createResolverWithContainer({axis:_a.axis,isWindow:isElementWindow(windowElement)},windowElement)}function createResolverWithContainer(resolver,windowElement){var container=resolver.isWindow||windowElement&&!windowElement.nativeElement?windowElement:windowElement.nativeElement;return Object.assign(Object.assign({},resolver),{container:container})}function isElementWindow(windowElement){return["Window","global"].some(function(obj){return Object.prototype.toString.call(windowElement).includes(obj)})}function getDocumentElement(isContainerWindow,windowElement){return isContainerWindow?windowElement.document.documentElement:null}function calculatePoints(element,resolver){var height=extractHeightForElement(resolver);return resolver.isWindow?calculatePointsForWindow(height,element,resolver):calculatePointsForElement(height,element,resolver)}function calculatePointsForWindow(height,element,resolver){var axis=resolver.axis,container=resolver.container,isWindow=resolver.isWindow,_a=extractHeightPropKeys(axis),offsetHeightKey=_a.offsetHeightKey,clientHeightKey=_a.clientHeightKey,scrolled=height+getElementPageYOffset(getDocumentElement(isWindow,container),axis,isWindow),nativeElementHeight=getElementHeight(element.nativeElement,isWindow,offsetHeightKey,clientHeightKey);return{height:height,scrolled:scrolled,totalToScroll:getElementOffsetTop(element.nativeElement,axis,isWindow)+nativeElementHeight,isWindow:isWindow}}function calculatePointsForElement(height,element,resolver){var axis=resolver.axis,container=resolver.container;return{height:height,scrolled:container[axis.scrollTopKey()],totalToScroll:container[axis.scrollHeightKey()],isWindow:!1}}function extractHeightPropKeys(axis){return{offsetHeightKey:axis.offsetHeightKey(),clientHeightKey:axis.clientHeightKey()}}function extractHeightForElement(_a){var container=_a.container,isWindow=_a.isWindow,axis=_a.axis,_b=extractHeightPropKeys(axis);return getElementHeight(container,isWindow,_b.offsetHeightKey,_b.clientHeightKey)}function getElementHeight(elem,isWindow,offsetHeightKey,clientHeightKey){if(isNaN(elem[offsetHeightKey])){var docElem=getDocumentElement(isWindow,elem);return docElem?docElem[clientHeightKey]:0}return elem[offsetHeightKey]}function getElementOffsetTop(elem,axis,isWindow){var topKey=axis.topKey();if(elem.getBoundingClientRect)return elem.getBoundingClientRect()[topKey]+getElementPageYOffset(elem,axis,isWindow)}function getElementPageYOffset(elem,axis,isWindow){var pageYOffset=axis.pageYOffsetKey(),scrollTop=axis.scrollTopKey(),offsetTop=axis.offsetTopKey();return isNaN(window.pageYOffset)?getDocumentElement(isWindow,elem)[scrollTop]:elem.ownerDocument?elem.ownerDocument.defaultView[pageYOffset]:elem[offsetTop]}function shouldFireScrollEvent(container,distance,scrollingDown){var remaining,containerBreakpoint;if(container.totalToScroll<=0)return!1;var scrolledUntilNow=container.isWindow?container.scrolled:container.height+container.scrolled;if(scrollingDown)remaining=(container.totalToScroll-scrolledUntilNow)/container.totalToScroll,containerBreakpoint=distance.down/10;else{var totalHiddenContentHeight=container.scrolled+(container.totalToScroll-scrolledUntilNow);remaining=container.scrolled/totalHiddenContentHeight,containerBreakpoint=distance.up/10}return remaining<=containerBreakpoint}function isScrollingDownwards(lastScrollPosition,container){return lastScrollPosition<container.scrolled}function getScrollStats(lastScrollPosition,container,distance){var scrollDown=isScrollingDownwards(lastScrollPosition,container);return{fire:shouldFireScrollEvent(container,distance,scrollDown),scrollDown:scrollDown}}function createScroller(config){var scrollContainer=config.scrollContainer,scrollWindow=config.scrollWindow,element=config.element,fromRoot=config.fromRoot,resolver=createResolver({axis:new AxisResolver(!config.horizontal),windowElement:resolveContainerElement(scrollContainer,scrollWindow,element,fromRoot)}),scrollState=new ScrollState({totalToScroll:calculatePoints(element,resolver)}),options={container:resolver.container,throttle:config.throttle},distance={up:config.upDistance,down:config.downDistance};return attachScrollEvent(options).pipe(rxjs_operators.mergeMap(function(){return rxjs.of(calculatePoints(element,resolver))}),rxjs_operators.map(function(positionStats){return toInfiniteScrollParams(scrollState.lastScrollPosition,positionStats,distance)}),rxjs_operators.tap(function(_a){var stats=_a.stats;return scrollState.updateScroll(stats.scrolled,stats.totalToScroll)}),rxjs_operators.filter(function(_a){var fire=_a.fire,scrollDown=_a.scrollDown,totalToScroll=_a.stats.totalToScroll;return shouldTriggerEvents(config.alwaysCallback,fire,scrollState.isTriggeredScroll(totalToScroll,scrollDown))}),rxjs_operators.tap(function(_a){var scrollDown=_a.scrollDown,totalToScroll=_a.stats.totalToScroll;scrollState.updateTriggeredFlag(totalToScroll,scrollDown)}),rxjs_operators.map(toInfiniteScrollAction))}function attachScrollEvent(options){var obs=rxjs.fromEvent(options.container,"scroll");return options.throttle&&(obs=obs.pipe(rxjs_operators.sampleTime(options.throttle))),obs}function toInfiniteScrollParams(lastScrollPosition,stats,distance){var _a=getScrollStats(lastScrollPosition,stats,distance);return{scrollDown:_a.scrollDown,fire:_a.fire,stats:stats}}function toInfiniteScrollAction(response){var scrollDown=response.scrollDown,currentScrollPosition=response.stats.scrolled;return{type:scrollDown?InfiniteScrollActions.DOWN:InfiniteScrollActions.UP,payload:{currentScrollPosition:currentScrollPosition}}}var VerticalProps={clientHeight:"clientHeight",offsetHeight:"offsetHeight",scrollHeight:"scrollHeight",pageYOffset:"pageYOffset",offsetTop:"offsetTop",scrollTop:"scrollTop",top:"top"},HorizontalProps={clientHeight:"clientWidth",offsetHeight:"offsetWidth",scrollHeight:"scrollWidth",pageYOffset:"pageXOffset",offsetTop:"offsetLeft",scrollTop:"scrollLeft",top:"left"},AxisResolver=function(){function AxisResolver(vertical){void 0===vertical&&(vertical=!0),this.vertical=vertical,this.propsMap=vertical?VerticalProps:HorizontalProps}return AxisResolver.prototype.clientHeightKey=function(){return this.propsMap.clientHeight},AxisResolver.prototype.offsetHeightKey=function(){return this.propsMap.offsetHeight},AxisResolver.prototype.scrollHeightKey=function(){return this.propsMap.scrollHeight},AxisResolver.prototype.pageYOffsetKey=function(){return this.propsMap.pageYOffset},AxisResolver.prototype.offsetTopKey=function(){return this.propsMap.offsetTop},AxisResolver.prototype.scrollTopKey=function(){return this.propsMap.scrollTop},AxisResolver.prototype.topKey=function(){return this.propsMap.top},AxisResolver}(),ScrollState=function(){function ScrollState(_a){var totalToScroll=_a.totalToScroll;this.lastScrollPosition=0,this.lastTotalToScroll=0,this.totalToScroll=0,this.triggered={down:0,up:0},this.totalToScroll=totalToScroll}return ScrollState.prototype.updateScrollPosition=function(position){return this.lastScrollPosition=position},ScrollState.prototype.updateTotalToScroll=function(totalToScroll){this.lastTotalToScroll!==totalToScroll&&(this.lastTotalToScroll=this.totalToScroll,this.totalToScroll=totalToScroll)},ScrollState.prototype.updateScroll=function(scrolledUntilNow,totalToScroll){this.updateScrollPosition(scrolledUntilNow),this.updateTotalToScroll(totalToScroll)},ScrollState.prototype.updateTriggeredFlag=function(scroll,isScrollingDown){isScrollingDown?this.triggered.down=scroll:this.triggered.up=scroll},ScrollState.prototype.isTriggeredScroll=function(totalToScroll,isScrollingDown){return isScrollingDown?this.triggered.down===totalToScroll:this.triggered.up===totalToScroll},ScrollState}(),InfiniteScrollActions={DOWN:"[NGX_ISE] DOWN",UP:"[NGX_ISE] UP"},InfiniteScrollDirective=function(){function InfiniteScrollDirective(element,zone){this.element=element,this.zone=zone,this.scrolled=new _angular_core.EventEmitter,this.scrolledUp=new _angular_core.EventEmitter,this.infiniteScrollDistance=2,this.infiniteScrollUpDistance=1.5,this.infiniteScrollThrottle=150,this.infiniteScrollDisabled=!1,this.infiniteScrollContainer=null,this.scrollWindow=!0,this.immediateCheck=!1,this.horizontal=!1,this.alwaysCallback=!1,this.fromRoot=!1}return InfiniteScrollDirective.prototype.ngAfterViewInit=function(){this.infiniteScrollDisabled||this.setup()},InfiniteScrollDirective.prototype.ngOnChanges=function(_a){var infiniteScrollContainer=_a.infiniteScrollContainer,infiniteScrollDisabled=_a.infiniteScrollDisabled,infiniteScrollDistance=_a.infiniteScrollDistance,containerChanged=inputPropChanged(infiniteScrollContainer),disabledChanged=inputPropChanged(infiniteScrollDisabled),distanceChanged=inputPropChanged(infiniteScrollDistance),shouldSetup=!disabledChanged&&!this.infiniteScrollDisabled||disabledChanged&&!infiniteScrollDisabled.currentValue||distanceChanged;(containerChanged||disabledChanged||distanceChanged)&&(this.destroyScroller(),shouldSetup&&this.setup())},InfiniteScrollDirective.prototype.setup=function(){var _this=this;hasWindowDefined()&&this.zone.runOutsideAngular(function(){_this.disposeScroller=createScroller({fromRoot:_this.fromRoot,alwaysCallback:_this.alwaysCallback,disable:_this.infiniteScrollDisabled,downDistance:_this.infiniteScrollDistance,element:_this.element,horizontal:_this.horizontal,scrollContainer:_this.infiniteScrollContainer,scrollWindow:_this.scrollWindow,throttle:_this.infiniteScrollThrottle,upDistance:_this.infiniteScrollUpDistance}).subscribe(function(payload){return _this.zone.run(function(){return _this.handleOnScroll(payload)})})})},InfiniteScrollDirective.prototype.handleOnScroll=function(_a){var type=_a.type,payload=_a.payload;switch(type){case InfiniteScrollActions.DOWN:return this.scrolled.emit(payload);case InfiniteScrollActions.UP:return this.scrolledUp.emit(payload);default:return}},InfiniteScrollDirective.prototype.ngOnDestroy=function(){this.destroyScroller()},InfiniteScrollDirective.prototype.destroyScroller=function(){this.disposeScroller&&this.disposeScroller.unsubscribe()},InfiniteScrollDirective}();InfiniteScrollDirective.decorators=[{type:_angular_core.Directive,args:[{selector:"[infiniteScroll], [infinite-scroll], [data-infinite-scroll]"}]}],InfiniteScrollDirective.ctorParameters=function(){return[{type:_angular_core.ElementRef},{type:_angular_core.NgZone}]},InfiniteScrollDirective.propDecorators={scrolled:[{type:_angular_core.Output}],scrolledUp:[{type:_angular_core.Output}],infiniteScrollDistance:[{type:_angular_core.Input}],infiniteScrollUpDistance:[{type:_angular_core.Input}],infiniteScrollThrottle:[{type:_angular_core.Input}],infiniteScrollDisabled:[{type:_angular_core.Input}],infiniteScrollContainer:[{type:_angular_core.Input}],scrollWindow:[{type:_angular_core.Input}],immediateCheck:[{type:_angular_core.Input}],horizontal:[{type:_angular_core.Input}],alwaysCallback:[{type:_angular_core.Input}],fromRoot:[{type:_angular_core.Input}]};var InfiniteScrollModule=function(){function InfiniteScrollModule(){}return InfiniteScrollModule}();InfiniteScrollModule.decorators=[{type:_angular_core.NgModule,args:[{declarations:[InfiniteScrollDirective],exports:[InfiniteScrollDirective],imports:[],providers:[]}]}],exports.InfiniteScrollDirective=InfiniteScrollDirective,exports.InfiniteScrollModule=InfiniteScrollModule,Object.defineProperty(exports,"__esModule",{value:!0})});
//# sourceMappingURL=ngx-infinite-scroll.umd.min.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"ngx-infinite-scroll.umd.min.js","sources":["../../src/services/ngx-ins-utils.ts","../../src/services/event-trigger.ts","../../src/services/position-resolver.ts","../../src/services/scroll-resolver.ts","../../src/services/scroll-register.ts","../../src/services/axis-resolver.ts","../../src/services/scroll-state.ts","../../src/modules/infinite-scroll.directive.ts","../../src/modules/ngx-infinite-scroll.module.ts"],"sourcesContent":["import { ElementRef, SimpleChange } from '@angular/core';\n\nexport function resolveContainerElement(\n selector: string | any,\n scrollWindow,\n defaultElement,\n fromRoot: boolean\n): any {\n const hasWindow = window && !!window.document && window.document.documentElement;\n let container = hasWindow && scrollWindow ? window : defaultElement;\n if (selector) {\n const containerIsString =\n selector && hasWindow && typeof selector === 'string';\n container = containerIsString\n ? findElement(selector, defaultElement.nativeElement, fromRoot)\n : selector;\n if (!container) {\n throw new Error('ngx-infinite-scroll {resolveContainerElement()}: selector for');\n }\n }\n return container;\n}\n\nexport function findElement(\n selector: string | any,\n customRoot: ElementRef | any,\n fromRoot: boolean\n) {\n const rootEl = fromRoot ? window.document : customRoot;\n return rootEl.querySelector(selector);\n}\n\nexport function inputPropChanged(prop: SimpleChange): boolean {\n return prop && !prop.firstChange;\n}\n\nexport function hasWindowDefined(): boolean {\n return typeof window !== 'undefined';\n}\n","import { IInfiniteScrollEvent, IPositionStats } from '../models';\n\nexport interface IScrollerProps extends IDistanceRange {\n container: IPositionStats;\n alwaysCallback: boolean;\n disabled: boolean;\n}\n\nexport interface ITriggerEvents {\n down: (event: any) => any;\n up: (event: any) => any;\n}\n\nexport interface IDistanceRange {\n down: number;\n up: number;\n}\n\nexport interface IScrollConfig {\n alwaysCallback: boolean;\n shouldFireScrollEvent: boolean;\n}\n\nexport function shouldTriggerEvents(\n alwaysCallback: boolean,\n shouldFireScrollEvent: boolean,\n isTriggeredCurrentTotal: boolean\n) {\n if (alwaysCallback && shouldFireScrollEvent) {\n return true;\n }\n if (!isTriggeredCurrentTotal && shouldFireScrollEvent) {\n return true;\n }\n return false;\n}\n","import { ElementRef } from '@angular/core';\n\nimport { ContainerRef, IPositionElements, IPositionStats, IResolver } from '../models';\nimport { AxisResolver } from './axis-resolver';\n\nexport function createResolver({\n windowElement,\n axis\n}: IPositionElements): IResolver {\n return createResolverWithContainer(\n { axis, isWindow: isElementWindow(windowElement) },\n windowElement\n );\n}\n\nexport function createResolverWithContainer(\n resolver,\n windowElement: ContainerRef\n) {\n const container =\n resolver.isWindow || (windowElement && !windowElement.nativeElement)\n ? windowElement\n : windowElement.nativeElement;\n return { ...resolver, container };\n}\n\nexport function isElementWindow(windowElement: ContainerRef): boolean {\n const isWindow = ['Window', 'global'].some((obj: string) =>\n Object.prototype.toString.call(windowElement).includes(obj)\n );\n return isWindow;\n}\n\nexport function getDocumentElement(isContainerWindow: boolean, windowElement) {\n return isContainerWindow ? windowElement.document.documentElement : null;\n}\n\nexport function calculatePoints(element: ElementRef, resolver: IResolver) {\n const height = extractHeightForElement(resolver);\n return resolver.isWindow\n ? calculatePointsForWindow(height, element, resolver)\n : calculatePointsForElement(height, element, resolver);\n}\n\nexport function calculatePointsForWindow(\n height: number,\n element: ElementRef,\n resolver: IResolver\n): IPositionStats {\n const { axis, container, isWindow } = resolver;\n const { offsetHeightKey, clientHeightKey } = extractHeightPropKeys(axis);\n // scrolled until now / current y point\n const scrolled =\n height +\n getElementPageYOffset(\n getDocumentElement(isWindow, container),\n axis,\n isWindow\n );\n // total height / most bottom y point\n const nativeElementHeight = getElementHeight(\n element.nativeElement,\n isWindow,\n offsetHeightKey,\n clientHeightKey\n );\n const totalToScroll =\n getElementOffsetTop(element.nativeElement, axis, isWindow) +\n nativeElementHeight;\n return { height, scrolled, totalToScroll, isWindow };\n}\n\nexport function calculatePointsForElement(\n height: number,\n element: ElementRef,\n resolver: IResolver\n): IPositionStats {\n const { axis, container } = resolver;\n // perhaps use container.offsetTop instead of 'scrollTop'\n const scrolled = container[axis.scrollTopKey()];\n const totalToScroll = container[axis.scrollHeightKey()];\n return { height, scrolled, totalToScroll, isWindow: false };\n}\n\nexport function extractHeightPropKeys(axis: AxisResolver) {\n return {\n offsetHeightKey: axis.offsetHeightKey(),\n clientHeightKey: axis.clientHeightKey()\n };\n}\n\nexport function extractHeightForElement({\n container,\n isWindow,\n axis\n}: IResolver) {\n const { offsetHeightKey, clientHeightKey } = extractHeightPropKeys(axis);\n return getElementHeight(\n container,\n isWindow,\n offsetHeightKey,\n clientHeightKey\n );\n}\nexport function getElementHeight(\n elem: any,\n isWindow: boolean,\n offsetHeightKey: string,\n clientHeightKey: string\n) {\n if (isNaN(elem[offsetHeightKey])) {\n const docElem = getDocumentElement(isWindow, elem);\n return docElem ? docElem[clientHeightKey] : 0;\n } else {\n return elem[offsetHeightKey];\n }\n}\n\nexport function getElementOffsetTop(\n elem: ContainerRef,\n axis: AxisResolver,\n isWindow: boolean\n) {\n const topKey = axis.topKey();\n // elem = elem.nativeElement;\n if (!elem.getBoundingClientRect) {\n // || elem.css('none')) {\n return;\n }\n return (\n elem.getBoundingClientRect()[topKey] +\n getElementPageYOffset(elem, axis, isWindow)\n );\n}\n\nexport function getElementPageYOffset(\n elem: ContainerRef,\n axis: AxisResolver,\n isWindow: boolean\n) {\n const pageYOffset = axis.pageYOffsetKey();\n const scrollTop = axis.scrollTopKey();\n const offsetTop = axis.offsetTopKey();\n\n if (isNaN(window[pageYOffset])) {\n return getDocumentElement(isWindow, elem)[scrollTop];\n } else if (elem.ownerDocument) {\n return elem.ownerDocument.defaultView[pageYOffset];\n } else {\n return elem[offsetTop];\n }\n}\n","import { IPositionStats, IScrollState, IScrollerDistance } from '../models';\n\nexport function shouldFireScrollEvent(\n container: IPositionStats,\n distance: IScrollerDistance,\n scrollingDown: boolean\n) {\n let remaining: number;\n let containerBreakpoint: number;\n if (container.totalToScroll <= 0) {\n return false;\n }\n\n const scrolledUntilNow = container.isWindow ? container.scrolled : container.height + container.scrolled;\n if (scrollingDown) {\n remaining =\n (container.totalToScroll - scrolledUntilNow) / container.totalToScroll;\n containerBreakpoint = distance.down / 10;\n } else {\n const totalHiddenContentHeight =\n container.scrolled + (container.totalToScroll - scrolledUntilNow);\n remaining = container.scrolled / totalHiddenContentHeight;\n containerBreakpoint = distance.up / 10;\n }\n\n const shouldFireEvent: boolean = remaining <= containerBreakpoint;\n return shouldFireEvent;\n}\n\nexport function isScrollingDownwards(\n lastScrollPosition: number,\n container: IPositionStats\n) {\n return lastScrollPosition < container.scrolled;\n}\n\nexport function getScrollStats(\n lastScrollPosition: number,\n container: IPositionStats,\n distance: IScrollerDistance\n) {\n const scrollDown = isScrollingDownwards(lastScrollPosition, container);\n return {\n fire: shouldFireScrollEvent(container, distance, scrollDown),\n scrollDown\n };\n}\n\nexport function updateScrollPosition(\n position: number,\n scrollState: IScrollState\n) {\n return (scrollState.lastScrollPosition = position);\n}\n\nexport function updateTotalToScroll(\n totalToScroll: number,\n scrollState: IScrollState\n) {\n if (scrollState.lastTotalToScroll !== totalToScroll) {\n scrollState.lastTotalToScroll = scrollState.totalToScroll;\n scrollState.totalToScroll = totalToScroll;\n }\n}\n\nexport function isSameTotalToScroll(scrollState: IScrollState) {\n return scrollState.totalToScroll === scrollState.lastTotalToScroll;\n}\n\nexport function updateTriggeredFlag(\n scroll,\n scrollState: IScrollState,\n triggered: boolean,\n isScrollingDown: boolean\n) {\n if (isScrollingDown) {\n scrollState.triggered.down = scroll;\n } else {\n scrollState.triggered.up = scroll;\n }\n}\n\nexport function isTriggeredScroll(\n totalToScroll,\n scrollState: IScrollState,\n isScrollingDown: boolean\n) {\n return isScrollingDown\n ? scrollState.triggered.down === totalToScroll\n : scrollState.triggered.up === totalToScroll;\n}\n\nexport function updateScrollState(\n scrollState: IScrollState,\n scrolledUntilNow: number,\n totalToScroll: number\n) {\n updateScrollPosition(scrolledUntilNow, scrollState);\n updateTotalToScroll(totalToScroll, scrollState);\n // const isSameTotal = isSameTotalToScroll(scrollState);\n // if (!isSameTotal) {\n // updateTriggeredFlag(scrollState, false, isScrollingDown);\n // }\n}\n","import { Observable, of, fromEvent } from 'rxjs';\nimport { map, mergeMap, tap, sampleTime, filter } from 'rxjs/operators';\n\nimport * as Models from '../models';\nimport { AxisResolver } from './axis-resolver';\nimport { shouldTriggerEvents } from './event-trigger';\nimport { resolveContainerElement } from './ngx-ins-utils';\nimport { calculatePoints, createResolver } from './position-resolver';\nimport * as ScrollResolver from './scroll-resolver';\nimport { ScrollState } from './scroll-state';\n\nexport function createScroller(config: Models.IScroller) {\n const { scrollContainer, scrollWindow, element, fromRoot } = config;\n const resolver = createResolver({\n axis: new AxisResolver(!config.horizontal),\n windowElement: resolveContainerElement(\n scrollContainer,\n scrollWindow,\n element,\n fromRoot\n )\n });\n const scrollState = new ScrollState({\n totalToScroll: calculatePoints(element, resolver)\n });\n const options: Models.IScrollRegisterConfig = {\n container: resolver.container,\n throttle: config.throttle\n };\n const distance = {\n up: config.upDistance,\n down: config.downDistance\n };\n return attachScrollEvent(options).pipe(\n mergeMap(() => of(calculatePoints(element, resolver))),\n map((positionStats: Models.IPositionStats) =>\n toInfiniteScrollParams(\n scrollState.lastScrollPosition,\n positionStats,\n distance\n )\n ),\n tap(({ stats }: Models.IScrollParams) =>\n scrollState.updateScroll(stats.scrolled, stats.totalToScroll)\n ),\n filter(\n ({ fire, scrollDown, stats: { totalToScroll } }: Models.IScrollParams) =>\n shouldTriggerEvents(\n config.alwaysCallback,\n fire,\n scrollState.isTriggeredScroll(totalToScroll, scrollDown)\n )\n ),\n tap(({ scrollDown, stats: { totalToScroll } }: Models.IScrollParams) => {\n scrollState.updateTriggeredFlag(totalToScroll, scrollDown);\n }),\n map(toInfiniteScrollAction)\n );\n}\n\nexport function attachScrollEvent(\n options: Models.IScrollRegisterConfig\n): Observable<{}> {\n let obs = fromEvent(options.container, 'scroll');\n // For an unknown reason calling `sampleTime()` causes trouble for many users, even with `options.throttle = 0`.\n // Let's avoid calling the function unless needed.\n // See https://github.com/orizens/ngx-infinite-scroll/issues/198\n if (options.throttle) {\n obs = obs.pipe(sampleTime(options.throttle));\n }\n return obs;\n}\n\nexport function toInfiniteScrollParams(\n lastScrollPosition: number,\n stats: Models.IPositionStats,\n distance: Models.IScrollerDistance\n): Models.IScrollParams {\n const { scrollDown, fire } = ScrollResolver.getScrollStats(\n lastScrollPosition,\n stats,\n distance\n );\n return {\n scrollDown,\n fire,\n stats\n };\n}\n\nexport const InfiniteScrollActions = {\n DOWN: '[NGX_ISE] DOWN',\n UP: '[NGX_ISE] UP'\n};\n\nexport function toInfiniteScrollAction(\n response: Models.IScrollParams\n): Models.IInfiniteScrollAction {\n const {\n scrollDown,\n stats: { scrolled: currentScrollPosition }\n } = response;\n return {\n type: scrollDown ? InfiniteScrollActions.DOWN : InfiniteScrollActions.UP,\n payload: {\n currentScrollPosition\n }\n };\n}\n","const VerticalProps = {\n clientHeight: \"clientHeight\",\n offsetHeight: \"offsetHeight\",\n scrollHeight: \"scrollHeight\",\n pageYOffset: \"pageYOffset\",\n offsetTop: \"offsetTop\",\n scrollTop: \"scrollTop\",\n top: \"top\"\n};\n\nconst HorizontalProps = {\n clientHeight: \"clientWidth\",\n offsetHeight: \"offsetWidth\",\n scrollHeight: \"scrollWidth\",\n pageYOffset: \"pageXOffset\",\n offsetTop: \"offsetLeft\",\n scrollTop: \"scrollLeft\",\n top: \"left\"\n};\n\nexport class AxisResolver {\n private propsMap: any;\n\n constructor(private vertical: boolean = true) {\n this.propsMap = vertical ? VerticalProps : HorizontalProps;\n }\n clientHeightKey() {\n return this.propsMap.clientHeight;\n }\n offsetHeightKey() {\n return this.propsMap.offsetHeight;\n }\n scrollHeightKey() {\n return this.propsMap.scrollHeight;\n }\n pageYOffsetKey() {\n return this.propsMap.pageYOffset;\n }\n offsetTopKey() {\n return this.propsMap.offsetTop;\n }\n scrollTopKey() {\n return this.propsMap.scrollTop;\n }\n topKey() {\n return this.propsMap.top;\n }\n}\n","import { IScrollState, IScrollerDistance } from '../models';\n\nexport class ScrollState implements IScrollState {\n lastScrollPosition = 0;\n lastTotalToScroll = 0;\n totalToScroll = 0;\n triggered: IScrollerDistance = {\n down: 0,\n up: 0\n };\n\n constructor({ totalToScroll }) {\n this.totalToScroll = totalToScroll;\n }\n\n updateScrollPosition(position: number) {\n return (this.lastScrollPosition = position);\n }\n\n updateTotalToScroll(totalToScroll: number) {\n if (this.lastTotalToScroll !== totalToScroll) {\n this.lastTotalToScroll = this.totalToScroll;\n this.totalToScroll = totalToScroll;\n }\n }\n\n updateScroll(scrolledUntilNow: number, totalToScroll: number) {\n this.updateScrollPosition(scrolledUntilNow);\n this.updateTotalToScroll(totalToScroll);\n }\n\n updateTriggeredFlag(scroll, isScrollingDown: boolean) {\n if (isScrollingDown) {\n this.triggered.down = scroll;\n } else {\n this.triggered.up = scroll;\n }\n }\n\n isTriggeredScroll(totalToScroll, isScrollingDown: boolean) {\n return isScrollingDown\n ? this.triggered.down === totalToScroll\n : this.triggered.up === totalToScroll;\n }\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges\n} from '@angular/core';\nimport {Subscription} from 'rxjs';\n\nimport { IInfiniteScrollEvent, IInfiniteScrollAction } from '../models';\nimport { hasWindowDefined, inputPropChanged } from '../services/ngx-ins-utils';\nimport { createScroller, InfiniteScrollActions } from '../services/scroll-register';\n\n@Directive({\n selector: '[infiniteScroll], [infinite-scroll], [data-infinite-scroll]'\n})\nexport class InfiniteScrollDirective\n implements OnDestroy, OnChanges, AfterViewInit {\n @Output() scrolled = new EventEmitter<IInfiniteScrollEvent>();\n @Output() scrolledUp = new EventEmitter<IInfiniteScrollEvent>();\n\n @Input() infiniteScrollDistance: number = 2;\n @Input() infiniteScrollUpDistance: number = 1.5;\n @Input() infiniteScrollThrottle: number = 150;\n @Input() infiniteScrollDisabled: boolean = false;\n @Input() infiniteScrollContainer: any = null;\n @Input() scrollWindow: boolean = true;\n @Input() immediateCheck: boolean = false;\n @Input() horizontal: boolean = false;\n @Input() alwaysCallback: boolean = false;\n @Input() fromRoot: boolean = false;\n\n private disposeScroller: Subscription;\n\n constructor(private element: ElementRef, private zone: NgZone) { }\n\n ngAfterViewInit() {\n if (!this.infiniteScrollDisabled) {\n this.setup();\n }\n }\n\n ngOnChanges({ infiniteScrollContainer, infiniteScrollDisabled, infiniteScrollDistance }: SimpleChanges) {\n const containerChanged = inputPropChanged(infiniteScrollContainer);\n const disabledChanged = inputPropChanged(infiniteScrollDisabled);\n const distanceChanged = inputPropChanged(infiniteScrollDistance);\n const shouldSetup = (!disabledChanged && !this.infiniteScrollDisabled) ||\n (disabledChanged && !infiniteScrollDisabled.currentValue) || distanceChanged;\n\n if (containerChanged || disabledChanged || distanceChanged) {\n this.destroyScroller();\n if (shouldSetup) {\n this.setup();\n }\n }\n }\n\n setup() {\n if (hasWindowDefined()) {\n this.zone.runOutsideAngular(() => {\n this.disposeScroller = createScroller({\n fromRoot: this.fromRoot,\n alwaysCallback: this.alwaysCallback,\n disable: this.infiniteScrollDisabled,\n downDistance: this.infiniteScrollDistance,\n element: this.element,\n horizontal: this.horizontal,\n scrollContainer: this.infiniteScrollContainer,\n scrollWindow: this.scrollWindow,\n throttle: this.infiniteScrollThrottle,\n upDistance: this.infiniteScrollUpDistance\n }).subscribe((payload: any) => this.zone.run(() => this.handleOnScroll(payload)));\n });\n }\n }\n\n handleOnScroll({ type, payload }: IInfiniteScrollAction) {\n switch (type) {\n case InfiniteScrollActions.DOWN:\n return this.scrolled.emit(payload);\n\n case InfiniteScrollActions.UP:\n return this.scrolledUp.emit(payload);\n\n default:\n return;\n }\n }\n\n ngOnDestroy() {\n this.destroyScroller();\n }\n\n destroyScroller() {\n if (this.disposeScroller) {\n this.disposeScroller.unsubscribe();\n }\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { InfiniteScrollDirective } from './infinite-scroll.directive';\n\n@NgModule({\n declarations: [InfiniteScrollDirective],\n exports: [InfiniteScrollDirective],\n imports: [],\n providers: []\n})\nexport class InfiniteScrollModule { }\n"],"names":["resolveContainerElement","selector","scrollWindow","defaultElement","fromRoot","hasWindow","window","document","documentElement","container","findElement","nativeElement","Error","customRoot","querySelector","inputPropChanged","prop","firstChange","hasWindowDefined","shouldTriggerEvents","alwaysCallback","shouldFireScrollEvent","isTriggeredCurrentTotal","createResolver","_a","windowElement","createResolverWithContainer","axis","isWindow","isElementWindow","resolver","Object","assign","some","obj","prototype","toString","call","includes","getDocumentElement","isContainerWindow","calculatePoints","element","height","extractHeightForElement","calculatePointsForWindow","calculatePointsForElement","extractHeightPropKeys","offsetHeightKey","clientHeightKey","scrolled","getElementPageYOffset","nativeElementHeight","getElementHeight","totalToScroll","getElementOffsetTop","scrollTopKey","scrollHeightKey","_b","elem","isNaN","docElem","topKey","getBoundingClientRect","pageYOffset","pageYOffsetKey","scrollTop","offsetTop","offsetTopKey","ownerDocument","defaultView","distance","scrollingDown","remaining","containerBreakpoint","scrolledUntilNow","down","totalHiddenContentHeight","up","isScrollingDownwards","lastScrollPosition","getScrollStats","scrollDown","fire","createScroller","config","scrollContainer","AxisResolver","horizontal","scrollState","ScrollState","options","throttle","upDistance","downDistance","attachScrollEvent","pipe","mergeMap","of","map","positionStats","toInfiniteScrollParams","tap","stats","updateScroll","filter","isTriggeredScroll","updateTriggeredFlag","toInfiniteScrollAction","obs","fromEvent","sampleTime","response","currentScrollPosition","type","InfiniteScrollActions","DOWN","UP","payload","VerticalProps","clientHeight","offsetHeight","scrollHeight","top","HorizontalProps","vertical","this","propsMap","lastTotalToScroll","triggered","updateScrollPosition","position","updateTotalToScroll","scroll","isScrollingDown","InfiniteScrollDirective","zone","EventEmitter","scrolledUp","infiniteScrollDistance","infiniteScrollUpDistance","infiniteScrollThrottle","infiniteScrollDisabled","infiniteScrollContainer","immediateCheck","ngAfterViewInit","setup","ngOnChanges","containerChanged","disabledChanged","distanceChanged","shouldSetup","currentValue","destroyScroller","_this","runOutsideAngular","disposeScroller","disable","subscribe","run","handleOnScroll","emit","ngOnDestroy","unsubscribe","Directive","args","ElementRef","NgZone","Output","Input","InfiniteScrollModule","NgModule","declarations","exports","imports","providers"],"mappings":"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"}
{"version":3,"file":"ngx-infinite-scroll.umd.min.js","sources":["../../src/services/ngx-ins-utils.ts","../../src/services/event-trigger.ts","../../src/services/position-resolver.ts","../../src/services/scroll-resolver.ts","../../src/services/scroll-register.ts","../../src/services/axis-resolver.ts","../../src/services/scroll-state.ts","../../src/modules/infinite-scroll.directive.ts","../../src/modules/ngx-infinite-scroll.module.ts"],"sourcesContent":["import { ElementRef, SimpleChange } from '@angular/core';\n\nexport function resolveContainerElement(\n selector: string | any,\n scrollWindow,\n defaultElement,\n fromRoot: boolean\n): any {\n const hasWindow = window && !!window.document && window.document.documentElement;\n let container = hasWindow && scrollWindow ? window : defaultElement;\n if (selector) {\n const containerIsString =\n selector && hasWindow && typeof selector === 'string';\n container = containerIsString\n ? findElement(selector, defaultElement.nativeElement, fromRoot)\n : selector;\n if (!container) {\n throw new Error('ngx-infinite-scroll {resolveContainerElement()}: selector for');\n }\n }\n return container;\n}\n\nexport function findElement(\n selector: string | any,\n customRoot: ElementRef | any,\n fromRoot: boolean\n) {\n const rootEl = fromRoot ? window.document : customRoot;\n return rootEl.querySelector(selector);\n}\n\nexport function inputPropChanged(prop: SimpleChange): boolean {\n return prop && !prop.firstChange;\n}\n\nexport function hasWindowDefined(): boolean {\n return typeof window !== 'undefined';\n}\n","import { IInfiniteScrollEvent, IPositionStats } from '../models';\n\nexport interface IScrollerProps extends IDistanceRange {\n container: IPositionStats;\n alwaysCallback: boolean;\n disabled: boolean;\n}\n\nexport interface ITriggerEvents {\n down: (event: any) => any;\n up: (event: any) => any;\n}\n\nexport interface IDistanceRange {\n down: number;\n up: number;\n}\n\nexport interface IScrollConfig {\n alwaysCallback: boolean;\n shouldFireScrollEvent: boolean;\n}\n\nexport function shouldTriggerEvents(\n alwaysCallback: boolean,\n shouldFireScrollEvent: boolean,\n isTriggeredCurrentTotal: boolean\n) {\n if (alwaysCallback && shouldFireScrollEvent) {\n return true;\n }\n if (!isTriggeredCurrentTotal && shouldFireScrollEvent) {\n return true;\n }\n return false;\n}\n","import { ElementRef } from '@angular/core';\n\nimport { ContainerRef, IPositionElements, IPositionStats, IResolver } from '../models';\nimport { AxisResolver } from './axis-resolver';\n\nexport function createResolver({\n windowElement,\n axis\n}: IPositionElements): IResolver {\n return createResolverWithContainer(\n { axis, isWindow: isElementWindow(windowElement) },\n windowElement\n );\n}\n\nexport function createResolverWithContainer(\n resolver,\n windowElement: ContainerRef\n) {\n const container =\n resolver.isWindow || (windowElement && !windowElement.nativeElement)\n ? windowElement\n : windowElement.nativeElement;\n return { ...resolver, container };\n}\n\nexport function isElementWindow(windowElement: ContainerRef): boolean {\n const isWindow = ['Window', 'global'].some((obj: string) =>\n Object.prototype.toString.call(windowElement).includes(obj)\n );\n return isWindow;\n}\n\nexport function getDocumentElement(isContainerWindow: boolean, windowElement) {\n return isContainerWindow ? windowElement.document.documentElement : null;\n}\n\nexport function calculatePoints(element: ElementRef, resolver: IResolver) {\n const height = extractHeightForElement(resolver);\n return resolver.isWindow\n ? calculatePointsForWindow(height, element, resolver)\n : calculatePointsForElement(height, element, resolver);\n}\n\nexport function calculatePointsForWindow(\n height: number,\n element: ElementRef,\n resolver: IResolver\n): IPositionStats {\n const { axis, container, isWindow } = resolver;\n const { offsetHeightKey, clientHeightKey } = extractHeightPropKeys(axis);\n // scrolled until now / current y point\n const scrolled =\n height +\n getElementPageYOffset(\n getDocumentElement(isWindow, container),\n axis,\n isWindow\n );\n // total height / most bottom y point\n const nativeElementHeight = getElementHeight(\n element.nativeElement,\n isWindow,\n offsetHeightKey,\n clientHeightKey\n );\n const totalToScroll =\n getElementOffsetTop(element.nativeElement, axis, isWindow) +\n nativeElementHeight;\n return { height, scrolled, totalToScroll, isWindow };\n}\n\nexport function calculatePointsForElement(\n height: number,\n element: ElementRef,\n resolver: IResolver\n): IPositionStats {\n const { axis, container } = resolver;\n // perhaps use container.offsetTop instead of 'scrollTop'\n const scrolled = container[axis.scrollTopKey()];\n const totalToScroll = container[axis.scrollHeightKey()];\n return { height, scrolled, totalToScroll, isWindow: false };\n}\n\nexport function extractHeightPropKeys(axis: AxisResolver) {\n return {\n offsetHeightKey: axis.offsetHeightKey(),\n clientHeightKey: axis.clientHeightKey()\n };\n}\n\nexport function extractHeightForElement({\n container,\n isWindow,\n axis\n}: IResolver) {\n const { offsetHeightKey, clientHeightKey } = extractHeightPropKeys(axis);\n return getElementHeight(\n container,\n isWindow,\n offsetHeightKey,\n clientHeightKey\n );\n}\nexport function getElementHeight(\n elem: any,\n isWindow: boolean,\n offsetHeightKey: string,\n clientHeightKey: string\n) {\n if (isNaN(elem[offsetHeightKey])) {\n const docElem = getDocumentElement(isWindow, elem);\n return docElem ? docElem[clientHeightKey] : 0;\n } else {\n return elem[offsetHeightKey];\n }\n}\n\nexport function getElementOffsetTop(\n elem: ContainerRef,\n axis: AxisResolver,\n isWindow: boolean\n) {\n const topKey = axis.topKey();\n // elem = elem.nativeElement;\n if (!elem.getBoundingClientRect) {\n // || elem.css('none')) {\n return;\n }\n return (\n elem.getBoundingClientRect()[topKey] +\n getElementPageYOffset(elem, axis, isWindow)\n );\n}\n\nexport function getElementPageYOffset(\n elem: ContainerRef,\n axis: AxisResolver,\n isWindow: boolean\n) {\n const pageYOffset = axis.pageYOffsetKey();\n const scrollTop = axis.scrollTopKey();\n const offsetTop = axis.offsetTopKey();\n\n if (isNaN(window.pageYOffset)) {\n return getDocumentElement(isWindow, elem)[scrollTop];\n } else if (elem.ownerDocument) {\n return elem.ownerDocument.defaultView[pageYOffset];\n } else {\n return elem[offsetTop];\n }\n}\n","import { IPositionStats, IScrollState, IScrollerDistance } from '../models';\n\nexport function shouldFireScrollEvent(\n container: IPositionStats,\n distance: IScrollerDistance,\n scrollingDown: boolean\n) {\n let remaining: number;\n let containerBreakpoint: number;\n if (container.totalToScroll <= 0) {\n return false;\n }\n\n const scrolledUntilNow = container.isWindow ? container.scrolled : container.height + container.scrolled;\n if (scrollingDown) {\n remaining =\n (container.totalToScroll - scrolledUntilNow) / container.totalToScroll;\n containerBreakpoint = distance.down / 10;\n } else {\n const totalHiddenContentHeight =\n container.scrolled + (container.totalToScroll - scrolledUntilNow);\n remaining = container.scrolled / totalHiddenContentHeight;\n containerBreakpoint = distance.up / 10;\n }\n\n const shouldFireEvent: boolean = remaining <= containerBreakpoint;\n return shouldFireEvent;\n}\n\nexport function isScrollingDownwards(\n lastScrollPosition: number,\n container: IPositionStats\n) {\n return lastScrollPosition < container.scrolled;\n}\n\nexport function getScrollStats(\n lastScrollPosition: number,\n container: IPositionStats,\n distance: IScrollerDistance\n) {\n const scrollDown = isScrollingDownwards(lastScrollPosition, container);\n return {\n fire: shouldFireScrollEvent(container, distance, scrollDown),\n scrollDown\n };\n}\n\nexport function updateScrollPosition(\n position: number,\n scrollState: IScrollState\n) {\n return (scrollState.lastScrollPosition = position);\n}\n\nexport function updateTotalToScroll(\n totalToScroll: number,\n scrollState: IScrollState\n) {\n if (scrollState.lastTotalToScroll !== totalToScroll) {\n scrollState.lastTotalToScroll = scrollState.totalToScroll;\n scrollState.totalToScroll = totalToScroll;\n }\n}\n\nexport function isSameTotalToScroll(scrollState: IScrollState) {\n return scrollState.totalToScroll === scrollState.lastTotalToScroll;\n}\n\nexport function updateTriggeredFlag(\n scroll,\n scrollState: IScrollState,\n triggered: boolean,\n isScrollingDown: boolean\n) {\n if (isScrollingDown) {\n scrollState.triggered.down = scroll;\n } else {\n scrollState.triggered.up = scroll;\n }\n}\n\nexport function isTriggeredScroll(\n totalToScroll,\n scrollState: IScrollState,\n isScrollingDown: boolean\n) {\n return isScrollingDown\n ? scrollState.triggered.down === totalToScroll\n : scrollState.triggered.up === totalToScroll;\n}\n\nexport function updateScrollState(\n scrollState: IScrollState,\n scrolledUntilNow: number,\n totalToScroll: number\n) {\n updateScrollPosition(scrolledUntilNow, scrollState);\n updateTotalToScroll(totalToScroll, scrollState);\n // const isSameTotal = isSameTotalToScroll(scrollState);\n // if (!isSameTotal) {\n // updateTriggeredFlag(scrollState, false, isScrollingDown);\n // }\n}\n","import { Observable, of, fromEvent } from 'rxjs';\nimport { map, mergeMap, tap, sampleTime, filter } from 'rxjs/operators';\n\nimport * as Models from '../models';\nimport { AxisResolver } from './axis-resolver';\nimport { shouldTriggerEvents } from './event-trigger';\nimport { resolveContainerElement } from './ngx-ins-utils';\nimport { calculatePoints, createResolver } from './position-resolver';\nimport * as ScrollResolver from './scroll-resolver';\nimport { ScrollState } from './scroll-state';\n\nexport function createScroller(config: Models.IScroller) {\n const { scrollContainer, scrollWindow, element, fromRoot } = config;\n const resolver = createResolver({\n axis: new AxisResolver(!config.horizontal),\n windowElement: resolveContainerElement(\n scrollContainer,\n scrollWindow,\n element,\n fromRoot\n )\n });\n const scrollState = new ScrollState({\n totalToScroll: calculatePoints(element, resolver)\n });\n const options: Models.IScrollRegisterConfig = {\n container: resolver.container,\n throttle: config.throttle\n };\n const distance = {\n up: config.upDistance,\n down: config.downDistance\n };\n return attachScrollEvent(options).pipe(\n mergeMap(() => of(calculatePoints(element, resolver))),\n map((positionStats: Models.IPositionStats) =>\n toInfiniteScrollParams(\n scrollState.lastScrollPosition,\n positionStats,\n distance\n )\n ),\n tap(({ stats }: Models.IScrollParams) =>\n scrollState.updateScroll(stats.scrolled, stats.totalToScroll)\n ),\n filter(\n ({ fire, scrollDown, stats: { totalToScroll } }: Models.IScrollParams) =>\n shouldTriggerEvents(\n config.alwaysCallback,\n fire,\n scrollState.isTriggeredScroll(totalToScroll, scrollDown)\n )\n ),\n tap(({ scrollDown, stats: { totalToScroll } }: Models.IScrollParams) => {\n scrollState.updateTriggeredFlag(totalToScroll, scrollDown);\n }),\n map(toInfiniteScrollAction)\n );\n}\n\nexport function attachScrollEvent(\n options: Models.IScrollRegisterConfig\n): Observable<{}> {\n let obs = fromEvent(options.container, 'scroll');\n // For an unknown reason calling `sampleTime()` causes trouble for many users, even with `options.throttle = 0`.\n // Let's avoid calling the function unless needed.\n // See https://github.com/orizens/ngx-infinite-scroll/issues/198\n if (options.throttle) {\n obs = obs.pipe(sampleTime(options.throttle));\n }\n return obs;\n}\n\nexport function toInfiniteScrollParams(\n lastScrollPosition: number,\n stats: Models.IPositionStats,\n distance: Models.IScrollerDistance\n): Models.IScrollParams {\n const { scrollDown, fire } = ScrollResolver.getScrollStats(\n lastScrollPosition,\n stats,\n distance\n );\n return {\n scrollDown,\n fire,\n stats\n };\n}\n\nexport const InfiniteScrollActions = {\n DOWN: '[NGX_ISE] DOWN',\n UP: '[NGX_ISE] UP'\n};\n\nexport function toInfiniteScrollAction(\n response: Models.IScrollParams\n): Models.IInfiniteScrollAction {\n const {\n scrollDown,\n stats: { scrolled: currentScrollPosition }\n } = response;\n return {\n type: scrollDown ? InfiniteScrollActions.DOWN : InfiniteScrollActions.UP,\n payload: {\n currentScrollPosition\n }\n };\n}\n","const VerticalProps = {\n clientHeight: \"clientHeight\",\n offsetHeight: \"offsetHeight\",\n scrollHeight: \"scrollHeight\",\n pageYOffset: \"pageYOffset\",\n offsetTop: \"offsetTop\",\n scrollTop: \"scrollTop\",\n top: \"top\"\n};\n\nconst HorizontalProps = {\n clientHeight: \"clientWidth\",\n offsetHeight: \"offsetWidth\",\n scrollHeight: \"scrollWidth\",\n pageYOffset: \"pageXOffset\",\n offsetTop: \"offsetLeft\",\n scrollTop: \"scrollLeft\",\n top: \"left\"\n};\n\nexport class AxisResolver {\n private propsMap: any;\n\n constructor(private vertical: boolean = true) {\n this.propsMap = vertical ? VerticalProps : HorizontalProps;\n }\n clientHeightKey() {\n return this.propsMap.clientHeight;\n }\n offsetHeightKey() {\n return this.propsMap.offsetHeight;\n }\n scrollHeightKey() {\n return this.propsMap.scrollHeight;\n }\n pageYOffsetKey() {\n return this.propsMap.pageYOffset;\n }\n offsetTopKey() {\n return this.propsMap.offsetTop;\n }\n scrollTopKey() {\n return this.propsMap.scrollTop;\n }\n topKey() {\n return this.propsMap.top;\n }\n}\n","import { IScrollState, IScrollerDistance } from '../models';\n\nexport class ScrollState implements IScrollState {\n lastScrollPosition = 0;\n lastTotalToScroll = 0;\n totalToScroll = 0;\n triggered: IScrollerDistance = {\n down: 0,\n up: 0\n };\n\n constructor({ totalToScroll }) {\n this.totalToScroll = totalToScroll;\n }\n\n updateScrollPosition(position: number) {\n return (this.lastScrollPosition = position);\n }\n\n updateTotalToScroll(totalToScroll: number) {\n if (this.lastTotalToScroll !== totalToScroll) {\n this.lastTotalToScroll = this.totalToScroll;\n this.totalToScroll = totalToScroll;\n }\n }\n\n updateScroll(scrolledUntilNow: number, totalToScroll: number) {\n this.updateScrollPosition(scrolledUntilNow);\n this.updateTotalToScroll(totalToScroll);\n }\n\n updateTriggeredFlag(scroll, isScrollingDown: boolean) {\n if (isScrollingDown) {\n this.triggered.down = scroll;\n } else {\n this.triggered.up = scroll;\n }\n }\n\n isTriggeredScroll(totalToScroll, isScrollingDown: boolean) {\n return isScrollingDown\n ? this.triggered.down === totalToScroll\n : this.triggered.up === totalToScroll;\n }\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges\n} from '@angular/core';\nimport {Subscription} from 'rxjs';\n\nimport { IInfiniteScrollEvent, IInfiniteScrollAction } from '../models';\nimport { hasWindowDefined, inputPropChanged } from '../services/ngx-ins-utils';\nimport { createScroller, InfiniteScrollActions } from '../services/scroll-register';\n\n@Directive({\n selector: '[infiniteScroll], [infinite-scroll], [data-infinite-scroll]'\n})\nexport class InfiniteScrollDirective\n implements OnDestroy, OnChanges, AfterViewInit {\n @Output() scrolled = new EventEmitter<IInfiniteScrollEvent>();\n @Output() scrolledUp = new EventEmitter<IInfiniteScrollEvent>();\n\n @Input() infiniteScrollDistance: number = 2;\n @Input() infiniteScrollUpDistance: number = 1.5;\n @Input() infiniteScrollThrottle: number = 150;\n @Input() infiniteScrollDisabled: boolean = false;\n @Input() infiniteScrollContainer: any = null;\n @Input() scrollWindow: boolean = true;\n @Input() immediateCheck: boolean = false;\n @Input() horizontal: boolean = false;\n @Input() alwaysCallback: boolean = false;\n @Input() fromRoot: boolean = false;\n\n private disposeScroller: Subscription;\n\n constructor(private element: ElementRef, private zone: NgZone) { }\n\n ngAfterViewInit() {\n if (!this.infiniteScrollDisabled) {\n this.setup();\n }\n }\n\n ngOnChanges({ infiniteScrollContainer, infiniteScrollDisabled, infiniteScrollDistance }: SimpleChanges) {\n const containerChanged = inputPropChanged(infiniteScrollContainer);\n const disabledChanged = inputPropChanged(infiniteScrollDisabled);\n const distanceChanged = inputPropChanged(infiniteScrollDistance);\n const shouldSetup = (!disabledChanged && !this.infiniteScrollDisabled) ||\n (disabledChanged && !infiniteScrollDisabled.currentValue) || distanceChanged;\n\n if (containerChanged || disabledChanged || distanceChanged) {\n this.destroyScroller();\n if (shouldSetup) {\n this.setup();\n }\n }\n }\n\n setup() {\n if (hasWindowDefined()) {\n this.zone.runOutsideAngular(() => {\n this.disposeScroller = createScroller({\n fromRoot: this.fromRoot,\n alwaysCallback: this.alwaysCallback,\n disable: this.infiniteScrollDisabled,\n downDistance: this.infiniteScrollDistance,\n element: this.element,\n horizontal: this.horizontal,\n scrollContainer: this.infiniteScrollContainer,\n scrollWindow: this.scrollWindow,\n throttle: this.infiniteScrollThrottle,\n upDistance: this.infiniteScrollUpDistance\n }).subscribe((payload: any) => this.zone.run(() => this.handleOnScroll(payload)));\n });\n }\n }\n\n handleOnScroll({ type, payload }: IInfiniteScrollAction) {\n switch (type) {\n case InfiniteScrollActions.DOWN:\n return this.scrolled.emit(payload);\n\n case InfiniteScrollActions.UP:\n return this.scrolledUp.emit(payload);\n\n default:\n return;\n }\n }\n\n ngOnDestroy() {\n this.destroyScroller();\n }\n\n destroyScroller() {\n if (this.disposeScroller) {\n this.disposeScroller.unsubscribe();\n }\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { InfiniteScrollDirective } from './infinite-scroll.directive';\n\n@NgModule({\n declarations: [InfiniteScrollDirective],\n exports: [InfiniteScrollDirective],\n imports: [],\n providers: []\n})\nexport class InfiniteScrollModule { }\n"],"names":["resolveContainerElement","selector","scrollWindow","defaultElement","fromRoot","hasWindow","window","document","documentElement","container","findElement","nativeElement","Error","customRoot","querySelector","inputPropChanged","prop","firstChange","hasWindowDefined","shouldTriggerEvents","alwaysCallback","shouldFireScrollEvent","isTriggeredCurrentTotal","createResolver","_a","windowElement","createResolverWithContainer","axis","isWindow","isElementWindow","resolver","Object","assign","some","obj","prototype","toString","call","includes","getDocumentElement","isContainerWindow","calculatePoints","element","height","extractHeightForElement","calculatePointsForWindow","calculatePointsForElement","extractHeightPropKeys","offsetHeightKey","clientHeightKey","scrolled","getElementPageYOffset","nativeElementHeight","getElementHeight","totalToScroll","getElementOffsetTop","scrollTopKey","scrollHeightKey","_b","elem","isNaN","docElem","topKey","getBoundingClientRect","pageYOffset","pageYOffsetKey","scrollTop","offsetTop","offsetTopKey","ownerDocument","defaultView","distance","scrollingDown","remaining","containerBreakpoint","scrolledUntilNow","down","totalHiddenContentHeight","up","isScrollingDownwards","lastScrollPosition","getScrollStats","scrollDown","fire","createScroller","config","scrollContainer","AxisResolver","horizontal","scrollState","ScrollState","options","throttle","upDistance","downDistance","attachScrollEvent","pipe","mergeMap","of","map","positionStats","toInfiniteScrollParams","tap","stats","updateScroll","filter","isTriggeredScroll","updateTriggeredFlag","toInfiniteScrollAction","obs","fromEvent","sampleTime","response","currentScrollPosition","type","InfiniteScrollActions","DOWN","UP","payload","VerticalProps","clientHeight","offsetHeight","scrollHeight","top","HorizontalProps","vertical","this","propsMap","lastTotalToScroll","triggered","updateScrollPosition","position","updateTotalToScroll","scroll","isScrollingDown","InfiniteScrollDirective","zone","EventEmitter","scrolledUp","infiniteScrollDistance","infiniteScrollUpDistance","infiniteScrollThrottle","infiniteScrollDisabled","infiniteScrollContainer","immediateCheck","ngAfterViewInit","setup","ngOnChanges","containerChanged","disabledChanged","distanceChanged","shouldSetup","currentValue","destroyScroller","_this","runOutsideAngular","disposeScroller","disable","subscribe","run","handleOnScroll","emit","ngOnDestroy","unsubscribe","Directive","args","ElementRef","NgZone","Output","Input","InfiniteScrollModule","NgModule","declarations","exports","imports","providers"],"mappings":"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"}

@@ -6,3 +6,3 @@ import { Directive, ElementRef, EventEmitter, Input, NgModule, NgZone, Output } from '@angular/core';

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -59,3 +59,3 @@ /**

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -137,3 +137,3 @@ /** @type {?} */

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -169,3 +169,3 @@ /**

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -190,3 +190,3 @@ /**

: windowElement.nativeElement;
return Object.assign({}, resolver, { container: container });
return Object.assign(Object.assign({}, resolver), { container: container });
}

@@ -199,3 +199,6 @@ /**

/** @type {?} */
var isWindow = ['Window', 'global'].some(function (obj) { return Object.prototype.toString.call(windowElement).includes(obj); });
var isWindow = ['Window', 'global'].some(( /**
* @param {?} obj
* @return {?}
*/function (obj) { return Object.prototype.toString.call(windowElement).includes(obj); }));
return isWindow;

@@ -325,3 +328,3 @@ }

var offsetTop = axis.offsetTopKey();
if (isNaN(window[pageYOffset])) {
if (isNaN(window.pageYOffset)) {
return getDocumentElement(isWindow, elem)[scrollTop];

@@ -338,3 +341,3 @@ }

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -429,3 +432,3 @@ /**

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -500,3 +503,3 @@ var ScrollState = /** @class */ (function () {

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -528,12 +531,26 @@ /**

};
return attachScrollEvent(options).pipe(mergeMap(function () { return of(calculatePoints(element, resolver)); }), map(function (positionStats) { return toInfiniteScrollParams(scrollState.lastScrollPosition, positionStats, distance); }), tap(function (_a) {
return attachScrollEvent(options).pipe(mergeMap(( /**
* @return {?}
*/function () { return of(calculatePoints(element, resolver)); })), map(( /**
* @param {?} positionStats
* @return {?}
*/function (positionStats) { return toInfiniteScrollParams(scrollState.lastScrollPosition, positionStats, distance); })), tap(( /**
* @param {?} __0
* @return {?}
*/function (_a) {
var stats = _a.stats;
return scrollState.updateScroll(stats.scrolled, stats.totalToScroll);
}), filter(function (_a) {
})), filter(( /**
* @param {?} __0
* @return {?}
*/function (_a) {
var fire = _a.fire, scrollDown = _a.scrollDown, totalToScroll = _a.stats.totalToScroll;
return shouldTriggerEvents(config.alwaysCallback, fire, scrollState.isTriggeredScroll(totalToScroll, scrollDown));
}), tap(function (_a) {
})), tap(( /**
* @param {?} __0
* @return {?}
*/function (_a) {
var scrollDown = _a.scrollDown, totalToScroll = _a.stats.totalToScroll;
scrollState.updateTriggeredFlag(totalToScroll, scrollDown);
}), map(toInfiniteScrollAction));
})), map(toInfiniteScrollAction));
}

@@ -589,3 +606,3 @@ /**

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -649,3 +666,5 @@ var InfiniteScrollDirective = /** @class */ (function () {

if (hasWindowDefined()) {
this.zone.runOutsideAngular(function () {
this.zone.runOutsideAngular(( /**
* @return {?}
*/function () {
_this.disposeScroller = createScroller({

@@ -662,4 +681,9 @@ fromRoot: _this.fromRoot,

upDistance: _this.infiniteScrollUpDistance
}).subscribe(function (payload) { return _this.zone.run(function () { return _this.handleOnScroll(payload); }); });
});
}).subscribe(( /**
* @param {?} payload
* @return {?}
*/function (payload) { return _this.zone.run(( /**
* @return {?}
*/function () { return _this.handleOnScroll(payload); })); }));
}));
}

@@ -724,3 +748,3 @@ };

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -742,7 +766,7 @@ var InfiniteScrollModule = /** @class */ (function () {

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -761,3 +785,3 @@ /**

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -764,0 +788,0 @@ /**

@@ -1,1 +0,1 @@

{"version":3,"file":"ngx-infinite-scroll.es5.js","sources":["../../ngx-infinite-scroll.ts","../../public_api.ts","../../src/ngx-infinite-scroll.ts","../../src/modules/ngx-infinite-scroll.module.ts","../../src/modules/infinite-scroll.directive.ts","../../src/services/scroll-register.ts","../../src/services/scroll-state.ts","../../src/services/scroll-resolver.ts","../../src/services/position-resolver.ts","../../src/services/event-trigger.ts","../../src/services/axis-resolver.ts","../../src/services/ngx-ins-utils.ts"],"sourcesContent":["export * from './public_api';\n","/**\n * Angular library starter.\n * Build an Angular library compatible with AoT compilation & Tree shaking.\n * Written by Roberto Simonetti.\n * MIT license.\n * https://github.com/robisim74/angular-library-starter\n */\n\n/**\n * Entry point for all public APIs of the package.\n */\nexport * from './src/ngx-infinite-scroll';\n\n","// Public classes.\nexport {\n ContainerRef,\n IInfiniteScrollEvent,\n IPositionElements,\n IPositionStats,\n IResolver\n} from './models';\n\nexport { InfiniteScrollDirective } from './modules/infinite-scroll.directive';\nexport { InfiniteScrollModule } from './modules/ngx-infinite-scroll.module';\n","import { NgModule } from '@angular/core';\n\nimport { InfiniteScrollDirective } from './infinite-scroll.directive';\n\n@NgModule({\n declarations: [InfiniteScrollDirective],\n exports: [InfiniteScrollDirective],\n imports: [],\n providers: []\n})\nexport class InfiniteScrollModule { }\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges\n} from '@angular/core';\nimport {Subscription} from 'rxjs';\n\nimport { IInfiniteScrollEvent, IInfiniteScrollAction } from '../models';\nimport { hasWindowDefined, inputPropChanged } from '../services/ngx-ins-utils';\nimport { createScroller, InfiniteScrollActions } from '../services/scroll-register';\n\n@Directive({\n selector: '[infiniteScroll], [infinite-scroll], [data-infinite-scroll]'\n})\nexport class InfiniteScrollDirective\n implements OnDestroy, OnChanges, AfterViewInit {\n @Output() scrolled = new EventEmitter<IInfiniteScrollEvent>();\n @Output() scrolledUp = new EventEmitter<IInfiniteScrollEvent>();\n\n @Input() infiniteScrollDistance: number = 2;\n @Input() infiniteScrollUpDistance: number = 1.5;\n @Input() infiniteScrollThrottle: number = 150;\n @Input() infiniteScrollDisabled: boolean = false;\n @Input() infiniteScrollContainer: any = null;\n @Input() scrollWindow: boolean = true;\n @Input() immediateCheck: boolean = false;\n @Input() horizontal: boolean = false;\n @Input() alwaysCallback: boolean = false;\n @Input() fromRoot: boolean = false;\n\n private disposeScroller: Subscription;\n\n constructor(private element: ElementRef, private zone: NgZone) { }\n\n ngAfterViewInit() {\n if (!this.infiniteScrollDisabled) {\n this.setup();\n }\n }\n\n ngOnChanges({ infiniteScrollContainer, infiniteScrollDisabled, infiniteScrollDistance }: SimpleChanges) {\n const containerChanged = inputPropChanged(infiniteScrollContainer);\n const disabledChanged = inputPropChanged(infiniteScrollDisabled);\n const distanceChanged = inputPropChanged(infiniteScrollDistance);\n const shouldSetup = (!disabledChanged && !this.infiniteScrollDisabled) ||\n (disabledChanged && !infiniteScrollDisabled.currentValue) || distanceChanged;\n\n if (containerChanged || disabledChanged || distanceChanged) {\n this.destroyScroller();\n if (shouldSetup) {\n this.setup();\n }\n }\n }\n\n setup() {\n if (hasWindowDefined()) {\n this.zone.runOutsideAngular(() => {\n this.disposeScroller = createScroller({\n fromRoot: this.fromRoot,\n alwaysCallback: this.alwaysCallback,\n disable: this.infiniteScrollDisabled,\n downDistance: this.infiniteScrollDistance,\n element: this.element,\n horizontal: this.horizontal,\n scrollContainer: this.infiniteScrollContainer,\n scrollWindow: this.scrollWindow,\n throttle: this.infiniteScrollThrottle,\n upDistance: this.infiniteScrollUpDistance\n }).subscribe((payload: any) => this.zone.run(() => this.handleOnScroll(payload)));\n });\n }\n }\n\n handleOnScroll({ type, payload }: IInfiniteScrollAction) {\n switch (type) {\n case InfiniteScrollActions.DOWN:\n return this.scrolled.emit(payload);\n\n case InfiniteScrollActions.UP:\n return this.scrolledUp.emit(payload);\n\n default:\n return;\n }\n }\n\n ngOnDestroy() {\n this.destroyScroller();\n }\n\n destroyScroller() {\n if (this.disposeScroller) {\n this.disposeScroller.unsubscribe();\n }\n }\n}\n","import { Observable, of, fromEvent } from 'rxjs';\nimport { map, mergeMap, tap, sampleTime, filter } from 'rxjs/operators';\n\nimport * as Models from '../models';\nimport { AxisResolver } from './axis-resolver';\nimport { shouldTriggerEvents } from './event-trigger';\nimport { resolveContainerElement } from './ngx-ins-utils';\nimport { calculatePoints, createResolver } from './position-resolver';\nimport * as ScrollResolver from './scroll-resolver';\nimport { ScrollState } from './scroll-state';\n\nexport function createScroller(config: Models.IScroller) {\n const { scrollContainer, scrollWindow, element, fromRoot } = config;\n const resolver = createResolver({\n axis: new AxisResolver(!config.horizontal),\n windowElement: resolveContainerElement(\n scrollContainer,\n scrollWindow,\n element,\n fromRoot\n )\n });\n const scrollState = new ScrollState({\n totalToScroll: calculatePoints(element, resolver)\n });\n const options: Models.IScrollRegisterConfig = {\n container: resolver.container,\n throttle: config.throttle\n };\n const distance = {\n up: config.upDistance,\n down: config.downDistance\n };\n return attachScrollEvent(options).pipe(\n mergeMap(() => of(calculatePoints(element, resolver))),\n map((positionStats: Models.IPositionStats) =>\n toInfiniteScrollParams(\n scrollState.lastScrollPosition,\n positionStats,\n distance\n )\n ),\n tap(({ stats }: Models.IScrollParams) =>\n scrollState.updateScroll(stats.scrolled, stats.totalToScroll)\n ),\n filter(\n ({ fire, scrollDown, stats: { totalToScroll } }: Models.IScrollParams) =>\n shouldTriggerEvents(\n config.alwaysCallback,\n fire,\n scrollState.isTriggeredScroll(totalToScroll, scrollDown)\n )\n ),\n tap(({ scrollDown, stats: { totalToScroll } }: Models.IScrollParams) => {\n scrollState.updateTriggeredFlag(totalToScroll, scrollDown);\n }),\n map(toInfiniteScrollAction)\n );\n}\n\nexport function attachScrollEvent(\n options: Models.IScrollRegisterConfig\n): Observable<{}> {\n let obs = fromEvent(options.container, 'scroll');\n // For an unknown reason calling `sampleTime()` causes trouble for many users, even with `options.throttle = 0`.\n // Let's avoid calling the function unless needed.\n // See https://github.com/orizens/ngx-infinite-scroll/issues/198\n if (options.throttle) {\n obs = obs.pipe(sampleTime(options.throttle));\n }\n return obs;\n}\n\nexport function toInfiniteScrollParams(\n lastScrollPosition: number,\n stats: Models.IPositionStats,\n distance: Models.IScrollerDistance\n): Models.IScrollParams {\n const { scrollDown, fire } = ScrollResolver.getScrollStats(\n lastScrollPosition,\n stats,\n distance\n );\n return {\n scrollDown,\n fire,\n stats\n };\n}\n\nexport const InfiniteScrollActions = {\n DOWN: '[NGX_ISE] DOWN',\n UP: '[NGX_ISE] UP'\n};\n\nexport function toInfiniteScrollAction(\n response: Models.IScrollParams\n): Models.IInfiniteScrollAction {\n const {\n scrollDown,\n stats: { scrolled: currentScrollPosition }\n } = response;\n return {\n type: scrollDown ? InfiniteScrollActions.DOWN : InfiniteScrollActions.UP,\n payload: {\n currentScrollPosition\n }\n };\n}\n","import { IScrollState, IScrollerDistance } from '../models';\n\nexport class ScrollState implements IScrollState {\n lastScrollPosition = 0;\n lastTotalToScroll = 0;\n totalToScroll = 0;\n triggered: IScrollerDistance = {\n down: 0,\n up: 0\n };\n\n constructor({ totalToScroll }) {\n this.totalToScroll = totalToScroll;\n }\n\n updateScrollPosition(position: number) {\n return (this.lastScrollPosition = position);\n }\n\n updateTotalToScroll(totalToScroll: number) {\n if (this.lastTotalToScroll !== totalToScroll) {\n this.lastTotalToScroll = this.totalToScroll;\n this.totalToScroll = totalToScroll;\n }\n }\n\n updateScroll(scrolledUntilNow: number, totalToScroll: number) {\n this.updateScrollPosition(scrolledUntilNow);\n this.updateTotalToScroll(totalToScroll);\n }\n\n updateTriggeredFlag(scroll, isScrollingDown: boolean) {\n if (isScrollingDown) {\n this.triggered.down = scroll;\n } else {\n this.triggered.up = scroll;\n }\n }\n\n isTriggeredScroll(totalToScroll, isScrollingDown: boolean) {\n return isScrollingDown\n ? this.triggered.down === totalToScroll\n : this.triggered.up === totalToScroll;\n }\n}\n","import { IPositionStats, IScrollState, IScrollerDistance } from '../models';\n\nexport function shouldFireScrollEvent(\n container: IPositionStats,\n distance: IScrollerDistance,\n scrollingDown: boolean\n) {\n let remaining: number;\n let containerBreakpoint: number;\n if (container.totalToScroll <= 0) {\n return false;\n }\n\n const scrolledUntilNow = container.isWindow ? container.scrolled : container.height + container.scrolled;\n if (scrollingDown) {\n remaining =\n (container.totalToScroll - scrolledUntilNow) / container.totalToScroll;\n containerBreakpoint = distance.down / 10;\n } else {\n const totalHiddenContentHeight =\n container.scrolled + (container.totalToScroll - scrolledUntilNow);\n remaining = container.scrolled / totalHiddenContentHeight;\n containerBreakpoint = distance.up / 10;\n }\n\n const shouldFireEvent: boolean = remaining <= containerBreakpoint;\n return shouldFireEvent;\n}\n\nexport function isScrollingDownwards(\n lastScrollPosition: number,\n container: IPositionStats\n) {\n return lastScrollPosition < container.scrolled;\n}\n\nexport function getScrollStats(\n lastScrollPosition: number,\n container: IPositionStats,\n distance: IScrollerDistance\n) {\n const scrollDown = isScrollingDownwards(lastScrollPosition, container);\n return {\n fire: shouldFireScrollEvent(container, distance, scrollDown),\n scrollDown\n };\n}\n\nexport function updateScrollPosition(\n position: number,\n scrollState: IScrollState\n) {\n return (scrollState.lastScrollPosition = position);\n}\n\nexport function updateTotalToScroll(\n totalToScroll: number,\n scrollState: IScrollState\n) {\n if (scrollState.lastTotalToScroll !== totalToScroll) {\n scrollState.lastTotalToScroll = scrollState.totalToScroll;\n scrollState.totalToScroll = totalToScroll;\n }\n}\n\nexport function isSameTotalToScroll(scrollState: IScrollState) {\n return scrollState.totalToScroll === scrollState.lastTotalToScroll;\n}\n\nexport function updateTriggeredFlag(\n scroll,\n scrollState: IScrollState,\n triggered: boolean,\n isScrollingDown: boolean\n) {\n if (isScrollingDown) {\n scrollState.triggered.down = scroll;\n } else {\n scrollState.triggered.up = scroll;\n }\n}\n\nexport function isTriggeredScroll(\n totalToScroll,\n scrollState: IScrollState,\n isScrollingDown: boolean\n) {\n return isScrollingDown\n ? scrollState.triggered.down === totalToScroll\n : scrollState.triggered.up === totalToScroll;\n}\n\nexport function updateScrollState(\n scrollState: IScrollState,\n scrolledUntilNow: number,\n totalToScroll: number\n) {\n updateScrollPosition(scrolledUntilNow, scrollState);\n updateTotalToScroll(totalToScroll, scrollState);\n // const isSameTotal = isSameTotalToScroll(scrollState);\n // if (!isSameTotal) {\n // updateTriggeredFlag(scrollState, false, isScrollingDown);\n // }\n}\n","import { ElementRef } from '@angular/core';\n\nimport { ContainerRef, IPositionElements, IPositionStats, IResolver } from '../models';\nimport { AxisResolver } from './axis-resolver';\n\nexport function createResolver({\n windowElement,\n axis\n}: IPositionElements): IResolver {\n return createResolverWithContainer(\n { axis, isWindow: isElementWindow(windowElement) },\n windowElement\n );\n}\n\nexport function createResolverWithContainer(\n resolver,\n windowElement: ContainerRef\n) {\n const container =\n resolver.isWindow || (windowElement && !windowElement.nativeElement)\n ? windowElement\n : windowElement.nativeElement;\n return { ...resolver, container };\n}\n\nexport function isElementWindow(windowElement: ContainerRef): boolean {\n const isWindow = ['Window', 'global'].some((obj: string) =>\n Object.prototype.toString.call(windowElement).includes(obj)\n );\n return isWindow;\n}\n\nexport function getDocumentElement(isContainerWindow: boolean, windowElement) {\n return isContainerWindow ? windowElement.document.documentElement : null;\n}\n\nexport function calculatePoints(element: ElementRef, resolver: IResolver) {\n const height = extractHeightForElement(resolver);\n return resolver.isWindow\n ? calculatePointsForWindow(height, element, resolver)\n : calculatePointsForElement(height, element, resolver);\n}\n\nexport function calculatePointsForWindow(\n height: number,\n element: ElementRef,\n resolver: IResolver\n): IPositionStats {\n const { axis, container, isWindow } = resolver;\n const { offsetHeightKey, clientHeightKey } = extractHeightPropKeys(axis);\n // scrolled until now / current y point\n const scrolled =\n height +\n getElementPageYOffset(\n getDocumentElement(isWindow, container),\n axis,\n isWindow\n );\n // total height / most bottom y point\n const nativeElementHeight = getElementHeight(\n element.nativeElement,\n isWindow,\n offsetHeightKey,\n clientHeightKey\n );\n const totalToScroll =\n getElementOffsetTop(element.nativeElement, axis, isWindow) +\n nativeElementHeight;\n return { height, scrolled, totalToScroll, isWindow };\n}\n\nexport function calculatePointsForElement(\n height: number,\n element: ElementRef,\n resolver: IResolver\n): IPositionStats {\n const { axis, container } = resolver;\n // perhaps use container.offsetTop instead of 'scrollTop'\n const scrolled = container[axis.scrollTopKey()];\n const totalToScroll = container[axis.scrollHeightKey()];\n return { height, scrolled, totalToScroll, isWindow: false };\n}\n\nexport function extractHeightPropKeys(axis: AxisResolver) {\n return {\n offsetHeightKey: axis.offsetHeightKey(),\n clientHeightKey: axis.clientHeightKey()\n };\n}\n\nexport function extractHeightForElement({\n container,\n isWindow,\n axis\n}: IResolver) {\n const { offsetHeightKey, clientHeightKey } = extractHeightPropKeys(axis);\n return getElementHeight(\n container,\n isWindow,\n offsetHeightKey,\n clientHeightKey\n );\n}\nexport function getElementHeight(\n elem: any,\n isWindow: boolean,\n offsetHeightKey: string,\n clientHeightKey: string\n) {\n if (isNaN(elem[offsetHeightKey])) {\n const docElem = getDocumentElement(isWindow, elem);\n return docElem ? docElem[clientHeightKey] : 0;\n } else {\n return elem[offsetHeightKey];\n }\n}\n\nexport function getElementOffsetTop(\n elem: ContainerRef,\n axis: AxisResolver,\n isWindow: boolean\n) {\n const topKey = axis.topKey();\n // elem = elem.nativeElement;\n if (!elem.getBoundingClientRect) {\n // || elem.css('none')) {\n return;\n }\n return (\n elem.getBoundingClientRect()[topKey] +\n getElementPageYOffset(elem, axis, isWindow)\n );\n}\n\nexport function getElementPageYOffset(\n elem: ContainerRef,\n axis: AxisResolver,\n isWindow: boolean\n) {\n const pageYOffset = axis.pageYOffsetKey();\n const scrollTop = axis.scrollTopKey();\n const offsetTop = axis.offsetTopKey();\n\n if (isNaN(window[pageYOffset])) {\n return getDocumentElement(isWindow, elem)[scrollTop];\n } else if (elem.ownerDocument) {\n return elem.ownerDocument.defaultView[pageYOffset];\n } else {\n return elem[offsetTop];\n }\n}\n","import { IInfiniteScrollEvent, IPositionStats } from '../models';\n\nexport interface IScrollerProps extends IDistanceRange {\n container: IPositionStats;\n alwaysCallback: boolean;\n disabled: boolean;\n}\n\nexport interface ITriggerEvents {\n down: (event: any) => any;\n up: (event: any) => any;\n}\n\nexport interface IDistanceRange {\n down: number;\n up: number;\n}\n\nexport interface IScrollConfig {\n alwaysCallback: boolean;\n shouldFireScrollEvent: boolean;\n}\n\nexport function shouldTriggerEvents(\n alwaysCallback: boolean,\n shouldFireScrollEvent: boolean,\n isTriggeredCurrentTotal: boolean\n) {\n if (alwaysCallback && shouldFireScrollEvent) {\n return true;\n }\n if (!isTriggeredCurrentTotal && shouldFireScrollEvent) {\n return true;\n }\n return false;\n}\n","const VerticalProps = {\n clientHeight: \"clientHeight\",\n offsetHeight: \"offsetHeight\",\n scrollHeight: \"scrollHeight\",\n pageYOffset: \"pageYOffset\",\n offsetTop: \"offsetTop\",\n scrollTop: \"scrollTop\",\n top: \"top\"\n};\n\nconst HorizontalProps = {\n clientHeight: \"clientWidth\",\n offsetHeight: \"offsetWidth\",\n scrollHeight: \"scrollWidth\",\n pageYOffset: \"pageXOffset\",\n offsetTop: \"offsetLeft\",\n scrollTop: \"scrollLeft\",\n top: \"left\"\n};\n\nexport class AxisResolver {\n private propsMap: any;\n\n constructor(private vertical: boolean = true) {\n this.propsMap = vertical ? VerticalProps : HorizontalProps;\n }\n clientHeightKey() {\n return this.propsMap.clientHeight;\n }\n offsetHeightKey() {\n return this.propsMap.offsetHeight;\n }\n scrollHeightKey() {\n return this.propsMap.scrollHeight;\n }\n pageYOffsetKey() {\n return this.propsMap.pageYOffset;\n }\n offsetTopKey() {\n return this.propsMap.offsetTop;\n }\n scrollTopKey() {\n return this.propsMap.scrollTop;\n }\n topKey() {\n return this.propsMap.top;\n }\n}\n","import { ElementRef, SimpleChange } from '@angular/core';\n\nexport function resolveContainerElement(\n selector: string | any,\n scrollWindow,\n defaultElement,\n fromRoot: boolean\n): any {\n const hasWindow = window && !!window.document && window.document.documentElement;\n let container = hasWindow && scrollWindow ? window : defaultElement;\n if (selector) {\n const containerIsString =\n selector && hasWindow && typeof selector === 'string';\n container = containerIsString\n ? findElement(selector, defaultElement.nativeElement, fromRoot)\n : selector;\n if (!container) {\n throw new Error('ngx-infinite-scroll {resolveContainerElement()}: selector for');\n }\n }\n return container;\n}\n\nexport function findElement(\n selector: string | any,\n customRoot: ElementRef | any,\n fromRoot: boolean\n) {\n const rootEl = fromRoot ? window.document : customRoot;\n return rootEl.querySelector(selector);\n}\n\nexport function inputPropChanged(prop: SimpleChange): boolean {\n return prop && !prop.firstChange;\n}\n\nexport function hasWindowDefined(): boolean {\n return typeof window !== 'undefined';\n}\n"],"names":[],"mappings":"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"}
{"version":3,"file":"ngx-infinite-scroll.es5.js","sources":["../../ngx-infinite-scroll.ts","../../public-api.ts","../../src/ngx-infinite-scroll.ts","../../src/modules/ngx-infinite-scroll.module.ts","../../src/modules/infinite-scroll.directive.ts","../../src/services/scroll-register.ts","../../src/services/scroll-state.ts","../../src/services/scroll-resolver.ts","../../src/services/position-resolver.ts","../../src/services/event-trigger.ts","../../src/services/axis-resolver.ts","../../src/services/ngx-ins-utils.ts"],"sourcesContent":["export * from './public-api';\n","/**\n * Angular library starter.\n * Build an Angular library compatible with AoT compilation & Tree shaking.\n * Written by Roberto Simonetti.\n * MIT license.\n * https://github.com/robisim74/angular-library-starter\n */\n\n/**\n * Entry point for all public APIs of the package.\n */\nexport * from './src/ngx-infinite-scroll';\n\n","// Public classes.\nexport {\n ContainerRef,\n IInfiniteScrollEvent,\n IPositionElements,\n IPositionStats,\n IResolver\n} from './models';\n\nexport { InfiniteScrollDirective } from './modules/infinite-scroll.directive';\nexport { InfiniteScrollModule } from './modules/ngx-infinite-scroll.module';\n","import { NgModule } from '@angular/core';\n\nimport { InfiniteScrollDirective } from './infinite-scroll.directive';\n\n@NgModule({\n declarations: [InfiniteScrollDirective],\n exports: [InfiniteScrollDirective],\n imports: [],\n providers: []\n})\nexport class InfiniteScrollModule { }\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges\n} from '@angular/core';\nimport {Subscription} from 'rxjs';\n\nimport { IInfiniteScrollEvent, IInfiniteScrollAction } from '../models';\nimport { hasWindowDefined, inputPropChanged } from '../services/ngx-ins-utils';\nimport { createScroller, InfiniteScrollActions } from '../services/scroll-register';\n\n@Directive({\n selector: '[infiniteScroll], [infinite-scroll], [data-infinite-scroll]'\n})\nexport class InfiniteScrollDirective\n implements OnDestroy, OnChanges, AfterViewInit {\n @Output() scrolled = new EventEmitter<IInfiniteScrollEvent>();\n @Output() scrolledUp = new EventEmitter<IInfiniteScrollEvent>();\n\n @Input() infiniteScrollDistance: number = 2;\n @Input() infiniteScrollUpDistance: number = 1.5;\n @Input() infiniteScrollThrottle: number = 150;\n @Input() infiniteScrollDisabled: boolean = false;\n @Input() infiniteScrollContainer: any = null;\n @Input() scrollWindow: boolean = true;\n @Input() immediateCheck: boolean = false;\n @Input() horizontal: boolean = false;\n @Input() alwaysCallback: boolean = false;\n @Input() fromRoot: boolean = false;\n\n private disposeScroller: Subscription;\n\n constructor(private element: ElementRef, private zone: NgZone) { }\n\n ngAfterViewInit() {\n if (!this.infiniteScrollDisabled) {\n this.setup();\n }\n }\n\n ngOnChanges({ infiniteScrollContainer, infiniteScrollDisabled, infiniteScrollDistance }: SimpleChanges) {\n const containerChanged = inputPropChanged(infiniteScrollContainer);\n const disabledChanged = inputPropChanged(infiniteScrollDisabled);\n const distanceChanged = inputPropChanged(infiniteScrollDistance);\n const shouldSetup = (!disabledChanged && !this.infiniteScrollDisabled) ||\n (disabledChanged && !infiniteScrollDisabled.currentValue) || distanceChanged;\n\n if (containerChanged || disabledChanged || distanceChanged) {\n this.destroyScroller();\n if (shouldSetup) {\n this.setup();\n }\n }\n }\n\n setup() {\n if (hasWindowDefined()) {\n this.zone.runOutsideAngular(() => {\n this.disposeScroller = createScroller({\n fromRoot: this.fromRoot,\n alwaysCallback: this.alwaysCallback,\n disable: this.infiniteScrollDisabled,\n downDistance: this.infiniteScrollDistance,\n element: this.element,\n horizontal: this.horizontal,\n scrollContainer: this.infiniteScrollContainer,\n scrollWindow: this.scrollWindow,\n throttle: this.infiniteScrollThrottle,\n upDistance: this.infiniteScrollUpDistance\n }).subscribe((payload: any) => this.zone.run(() => this.handleOnScroll(payload)));\n });\n }\n }\n\n handleOnScroll({ type, payload }: IInfiniteScrollAction) {\n switch (type) {\n case InfiniteScrollActions.DOWN:\n return this.scrolled.emit(payload);\n\n case InfiniteScrollActions.UP:\n return this.scrolledUp.emit(payload);\n\n default:\n return;\n }\n }\n\n ngOnDestroy() {\n this.destroyScroller();\n }\n\n destroyScroller() {\n if (this.disposeScroller) {\n this.disposeScroller.unsubscribe();\n }\n }\n}\n","import { Observable, of, fromEvent } from 'rxjs';\nimport { map, mergeMap, tap, sampleTime, filter } from 'rxjs/operators';\n\nimport * as Models from '../models';\nimport { AxisResolver } from './axis-resolver';\nimport { shouldTriggerEvents } from './event-trigger';\nimport { resolveContainerElement } from './ngx-ins-utils';\nimport { calculatePoints, createResolver } from './position-resolver';\nimport * as ScrollResolver from './scroll-resolver';\nimport { ScrollState } from './scroll-state';\n\nexport function createScroller(config: Models.IScroller) {\n const { scrollContainer, scrollWindow, element, fromRoot } = config;\n const resolver = createResolver({\n axis: new AxisResolver(!config.horizontal),\n windowElement: resolveContainerElement(\n scrollContainer,\n scrollWindow,\n element,\n fromRoot\n )\n });\n const scrollState = new ScrollState({\n totalToScroll: calculatePoints(element, resolver)\n });\n const options: Models.IScrollRegisterConfig = {\n container: resolver.container,\n throttle: config.throttle\n };\n const distance = {\n up: config.upDistance,\n down: config.downDistance\n };\n return attachScrollEvent(options).pipe(\n mergeMap(() => of(calculatePoints(element, resolver))),\n map((positionStats: Models.IPositionStats) =>\n toInfiniteScrollParams(\n scrollState.lastScrollPosition,\n positionStats,\n distance\n )\n ),\n tap(({ stats }: Models.IScrollParams) =>\n scrollState.updateScroll(stats.scrolled, stats.totalToScroll)\n ),\n filter(\n ({ fire, scrollDown, stats: { totalToScroll } }: Models.IScrollParams) =>\n shouldTriggerEvents(\n config.alwaysCallback,\n fire,\n scrollState.isTriggeredScroll(totalToScroll, scrollDown)\n )\n ),\n tap(({ scrollDown, stats: { totalToScroll } }: Models.IScrollParams) => {\n scrollState.updateTriggeredFlag(totalToScroll, scrollDown);\n }),\n map(toInfiniteScrollAction)\n );\n}\n\nexport function attachScrollEvent(\n options: Models.IScrollRegisterConfig\n): Observable<{}> {\n let obs = fromEvent(options.container, 'scroll');\n // For an unknown reason calling `sampleTime()` causes trouble for many users, even with `options.throttle = 0`.\n // Let's avoid calling the function unless needed.\n // See https://github.com/orizens/ngx-infinite-scroll/issues/198\n if (options.throttle) {\n obs = obs.pipe(sampleTime(options.throttle));\n }\n return obs;\n}\n\nexport function toInfiniteScrollParams(\n lastScrollPosition: number,\n stats: Models.IPositionStats,\n distance: Models.IScrollerDistance\n): Models.IScrollParams {\n const { scrollDown, fire } = ScrollResolver.getScrollStats(\n lastScrollPosition,\n stats,\n distance\n );\n return {\n scrollDown,\n fire,\n stats\n };\n}\n\nexport const InfiniteScrollActions = {\n DOWN: '[NGX_ISE] DOWN',\n UP: '[NGX_ISE] UP'\n};\n\nexport function toInfiniteScrollAction(\n response: Models.IScrollParams\n): Models.IInfiniteScrollAction {\n const {\n scrollDown,\n stats: { scrolled: currentScrollPosition }\n } = response;\n return {\n type: scrollDown ? InfiniteScrollActions.DOWN : InfiniteScrollActions.UP,\n payload: {\n currentScrollPosition\n }\n };\n}\n","import { IScrollState, IScrollerDistance } from '../models';\n\nexport class ScrollState implements IScrollState {\n lastScrollPosition = 0;\n lastTotalToScroll = 0;\n totalToScroll = 0;\n triggered: IScrollerDistance = {\n down: 0,\n up: 0\n };\n\n constructor({ totalToScroll }) {\n this.totalToScroll = totalToScroll;\n }\n\n updateScrollPosition(position: number) {\n return (this.lastScrollPosition = position);\n }\n\n updateTotalToScroll(totalToScroll: number) {\n if (this.lastTotalToScroll !== totalToScroll) {\n this.lastTotalToScroll = this.totalToScroll;\n this.totalToScroll = totalToScroll;\n }\n }\n\n updateScroll(scrolledUntilNow: number, totalToScroll: number) {\n this.updateScrollPosition(scrolledUntilNow);\n this.updateTotalToScroll(totalToScroll);\n }\n\n updateTriggeredFlag(scroll, isScrollingDown: boolean) {\n if (isScrollingDown) {\n this.triggered.down = scroll;\n } else {\n this.triggered.up = scroll;\n }\n }\n\n isTriggeredScroll(totalToScroll, isScrollingDown: boolean) {\n return isScrollingDown\n ? this.triggered.down === totalToScroll\n : this.triggered.up === totalToScroll;\n }\n}\n","import { IPositionStats, IScrollState, IScrollerDistance } from '../models';\n\nexport function shouldFireScrollEvent(\n container: IPositionStats,\n distance: IScrollerDistance,\n scrollingDown: boolean\n) {\n let remaining: number;\n let containerBreakpoint: number;\n if (container.totalToScroll <= 0) {\n return false;\n }\n\n const scrolledUntilNow = container.isWindow ? container.scrolled : container.height + container.scrolled;\n if (scrollingDown) {\n remaining =\n (container.totalToScroll - scrolledUntilNow) / container.totalToScroll;\n containerBreakpoint = distance.down / 10;\n } else {\n const totalHiddenContentHeight =\n container.scrolled + (container.totalToScroll - scrolledUntilNow);\n remaining = container.scrolled / totalHiddenContentHeight;\n containerBreakpoint = distance.up / 10;\n }\n\n const shouldFireEvent: boolean = remaining <= containerBreakpoint;\n return shouldFireEvent;\n}\n\nexport function isScrollingDownwards(\n lastScrollPosition: number,\n container: IPositionStats\n) {\n return lastScrollPosition < container.scrolled;\n}\n\nexport function getScrollStats(\n lastScrollPosition: number,\n container: IPositionStats,\n distance: IScrollerDistance\n) {\n const scrollDown = isScrollingDownwards(lastScrollPosition, container);\n return {\n fire: shouldFireScrollEvent(container, distance, scrollDown),\n scrollDown\n };\n}\n\nexport function updateScrollPosition(\n position: number,\n scrollState: IScrollState\n) {\n return (scrollState.lastScrollPosition = position);\n}\n\nexport function updateTotalToScroll(\n totalToScroll: number,\n scrollState: IScrollState\n) {\n if (scrollState.lastTotalToScroll !== totalToScroll) {\n scrollState.lastTotalToScroll = scrollState.totalToScroll;\n scrollState.totalToScroll = totalToScroll;\n }\n}\n\nexport function isSameTotalToScroll(scrollState: IScrollState) {\n return scrollState.totalToScroll === scrollState.lastTotalToScroll;\n}\n\nexport function updateTriggeredFlag(\n scroll,\n scrollState: IScrollState,\n triggered: boolean,\n isScrollingDown: boolean\n) {\n if (isScrollingDown) {\n scrollState.triggered.down = scroll;\n } else {\n scrollState.triggered.up = scroll;\n }\n}\n\nexport function isTriggeredScroll(\n totalToScroll,\n scrollState: IScrollState,\n isScrollingDown: boolean\n) {\n return isScrollingDown\n ? scrollState.triggered.down === totalToScroll\n : scrollState.triggered.up === totalToScroll;\n}\n\nexport function updateScrollState(\n scrollState: IScrollState,\n scrolledUntilNow: number,\n totalToScroll: number\n) {\n updateScrollPosition(scrolledUntilNow, scrollState);\n updateTotalToScroll(totalToScroll, scrollState);\n // const isSameTotal = isSameTotalToScroll(scrollState);\n // if (!isSameTotal) {\n // updateTriggeredFlag(scrollState, false, isScrollingDown);\n // }\n}\n","import { ElementRef } from '@angular/core';\n\nimport { ContainerRef, IPositionElements, IPositionStats, IResolver } from '../models';\nimport { AxisResolver } from './axis-resolver';\n\nexport function createResolver({\n windowElement,\n axis\n}: IPositionElements): IResolver {\n return createResolverWithContainer(\n { axis, isWindow: isElementWindow(windowElement) },\n windowElement\n );\n}\n\nexport function createResolverWithContainer(\n resolver,\n windowElement: ContainerRef\n) {\n const container =\n resolver.isWindow || (windowElement && !windowElement.nativeElement)\n ? windowElement\n : windowElement.nativeElement;\n return { ...resolver, container };\n}\n\nexport function isElementWindow(windowElement: ContainerRef): boolean {\n const isWindow = ['Window', 'global'].some((obj: string) =>\n Object.prototype.toString.call(windowElement).includes(obj)\n );\n return isWindow;\n}\n\nexport function getDocumentElement(isContainerWindow: boolean, windowElement) {\n return isContainerWindow ? windowElement.document.documentElement : null;\n}\n\nexport function calculatePoints(element: ElementRef, resolver: IResolver) {\n const height = extractHeightForElement(resolver);\n return resolver.isWindow\n ? calculatePointsForWindow(height, element, resolver)\n : calculatePointsForElement(height, element, resolver);\n}\n\nexport function calculatePointsForWindow(\n height: number,\n element: ElementRef,\n resolver: IResolver\n): IPositionStats {\n const { axis, container, isWindow } = resolver;\n const { offsetHeightKey, clientHeightKey } = extractHeightPropKeys(axis);\n // scrolled until now / current y point\n const scrolled =\n height +\n getElementPageYOffset(\n getDocumentElement(isWindow, container),\n axis,\n isWindow\n );\n // total height / most bottom y point\n const nativeElementHeight = getElementHeight(\n element.nativeElement,\n isWindow,\n offsetHeightKey,\n clientHeightKey\n );\n const totalToScroll =\n getElementOffsetTop(element.nativeElement, axis, isWindow) +\n nativeElementHeight;\n return { height, scrolled, totalToScroll, isWindow };\n}\n\nexport function calculatePointsForElement(\n height: number,\n element: ElementRef,\n resolver: IResolver\n): IPositionStats {\n const { axis, container } = resolver;\n // perhaps use container.offsetTop instead of 'scrollTop'\n const scrolled = container[axis.scrollTopKey()];\n const totalToScroll = container[axis.scrollHeightKey()];\n return { height, scrolled, totalToScroll, isWindow: false };\n}\n\nexport function extractHeightPropKeys(axis: AxisResolver) {\n return {\n offsetHeightKey: axis.offsetHeightKey(),\n clientHeightKey: axis.clientHeightKey()\n };\n}\n\nexport function extractHeightForElement({\n container,\n isWindow,\n axis\n}: IResolver) {\n const { offsetHeightKey, clientHeightKey } = extractHeightPropKeys(axis);\n return getElementHeight(\n container,\n isWindow,\n offsetHeightKey,\n clientHeightKey\n );\n}\nexport function getElementHeight(\n elem: any,\n isWindow: boolean,\n offsetHeightKey: string,\n clientHeightKey: string\n) {\n if (isNaN(elem[offsetHeightKey])) {\n const docElem = getDocumentElement(isWindow, elem);\n return docElem ? docElem[clientHeightKey] : 0;\n } else {\n return elem[offsetHeightKey];\n }\n}\n\nexport function getElementOffsetTop(\n elem: ContainerRef,\n axis: AxisResolver,\n isWindow: boolean\n) {\n const topKey = axis.topKey();\n // elem = elem.nativeElement;\n if (!elem.getBoundingClientRect) {\n // || elem.css('none')) {\n return;\n }\n return (\n elem.getBoundingClientRect()[topKey] +\n getElementPageYOffset(elem, axis, isWindow)\n );\n}\n\nexport function getElementPageYOffset(\n elem: ContainerRef,\n axis: AxisResolver,\n isWindow: boolean\n) {\n const pageYOffset = axis.pageYOffsetKey();\n const scrollTop = axis.scrollTopKey();\n const offsetTop = axis.offsetTopKey();\n\n if (isNaN(window.pageYOffset)) {\n return getDocumentElement(isWindow, elem)[scrollTop];\n } else if (elem.ownerDocument) {\n return elem.ownerDocument.defaultView[pageYOffset];\n } else {\n return elem[offsetTop];\n }\n}\n","import { IInfiniteScrollEvent, IPositionStats } from '../models';\n\nexport interface IScrollerProps extends IDistanceRange {\n container: IPositionStats;\n alwaysCallback: boolean;\n disabled: boolean;\n}\n\nexport interface ITriggerEvents {\n down: (event: any) => any;\n up: (event: any) => any;\n}\n\nexport interface IDistanceRange {\n down: number;\n up: number;\n}\n\nexport interface IScrollConfig {\n alwaysCallback: boolean;\n shouldFireScrollEvent: boolean;\n}\n\nexport function shouldTriggerEvents(\n alwaysCallback: boolean,\n shouldFireScrollEvent: boolean,\n isTriggeredCurrentTotal: boolean\n) {\n if (alwaysCallback && shouldFireScrollEvent) {\n return true;\n }\n if (!isTriggeredCurrentTotal && shouldFireScrollEvent) {\n return true;\n }\n return false;\n}\n","const VerticalProps = {\n clientHeight: \"clientHeight\",\n offsetHeight: \"offsetHeight\",\n scrollHeight: \"scrollHeight\",\n pageYOffset: \"pageYOffset\",\n offsetTop: \"offsetTop\",\n scrollTop: \"scrollTop\",\n top: \"top\"\n};\n\nconst HorizontalProps = {\n clientHeight: \"clientWidth\",\n offsetHeight: \"offsetWidth\",\n scrollHeight: \"scrollWidth\",\n pageYOffset: \"pageXOffset\",\n offsetTop: \"offsetLeft\",\n scrollTop: \"scrollLeft\",\n top: \"left\"\n};\n\nexport class AxisResolver {\n private propsMap: any;\n\n constructor(private vertical: boolean = true) {\n this.propsMap = vertical ? VerticalProps : HorizontalProps;\n }\n clientHeightKey() {\n return this.propsMap.clientHeight;\n }\n offsetHeightKey() {\n return this.propsMap.offsetHeight;\n }\n scrollHeightKey() {\n return this.propsMap.scrollHeight;\n }\n pageYOffsetKey() {\n return this.propsMap.pageYOffset;\n }\n offsetTopKey() {\n return this.propsMap.offsetTop;\n }\n scrollTopKey() {\n return this.propsMap.scrollTop;\n }\n topKey() {\n return this.propsMap.top;\n }\n}\n","import { ElementRef, SimpleChange } from '@angular/core';\n\nexport function resolveContainerElement(\n selector: string | any,\n scrollWindow,\n defaultElement,\n fromRoot: boolean\n): any {\n const hasWindow = window && !!window.document && window.document.documentElement;\n let container = hasWindow && scrollWindow ? window : defaultElement;\n if (selector) {\n const containerIsString =\n selector && hasWindow && typeof selector === 'string';\n container = containerIsString\n ? findElement(selector, defaultElement.nativeElement, fromRoot)\n : selector;\n if (!container) {\n throw new Error('ngx-infinite-scroll {resolveContainerElement()}: selector for');\n }\n }\n return container;\n}\n\nexport function findElement(\n selector: string | any,\n customRoot: ElementRef | any,\n fromRoot: boolean\n) {\n const rootEl = fromRoot ? window.document : customRoot;\n return rootEl.querySelector(selector);\n}\n\nexport function inputPropChanged(prop: SimpleChange): boolean {\n return prop && !prop.firstChange;\n}\n\nexport function hasWindowDefined(): boolean {\n return typeof window !== 'undefined';\n}\n"],"names":[],"mappings":"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"}

@@ -7,3 +7,3 @@ import { Directive, ElementRef, EventEmitter, Input, NgModule, NgZone, Output } from '@angular/core';

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -61,3 +61,3 @@ /**

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -138,3 +138,3 @@ /** @type {?} */

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -175,3 +175,3 @@ /**

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -195,3 +195,3 @@ /**

: windowElement.nativeElement;
return Object.assign({}, resolver, { container });
return Object.assign(Object.assign({}, resolver), { container });
}

@@ -204,3 +204,7 @@ /**

/** @type {?} */
const isWindow = ['Window', 'global'].some((obj) => Object.prototype.toString.call(windowElement).includes(obj));
const isWindow = ['Window', 'global'].some((/**
* @param {?} obj
* @return {?}
*/
(obj) => Object.prototype.toString.call(windowElement).includes(obj)));
return isWindow;

@@ -329,3 +333,3 @@ }

const offsetTop = axis.offsetTopKey();
if (isNaN(window[pageYOffset])) {
if (isNaN(window.pageYOffset)) {
return getDocumentElement(isWindow, elem)[scrollTop];

@@ -343,3 +347,3 @@ }

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -440,3 +444,3 @@ /**

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -510,3 +514,3 @@ class ScrollState {

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -538,5 +542,24 @@ /**

};
return attachScrollEvent(options).pipe(mergeMap(() => of(calculatePoints(element, resolver))), map((positionStats) => toInfiniteScrollParams(scrollState.lastScrollPosition, positionStats, distance)), tap(({ stats }) => scrollState.updateScroll(stats.scrolled, stats.totalToScroll)), filter(({ fire, scrollDown, stats: { totalToScroll } }) => shouldTriggerEvents(config.alwaysCallback, fire, scrollState.isTriggeredScroll(totalToScroll, scrollDown))), tap(({ scrollDown, stats: { totalToScroll } }) => {
return attachScrollEvent(options).pipe(mergeMap((/**
* @return {?}
*/
() => of(calculatePoints(element, resolver)))), map((/**
* @param {?} positionStats
* @return {?}
*/
(positionStats) => toInfiniteScrollParams(scrollState.lastScrollPosition, positionStats, distance))), tap((/**
* @param {?} __0
* @return {?}
*/
({ stats }) => scrollState.updateScroll(stats.scrolled, stats.totalToScroll))), filter((/**
* @param {?} __0
* @return {?}
*/
({ fire, scrollDown, stats: { totalToScroll } }) => shouldTriggerEvents(config.alwaysCallback, fire, scrollState.isTriggeredScroll(totalToScroll, scrollDown)))), tap((/**
* @param {?} __0
* @return {?}
*/
({ scrollDown, stats: { totalToScroll } }) => {
scrollState.updateTriggeredFlag(totalToScroll, scrollDown);
}), map(toInfiniteScrollAction));
})), map(toInfiniteScrollAction));
}

@@ -593,3 +616,3 @@ /**

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -651,3 +674,6 @@ class InfiniteScrollDirective {

if (hasWindowDefined()) {
this.zone.runOutsideAngular(() => {
this.zone.runOutsideAngular((/**
* @return {?}
*/
() => {
this.disposeScroller = createScroller({

@@ -664,4 +690,11 @@ fromRoot: this.fromRoot,

upDistance: this.infiniteScrollUpDistance
}).subscribe((payload) => this.zone.run(() => this.handleOnScroll(payload)));
});
}).subscribe((/**
* @param {?} payload
* @return {?}
*/
(payload) => this.zone.run((/**
* @return {?}
*/
() => this.handleOnScroll(payload)))));
}));
}

@@ -725,3 +758,3 @@ }

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -741,3 +774,3 @@ class InfiniteScrollModule {

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -747,3 +780,3 @@

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -763,3 +796,3 @@ /**

* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/

@@ -766,0 +799,0 @@ /**

@@ -1,1 +0,1 @@

{"version":3,"file":"ngx-infinite-scroll.js","sources":["../../ngx-infinite-scroll.ts","../../public_api.ts","../../src/ngx-infinite-scroll.ts","../../src/modules/ngx-infinite-scroll.module.ts","../../src/modules/infinite-scroll.directive.ts","../../src/services/scroll-register.ts","../../src/services/scroll-state.ts","../../src/services/scroll-resolver.ts","../../src/services/position-resolver.ts","../../src/services/event-trigger.ts","../../src/services/axis-resolver.ts","../../src/services/ngx-ins-utils.ts"],"sourcesContent":["export * from './public_api';\n","/**\n * Angular library starter.\n * Build an Angular library compatible with AoT compilation & Tree shaking.\n * Written by Roberto Simonetti.\n * MIT license.\n * https://github.com/robisim74/angular-library-starter\n */\n\n/**\n * Entry point for all public APIs of the package.\n */\nexport * from './src/ngx-infinite-scroll';\n\n","// Public classes.\nexport {\n ContainerRef,\n IInfiniteScrollEvent,\n IPositionElements,\n IPositionStats,\n IResolver\n} from './models';\n\nexport { InfiniteScrollDirective } from './modules/infinite-scroll.directive';\nexport { InfiniteScrollModule } from './modules/ngx-infinite-scroll.module';\n","import { NgModule } from '@angular/core';\n\nimport { InfiniteScrollDirective } from './infinite-scroll.directive';\n\n@NgModule({\n declarations: [InfiniteScrollDirective],\n exports: [InfiniteScrollDirective],\n imports: [],\n providers: []\n})\nexport class InfiniteScrollModule { }\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges\n} from '@angular/core';\nimport {Subscription} from 'rxjs';\n\nimport { IInfiniteScrollEvent, IInfiniteScrollAction } from '../models';\nimport { hasWindowDefined, inputPropChanged } from '../services/ngx-ins-utils';\nimport { createScroller, InfiniteScrollActions } from '../services/scroll-register';\n\n@Directive({\n selector: '[infiniteScroll], [infinite-scroll], [data-infinite-scroll]'\n})\nexport class InfiniteScrollDirective\n implements OnDestroy, OnChanges, AfterViewInit {\n @Output() scrolled = new EventEmitter<IInfiniteScrollEvent>();\n @Output() scrolledUp = new EventEmitter<IInfiniteScrollEvent>();\n\n @Input() infiniteScrollDistance: number = 2;\n @Input() infiniteScrollUpDistance: number = 1.5;\n @Input() infiniteScrollThrottle: number = 150;\n @Input() infiniteScrollDisabled: boolean = false;\n @Input() infiniteScrollContainer: any = null;\n @Input() scrollWindow: boolean = true;\n @Input() immediateCheck: boolean = false;\n @Input() horizontal: boolean = false;\n @Input() alwaysCallback: boolean = false;\n @Input() fromRoot: boolean = false;\n\n private disposeScroller: Subscription;\n\n constructor(private element: ElementRef, private zone: NgZone) { }\n\n ngAfterViewInit() {\n if (!this.infiniteScrollDisabled) {\n this.setup();\n }\n }\n\n ngOnChanges({ infiniteScrollContainer, infiniteScrollDisabled, infiniteScrollDistance }: SimpleChanges) {\n const containerChanged = inputPropChanged(infiniteScrollContainer);\n const disabledChanged = inputPropChanged(infiniteScrollDisabled);\n const distanceChanged = inputPropChanged(infiniteScrollDistance);\n const shouldSetup = (!disabledChanged && !this.infiniteScrollDisabled) ||\n (disabledChanged && !infiniteScrollDisabled.currentValue) || distanceChanged;\n\n if (containerChanged || disabledChanged || distanceChanged) {\n this.destroyScroller();\n if (shouldSetup) {\n this.setup();\n }\n }\n }\n\n setup() {\n if (hasWindowDefined()) {\n this.zone.runOutsideAngular(() => {\n this.disposeScroller = createScroller({\n fromRoot: this.fromRoot,\n alwaysCallback: this.alwaysCallback,\n disable: this.infiniteScrollDisabled,\n downDistance: this.infiniteScrollDistance,\n element: this.element,\n horizontal: this.horizontal,\n scrollContainer: this.infiniteScrollContainer,\n scrollWindow: this.scrollWindow,\n throttle: this.infiniteScrollThrottle,\n upDistance: this.infiniteScrollUpDistance\n }).subscribe((payload: any) => this.zone.run(() => this.handleOnScroll(payload)));\n });\n }\n }\n\n handleOnScroll({ type, payload }: IInfiniteScrollAction) {\n switch (type) {\n case InfiniteScrollActions.DOWN:\n return this.scrolled.emit(payload);\n\n case InfiniteScrollActions.UP:\n return this.scrolledUp.emit(payload);\n\n default:\n return;\n }\n }\n\n ngOnDestroy() {\n this.destroyScroller();\n }\n\n destroyScroller() {\n if (this.disposeScroller) {\n this.disposeScroller.unsubscribe();\n }\n }\n}\n","import { Observable, of, fromEvent } from 'rxjs';\nimport { map, mergeMap, tap, sampleTime, filter } from 'rxjs/operators';\n\nimport * as Models from '../models';\nimport { AxisResolver } from './axis-resolver';\nimport { shouldTriggerEvents } from './event-trigger';\nimport { resolveContainerElement } from './ngx-ins-utils';\nimport { calculatePoints, createResolver } from './position-resolver';\nimport * as ScrollResolver from './scroll-resolver';\nimport { ScrollState } from './scroll-state';\n\nexport function createScroller(config: Models.IScroller) {\n const { scrollContainer, scrollWindow, element, fromRoot } = config;\n const resolver = createResolver({\n axis: new AxisResolver(!config.horizontal),\n windowElement: resolveContainerElement(\n scrollContainer,\n scrollWindow,\n element,\n fromRoot\n )\n });\n const scrollState = new ScrollState({\n totalToScroll: calculatePoints(element, resolver)\n });\n const options: Models.IScrollRegisterConfig = {\n container: resolver.container,\n throttle: config.throttle\n };\n const distance = {\n up: config.upDistance,\n down: config.downDistance\n };\n return attachScrollEvent(options).pipe(\n mergeMap(() => of(calculatePoints(element, resolver))),\n map((positionStats: Models.IPositionStats) =>\n toInfiniteScrollParams(\n scrollState.lastScrollPosition,\n positionStats,\n distance\n )\n ),\n tap(({ stats }: Models.IScrollParams) =>\n scrollState.updateScroll(stats.scrolled, stats.totalToScroll)\n ),\n filter(\n ({ fire, scrollDown, stats: { totalToScroll } }: Models.IScrollParams) =>\n shouldTriggerEvents(\n config.alwaysCallback,\n fire,\n scrollState.isTriggeredScroll(totalToScroll, scrollDown)\n )\n ),\n tap(({ scrollDown, stats: { totalToScroll } }: Models.IScrollParams) => {\n scrollState.updateTriggeredFlag(totalToScroll, scrollDown);\n }),\n map(toInfiniteScrollAction)\n );\n}\n\nexport function attachScrollEvent(\n options: Models.IScrollRegisterConfig\n): Observable<{}> {\n let obs = fromEvent(options.container, 'scroll');\n // For an unknown reason calling `sampleTime()` causes trouble for many users, even with `options.throttle = 0`.\n // Let's avoid calling the function unless needed.\n // See https://github.com/orizens/ngx-infinite-scroll/issues/198\n if (options.throttle) {\n obs = obs.pipe(sampleTime(options.throttle));\n }\n return obs;\n}\n\nexport function toInfiniteScrollParams(\n lastScrollPosition: number,\n stats: Models.IPositionStats,\n distance: Models.IScrollerDistance\n): Models.IScrollParams {\n const { scrollDown, fire } = ScrollResolver.getScrollStats(\n lastScrollPosition,\n stats,\n distance\n );\n return {\n scrollDown,\n fire,\n stats\n };\n}\n\nexport const InfiniteScrollActions = {\n DOWN: '[NGX_ISE] DOWN',\n UP: '[NGX_ISE] UP'\n};\n\nexport function toInfiniteScrollAction(\n response: Models.IScrollParams\n): Models.IInfiniteScrollAction {\n const {\n scrollDown,\n stats: { scrolled: currentScrollPosition }\n } = response;\n return {\n type: scrollDown ? InfiniteScrollActions.DOWN : InfiniteScrollActions.UP,\n payload: {\n currentScrollPosition\n }\n };\n}\n","import { IScrollState, IScrollerDistance } from '../models';\n\nexport class ScrollState implements IScrollState {\n lastScrollPosition = 0;\n lastTotalToScroll = 0;\n totalToScroll = 0;\n triggered: IScrollerDistance = {\n down: 0,\n up: 0\n };\n\n constructor({ totalToScroll }) {\n this.totalToScroll = totalToScroll;\n }\n\n updateScrollPosition(position: number) {\n return (this.lastScrollPosition = position);\n }\n\n updateTotalToScroll(totalToScroll: number) {\n if (this.lastTotalToScroll !== totalToScroll) {\n this.lastTotalToScroll = this.totalToScroll;\n this.totalToScroll = totalToScroll;\n }\n }\n\n updateScroll(scrolledUntilNow: number, totalToScroll: number) {\n this.updateScrollPosition(scrolledUntilNow);\n this.updateTotalToScroll(totalToScroll);\n }\n\n updateTriggeredFlag(scroll, isScrollingDown: boolean) {\n if (isScrollingDown) {\n this.triggered.down = scroll;\n } else {\n this.triggered.up = scroll;\n }\n }\n\n isTriggeredScroll(totalToScroll, isScrollingDown: boolean) {\n return isScrollingDown\n ? this.triggered.down === totalToScroll\n : this.triggered.up === totalToScroll;\n }\n}\n","import { IPositionStats, IScrollState, IScrollerDistance } from '../models';\n\nexport function shouldFireScrollEvent(\n container: IPositionStats,\n distance: IScrollerDistance,\n scrollingDown: boolean\n) {\n let remaining: number;\n let containerBreakpoint: number;\n if (container.totalToScroll <= 0) {\n return false;\n }\n\n const scrolledUntilNow = container.isWindow ? container.scrolled : container.height + container.scrolled;\n if (scrollingDown) {\n remaining =\n (container.totalToScroll - scrolledUntilNow) / container.totalToScroll;\n containerBreakpoint = distance.down / 10;\n } else {\n const totalHiddenContentHeight =\n container.scrolled + (container.totalToScroll - scrolledUntilNow);\n remaining = container.scrolled / totalHiddenContentHeight;\n containerBreakpoint = distance.up / 10;\n }\n\n const shouldFireEvent: boolean = remaining <= containerBreakpoint;\n return shouldFireEvent;\n}\n\nexport function isScrollingDownwards(\n lastScrollPosition: number,\n container: IPositionStats\n) {\n return lastScrollPosition < container.scrolled;\n}\n\nexport function getScrollStats(\n lastScrollPosition: number,\n container: IPositionStats,\n distance: IScrollerDistance\n) {\n const scrollDown = isScrollingDownwards(lastScrollPosition, container);\n return {\n fire: shouldFireScrollEvent(container, distance, scrollDown),\n scrollDown\n };\n}\n\nexport function updateScrollPosition(\n position: number,\n scrollState: IScrollState\n) {\n return (scrollState.lastScrollPosition = position);\n}\n\nexport function updateTotalToScroll(\n totalToScroll: number,\n scrollState: IScrollState\n) {\n if (scrollState.lastTotalToScroll !== totalToScroll) {\n scrollState.lastTotalToScroll = scrollState.totalToScroll;\n scrollState.totalToScroll = totalToScroll;\n }\n}\n\nexport function isSameTotalToScroll(scrollState: IScrollState) {\n return scrollState.totalToScroll === scrollState.lastTotalToScroll;\n}\n\nexport function updateTriggeredFlag(\n scroll,\n scrollState: IScrollState,\n triggered: boolean,\n isScrollingDown: boolean\n) {\n if (isScrollingDown) {\n scrollState.triggered.down = scroll;\n } else {\n scrollState.triggered.up = scroll;\n }\n}\n\nexport function isTriggeredScroll(\n totalToScroll,\n scrollState: IScrollState,\n isScrollingDown: boolean\n) {\n return isScrollingDown\n ? scrollState.triggered.down === totalToScroll\n : scrollState.triggered.up === totalToScroll;\n}\n\nexport function updateScrollState(\n scrollState: IScrollState,\n scrolledUntilNow: number,\n totalToScroll: number\n) {\n updateScrollPosition(scrolledUntilNow, scrollState);\n updateTotalToScroll(totalToScroll, scrollState);\n // const isSameTotal = isSameTotalToScroll(scrollState);\n // if (!isSameTotal) {\n // updateTriggeredFlag(scrollState, false, isScrollingDown);\n // }\n}\n","import { ElementRef } from '@angular/core';\n\nimport { ContainerRef, IPositionElements, IPositionStats, IResolver } from '../models';\nimport { AxisResolver } from './axis-resolver';\n\nexport function createResolver({\n windowElement,\n axis\n}: IPositionElements): IResolver {\n return createResolverWithContainer(\n { axis, isWindow: isElementWindow(windowElement) },\n windowElement\n );\n}\n\nexport function createResolverWithContainer(\n resolver,\n windowElement: ContainerRef\n) {\n const container =\n resolver.isWindow || (windowElement && !windowElement.nativeElement)\n ? windowElement\n : windowElement.nativeElement;\n return { ...resolver, container };\n}\n\nexport function isElementWindow(windowElement: ContainerRef): boolean {\n const isWindow = ['Window', 'global'].some((obj: string) =>\n Object.prototype.toString.call(windowElement).includes(obj)\n );\n return isWindow;\n}\n\nexport function getDocumentElement(isContainerWindow: boolean, windowElement) {\n return isContainerWindow ? windowElement.document.documentElement : null;\n}\n\nexport function calculatePoints(element: ElementRef, resolver: IResolver) {\n const height = extractHeightForElement(resolver);\n return resolver.isWindow\n ? calculatePointsForWindow(height, element, resolver)\n : calculatePointsForElement(height, element, resolver);\n}\n\nexport function calculatePointsForWindow(\n height: number,\n element: ElementRef,\n resolver: IResolver\n): IPositionStats {\n const { axis, container, isWindow } = resolver;\n const { offsetHeightKey, clientHeightKey } = extractHeightPropKeys(axis);\n // scrolled until now / current y point\n const scrolled =\n height +\n getElementPageYOffset(\n getDocumentElement(isWindow, container),\n axis,\n isWindow\n );\n // total height / most bottom y point\n const nativeElementHeight = getElementHeight(\n element.nativeElement,\n isWindow,\n offsetHeightKey,\n clientHeightKey\n );\n const totalToScroll =\n getElementOffsetTop(element.nativeElement, axis, isWindow) +\n nativeElementHeight;\n return { height, scrolled, totalToScroll, isWindow };\n}\n\nexport function calculatePointsForElement(\n height: number,\n element: ElementRef,\n resolver: IResolver\n): IPositionStats {\n const { axis, container } = resolver;\n // perhaps use container.offsetTop instead of 'scrollTop'\n const scrolled = container[axis.scrollTopKey()];\n const totalToScroll = container[axis.scrollHeightKey()];\n return { height, scrolled, totalToScroll, isWindow: false };\n}\n\nexport function extractHeightPropKeys(axis: AxisResolver) {\n return {\n offsetHeightKey: axis.offsetHeightKey(),\n clientHeightKey: axis.clientHeightKey()\n };\n}\n\nexport function extractHeightForElement({\n container,\n isWindow,\n axis\n}: IResolver) {\n const { offsetHeightKey, clientHeightKey } = extractHeightPropKeys(axis);\n return getElementHeight(\n container,\n isWindow,\n offsetHeightKey,\n clientHeightKey\n );\n}\nexport function getElementHeight(\n elem: any,\n isWindow: boolean,\n offsetHeightKey: string,\n clientHeightKey: string\n) {\n if (isNaN(elem[offsetHeightKey])) {\n const docElem = getDocumentElement(isWindow, elem);\n return docElem ? docElem[clientHeightKey] : 0;\n } else {\n return elem[offsetHeightKey];\n }\n}\n\nexport function getElementOffsetTop(\n elem: ContainerRef,\n axis: AxisResolver,\n isWindow: boolean\n) {\n const topKey = axis.topKey();\n // elem = elem.nativeElement;\n if (!elem.getBoundingClientRect) {\n // || elem.css('none')) {\n return;\n }\n return (\n elem.getBoundingClientRect()[topKey] +\n getElementPageYOffset(elem, axis, isWindow)\n );\n}\n\nexport function getElementPageYOffset(\n elem: ContainerRef,\n axis: AxisResolver,\n isWindow: boolean\n) {\n const pageYOffset = axis.pageYOffsetKey();\n const scrollTop = axis.scrollTopKey();\n const offsetTop = axis.offsetTopKey();\n\n if (isNaN(window[pageYOffset])) {\n return getDocumentElement(isWindow, elem)[scrollTop];\n } else if (elem.ownerDocument) {\n return elem.ownerDocument.defaultView[pageYOffset];\n } else {\n return elem[offsetTop];\n }\n}\n","import { IInfiniteScrollEvent, IPositionStats } from '../models';\n\nexport interface IScrollerProps extends IDistanceRange {\n container: IPositionStats;\n alwaysCallback: boolean;\n disabled: boolean;\n}\n\nexport interface ITriggerEvents {\n down: (event: any) => any;\n up: (event: any) => any;\n}\n\nexport interface IDistanceRange {\n down: number;\n up: number;\n}\n\nexport interface IScrollConfig {\n alwaysCallback: boolean;\n shouldFireScrollEvent: boolean;\n}\n\nexport function shouldTriggerEvents(\n alwaysCallback: boolean,\n shouldFireScrollEvent: boolean,\n isTriggeredCurrentTotal: boolean\n) {\n if (alwaysCallback && shouldFireScrollEvent) {\n return true;\n }\n if (!isTriggeredCurrentTotal && shouldFireScrollEvent) {\n return true;\n }\n return false;\n}\n","const VerticalProps = {\n clientHeight: \"clientHeight\",\n offsetHeight: \"offsetHeight\",\n scrollHeight: \"scrollHeight\",\n pageYOffset: \"pageYOffset\",\n offsetTop: \"offsetTop\",\n scrollTop: \"scrollTop\",\n top: \"top\"\n};\n\nconst HorizontalProps = {\n clientHeight: \"clientWidth\",\n offsetHeight: \"offsetWidth\",\n scrollHeight: \"scrollWidth\",\n pageYOffset: \"pageXOffset\",\n offsetTop: \"offsetLeft\",\n scrollTop: \"scrollLeft\",\n top: \"left\"\n};\n\nexport class AxisResolver {\n private propsMap: any;\n\n constructor(private vertical: boolean = true) {\n this.propsMap = vertical ? VerticalProps : HorizontalProps;\n }\n clientHeightKey() {\n return this.propsMap.clientHeight;\n }\n offsetHeightKey() {\n return this.propsMap.offsetHeight;\n }\n scrollHeightKey() {\n return this.propsMap.scrollHeight;\n }\n pageYOffsetKey() {\n return this.propsMap.pageYOffset;\n }\n offsetTopKey() {\n return this.propsMap.offsetTop;\n }\n scrollTopKey() {\n return this.propsMap.scrollTop;\n }\n topKey() {\n return this.propsMap.top;\n }\n}\n","import { ElementRef, SimpleChange } from '@angular/core';\n\nexport function resolveContainerElement(\n selector: string | any,\n scrollWindow,\n defaultElement,\n fromRoot: boolean\n): any {\n const hasWindow = window && !!window.document && window.document.documentElement;\n let container = hasWindow && scrollWindow ? window : defaultElement;\n if (selector) {\n const containerIsString =\n selector && hasWindow && typeof selector === 'string';\n container = containerIsString\n ? findElement(selector, defaultElement.nativeElement, fromRoot)\n : selector;\n if (!container) {\n throw new Error('ngx-infinite-scroll {resolveContainerElement()}: selector for');\n }\n }\n return container;\n}\n\nexport function findElement(\n selector: string | any,\n customRoot: ElementRef | any,\n fromRoot: boolean\n) {\n const rootEl = fromRoot ? window.document : customRoot;\n return rootEl.querySelector(selector);\n}\n\nexport function inputPropChanged(prop: SimpleChange): boolean {\n return prop && !prop.firstChange;\n}\n\nexport function hasWindowDefined(): boolean {\n return typeof window !== 'undefined';\n}\n"],"names":["ScrollResolver.getScrollStats"],"mappings":"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"}
{"version":3,"file":"ngx-infinite-scroll.js","sources":["../../ngx-infinite-scroll.ts","../../public-api.ts","../../src/ngx-infinite-scroll.ts","../../src/modules/ngx-infinite-scroll.module.ts","../../src/modules/infinite-scroll.directive.ts","../../src/services/scroll-register.ts","../../src/services/scroll-state.ts","../../src/services/scroll-resolver.ts","../../src/services/position-resolver.ts","../../src/services/event-trigger.ts","../../src/services/axis-resolver.ts","../../src/services/ngx-ins-utils.ts"],"sourcesContent":["export * from './public-api';\n","/**\n * Angular library starter.\n * Build an Angular library compatible with AoT compilation & Tree shaking.\n * Written by Roberto Simonetti.\n * MIT license.\n * https://github.com/robisim74/angular-library-starter\n */\n\n/**\n * Entry point for all public APIs of the package.\n */\nexport * from './src/ngx-infinite-scroll';\n\n","// Public classes.\nexport {\n ContainerRef,\n IInfiniteScrollEvent,\n IPositionElements,\n IPositionStats,\n IResolver\n} from './models';\n\nexport { InfiniteScrollDirective } from './modules/infinite-scroll.directive';\nexport { InfiniteScrollModule } from './modules/ngx-infinite-scroll.module';\n","import { NgModule } from '@angular/core';\n\nimport { InfiniteScrollDirective } from './infinite-scroll.directive';\n\n@NgModule({\n declarations: [InfiniteScrollDirective],\n exports: [InfiniteScrollDirective],\n imports: [],\n providers: []\n})\nexport class InfiniteScrollModule { }\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges\n} from '@angular/core';\nimport {Subscription} from 'rxjs';\n\nimport { IInfiniteScrollEvent, IInfiniteScrollAction } from '../models';\nimport { hasWindowDefined, inputPropChanged } from '../services/ngx-ins-utils';\nimport { createScroller, InfiniteScrollActions } from '../services/scroll-register';\n\n@Directive({\n selector: '[infiniteScroll], [infinite-scroll], [data-infinite-scroll]'\n})\nexport class InfiniteScrollDirective\n implements OnDestroy, OnChanges, AfterViewInit {\n @Output() scrolled = new EventEmitter<IInfiniteScrollEvent>();\n @Output() scrolledUp = new EventEmitter<IInfiniteScrollEvent>();\n\n @Input() infiniteScrollDistance: number = 2;\n @Input() infiniteScrollUpDistance: number = 1.5;\n @Input() infiniteScrollThrottle: number = 150;\n @Input() infiniteScrollDisabled: boolean = false;\n @Input() infiniteScrollContainer: any = null;\n @Input() scrollWindow: boolean = true;\n @Input() immediateCheck: boolean = false;\n @Input() horizontal: boolean = false;\n @Input() alwaysCallback: boolean = false;\n @Input() fromRoot: boolean = false;\n\n private disposeScroller: Subscription;\n\n constructor(private element: ElementRef, private zone: NgZone) { }\n\n ngAfterViewInit() {\n if (!this.infiniteScrollDisabled) {\n this.setup();\n }\n }\n\n ngOnChanges({ infiniteScrollContainer, infiniteScrollDisabled, infiniteScrollDistance }: SimpleChanges) {\n const containerChanged = inputPropChanged(infiniteScrollContainer);\n const disabledChanged = inputPropChanged(infiniteScrollDisabled);\n const distanceChanged = inputPropChanged(infiniteScrollDistance);\n const shouldSetup = (!disabledChanged && !this.infiniteScrollDisabled) ||\n (disabledChanged && !infiniteScrollDisabled.currentValue) || distanceChanged;\n\n if (containerChanged || disabledChanged || distanceChanged) {\n this.destroyScroller();\n if (shouldSetup) {\n this.setup();\n }\n }\n }\n\n setup() {\n if (hasWindowDefined()) {\n this.zone.runOutsideAngular(() => {\n this.disposeScroller = createScroller({\n fromRoot: this.fromRoot,\n alwaysCallback: this.alwaysCallback,\n disable: this.infiniteScrollDisabled,\n downDistance: this.infiniteScrollDistance,\n element: this.element,\n horizontal: this.horizontal,\n scrollContainer: this.infiniteScrollContainer,\n scrollWindow: this.scrollWindow,\n throttle: this.infiniteScrollThrottle,\n upDistance: this.infiniteScrollUpDistance\n }).subscribe((payload: any) => this.zone.run(() => this.handleOnScroll(payload)));\n });\n }\n }\n\n handleOnScroll({ type, payload }: IInfiniteScrollAction) {\n switch (type) {\n case InfiniteScrollActions.DOWN:\n return this.scrolled.emit(payload);\n\n case InfiniteScrollActions.UP:\n return this.scrolledUp.emit(payload);\n\n default:\n return;\n }\n }\n\n ngOnDestroy() {\n this.destroyScroller();\n }\n\n destroyScroller() {\n if (this.disposeScroller) {\n this.disposeScroller.unsubscribe();\n }\n }\n}\n","import { Observable, of, fromEvent } from 'rxjs';\nimport { map, mergeMap, tap, sampleTime, filter } from 'rxjs/operators';\n\nimport * as Models from '../models';\nimport { AxisResolver } from './axis-resolver';\nimport { shouldTriggerEvents } from './event-trigger';\nimport { resolveContainerElement } from './ngx-ins-utils';\nimport { calculatePoints, createResolver } from './position-resolver';\nimport * as ScrollResolver from './scroll-resolver';\nimport { ScrollState } from './scroll-state';\n\nexport function createScroller(config: Models.IScroller) {\n const { scrollContainer, scrollWindow, element, fromRoot } = config;\n const resolver = createResolver({\n axis: new AxisResolver(!config.horizontal),\n windowElement: resolveContainerElement(\n scrollContainer,\n scrollWindow,\n element,\n fromRoot\n )\n });\n const scrollState = new ScrollState({\n totalToScroll: calculatePoints(element, resolver)\n });\n const options: Models.IScrollRegisterConfig = {\n container: resolver.container,\n throttle: config.throttle\n };\n const distance = {\n up: config.upDistance,\n down: config.downDistance\n };\n return attachScrollEvent(options).pipe(\n mergeMap(() => of(calculatePoints(element, resolver))),\n map((positionStats: Models.IPositionStats) =>\n toInfiniteScrollParams(\n scrollState.lastScrollPosition,\n positionStats,\n distance\n )\n ),\n tap(({ stats }: Models.IScrollParams) =>\n scrollState.updateScroll(stats.scrolled, stats.totalToScroll)\n ),\n filter(\n ({ fire, scrollDown, stats: { totalToScroll } }: Models.IScrollParams) =>\n shouldTriggerEvents(\n config.alwaysCallback,\n fire,\n scrollState.isTriggeredScroll(totalToScroll, scrollDown)\n )\n ),\n tap(({ scrollDown, stats: { totalToScroll } }: Models.IScrollParams) => {\n scrollState.updateTriggeredFlag(totalToScroll, scrollDown);\n }),\n map(toInfiniteScrollAction)\n );\n}\n\nexport function attachScrollEvent(\n options: Models.IScrollRegisterConfig\n): Observable<{}> {\n let obs = fromEvent(options.container, 'scroll');\n // For an unknown reason calling `sampleTime()` causes trouble for many users, even with `options.throttle = 0`.\n // Let's avoid calling the function unless needed.\n // See https://github.com/orizens/ngx-infinite-scroll/issues/198\n if (options.throttle) {\n obs = obs.pipe(sampleTime(options.throttle));\n }\n return obs;\n}\n\nexport function toInfiniteScrollParams(\n lastScrollPosition: number,\n stats: Models.IPositionStats,\n distance: Models.IScrollerDistance\n): Models.IScrollParams {\n const { scrollDown, fire } = ScrollResolver.getScrollStats(\n lastScrollPosition,\n stats,\n distance\n );\n return {\n scrollDown,\n fire,\n stats\n };\n}\n\nexport const InfiniteScrollActions = {\n DOWN: '[NGX_ISE] DOWN',\n UP: '[NGX_ISE] UP'\n};\n\nexport function toInfiniteScrollAction(\n response: Models.IScrollParams\n): Models.IInfiniteScrollAction {\n const {\n scrollDown,\n stats: { scrolled: currentScrollPosition }\n } = response;\n return {\n type: scrollDown ? InfiniteScrollActions.DOWN : InfiniteScrollActions.UP,\n payload: {\n currentScrollPosition\n }\n };\n}\n","import { IScrollState, IScrollerDistance } from '../models';\n\nexport class ScrollState implements IScrollState {\n lastScrollPosition = 0;\n lastTotalToScroll = 0;\n totalToScroll = 0;\n triggered: IScrollerDistance = {\n down: 0,\n up: 0\n };\n\n constructor({ totalToScroll }) {\n this.totalToScroll = totalToScroll;\n }\n\n updateScrollPosition(position: number) {\n return (this.lastScrollPosition = position);\n }\n\n updateTotalToScroll(totalToScroll: number) {\n if (this.lastTotalToScroll !== totalToScroll) {\n this.lastTotalToScroll = this.totalToScroll;\n this.totalToScroll = totalToScroll;\n }\n }\n\n updateScroll(scrolledUntilNow: number, totalToScroll: number) {\n this.updateScrollPosition(scrolledUntilNow);\n this.updateTotalToScroll(totalToScroll);\n }\n\n updateTriggeredFlag(scroll, isScrollingDown: boolean) {\n if (isScrollingDown) {\n this.triggered.down = scroll;\n } else {\n this.triggered.up = scroll;\n }\n }\n\n isTriggeredScroll(totalToScroll, isScrollingDown: boolean) {\n return isScrollingDown\n ? this.triggered.down === totalToScroll\n : this.triggered.up === totalToScroll;\n }\n}\n","import { IPositionStats, IScrollState, IScrollerDistance } from '../models';\n\nexport function shouldFireScrollEvent(\n container: IPositionStats,\n distance: IScrollerDistance,\n scrollingDown: boolean\n) {\n let remaining: number;\n let containerBreakpoint: number;\n if (container.totalToScroll <= 0) {\n return false;\n }\n\n const scrolledUntilNow = container.isWindow ? container.scrolled : container.height + container.scrolled;\n if (scrollingDown) {\n remaining =\n (container.totalToScroll - scrolledUntilNow) / container.totalToScroll;\n containerBreakpoint = distance.down / 10;\n } else {\n const totalHiddenContentHeight =\n container.scrolled + (container.totalToScroll - scrolledUntilNow);\n remaining = container.scrolled / totalHiddenContentHeight;\n containerBreakpoint = distance.up / 10;\n }\n\n const shouldFireEvent: boolean = remaining <= containerBreakpoint;\n return shouldFireEvent;\n}\n\nexport function isScrollingDownwards(\n lastScrollPosition: number,\n container: IPositionStats\n) {\n return lastScrollPosition < container.scrolled;\n}\n\nexport function getScrollStats(\n lastScrollPosition: number,\n container: IPositionStats,\n distance: IScrollerDistance\n) {\n const scrollDown = isScrollingDownwards(lastScrollPosition, container);\n return {\n fire: shouldFireScrollEvent(container, distance, scrollDown),\n scrollDown\n };\n}\n\nexport function updateScrollPosition(\n position: number,\n scrollState: IScrollState\n) {\n return (scrollState.lastScrollPosition = position);\n}\n\nexport function updateTotalToScroll(\n totalToScroll: number,\n scrollState: IScrollState\n) {\n if (scrollState.lastTotalToScroll !== totalToScroll) {\n scrollState.lastTotalToScroll = scrollState.totalToScroll;\n scrollState.totalToScroll = totalToScroll;\n }\n}\n\nexport function isSameTotalToScroll(scrollState: IScrollState) {\n return scrollState.totalToScroll === scrollState.lastTotalToScroll;\n}\n\nexport function updateTriggeredFlag(\n scroll,\n scrollState: IScrollState,\n triggered: boolean,\n isScrollingDown: boolean\n) {\n if (isScrollingDown) {\n scrollState.triggered.down = scroll;\n } else {\n scrollState.triggered.up = scroll;\n }\n}\n\nexport function isTriggeredScroll(\n totalToScroll,\n scrollState: IScrollState,\n isScrollingDown: boolean\n) {\n return isScrollingDown\n ? scrollState.triggered.down === totalToScroll\n : scrollState.triggered.up === totalToScroll;\n}\n\nexport function updateScrollState(\n scrollState: IScrollState,\n scrolledUntilNow: number,\n totalToScroll: number\n) {\n updateScrollPosition(scrolledUntilNow, scrollState);\n updateTotalToScroll(totalToScroll, scrollState);\n // const isSameTotal = isSameTotalToScroll(scrollState);\n // if (!isSameTotal) {\n // updateTriggeredFlag(scrollState, false, isScrollingDown);\n // }\n}\n","import { ElementRef } from '@angular/core';\n\nimport { ContainerRef, IPositionElements, IPositionStats, IResolver } from '../models';\nimport { AxisResolver } from './axis-resolver';\n\nexport function createResolver({\n windowElement,\n axis\n}: IPositionElements): IResolver {\n return createResolverWithContainer(\n { axis, isWindow: isElementWindow(windowElement) },\n windowElement\n );\n}\n\nexport function createResolverWithContainer(\n resolver,\n windowElement: ContainerRef\n) {\n const container =\n resolver.isWindow || (windowElement && !windowElement.nativeElement)\n ? windowElement\n : windowElement.nativeElement;\n return { ...resolver, container };\n}\n\nexport function isElementWindow(windowElement: ContainerRef): boolean {\n const isWindow = ['Window', 'global'].some((obj: string) =>\n Object.prototype.toString.call(windowElement).includes(obj)\n );\n return isWindow;\n}\n\nexport function getDocumentElement(isContainerWindow: boolean, windowElement) {\n return isContainerWindow ? windowElement.document.documentElement : null;\n}\n\nexport function calculatePoints(element: ElementRef, resolver: IResolver) {\n const height = extractHeightForElement(resolver);\n return resolver.isWindow\n ? calculatePointsForWindow(height, element, resolver)\n : calculatePointsForElement(height, element, resolver);\n}\n\nexport function calculatePointsForWindow(\n height: number,\n element: ElementRef,\n resolver: IResolver\n): IPositionStats {\n const { axis, container, isWindow } = resolver;\n const { offsetHeightKey, clientHeightKey } = extractHeightPropKeys(axis);\n // scrolled until now / current y point\n const scrolled =\n height +\n getElementPageYOffset(\n getDocumentElement(isWindow, container),\n axis,\n isWindow\n );\n // total height / most bottom y point\n const nativeElementHeight = getElementHeight(\n element.nativeElement,\n isWindow,\n offsetHeightKey,\n clientHeightKey\n );\n const totalToScroll =\n getElementOffsetTop(element.nativeElement, axis, isWindow) +\n nativeElementHeight;\n return { height, scrolled, totalToScroll, isWindow };\n}\n\nexport function calculatePointsForElement(\n height: number,\n element: ElementRef,\n resolver: IResolver\n): IPositionStats {\n const { axis, container } = resolver;\n // perhaps use container.offsetTop instead of 'scrollTop'\n const scrolled = container[axis.scrollTopKey()];\n const totalToScroll = container[axis.scrollHeightKey()];\n return { height, scrolled, totalToScroll, isWindow: false };\n}\n\nexport function extractHeightPropKeys(axis: AxisResolver) {\n return {\n offsetHeightKey: axis.offsetHeightKey(),\n clientHeightKey: axis.clientHeightKey()\n };\n}\n\nexport function extractHeightForElement({\n container,\n isWindow,\n axis\n}: IResolver) {\n const { offsetHeightKey, clientHeightKey } = extractHeightPropKeys(axis);\n return getElementHeight(\n container,\n isWindow,\n offsetHeightKey,\n clientHeightKey\n );\n}\nexport function getElementHeight(\n elem: any,\n isWindow: boolean,\n offsetHeightKey: string,\n clientHeightKey: string\n) {\n if (isNaN(elem[offsetHeightKey])) {\n const docElem = getDocumentElement(isWindow, elem);\n return docElem ? docElem[clientHeightKey] : 0;\n } else {\n return elem[offsetHeightKey];\n }\n}\n\nexport function getElementOffsetTop(\n elem: ContainerRef,\n axis: AxisResolver,\n isWindow: boolean\n) {\n const topKey = axis.topKey();\n // elem = elem.nativeElement;\n if (!elem.getBoundingClientRect) {\n // || elem.css('none')) {\n return;\n }\n return (\n elem.getBoundingClientRect()[topKey] +\n getElementPageYOffset(elem, axis, isWindow)\n );\n}\n\nexport function getElementPageYOffset(\n elem: ContainerRef,\n axis: AxisResolver,\n isWindow: boolean\n) {\n const pageYOffset = axis.pageYOffsetKey();\n const scrollTop = axis.scrollTopKey();\n const offsetTop = axis.offsetTopKey();\n\n if (isNaN(window.pageYOffset)) {\n return getDocumentElement(isWindow, elem)[scrollTop];\n } else if (elem.ownerDocument) {\n return elem.ownerDocument.defaultView[pageYOffset];\n } else {\n return elem[offsetTop];\n }\n}\n","import { IInfiniteScrollEvent, IPositionStats } from '../models';\n\nexport interface IScrollerProps extends IDistanceRange {\n container: IPositionStats;\n alwaysCallback: boolean;\n disabled: boolean;\n}\n\nexport interface ITriggerEvents {\n down: (event: any) => any;\n up: (event: any) => any;\n}\n\nexport interface IDistanceRange {\n down: number;\n up: number;\n}\n\nexport interface IScrollConfig {\n alwaysCallback: boolean;\n shouldFireScrollEvent: boolean;\n}\n\nexport function shouldTriggerEvents(\n alwaysCallback: boolean,\n shouldFireScrollEvent: boolean,\n isTriggeredCurrentTotal: boolean\n) {\n if (alwaysCallback && shouldFireScrollEvent) {\n return true;\n }\n if (!isTriggeredCurrentTotal && shouldFireScrollEvent) {\n return true;\n }\n return false;\n}\n","const VerticalProps = {\n clientHeight: \"clientHeight\",\n offsetHeight: \"offsetHeight\",\n scrollHeight: \"scrollHeight\",\n pageYOffset: \"pageYOffset\",\n offsetTop: \"offsetTop\",\n scrollTop: \"scrollTop\",\n top: \"top\"\n};\n\nconst HorizontalProps = {\n clientHeight: \"clientWidth\",\n offsetHeight: \"offsetWidth\",\n scrollHeight: \"scrollWidth\",\n pageYOffset: \"pageXOffset\",\n offsetTop: \"offsetLeft\",\n scrollTop: \"scrollLeft\",\n top: \"left\"\n};\n\nexport class AxisResolver {\n private propsMap: any;\n\n constructor(private vertical: boolean = true) {\n this.propsMap = vertical ? VerticalProps : HorizontalProps;\n }\n clientHeightKey() {\n return this.propsMap.clientHeight;\n }\n offsetHeightKey() {\n return this.propsMap.offsetHeight;\n }\n scrollHeightKey() {\n return this.propsMap.scrollHeight;\n }\n pageYOffsetKey() {\n return this.propsMap.pageYOffset;\n }\n offsetTopKey() {\n return this.propsMap.offsetTop;\n }\n scrollTopKey() {\n return this.propsMap.scrollTop;\n }\n topKey() {\n return this.propsMap.top;\n }\n}\n","import { ElementRef, SimpleChange } from '@angular/core';\n\nexport function resolveContainerElement(\n selector: string | any,\n scrollWindow,\n defaultElement,\n fromRoot: boolean\n): any {\n const hasWindow = window && !!window.document && window.document.documentElement;\n let container = hasWindow && scrollWindow ? window : defaultElement;\n if (selector) {\n const containerIsString =\n selector && hasWindow && typeof selector === 'string';\n container = containerIsString\n ? findElement(selector, defaultElement.nativeElement, fromRoot)\n : selector;\n if (!container) {\n throw new Error('ngx-infinite-scroll {resolveContainerElement()}: selector for');\n }\n }\n return container;\n}\n\nexport function findElement(\n selector: string | any,\n customRoot: ElementRef | any,\n fromRoot: boolean\n) {\n const rootEl = fromRoot ? window.document : customRoot;\n return rootEl.querySelector(selector);\n}\n\nexport function inputPropChanged(prop: SimpleChange): boolean {\n return prop && !prop.firstChange;\n}\n\nexport function hasWindowDefined(): boolean {\n return typeof window !== 'undefined';\n}\n"],"names":["ScrollResolver.getScrollStats"],"mappings":"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"}
/**
* Generated bundle index. Do not edit.
*/
export * from './public_api';
export * from './public-api';
{
"name": "ngx-infinite-scroll",
"version": "8.0.2",
"description": "An infinite scroll directive for Angular compatible with AoT compilation and Tree shaking",
"version": "9.0.0",
"description": "An infinite scroll directive for Angular",
"main": "./bundles/ngx-infinite-scroll.umd.js",

@@ -37,15 +37,12 @@ "module": "./modules/ngx-infinite-scroll.es5.js",

"license": "MIT",
"peerDependencies": {
"@angular/common": ">= 8.0.0",
"@angular/core": ">= 8.0.0"
},
"peerDependencies": {},
"devDependencies": {
"@angular/animations": "^8.0.0",
"@angular/common": "^8.0.0",
"@angular/compiler": "^8.0.0",
"@angular/compiler-cli": "^8.0.0",
"@angular/core": "^8.0.0",
"@angular/platform-browser": "^8.0.0",
"@angular/platform-browser-dynamic": "^8.0.0",
"@angular/platform-server": "^8.0.0",
"@angular/animations": "^9.1.2",
"@angular/common": "^9.1.2",
"@angular/compiler": "^9.1.2",
"@angular/compiler-cli": "^9.1.2",
"@angular/core": "^9.1.2",
"@angular/platform-browser": "^9.1.2",
"@angular/platform-browser-dynamic": "^9.1.2",
"@angular/platform-server": "^9.1.2",
"@compodoc/compodoc": "^1.1.2",

@@ -67,3 +64,3 @@ "@types/jasmine": "3.3.9",

"rollup": "0.41.6",
"rxjs": "^6.1.0",
"rxjs": "^6.5.5",
"shelljs": "0.7.7",

@@ -75,7 +72,7 @@ "sorcery": "0.10.0",

"tslint": "5.18.0",
"typescript": "^3.1.1",
"typescript": "3.8.3",
"uglify-js": "^2.8.15",
"webpack": "2.3.1",
"yargs": "7.0.2",
"zone.js": "0.9.1"
"zone.js": "0.10.3"
},

@@ -82,0 +79,0 @@ "dependencies": {

+32
-17

@@ -7,11 +7,12 @@ [![Build Status](https://travis-ci.org/orizens/ngx-infinite-scroll.svg?branch=master)](https://travis-ci.org/orizens/ngx-infinite-scroll) [![Backers on Open Collective](https://opencollective.com/ngx-infinite-scroll/backers/badge.svg)](#backers) [![Sponsors on Open Collective](https://opencollective.com/ngx-infinite-scroll/sponsors/badge.svg)](#sponsors)

## [Become a sponsor](https://opencollective.com/ngx-infinite-scroll#sponsor)
# Angular Infinite Scroll
versions now follow Angular's version to easily reflect compatibility.
Meaning, for **Angular 8**, use `ngx-infinite-scroll @ ^8.0.0`
Meaning, for **Angular 9**, use `ngx-infinite-scroll @ ^9.0.0`
## Angular - Older Versions Support
For **Angular 7** - `ngx-infinite-scroll@7.0.0`
For **Angular 6** and **rxjs 6** - `ngx-infinite-scroll@6.0.0`
For **Angular 6 anf Above** - `ngx-infinite-scroll@THE_VERSION.0.0`
For **Angular 4** and **Angular = ^5.5.6** - use version `ngx-infinite-scroll@0.8.4`

@@ -21,11 +22,27 @@ For **Angular 5.x** with **rxjs =<5.5.2** - use version `ngx-infinite-scroll@0.8.3`

## Angular Consulting Services
## Used By
I'm a Senior Javascript Engineer & A Front End Consultant at [Orizens](http://orizens.com).
- [Google](https://google.com)
- [Apple](https://apple.com)
- [Amazon](https://amazon.com)
- [Microsoft](https://microsoft.com)
- [Disney](https://disney.com)
- [Sap](https://sap.com/)
- [Cisco](https://cisco.com/)
- [Yandex](https://yandex.com)
- [Ancestry](https://www.ancestry.com/)
and much more.
> _These analytics are made available via the awesome [Scarf](https://www.npmjs.com/package/@scarf/scarf) package analytics library_
## Front End Consulting Services
I'm a Senior Front End Engineer & Consultant at [Orizens](https://orizens.com).
My services include:
- Angular Consulting
- Front End Consulting
- Angular/React/Javascript Consulting
- Front End Architecture Consulting
- Project Code Review
- project bootstrapping and development.
- Project Development

@@ -94,3 +111,3 @@ [Contact Here](http://orizens.com/contact)

declarations: [AppComponent],
bootstrap: [AppComponent]
bootstrap: [AppComponent],
})

@@ -117,3 +134,3 @@ export class AppModule {}

></div>
`
`,
})

@@ -140,3 +157,3 @@ export class AppComponent {

}
`
`,
],

@@ -152,3 +169,3 @@ template: `

></div>
`
`,
})

@@ -181,3 +198,3 @@ export class AppComponent {

></div>
`
`,
})

@@ -208,3 +225,3 @@ export class AppComponent {

}
`
`,
],

@@ -222,3 +239,3 @@ template: `

</div>
`
`,
})

@@ -257,4 +274,2 @@ export class AppComponent {

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/ngx-infinite-scroll#sponsor)]
<a href="https://opencollective.com/ngx-infinite-scroll/sponsor/0/website" target="_blank"><img src="https://opencollective.com/ngx-infinite-scroll/sponsor/0/avatar.svg"></a>

@@ -261,0 +276,0 @@ <a href="https://opencollective.com/ngx-infinite-scroll/sponsor/1/website" target="_blank"><img src="https://opencollective.com/ngx-infinite-scroll/sponsor/1/avatar.svg"></a>

/**
* Angular library starter.
* Build an Angular library compatible with AoT compilation & Tree shaking.
* Written by Roberto Simonetti.
* MIT license.
* https://github.com/robisim74/angular-library-starter
*/
/**
* Entry point for all public APIs of the package.
*/
export * from './src/ngx-infinite-scroll';