{"version":3,"file":"ngx-marquee.mjs","sources":["../../../projects/ngx-marquee/src/lib/observables/from-intersection-observer.ts","../../../projects/ngx-marquee/src/lib/directives/intersection-observer.directive.ts","../../../projects/ngx-marquee/src/lib/ngx-marquee.component.ts","../../../projects/ngx-marquee/src/lib/ngx-marquee.component.html","../../../projects/ngx-marquee/src/lib/ngx-marquee.module.ts","../../../projects/ngx-marquee/src/public-api.ts","../../../projects/ngx-marquee/src/ngx-marquee.ts"],"sourcesContent":["import { Observable, Subject } from \"rxjs\";\r\nimport { debounceTime, filter } from \"rxjs/operators\";\r\n\r\nexport enum IntersectionStatus {\r\n    Visible = 'Visible',\r\n    Pending = 'Pending',\r\n    NotVisible = 'NotVisible'\r\n}\r\n\r\nexport const fromIntersectionObserver = ( element: HTMLElement, config: IntersectionObserverInit, debounce = 0 ) => \r\n    new Observable<IntersectionStatus>( subscriber => {\r\n        const subject$ = new Subject<{\r\n            entry: IntersectionObserverEntry;\r\n            observer: IntersectionObserver;\r\n        }>();\r\n\r\n        const intersectionObserver = new IntersectionObserver( (entries, observer) => {\r\n            entries.forEach( entry => {\r\n                subject$.next({ entry, observer });\r\n            });\r\n          },\r\n          config\r\n        );\r\n\r\n        subject$.subscribe( () => {\r\n            subscriber.next(IntersectionStatus.Pending);\r\n        });\r\n    \r\n        subject$.pipe(\r\n            debounceTime(debounce),\r\n            filter(Boolean)\r\n        )\r\n        .subscribe( async({ entry, observer }) => {\r\n            const isEntryVisible = await isVisible(entry.target as HTMLElement);\r\n            if (isEntryVisible)\r\n            {\r\n              subscriber.next(IntersectionStatus.Visible);\r\n            }\r\n            else\r\n            {\r\n              subscriber.next(IntersectionStatus.NotVisible);\r\n            }\r\n        });\r\n\r\n        intersectionObserver.observe(element);\r\n    \r\n        return {\r\n            unsubscribe() {\r\n                intersectionObserver.disconnect();\r\n                subject$.unsubscribe();\r\n            }\r\n        };\r\n});\r\n\r\nasync function isVisible( element: HTMLElement )\r\n{\r\n    return new Promise( resolve => {\r\n        const observer = new IntersectionObserver(([entry]) => {\r\n            resolve(entry.isIntersecting);\r\n            observer.disconnect();\r\n        });\r\n\r\n        observer.observe(element);\r\n    });\r\n}","import { Directive, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { fromIntersectionObserver, IntersectionStatus } from '../observables/from-intersection-observer';\n\n@Directive({\n  selector: '[intersectionObserver]'\n})\nexport class IntersectionObserverDirective implements OnInit, OnDestroy {\n\n  @Input() intersectionDebounce = 0;\n  @Input() intersectionRootMargin = '0px';\n  @Input() intersectionRoot: HTMLElement;\n  @Input() intersectionThreshold: number | number[];\n  \n  @Output() visibilityChange = new EventEmitter<IntersectionStatus>();\n  \n  private _destroy$ = new Subject();\n\n  constructor( private _element: ElementRef ) { }\n\n  ngOnInit()\n  {\n    const element = this._element.nativeElement;\n    \n    const config = {\n      root: this.intersectionRoot,\n      rootMargin: this.intersectionRootMargin,\n      threshold: this.intersectionThreshold\n    };\n\n    fromIntersectionObserver(\n      element,\n      config,\n      this.intersectionDebounce\n    )\n    .pipe(\n      takeUntil( this._destroy$ )\n    )\n    .subscribe( status => {\n      this.visibilityChange.emit(status);\n    });\n  }\n  \n  ngOnDestroy()\n  {\n    this._destroy$.next(void 0);\n  }\n\n}\n","import { AfterViewInit, ChangeDetectionStrategy, Component, EventEmitter, Input, Output, Renderer2, ViewChild } from '@angular/core';\r\nimport { IntersectionStatus } from './observables/from-intersection-observer';\r\n\r\nexport enum MarqueeState {\r\n  Running = \"running\",\r\n  Paused = \"paused\",\r\n  Stopped = \"stopped\"\r\n}\r\n\r\nexport enum MarqueeDirection {\r\n  Left = 'left',\r\n  Right = 'right',\r\n  Alternate = 'alternate'\r\n}\r\n\r\nexport enum MarqueeAnimation {\r\n  Default = 'default',\r\n  SlideInUp = 'slideInUp',\r\n  SlideInDown = 'slideInDown'\r\n}\r\n\r\n@Component({\r\n  selector: 'ngx-marquee',\r\n  templateUrl: './ngx-marquee.component.html',\r\n  styleUrls: ['./ngx-marquee.component.scss'],\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class NgxMarqueeComponent implements AfterViewInit {\r\n\r\n  @Input() direction: MarqueeDirection;\r\n  @Input() duration: string;\r\n  @Input() pauseOnHover: boolean;\r\n  @Input() animation: MarqueeAnimation;\r\n  @Input() taskOnUpdateContent: () => void;\r\n  @Input() taskOnUpdateDuration: () => string; // Formato esperado \"number[s|ms]\"\r\n  @Input() pendingUpdates: boolean;\r\n  @Output() pendingUpdatesChange: EventEmitter<boolean>;\r\n  @Output() playStateChange: EventEmitter<MarqueeState>;\r\n  @ViewChild(\"tape\") tape: HTMLElement;\r\n\r\n  readonly root: HTMLElement;\r\n  readonly rootMargin: string;\r\n  readonly threshold: number | number[];\r\n  readonly debounce: number;\r\n  \r\n  private _elementMarquee: any;\r\n  private _outerFlags = [false, false];\r\n  private _dataPlayState: MarqueeState; \r\n\r\n  constructor( private _renderer: Renderer2 )\r\n  {\r\n    this.debounce = 0;\r\n    this.root = undefined;\r\n    this.rootMargin = '0px';\r\n    this.threshold = 0;\r\n    this.duration = '20s';\r\n    this.animation = MarqueeAnimation.Default;\r\n    this.pauseOnHover = false;\r\n    this.pendingUpdates = false;\r\n    this.pendingUpdatesChange = new EventEmitter<boolean>();\r\n    this.playStateChange = new EventEmitter<MarqueeState>();\r\n\r\n    if (typeof this.taskOnUpdateContent !== 'function')\r\n    {\r\n      this.taskOnUpdateContent = (): void => {};\r\n    }\r\n\r\n    if (typeof this.taskOnUpdateDuration !== 'function')\r\n    {\r\n      this.taskOnUpdateDuration = (): string => {\r\n        return this.duration;\r\n      };\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit(): void\r\n  {\r\n    this._elementMarquee = this._renderer.selectRootElement(this.tape, true).nativeElement;\r\n    this._resetMarquee();\r\n  }\r\n\r\n  public playPause(): void\r\n  {\r\n    if ( this._dataPlayState === null || this._dataPlayState === MarqueeState.Running )\r\n    {\r\n      this._pauseElement();\r\n    }\r\n    else\r\n    {\r\n      this._playElement();\r\n    }\r\n  }\r\n\r\n  public stop(): void\r\n  {\r\n    this._resetAnimation();\r\n    this._stopElement();\r\n  }\r\n\r\n  public restart(): void\r\n  {\r\n    this._resetAnimation();\r\n    this._playElement();\r\n  }\r\n \r\n  onVisibilityChanged(status: IntersectionStatus, control: number): void\r\n  {\r\n    if (status !== IntersectionStatus.Pending)\r\n    {\r\n      if (status === IntersectionStatus.Visible)\r\n      {\r\n        this._outerFlags[control] = true;\r\n      }\r\n      else if (status === IntersectionStatus.NotVisible)\r\n      {\r\n        this._outerFlags[control] = false;\r\n      }\r\n      \r\n      if (this.pendingUpdates)\r\n      {\r\n        if ( (this.direction === undefined || this.direction === MarqueeDirection.Left) && (this._outerFlags[0] === true && this._outerFlags[1] === false) )\r\n        { \r\n          this._execProcedure();\r\n        }\r\n        else if ( this.direction === MarqueeDirection.Right && (this._outerFlags[0] === false && this._outerFlags[1] === true) )\r\n        {\r\n          this._execProcedure();\r\n        }\r\n      }\r\n    }  \r\n  }\r\n\r\n  private _execProcedure(): void\r\n  {\r\n    this.taskOnUpdateContent();\r\n    this._resetMarquee();\r\n    this._setPendingUpdates(false);\r\n  }\r\n\r\n  private _setDataPlayState( state: MarqueeState ): void\r\n  {\r\n    this._dataPlayState = state;\r\n    this.playStateChange.emit(this._dataPlayState);\r\n  }\r\n\r\n  private _setPendingUpdates( state: boolean ): void\r\n  {\r\n    this.pendingUpdates = state;\r\n    this.pendingUpdatesChange.emit(this.pendingUpdates);\r\n  }\r\n\r\n  private _resetMarquee(): void\r\n  {\r\n    this.stop();\r\n    this._calculateDuration();\r\n    this._playElement();\r\n  }\r\n\r\n  private _calculateDuration(): void\r\n  {\r\n    this.duration = this.taskOnUpdateDuration();          \r\n  }\r\n\r\n  private _playElement(): void\r\n  {\r\n    this._setAnimationState('running', true);\r\n    this._setDataAttrState('running');\r\n    this._setDataPlayState(MarqueeState.Running);\r\n  }\r\n\r\n  private _pauseElement(): void\r\n  {\r\n    this._setAnimationState('paused');\r\n    this._setDataAttrState('paused');\r\n    this._setDataPlayState(MarqueeState.Paused);\r\n  }\r\n\r\n  private _stopElement(): void\r\n  {\r\n    this._setAnimationState('paused');\r\n    this._setDataAttrState('stopped');\r\n    this._setDataPlayState(MarqueeState.Stopped);\r\n    this._setPendingUpdates(false);\r\n  }\r\n\r\n  private _setAnimationState( state: string = '', fix: boolean = false ): void\r\n  {\r\n    this._renderer.setStyle(this._elementMarquee, 'animation-play-state', state);\r\n    \r\n    if (fix)\r\n    {\r\n      this._fixAnimationState();\r\n    }\r\n  }\r\n\r\n  private _resetAnimation(): void\r\n  {\r\n    this._renderer.setStyle(this._elementMarquee, 'animation', 'none');\r\n    let fix = this._elementMarquee.offsetWidth; fix = fix;\r\n\r\n    this._renderer.setStyle(this._elementMarquee, 'animation', `${this.duration} linear infinite`);\r\n    this._renderer.setStyle(this._elementMarquee, '-webkit-animation', `${this.duration} linear infinite`);\r\n\r\n    switch (this.direction)\r\n    {\r\n      case 'alternate': this._renderer.setStyle(this._elementMarquee, 'animation-direction', 'alternate'); break;\r\n      default: this._renderer.setStyle(this._elementMarquee, 'animation-direction', 'normal'); break;\r\n    }\r\n\r\n    if (this.direction !== MarqueeDirection.Alternate)\r\n    {\r\n      if (this.direction === undefined || this.direction === MarqueeDirection.Left)\r\n      {\r\n        if (this.animation === MarqueeAnimation.SlideInUp)\r\n        {\r\n          this._renderer.setStyle(this._elementMarquee, 'animation-name', 'slide-in-up');\r\n        }\r\n        else if (this.animation === MarqueeAnimation.SlideInDown)\r\n        {\r\n          this._renderer.setStyle(this._elementMarquee, 'animation-name', 'slide-in-down');\r\n        }\r\n        else\r\n        {\r\n          this._renderer.setStyle(this._elementMarquee, 'animation-name', 'movement-smooth');\r\n        }\r\n      }\r\n      else if (this.direction === MarqueeDirection.Right)\r\n      {\r\n        if (this.animation === MarqueeAnimation.SlideInUp)\r\n        {\r\n          this._renderer.setStyle(this._elementMarquee, 'animation-name', 'slide-in-up-right');\r\n        }\r\n        else if (this.animation === MarqueeAnimation.SlideInDown)\r\n        {\r\n          this._renderer.setStyle(this._elementMarquee, 'animation-name', 'slide-in-down-right');\r\n        }\r\n        else\r\n        {\r\n          this._renderer.setStyle(this._elementMarquee, 'animation-direction', 'reverse');\r\n          this._renderer.setStyle(this._elementMarquee, 'animation-name', 'movement-smooth');\r\n        }\r\n      }\r\n    }\r\n    else\r\n    {\r\n      this._renderer.setStyle(this._elementMarquee, 'animation-name', 'movement-smooth');\r\n    }\r\n\r\n  }\r\n\r\n  private _setDataAttrState( state: string = '' ): void\r\n  {\r\n    this._renderer.setAttribute(this._elementMarquee, 'data-play-state', state);\r\n  }\r\n\r\n  private _fixAnimationState(): void\r\n  {\r\n    this._renderer.removeStyle(this._elementMarquee, 'animation-play-state');\r\n  }\r\n\r\n}","<div class=\"ngx-marquee\" [ngClass]=\"{'ngx-marquee-pause-on-hover': pauseOnHover}\">\r\n    <span #tape>\r\n        <span class=\"ticker-control ticker-start\" \r\n            intersectionObserver\r\n            [intersectionRoot]=\"root\"\r\n            [intersectionRootMargin]=\"rootMargin\"\r\n            [intersectionThreshold]=\"threshold\"\r\n            [intersectionDebounce]=\"debounce\"\r\n            (visibilityChange)=\"onVisibilityChanged($event, 0)\">L</span>\r\n        <span class=\"tickers\">\r\n            <ng-content></ng-content>\r\n        </span>\r\n        <span class=\"ticker-control ticker-end\"\r\n            intersectionObserver\r\n            [intersectionRoot]=\"root\"\r\n            [intersectionRootMargin]=\"rootMargin\"\r\n            [intersectionThreshold]=\"threshold\"\r\n            [intersectionDebounce]=\"debounce\"\r\n            (visibilityChange)=\"onVisibilityChanged($event, 1)\">R</span>\r\n    </span>\r\n</div>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgxMarqueeComponent } from './ngx-marquee.component';\nimport { IntersectionObserverDirective } from './directives/intersection-observer.directive';\n\n\n@NgModule({\n  declarations: [\n    NgxMarqueeComponent,\n    IntersectionObserverDirective\n  ],\n  imports: [\n    CommonModule\n  ],\n  exports: [\n    NgxMarqueeComponent\n  ]\n})\nexport class NgxMarqueeModule { }\n","/*\n * Public API Surface of ngx-marquee\n */\n\nexport * from './lib/ngx-marquee.component';\nexport * from './lib/ngx-marquee.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}