{"version":3,"file":"49ing-ngx-videogular-controls.mjs","sources":["../../../../libs/ngx-videogular/controls/src/lib/components/vg-controls/vg-controls.component.ts","../../../../libs/ngx-videogular/controls/src/lib/components/vg-volume/vg-volume.component.ts","../../../../libs/ngx-videogular/controls/src/lib/components/vg-track-selector/vg-track-selector.component.ts","../../../../libs/ngx-videogular/controls/src/lib/components/vg-time-display/vg-time-display.component.ts","../../../../libs/ngx-videogular/controls/src/lib/components/vg-scrub-bar/vg-scrub-bar.component.ts","../../../../libs/ngx-videogular/controls/src/lib/components/vg-quality-selector/vg-quality-selector.component.ts","../../../../libs/ngx-videogular/controls/src/lib/components/vg-playback-button/vg-playback-button.component.ts","../../../../libs/ngx-videogular/controls/src/lib/components/vg-play-pause/vg-play-pause.component.ts","../../../../libs/ngx-videogular/controls/src/lib/components/vg-mute/vg-mute.component.ts","../../../../libs/ngx-videogular/controls/src/lib/components/vg-fullscreen/vg-fullscreen.component.ts","../../../../libs/ngx-videogular/controls/src/lib/components/vg-scrub-bar/vg-scrub-bar-buffering-time/vg-scrub-bar-buffering-time.component.ts","../../../../libs/ngx-videogular/controls/src/lib/components/vg-scrub-bar/vg-scrub-bar-cue-points/vg-scrub-bar-cue-points.component.ts","../../../../libs/ngx-videogular/controls/src/lib/components/vg-scrub-bar/vg-scrub-bar-current-time/vg-scrub-bar-current-time.component.ts","../../../../libs/ngx-videogular/controls/src/lib/controls.module.ts","../../../../libs/ngx-videogular/controls/src/49ing-ngx-videogular-controls.ts"],"sourcesContent":["import {\n  Component,\n  Input,\n  OnInit,\n  ElementRef,\n  HostBinding,\n  AfterViewInit,\n  ViewEncapsulation,\n  OnDestroy,\n} from '@angular/core';\nimport { Observable, Subscription } from 'rxjs';\nimport { fromEvent } from 'rxjs';\nimport { VgApiService, VgControlsHiddenService, VgStates } from '@49ing/ngx-videogular/core';\n\n@Component({\n  selector: 'vg-controls',\n  encapsulation: ViewEncapsulation.None,\n  template: `<ng-content></ng-content>`,\n  styles: [\n    `\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  ],\n})\nexport class VgControlsComponent 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\n  mouseMove$: Observable<any>;\n  touchStart$: Observable<any>;\n  mouseClick$: Observable<any>;\n\n  subscriptions: Subscription[] = [];\n  // @ts-ignore\n  constructor(\n    private API: VgApiService,\n    ref: ElementRef,\n    private hidden: VgControlsHiddenService\n  ) {\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    this.mouseClick$ = fromEvent(this.API.videogularElement, 'click');\n    this.subscriptions.push(this.mouseClick$.subscribe(this.show.bind(this)));\n\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    if (!this.target) {\n      return;\n    }\n    \n    if (this.target.subscriptions) {\n      this.subscriptions.push(\n        this.target.subscriptions.play.subscribe(this.onPlay.bind(this))\n      );\n      this.subscriptions.push(\n        this.target.subscriptions.pause.subscribe(this.onPause.bind(this))\n      );\n      this.subscriptions.push(\n        this.target.subscriptions.startAds.subscribe(this.onStartAds.bind(this))\n      );\n      this.subscriptions.push(\n        this.target.subscriptions.endAds.subscribe(this.onEndAds.bind(this))\n      );\n    }\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 {\n  Component,\n  Input,\n  ElementRef,\n  HostListener,\n  OnInit,\n  ViewEncapsulation,\n  ViewChild,\n  OnDestroy,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { VgApiService } from '@49ing/ngx-videogular/core';\n\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    >\n      <div class=\"volumeBackground\" [ngClass]=\"{ dragging: isDragging }\">\n        <div\n          class=\"volumeValue\"\n          [style.width]=\"getVolume() * (100 - 15) + '%'\"\n        ></div>\n        <div\n          class=\"volumeKnob\"\n          [style.left]=\"getVolume() * (100 - 15) + '%'\"\n        ></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;\n        height: 15px;\n        left: 0;\n        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 VgVolumeComponent 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: VgApiService) {\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 {\n  Component,\n  ElementRef,\n  OnInit,\n  Input,\n  ViewEncapsulation,\n  OnDestroy,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { VgApiService } from '@49ing/ngx-videogular/core';\n\nexport interface Option {\n  id: string;\n  label: string;\n  selected: boolean;\n}\n\n@Component({\n  selector: 'vg-track-selector',\n  encapsulation: ViewEncapsulation.None,\n  template: `\n    <div class=\"container\">\n      <div\n        class=\"track-selected\"\n        [class.vg-icon-closed_caption]=\"!trackSelected\"\n      >\n        {{ trackSelected || '' }}\n      </div>\n      <select\n        class=\"trackSelector\"\n        (change)=\"selectTrack($event.target.value)\"\n        tabindex=\"0\"\n        aria-label=\"track selector\"\n        [attr.aria-valuetext]=\"ariaValue\"\n      >\n        <option\n          *ngFor=\"let track of tracks\"\n          [value]=\"track.id\"\n          [selected]=\"track.selected === true\"\n        >\n          {{ track.label }}\n        </option>\n      </select>\n    </div>\n  `,\n  styles: [\n    `\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        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  ],\n})\nexport class VgTrackSelectorComponent 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: VgApiService) {\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    const subs: Array<Option> = Array.from(\n      (this.API.getMasterMedia().elem as HTMLMediaElement).children\n    )\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(\n      (item: Option) => item.selected === true\n    )[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(\n      (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  Input,\n  ElementRef,\n  OnInit,\n  ViewEncapsulation,\n  OnDestroy,\n  Pipe,\n  PipeTransform,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { VgApiService } from '@49ing/ngx-videogular/core';\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    let 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, <string>ss);\n    result = result.replace(/mm/g, <string>mm);\n    result = result.replace(/hh/g, <string>hh);\n\n    return result;\n  }\n}\n\n@Component({\n  selector: 'vg-time-display',\n  encapsulation: ViewEncapsulation.None,\n  template: `\n    <span *ngIf=\"(target?.isLive || isWebRTC || isHLS) && !ignoreLive\">LIVE</span>\n    <span *ngIf=\"!target?.isLive && !isWebRTC && !isHLS\">{{\n      getTime() | vgUtc: vgFormat\n    }}</span>\n    <span *ngIf=\"(isWebRTC || isHLS) && ignoreLive\">{{\n      getTime() | vgUtc: vgFormat\n    }}</span>\n    <ng-content></ng-content>\n  `,\n  styles: [\n    `\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  ],\n})\nexport class VgTimeDisplayComponent implements OnInit, OnDestroy {\n  @Input() vgFor: string;\n  @Input() vgProperty = 'current';\n  @Input() vgFormat = 'mm:ss';\n\n  /**\n   * We want to ignore live in WebRTC/HLS when we want to display current time\n   */\n  @Input() ignoreLive: boolean = false;\n  @Input() isWebRTC: boolean = false;\n  @Input() isHLS: boolean = false;\n  @Input() duration: number = 0; // timestamp\n\n  elem: HTMLElement;\n  target: any;\n\n  subscriptions: Subscription[] = [];\n\n  constructor(ref: ElementRef, public API: VgApiService) {\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\n  /**\n   * In case of WebRTC add duration - how much video is streaming already)\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) ? 0 : this.isWebRTC ? this.duration * 1000 : t;\n    }\n\n    return t;\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach((s) => s.unsubscribe());\n  }\n}\n","import {\n  Component,\n  ElementRef,\n  Input,\n  EventEmitter,\n  HostListener,\n  OnInit,\n  ViewEncapsulation,\n  HostBinding,\n  OnDestroy,\n  Output,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { VgControlsHiddenService, VgApiService, VgStates } from '@49ing/ngx-videogular/core';\n\n@Component({\n  selector: 'vg-scrub-bar',\n  encapsulation: ViewEncapsulation.None,\n  template: `\n    <div\n      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    >\n      <ng-content></ng-content>\n    </div>\n  `,\n  styles: [\n    `\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  ],\n})\nexport class VgScrubBarComponent implements OnInit, OnDestroy {\n  @HostBinding('class.hide') hideScrubBar = false;\n\n  @Input() disabled = false;\n  @Input() vgFor: string;\n  @Input() vgSlider = true;\n  @Input() livePosition: number = 0;\n\n  elem: HTMLElement;\n  target: any;\n  isSeeking = false;\n  wasPlaying = false;\n\n  subscriptions: Subscription[] = [];\n\n  /**\n   * Seekable stream required for seeking\n   */\n  @Output() switchChannel: EventEmitter<number> = new EventEmitter();\n  @Output() seeking: EventEmitter<boolean> = new EventEmitter();\n\n  constructor(\n    ref: ElementRef,\n    public API: VgApiService,\n    vgControlsHiddenState: VgControlsHiddenService\n  ) {\n    this.elem = ref.nativeElement;\n    this.subscriptions.push(\n      vgControlsHiddenState.isHidden.subscribe((hide) =>\n        this.onHideScrubBar(hide)\n      )\n    );\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    if (!this.target) {\n      return;\n    }\n\n    this.target.subscriptions.loadedMetadata.subscribe((e) => {\n        // Set init seek back live duration\n        this.target.capturedSeekBackLiveDuration = this.target.duration;\n      });\n  }\n\n  protected seekStart(offset: number) {\n    if (this.isWebRTC()) {\n      const percentage = Math.max(\n        Math.min((offset * 100) / this.elem.scrollWidth, 99.9),\n\n        0\n      );\n\n      this.target.pause();\n\n      this.switchChannel.emit(percentage);\n\n      return;\n    }\n\n    if (this.target.canPlay) {\n      this.isSeeking = true;\n      this.seeking.emit(this.isSeeking);\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(\n        Math.min((offset * 100) / this.getWidth(), 99.9),\n        0\n      );\n      this.target.time.current = (percentage * this.getTotalTime()) / 100;\n      this.seekTime(percentage);\n    }\n  }\n\n  protected captureSeekBackLiveDuration() {\n    if (this.isLiveTime()) {\n      this.target.capturedSeekBackLiveDuration = this.target.duration;\n    }\n  }\n\n  protected getTotalTime() {\n    if (!this.target.isLive) {\n      return this.target.time.total;\n    } else {\n      if (this.isLiveTime()) {\n        /*\n         * In live mode we need to check duration because\n         * time total is not live updated\n         */\n        return this.target.duration * 1000;\n      } else {\n        /*\n         * In live mode when we seek back we need to use captured\n         * duration at that moment and do division with that duration time\n         */\n        return (\n          (this.target?.capturedSeekBackLiveDuration ?? this.target.duration) *\n          1000\n        );\n      }\n    }\n  }\n\n  protected seekEnd(offset: number) {\n    this.isSeeking = false;\n    this.seeking.emit(this.isSeeking);\n    if (this.target.canPlay) {\n      const percentage = Math.max(\n        Math.min((offset * 100) / this.getWidth(), 99.9),\n        0\n      );\n      this.seekTime(percentage);\n\n      if (this.wasPlaying) {\n        this.wasPlaying = false;\n        this.target.play();\n      }\n    }\n  }\n\n  protected getWidth(): number {\n    /*\n     In live mode scrollWidth\n     has hidden overflow and that's why we have\n     bad percentage calculation\n    */\n    if (!this.target.isLive && !this.target.elem?.src.includes('blob')) {\n      return this.elem.scrollWidth;\n    } else {\n      return this.elem.clientWidth;\n    }\n  }\n\n  protected seekTime(percentage: number): void {\n    if (!this.target.isLive) {\n      // Regular calculation\n      this.target.seekTime(percentage, true);\n    } else {\n      if (this.isLiveTime()) {\n        // Regular calculation\n        this.target.seekTime(percentage, true);\n      } else {\n        /*\n         * In live mode when we seek back we need to use captured\n         * duration at that moment and do division with that duration time\n         */\n        const currentTime =\n          percentage * this.target?.capturedSeekBackLiveDuration * 10;\n        this.target.time.current = currentTime;\n        this.target.seekTime(currentTime / 1000, false);\n      }\n    }\n  }\n\n  protected touchEnd() {\n    this.isSeeking = false;\n    this.seeking.emit(this.isSeeking);\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 && !this.disabled) {\n      if (this.target.isLive) {\n        this.captureSeekBackLiveDuration();\n      }\n      if (!this.vgSlider) {\n        this.seekEnd($event.offsetX);\n      } else {\n        this.seekStart($event.offsetX);\n      }\n    }\n  }\n\n  @HostListener('document:mousemove', ['$event'])\n  onMouseMoveScrubBar($event: any) {\n    if (this.target) {\n      if (this.target.isLive) {\n        this.captureSeekBackLiveDuration();\n      }\n      if (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) {\n        this.captureSeekBackLiveDuration();\n      }\n      if (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 && !this.disabled) {\n      if (this.target.isLive) {\n        this.captureSeekBackLiveDuration();\n      }\n      if (!this.vgSlider) {\n        this.seekEnd(this.getTouchOffset($event));\n      } else {\n        this.seekStart(this.getTouchOffset($event));\n      }\n    }\n  }\n\n  @HostListener('document:touchmove', ['$event'])\n  onTouchMoveScrubBar($event: any) {\n    if (this.target) {\n      if (this.target.isLive) {\n        this.captureSeekBackLiveDuration();\n      }\n      if (this.vgSlider && this.isSeeking) {\n        this.seekMove(this.getTouchOffset($event));\n      }\n    }\n  }\n  // @ts-ignore\n  @HostListener('document:touchcancel', ['$event']) onTouchCancelScrubBar(\n    _$event: any\n  ) {\n    if (this.target) {\n      if (this.vgSlider && this.isSeeking) {\n        this.touchEnd();\n      }\n    }\n  }\n  // @ts-ignore\n  @HostListener('document:touchend', ['$event']) onTouchEndScrubBar(\n    _$event: any\n  ) {\n    if (this.target) {\n      if (this.vgSlider && this.isSeeking) {\n        this.touchEnd();\n      }\n    }\n  }\n\n  /** Original code have this function but there is no point to have something like this\n   *  inside vg-scrub-bar for us since we manipulate seek time.\n   *  Plus naming (arrowAdjustVolume) in library is completely wrong.\n   *\n   * @HostListener('keydown', ['$event'])\n   * arrowAdjustVolume(event: KeyboardEvent) {\n   *  if (this.target) {\n   *    if (event.key === 'ArrowUp' || event.key === 'ArrowRight') {\n   *      event.preventDefault();\n   *      this.target.seekTime((this.target.time.current + 5000) / 1000, false);\n   *    } else if (event.key === 'ArrowLeft' || event.key === 'ArrowDown') {\n   *      event.preventDefault();\n   *      this.target.seekTime((this.target.time.current - 5000) / 1000, false);\n   *    }\n   *  }\n   * }\n   */\n\n  isLiveTime() {\n    if (this.target && this.target.isLive) {\n      return this.target.time.current >= this.livePosition * 1000;\n    }\n  }\n\n  getPercentage() {\n    if (this.target) {\n      return (\n        Math.round((this.target.time.current * 100) / this.getTotalTime()) + '%'\n      );\n    } else {\n      return '0%';\n    }\n  }\n\n  onHideScrubBar(hide: boolean) {\n    this.hideScrubBar = hide;\n  }\n\n  private isWebRTC() {\n    const target = this.API.getDefaultMedia();\n    const video = document.getElementById(target?.id) as HTMLVideoElement;\n    return video?.id.startsWith('video-webrtc-');\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,\n  Output,\n  EventEmitter,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { VgApiService, BitrateOptions } from '@49ing/ngx-videogular/core';\n\n@Component({\n  selector: 'vg-quality-selector',\n  encapsulation: ViewEncapsulation.None,\n  template: `\n    <div class=\"container\">\n      <div class=\"quality-selected\" [class.vg-icon-hd]=\"!bitrateSelected\">\n        {{ bitrateSelected?.label }}\n      </div>\n      <select\n        class=\"quality-selector\"\n        (change)=\"selectBitrate($event.target.value)\"\n        tabindex=\"0\"\n        aria-label=\"quality selector\"\n        [attr.aria-valuetext]=\"ariaValue\"\n      >\n        <option\n          *ngFor=\"let bitrate of bitrates\"\n          [value]=\"bitrate.qualityIndex\"\n          [selected]=\"bitrate.qualityIndex === bitrateSelected?.qualityIndex\"\n        >\n          {{ bitrate.label }}\n        </option>\n      </select>\n    </div>\n  `,\n  styles: [\n    `\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        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  ],\n})\nexport class VgQualitySelectorComponent\n  implements OnInit, OnChanges, OnDestroy {\n  @Input() bitrates: BitrateOptions[];\n\n  @Output() onBitrateChange: EventEmitter<BitrateOptions> = new EventEmitter();\n\n  bitrateSelected: BitrateOptions;\n\n  elem: HTMLElement;\n  target: any;\n\n  subscriptions: Subscription[] = [];\n\n  ariaValue: string;\n\n  constructor(ref: ElementRef, public API: VgApiService) {\n    this.elem = ref.nativeElement;\n  }\n\n  ngOnInit() {}\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.bitrates.currentValue && changes.bitrates.currentValue.length) {\n      this.bitrates.forEach(\n        (item) =>\n          (item.label =\n            item.label || Math.round(item.bitrate / 1000).toString())\n      );\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 {\n  Component,\n  Input,\n  ElementRef,\n  HostListener,\n  OnInit,\n  ViewEncapsulation,\n  OnDestroy,\n  ChangeDetectorRef,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { VgApiService } from '@49ing/ngx-videogular/core';\n\n@Component({\n  selector: 'vg-playback-button',\n  encapsulation: ViewEncapsulation.None,\n  template: ` <span\n    class=\"button\"\n    tabindex=\"0\"\n    role=\"button\"\n    aria-label=\"playback speed button\"\n    [attr.aria-valuetext]=\"ariaValue\"\n  >\n    {{ getPlaybackRate() }}x\n  </span>`,\n  styles: [\n    `\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  ],\n})\nexport class VgPlaybackButtonComponent 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(\n    ref: ElementRef,\n    public API: VgApiService,\n    public cdr: ChangeDetectorRef\n  ) {\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(\n        this.API.playerReadyEvent.subscribe(() => this.onPlayerReady())\n      );\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.playbackValues.forEach((playbackValue, index) => {\n          if (playbackValue.length === 1) {\n             this.playbackValues[index] = playbackValue + '.0';\n          }\n     });\n\n    this.playbackIndex = ++this.playbackIndex % this.playbackValues.length;\n\n    if (this.target instanceof VgApiService) {\n      this.target.playbackRate = this.playbackValues[this.playbackIndex];\n    } else {\n      this.target.playbackRate[this.vgFor] = this.playbackValues[\n        this.playbackIndex\n      ];\n    }\n\n    this.detectChanges();\n  }\n\n  getPlaybackRate() {\n    this.ariaValue = this.target ? this.target.playbackRate : 1.0;\n    return this.ariaValue;\n  }\n\n  detectChanges() {\n    try {\n      this.cdr.detectChanges();\n    } catch (e) {\n      console.warn(e);\n    }\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach((s) => s.unsubscribe());\n  }\n}\n","import {\n  Component,\n  ElementRef,\n  HostListener,\n  OnInit,\n  Input,\n  ViewEncapsulation,\n  OnDestroy,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { VgApiService, VgStates } from '@49ing/ngx-videogular/core';\n\n@Component({\n  selector: 'vg-play-pause',\n  encapsulation: ViewEncapsulation.None,\n  template: ` <div\n    class=\"icon\"\n    [class.vg-icon-pause]=\"getState() === 'playing'\"\n    [class.vg-icon-play_arrow]=\"\n      getState() === 'paused' || getState() === 'ended'\n    \"\n    tabindex=\"0\"\n    role=\"button\"\n    [attr.aria-label]=\"getState() === 'paused' ? 'play' : 'pause'\"\n    [attr.aria-valuetext]=\"ariaValue\"\n  ></div>`,\n  styles: [\n    `\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  ],\n})\nexport class VgPlayPauseComponent 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: VgApiService) {\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\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 {\n  Component,\n  Input,\n  ElementRef,\n  HostListener,\n  OnInit,\n  ViewEncapsulation,\n  OnDestroy,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { VgApiService } from '@49ing/ngx-videogular/core';\n\n@Component({\n  selector: 'vg-mute',\n  encapsulation: ViewEncapsulation.None,\n  template: ` <div\n    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    `\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  ],\n})\nexport class VgMuteComponent 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: VgApiService) {\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    if (!this.target) {\n      return;\n    }\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  ElementRef,\n  HostListener,\n  OnDestroy,\n  OnInit,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { VgApiService, VgFullscreenApiService } from '@49ing/ngx-videogular/core';\n\n@Component({\n  selector: 'vg-fullscreen',\n  encapsulation: ViewEncapsulation.None,\n  template: ` <div\n    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    `\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      vg-fullscreen .icon {\n        pointer-events: none;\n      }\n    `,\n  ],\n})\nexport class VgFullscreenComponent 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(\n    ref: ElementRef,\n    public API: VgApiService,\n    public fsAPI: VgFullscreenApiService\n  ) {\n    this.elem = ref.nativeElement;\n    this.subscriptions.push(\n      this.fsAPI.onChangeFullscreen.subscribe(\n        this.onChangeFullscreen.bind(this)\n      )\n    );\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\n  onChangeFullscreen(fsState: boolean) {\n    this.ariaValue = fsState ? 'fullscreen mode' : 'normal mode';\n    this.isFullscreen = fsState;\n  }\n\n  @HostListener('click')\n  async onClick() {\n    await this.changeFullscreenState();\n  }\n\n  @HostListener('keydown', ['$event'])\n  async onKeyDown(event: KeyboardEvent) {\n    // On press Enter (13) or Space (32)\n    if (event.keyCode === 13 || event.keyCode === 32) {\n      event.preventDefault();\n      await this.changeFullscreenState();\n    }\n  }\n\n  async changeFullscreenState() {\n    let element = this.target;\n\n    if (this.target instanceof VgApiService) {\n      element = null;\n    }\n\n    await this.fsAPI.toggleFullscreen(element);\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach((s) => s.unsubscribe());\n  }\n}\n","import {\n  Component,\n  Input,\n  ElementRef,\n  OnInit,\n  ViewEncapsulation,\n  OnDestroy,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { VgApiService } from '@49ing/ngx-videogular/core';\n\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    `\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  ],\n})\nexport class VgScrubBarBufferingTimeComponent 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: VgApiService) {\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\n  getBufferTime() {\n    let bufferTime = '0%';\n\n    if (this.target?.buffered?.length) {\n      if (this.target.time.total === 0) {\n        bufferTime = '0%';\n      } else {\n        bufferTime =\n          (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 { Subscription } from 'rxjs';\nimport { VgApiService } from '@49ing/ngx-videogular/core';\n\n\n// tslint:disable-next-line: no-conflicting-lifecycle\n@Component({\n  selector: 'vg-scrub-bar-cue-points',\n  encapsulation: ViewEncapsulation.None,\n  template: `\n    <div class=\"cue-point-container\">\n      <span\n        *ngFor=\"let cp of cuePoints\"\n        [style.width]=\"cp.$$style?.width\"\n        [style.left]=\"cp.$$style?.left\"\n        class=\"cue-point\"\n      ></span>\n    </div>\n  `,\n  styles: [\n    `\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  ],\n})\nexport class VgScrubBarCuePointsComponent\n  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: VgApiService) {\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    if (!this.target) {\n      return;\n    }\n    \n    const onTimeUpdate = this.target.subscriptions.loadedMetadata;\n    this.subscriptions.push(\n      onTimeUpdate.subscribe(this.onLoadedMetadata.bind(this))\n    );\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 =\n          this.vgCuePoints[i].endTime >= 0\n            ? this.vgCuePoints[i].endTime\n            : 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 =\n            (cuePointDuration * 100) / this.target.time.total + '%';\n          position =\n            (this.vgCuePoints[i].startTime * 100) /\n              Math.round(this.target.time.total / 1000) +\n            '%';\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 {\n  Component,\n  Input,\n  ElementRef,\n  OnInit,\n  ViewEncapsulation,\n  OnDestroy\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { VgApiService } from '@49ing/ngx-videogular/core';\n\n@Component({\n  selector: 'vg-scrub-bar-current-time',\n  encapsulation: ViewEncapsulation.None,\n  template: `<div class=\"background\" [style.width]=\"getPercentage()\"></div>\n    <span class=\"slider\" *ngIf=\"vgSlider\"></span>`,\n  styles: [\n    `\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      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  ],\n})\nexport class VgScrubBarCurrentTimeComponent implements OnInit, OnDestroy {\n  @Input() vgFor: string;\n  @Input() vgSlider = false;\n\n  @Input() livePosition: number = 0;\n\n  @Input() isWebRTC: boolean;\n\n  elem: HTMLElement;\n  target: any;\n\n  subscriptions: Subscription[] = [];\n\n  constructor(ref: ElementRef, public API: VgApiService) {\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\n  protected getTotalTime() {\n    if (!this.target.isLive) {\n      return this.target.time.total;\n    } else {\n      if (this.isLiveTime()) {\n        /*\n         * In live mode we need to check duration because\n         * time total is not live updated\n         */\n        return this.target.duration * 1000;\n      } else {\n        /*\n         * In live mode when we seek back we need to use captured\n         * duration at that moment and do division with that duration time\n         */\n        return (\n          (this.target?.capturedSeekBackLiveDuration ?? this.target.duration) *\n          1000\n        );\n      }\n    }\n  }\n\n  isLiveTime() {\n    if (this.target && this.target.isLive) {\n      return this.target.time.current >= this.livePosition * 1000;\n    }\n  }\n\n  /**\n   * In case of WebRTC return 100%\n   */\n  getPercentage() {\n    if (this.isWebRTC) {\n      return '100%';\n    } else if (this.target) {\n      return (\n        Math.min(\n          Math.round((this.target.time.current * 100) / this.getTotalTime()),\n          100\n        ) + '%'\n      );\n    } else {\n      return '0%';\n    }\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 { VgControlsComponent } from './components/vg-controls/vg-controls.component';\nimport { VgVolumeComponent } from './components/vg-volume/vg-volume.component';\nimport { VgTrackSelectorComponent } from './components/vg-track-selector/vg-track-selector.component';\nimport { VgTimeDisplayComponent, VgUtcPipe } from './components/vg-time-display/vg-time-display.component';\nimport { VgScrubBarComponent } from './components/vg-scrub-bar/vg-scrub-bar.component';\nimport { VgQualitySelectorComponent } from './components/vg-quality-selector/vg-quality-selector.component';\nimport { VgPlaybackButtonComponent } from './components/vg-playback-button/vg-playback-button.component';\nimport { VgPlayPauseComponent } from './components/vg-play-pause/vg-play-pause.component';\nimport { VgMuteComponent } from './components/vg-mute/vg-mute.component';\nimport { VgFullscreenComponent } from './components/vg-fullscreen/vg-fullscreen.component';\nimport { VgCoreModule } from '@49ing/ngx-videogular/core';\nimport { VgScrubBarBufferingTimeComponent } from './components/vg-scrub-bar/vg-scrub-bar-buffering-time/vg-scrub-bar-buffering-time.component';\nimport { VgScrubBarCuePointsComponent } from './components/vg-scrub-bar/vg-scrub-bar-cue-points/vg-scrub-bar-cue-points.component';\nimport { VgScrubBarCurrentTimeComponent } from './components/vg-scrub-bar/vg-scrub-bar-current-time/vg-scrub-bar-current-time.component';\n\nconst components = [\n  VgControlsComponent,\n  VgVolumeComponent,\n  VgTrackSelectorComponent,\n  VgTimeDisplayComponent,\n  VgScrubBarComponent,\n  VgQualitySelectorComponent,\n  VgPlaybackButtonComponent,\n  VgPlayPauseComponent,\n  VgMuteComponent,\n  VgFullscreenComponent,\n  VgUtcPipe,\n  VgScrubBarBufferingTimeComponent,\n  VgScrubBarCuePointsComponent,\n  VgScrubBarCurrentTimeComponent\n]\n\n@NgModule({\n  imports: [CommonModule, VgCoreModule],\n  declarations: [...components],\n  exports: [...components],\n})\nexport class VgControlsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}