{"version":3,"file":"ngx-videogular.mjs","sources":["../../../projects/ngx-videogular/src/lib/core/states/vg-states.ts","../../../projects/ngx-videogular/src/lib/core/services/vg-api.ts","../../../projects/ngx-videogular/src/lib/buffering/vg-buffering.ts","../../../projects/ngx-videogular/src/lib/buffering/vg-buffering.module.ts","../../../projects/ngx-videogular/src/lib/core/services/vg-controls-hidden.ts","../../../projects/ngx-videogular/src/lib/controls/vg-controls.ts","../../../projects/ngx-videogular/src/lib/core/services/vg-utils.ts","../../../projects/ngx-videogular/src/lib/core/services/vg-fullscreen-api.ts","../../../projects/ngx-videogular/src/lib/controls/vg-fullscreen/vg-fullscreen.ts","../../../projects/ngx-videogular/src/lib/controls/vg-mute/vg-mute.ts","../../../projects/ngx-videogular/src/lib/controls/vg-volume/vg-volume.ts","../../../projects/ngx-videogular/src/lib/controls/vg-play-pause/vg-play-pause.ts","../../../projects/ngx-videogular/src/lib/controls/vg-playback-button/vg-playback-button.ts","../../../projects/ngx-videogular/src/lib/controls/vg-scrub-bar/vg-scrub-bar.ts","../../../projects/ngx-videogular/src/lib/controls/vg-scrub-bar/vg-scrub-bar-buffering-time/vg-scrub-bar-buffering-time.ts","../../../projects/ngx-videogular/src/lib/controls/vg-scrub-bar/vg-scrub-bar-cue-points/vg-scrub-bar-cue-points.ts","../../../projects/ngx-videogular/src/lib/controls/vg-scrub-bar/vg-scrub-bar-current-time/vg-scrub-bar-current-time.ts","../../../projects/ngx-videogular/src/lib/controls/vg-time-display/vg-time-display.ts","../../../projects/ngx-videogular/src/lib/controls/vg-track-selector/vg-track-selector.ts","../../../projects/ngx-videogular/src/lib/controls/vg-quality-selector/vg-quality-selector.ts","../../../projects/ngx-videogular/src/lib/controls/vg-controls.module.ts","../../../projects/ngx-videogular/src/lib/core/events/vg-events.ts","../../../projects/ngx-videogular/src/lib/core/vg-media/vg-media.ts","../../../projects/ngx-videogular/src/lib/core/vg-cue-points/vg-cue-points.ts","../../../projects/ngx-videogular/src/lib/core/vg-player/vg-player.ts","../../../projects/ngx-videogular/src/lib/core/vg-media/vg-media-element.ts","../../../projects/ngx-videogular/src/lib/ima-ads/vg-ima-ads.ts","../../../projects/ngx-videogular/src/lib/overlay-play/vg-overlay-play.ts","../../../projects/ngx-videogular/src/lib/core/vg-core.module.ts","../../../projects/ngx-videogular/src/lib/ima-ads/ima-ads.module.ts","../../../projects/ngx-videogular/src/lib/overlay-play/vg-overlay-play.module.ts","../../../projects/ngx-videogular/src/lib/streaming/vg-dash/vg-dash.ts","../../../projects/ngx-videogular/src/lib/streaming/vg-hls/vg-hls.ts","../../../projects/ngx-videogular/src/lib/streaming/vg-streaming.module.ts","../../../projects/ngx-videogular/src/public-api.ts","../../../projects/ngx-videogular/src/ngx-videogular.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable()\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 { IPlayable } from '../vg-media/i-playable';\nimport { VgStates } from '../states/vg-states';\nimport { VgFullscreenAPI } from './vg-fullscreen-api';\n\n@Injectable()\nexport class VgAPI {\n  // tslint:disable-next-line:ban-types\n  medias: Object = {}; // TODO: refactor to Set<IPlayable>\n  videogularElement: any;\n  playerReadyEvent: EventEmitter<any> = new EventEmitter(true);\n  isPlayerReady = false;\n  fsAPI: VgFullscreenAPI;\n\n  constructor() {\n\n  }\n\n  onPlayerReady(fsAPI: VgFullscreenAPI) {\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 (this.medias[id].vgMaster === 'true' || this.medias[id].vgMaster === true) {\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 (this.medias[id].vgMaster === 'true' || this.medias[id].vgMaster === true) {\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(media: IPlayable, type: string, label?: string, language?: string) {\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\n}\n","import { Component, ElementRef, HostBinding, Input, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';\nimport { VgAPI } from '../core/services/vg-api';\nimport { IPlayable } from '../core/vg-media/i-playable';\nimport { Subscription } from 'rxjs';\n\n// tslint:disable:component-class-suffix\n@Component({\n  selector: 'vg-buffering',\n  encapsulation: ViewEncapsulation.None,\n  template: `<div class=\"vg-buffering\">\n            <div class=\"bufferingContainer\">\n                <div class=\"loadingSpinner\"></div>\n            </div>\n        </div>`,\n  styles: [`\n        vg-buffering {\n            display: none;\n            z-index: 201;\n        }\n        vg-buffering.is-buffering {\n            display: block;\n        }\n\n        .vg-buffering {\n            position: absolute;\n            display: block;\n            width: 100%;\n            height: 100%;\n        }\n        .vg-buffering .bufferingContainer {\n            width: 100%;\n            position: absolute;\n            cursor: pointer;\n            top: 50%;\n            margin-top: -50px;\n            zoom: 1;\n            filter: alpha(opacity=60);\n            opacity: 0.6;\n        }\n        /* Loading Spinner\n        * http://www.alessioatzeni.com/blog/css3-loading-animation-loop/\n        */\n        .vg-buffering .loadingSpinner {\n            background-color: rgba(0, 0, 0, 0);\n            border: 5px solid rgba(255, 255, 255, 1);\n            opacity: .9;\n            border-top: 5px solid rgba(0, 0, 0, 0);\n            border-left: 5px solid rgba(0, 0, 0, 0);\n            border-radius: 50px;\n            box-shadow: 0 0 35px #FFFFFF;\n            width: 50px;\n            height: 50px;\n            margin: 0 auto;\n            -moz-animation: spin .5s infinite linear;\n            -webkit-animation: spin .5s infinite linear;\n        }\n        .vg-buffering .loadingSpinner .stop {\n            -webkit-animation-play-state: paused;\n            -moz-animation-play-state: paused;\n        }\n        @-moz-keyframes spin {\n            0% {\n                -moz-transform: rotate(0deg);\n            }\n            100% {\n                -moz-transform: rotate(360deg);\n            }\n        }\n        @-moz-keyframes spinoff {\n            0% {\n                -moz-transform: rotate(0deg);\n            }\n            100% {\n                -moz-transform: rotate(-360deg);\n            }\n        }\n        @-webkit-keyframes spin {\n            0% {\n                -webkit-transform: rotate(0deg);\n            }\n            100% {\n                -webkit-transform: rotate(360deg);\n            }\n        }\n        @-webkit-keyframes spinoff {\n            0% {\n                -webkit-transform: rotate(0deg);\n            }\n            100% {\n                -webkit-transform: rotate(-360deg);\n            }\n        }\n    ` ]\n})\nexport class VgBuffering implements OnInit, OnDestroy {\n  @Input() vgFor: string;\n\n  elem: HTMLElement;\n  target: IPlayable;\n  checkInterval = 50;\n  currentPlayPos = 0;\n  lastPlayPos = 0;\n\n  subscriptions: Subscription[] = [];\n\n  @HostBinding('class.is-buffering') isBuffering = false;\n\n  constructor(ref: ElementRef, public API: VgAPI) {\n    this.elem = ref.nativeElement;\n  }\n\n  ngOnInit() {\n    if (this.API.isPlayerReady) {\n      this.onPlayerReady();\n    } else {\n      this.subscriptions.push(\n        this.API.playerReadyEvent.subscribe(() => this.onPlayerReady())\n      );\n    }\n  }\n\n  onPlayerReady() {\n    this.target = this.API.getMediaById(this.vgFor);\n\n    this.subscriptions.push(\n      this.target.subscriptions.bufferDetected.subscribe(\n        isBuffering => this.onUpdateBuffer(isBuffering)\n      )\n    );\n  }\n\n  onUpdateBuffer(isBuffering) {\n    this.isBuffering = isBuffering;\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach(s => s.unsubscribe());\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { VgBuffering } from './vg-buffering';\n\n@NgModule({\n  imports: [CommonModule],\n  declarations: [\n    VgBuffering\n  ],\n  exports: [\n    VgBuffering\n  ]\n})\nexport class VgBufferingModule {\n}\n","import { Injectable } from '@angular/core';\nimport { Subject, Observable } from 'rxjs';\n\n@Injectable()\nexport class VgControlsHidden {\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 {\n  Component, Input, OnInit, ElementRef, HostBinding, AfterViewInit, ViewEncapsulation,\n  EventEmitter, Output, OnDestroy\n} from '@angular/core';\nimport { Observable, Subscription } from 'rxjs';\nimport { VgAPI } from '../core/services/vg-api';\nimport { VgControlsHidden } from '../core/services/vg-controls-hidden';\n\nimport { VgStates } from '../core/states/vg-states';\nimport { fromEvent } from 'rxjs';\n\n// tslint:disable:component-class-suffix\n@Component({\n  selector: 'vg-controls',\n  encapsulation: ViewEncapsulation.None,\n  template: `<ng-content></ng-content>`,\n  styles: [`\n        vg-controls {\n            position: absolute;\n            display: flex;\n            width: 100%;\n            height: 50px;\n            z-index: 300;\n            bottom: 0;\n            background-color: rgba(0, 0, 0, 0.5);\n            -webkit-transition: bottom 1s;\n            -khtml-transition: bottom 1s;\n            -moz-transition: bottom 1s;\n            -ms-transition: bottom 1s;\n            transition: bottom 1s;\n        }\n        vg-controls.hide {\n            bottom: -50px;\n        }\n    `]\n})\nexport class VgControls implements OnInit, AfterViewInit, OnDestroy {\n  elem: HTMLElement;\n  target: any;\n\n  @HostBinding('style.pointer-events') isAdsPlaying = 'initial';\n  @HostBinding('class.hide') hideControls = false;\n\n  @Input() vgFor: string;\n  @Input() vgAutohide = false;\n  @Input() vgAutohideTime = 3;\n\n  private timer: any;\n  private hideTimer: any;\n\n  mouseMove$: Observable<any>;\n  touchStart$: Observable<any>;\n\n  subscriptions: Subscription[] = [];\n\n  constructor(private API: VgAPI, private ref: ElementRef, private hidden: VgControlsHidden) {\n    this.elem = ref.nativeElement;\n  }\n\n  ngOnInit() {\n    this.mouseMove$ = fromEvent(this.API.videogularElement, 'mousemove');\n    this.subscriptions.push(this.mouseMove$.subscribe(this.show.bind(this)));\n\n    this.touchStart$ = fromEvent(this.API.videogularElement, 'touchstart');\n    this.subscriptions.push(this.touchStart$.subscribe(this.show.bind(this)));\n\n    if (this.API.isPlayerReady) {\n      this.onPlayerReady();\n    } else {\n      this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n    }\n  }\n\n  onPlayerReady() {\n    this.target = this.API.getMediaById(this.vgFor);\n\n    this.subscriptions.push(this.target.subscriptions.play.subscribe(this.onPlay.bind(this)));\n    this.subscriptions.push(this.target.subscriptions.pause.subscribe(this.onPause.bind(this)));\n    this.subscriptions.push(this.target.subscriptions.startAds.subscribe(this.onStartAds.bind(this)));\n    this.subscriptions.push(this.target.subscriptions.endAds.subscribe(this.onEndAds.bind(this)));\n  }\n\n  ngAfterViewInit() {\n    if (this.vgAutohide) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  onPlay() {\n    if (this.vgAutohide) {\n      this.hide();\n    }\n  }\n\n  onPause() {\n    clearTimeout(this.timer);\n    this.hideControls = false;\n    this.hidden.state(false);\n  }\n\n  onStartAds() {\n    this.isAdsPlaying = 'none';\n  }\n\n  onEndAds() {\n    this.isAdsPlaying = 'initial';\n  }\n\n  hide() {\n    if (this.vgAutohide) {\n      clearTimeout(this.timer);\n      this.hideAsync();\n    }\n  }\n\n  show() {\n    clearTimeout(this.timer);\n    this.hideControls = false;\n    this.hidden.state(false);\n\n    if (this.vgAutohide) {\n      this.hideAsync();\n    }\n  }\n\n  private hideAsync() {\n    if (this.API.state === VgStates.VG_PLAYING) {\n      this.timer = setTimeout(() => {\n        this.hideControls = true;\n        this.hidden.state(true);\n      }, this.vgAutohideTime * 1000);\n    }\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach(s => s.unsubscribe());\n  }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class VgUtils {\n  /**\n   * Inspired by Paul Irish\n   * https://gist.github.com/paulirish/211209\n   * @returns z-Index\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 (typeof window.orientation !== 'undefined') || (navigator.userAgent.indexOf('IEMobile') !== -1);\n  }\n\n  static isiOSDevice() {\n    return (navigator.userAgent.match(/ip(hone|ad|od)/i) && !navigator.userAgent.match(/(iemobile)[\\/\\s]?([\\w\\.]*)/i));\n  }\n\n  static isCordova() {\n    return document.URL.indexOf('http://') === -1 && document.URL.indexOf('https://') === -1;\n  }\n}\n","import { EventEmitter, Injectable, QueryList } from '@angular/core';\nimport { VgUtils } from './vg-utils';\nimport { VgMedia } from '../vg-media/vg-media';\nimport { Subscription, fromEvent } from 'rxjs';\n\n@Injectable()\nexport class VgFullscreenAPI {\n  polyfill: any;\n  onchange: string;\n  onerror: string;\n  nativeFullscreen = true;\n  isFullscreen = false;\n  isAvailable: boolean;\n  videogularElement: HTMLElement;\n  medias: QueryList<VgMedia>;\n\n  fsChangeSubscription: Subscription;\n  onChangeFullscreen: EventEmitter<any> = new EventEmitter();\n\n  constructor() {\n  }\n\n  init(elem: HTMLElement, medias: QueryList<VgMedia>) {\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 (VgUtils.isiOSDevice()) {\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;\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(fsElemDispatcher, this.polyfill.onchange).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  toggleFullscreen(element: any = null) {\n    if (this.isFullscreen) {\n      this.exit();\n    }  else {\n      this.request(element);\n    }\n  }\n\n  request(elem: any) {\n    if (!elem) {\n      elem = this.videogularElement;\n    }\n\n    this.isFullscreen = true;\n    this.onChangeFullscreen.emit(true);\n\n    // Perform native full screen support\n    if (this.isAvailable && this.nativeFullscreen) {\n      // Fullscreen for mobile devices\n      if (VgUtils.isMobileDevice()) {\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 ((!this.polyfill.enabled && elem === this.videogularElement) || VgUtils.isiOSDevice()) {\n          elem = this.medias.toArray()[0].elem;\n        }\n\n        this.enterElementInFullScreen(elem);\n      }  else {\n        this.enterElementInFullScreen(this.videogularElement);\n      }\n    }\n  }\n\n  enterElementInFullScreen(elem: any) {\n    elem[this.polyfill.request]();\n  }\n\n  exit() {\n    this.isFullscreen = false;\n    this.onChangeFullscreen.emit(false);\n\n    // Exit from native fullscreen\n    if (this.isAvailable && this.nativeFullscreen) {\n      document[this.polyfill.exit]();\n    }\n  }\n}\n","import { Component, ElementRef, HostListener, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';\nimport { VgAPI } from '../../core/services/vg-api';\nimport { VgFullscreenAPI } from '../../core/services/vg-fullscreen-api';\nimport { Subscription } from 'rxjs';\n\n// tslint:disable:component-class-suffix\n// tslint:disable:ban-types\n@Component({\n  selector: 'vg-fullscreen',\n  encapsulation: ViewEncapsulation.None,\n  template: `\n        <div class=\"icon\"\n             [class.vg-icon-fullscreen]=\"!isFullscreen\"\n             [class.vg-icon-fullscreen_exit]=\"isFullscreen\"\n             tabindex=\"0\"\n             role=\"button\"\n             aria-label=\"fullscreen button\"\n             [attr.aria-valuetext]=\"ariaValue\">\n        </div>`,\n  styles: [`\n        vg-fullscreen {\n            -webkit-touch-callout: none;\n            -webkit-user-select: none;\n            -khtml-user-select: none;\n            -moz-user-select: none;\n            -ms-user-select: none;\n            user-select: none;\n            display: flex;\n            justify-content: center;\n            height: 50px;\n            width: 50px;\n            cursor: pointer;\n            color: white;\n            line-height: 50px;\n        }\n\n        vg-fullscreen .icon {\n            pointer-events: none;\n        }\n    ` ]\n})\nexport class VgFullscreen implements OnInit, OnDestroy {\n  elem: HTMLElement;\n  vgFor: string;\n  target: Object;\n  isFullscreen = false;\n\n  subscriptions: Subscription[] = [];\n\n  ariaValue = 'normal mode';\n\n  constructor(ref: ElementRef, public API: VgAPI, public fsAPI: VgFullscreenAPI) {\n    this.elem = ref.nativeElement;\n    this.subscriptions.push(this.fsAPI.onChangeFullscreen.subscribe(this.onChangeFullscreen.bind(this)));\n  }\n\n  ngOnInit() {\n    if (this.API.isPlayerReady) {\n      this.onPlayerReady();\n    } else {\n      this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n    }\n  }\n\n  onPlayerReady() {\n    this.target = this.API.getMediaById(this.vgFor);\n  }\n\n  onChangeFullscreen(fsState: boolean) {\n    this.ariaValue = fsState ? 'fullscren mode' : 'normal mode';\n    this.isFullscreen = fsState;\n  }\n\n  @HostListener('click')\n  onClick() {\n    this.changeFullscreenState();\n  }\n\n  @HostListener('keydown', ['$event'])\n  onKeyDown(event: KeyboardEvent) {\n    // On press Enter (13) or Space (32)\n    if (event.keyCode === 13 || event.keyCode === 32) {\n      event.preventDefault();\n      this.changeFullscreenState();\n    }\n  }\n\n  changeFullscreenState() {\n    let element = this.target;\n\n    if (this.target instanceof VgAPI) {\n      element = null;\n    }\n\n    this.fsAPI.toggleFullscreen(element);\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach(s => s.unsubscribe());\n  }\n}\n","import { Component, Input, ElementRef, HostListener, OnInit, ViewEncapsulation, OnDestroy } from '@angular/core';\nimport { VgAPI } from '../../core/services/vg-api';\nimport { Subscription } from 'rxjs';\n\n// tslint:disable:component-class-suffix\n@Component({\n  selector: 'vg-mute',\n  encapsulation: ViewEncapsulation.None,\n  template: `\n        <div class=\"icon\"\n             [class.vg-icon-volume_up]=\"getVolume() >= 0.75\"\n             [class.vg-icon-volume_down]=\"getVolume() >= 0.25 && getVolume() < 0.75\"\n             [class.vg-icon-volume_mute]=\"getVolume() > 0 && getVolume() < 0.25\"\n             [class.vg-icon-volume_off]=\"getVolume() === 0\"\n             tabindex=\"0\"\n             role=\"button\"\n             aria-label=\"mute button\"\n             [attr.aria-valuetext]=\"ariaValue\">\n        </div>`,\n  styles: [`\n        vg-mute {\n            -webkit-touch-callout: none;\n            -webkit-user-select: none;\n            -khtml-user-select: none;\n            -moz-user-select: none;\n            -ms-user-select: none;\n            user-select: none;\n            display: flex;\n            justify-content: center;\n            height: 50px;\n            width: 50px;\n            cursor: pointer;\n            color: white;\n            line-height: 50px;\n        }\n        vg-mute .icon {\n            pointer-events: none;\n        }\n    ` ]\n})\nexport class VgMute implements OnInit, OnDestroy {\n  @Input() vgFor: string;\n  elem: HTMLElement;\n  target: any;\n\n  currentVolume: number;\n\n  subscriptions: Subscription[] = [];\n\n  ariaValue = 'unmuted';\n\n  constructor(ref: ElementRef, public API: VgAPI) {\n    this.elem = ref.nativeElement;\n  }\n\n  ngOnInit() {\n    if (this.API.isPlayerReady) {\n      this.onPlayerReady();\n    } else {\n      this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n    }\n  }\n\n  onPlayerReady() {\n    this.target = this.API.getMediaById(this.vgFor);\n    this.currentVolume = this.target.volume;\n  }\n\n  @HostListener('click')\n  onClick() {\n    this.changeMuteState();\n  }\n\n  @HostListener('keydown', ['$event'])\n  onKeyDown(event: KeyboardEvent) {\n    // On press Enter (13) or Space (32)\n    if (event.keyCode === 13 || event.keyCode === 32) {\n      event.preventDefault();\n      this.changeMuteState();\n    }\n  }\n\n  changeMuteState() {\n    const volume = this.getVolume();\n\n    if (volume === 0) {\n      if (this.target.volume === 0 && this.currentVolume === 0) {\n        this.currentVolume = 1;\n      }\n\n      this.target.volume = this.currentVolume;\n    } else {\n      this.currentVolume = volume;\n      this.target.volume = 0;\n    }\n  }\n\n  getVolume() {\n    const volume = this.target ? this.target.volume : 0;\n    this.ariaValue = volume ? 'unmuted' : 'muted';\n    return volume;\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach(s => s.unsubscribe());\n  }\n}\n","import {\n  Component,\n  Input,\n  ElementRef,\n  HostListener,\n  OnInit,\n  ViewEncapsulation,\n  ViewChild,\n  OnDestroy\n} from '@angular/core';\nimport { VgAPI } from '../../core/services/vg-api';\nimport { Subscription } from 'rxjs';\n\n\n// tslint:disable:component-class-suffix\n@Component({\n  selector: 'vg-volume',\n  encapsulation: ViewEncapsulation.None,\n  template: `\n        <div\n            #volumeBar\n            class=\"volumeBar\"\n            tabindex=\"0\"\n            role=\"slider\"\n            aria-label=\"volume level\"\n            aria-level=\"polite\"\n            [attr.aria-valuenow]=\"ariaValue\"\n            aria-valuemin=\"0\"\n            aria-valuemax=\"100\"\n            aria-orientation=\"horizontal\"\n            [attr.aria-valuetext]=\"ariaValue + '%'\"\n            (click)=\"onClick($event)\"\n            (mousedown)=\"onMouseDown($event)\">\n            <div class=\"volumeBackground\" [ngClass]=\"{dragging: isDragging}\">\n                <div class=\"volumeValue\" [style.width]=\"(getVolume() * (100-15)) + '%'\"></div>\n                <div class=\"volumeKnob\" [style.left]=\"(getVolume() * (100-15)) + '%'\"></div>\n            </div>\n        </div>\n    `,\n  styles: [\n    `\n        vg-volume {\n            -webkit-touch-callout: none;\n            -webkit-user-select: none;\n            -moz-user-select: none;\n            -ms-user-select: none;\n            user-select: none;\n            display: flex;\n            justify-content: center;\n            height: 50px;\n            width: 100px;\n            cursor: pointer;\n            color: white;\n            line-height: 50px;\n        }\n        vg-volume .volumeBar {\n            position: relative;\n            display: flex;\n            flex-grow: 1;\n            align-items: center;\n        }\n        vg-volume .volumeBackground {\n            display: flex;\n            flex-grow: 1;\n            height: 5px;\n            pointer-events: none;\n            background-color: #333;\n        }\n        vg-volume .volumeValue {\n            display: flex;\n            height: 5px;\n            pointer-events: none;\n            background-color: #FFF;\n            transition:all 0.2s ease-out;\n        }\n        vg-volume .volumeKnob {\n            position: absolute;\n            width: 15px; height: 15px;\n            left: 0; top: 50%;\n            transform: translateY(-50%);\n            border-radius: 15px;\n            pointer-events: none;\n            background-color: #FFF;\n            transition:all 0.2s ease-out;\n        }\n        vg-volume .volumeBackground.dragging .volumeValue,\n        vg-volume .volumeBackground.dragging .volumeKnob {\n            transition: none;\n        }\n    `\n  ]\n})\nexport class VgVolume implements OnInit, OnDestroy {\n  @Input() vgFor: string;\n  @ViewChild('volumeBar', { static: true })\n  volumeBarRef: ElementRef;\n\n  elem: HTMLElement;\n  target: any;\n  isDragging: boolean;\n  mouseDownPosX: number;\n  ariaValue: number;\n\n  subscriptions: Subscription[] = [];\n\n  constructor(ref: ElementRef, public API: VgAPI) {\n    this.elem = ref.nativeElement;\n    this.isDragging = false;\n  }\n\n  ngOnInit() {\n    if (this.API.isPlayerReady) {\n      this.onPlayerReady();\n    } else {\n      this.subscriptions.push(\n        this.API.playerReadyEvent.subscribe(() => this.onPlayerReady())\n      );\n    }\n  }\n\n  onPlayerReady() {\n    this.target = this.API.getMediaById(this.vgFor);\n    this.ariaValue = this.getVolume() * 100;\n  }\n\n  onClick(event: { clientX: number }) {\n    this.setVolume(this.calculateVolume(event.clientX));\n  }\n\n  onMouseDown(event: { clientX: number }) {\n    this.mouseDownPosX = event.clientX;\n    this.isDragging = true;\n  }\n\n  @HostListener('document:mousemove', ['$event'])\n  onDrag(event: { clientX: number }) {\n    if (this.isDragging) {\n      this.setVolume(this.calculateVolume(event.clientX));\n    }\n  }\n\n  @HostListener('document:mouseup', ['$event'])\n  onStopDrag(event: { clientX: number }) {\n    if (this.isDragging) {\n      this.isDragging = false;\n      if (this.mouseDownPosX === event.clientX) {\n        this.setVolume(this.calculateVolume(event.clientX));\n      }\n    }\n  }\n\n  @HostListener('keydown', ['$event'])\n  arrowAdjustVolume(event: KeyboardEvent) {\n    if (event.keyCode === 38 || event.keyCode === 39) {\n      event.preventDefault();\n      this.setVolume(Math.max(0, Math.min(100, this.getVolume() * 100 + 10)));\n    } else if (event.keyCode === 37 || event.keyCode === 40) {\n      event.preventDefault();\n      this.setVolume(Math.max(0, Math.min(100, this.getVolume() * 100 - 10)));\n    }\n  }\n\n  calculateVolume(mousePosX: number) {\n    const recObj = this.volumeBarRef.nativeElement.getBoundingClientRect();\n    const volumeBarOffsetLeft: number = recObj.left;\n    const volumeBarWidth: number = recObj.width;\n    return (mousePosX - volumeBarOffsetLeft) / volumeBarWidth * 100;\n  }\n\n  setVolume(vol: number) {\n    this.target.volume = Math.max(0, Math.min(1, vol / 100));\n    this.ariaValue = this.target.volume * 100;\n  }\n\n  getVolume(): number {\n    return this.target ? this.target.volume : 0;\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach((s) => s.unsubscribe());\n  }\n}\n","import { Component, ElementRef, HostListener, OnInit, Input, ViewEncapsulation, OnDestroy } from '@angular/core';\nimport { VgAPI } from '../../core/services/vg-api';\nimport { VgStates } from '../../core/states/vg-states';\nimport { Subscription } from 'rxjs';\n\n// tslint:disable:component-class-suffix\n@Component({\n  selector: 'vg-play-pause',\n  encapsulation: ViewEncapsulation.None,\n  template: `\n        <div class=\"icon\"\n             [class.vg-icon-pause]=\"getState() === 'playing'\"\n             [class.vg-icon-play_arrow]=\"getState() === 'paused' || getState() === 'ended'\"\n             tabindex=\"0\"\n             role=\"button\"\n             [attr.aria-label]=\"getState() === 'paused'?'play':'pause'\"\n             [attr.aria-valuetext]=\"ariaValue\">\n        </div>`,\n  styles: [`\n        vg-play-pause {\n            -webkit-touch-callout: none;\n            -webkit-user-select: none;\n            -khtml-user-select: none;\n            -moz-user-select: none;\n            -ms-user-select: none;\n            user-select: none;\n            display: flex;\n            justify-content: center;\n            height: 50px;\n            width: 50px;\n            cursor: pointer;\n            color: white;\n            line-height: 50px;\n        }\n        vg-play-pause .icon {\n            pointer-events: none;\n        }\n    ` ]\n})\nexport class VgPlayPause implements OnInit, OnDestroy {\n  @Input() vgFor: string;\n\n  elem: HTMLElement;\n  target: any;\n\n  subscriptions: Subscription[] = [];\n\n  ariaValue = VgStates.VG_PAUSED;\n\n  constructor(ref: ElementRef, public API: VgAPI) {\n    this.elem = ref.nativeElement;\n  }\n\n  ngOnInit() {\n    if (this.API.isPlayerReady) {\n      this.onPlayerReady();\n    } else {\n      this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n    }\n  }\n\n  onPlayerReady() {\n    this.target = this.API.getMediaById(this.vgFor);\n  }\n\n  @HostListener('click')\n  onClick() {\n    this.playPause();\n  }\n\n  @HostListener('keydown', ['$event'])\n  onKeyDown(event: KeyboardEvent) {\n    // On press Enter (13) or Space (32)\n    if (event.keyCode === 13 || event.keyCode === 32) {\n      event.preventDefault();\n      this.playPause();\n    }\n  }\n\n  playPause() {\n    const state = this.getState();\n\n    switch (state) {\n      case VgStates.VG_PLAYING:\n        this.target.pause();\n        break;\n\n      case VgStates.VG_PAUSED:\n      case VgStates.VG_ENDED:\n        this.target.play();\n        break;\n    }\n  }\n\n  getState() {\n    this.ariaValue = this.target ? this.target.state : VgStates.VG_PAUSED;\n    return this.ariaValue;\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach(s => s.unsubscribe());\n  }\n}\n","import { Component, Input, ElementRef, HostListener, OnInit, ViewEncapsulation, OnDestroy } from '@angular/core';\nimport { VgAPI } from '../../core/services/vg-api';\nimport { Subscription } from 'rxjs';\n\n// tslint:disable:component-class-suffix\n@Component({\n  selector: 'vg-playback-button',\n  encapsulation: ViewEncapsulation.None,\n  template: `\n    <span class=\"button\"\n          tabindex=\"0\"\n          role=\"button\"\n          aria-label=\"playback speed button\"\n          [attr.aria-valuetext]=\"ariaValue\">\n        {{getPlaybackRate()}}x\n    </span>`,\n  styles: [`\n        vg-playback-button {\n            -webkit-touch-callout: none;\n            -webkit-user-select: none;\n            -moz-user-select: none;\n            -ms-user-select: none;\n            user-select: none;\n            display: flex;\n            justify-content: center;\n            height: 50px;\n            width: 50px;\n            cursor: pointer;\n            color: white;\n            line-height: 50px;\n            font-family: Helvetica Neue, Helvetica, Arial, sans-serif;\n        }\n        vg-playback-button .button {\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            width: 50px;\n        }\n    ` ]\n})\nexport class VgPlaybackButton implements OnInit, OnDestroy {\n  @Input() vgFor: string;\n\n  elem: HTMLElement;\n  target: any;\n\n  @Input() playbackValues: Array<string>;\n  playbackIndex: number;\n\n  subscriptions: Subscription[] = [];\n\n  ariaValue = 1;\n\n  constructor(ref: ElementRef, public API: VgAPI) {\n    this.elem = ref.nativeElement;\n    this.playbackValues = ['0.5', '1.0', '1.5', '2.0'];\n    this.playbackIndex = 1;\n  }\n\n  ngOnInit() {\n    if (this.API.isPlayerReady) {\n      this.onPlayerReady();\n    } else {\n      this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n    }\n  }\n\n  onPlayerReady() {\n    this.target = this.API.getMediaById(this.vgFor);\n  }\n\n  @HostListener('click')\n  onClick() {\n    this.updatePlaybackSpeed();\n  }\n\n  @HostListener('keydown', ['$event'])\n  onKeyDown(event: KeyboardEvent) {\n    // On press Enter (13) or Space (32)\n    if (event.keyCode === 13 || event.keyCode === 32) {\n      event.preventDefault();\n      this.updatePlaybackSpeed();\n    }\n  }\n\n  updatePlaybackSpeed() {\n    this.playbackIndex = ++this.playbackIndex % this.playbackValues.length;\n\n    if (this.target instanceof VgAPI) {\n      this.target.playbackRate = (this.playbackValues[this.playbackIndex]);\n    } else {\n      this.target.playbackRate[this.vgFor] = (this.playbackValues[this.playbackIndex]);\n    }\n  }\n\n  getPlaybackRate() {\n    this.ariaValue = this.target ? this.target.playbackRate : 1.0;\n    return this.ariaValue;\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach(s => s.unsubscribe());\n  }\n}\n","import {\n  Component, ElementRef, Input, HostListener, OnInit, ViewEncapsulation, HostBinding,\n  OnDestroy\n} from '@angular/core';\nimport { VgAPI } from '../../core/services/vg-api';\nimport { VgControlsHidden } from '../../core/services/vg-controls-hidden';\nimport { VgStates } from '../../core/states/vg-states';\nimport { Subscription } from 'rxjs';\n\n\n// tslint:disable:component-class-suffix\n@Component({\n  selector: 'vg-scrub-bar',\n  encapsulation: ViewEncapsulation.None,\n  template: `\n        <div class=\"scrubBar\"\n             tabindex=\"0\"\n             role=\"slider\"\n             aria-label=\"scrub bar\"\n             aria-level=\"polite\"\n             [attr.aria-valuenow]=\"getPercentage()\"\n             aria-valuemin=\"0\"\n             aria-valuemax=\"100\"\n             [attr.aria-valuetext]=\"getPercentage() + '%'\">\n            <ng-content></ng-content>\n        </div>\n    `,\n  styles: [`\n        vg-scrub-bar {\n            -webkit-touch-callout: none;\n            -webkit-user-select: none;\n            -moz-user-select: none;\n            -ms-user-select: none;\n            user-select: none;\n            position: absolute;\n            width: 100%;\n            height: 5px;\n            bottom: 50px;\n            margin: 0;\n            cursor: pointer;\n            align-items: center;\n            background: rgba(0, 0, 0, 0.75);\n            z-index: 250;\n            -webkit-transition: bottom 1s, opacity 0.5s;\n            -khtml-transition: bottom 1s, opacity 0.5s;\n            -moz-transition: bottom 1s, opacity 0.5s;\n            -ms-transition: bottom 1s, opacity 0.5s;\n            transition: bottom 1s, opacity 0.5s;\n        }\n        vg-scrub-bar .scrubBar {\n            position: relative;\n            display: flex;\n            flex-grow: 1;\n            align-items: center;\n            height: 100%;\n        }\n        vg-controls vg-scrub-bar {\n            position: relative;\n            bottom: 0;\n            background: transparent;\n            height: 50px;\n            flex-grow: 1;\n            flex-basis: 0;\n            margin: 0 10px;\n            -webkit-transition: initial;\n            -khtml-transition: initial;\n            -moz-transition: initial;\n            -ms-transition: initial;\n            transition: initial;\n        }\n        vg-scrub-bar.hide {\n            bottom: 0;\n            opacity: 0;\n        }\n        vg-controls vg-scrub-bar.hide {\n            bottom: initial;\n            opacity: initial;\n        }\n    ` ]\n})\nexport class VgScrubBar implements OnInit, OnDestroy {\n  @HostBinding('class.hide') hideScrubBar = false;\n\n  @Input() vgFor: string;\n  @Input() vgSlider = true;\n\n  elem: HTMLElement;\n  target: any;\n  isSeeking = false;\n  wasPlaying = false;\n\n  subscriptions: Subscription[] = [];\n\n  constructor(ref: ElementRef, public API: VgAPI, vgControlsHiddenState: VgControlsHidden) {\n    this.elem = ref.nativeElement;\n    this.subscriptions.push(vgControlsHiddenState.isHidden.subscribe(hide => this.onHideScrubBar(hide)));\n  }\n\n  ngOnInit() {\n    if (this.API.isPlayerReady) {\n      this.onPlayerReady();\n    } else {\n      this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n    }\n  }\n\n  onPlayerReady() {\n    this.target = this.API.getMediaById(this.vgFor);\n  }\n\n  protected seekStart() {\n    if (this.target.canPlay) {\n      this.isSeeking = true;\n      if (this.target.state === VgStates.VG_PLAYING) {\n        this.wasPlaying = true;\n      }\n      this.target.pause();\n    }\n  }\n\n  protected seekMove(offset: number) {\n    if (this.isSeeking) {\n      const percentage = Math.max(Math.min(offset * 100 / this.elem.scrollWidth, 99.9), 0);\n      this.target.time.current = percentage * this.target.time.total / 100;\n      this.target.seekTime(percentage, true);\n    }\n  }\n\n  protected seekEnd(offset: number) {\n    this.isSeeking = false;\n    if (this.target.canPlay) {\n      const percentage = Math.max(Math.min(offset * 100 / this.elem.scrollWidth, 99.9), 0);\n      this.target.seekTime(percentage, true);\n      if (this.wasPlaying) {\n        this.wasPlaying = false;\n        this.target.play();\n      }\n    }\n  }\n\n  protected touchEnd() {\n    this.isSeeking = false;\n    if (this.wasPlaying) {\n      this.wasPlaying = false;\n      this.target.play();\n    }\n  }\n\n  protected getTouchOffset(event: any) {\n    let offsetLeft = 0;\n    let element: any = event.target;\n    while (element) {\n      offsetLeft += element.offsetLeft;\n      element = element.offsetParent;\n    }\n    return event.touches[0].pageX - offsetLeft;\n  }\n\n  @HostListener('mousedown', ['$event'])\n  onMouseDownScrubBar($event: any) {\n    if (this.target) {\n      if (!this.target.isLive) {\n        if (!this.vgSlider) {\n          this.seekEnd($event.offsetX);\n        } else {\n          this.seekStart();\n        }\n      }\n    }\n  }\n\n  @HostListener('document:mousemove', ['$event'])\n  onMouseMoveScrubBar($event: any) {\n    if (this.target) {\n      if (!this.target.isLive && this.vgSlider && this.isSeeking) {\n        this.seekMove($event.offsetX);\n      }\n    }\n  }\n\n  @HostListener('document:mouseup', ['$event'])\n  onMouseUpScrubBar($event: any) {\n    if (this.target) {\n      if (!this.target.isLive && this.vgSlider && this.isSeeking) {\n        this.seekEnd($event.offsetX);\n      }\n    }\n  }\n\n  @HostListener('touchstart', ['$event'])\n  onTouchStartScrubBar($event: any) {\n    if (this.target) {\n      if (!this.target.isLive) {\n        if (!this.vgSlider) {\n          this.seekEnd(this.getTouchOffset($event));\n        } else {\n          this.seekStart();\n        }\n      }\n    }\n  }\n\n  @HostListener('document:touchmove', ['$event'])\n  onTouchMoveScrubBar($event: any) {\n    if (this.target) {\n      if (!this.target.isLive && this.vgSlider && this.isSeeking) {\n        this.seekMove(this.getTouchOffset($event));\n      }\n    }\n  }\n  // @ts-ignore\n  @HostListener('document:touchcancel', ['$event']) onTouchCancelScrubBar($event: any) {\n    if (this.target) {\n      if (!this.target.isLive && this.vgSlider && this.isSeeking) {\n        this.touchEnd();\n      }\n    }\n  }\n  // @ts-ignore\n  @HostListener('document:touchend', ['$event']) onTouchEndScrubBar($event: any) {\n    if (this.target) {\n      if (!this.target.isLive && this.vgSlider && this.isSeeking) {\n        this.touchEnd();\n      }\n    }\n  }\n\n  @HostListener('keydown', ['$event'])\n  arrowAdjustVolume(event: KeyboardEvent) {\n    if (this.target) {\n      if (event.keyCode === 38 || event.keyCode === 39) {\n        event.preventDefault();\n        this.target.seekTime((this.target.time.current + 5000) / 1000, false);\n      } else if (event.keyCode === 37 || event.keyCode === 40) {\n        event.preventDefault();\n        this.target.seekTime((this.target.time.current - 5000) / 1000, false);\n      }\n    }\n  }\n\n  getPercentage() {\n    return this.target ? ((this.target.time.current * 100) / this.target.time.total) + '%' : '0%';\n  }\n\n  onHideScrubBar(hide: boolean) {\n    this.hideScrubBar = hide;\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach(s => s.unsubscribe());\n  }\n}\n","import { Component, Input, ElementRef, OnInit, ViewEncapsulation, OnDestroy } from '@angular/core';\nimport { VgAPI } from '../../../core/services/vg-api';\nimport { Subscription } from 'rxjs';\n\n// tslint:disable:component-class-suffix\n@Component({\n  selector: 'vg-scrub-bar-buffering-time',\n  encapsulation: ViewEncapsulation.None,\n  template: `<div class=\"background\" [style.width]=\"getBufferTime()\"></div>`,\n  styles: [`\n        vg-scrub-bar-buffering-time {\n            display: flex;\n            width: 100%;\n            height: 5px;\n            pointer-events: none;\n            position: absolute;\n        }\n        vg-scrub-bar-buffering-time .background {\n            background-color: rgba(255, 255, 255, 0.3);\n        }\n        vg-controls vg-scrub-bar-buffering-time {\n            position: absolute;\n            top: calc(50% - 3px);\n        }\n        vg-controls vg-scrub-bar-buffering-time .background {\n            -webkit-border-radius: 2px;\n            -moz-border-radius: 2px;\n            border-radius: 2px;\n        }\n    ` ]\n})\nexport class VgScrubBarBufferingTime implements OnInit, OnDestroy {\n  @Input() vgFor: string;\n\n  elem: HTMLElement;\n  target: any;\n\n  subscriptions: Subscription[] = [];\n\n  constructor(ref: ElementRef, public API: VgAPI) {\n    this.elem = ref.nativeElement;\n  }\n\n  ngOnInit() {\n    if (this.API.isPlayerReady) {\n      this.onPlayerReady();\n    } else {\n      this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n    }\n  }\n\n  onPlayerReady() {\n    this.target = this.API.getMediaById(this.vgFor);\n  }\n\n  getBufferTime() {\n    let bufferTime = '0%';\n\n    if (this.target && this.target.buffer && this.target.buffered.length) {\n      if (this.target.time.total === 0) {\n        bufferTime = '0%';\n      } else {\n        bufferTime = ((this.target.buffer.end / this.target.time.total) * 100) + '%';\n      }\n    }\n\n    return bufferTime;\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach(s => s.unsubscribe());\n  }\n}\n","import {\n  Component,\n  ElementRef,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  DoCheck,\n  SimpleChange,\n  ViewEncapsulation\n} from '@angular/core';\nimport { VgAPI } from '../../../core/services/vg-api';\nimport { Subscription } from 'rxjs';\n\n// tslint:disable:no-conflicting-lifecycle\n// tslint:disable:component-class-suffix\n// tslint:disable:no-string-literal\n@Component({\n  selector: 'vg-scrub-bar-cue-points',\n  encapsulation: ViewEncapsulation.None,\n  template: `\n        <div class=\"cue-point-container\">\n            <span *ngFor=\"let cp of cuePoints\" [style.width]=\"cp.$$style?.width\" [style.left]=\"cp.$$style?.left\"\n                  class=\"cue-point\"></span>\n        </div>\n    `,\n  styles: [`\n        vg-scrub-bar-cue-points {\n            display: flex;\n            width: 100%;\n            height: 5px;\n            pointer-events: none;\n            position: absolute;\n        }\n        vg-scrub-bar-cue-points .cue-point-container .cue-point {\n            position: absolute;\n            height: 5px;\n            background-color: rgba(255, 204, 0, 0.7);\n        }\n        vg-controls vg-scrub-bar-cue-points {\n            position: absolute;\n            top: calc(50% - 3px);\n        }\n    ` ]\n})\nexport class VgScrubBarCuePoints implements OnInit, OnChanges, OnDestroy, DoCheck {\n  @Input() vgCuePoints: TextTrackCueList;\n  @Input() vgFor: string;\n\n  elem: HTMLElement;\n  target: any;\n  onLoadedMetadataCalled = false;\n  cuePoints: Array<any> = [];\n\n  subscriptions: Subscription[] = [];\n\n  totalCues = 0;\n\n  constructor(ref: ElementRef, public API: VgAPI) {\n    this.elem = ref.nativeElement;\n  }\n\n  ngOnInit() {\n    if (this.API.isPlayerReady) {\n      this.onPlayerReady();\n    } else {\n      this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n    }\n  }\n\n  onPlayerReady() {\n    this.target = this.API.getMediaById(this.vgFor);\n\n    const onTimeUpdate = this.target.subscriptions.loadedMetadata;\n    this.subscriptions.push(onTimeUpdate.subscribe(this.onLoadedMetadata.bind(this)));\n\n    if (this.onLoadedMetadataCalled) {\n      this.onLoadedMetadata();\n    }\n  }\n\n  onLoadedMetadata() {\n    if (this.vgCuePoints) {\n      // We need to transform the TextTrackCueList to Array or it doesn't work on IE11/Edge.\n      // See: https://github.com/videogular/videogular2/issues/369\n      this.cuePoints = [];\n\n      for (let i = 0, l = this.vgCuePoints.length; i < l; i++) {\n        const end = (this.vgCuePoints[i].endTime >= 0) ? this.vgCuePoints[i].endTime : this.vgCuePoints[i].startTime + 1;\n        const cuePointDuration = (end - this.vgCuePoints[i].startTime) * 1000;\n        let position = '0';\n        let percentWidth = '0';\n\n        if (typeof cuePointDuration === 'number' && this.target.time.total) {\n          percentWidth = ((cuePointDuration * 100) / this.target.time.total) + '%';\n          position = (this.vgCuePoints[i].startTime * 100 / (Math.round(this.target.time.total / 1000))) + '%';\n        }\n\n        (this.vgCuePoints[i] as any).$$style = {\n          width: percentWidth,\n          left: position\n        };\n\n        this.cuePoints.push(this.vgCuePoints[i]);\n      }\n    }\n  }\n\n  updateCuePoints() {\n    if (!this.target) {\n      this.onLoadedMetadataCalled = true;\n      return;\n    }\n    this.onLoadedMetadata();\n  }\n\n  ngOnChanges(changes: { [propName: string]: SimpleChange }) {\n    if (changes['vgCuePoints'].currentValue) {\n      this.updateCuePoints();\n    }\n  }\n\n  ngDoCheck() {\n    if (this.vgCuePoints) {\n      const changes = this.totalCues !== this.vgCuePoints.length;\n\n      if (changes) {\n        this.totalCues = this.vgCuePoints.length;\n        this.updateCuePoints();\n      }\n    }\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach(s => s.unsubscribe());\n  }\n}\n","import { Component, Input, ElementRef, OnInit, ViewEncapsulation, OnDestroy } from '@angular/core';\nimport { VgAPI } from '../../../core/services/vg-api';\nimport { Subscription } from 'rxjs';\n\n// tslint:disable:component-class-suffix\n@Component({\n  selector: 'vg-scrub-bar-current-time',\n  encapsulation: ViewEncapsulation.None,\n  template: `<div class=\"background\" [style.width]=\"getPercentage()\"></div><span class=\"slider\" *ngIf=\"vgSlider\"></span>`,\n  styles: [`\n        vg-scrub-bar-current-time {\n            display: flex;\n            width: 100%;\n            height: 5px;\n            pointer-events: none;\n            position: absolute;\n        }\n        vg-scrub-bar-current-time .background {\n            background-color: white;\n        }\n        vg-controls vg-scrub-bar-current-time {\n            position: absolute;\n            top: calc(50% - 3px);\n            -webkit-border-radius: 2px;\n            -moz-border-radius: 2px;\n            border-radius: 2px;\n        }\n        vg-controls vg-scrub-bar-current-time .background {\n            border: 1px solid white;\n            -webkit-border-radius: 2px;\n            -moz-border-radius: 2px;\n            border-radius: 2px;\n        }\n\n        vg-scrub-bar-current-time .slider{\n            background: white;\n            height: 15px;\n            width: 15px;\n            border-radius: 50%;\n            box-shadow: 0px 0px 10px black;\n            margin-top: -5px;\n            margin-left: -10px;\n        }\n    ` ]\n})\nexport class VgScrubBarCurrentTime implements OnInit, OnDestroy {\n  @Input() vgFor: string;\n  @Input() vgSlider = false;\n\n  elem: HTMLElement;\n  target: any;\n\n  subscriptions: Subscription[] = [];\n\n  constructor(ref: ElementRef, public API: VgAPI) {\n    this.elem = ref.nativeElement;\n  }\n\n  ngOnInit() {\n    if (this.API.isPlayerReady) {\n      this.onPlayerReady();\n    } else {\n      this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n    }\n  }\n\n  onPlayerReady() {\n    this.target = this.API.getMediaById(this.vgFor);\n  }\n\n  getPercentage() {\n    return this.target ? ((this.target.time.current * 100) / this.target.time.total) + '%' : '0%';\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach(s => s.unsubscribe());\n  }\n}\n","import { Component, Input, ElementRef, OnInit, PipeTransform, Pipe, ViewEncapsulation, OnDestroy } from '@angular/core';\nimport { VgAPI } from '../../core/services/vg-api';\nimport { Subscription } from 'rxjs';\n\n// Workaround until we can use UTC with Angular Date Pipe\n@Pipe({ name: 'vgUtc' })\nexport class VgUtcPipe implements PipeTransform {\n  transform(value: number, format: string): string {\n    const date = new Date(value);\n    let result = format;\n    let ss: string | number = date.getUTCSeconds();\n    let mm: string | number = date.getUTCMinutes();\n    let hh: string | number = date.getUTCHours();\n\n    if (ss < 10) {\n      ss = '0' + ss;\n    }\n    if (mm < 10) {\n      mm = '0' + mm;\n    }\n    if (hh < 10) {\n      hh = '0' + hh;\n    }\n\n    result = result.replace(/ss/g, ss as string);\n    result = result.replace(/mm/g, mm as string);\n    result = result.replace(/hh/g, hh as string);\n\n    return result;\n  }\n}\n// tslint:disable:component-class-suffix\n@Component({\n  selector: 'vg-time-display',\n  encapsulation: ViewEncapsulation.None,\n  template: `\n        <span *ngIf=\"target?.isLive\">LIVE</span>\n        <span *ngIf=\"!target?.isLive\">{{ getTime() | vgUtc:vgFormat }}</span>\n        <ng-content></ng-content>\n    `,\n  styles: [`\n        vg-time-display {\n            -webkit-touch-callout: none;\n            -webkit-user-select: none;\n            -moz-user-select: none;\n            -ms-user-select: none;\n            user-select: none;\n            display: flex;\n            justify-content: center;\n            height: 50px;\n            width: 60px;\n            cursor: pointer;\n            color: white;\n            line-height: 50px;\n            pointer-events: none;\n            font-family: Helvetica Neue, Helvetica, Arial, sans-serif;\n        }\n    ` ]\n})\nexport class VgTimeDisplay implements OnInit, OnDestroy {\n  @Input() vgFor: string;\n  @Input() vgProperty = 'current';\n  @Input() vgFormat = 'mm:ss';\n\n  elem: HTMLElement;\n  target: any;\n\n  subscriptions: Subscription[] = [];\n\n  constructor(ref: ElementRef, public API: VgAPI) {\n    this.elem = ref.nativeElement;\n  }\n\n  ngOnInit() {\n    if (this.API.isPlayerReady) {\n      this.onPlayerReady();\n    } else {\n      this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n    }\n  }\n\n  onPlayerReady() {\n    this.target = this.API.getMediaById(this.vgFor);\n  }\n\n  getTime() {\n    let t = 0;\n\n    if (this.target) {\n      t = Math.round(this.target.time[this.vgProperty]);\n      t = isNaN(t) || this.target.isLive ? 0 : t;\n    }\n\n    return t;\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach(s => s.unsubscribe());\n  }\n}\n","import { Component, ElementRef, OnInit, Input, ViewEncapsulation, OnDestroy } from '@angular/core';\nimport { VgAPI } from '../../core/services/vg-api';\nimport { Subscription } from 'rxjs';\n\nexport interface Option {\n  id: string;\n  label: string;\n  selected: boolean;\n}\n\n// tslint:disable:component-class-suffix\n@Component({\n  selector: 'vg-track-selector',\n  encapsulation: ViewEncapsulation.None,\n  template: `\n        <div class=\"container\">\n            <div class=\"track-selected\"\n                [class.vg-icon-closed_caption]=\"!trackSelected\">\n                {{ trackSelected || '' }}\n            </div>\n\n            <select class=\"trackSelector\"\n                    (change)=\"selectTrack($event.target.value)\"\n                    tabindex=\"0\"\n                    aria-label=\"track selector\"\n                    [attr.aria-valuetext]=\"ariaValue\">\n                <option\n                    *ngFor=\"let track of tracks\"\n                    [value]=\"track.id\"\n                    [selected]=\"track.selected === true\">\n                    {{ track.label }}\n                </option>\n            </select>\n        </div>\n    `,\n  styles: [`\n        vg-track-selector {\n            -webkit-touch-callout: none;\n            -webkit-user-select: none;\n            -moz-user-select: none;\n            -ms-user-select: none;\n            user-select: none;\n            display: flex;\n            justify-content: center;\n            width: 50px;\n            height: 50px;\n            cursor: pointer;\n            color: white;\n            line-height: 50px;\n        }\n        vg-track-selector .container {\n            position: relative;\n            display: flex;\n            flex-grow: 1;\n            align-items: center;\n\n            padding: 0;\n            margin: 5px;\n        }\n        vg-track-selector select.trackSelector {\n            width: 50px;\n            padding: 5px 8px;\n            border: none;\n            background: none;\n            -webkit-appearance: none;\n            -moz-appearance: none;\n            appearance: none;\n            color: transparent;\n            font-size: 16px;\n        }\n        vg-track-selector select.trackSelector::-ms-expand {\n            display: none;\n        }\n        vg-track-selector select.trackSelector option {\n            color: #000;\n        }\n        vg-track-selector .track-selected {\n            position: absolute;\n            width: 100%;\n            height: 50px;\n            top: -6px;\n            text-align: center;\n            text-transform: uppercase;\n            font-family: Helvetica Neue, Helvetica, Arial, sans-serif;\n            padding-top: 2px;\n            pointer-events: none;\n        }\n        vg-track-selector .vg-icon-closed_caption:before {\n            width: 100%;\n        }\n    ` ]\n})\nexport class VgTrackSelector implements OnInit, OnDestroy {\n  @Input() vgFor: string;\n\n  elem: HTMLElement;\n  target: any;\n  tracks: Array<Option>;\n  trackSelected: string;\n\n  subscriptions: Subscription[] = [];\n\n  ariaValue: string;\n\n  constructor(ref: ElementRef, public API: VgAPI) {\n    this.elem = ref.nativeElement;\n  }\n\n  ngOnInit() {\n    if (this.API.isPlayerReady) {\n      this.onPlayerReady();\n    } else {\n      this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n    }\n  }\n\n  onPlayerReady() {\n    this.target = this.API.getMediaById(this.vgFor);\n\n    const subs: Array<Option> = Array.from((this.API.getMasterMedia().elem as HTMLMediaElement).children)\n      .filter((item: HTMLElement) => item.tagName === 'TRACK')\n      .filter((item: HTMLTrackElement) => item.kind === 'subtitles')\n      .map((item: HTMLTrackElement) => ({\n        label: item.label,\n        selected: item.default === true,\n        id: item.srclang\n      }));\n\n    this.tracks = [\n      ...subs,\n      {\n        id: null,\n        label: 'Off',\n        selected: subs.every((item: Option) => item.selected === false)\n      }\n    ];\n\n    const track: Option = this.tracks.filter((item: Option) => item.selected === true)[0];\n    this.trackSelected = track.id;\n    this.ariaValue = track.label;\n  }\n\n  selectTrack(trackId: string) {\n    this.trackSelected = (trackId === 'null') ? null : trackId;\n\n    this.ariaValue = 'No track selected';\n\n    Array.from((this.API.getMasterMedia().elem as HTMLMediaElement).textTracks)\n      .forEach((item: TextTrack) => {\n        if (item.language === trackId) {\n          this.ariaValue = item.label;\n          item.mode = 'showing';\n        } else {\n          item.mode = 'hidden';\n        }\n      });\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach(s => s.unsubscribe());\n  }\n}\n","import {\n  Component,\n  ElementRef,\n  OnInit,\n  Input,\n  ViewEncapsulation,\n  OnDestroy,\n  SimpleChanges,\n  OnChanges, Output, EventEmitter\n} from '@angular/core';\nimport { VgAPI } from '../../core/services/vg-api';\nimport { Subscription } from 'rxjs';\nimport { BitrateOption } from '../../core/vg-core.module';\n\n\n// tslint:disable:no-output-on-prefix\n// tslint:disable:component-class-suffix\n// tslint:disable:no-string-literal\n@Component({\n  selector: 'vg-quality-selector',\n  encapsulation: ViewEncapsulation.None,\n  template: `\n        <div class=\"container\">\n            <div class=\"quality-selected\"\n                 [class.vg-icon-hd]=\"!bitrateSelected\">\n                {{ bitrateSelected?.label }}\n            </div>\n\n            <select class=\"quality-selector\"\n                    (change)=\"selectBitrate($event.target.value)\"\n                    tabindex=\"0\"\n                    aria-label=\"quality selector\"\n                    [attr.aria-valuetext]=\"ariaValue\">\n                <option\n                    *ngFor=\"let bitrate of bitrates\"\n                    [value]=\"bitrate.qualityIndex.toString()\"\n                    [selected]=\"bitrate.qualityIndex === bitrateSelected?.qualityIndex\">\n                    {{ bitrate.label }}\n                </option>\n            </select>\n        </div>\n    `,\n  styles: [`\n        vg-quality-selector {\n            -webkit-touch-callout: none;\n            -webkit-user-select: none;\n            -moz-user-select: none;\n            -ms-user-select: none;\n            user-select: none;\n            display: flex;\n            justify-content: center;\n            width: 50px;\n            height: 50px;\n            cursor: pointer;\n            color: white;\n            line-height: 50px;\n        }\n        vg-quality-selector .container {\n            position: relative;\n            display: flex;\n            flex-grow: 1;\n            align-items: center;\n\n            padding: 0;\n            margin: 5px;\n        }\n        vg-quality-selector select.quality-selector {\n            width: 50px;\n            padding: 5px 8px;\n            border: none;\n            background: none;\n            -webkit-appearance: none;\n            -moz-appearance: none;\n            appearance: none;\n            color: transparent;\n            font-size: 16px;\n        }\n        vg-quality-selector select.quality-selector::-ms-expand {\n            display: none;\n        }\n        vg-quality-selector select.quality-selector option {\n            color: #000;\n        }\n        vg-quality-selector .quality-selected {\n            position: absolute;\n            width: 100%;\n            height: 50px;\n            top: -6px;\n            text-align: center;\n            text-transform: uppercase;\n            font-family: Helvetica Neue, Helvetica, Arial, sans-serif;\n            padding-top: 2px;\n            pointer-events: none;\n        }\n        vg-quality-selector .vg-icon-closed_caption:before {\n            width: 100%;\n        }\n    ` ]\n})\nexport class VgQualitySelector implements OnInit, OnChanges, OnDestroy {\n  @Input() bitrates: BitrateOption[];\n\n  @Output() onBitrateChange: EventEmitter<BitrateOption> = new EventEmitter();\n\n  bitrateSelected: BitrateOption;\n\n  elem: HTMLElement;\n  target: any;\n\n  subscriptions: Subscription[] = [];\n\n  ariaValue: string | number;\n\n  constructor(ref: ElementRef, public API: VgAPI) {\n    this.elem = ref.nativeElement;\n  }\n\n  ngOnInit() {\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['bitrates'].currentValue && changes['bitrates'].currentValue.length) {\n      this.bitrates.forEach(item => item.label = (item.label || Math.round(item.bitrate / 1000)).toString());\n    }\n  }\n\n  selectBitrate(index: number) {\n    this.bitrateSelected = this.bitrates[index];\n    this.onBitrateChange.emit(this.bitrates[index]);\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 { VgControls } from './vg-controls';\nimport { VgFullscreen } from './vg-fullscreen/vg-fullscreen';\nimport { VgMute } from './vg-mute/vg-mute';\nimport { VgVolume } from './vg-volume/vg-volume';\nimport { VgPlayPause } from './vg-play-pause/vg-play-pause';\nimport { VgPlaybackButton } from './vg-playback-button/vg-playback-button';\nimport { VgScrubBar } from './vg-scrub-bar/vg-scrub-bar';\nimport { VgScrubBarBufferingTime } from './vg-scrub-bar/vg-scrub-bar-buffering-time/vg-scrub-bar-buffering-time';\nimport { VgScrubBarCuePoints } from './vg-scrub-bar/vg-scrub-bar-cue-points/vg-scrub-bar-cue-points';\nimport { VgScrubBarCurrentTime } from './vg-scrub-bar/vg-scrub-bar-current-time/vg-scrub-bar-current-time';\nimport { VgTimeDisplay, VgUtcPipe } from './vg-time-display/vg-time-display';\nimport { VgTrackSelector } from './vg-track-selector/vg-track-selector';\nimport { VgControlsHidden } from '../core/services/vg-controls-hidden';\nimport { VgQualitySelector } from './vg-quality-selector/vg-quality-selector';\n\n@NgModule({\n  imports: [CommonModule],\n  declarations: [\n    VgControls,\n    VgFullscreen,\n    VgMute,\n    VgVolume,\n    VgPlayPause,\n    VgPlaybackButton,\n    VgScrubBar,\n    VgScrubBarBufferingTime,\n    VgScrubBarCuePoints,\n    VgScrubBarCurrentTime,\n    VgTimeDisplay,\n    VgUtcPipe,\n    VgTrackSelector,\n    VgQualitySelector\n  ],\n  exports: [\n    VgControls,\n    VgFullscreen,\n    VgMute,\n    VgVolume,\n    VgPlayPause,\n    VgPlaybackButton,\n    VgScrubBar,\n    VgScrubBarBufferingTime,\n    VgScrubBarCuePoints,\n    VgScrubBarCurrentTime,\n    VgTimeDisplay,\n    VgUtcPipe,\n    VgTrackSelector,\n    VgQualitySelector\n  ],\n  providers: [VgControlsHidden]\n})\nexport class VgControlsModule {\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\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  static VG_LOAD = 'load';\n  static VG_ENTER = 'enter';\n  static VG_EXIT = 'exit';\n  static VG_START_ADS = 'startads';\n  static VG_END_ADS = 'endads';\n}\n","import { ChangeDetectorRef, OnInit, Directive, Input, OnDestroy } from '@angular/core';\nimport { IPlayable, IMediaSubscriptions } from './i-playable';\nimport { Observable, Subscription, Subject, fromEvent } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { VgStates } from '../states/vg-states';\nimport { VgAPI } from '../services/vg-api';\nimport { VgEvents } from '../events/vg-events';\nimport { IMediaElement } from './i-media-element';\nimport { timer, combineLatest } from 'rxjs';\n\n@Directive({\n  selector: '[vgMedia]'\n})\n// tslint:disable-next-line:directive-class-suffix\nexport class VgMedia 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\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: VgAPI, private ref: ChangeDetectorRef) {\n\n  }\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, 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(this.elem as any, VgEvents.VG_START_ADS),\n      endAds: fromEvent(this.elem as any, VgEvents.VG_END_ADS),\n\n      // See changes on <source> child elements to reload the video file\n      mutation: new Observable(\n        (observer: any) => {\n\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\n      // Custom buffering detection\n      bufferDetected: this.bufferDetected\n    };\n\n    this.mutationObs = this.subscriptions.mutation.subscribe(this.onMutation.bind(this));\n    this.canPlayObs = this.subscriptions.canPlay.subscribe(this.onCanPlay.bind(this));\n    this.canPlayThroughObs = this.subscriptions.canPlayThrough.subscribe(this.onCanPlayThrough.bind(this));\n    this.loadedMetadataObs = this.subscriptions.loadedMetadata.subscribe(this.onLoadMetadata.bind(this));\n    this.waitingObs = this.subscriptions.waiting.subscribe(this.onWait.bind(this));\n    this.progressObs = this.subscriptions.progress.subscribe(this.onProgress.bind(this));\n    this.endedObs = this.subscriptions.ended.subscribe(this.onComplete.bind(this));\n    this.playingObs = this.subscriptions.playing.subscribe(this.onStartPlaying.bind(this));\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(this.onTimeUpdate.bind(this));\n    this.volumeChangeObs = this.subscriptions.volumeChange.subscribe(this.onVolumeChange.bind(this));\n    this.errorObs = this.subscriptions.error.subscribe(this.onError.bind(this));\n\n    if (this.vgMaster) {\n      this.api.playerReadyEvent.subscribe(\n        () => {\n          this.prepareSync();\n        }\n      );\n    }\n  }\n\n  prepareSync() {\n    const canPlayAll: Array<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).pipe(\n      map((...params) => {\n        const checkReadyState = (event) => {\n          return event.target.readyState === 4;\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      () => {\n        for (const media in this.api.medias) {\n          if (this.api.medias[media] !== this) {\n            const diff: number = 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\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        // tslint:disable-next-line:no-string-literal\n        if (mut.target['src'] && mut.target['src'].length > 0 && mut.target['src'].indexOf('blob:') < 0) {\n          this.loadMedia();\n          break;\n        }\n      } else if (mut.type === 'childList' && mut.removedNodes.length && mut.removedNodes[0].nodeName.toLowerCase() === 'source') {\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 (this.playPromise || (this.state !== VgStates.VG_PAUSED && this.state !== VgStates.VG_ENDED)) {\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\n        .then(() => {\n          this.vgMedia.pause();\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    // tslint:disable-next-line:no-unnecessary-initializer\n    let result = undefined;\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;\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    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  }\n  // @ts-ignore\n  onProgress(event: any) {\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  }\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 (!this.isBufferDetected && this.currentPlayPos < (this.lastPlayPos + offset)) {\n      this.isBufferDetected = true;\n    }\n\n    if (this.isBufferDetected && this.currentPlayPos > (this.lastPlayPos + offset)) {\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(type: string, label?: string, language?: string, mode?: 'disabled' | 'hidden' | 'showing'): TextTrack {\n    const newTrack: TextTrack = this.vgMedia.addTextTrack(type, label, language);\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\n    if (this.checkBufferSubscription) {\n      this.checkBufferSubscription.unsubscribe();\n    }\n\n    if (this.syncSubscription) {\n      this.syncSubscription.unsubscribe();\n    }\n\n    this.bufferDetected.complete();\n    this.bufferDetected.unsubscribe();\n\n    this.api.unregisterMedia(this);\n  }\n}\n","import { Directive, ElementRef, EventEmitter, OnDestroy, OnInit, Output, DoCheck } from '@angular/core';\nimport { VgEvents } from '../events/vg-events';\nimport { Observable, Subscription, fromEvent } from 'rxjs';\n\n@Directive({\n  selector: '[vgCuePoints]'\n})\n// tslint:disable-next-line:directive-class-suffix\nexport class VgCuePoints implements OnInit, OnDestroy, DoCheck {\n  // tslint:disable:no-output-on-prefix\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\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    if (event.target && event.target.track) {\n      const cues: TextTrackCue[] = event.target.track.cues;\n\n      this.ref.nativeElement.cues = cues;\n\n      this.updateCuePoints(cues);\n    } else if (event.target && event.target.textTracks && event.target.textTracks.length) {\n        const cues: TextTrackCue[] = event.target.textTracks[0].cues;\n        this.ref.nativeElement.cues = cues;\n        this.updateCuePoints(cues);\n    }\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(this.onEnter$.subscribe(this.onEnter.bind(this)));\n\n      this.onExit$ = fromEvent(cues[i], VgEvents.VG_EXIT);\n      this.cuesSubscriptions.push(this.onExit$.subscribe(this.onExit.bind(this)));\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\n    if (this.ref.nativeElement.track && this.ref.nativeElement.track.cues) {\n      const changes = 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  Output,\n  Component,\n  EventEmitter,\n  ElementRef,\n  HostBinding,\n  QueryList,\n  AfterContentInit,\n  ContentChildren, ViewEncapsulation, OnDestroy\n} from '@angular/core';\nimport { VgAPI } from '../services/vg-api';\nimport { VgFullscreenAPI } from '../services/vg-fullscreen-api';\nimport { VgUtils } from '../services/vg-utils';\nimport { VgMedia } from '../vg-media/vg-media';\nimport { Subscription } from 'rxjs';\nimport { VgControlsHidden } from '../services/vg-controls-hidden';\n\n@Component({\n  selector: 'vg-player',\n  encapsulation: ViewEncapsulation.None,\n  template: `<ng-content></ng-content>`,\n  styles: [`\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  providers: [VgAPI, VgFullscreenAPI, VgControlsHidden]\n})\n// tslint:disable:component-class-suffix\n // tslint:disable:no-output-on-prefix\nexport class VgPlayer 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\n  @Output()\n  onPlayerReady: EventEmitter<any> = new EventEmitter();\n\n  @Output()\n  onMediaReady: EventEmitter<any> = new EventEmitter();\n\n  @ContentChildren(VgMedia)\n  medias: QueryList<VgMedia>;\n\n  subscriptions: Subscription[] = [];\n\n  constructor(ref: ElementRef, public api: VgAPI, public fsAPI: VgFullscreenAPI, private controlsHidden: VgControlsHidden) {\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(this.fsAPI.onChangeFullscreen.subscribe(this.onChangeFullscreen.bind(this)));\n    this.subscriptions.push(this.controlsHidden.isHidden.subscribe(this.onHideControls.bind(this)));\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 ? VgUtils.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 { IMediaElement } from './i-media-element';\nimport { AudioTrackList, VideoTrackList } from '../track-types';\nimport { MSMediaKeyNeededEvent, MSGraphicsTrust, MSMediaKeys } from './deperecated';\n\n\n\n\nexport class VgMediaElement implements IMediaElement {\n\n \n  id: string;\n  elem: any;\n  get audioTracks(): AudioTrackList { return null; }\n  autoplay: boolean;\n  buffered: TimeRanges;\n  controls: boolean;\n  crossOrigin: string | any;\n  currentSrc: string;\n  currentTime: number;\n\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  msGraphicsTrustStatus: MSGraphicsTrust;\n  msKeys: MSMediaKeys;\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\n  msClearEffects(): void {\n  }\n\n  msGetAsCastingSource(): any {\n    return null;\n  }\n  // @ts-ignore\n  msInsertAudioEffect(activatableClassId: string, effectRequired: boolean, config?: any): void {\n  }\n  // @ts-ignore\n  msSetMediaKeys(mediaKeys: MSMediaKeys): void {\n  }\n  // @ts-ignore\n  msSetMediaProtectionManager(mediaProtectionManager?: any): void {\n  }\n\n  pause(): void {\n  }\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(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void {\n  }\n}\n","// tslint:disable-next-line:no-reference\n///<reference path='./google.ima.ts'/>\nimport { Component, ElementRef, Input, HostBinding, ViewEncapsulation, OnInit, OnDestroy, Output, EventEmitter } from '@angular/core';\nimport { IPlayable } from '../core/vg-media/i-playable';\nimport { VgAPI } from '../core/services/vg-api';\nimport { VgEvents } from '../core/events/vg-events';\nimport { VgFullscreenAPI } from '../core/services/vg-fullscreen-api';\nimport { Subscription } from 'rxjs';\n\n\n // tslint:disable:no-output-on-prefix\n// tslint:disable:ban-types\n// tslint:disable:component-class-suffix\n@Component({\n  selector: 'vg-ima-ads',\n  encapsulation: ViewEncapsulation.None,\n  template: `<div class=\"vg-ima-ads\"></div>`,\n  styles: [`\n        vg-ima-ads {\n            position: absolute;\n            width: 100%;\n            height: 100%;\n            z-index: 300;\n        }\n        vg-ima-ads .vg-ima-ads {\n            position: absolute;\n            width: 100%;\n            height: 100%;\n            pointer-events: none;\n        }\n    ` ]\n})\n\nexport class VgImaAds implements OnInit, OnDestroy {\n  @Input() vgFor: string;\n  @Input() vgNetwork: string;\n  @Input() vgUnitPath: string;\n  @Input() vgCompanion: string;\n\n  @Input() vgCompanionSize: Array<Number>;\n  @Input() vgAdTagUrl: string;\n  @Input() vgSkipButton: string;\n\n\n  @Output() onAdStart: EventEmitter<boolean> = new EventEmitter();\n  @Output() onAdStop: EventEmitter<boolean> = new EventEmitter();\n  @Output() onSkipAd: EventEmitter<boolean> = new EventEmitter();\n\n  elem: HTMLElement;\n  target: IPlayable;\n  ima: Ima;\n  isFullscreen = false;\n  skipButton: HTMLElement;\n\n  subscriptions: Subscription[] = [];\n\n  @HostBinding('style.display') displayState = 'none';\n\n  constructor(ref: ElementRef, public API: VgAPI, public fsAPI: VgFullscreenAPI) {\n    this.elem = ref.nativeElement;\n    this.onContentEnded = this.onContentEnded.bind(this);\n  }\n\n  ngOnInit() {\n    if (this.API.isPlayerReady) {\n      this.onPlayerReady();\n    } else {\n      this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n    }\n  }\n\n  onPlayerReady() {\n    if (typeof google === 'undefined') {\n      this.onMissingGoogleImaLoader();\n      return;\n    }\n\n    this.target = this.API.getMediaById(this.vgFor);\n\n    this.initializations();\n\n    this.subscriptions.push(this.target.subscriptions.ended.subscribe(this.onContentEnded.bind(this)));\n    this.subscriptions.push(this.target.subscriptions.play.subscribe(this.onUpdateState.bind(this)));\n\n    this.subscriptions.push(this.fsAPI.onChangeFullscreen.subscribe(this.onChangeFullscreen.bind(this)));\n\n    this.ima.adsLoader.addEventListener(\n      google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,\n      this.onAdsManagerLoaded.bind(this),\n      false\n    );\n    this.ima.adsLoader.addEventListener(\n      google.ima.AdErrorEvent.Type.AD_ERROR,\n      this.onAdError.bind(this),\n      false\n    );\n\n    this.loadAds();\n  }\n\n  initializations() {\n    this.ima = new Ima(this.elem);\n\n    if (this.vgSkipButton) {\n      this.skipButton = document.querySelector(this.vgSkipButton) as HTMLElement;\n      this.skipButton.style.display = 'none';\n      this.skipButton.addEventListener('click', this.onClickSkip.bind(this));\n      this.elem.insertBefore(this.skipButton, this.elem.firstChild);\n    }\n\n    window.addEventListener('resize', () => {\n      const w = this.API.videogularElement.offsetWidth;\n      const h = this.API.videogularElement.offsetHeight;\n\n      if (this.ima.adsManager) {\n        if (this.isFullscreen) {\n          this.ima.adsManager.resize(w, h, google.ima.ViewMode.FULLSCREEN);\n        } else {\n          this.ima.adsManager.resize(w, h, google.ima.ViewMode.NORMAL);\n        }\n      }\n    });\n  }\n\n  loadAds() {\n    if (this.vgCompanion) {\n      googletag.cmd.push(\n        () => {\n          const adUnitPath: string = '/' + this.vgNetwork + '/' + this.vgUnitPath;\n          const slot: googletag.Slot = googletag.defineSlot(adUnitPath, this.vgCompanionSize, this.vgCompanion);\n\n          if (slot) {\n            slot.addService(googletag.companionAds());\n            slot.addService(googletag.pubads());\n\n            googletag\n              .companionAds()\n              .setRefreshUnfilledSlots(true);\n\n            googletag\n              .pubads()\n              .enableVideoAds();\n\n            googletag.enableServices();\n          }\n        }\n      );\n    }\n  }\n\n  onUpdateState(event: any) {\n    switch (event.type) {\n      case VgEvents.VG_PLAY:\n        if (!this.ima.adsLoaded) {\n          this.API.pause();\n          this.ima.adDisplayContainer.initialize();\n          this.requestAds(this.vgAdTagUrl);\n          this.ima.adsLoaded = true;\n        }\n        break;\n    }\n  }\n\n  requestAds(adTagUrl: string) {\n    // Show only to get computed style in pixels\n    this.show();\n\n    const adsRequest = new google.ima.AdsRequest();\n    const computedStyle = window.getComputedStyle(this.elem);\n    adsRequest.adTagUrl = adTagUrl;\n\n    adsRequest.linearAdSlotWidth = parseInt(computedStyle.width, 10);\n    adsRequest.linearAdSlotHeight = parseInt(computedStyle.height, 10);\n    adsRequest.nonLinearAdSlotWidth = parseInt(computedStyle.width, 10);\n    adsRequest.nonLinearAdSlotHeight = parseInt(computedStyle.height, 10);\n\n    this.ima.adsLoader.requestAds(adsRequest);\n  }\n\n  onAdsManagerLoaded(evt: google.ima.AdsManagerLoadedEvent) {\n    this.show();\n    this.ima.adsManager = evt.getAdsManager(this.target);\n    this.processAdsManager(this.ima.adsManager);\n  }\n  // @ts-ignore\n  processAdsManager(adsManager: google.ima.AdsManager) {\n    const w = this.API.videogularElement.offsetWidth;\n    const h = this.API.videogularElement.offsetHeight;\n\n    // Attach the pause/resume events.\n    this.ima.adsManager.addEventListener(\n      google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED,\n      this.onContentPauseRequested.bind(this),\n      false\n    );\n    this.ima.adsManager.addEventListener(\n      google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED,\n      this.onContentResumeRequested.bind(this),\n      false\n    );\n    this.ima.adsManager.addEventListener(\n      google.ima.AdEvent.Type.SKIPPABLE_STATE_CHANGED,\n      this.onSkippableStateChanged.bind(this),\n      false\n    );\n    this.ima.adsManager.addEventListener(\n      google.ima.AdEvent.Type.ALL_ADS_COMPLETED,\n      this.onAllAdsComplete.bind(this),\n      false\n    );\n    this.ima.adsManager.addEventListener(\n      google.ima.AdEvent.Type.COMPLETE,\n      this.onAdComplete.bind(this),\n      false\n    );\n    this.ima.adsManager.addEventListener(\n      google.ima.AdErrorEvent.Type.AD_ERROR,\n      this.onAdError.bind(this),\n      false\n    );\n\n    this.ima.adsManager.init(w, h, google.ima.ViewMode.NORMAL);\n    this.ima.adsManager.start();\n  }\n\n  onSkippableStateChanged() {\n    const isSkippable = this.ima.adsManager.getAdSkippableState();\n\n    if (isSkippable) {\n      this.skipButton.style.display = 'block';\n    } else {\n      this.skipButton.style.display = 'none';\n    }\n  }\n\n  onClickSkip() {\n    this.ima.adsManager.skip();\n    this.onSkipAd.emit(true);\n  }\n\n  onContentPauseRequested() {\n    this.show();\n    this.API.pause();\n    this.onAdStop.emit(true);\n  }\n\n  onContentResumeRequested() {\n    this.API.play();\n    this.onAdStart.emit(true);\n    this.hide();\n  }\n  // @ts-ignore\n  onAdError(evt) {\n    if (this.ima.adsManager) {\n      this.ima.adsManager.destroy();\n    }\n    this.hide();\n    this.API.play();\n    this.onAdStop.emit(true);\n  }\n\n  onAllAdsComplete() {\n    this.hide();\n    // The last ad was a post-roll\n    if (this.ima.adsManager.getCuePoints().join().indexOf('-1') >= 0) {\n      this.API.pause(); // it was stop() in Videogular v1\n      this.onAdStop.emit(true);\n    }\n  }\n\n  onAdComplete() {\n    // TODO: Update view with current ad count\n    this.ima.currentAd++;\n    this.onAdStop.emit(true);\n  }\n\n  show() {\n    window.dispatchEvent(new CustomEvent(VgEvents.VG_START_ADS));\n    this.displayState = 'block';\n  }\n\n  hide() {\n    window.dispatchEvent(new CustomEvent(VgEvents.VG_END_ADS));\n    this.displayState = 'none';\n  }\n\n  onContentEnded() {\n    this.ima.adsLoader.contentComplete();\n    this.onAdStop.emit(true);\n  }\n\n  onChangeFullscreen(fsState: boolean) {\n    if (!this.fsAPI.nativeFullscreen) {\n      this.isFullscreen = fsState;\n    }\n  }\n\n  private onMissingGoogleImaLoader() {\n    this.hide();\n    this.API.play();\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach(s => s.unsubscribe());\n  }\n}\n\n\nexport class Ima {\n  adDisplayContainer: google.ima.AdDisplayContainer;\n  adsLoader: google.ima.AdsLoader;\n  adsManager: google.ima.AdsManager;\n  adsLoaded: boolean;\n  currentAd: number;\n\n  constructor(imaAdsElement: HTMLElement) {\n    this.adDisplayContainer = new google.ima.AdDisplayContainer(imaAdsElement);\n    this.adsLoader = new google.ima.AdsLoader(this.adDisplayContainer);\n\n    this.adsManager = null;\n    this.adsLoaded = false;\n    this.currentAd = 0;\n  }\n}\n","import {\n  Component, OnInit, Input, ElementRef, HostListener, ViewEncapsulation, OnDestroy,\n  HostBinding\n} from '@angular/core';\nimport { VgAPI } from '../core/services/vg-api';\nimport { VgStates } from '../core/states/vg-states';\nimport { Subscription } from 'rxjs';\nimport { VgFullscreenAPI } from '../core/services/vg-fullscreen-api';\nimport { VgControlsHidden } from '../core/services/vg-controls-hidden';\n\n@Component({\n  selector: 'vg-overlay-play',\n  encapsulation: ViewEncapsulation.None,\n  template: `<div class=\"vg-overlay-play\"\n                    [class.native-fullscreen]=\"isNativeFullscreen\"\n                    [class.controls-hidden]=\"areControlsHidden\">\n                   <div class=\"overlay-play-container\"\n                        [class.vg-icon-play_arrow]=\"getState() !== 'playing'\">\n                   </div>\n               </div>`,\n  styles: [`\n        vg-overlay-play {\n            z-index: 200;\n        }\n        vg-overlay-play.is-buffering {\n            display: none;\n        }\n        vg-overlay-play .vg-overlay-play {\n            transition: all 0.5s;\n            cursor: pointer;\n            position: absolute;\n            display: block;\n            color: white;\n            width: 100%;\n            height: 100%;\n            font-size: 80px;\n            filter: alpha(opacity=60);\n            opacity: 0.6;\n        }\n        vg-overlay-play .vg-overlay-play.native-fullscreen.controls-hidden {\n            cursor: none;\n        }\n        vg-overlay-play .vg-overlay-play .overlay-play-container.vg-icon-play_arrow {\n            pointer-events: none;\n            width: 100%;\n            height: 100%;\n            position: absolute;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-size: 80px;\n        }\n        vg-overlay-play .vg-overlay-play:hover {\n            filter: alpha(opacity=100);\n            opacity: 1;\n        }\n        vg-overlay-play .vg-overlay-play:hover .overlay-play-container.vg-icon-play_arrow:before {\n            transform: scale(1.2);\n        }\n    ` ]\n})\n// tslint:disable:component-class-suffix\nexport class VgOverlayPlay implements OnInit, OnDestroy {\n  @Input() vgFor: string;\n  elem: HTMLElement;\n  target: any;\n\n  isNativeFullscreen = false;\n  areControlsHidden = false;\n\n  subscriptions: Subscription[] = [];\n\n  @HostBinding('class.is-buffering') isBuffering = false;\n\n  constructor(ref: ElementRef, public API: VgAPI, public fsAPI: VgFullscreenAPI, private controlsHidden: VgControlsHidden) {\n    this.elem = ref.nativeElement;\n  }\n\n  ngOnInit() {\n    if (this.API.isPlayerReady) {\n      this.onPlayerReady();\n    } else {\n      this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n    }\n  }\n\n  onPlayerReady() {\n    this.target = this.API.getMediaById(this.vgFor);\n    this.subscriptions.push(this.fsAPI.onChangeFullscreen.subscribe(this.onChangeFullscreen.bind(this)));\n    this.subscriptions.push(this.controlsHidden.isHidden.subscribe(this.onHideControls.bind(this)));\n    this.subscriptions.push(\n      this.target.subscriptions.bufferDetected.subscribe(\n        isBuffering => this.onUpdateBuffer(isBuffering)\n      )\n    );\n  }\n\n  onUpdateBuffer(isBuffering) {\n    this.isBuffering = isBuffering;\n  }\n\n  onChangeFullscreen(fsState: boolean) {\n    if (this.fsAPI.nativeFullscreen) {\n      this.isNativeFullscreen = fsState;\n    }\n  }\n\n  onHideControls(hidden: boolean) {\n    this.areControlsHidden = hidden;\n  }\n\n  @HostListener('click')\n  onClick() {\n    const state = this.getState();\n\n    switch (state) {\n      case VgStates.VG_PLAYING:\n        this.target.pause();\n        break;\n\n      case VgStates.VG_PAUSED:\n      case VgStates.VG_ENDED:\n        this.target.play();\n        break;\n    }\n  }\n\n  getState() {\n    let state = VgStates.VG_PAUSED;\n\n    if (this.target) {\n      if (this.target.state instanceof Array) {\n        for (let i = 0, l = this.target.state.length; i < l; i++) {\n          if (this.target.state[i] === VgStates.VG_PLAYING) {\n            state = VgStates.VG_PLAYING;\n            break;\n          }\n        }\n      } else {\n        state = this.target.state;\n      }\n    }\n\n    return state;\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach(s => s.unsubscribe());\n  }\n}\n","import { VgMediaElement } from './vg-media/vg-media-element';\nimport { NgModule } from '@angular/core';\nimport { VgControlsHidden } from './services/vg-controls-hidden';\nimport { VgFullscreenAPI } from './services/vg-fullscreen-api';\nimport { VgUtils } from './services/vg-utils';\nimport { VgAPI } from './services/vg-api';\nimport { VgMedia } from './vg-media/vg-media';\nimport { VgCuePoints } from './vg-cue-points/vg-cue-points';\nimport { VgPlayer } from './vg-player/vg-player';\nimport { VgStates } from './states/vg-states';\nimport { VgEvents } from './events/vg-events';\n\n\nexport * from './vg-media/i-media-element';\nexport * from './vg-media/i-playable';\nexport * from './vg-media/vg-media-element';\nexport * from './services/vg-api';\nexport * from './services/vg-fullscreen-api';\nexport * from './services/vg-utils';\nexport * from './services/vg-controls-hidden';\nexport * from './events/vg-events';\nexport * from './states/vg-states';\nexport * from './vg-media/vg-media';\nexport * from '../buffering/vg-buffering';\nexport * from '../controls/vg-controls';\nexport * from '../controls/vg-fullscreen/vg-fullscreen';\nexport * from '../controls/vg-mute/vg-mute';\nexport * from '../controls/vg-volume/vg-volume';\nexport * from '../controls/vg-play-pause/vg-play-pause';\nexport * from '../controls/vg-playback-button/vg-playback-button';\nexport * from '../controls/vg-scrub-bar/vg-scrub-bar';\nexport * from '../controls/vg-scrub-bar/vg-scrub-bar-buffering-time/vg-scrub-bar-buffering-time';\nexport * from '../controls/vg-scrub-bar/vg-scrub-bar-cue-points/vg-scrub-bar-cue-points';\nexport * from '../controls/vg-scrub-bar/vg-scrub-bar-current-time/vg-scrub-bar-current-time';\nexport * from '../controls/vg-time-display/vg-time-display';\nexport * from '../controls/vg-track-selector/vg-track-selector';\nexport * from '../controls/vg-quality-selector/vg-quality-selector';\nexport * from '../ima-ads/vg-ima-ads';\nexport * from '../overlay-play/vg-overlay-play';\nexport * from './vg-cue-points/vg-cue-points';\nexport * from './vg-player/vg-player';\n\n\n\nexport interface BitrateOption {\n  qualityIndex: number;\n  width: number;\n  height: number;\n  bitrate: number;\n  mediaType: string;\n  label?: string;\n}\nexport interface AudioTrack {\n  enabled: boolean;\n  readonly id: string;\n  kind: string;\n  readonly label: string;\n  language: string;\n  readonly sourceBuffer: SourceBuffer | null;\n}\n\ndeclare var AudioTrack: {\n  prototype: AudioTrack;\n  new (): AudioTrack;\n};\n\nexport interface AudioTrackListEventMap {\n  addtrack: TrackEvent;\n  change: Event;\n  removetrack: TrackEvent;\n}\n\n/** Used to represent a list of the audio tracks contained within a given HTML media element, with each track represented by a separate AudioTrack object in the list. */\nexport interface AudioTrackList extends EventTarget {\n  readonly length: number;\n  onaddtrack: ((this: AudioTrackList, ev: TrackEvent) => any) | null;\n  onchange: ((this: AudioTrackList, ev: Event) => any) | null;\n  onremovetrack: ((this: AudioTrackList, ev: TrackEvent) => any) | null;\n  getTrackById(id: string): AudioTrack | null;\n  item(index: number): AudioTrack;\n  addEventListener<K extends keyof AudioTrackListEventMap>(\n    type: K,\n    listener: (this: AudioTrackList, ev: AudioTrackListEventMap[K]) => any,\n    options?: boolean | AddEventListenerOptions\n  ): void;\n  addEventListener(\n    type: string,\n    listener: EventListenerOrEventListenerObject,\n    options?: boolean | AddEventListenerOptions\n  ): void;\n  removeEventListener<K extends keyof AudioTrackListEventMap>(\n    type: K,\n    listener: (this: AudioTrackList, ev: AudioTrackListEventMap[K]) => any,\n    options?: boolean | EventListenerOptions\n  ): void;\n  removeEventListener(\n    type: string,\n    listener: EventListenerOrEventListenerObject,\n    options?: boolean | EventListenerOptions\n  ): void;\n  [index: number]: AudioTrack;\n}\n\ndeclare var AudioTrackList: {\n  prototype: AudioTrackList;\n  new (): AudioTrackList;\n};\n\n/** A single video track from a <video> element. */\nexport interface VideoTrack {\n  readonly id: string;\n  kind: string;\n  readonly label: string;\n  language: string;\n  selected: boolean;\n  readonly sourceBuffer: SourceBuffer | null;\n}\n\ndeclare var VideoTrack: {\n  prototype: VideoTrack;\n  new (): VideoTrack;\n};\n\nexport interface VideoTrackListEventMap {\n  addtrack: TrackEvent;\n  change: Event;\n  removetrack: TrackEvent;\n}\n\n/** Used to represent a list of the video tracks contained within a <video> element, with each track represented by a separate VideoTrack object in the list. */\nexport interface VideoTrackList extends EventTarget {\n  readonly length: number;\n  onaddtrack: ((this: VideoTrackList, ev: TrackEvent) => any) | null;\n  onchange: ((this: VideoTrackList, ev: Event) => any) | null;\n  onremovetrack: ((this: VideoTrackList, ev: TrackEvent) => any) | null;\n  readonly selectedIndex: number;\n  getTrackById(id: string): VideoTrack | null;\n  item(index: number): VideoTrack;\n  addEventListener<K extends keyof VideoTrackListEventMap>(\n    type: K,\n    listener: (this: VideoTrackList, ev: VideoTrackListEventMap[K]) => any,\n    options?: boolean | AddEventListenerOptions\n  ): void;\n  addEventListener(\n    type: string,\n    listener: EventListenerOrEventListenerObject,\n    options?: boolean | AddEventListenerOptions\n  ): void;\n  removeEventListener<K extends keyof VideoTrackListEventMap>(\n    type: K,\n    listener: (this: VideoTrackList, ev: VideoTrackListEventMap[K]) => any,\n    options?: boolean | EventListenerOptions\n  ): void;\n  removeEventListener(\n    type: string,\n    listener: EventListenerOrEventListenerObject,\n    options?: boolean | EventListenerOptions\n  ): void;\n  [index: number]: VideoTrack;\n}\n\ndeclare var VideoTrackList: {\n  prototype: VideoTrackList;\n  new (): VideoTrackList;\n};\n\n\n\n@NgModule({\n  declarations: [VgMedia, VgCuePoints, VgPlayer],\n  exports: [VgMedia, VgCuePoints, VgPlayer],\n  providers: [VgAPI, VgFullscreenAPI, VgUtils, VgControlsHidden, VgStates, VgEvents]\n})\nexport class VgCoreModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { VgImaAds } from './vg-ima-ads';\n\n@NgModule({\n  imports: [CommonModule],\n  declarations: [\n    VgImaAds\n  ],\n  exports: [\n    VgImaAds\n  ]\n})\nexport class VgImaAdsModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { VgOverlayPlay } from './vg-overlay-play';\n\n\n@NgModule({\n  imports: [CommonModule],\n  declarations: [\n    VgOverlayPlay\n  ],\n  exports: [\n    VgOverlayPlay\n  ]\n})\nexport class VgOverlayPlayModule { }\n","import {\n  Directive,\n  ElementRef,\n  Input,\n  SimpleChanges,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  EventEmitter\n} from '@angular/core';\nimport { VgAPI } from '../../core/services/vg-api';\nimport { Subscription } from 'rxjs';\nimport { IDRMLicenseServer } from '../vg-streaming.module';\nimport { BitrateOption } from '../../core/vg-core.module';\n\ndeclare let dashjs;\n\n@Directive({\n  selector: '[vgDash]',\n  exportAs: 'vgDash'\n})\n// tslint:disable:directive-class-suffix\n // tslint:disable:no-output-on-prefix\n // tslint:disable:no-string-literal\nexport class VgDASH implements OnInit, OnChanges, OnDestroy {\n  @Input() vgDash: string;\n  @Input() vgDRMToken: string;\n  @Input() vgDRMLicenseServer: IDRMLicenseServer;\n\n\n  @Output() onGetBitrates: EventEmitter<BitrateOption[]> = new EventEmitter();\n\n  vgFor: string;\n  target: any;\n  dash: any;\n\n  subscriptions: Subscription[] = [];\n\n  constructor(private ref: ElementRef, public API: VgAPI) { }\n\n  ngOnInit() {\n    if (this.API.isPlayerReady) {\n      this.onPlayerReady();\n    } else {\n      this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n    }\n  }\n\n  onPlayerReady() {\n    this.vgFor = this.ref.nativeElement.getAttribute('vgFor');\n    this.target = this.API.getMediaById(this.vgFor);\n    this.createPlayer();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n\n    if (changes['vgDash'] && changes['vgDash'].currentValue) {\n      this.createPlayer();\n    } else {\n      this.destroyPlayer();\n    }\n  }\n\n  createPlayer() {\n    if (this.dash) {\n      this.destroyPlayer();\n    }\n\n    // It's a DASH source\n    if (this.vgDash && (\n      (this.vgDash.indexOf('.mpd') > -1) ||\n      (this.vgDash.indexOf('mpd-time-csf') > -1))\n    ) {\n      let drmOptions;\n\n      if (this.vgDRMLicenseServer) {\n        drmOptions = this.vgDRMLicenseServer;\n\n        if (this.vgDRMToken) {\n          for (const drmServer in drmOptions) {\n            if (drmServer.hasOwnProperty(drmServer)) {\n              drmOptions[drmServer].httpRequestHeaders = { Authorization: this.vgDRMToken };\n            }\n          }\n        }\n      }\n\n      this.dash = dashjs.MediaPlayer().create();\n      this.dash.getDebug().setLogToBrowserConsole(false);\n      this.dash.initialize(this.ref.nativeElement);\n      this.dash.setAutoPlay(false);\n\n      this.dash.on(dashjs.MediaPlayer.events.STREAM_INITIALIZED, () => {\n        const audioList = this.dash.getBitrateInfoListFor('audio');\n        const videoList = this.dash.getBitrateInfoListFor('video');\n\n        if (audioList.length > 1) {\n          audioList.forEach(item => item.qualityIndex = ++item.qualityIndex);\n          audioList.unshift({\n            qualityIndex: 0,\n            width: 0,\n            height: 0,\n            bitrate: 0,\n            mediaType: 'video',\n            label: 'AUTO'\n          });\n\n          this.onGetBitrates.emit(audioList);\n        }\n\n        if (videoList.length > 1) {\n          videoList.forEach(item => item.qualityIndex = ++item.qualityIndex);\n          videoList.unshift({\n            qualityIndex: 0,\n            width: 0,\n            height: 0,\n            bitrate: 0,\n            mediaType: 'video',\n            label: 'AUTO'\n          });\n\n          this.onGetBitrates.emit(videoList);\n        }\n      });\n\n      if (drmOptions) {\n        this.dash.setProtectionData(drmOptions);\n      }\n\n      this.dash.attachSource(this.vgDash);\n    } else {\n      if (this.target) {\n        this.target.pause();\n        this.target.seekTime(0);\n        this.ref.nativeElement.src = this.vgDash;\n      }\n    }\n  }\n\n  setBitrate(bitrate: BitrateOption) {\n    if (this.dash) {\n      if (bitrate.qualityIndex > 0) {\n        if (this.dash.getAutoSwitchQualityFor(bitrate.mediaType)) {\n          this.dash.setAutoSwitchQualityFor(bitrate.mediaType, false);\n        }\n\n        const nextIndex = bitrate.qualityIndex - 1;\n        this.dash.setQualityFor(bitrate.mediaType, nextIndex);\n      } else {\n        this.dash.setAutoSwitchQualityFor(bitrate.mediaType, true);\n      }\n    }\n  }\n\n  destroyPlayer() {\n    if (this.dash) {\n      this.dash.reset();\n      this.dash = null;\n    }\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach(s => s.unsubscribe());\n    this.destroyPlayer();\n  }\n}\n","import {\n  Directive,\n  ElementRef,\n  Input,\n  SimpleChanges,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  EventEmitter\n} from '@angular/core';\nimport { VgAPI } from '../../core/services/vg-api';\nimport { IHLSConfig } from './hls-config';\nimport { Subscription } from 'rxjs';\nimport { BitrateOption } from '../../core/vg-core.module';\n\ndeclare let Hls;\n\n@Directive({\n  selector: '[vgHls]',\n  exportAs: 'vgHls'\n})\n// tslint:disable:no-string-literal\n// tslint:disable:directive-class-suffix\n// tslint:disable:no-output-on-prefix\nexport class VgHLS implements OnInit, OnChanges, OnDestroy {\n  @Input() vgHls: string;\n  @Input() vgHlsHeaders: { [key: string]: string } = {};\n  @Output() onGetBitrates: EventEmitter<BitrateOption[]> = new EventEmitter();\n\n  vgFor: string;\n  target: any;\n  hls: any;\n  preload: boolean;\n  crossorigin: string;\n  config: IHLSConfig;\n\n  subscriptions: Subscription[] = [];\n\n  constructor(private ref: ElementRef, public API: VgAPI) { }\n\n  ngOnInit() {\n    if (this.API.isPlayerReady) {\n      this.onPlayerReady();\n    } else {\n      this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n    }\n  }\n\n  onPlayerReady() {\n    this.crossorigin = this.ref.nativeElement.getAttribute('crossorigin');\n    this.preload = this.ref.nativeElement.getAttribute('preload') !== 'none';\n    this.vgFor = this.ref.nativeElement.getAttribute('vgFor');\n\n    if (this.vgFor) {\n      this.target = this.API.getMediaById(this.vgFor);\n    } else {\n      this.target = this.API.getDefaultMedia();\n    }\n\n\n    this.config = {\n      autoStartLoad: this.preload\n    } as IHLSConfig;\n    // @ts-ignore\n    this.config.xhrSetup = (xhr, url) => {\n      // Send cookies\n      if (this.crossorigin === 'use-credentials') {\n        xhr.withCredentials = true;\n      }\n      for (const key of Object.keys(this.vgHlsHeaders)) {\n        xhr.setRequestHeader(key, this.vgHlsHeaders[key]);\n      }\n    };\n\n    this.createPlayer();\n\n    if (!this.preload) {\n      this.subscriptions.push(\n        this.API.subscriptions.play.subscribe(\n          () => {\n            if (this.hls) {\n              this.hls.startLoad(0);\n            }\n          }\n        )\n      );\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n\n    if (changes['vgHls'] && changes['vgHls'].currentValue) {\n      this.createPlayer();\n    } else if (changes['vgHlsHeaders'] && changes['vgHlsHeaders'].currentValue) {\n      // Do nothing. We don't want to create a or destroy a player if the headers change.\n    } else {\n      this.destroyPlayer();\n    }\n  }\n\n  createPlayer() {\n    if (this.hls) {\n      this.destroyPlayer();\n    }\n\n    // It's a HLS source\n    if (this.vgHls && this.vgHls.indexOf('m3u8') > -1 && Hls.isSupported() && this.API.isPlayerReady) {\n      const video: HTMLVideoElement = this.ref.nativeElement;\n\n      this.hls = new Hls(this.config);\n      // @ts-ignore\n      this.hls.on(Hls.Events.MANIFEST_PARSED, (event, data) => {\n        const videoList = [];\n\n        videoList.push({\n          qualityIndex: 0,\n          width: 0,\n          height: 0,\n          bitrate: 0,\n          mediaType: 'video',\n          label: 'AUTO'\n        });\n\n        data.levels.forEach((item, index) => {\n          videoList.push({\n            qualityIndex: ++index,\n            width: item.width,\n            height: item.height,\n            bitrate: item.bitrate,\n            mediaType: 'video',\n            label: item.name\n          });\n        });\n\n        this.onGetBitrates.emit(videoList);\n      }\n      );\n      // @ts-ignore\n      this.hls.on(Hls.Events.LEVEL_LOADED, (event, data) => {\n        this.target.isLive = data.details.live;\n      }\n      );\n\n      this.hls.loadSource(this.vgHls);\n      this.hls.attachMedia(video);\n    } else {\n      if (this.target && !!this.target.pause) {\n        this.target.pause();\n        this.target.seekTime(0);\n        this.ref.nativeElement.src = this.vgHls;\n      }\n    }\n  }\n\n  setBitrate(bitrate: BitrateOption) {\n    if (this.hls) {\n      this.hls.nextLevel = bitrate.qualityIndex - 1;\n    }\n  }\n\n  destroyPlayer() {\n    if (this.hls) {\n      this.hls.destroy();\n      this.hls = null;\n    }\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach(s => s.unsubscribe());\n    this.destroyPlayer();\n    delete this.hls;\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { VgDASH } from './vg-dash/vg-dash';\nimport { VgHLS } from './vg-hls/vg-hls';\n\nexport interface IDRMLicenseServer {\n  [index: string]: {\n    serverURL: string;\n  };\n}\n\n\nexport * from './vg-dash/vg-dash';\nexport * from './vg-hls/vg-hls';\n\n@NgModule({\n  imports: [CommonModule],\n  declarations: [\n    VgDASH, VgHLS\n  ],\n  exports: [\n    VgDASH, VgHLS\n  ]\n})\nexport class VgStreamingModule { }\n","\n/*\n * Public API Surface of ngx-videogular\n */\n\n\n // Modules\nexport * from './lib/buffering/vg-buffering.module';\nexport * from './lib/controls/vg-controls.module';\nexport * from './lib/core/vg-core.module';\nexport * from './lib/ima-ads/ima-ads.module';\nexport * from './lib/overlay-play/vg-overlay-play.module';\nexport * from './lib/streaming/vg-streaming.module';\n\n\n// Required for Ivy Build of Library\n\n// export * from './lib/buffering/vg-buffering';\n// export * from './lib/controls/vg-controls';\n// export * from './lib/controls/vg-fullscreen/vg-fullscreen';\n// export * from './lib/controls/vg-mute/vg-mute';\n// export * from './lib/controls/vg-play-pause/vg-play-pause';\n// export * from './lib/controls/vg-playback-button/vg-playback-button';\n// export * from './lib/controls/vg-volume/vg-volume';\n// export * from './lib/controls/vg-quality-selector/vg-quality-selector';\n// export * from './lib/controls/vg-scrub-bar/vg-scrub-bar';\n// export * from './lib/controls/vg-scrub-bar/vg-scrub-bar-buffering-time/vg-scrub-bar-buffering-time';\n// export * from './lib/controls/vg-scrub-bar/vg-scrub-bar-cue-points/vg-scrub-bar-cue-points';\n// export * from './lib/controls/vg-scrub-bar/vg-scrub-bar-current-time/vg-scrub-bar-current-time';\n// export * from './lib/controls/vg-time-display/vg-time-display';\n// export * from './lib/controls/vg-track-selector/vg-track-selector';\n// export * from './lib/core/vg-player/vg-player';\n// export * from './lib/core/vg-media/vg-media';\n// export * from './lib/core/vg-cue-points/vg-cue-points';\n// export * from './lib/ima-ads/vg-ima-ads';\n// export * from './lib/overlay-play/vg-overlay-play';\n\n\n\n\n\n\n\n\n\n\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}