{"version":3,"file":"ngx-flip-flip.mjs","sources":["../../../projects/ngx-flip-flip/src/lib/services/slides.service.ts","../../../projects/ngx-flip-flip/src/lib/models/direction.enum.ts","../../../projects/ngx-flip-flip/src/lib/models/keyboard.enum.ts","../../../projects/ngx-flip-flip/src/lib/services/events.service.ts","../../../projects/ngx-flip-flip/src/lib/components/slide.component.ts","../../../projects/ngx-flip-flip/src/lib/components/wrapper.component.ts","../../../projects/ngx-flip-flip/src/lib/ngx-flip-flip.module.ts","../../../projects/ngx-flip-flip/src/public_api.ts","../../../projects/ngx-flip-flip/src/ngx-flip-flip.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class NgxFlipFlipSlidesService {\n  private _slides: NodeListOf<HTMLElement>;\n  private _selectedId: number;\n\n  get slides() {\n    return this._slides;\n  }\n  set slides(slides: NodeListOf<HTMLElement>) {\n    this._slides = slides;\n  }\n\n  get selectedId() {\n    return this._selectedId;\n  }\n  set selectedId(id: number) {\n    this._selectedId = id;\n  }\n\n  isTheFirstSlide() {\n    return this._selectedId === 0;\n  }\n\n  isTheLastSlide() {\n    return this._selectedId === this._slides.length - 1;\n  }\n}\n","export enum Direction {\n  Up = 'Up',\n  Down = 'Down',\n}\n","export enum KeyboardEnum {\n  ArrowDown = 'ArrowDown',\n  ArrowUp = 'ArrowUp',\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, fromEvent, merge } from 'rxjs';\nimport { filter, throttleTime, map, share, pairwise } from 'rxjs/operators';\nimport { NgxFlipFlipSlidesService } from './slides.service';\nimport { Direction } from '../models/direction.enum';\nimport { KeyboardEnum } from '../models/keyboard.enum';\n\n@Injectable()\nexport class NgxFlipFlipEventsService {\n  fitToSectionDelay: number;\n  isArrowNavigationActive: boolean;\n\n  constructor(\n    private slidesService: NgxFlipFlipSlidesService\n  ) {}\n\n  onResize$(): Observable<Event> {\n    return fromEvent(window, 'resize');\n  }\n\n  onSlideChange$(): Observable<Direction> {\n    return merge(this.onWheel$(), this.onKeyPress$(), this.onScroll$())\n      .pipe(\n        throttleTime(this.fitToSectionDelay),\n        filter(direction => this.filterOnScroll(direction)),\n        share()\n      );\n  }\n\n  private onWheel$(): Observable<Direction> {\n    return fromEvent(window, 'wheel', { passive: true }).pipe(\n      map((e: WheelEvent) => e.deltaY < 0 ? Direction.Up : Direction.Down)\n    );\n  }\n\n  private onKeyPress$(): Observable<Direction> {\n    return fromEvent(window, 'keydown').pipe(\n      filter(() => this.isArrowNavigationActive),\n      filter((e: KeyboardEvent) => e.key === KeyboardEnum.ArrowUp || e.key === KeyboardEnum.ArrowDown),\n      map((e: KeyboardEvent) => e.key === KeyboardEnum.ArrowUp ? Direction.Up : Direction.Down)\n    );\n  }\n\n  private onScroll$(): Observable<Direction> {\n    return fromEvent(window, 'scroll').pipe(\n      map((e: TouchEvent) => window.pageYOffset),\n      pairwise(),\n      map(([y1, y2]): Direction => y2 < y1 ? Direction.Up : Direction.Down)\n    );\n  }\n\n  private filterOnScroll(direction: Direction): boolean {\n    return direction === Direction.Up\n      ? !this.slidesService.isTheFirstSlide()\n      : !this.slidesService.isTheLastSlide();\n  }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'ngx-flip-flip-slide',\n  template: `<ng-content></ng-content>`,\n  styles: [`\n    :host {\n      display: block;\n      position: fixed;\n      width: 100%;\n    }\n  `],\n})\nexport class NgxFlipFlipSlide {\n}\n","import { Component, OnInit, OnDestroy, Renderer2, ElementRef, Input, NgZone, Output, EventEmitter } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { NgxFlipFlipEventsService } from '../services/events.service';\nimport { NgxFlipFlipSlidesService } from '../services/slides.service';\nimport { Direction } from '../models/direction.enum';\nimport { NgxFlipFlipOptions } from '../models/options.model';\n\n@Component({\n  selector: 'ngx-flip-flip-wrapper',\n  template: `<ng-content></ng-content>`,\n  styles: [`\n    :host {\n      display: block;\n    }\n  `],\n})\nexport class NgxFlipFlipWrapper implements OnInit, OnDestroy {\n  @Input() options: NgxFlipFlipOptions = {\n    scrollingSpeed: 700,\n    easing: 'ease',\n    fitToSectionDelay: 500,\n    startFromSlide: 0,\n    keyboardScrolling: true,\n  };\n  @Output() onSlideChange = new EventEmitter<Direction>();\n\n  private _resizeSubscription: Subscription;\n  private _onScrollSubscription: Subscription;\n\n  constructor(\n    private renderer: Renderer2,\n    private elementRef: ElementRef,\n    private slidesService: NgxFlipFlipSlidesService,\n    private eventsService: NgxFlipFlipEventsService,\n    private _zone: NgZone,\n  ) {}\n\n  ngOnInit() {\n    this.slidesService.slides = document.querySelectorAll('ngx-flip-flip-slide');\n\n    this.eventsService.fitToSectionDelay = this.options.fitToSectionDelay + this.options.scrollingSpeed;\n    this.eventsService.isArrowNavigationActive = this.options.keyboardScrolling;\n    this.slidesService.selectedId = this.options.startFromSlide;\n    this.changeSlide();\n\n    this._zone.runOutsideAngular(() => {\n\n      this._onScrollSubscription = this.eventsService.onSlideChange$().subscribe(direction => {\n        this._zone.run(() => {\n          this.slidesService.selectedId = this.getSelectedSlideId(direction);\n          this.changeSlide();\n          this.onSlideChange.emit(direction);\n        });\n      });\n\n      this._resizeSubscription = this.eventsService.onResize$().subscribe(() => {\n        this._zone.run(() => {\n          this.changeSlidesDimensions();\n          this.changeSlide();\n        });\n      });\n\n    });\n\n    this.changeSlidesDimensions();\n    this.addStyles();\n  }\n\n  ngOnDestroy() {\n    this._resizeSubscription.unsubscribe();\n    this._onScrollSubscription.unsubscribe();\n  }\n\n  private changeSlidesDimensions = () => {\n    this.slidesService.slides.forEach((slide, index) => {\n      this.renderer.setStyle(slide, 'height', `${window.innerHeight}px`);\n      this.renderer.setStyle(slide, 'top', `${window.innerHeight * index}px`);\n    });\n  }\n\n  private changeSlide() {\n    const offset = -window.innerHeight * this.slidesService.selectedId;\n    this.moveTo(offset);\n  }\n\n  private moveTo(offset: number) {\n    this.renderer.setStyle(this.elementRef.nativeElement, 'transform', `translateY(${offset}px)`);\n  }\n\n  private addStyles() {\n    this.renderer.setStyle(this.elementRef.nativeElement, 'transition', `transform ${this.options.scrollingSpeed}ms ${this.options.easing}`);\n    this.renderer.setStyle(document.body, 'margin', 0);\n    this.renderer.setStyle(document.body, 'overflow', 'hidden');\n  }\n\n  private getSelectedSlideId(direction: Direction): number {\n    return direction === Direction.Down ? this.slidesService.selectedId + 1 : this.slidesService.selectedId - 1;\n  }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { NgxFlipFlipSlidesService } from './services/slides.service';\nimport { NgxFlipFlipEventsService } from './services/events.service';\nimport { NgxFlipFlipSlide } from './components/slide.component';\nimport { NgxFlipFlipWrapper } from './components/wrapper.component';\n\n@NgModule({\n  declarations: [\n    NgxFlipFlipWrapper,\n    NgxFlipFlipSlide,\n  ],\n  imports: [\n    CommonModule,\n  ],\n  exports: [\n    NgxFlipFlipWrapper,\n    NgxFlipFlipSlide,\n  ],\n  providers: [\n    NgxFlipFlipEventsService,\n    NgxFlipFlipSlidesService,\n  ],\n})\nexport class NgxFlipFlipModule {\n  static forRoot(): ModuleWithProviders<NgxFlipFlipModule> {\n    return {\n        ngModule: NgxFlipFlipModule,\n        providers: [],\n    };\n  }\n}\n","/*\n * Public API Surface of ngx-flip-flip\n */\n\nexport * from './lib/ngx-flip-flip.module';\nexport { Direction } from './lib/models/direction.enum';\nexport { NgxFlipFlipOptions } from './lib/models/options.model';\nexport { NgxFlipFlipSlide } from './lib/components/slide.component'\nexport { NgxFlipFlipWrapper } from './lib/components/wrapper.component'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}