{"version":3,"file":"49ing-ngx-videogular-core.mjs","sources":["../../../../libs/ngx-videogular/core/src/lib/services/states/vg-states.service.ts","../../../../libs/ngx-videogular/core/src/lib/services/vg-api/vg-api.service.ts","../../../../libs/ngx-videogular/core/src/lib/services/vg-controls-hidden/vg-controls-hidden.service.ts","../../../../libs/ngx-videogular/core/src/lib/services/vg-utils/vg-utils.service.ts","../../../../libs/ngx-videogular/core/src/lib/services/vg-fullscreen-api/vg-fullscreen-api.service.ts","../../../../libs/ngx-videogular/core/src/lib/services/events/vg-events.service.ts","../../../../libs/ngx-videogular/core/src/lib/directives/vg-cue-points/vg-cue-points.directive.ts","../../../../libs/ngx-videogular/core/src/lib/directives/vg-media/vg-media.directive.ts","../../../../libs/ngx-videogular/core/src/lib/components/vg-player/vg-player.component.ts","../../../../libs/ngx-videogular/core/src/lib/core.module.ts","../../../../libs/ngx-videogular/core/src/lib/directives/vg-media/vg-media-element.ts","../../../../libs/ngx-videogular/core/src/49ing-ngx-videogular-core.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class VgStates {\n  static VG_ENDED = 'ended';\n  static VG_PAUSED = 'paused';\n  static VG_PLAYING = 'playing';\n  static VG_LOADING = 'waiting';\n}\n","import { Injectable, EventEmitter } from '@angular/core';\nimport { VgFullscreenApiService } from '../vg-fullscreen-api/vg-fullscreen-api.service';\nimport { VgStates } from '../states/vg-states.service';\nimport { IPlayable } from '../../interfaces/vg-media-api.interface';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class VgApiService {\n  medias = {}; // TODO: refactor to Set<IPlayable>\n  videogularElement: any;\n  playerReadyEvent: EventEmitter<VgApiService> = new EventEmitter<VgApiService>(true);\n  isPlayerReady = false;\n  fsAPI: VgFullscreenApiService;\n\n  constructor() {}\n\n  onPlayerReady(fsAPI: VgFullscreenApiService) {\n    this.fsAPI = fsAPI;\n    this.isPlayerReady = true;\n    this.playerReadyEvent.emit(this);\n  }\n\n  getDefaultMedia(): IPlayable {\n    for (const item in this.medias) {\n      if (this.medias[item]) {\n        return this.medias[item];\n      }\n    }\n  }\n\n  getMasterMedia(): IPlayable {\n    let master: any;\n    for (const id in this.medias) {\n      if (\n        this.medias[id].vgMaster === 'true' ||\n        this.medias[id].vgMaster === true\n      ) {\n        master = this.medias[id];\n        break;\n      }\n    }\n    return master || this.getDefaultMedia();\n  }\n\n  isMasterDefined(): boolean {\n    let result = false;\n    for (const id in this.medias) {\n      if (\n        this.medias[id].vgMaster === 'true' ||\n        this.medias[id].vgMaster === true\n      ) {\n        result = true;\n        break;\n      }\n    }\n    return result;\n  }\n\n  getMediaById(id: string = null): IPlayable {\n    let media = this.medias[id];\n\n    if (!id || id === '*') {\n      media = this;\n    }\n\n    return media;\n  }\n\n  play() {\n    for (const id in this.medias) {\n      if (this.medias[id]) {\n        this.medias[id].play();\n      }\n    }\n  }\n\n  pause() {\n    for (const id in this.medias) {\n      if (this.medias[id]) {\n        this.medias[id].pause();\n      }\n    }\n  }\n\n  get duration() {\n    return this.$$getAllProperties('duration');\n  }\n\n  set currentTime(seconds) {\n    this.$$setAllProperties('currentTime', seconds);\n  }\n\n  get currentTime() {\n    return this.$$getAllProperties('currentTime');\n  }\n\n  set state(state) {\n    this.$$setAllProperties('state', state);\n  }\n\n  get state() {\n    return this.$$getAllProperties('state');\n  }\n\n  set volume(volume) {\n    this.$$setAllProperties('volume', volume);\n  }\n\n  get volume() {\n    return this.$$getAllProperties('volume');\n  }\n\n  set playbackRate(rate) {\n    this.$$setAllProperties('playbackRate', rate);\n  }\n\n  get playbackRate() {\n    return this.$$getAllProperties('playbackRate');\n  }\n\n  get canPlay() {\n    return this.$$getAllProperties('canPlay');\n  }\n\n  get canPlayThrough() {\n    return this.$$getAllProperties('canPlayThrough');\n  }\n\n  get isMetadataLoaded() {\n    return this.$$getAllProperties('isMetadataLoaded');\n  }\n\n  get isWaiting() {\n    return this.$$getAllProperties('isWaiting');\n  }\n\n  get isCompleted() {\n    return this.$$getAllProperties('isCompleted');\n  }\n\n  get isLive() {\n    return this.$$getAllProperties('isLive');\n  }\n\n  get isMaster() {\n    return this.$$getAllProperties('isMaster');\n  }\n\n  get time() {\n    return this.$$getAllProperties('time');\n  }\n\n  get buffer() {\n    return this.$$getAllProperties('buffer');\n  }\n\n  get buffered() {\n    return this.$$getAllProperties('buffered');\n  }\n\n  get subscriptions() {\n    return this.$$getAllProperties('subscriptions');\n  }\n\n  get textTracks() {\n    return this.$$getAllProperties('textTracks');\n  }\n\n  seekTime(value: number, byPercent: boolean = false) {\n    for (const id in this.medias) {\n      if (this.medias[id]) {\n        this.$$seek(this.medias[id], value, byPercent);\n      }\n    }\n  }\n\n  $$seek(media: IPlayable, value: number, byPercent: boolean = false) {\n    let second: number;\n    let duration: number = media.duration;\n\n    if (byPercent) {\n      if (this.isMasterDefined()) {\n        duration = this.getMasterMedia().duration;\n      }\n\n      second = (value * duration) / 100;\n    } else {\n      second = value;\n    }\n\n    media.currentTime = second;\n  }\n\n  addTextTrack(type: string, label?: string, language?: string) {\n    for (const id in this.medias) {\n      if (this.medias[id]) {\n        this.$$addTextTrack(this.medias[id], type, label, language);\n      }\n    }\n  }\n  $$addTextTrack(\n    media: IPlayable,\n    type: string,\n    label?: string,\n    language?: string\n  ) {\n    media.addTextTrack(type, label, language);\n  }\n\n  $$getAllProperties(property: string) {\n    const medias = {};\n    let result: any;\n\n    for (const id in this.medias) {\n      if (this.medias[id]) {\n        medias[id] = this.medias[id];\n      }\n    }\n\n    const nMedias = Object.keys(medias).length;\n    switch (nMedias) {\n      case 0:\n        // Return default values until vgMedia is initialized\n        switch (property) {\n          case 'state':\n            result = VgStates.VG_PAUSED;\n            break;\n\n          case 'playbackRate':\n          case 'volume':\n            result = 1;\n            break;\n\n          case 'time':\n            result = { current: 0, total: 0, left: 0 };\n            break;\n        }\n        break;\n\n      case 1:\n        // If there's only one media element then return the plain value\n        const firstMediaId = Object.keys(medias)[0];\n        result = medias[firstMediaId][property];\n        break;\n\n      default:\n        // TODO: return 'master' value\n        const master = this.getMasterMedia();\n        result = medias[master.id][property];\n    }\n\n    return result;\n  }\n\n  $$setAllProperties(property: string, value: any) {\n    for (const id in this.medias) {\n      if (this.medias[id]) {\n        this.medias[id][property] = value;\n      }\n    }\n  }\n\n  registerElement(elem: HTMLElement) {\n    this.videogularElement = elem;\n  }\n\n  registerMedia(media: IPlayable) {\n    this.medias[media.id] = media;\n  }\n\n  unregisterMedia(media: IPlayable) {\n    delete this.medias[media.id];\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject, Observable } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class VgControlsHiddenService {\n  isHidden: Observable<boolean>;\n\n  private isHiddenSubject: Subject<boolean> = new Subject<boolean>();\n\n  constructor() {\n    this.isHidden = this.isHiddenSubject.asObservable();\n  }\n\n  state(hidden: boolean) {\n    this.isHiddenSubject.next(hidden);\n  }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class VgUtilsService {\n  /**\n   * Inspired by Paul Irish\n   * https://gist.github.com/paulirish/211209\n   */\n  static getZIndex(): number {\n    let zIndex = 1;\n    let elementZIndex: number;\n\n    const tags = document.getElementsByTagName('*');\n\n    for (let i = 0, l = tags.length; i < l; i++) {\n      elementZIndex = parseInt(window.getComputedStyle(tags[i])['z-index'], 10);\n\n      if (elementZIndex > zIndex) {\n        zIndex = elementZIndex + 1;\n      }\n    }\n\n    return zIndex;\n  }\n\n  // Very simple mobile detection, not 100% reliable\n  static isMobileDevice() {\n    // return (\n    //   typeof window.screen.orientation !== 'undefined' ||\n    //   navigator.userAgent.indexOf('IEMobile') !== -1\n    // );\n\n    // window.orientation is deprecated and we should use window.screen.orientation\n    return (\n      typeof window.orientation !== 'undefined' ||\n      navigator.userAgent.indexOf('IEMobile') !== -1\n    );\n  }\n\n  static isiOSDevice() {\n    return (\n      (navigator.userAgent.match(/ip(hone|ad|od)/i) || \n      VgUtilsService.isIpadOS()) &&\n      !navigator.userAgent.match(/(iemobile)[\\/\\s]?([\\w\\.]*)/i)\n    );\n  }\n\n  static isIpadOS() {\n    return (\n      navigator.maxTouchPoints && \n      navigator.maxTouchPoints > 2 &&\n      /MacIntel/.test(navigator.platform)\n    );\n  }\n\n  static isCordova() {\n    return (\n      document.URL.indexOf('http://') === -1 &&\n      document.URL.indexOf('https://') === -1\n    );\n  }\n}\n","import { Injectable, EventEmitter, QueryList, HostListener } from '@angular/core';\nimport { VgUtilsService } from '../vg-utils/vg-utils.service';\nimport { fromEvent, Subscription } from 'rxjs';\nimport { VgMediaDirective } from '../../directives/vg-media/vg-media.directive';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class VgFullscreenApiService {\n  polyfill: any;\n  onchange: string;\n  onerror: string;\n  nativeFullscreen = true;\n  isFullscreen = false;\n  isAvailable: boolean;\n  videogularElement: HTMLElement;\n  medias: QueryList<VgMediaDirective>;\n\n  fsChangeSubscription: Subscription;\n  onChangeFullscreen: EventEmitter<any> = new EventEmitter();\n\n  constructor() {}\n\n  init(elem: HTMLElement, medias: QueryList<VgMediaDirective>) {\n    this.videogularElement = elem;\n    this.medias = medias;\n\n    const APIs = {\n      w3: {\n        enabled: 'fullscreenEnabled',\n        element: 'fullscreenElement',\n        request: 'requestFullscreen',\n        exit: 'exitFullscreen',\n        onchange: 'fullscreenchange',\n        onerror: 'fullscreenerror',\n      },\n      newWebkit: {\n        enabled: 'webkitFullscreenEnabled',\n        element: 'webkitFullscreenElement',\n        request: 'webkitRequestFullscreen',\n        exit: 'webkitExitFullscreen',\n        onchange: 'webkitfullscreenchange',\n        onerror: 'webkitfullscreenerror',\n      },\n      oldWebkit: {\n        enabled: 'webkitIsFullScreen',\n        element: 'webkitCurrentFullScreenElement',\n        request: 'webkitRequestFullScreen',\n        exit: 'webkitCancelFullScreen',\n        onchange: 'webkitfullscreenchange',\n        onerror: 'webkitfullscreenerror',\n      },\n      moz: {\n        enabled: 'mozFullScreen',\n        element: 'mozFullScreenElement',\n        request: 'mozRequestFullScreen',\n        exit: 'mozCancelFullScreen',\n        onchange: 'mozfullscreenchange',\n        onerror: 'mozfullscreenerror',\n      },\n      ios: {\n        enabled: 'webkitFullscreenEnabled',\n        element: 'webkitFullscreenElement',\n        request: 'webkitEnterFullscreen',\n        exit: 'webkitExitFullscreen',\n        onchange: 'webkitendfullscreen', // Hack for iOS: webkitfullscreenchange it's not firing\n        onerror: 'webkitfullscreenerror',\n      },\n      ms: {\n        enabled: 'msFullscreenEnabled',\n        element: 'msFullscreenElement',\n        request: 'msRequestFullscreen',\n        exit: 'msExitFullscreen',\n        onchange: 'MSFullscreenChange',\n        onerror: 'MSFullscreenError',\n      },\n    };\n\n    for (const browser in APIs) {\n      if (APIs[browser].enabled in document) {\n        this.polyfill = APIs[browser];\n        break;\n      }\n    }\n\n    if (VgUtilsService.isiOSDevice() && !VgUtilsService.isIpadOS()) {\n      this.polyfill = APIs.ios;\n    }\n\n    this.isAvailable = this.polyfill != null;\n\n    if (this.polyfill == null) {\n      return;\n    }\n\n    let fsElemDispatcher: HTMLElement | Document;\n\n    switch (this.polyfill.onchange) {\n      // Mozilla dispatches the fullscreen change event from document, not the element\n      // See: https://bugzilla.mozilla.org/show_bug.cgi?id=724816#c3\n      case 'mozfullscreenchange':\n        fsElemDispatcher = document;\n        break;\n\n      // iOS dispatches the fullscreen change event from video element\n      case 'webkitendfullscreen':\n        fsElemDispatcher = this.medias.toArray()[0].elem;\n        break;\n\n      // HTML5 implementation dispatches the fullscreen change event from the element\n      default:\n        fsElemDispatcher = elem;\n    }\n\n    this.fsChangeSubscription = fromEvent(\n      fsElemDispatcher,\n      this.polyfill.onchange\n    ).subscribe(() => {\n      this.onFullscreenChange();\n    });\n  }\n\n  onFullscreenChange() {\n    this.isFullscreen = !!document[this.polyfill.element];\n    this.onChangeFullscreen.emit(this.isFullscreen);\n  }\n\n  changeFullscreen(isFullscreen: boolean) {\n    this.isFullscreen = isFullscreen;\n    this.onChangeFullscreen.emit(isFullscreen);\n  }\n\n  async toggleFullscreen(element: any = null) {\n    if (this.isFullscreen) {\n      await this.exit();\n    } else {\n      await this.request(element);\n    }\n  }\n\n  async request(elem: any) {\n    if (!elem) {\n      elem = this.videogularElement;\n    }\n\n    // Perform native full screen support\n    if (this.isAvailable && this.nativeFullscreen) {\n      // Fullscreen for mobile devices\n      if (VgUtilsService.isMobileDevice() && !VgUtilsService.isIpadOS()) {\n        // We should make fullscreen the video object if it doesn't have native fullscreen support\n        // Fallback! We can't set vg-player on fullscreen, only video/audio objects\n        if (\n          (!this.polyfill.enabled && elem === this.videogularElement) ||\n          VgUtilsService.isiOSDevice()\n        ) {\n          elem = this.medias.toArray()[0].elem;\n        }\n\n        await this.enterElementInFullScreen(elem);\n      } else {\n        await this.enterElementInFullScreen(this.videogularElement);\n      }\n    }\n\n    this.isFullscreen = true;\n    this.onChangeFullscreen.emit(true);\n  }\n\n  async enterElementInFullScreen(elem: any) {\n    // Check if the element exists and is not null\n    if (!elem) {\n      console.error(\"Element is not defined or null.\");\n      return;\n    }\n\n    // Ensure `this.polyfill.request` is correctly defined and a string\n    if (typeof this.polyfill.request !== 'string' || typeof elem[this.polyfill.request] !== 'function') {\n      console.error(\"Fullscreen request method is not correctly defined or not supported.\");\n      console.log(\"Current value of this.polyfill.request:\", this.polyfill.request);\n      console.log(\"Available properties on elem:\", Object.keys(elem));\n      return;\n    }\n\n    try {\n      // Await the fullscreen request\n      await elem[this.polyfill.request]();\n    } catch (error) {\n      console.error(\"Error entering fullscreen:\", error);\n      // Do not rethrow the error\n    }\n  }\n\n  async exit() {\n    this.isFullscreen = false;\n    this.onChangeFullscreen.emit(false);\n\n    // Check if the document is currently in fullscreen mode\n    if (this.isAvailable && this.nativeFullscreen && document[this.polyfill.element]) {\n      try {\n        // Ensure `this.polyfill.exit` is correctly defined and a string\n        if (typeof this.polyfill.exit !== 'string' || typeof document[this.polyfill.exit] !== 'function') {\n          console.error(\"Fullscreen exit method is not correctly defined or not supported.\");\n          console.log(\"Current value of this.polyfill.exit:\", this.polyfill.exit);\n          console.log(\"Available properties on document:\", Object.keys(document));\n          return;\n        }\n        // Exit from native fullscreen\n        await document[this.polyfill.exit]();\n      } catch (error) {\n        console.error(\"Error exiting fullscreen:\", error);\n      }\n    }\n  }\n\n  @HostListener('document:fullscreenerror', ['$event'])\n  onFullscreenerror(event: Event) {\n    this.isFullscreen = false;\n    this.onChangeFullscreen.emit(false);\n  }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class VgEvents {\n  static VG_ABORT = 'abort';\n  static VG_CAN_PLAY = 'canplay';\n  static VG_CAN_PLAY_THROUGH = 'canplaythrough';\n  static VG_DURATION_CHANGE = 'durationchange';\n  static VG_EMPTIED = 'emptied';\n  static VG_ENCRYPTED = 'encrypted';\n  static VG_ENDED = 'ended';\n  static VG_ERROR = 'error';\n  static VG_LOADED_DATA = 'loadeddata';\n  static VG_LOADED_METADATA = 'loadedmetadata';\n  static VG_LOAD_START = 'loadstart';\n  static VG_PAUSE = 'pause';\n  static VG_PLAY = 'play';\n  static VG_PLAYING = 'playing';\n  static VG_PROGRESS = 'progress';\n  static VG_RATE_CHANGE = 'ratechange';\n  static VG_SEEK = 'seek';\n  static VG_SEEKED = 'seeked';\n  static VG_SEEKING = 'seeking';\n  static VG_STALLED = 'stalled';\n  static VG_SUSPEND = 'suspend';\n  static VG_TIME_UPDATE = 'timeupdate';\n  static VG_VOLUME_CHANGE = 'volumechange';\n  static VG_WAITING = 'waiting';\n\n  static VG_LOAD = 'load';\n  static VG_ENTER = 'enter';\n  static VG_EXIT = 'exit';\n\n  static VG_START_ADS = 'startads';\n  static VG_END_ADS = 'endads';\n}\n","import {\n  Directive,\n  OnInit,\n  OnDestroy,\n  DoCheck,\n  Output,\n  EventEmitter,\n  ElementRef,\n} from '@angular/core';\nimport { Subscription, Observable, fromEvent } from 'rxjs';\nimport { VgEvents } from '../../services/events/vg-events.service';\n\n@Directive({\n  selector: '[vgCuePoints]',\n})\nexport class VgCuePointsDirective implements OnInit, OnDestroy, DoCheck {\n  @Output() onEnterCuePoint: EventEmitter<any> = new EventEmitter();\n  @Output() onUpdateCuePoint: EventEmitter<any> = new EventEmitter();\n  @Output() onExitCuePoint: EventEmitter<any> = new EventEmitter();\n  @Output() onCompleteCuePoint: EventEmitter<any> = new EventEmitter();\n\n  subscriptions: Subscription[] = [];\n  cuesSubscriptions: Subscription[] = [];\n\n  onLoad$: Observable<any>;\n  onEnter$: Observable<any>;\n  onExit$: Observable<any>;\n\n  totalCues = 0;\n\n  constructor(public ref: ElementRef) {}\n\n  ngOnInit() {\n    this.onLoad$ = fromEvent(this.ref.nativeElement, VgEvents.VG_LOAD);\n    this.subscriptions.push(this.onLoad$.subscribe(this.onLoad.bind(this)));\n  }\n\n  onLoad(event: any) {\n    const cues: TextTrackCue[] = event.target.track.cues;\n\n    this.ref.nativeElement.cues = cues;\n\n    this.updateCuePoints(cues);\n  }\n\n  updateCuePoints(cues: TextTrackCue[]) {\n    this.cuesSubscriptions.forEach((s) => s.unsubscribe());\n\n    for (let i = 0, l = cues.length; i < l; i++) {\n      this.onEnter$ = fromEvent(cues[i], VgEvents.VG_ENTER);\n      this.cuesSubscriptions.push(\n        this.onEnter$.subscribe(this.onEnter.bind(this))\n      );\n\n      this.onExit$ = fromEvent(cues[i], VgEvents.VG_EXIT);\n      this.cuesSubscriptions.push(\n        this.onExit$.subscribe(this.onExit.bind(this))\n      );\n    }\n  }\n\n  onEnter(event: any) {\n    this.onEnterCuePoint.emit(event.target);\n  }\n\n  onExit(event: any) {\n    this.onExitCuePoint.emit(event.target);\n  }\n\n  ngDoCheck() {\n    if (this.ref.nativeElement.track && this.ref.nativeElement.track.cues) {\n      const changes =\n        this.totalCues !== this.ref.nativeElement.track.cues.length;\n\n      if (changes) {\n        this.totalCues = this.ref.nativeElement.track.cues.length;\n        this.ref.nativeElement.cues = this.ref.nativeElement.track.cues;\n        this.updateCuePoints(this.ref.nativeElement.track.cues);\n      }\n    }\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach((s) => s.unsubscribe());\n  }\n}\n","import {\n  Directive,\n  OnInit,\n  OnDestroy,\n  Input,\n  ChangeDetectorRef,\n} from '@angular/core';\nimport {\n  Observable,\n  Subscription,\n  Subject,\n  fromEvent,\n  timer,\n  combineLatest,\n} from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport {\n  IPlayable,\n  IMediaSubscriptions,\n} from '../../interfaces/vg-media-api.interface';\nimport { IMediaElement } from '../../interfaces/i-media-element.interface';\nimport { VgApiService } from '../../services/vg-api/vg-api.service';\nimport { VgStates } from '../../services/states/vg-states.service';\nimport { VgEvents } from '../../services/events/vg-events.service';\n\n@Directive({\n  selector: '[vgMedia]',\n})\nexport class VgMediaDirective implements OnInit, OnDestroy, IPlayable {\n  elem: any;\n\n  @Input() vgMedia: IMediaElement;\n  @Input() vgMaster: boolean;\n\n  state: string = VgStates.VG_PAUSED;\n\n  time: any = { current: 0, total: 0, left: 0 };\n  buffer: any = { end: 0 };\n  track: any;\n  subscriptions: IMediaSubscriptions | any;\n\n  canPlay = false;\n  canPlayThrough = false;\n  isMetadataLoaded = false;\n  isWaiting = false;\n  isCompleted = false;\n  isLive = false;\n\n  isBufferDetected = false;\n\n  checkInterval = 200;\n  currentPlayPos = 0;\n  lastPlayPos = 0;\n  specifiedDuration: number;\n\n  checkBufferSubscription: any;\n  syncSubscription: Subscription;\n  canPlayAllSubscription: any;\n  playAtferSync = false;\n\n  mutationObs: Subscription;\n  canPlayObs: Subscription;\n  canPlayThroughObs: Subscription;\n  loadedMetadataObs: Subscription;\n  waitingObs: Subscription;\n  progressObs: Subscription;\n  endedObs: Subscription;\n  playingObs: Subscription;\n  playObs: Subscription;\n  pauseObs: Subscription;\n  timeUpdateObs: Subscription;\n  volumeChangeObs: Subscription;\n  errorObs: Subscription;\n\n  bufferDetected: Subject<boolean> = new Subject();\n\n  playPromise: Promise<any>;\n\n  constructor(private api: VgApiService, private ref: ChangeDetectorRef) {}\n\n  ngOnInit() {\n    if (this.vgMedia.nodeName) {\n      // It's a native element\n      this.elem = this.vgMedia;\n    } else {\n      // It's an Angular Class\n      this.elem = this.vgMedia.elem;\n    }\n\n    // Just in case we're creating this vgMedia dynamically register again into API\n    this.api.registerMedia(this);\n\n    this.subscriptions = {\n      // Native events\n      abort: fromEvent(this.elem as any, VgEvents.VG_ABORT),\n      canPlay: fromEvent(this.elem as any, VgEvents.VG_CAN_PLAY),\n      canPlayThrough: fromEvent(this.elem as any, VgEvents.VG_CAN_PLAY_THROUGH),\n      durationChange: fromEvent(this.elem as any, VgEvents.VG_DURATION_CHANGE),\n      emptied: fromEvent(this.elem as any, VgEvents.VG_EMPTIED),\n      encrypted: fromEvent(this.elem as any, VgEvents.VG_ENCRYPTED),\n      ended: fromEvent(this.elem as any, VgEvents.VG_ENDED),\n      error: fromEvent(this.elem as any, VgEvents.VG_ERROR),\n      loadedData: fromEvent(this.elem as any, VgEvents.VG_LOADED_DATA),\n      loadedMetadata: fromEvent(this.elem as any, VgEvents.VG_LOADED_METADATA),\n      loadStart: fromEvent(this.elem as any, VgEvents.VG_LOAD_START),\n      pause: fromEvent(this.elem as any, VgEvents.VG_PAUSE),\n      play: fromEvent(this.elem as any, VgEvents.VG_PLAY),\n      playing: fromEvent(this.elem as any, VgEvents.VG_PLAYING),\n      progress: fromEvent(this.elem as any, VgEvents.VG_PROGRESS),\n      rateChange: fromEvent(this.elem as any, VgEvents.VG_RATE_CHANGE),\n      seeked: fromEvent(this.elem as any, VgEvents.VG_SEEKED),\n      seeking: fromEvent(this.elem as any, VgEvents.VG_SEEKING),\n      stalled: fromEvent(this.elem as any, VgEvents.VG_STALLED),\n      suspend: fromEvent(this.elem as any, VgEvents.VG_SUSPEND),\n      timeUpdate: fromEvent(this.elem as any, VgEvents.VG_TIME_UPDATE),\n      volumeChange: fromEvent(this.elem as any, VgEvents.VG_VOLUME_CHANGE),\n      waiting: fromEvent(this.elem as any, VgEvents.VG_WAITING),\n\n      // Advertisement only events\n      startAds: fromEvent(window as any, VgEvents.VG_START_ADS),\n      endAds: fromEvent(window as any, VgEvents.VG_END_ADS),\n\n      // See changes on <source> child elements to reload the video file\n      mutation: new Observable((observer: any) => {\n        const domObs = new MutationObserver((mutations) => {\n          observer.next(mutations);\n        });\n\n        domObs.observe(this.elem as any, { childList: true, attributes: true });\n\n        return () => {\n          domObs.disconnect();\n        };\n      }),\n\n      // Custom buffering detection\n      bufferDetected: this.bufferDetected,\n    };\n\n    this.mutationObs = this.subscriptions.mutation.subscribe(\n      this.onMutation.bind(this)\n    );\n    this.canPlayObs = this.subscriptions.canPlay.subscribe(\n      this.onCanPlay.bind(this)\n    );\n    this.canPlayThroughObs = this.subscriptions.canPlayThrough.subscribe(\n      this.onCanPlayThrough.bind(this)\n    );\n    this.loadedMetadataObs = this.subscriptions.loadedMetadata.subscribe(\n      this.onLoadMetadata.bind(this)\n    );\n    this.waitingObs = this.subscriptions.waiting.subscribe(\n      this.onWait.bind(this)\n    );\n    this.progressObs = this.subscriptions.progress.subscribe(\n      this.onProgress.bind(this)\n    );\n    this.endedObs = this.subscriptions.ended.subscribe(\n      this.onComplete.bind(this)\n    );\n    this.playingObs = this.subscriptions.playing.subscribe(\n      this.onStartPlaying.bind(this)\n    );\n    this.playObs = this.subscriptions.play.subscribe(this.onPlay.bind(this));\n    this.pauseObs = this.subscriptions.pause.subscribe(this.onPause.bind(this));\n    this.timeUpdateObs = this.subscriptions.timeUpdate.subscribe(\n      this.onTimeUpdate.bind(this)\n    );\n    this.volumeChangeObs = this.subscriptions.volumeChange.subscribe(\n      this.onVolumeChange.bind(this)\n    );\n    this.errorObs = this.subscriptions.error.subscribe(this.onError.bind(this));\n\n    if (this.vgMaster) {\n      this.api.playerReadyEvent.subscribe(() => {\n        this.prepareSync();\n      });\n    }\n  }\n\n  prepareSync() {\n    const canPlayAll: Observable<any>[] = [];\n\n    for (const media in this.api.medias) {\n      if (this.api.medias[media]) {\n        canPlayAll.push(this.api.medias[media].subscriptions.canPlay);\n      }\n    }\n\n    this.canPlayAllSubscription = combineLatest(canPlayAll)\n      .pipe(map((...params) => {\n        const checkReadyState = (event) => {\n          if (!event?.target) {\n            return false;\n          }\n\n          return event.target.readyState === 4;\n        };\n\n        const allReady: boolean = params.some(checkReadyState);\n\n        if (allReady && !this.syncSubscription) {\n          this.startSync();\n          this.syncSubscription.unsubscribe();\n        }\n      }))\n      .subscribe();\n  }\n\n  startSync() {\n    this.syncSubscription = timer(0, 1000).subscribe(() => {\n      for (const media in this.api.medias) {\n        if (this.api.medias[media] !== this) {\n          const diff: number =\n            this.api.medias[media].currentTime - this.currentTime;\n\n          if (diff < -0.3 || diff > 0.3) {\n            this.playAtferSync = this.state === VgStates.VG_PLAYING;\n\n            this.pause();\n            this.api.medias[media].pause();\n            this.api.medias[media].currentTime = this.currentTime;\n          } else {\n            if (this.playAtferSync) {\n              this.play();\n              this.api.medias[media].play();\n              this.playAtferSync = false;\n            }\n          }\n        }\n      }\n    });\n  }\n\n  onMutation(mutations: Array<MutationRecord>) {\n    // Detect changes only for source elements or src attribute\n    for (let i = 0, l = mutations.length; i < l; i++) {\n      const mut: MutationRecord = mutations[i];\n\n      if (mut.type === 'attributes' && mut.attributeName === 'src') {\n        // Only load src file if it's not a blob (for DASH / HLS sources)\n        if (\n          (mut.target as any).src &&\n          (mut.target as any).src.length > 0 &&\n          (mut.target as any).src.indexOf('blob:') < 0\n        ) {\n          this.loadMedia();\n          break;\n        }\n      } else if (\n        mut.type === 'childList' &&\n        mut.removedNodes.length &&\n        mut.removedNodes[0].nodeName.toLowerCase() === 'source'\n      ) {\n        this.loadMedia();\n        break;\n      }\n    }\n  }\n\n  loadMedia() {\n    this.vgMedia.pause();\n    this.vgMedia.currentTime = 0;\n\n    // Start buffering until we can play the media file\n    this.stopBufferCheck();\n    this.isBufferDetected = true;\n    this.bufferDetected.next(this.isBufferDetected);\n\n    // TODO: This is ugly, we should find something cleaner. For some reason a TimerObservable doesn't works.\n    setTimeout(() => this.vgMedia.load(), 10);\n  }\n\n  play() {\n    // short-circuit if already playing\n    if (\n      this.playPromise ||\n      (this.state !== VgStates.VG_PAUSED && this.state !== VgStates.VG_ENDED)\n    ) {\n      return;\n    }\n\n    this.playPromise = this.vgMedia.play();\n\n    // browser has async play promise\n    if (this.playPromise && this.playPromise.then && this.playPromise.catch) {\n      this.playPromise\n        .then(() => {\n          this.playPromise = null;\n        })\n        .catch(() => {\n          this.playPromise = null;\n          // deliberately empty for the sake of eating console noise\n        });\n    }\n\n    return this.playPromise;\n  }\n\n  pause() {\n    // browser has async play promise\n    if (this.playPromise) {\n      this.playPromise.then(() => {\n        this.vgMedia.pause();\n      }).catch(() => {\n        // deliberately empty for the sake of eating console noise\n        this.playPromise = null;\n      });\n    } else {\n      this.vgMedia.pause();\n    }\n  }\n\n  get id() {\n    // We should return undefined if vgMedia still doesn't exist\n    let result: any;\n\n    if (this.vgMedia) {\n      result = this.vgMedia.id;\n    }\n\n    return result;\n  }\n\n  get duration() {\n    return this.vgMedia.duration === Infinity\n      ? this.specifiedDuration\n      : this.vgMedia.duration;\n  }\n\n  set currentTime(seconds) {\n    this.vgMedia.currentTime = seconds;\n    // this.elem.dispatchEvent(new CustomEvent(VgEvents.VG_SEEK));\n  }\n\n  get currentTime() {\n    return this.vgMedia.currentTime;\n  }\n\n  set volume(volume) {\n    this.vgMedia.volume = volume;\n  }\n\n  get volume() {\n    return this.vgMedia.volume;\n  }\n\n  set playbackRate(rate) {\n    this.vgMedia.playbackRate = rate;\n  }\n\n  get playbackRate() {\n    return this.vgMedia.playbackRate;\n  }\n\n  get buffered() {\n    return this.vgMedia.buffered;\n  }\n\n  get textTracks() {\n    return this.vgMedia.textTracks;\n  }\n  // @ts-ignore\n  onCanPlay(event: any) {\n    this.isBufferDetected = false;\n    this.bufferDetected.next(this.isBufferDetected);\n    this.canPlay = true;\n    this.ref.detectChanges();\n  }\n  // @ts-ignore\n  onCanPlayThrough(event: any) {\n    this.isBufferDetected = false;\n    this.bufferDetected.next(this.isBufferDetected);\n    this.canPlayThrough = true;\n    this.ref.detectChanges();\n  }\n  // @ts-ignore\n  onLoadMetadata(event: any) {\n    this.isMetadataLoaded = true;\n\n    this.time = {\n      current: 0,\n      left: 0,\n      total: this.duration * 1000,\n    };\n\n    this.state = VgStates.VG_PAUSED;\n\n    // Live streaming check\n    const t: number = Math.round(this.time.total);\n    this.isLive = t === Infinity;\n    this.ref.detectChanges();\n  }\n  // @ts-ignore\n  onWait(event: any) {\n    this.isWaiting = true;\n    this.ref.detectChanges();\n  }\n  // @ts-ignore\n  onComplete(event: any) {\n    this.isCompleted = true;\n    this.state = VgStates.VG_ENDED;\n    this.ref.detectChanges();\n  }\n  // @ts-ignore\n  onStartPlaying(event: any) {\n    this.state = VgStates.VG_PLAYING;\n    this.ref.detectChanges();\n  }\n  // @ts-ignore\n  onPlay(event: any) {\n    this.state = VgStates.VG_PLAYING;\n\n    if (this.vgMaster) {\n      if (!this.syncSubscription || this.syncSubscription.closed) {\n        this.startSync();\n      }\n    }\n\n    this.startBufferCheck();\n    this.ref.detectChanges();\n  }\n  // @ts-ignore\n  onPause(event: any) {\n    this.state = VgStates.VG_PAUSED;\n\n    if (this.vgMaster) {\n      if (!this.playAtferSync) {\n        this.syncSubscription.unsubscribe();\n      }\n    }\n\n    this.stopBufferCheck();\n    this.ref.detectChanges();\n  }\n  // @ts-ignore\n  onTimeUpdate(event: any) {\n    try {\n      const end = this.buffered.length - 1;\n\n      this.time = {\n        current: this.currentTime * 1000,\n        total: this.time.total,\n        left: (this.duration - this.currentTime) * 1000,\n      };\n\n      if (end >= 0) {\n        this.buffer = { end: this.buffered.end(end) * 1000 };\n      }\n      this.ref.detectChanges();\n    } catch (e) {\n      // swallow TimeRanges end errors for the sake of eating console noise\n    }\n  }\n  // @ts-ignore\n  onProgress(event: any) {\n    try {\n      const end = this.buffered.length - 1;\n\n      if (end >= 0) {\n        this.buffer = { end: this.buffered.end(end) * 1000 };\n      }\n      this.ref.detectChanges();\n    } catch (e) {\n      // swallow TimeRanges end errors for the sake of eating console noise\n    }\n  }\n  // @ts-ignore\n  onVolumeChange(event: any) {\n    // TODO: Save to localstorage the current volume\n    this.ref.detectChanges();\n  }\n  // @ts-ignore\n  onError(event: any) {\n    // TODO: Handle error messages\n    this.ref.detectChanges();\n  }\n\n  // http://stackoverflow.com/a/23828241/779529\n  bufferCheck() {\n    const offset = 1 / this.checkInterval;\n    this.currentPlayPos = this.currentTime;\n\n    if (\n      !this.isBufferDetected &&\n      this.currentPlayPos < this.lastPlayPos + offset\n    ) {\n      this.isBufferDetected = true;\n    }\n\n    if (\n      this.isBufferDetected &&\n      this.currentPlayPos > this.lastPlayPos + offset\n    ) {\n      this.isBufferDetected = false;\n    }\n\n    // Prevent calls to bufferCheck after ngOnDestroy have been called\n    if (!this.bufferDetected.closed) {\n      this.bufferDetected.next(this.isBufferDetected);\n    }\n\n    this.lastPlayPos = this.currentPlayPos;\n  }\n\n  startBufferCheck() {\n    this.checkBufferSubscription = timer(0, this.checkInterval).subscribe(\n      () => {\n        this.bufferCheck();\n      }\n    );\n  }\n\n  stopBufferCheck() {\n    if (this.checkBufferSubscription) {\n      this.checkBufferSubscription.unsubscribe();\n    }\n\n    this.isBufferDetected = false;\n\n    this.bufferDetected.next(this.isBufferDetected);\n  }\n\n  seekTime(value: number, byPercent: boolean = false) {\n    let second: number;\n    const duration: number = this.duration;\n\n    if (byPercent) {\n      second = (value * duration) / 100;\n    } else {\n      second = value;\n    }\n\n    this.currentTime = second;\n  }\n\n  addTextTrack(\n    type: string,\n    label?: string,\n    language?: string,\n    mode?: 'disabled' | 'hidden' | 'showing'\n  ): TextTrack {\n    const newTrack: TextTrack = this.vgMedia.addTextTrack(\n      type,\n      label,\n      language\n    );\n\n    if (mode) {\n      newTrack.mode = mode;\n    }\n    return newTrack;\n  }\n\n  ngOnDestroy() {\n    this.vgMedia.src = '';\n    this.mutationObs?.unsubscribe();\n    this.canPlayObs?.unsubscribe();\n    this.canPlayThroughObs?.unsubscribe();\n    this.loadedMetadataObs?.unsubscribe();\n    this.waitingObs?.unsubscribe();\n    this.progressObs?.unsubscribe();\n    this.endedObs?.unsubscribe();\n    this.playingObs?.unsubscribe();\n    this.playObs?.unsubscribe();\n    this.pauseObs?.unsubscribe();\n    this.timeUpdateObs?.unsubscribe();\n    this.volumeChangeObs?.unsubscribe();\n    this.errorObs?.unsubscribe();\n    this.checkBufferSubscription?.unsubscribe();\n    this.syncSubscription?.unsubscribe();\n\n    this.bufferDetected?.complete();\n    this.bufferDetected?.unsubscribe();\n\n    this.api.unregisterMedia(this);\n  }\n}\n","import {\n  Output,\n  Component,\n  EventEmitter,\n  ElementRef,\n  HostBinding,\n  QueryList,\n  AfterContentInit,\n  ContentChildren,\n  ViewEncapsulation,\n  OnDestroy,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { VgApiService } from '../../services/vg-api/vg-api.service';\nimport { VgFullscreenApiService } from '../../services/vg-fullscreen-api/vg-fullscreen-api.service';\nimport { VgControlsHiddenService } from '../../services/vg-controls-hidden/vg-controls-hidden.service';\nimport { VgMediaDirective } from '../../directives/vg-media/vg-media.directive';\nimport { VgUtilsService } from '../../services/vg-utils/vg-utils.service';\n\n@Component({\n  selector: 'vg-player',\n  encapsulation: ViewEncapsulation.None,\n  template: `<ng-content></ng-content>`,\n  styles: [\n    `\n      vg-player {\n        font-family: 'videogular';\n        position: relative;\n        display: flex;\n        width: 100%;\n        height: 100%;\n        overflow: hidden;\n        background-color: black;\n      }\n      vg-player.fullscreen {\n        position: fixed;\n        left: 0;\n        top: 0;\n      }\n      vg-player.native-fullscreen.controls-hidden {\n        cursor: none;\n      }\n    `,\n  ],\n  providers: [VgApiService, VgFullscreenApiService, VgControlsHiddenService],\n})\nexport class VgPlayerComponent implements AfterContentInit, OnDestroy {\n  elem: HTMLElement;\n\n  @HostBinding('class.fullscreen') isFullscreen = false;\n  @HostBinding('class.native-fullscreen') isNativeFullscreen = false;\n  @HostBinding('class.controls-hidden') areControlsHidden = false;\n  @HostBinding('style.z-index') zIndex: string;\n\n  @Output() onPlayerReady: EventEmitter<VgApiService> = new EventEmitter<VgApiService>();\n  @Output() onMediaReady: EventEmitter<any> = new EventEmitter();\n\n  @ContentChildren(VgMediaDirective) medias: QueryList<VgMediaDirective>;\n\n  subscriptions: Subscription[] = [];\n\n  constructor(\n    ref: ElementRef,\n    public api: VgApiService,\n    public fsAPI: VgFullscreenApiService,\n    private controlsHidden: VgControlsHiddenService\n  ) {\n    this.elem = ref.nativeElement;\n\n    this.api.registerElement(this.elem);\n  }\n\n  ngAfterContentInit() {\n    this.medias.toArray().forEach((media) => {\n      this.api.registerMedia(media);\n    });\n\n    this.fsAPI.init(this.elem, this.medias);\n\n    this.subscriptions.push(\n      this.fsAPI.onChangeFullscreen.subscribe(\n        this.onChangeFullscreen.bind(this)\n      )\n    );\n    this.subscriptions.push(\n      this.controlsHidden.isHidden.subscribe(this.onHideControls.bind(this))\n    );\n\n    this.api.onPlayerReady(this.fsAPI);\n    this.onPlayerReady.emit(this.api);\n  }\n\n  onChangeFullscreen(fsState: boolean) {\n    if (!this.fsAPI.nativeFullscreen) {\n      this.isFullscreen = fsState;\n      this.zIndex = fsState ? VgUtilsService.getZIndex().toString() : 'auto';\n    } else {\n      this.isNativeFullscreen = fsState;\n    }\n  }\n\n  onHideControls(hidden: boolean) {\n    this.areControlsHidden = hidden;\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach((s) => s.unsubscribe());\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { VgApiService } from './services/vg-api/vg-api.service';\nimport { VgControlsHiddenService } from './services/vg-controls-hidden/vg-controls-hidden.service';\nimport { VgFullscreenApiService } from './services/vg-fullscreen-api/vg-fullscreen-api.service';\nimport { VgUtilsService } from './services/vg-utils/vg-utils.service';\nimport { VgEvents } from './services/events/vg-events.service';\nimport { VgStates } from './services/states/vg-states.service';\nimport { VgCuePointsDirective } from './directives/vg-cue-points/vg-cue-points.directive';\nimport { VgMediaDirective } from './directives/vg-media/vg-media.directive';\nimport { VgPlayerComponent } from './components/vg-player/vg-player.component';\n\nconst services = [\n  VgApiService,\n  VgControlsHiddenService,\n  VgFullscreenApiService,\n  VgUtilsService,\n  VgEvents,\n  VgStates\n];\n\nconst directives = [\n  VgCuePointsDirective,\n  VgMediaDirective\n]\n\n@NgModule({\n  imports: [CommonModule],\n  providers: [...services],\n  declarations: [...directives, VgPlayerComponent],\n  exports: [...directives, VgPlayerComponent]\n})\nexport class VgCoreModule {}\n","import { IMediaElement } from '../../interfaces/i-media-element.interface';\nimport { AudioTrackList, VideoTrackList } from '../../interfaces/deprecated-tracks-types.interface';\nimport { MSMediaKeyNeededEvent } from '../../interfaces/deprecated-event-types.interface';\n\nexport class VgMediaElement implements IMediaElement {\n  id: string;\n  elem: any;\n  get audioTracks(): AudioTrackList {\n    return null;\n  }\n  autoplay: boolean;\n  buffered: TimeRanges;\n  controls: boolean;\n  crossOrigin: string | any;\n  currentSrc: string;\n  currentTime: number;\n  defaultMuted: boolean;\n  defaultPlaybackRate: number;\n  duration: number;\n  ended: boolean;\n  error: MediaError;\n  loop: boolean;\n  mediaKeys: MediaKeys | any;\n  msAudioCategory: string;\n  msAudioDeviceType: string;\n  msPlayToDisabled: boolean;\n  msPlayToPreferredSourceUri: string;\n  msPlayToPrimary: boolean;\n  msPlayToSource: any;\n  msRealTime: boolean;\n  muted: boolean;\n  networkState: number;\n  onencrypted: (ev: MediaEncryptedEvent) => any;\n  onmsneedkey: (ev: MSMediaKeyNeededEvent) => any;\n  paused: boolean;\n  playbackRate: number;\n  played: TimeRanges;\n  preload: string;\n  readyState: number;\n  seekable: TimeRanges;\n  seeking: boolean;\n  src: string;\n  srcObject: MediaStream | any;\n  textTracks: TextTrackList;\n  videoTracks: VideoTrackList;\n  volume: number;\n  HAVE_CURRENT_DATA: number;\n  HAVE_ENOUGH_DATA: number;\n  HAVE_FUTURE_DATA: number;\n  HAVE_METADATA: number;\n  HAVE_NOTHING: number;\n  NETWORK_EMPTY: number;\n  NETWORK_IDLE: number;\n  NETWORK_LOADING: number;\n  NETWORK_NO_SOURCE: number;\n  // @ts-ignore\n  addTextTrack(kind: string, label?: string, language?: string): TextTrack {\n    return null;\n  }\n  // @ts-ignore\n  canPlayType(type: string): string {\n    return null;\n  }\n\n  load(): void {}\n\n  msClearEffects(): void {}\n\n  msGetAsCastingSource(): any {\n    return null;\n  }\n  // @ts-ignore\n  msInsertAudioEffect(\n    _activatableClassId: string,\n    _effectRequired: boolean,\n    _config?: any\n  ): void {}\n  // @ts-ignore\n  msSetMediaProtectionManager(mediaProtectionManager?: any): void {}\n\n  pause(): void {}\n\n  play(): Promise<any> {\n    return null;\n  }\n  // @ts-ignore\n  setMediaKeys(mediaKeys: MediaKeys | any): Promise<void> {\n    return null;\n  }\n  // @ts-ignore\n  addEventListener(\n    _type: string,\n    _listener: EventListenerOrEventListenerObject,\n    _useCapture?: boolean\n  ): void {}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.VgApiService","i2.VgFullscreenApiService","i3.VgControlsHiddenService"],"mappings":"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"}