{"version":3,"file":"ngx-scroll-event.mjs","sources":["../../../projects/ngx-scroll-event/src/lib/ngx-scroll-event.directive.ts","../../../projects/ngx-scroll-event/src/lib/ngx-scroll-event.module.ts","../../../projects/ngx-scroll-event/src/public-api.ts","../../../projects/ngx-scroll-event/src/ngx-scroll-event.ts"],"sourcesContent":["import { Directive, HostListener, Output, EventEmitter, Input } from '@angular/core';\n\nexport type NgxScrollEvent = {\n  isReachingBottom: boolean,\n  isReachingTop: boolean,\n  originalEvent: Event,\n  isWindowEvent: boolean\n};\n\ndeclare const window: Window;\n\n@Directive({\n  selector: '[libScrollEvent]',\n  standalone: true\n})\nexport class NgxScrollEventDirective {\n  @Output() public onscroll = new EventEmitter<NgxScrollEvent>();\n  @Input() public bottomOffset = 100;\n  @Input() public topOffset = 100;\n\n  constructor() { }\n\n  // handle host scroll\n  @HostListener('scroll', ['$event']) public scrolled($event: Event): void {\n    this.elementScrollEvent($event);\n  }\n\n  // handle window scroll\n  @HostListener('window:scroll', ['$event']) public windowScrolled($event: Event): void {\n    this.windowScrollEvent($event);\n  }\n\n  protected windowScrollEvent($event: Event): void {\n    const target = $event.target as Document;\n    const scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n    const isReachingTop = scrollTop < this.topOffset;\n    const isReachingBottom = ( target.body.offsetHeight - (window.innerHeight + scrollTop) ) < this.bottomOffset;\n    const emitValue: NgxScrollEvent = {isReachingBottom, isReachingTop, originalEvent: $event, isWindowEvent: true};\n    this.onscroll.emit(emitValue);\n  }\n\n  protected elementScrollEvent($event: Event): void {\n    const target = $event.target as HTMLElement;\n    const scrollPosition = target.scrollHeight - target.scrollTop;\n    const offsetHeight = target.offsetHeight;\n    const isReachingTop = target.scrollTop < this.topOffset;\n    const isReachingBottom = (scrollPosition - offsetHeight) < this.bottomOffset;\n    const emitValue: NgxScrollEvent = {isReachingBottom, isReachingTop, originalEvent: $event, isWindowEvent: false};\n    this.onscroll.emit(emitValue);\n  }\n\n}\n","import { NgModule } from '@angular/core';\nimport { NgxScrollEventDirective } from './ngx-scroll-event.directive';\n\n@NgModule({\n  imports: [NgxScrollEventDirective],\n  exports: [NgxScrollEventDirective]\n})\nexport class NgxScrollEventModule { }\n","/*\n * Public API Surface of ngx-scroll-event\n */\n\nexport * from './lib/ngx-scroll-event.directive';\nexport * from './lib/ngx-scroll-event.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}