{"version":3,"file":"angular-video-js-player.mjs","sources":["../../../projects/video-js/src/lib/video-js.component.ts","../../../projects/video-js/src/public-api.ts","../../../projects/video-js/src/angular-video-js-player.ts"],"sourcesContent":["import { NgFor } from '@angular/common';\r\nimport { Component, Input, OnDestroy } from '@angular/core';\r\ndeclare let videojs: any;\r\n\r\nenum PlayerKey {\r\n  arrowLeft = 'ArrowLeft',\r\n  arrowRight = 'ArrowRight',\r\n  arrowDown = 'ArrowDown',\r\n  arrowUp = 'ArrowUp',\r\n  space = 'Space'\r\n}\r\n\r\ninterface Caption {\r\n  url: string;\r\n  lang?: string;\r\n  label?: string\r\n}\r\n\r\ninterface Video {\r\n  url: string;\r\n  label?: string;\r\n}\r\n\r\n\r\n@Component({\r\n  selector: 'lib-video-js',\r\n  standalone: true,\r\n  imports: [NgFor],\r\n  template: `\r\n <video id=\"video-player\" class=\"video-js vjs-default-skin\" autoplay=\"true\">\r\n  <source *ngFor=\"let item of videoUrl\" src=\"{{ item.url }}\" type=\"application/x-mpegURL\" [attr.label]=\"item.label??''\" />\r\n  <ng-container *ngFor=\"let caption of captionList\">\r\n    <track kind=\"captions\" src=\"{{caption.url}}\" srclang=\"{{caption?.lang}}\" label=\"{{caption?.label}}\" />\r\n  </ng-container>\r\n </video>\r\n  `,\r\n  styles: []\r\n})\r\n\r\nexport class VideoJsComponent implements OnDestroy {\r\n  player!: any;\r\n  @Input() videoUrl: Video[] = [];\r\n  @Input() captionList: Caption[] = []\r\n  @Input() volumeEnableByKey!: boolean;\r\n  @Input() playPauseByKey!: boolean;\r\n  @Input() fullScreenModeEnable!: boolean;\r\n  @Input() qualitySelector!: boolean;\r\n  qualitySelectorUrl = 'https://unpkg.com/@silvermine/videojs-quality-selector/dist/js/silvermine-videojs-quality-selector.min.js';\r\n  videoJsUrl = 'https://vjs.zencdn.net/7.12.3/video.min.js';\r\n  setTimer: any;\r\n\r\n  constructor() {\r\n    this.loadScript();\r\n  }\r\n\r\n  createScript(url: string, cb: Function = () => { }): void {\r\n    const body = document.body as HTMLDivElement;\r\n    const script = document.createElement('script');\r\n    script.innerHTML = '';\r\n    script.addEventListener(\"load\", () => cb());\r\n    script.src = url;\r\n    script.defer = true;\r\n    body.appendChild(script);\r\n  }\r\n\r\n  loadScript(): void {\r\n    const vjs = this.videoJsUrl;\r\n    this.createScript(vjs, () => {\r\n      this.createScript(this.qualitySelectorUrl);\r\n      this.setTimer = setTimeout(() => {\r\n        this.onPlayVideo();\r\n      }, 300)\r\n    });\r\n  }\r\n\r\n  onPlayVideo(): void {\r\n    const options = this.setVideoConfig();\r\n    this.player = videojs('video-player', options);\r\n    this.qualitySelector && !this.player.controlBar.childNameIndex_?.QualitySelector && this.player.controlBar.addChild('QualitySelector');\r\n  }\r\n\r\n  setVideoConfig() {\r\n    return {\r\n      preload: \"auto\",\r\n      autoplay: true,\r\n      controls: true,\r\n      responsive: true,\r\n      html5: {\r\n        nativeTextTracks: false,\r\n      },\r\n      userActions: {\r\n        hotkeys: (event: KeyboardEvent) => {\r\n          this.onPressHotkeys(event);\r\n        },\r\n        doubleClick: () => {\r\n          if (this.player.isFullscreen() && this.fullScreenModeEnable) {\r\n            this.player.exitFullscreen();\r\n          } else {\r\n            this.fullScreenModeEnable && this.player.requestFullscreen();\r\n          }\r\n        },\r\n      },\r\n    };\r\n  }\r\n\r\n  onPressHotkeys(event: KeyboardEvent): void {\r\n    if (event.code === PlayerKey.space && this.playPauseByKey) {\r\n      if (this.player.paused()) {\r\n        this.player.play();\r\n      } else {\r\n        this.player.pause();\r\n      }\r\n    }\r\n    if (event.code === PlayerKey.arrowLeft && this.volumeEnableByKey) {\r\n      const backward = this.player.currentTime() - 10;\r\n      this.player.currentTime(backward);\r\n    }\r\n    if (event.code === PlayerKey.arrowRight && this.volumeEnableByKey) {\r\n      const forward = this.player.currentTime() + 10;\r\n      this.player.currentTime(forward);\r\n    }\r\n    if (event.code === PlayerKey.arrowUp && this.volumeEnableByKey) {\r\n      this.player.volume(this.player.volume() + 0.1);\r\n    }\r\n    if (event.code === PlayerKey.arrowDown && this.volumeEnableByKey) {\r\n      this.player.volume(this.player.volume() - 0.1);\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.player.dispose();\r\n    clearTimeout(this.setTimer);\r\n  }\r\n\r\n}\r\n","/*\n * Public API Surface of video-js\n */\n\nexport * from './lib/video-js.component';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}