{"version":3,"file":"ngx-lite-video.mjs","sources":["../../../projects/ngx-lite-video/src/lib/services/ngx-lite-video-general-service.service.ts","../../../projects/ngx-lite-video/src/lib/components/ngx-lite-vimeo/ngx-lite-vimeo.component.ts","../../../projects/ngx-lite-video/src/lib/components/ngx-lite-vimeo/ngx-lite-vimeo.component.html","../../../projects/ngx-lite-video/src/lib/components/ngx-lite-vimeo/ngx-lite-vimeo.module.ts","../../../projects/ngx-lite-video/src/lib/components/ngx-lite-youtube/ngx-lite-youtube.component.ts","../../../projects/ngx-lite-video/src/lib/components/ngx-lite-youtube/ngx-lite-youtube.component.html","../../../projects/ngx-lite-video/src/lib/components/ngx-lite-youtube/ngx-lite-youtube.module.ts","../../../projects/ngx-lite-video/src/lib/components/index.ts","../../../projects/ngx-lite-video/src/ngx-lite-video.ts"],"sourcesContent":["import { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\nimport {\r\n  ThumbSize,\r\n  VimeoVideo,\r\n  VideoQualities,\r\n  VimeoLazyData,\r\n} from '../models';\r\nimport { Injectable, Optional } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, catchError, map, of } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class NgxLiteVideoGeneralService {\r\n  //#region Declerations\r\n  private readonly __youtubeSizes: VideoQualities = {\r\n    sd: 'sddefault',\r\n    medium: 'mqdefault',\r\n    high: 'hqdefault',\r\n    max: 'maxresdefault',\r\n  };\r\n  private readonly __thumbHelper: VideoQualities = {\r\n    max: 'thumbnail_large',\r\n    high: 'thumbnail_large',\r\n    medium: 'thumbnail_medium',\r\n    sd: 'thumbnail_small',\r\n  };\r\n  //#endregion\r\n\r\n  constructor(\r\n    private __domSanitizer: DomSanitizer,\r\n    @Optional() private __http: HttpClient\r\n  ) {}\r\n\r\n  //#region Methods\r\n  // This function returns the URL of a YouTube video thumbnail image of a specific size\r\n  // Parameters:\r\n  //   - videoId: string representing a YouTube video ID\r\n  //   - quality: ThumbSize enum value representing the desired thumbnail size\r\n  // Returns:\r\n  //   - A string representing the URL of the thumbnail image\r\n  getYouTubeBanner(videoId: string, quality: ThumbSize): string {\r\n    // Return the URL using string interpolation with the given videoId and quality size\r\n    // YouTube uses a specific format for their thumbnail URLs, hence the use of `https://img.youtube.com/vi/<videoId>/<size>.jpg`\r\n    return `https://img.youtube.com/vi/${videoId}/${this.__youtubeSizes[quality]}.jpg`;\r\n  }\r\n  // This function returns a sanitized YouTube video URL with specified parameters\r\n  // Parameters:\r\n  //   - videoId: string representing a YouTube video ID\r\n  //   - hasControls: boolean that determines whether or not to display controls on the embedded video player\r\n  //   - allowFullScreen: boolean that determines whether or not to allow fullscreen mode on the embedded video player\r\n  //   - loop: boolean that determines whether or not to loop the video\r\n  //   - start: number that represents the starting time of the video (in seconds)\r\n  //   - end: number that represents the ending time of the video (in seconds)\r\n  // Returns:\r\n  //   - A SafeUrl object representing the sanitized YouTube video URL\r\n  getYouTubeUrl(\r\n    videoId: string,\r\n    hasControls: boolean,\r\n    allowFullScreen: boolean,\r\n    loop: boolean,\r\n    start: number,\r\n    end: number\r\n  ): SafeUrl {\r\n    // Sanitize the URL using the Angular DomSanitizer service, since we're embedding it in our DOM\r\n    return this.__domSanitizer.bypassSecurityTrustResourceUrl(\r\n      `https://www.youtube-nocookie.com/embed/${videoId}?autoplay=1&controls=${\r\n        hasControls ? '1' : '0'\r\n      }${loop ? '&playlist=' + videoId + '&loop=1' : ''}${\r\n        start ? '&start=' + start : ''\r\n      }${end ? '&end=' + end : ''}${allowFullScreen ? '&fs=1' : '&fs=0'}`\r\n    );\r\n  }\r\n  // This function returns a Vimeo video URL with specified parameters\r\n  // Parameters:\r\n  //   - videoId: string representing a Vimeo video ID\r\n  //   - hasControls: boolean that determines whether or not to display controls on the embedded video player\r\n  //   - loop: boolean that determines whether or not to loop the video\r\n  //   - isBackground: boolean that determines whether or not the video is being used as a background\r\n  // Returns:\r\n  //   - A SafeUrl object representing the Vimeo video URL\r\n  getVimeoVideoUrl(\r\n    videoId: string,\r\n    hasControls: boolean,\r\n    loop: boolean,\r\n    isBackground: boolean\r\n  ): SafeUrl {\r\n    // Sanitize the URL using the Angular DomSanitizer service, since we're embedding it in our DOM\r\n    return this.__domSanitizer.bypassSecurityTrustResourceUrl(\r\n      `https://player.vimeo.com/video/${videoId}?autoplay=1${\r\n        hasControls ? '&controls=true' : '&controls=false'\r\n      }${loop ? '&loop=true' : ''}${isBackground ? '&background=true' : ''}`\r\n    );\r\n  }\r\n  // This function returns a banner representing the Vimeo video with the specified ID\r\n  // Parameters:\r\n  //   - videoId: string representing a Vimeo video ID\r\n  //   - quality: an enum type ThumbSize that determines the size of the thumbnail image to be used\r\n  // Returns:\r\n  //   - An Observable object containing an object with the banner source and title for the Vimeo video\r\n  getVimeoBanner(\r\n    videoId: string,\r\n    quality: ThumbSize\r\n  ): Observable<VimeoLazyData> {\r\n    // Get data about the Vimeo video from the Vimeo API using Angular's HttpClient service\r\n    return this.__http\r\n      .get<VimeoVideo[]>(`https://vimeo.com/api/v2/video/${videoId}.json`)\r\n      .pipe(\r\n        map((data: any) => ({\r\n          bannerSrc: `url(${data[0][this.__thumbHelper[quality]]})`,\r\n          title: data[0].title,\r\n        })),\r\n        catchError(() => {\r\n          return of({\r\n            bannerSrc: '',\r\n            title: '',\r\n          });\r\n        })\r\n      );\r\n  }\r\n  // This function checks if a video ID is provided or not\r\n  // Parameters:\r\n  //   - videoId: a string representing a Vimeo video ID\r\n  // Returns:\r\n  //   - void (nothing)\r\n  hasNoVideoId(videoId: string): void {\r\n    // If videoId is falsy (i.e., empty, undefined or null), throw an error indicating that videoId must be provided\r\n    if (!videoId) {\r\n      throw new Error('Video ID MUST be provided');\r\n    }\r\n  }\r\n  //#endregion\r\n}\r\n","import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  Input,\r\n  OnInit,\r\n  OnChanges,\r\n} from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { ThumbSize, VimeoLazyData } from '../../models';\r\nimport { NgxLiteVideoGeneralService } from '../../services/ngx-lite-video-general-service.service';\r\nimport { SafeUrl } from '@angular/platform-browser';\r\n\r\n@Component({\r\n  selector: 'ngx-lite-vimeo',\r\n  templateUrl: './ngx-lite-vimeo.component.html',\r\n  styleUrls: ['./ngx-lite-vimeo.component.scss'],\r\n  providers: [NgxLiteVideoGeneralService],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgxLiteVimeoComponent implements OnInit, OnChanges {\r\n  //#region Declerations\r\n  _showIframe$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n  _videoUrl!: SafeUrl;\r\n  _vimeoBanner$!: Observable<VimeoLazyData>;\r\n\r\n  /**\r\n   * Video ID to be viewed\r\n   * @type string\r\n   * @Required true\r\n   */\r\n  @Input() videoId!: string;\r\n  /**\r\n   * Lazy image quality\r\n   * @type ThumbSize\r\n   * @default 'high'\r\n   */\r\n  @Input() thumbQuality: ThumbSize = 'high';\r\n  /**\r\n   * Enables/disables showing title in lazy mode\r\n   * @type boolean\r\n   * @default false\r\n   */\r\n  @Input() showTitle: boolean = false;\r\n  /**\r\n   * Shows/hides video controls in iframe\r\n   * @type boolean\r\n   * @default true\r\n   */\r\n  @Input() hasControls: boolean = true;\r\n  /**\r\n   * Enables video looping\r\n   * @type boolean\r\n   * @default false\r\n   */\r\n  @Input() loop: boolean = false;\r\n  /**\r\n   * Enables vimeo background mode, please refer to (https://developer.vimeo.com/player/sdk/embed)\r\n   * @type boolean\r\n   * @default false\r\n   */\r\n  @Input() isBackground: boolean = false;\r\n  /**\r\n   * External styling class\r\n   * @type string\r\n   */\r\n  @Input() styleClass!: string;\r\n  //#endregion\r\n\r\n  constructor(private __ngxService: NgxLiteVideoGeneralService) {}\r\n\r\n  //#region Life Cycle Hooks\r\n  ngOnInit(): void {\r\n    this.init();\r\n  }\r\n\r\n  ngOnChanges(): void {\r\n    this.init();\r\n    this._showIframe$.next(false);\r\n  }\r\n  //#endregion\r\n\r\n  //#region Methods\r\n  // This method initializes the component by setting the '_vimeoBanner$'and '_videoUrl' properties based on the value of 'this.videoId'.\r\n  init(): void {\r\n    // Call the 'hasNoVideoId' method from the injected '__ngxService' service with the current value of 'this.videoId' as its argument,\r\n    // which checks if 'this.videoId' is defined and throws an error in case it isn't.\r\n    this.__ngxService.hasNoVideoId(this.videoId);\r\n\r\n    // Set the '_vimeoBanner$' variable to the result of calling the 'getVimeoBanner()' method from the injected '__ngxService' service\r\n    // passing it the current 'this.videoId' value and thumbnail quality ('this.thumbQuality') as its arguments. The 'getVimeoBanner()' method\r\n    // returns an observable that emits the URL of a Vimeo video's banner image based on the given 'this.videoId' and thumbnail quality.\r\n    this._vimeoBanner$ = this.__ngxService.getVimeoBanner(\r\n      this.videoId,\r\n      this.thumbQuality\r\n    );\r\n\r\n    // Set the '_videoUrl' variable to the result of calling the 'getVimeoVideoUrl()' method from the injected '__ngxService' service,\r\n    // passing it the current 'this.videoId' value as its first argument, and several boolean flags ('this.hasControls', 'this.loop',\r\n    // 'this.isBackground') as its remaining arguments. The 'getVimeoVideoUrl()' method creates a URL for a Vimeo video using\r\n    // embed codes and modifying it based on the supplied boolean values. The resulting URL is saved in the '_videoUrl' variable.\r\n    this._videoUrl = this.__ngxService.getVimeoVideoUrl(\r\n      this.videoId,\r\n      this.hasControls,\r\n      this.loop,\r\n      this.isBackground\r\n    );\r\n  }\r\n  //#endregion\r\n}\r\n","<div\r\n  *ngIf=\"_vimeoBanner$ | async as vimeoBanner\"\r\n  [ngStyle]=\"{ 'background-image': vimeoBanner.bannerSrc }\"\r\n  class=\"ngx-lite-video{{ styleClass ? ' ' + styleClass : '' }}\"\r\n  (click)=\"_showIframe$.next(true)\"\r\n  [ngClass]=\"{ 'ngx-lite-with-title': showTitle }\"\r\n>\r\n  <iframe\r\n    *ngIf=\"_showIframe$ | async\"\r\n    width=\"640\"\r\n    height=\"360\"\r\n    frameborder=\"0\"\r\n    allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\"\r\n    allowfullscreen\r\n    [src]=\"_videoUrl\"\r\n  ></iframe>\r\n\r\n  <!-- Play btn before iframe is loaded -->\r\n  <div class=\"ngx-lite-video__play\" *ngIf=\"!_showIframe$.value\">\r\n    <button class=\"vimeo-logo\" aria-label=\"Vimeo Play Button\"></button>\r\n  </div>\r\n\r\n  <!-- Title shown before iframe is loaded -->\r\n  <p *ngIf=\"showTitle && !_showIframe$.value\" class=\"ngx-lite-video__title\">\r\n    {{ vimeoBanner.title }}\r\n  </p>\r\n</div>\r\n","// Modules\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { HttpClientModule } from '@angular/common/http';\r\n// Components\r\nimport { NgxLiteVimeoComponent } from './ngx-lite-vimeo.component';\r\n\r\n@NgModule({\r\n  declarations: [NgxLiteVimeoComponent],\r\n  imports: [CommonModule, HttpClientModule],\r\n  exports: [NgxLiteVimeoComponent],\r\n})\r\nexport class NgxLiteVimeoModule {}\r\n","import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  Input,\r\n  OnChanges,\r\n  OnInit,\r\n} from '@angular/core';\r\nimport { SafeUrl } from '@angular/platform-browser';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { ThumbSize } from '../../models';\r\nimport { NgxLiteVideoGeneralService } from '../../services/ngx-lite-video-general-service.service';\r\n\r\n@Component({\r\n  selector: 'ngx-lite-youtube',\r\n  templateUrl: './ngx-lite-youtube.component.html',\r\n  styleUrls: ['./ngx-lite-youtube.component.scss'],\r\n  providers: [NgxLiteVideoGeneralService],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgxLiteYoutubeComponent implements OnInit, OnChanges {\r\n  //#region Declerations\r\n  _showIframe$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n  _bannerSrc!: string;\r\n  _videoUrl!: SafeUrl;\r\n\r\n  /**\r\n   * Video ID to be viewed\r\n   * @type string\r\n   * @Required true\r\n   */\r\n  @Input() videoId!: string;\r\n  /**\r\n   * Title to be displayed in lazy mode\r\n   * @type string\r\n   */\r\n  @Input() videoTitle!: string;\r\n  /**\r\n   * Lazy image quality\r\n   * @type ThumbSize\r\n   * @default 'high'\r\n   */\r\n  @Input() thumbQuality: ThumbSize = 'high';\r\n  /**\r\n   * Shows/hides video controls in iframe\r\n   * @type boolean\r\n   * @default true\r\n   */\r\n  @Input() hasControls: boolean = true;\r\n  /**\r\n   * Enables video looping\r\n   * @type boolean\r\n   * @default false\r\n   */\r\n  @Input() loop: boolean = false;\r\n  /**\r\n   * Sets starting video time (in seconds)\r\n   * @type number\r\n   */\r\n  @Input() start!: number;\r\n  /**\r\n   * Enables/disables fullscreen button in iframe\r\n   * @type boolean\r\n   * @default true\r\n   */\r\n  @Input() allowFullScreen: boolean = true;\r\n  /**\r\n   * Sets ending video time (in seconds)\r\n   * @type number\r\n   */\r\n  @Input() end!: number;\r\n  /**\r\n   * External styling class\r\n   * @type string\r\n   */\r\n  @Input() styleClass!: string;\r\n  //#endregion\r\n\r\n  constructor(private __ngxService: NgxLiteVideoGeneralService) {}\r\n\r\n  //#region Life Cycle Hooks\r\n  ngOnInit(): void {\r\n    this.init();\r\n  }\r\n\r\n  ngOnChanges(): void {\r\n    this.init();\r\n    this._showIframe$.next(false);\r\n  }\r\n  //#endregion\r\n\r\n  //#region Methods\r\n  // This method initializes the component by setting the `_bannerSrc` and `_videoUrl` properties based on the value of `this.videoId`.\r\n  init(): void {\r\n    // Call the `hasNoVideoId()` method from the injected `__ngxService` service with the current value of `this.videoId` as its argument,\r\n    // which checks if `this.videoId` is defined and throws an error in case it isn't.\r\n    this.__ngxService.hasNoVideoId(this.videoId);\r\n\r\n    // Set the `_bannerSrc` variable to a string that consists of a 'url()' CSS function with the result of calling the `getYouTubeBanner()` method\r\n    // from the injected `__ngxService` service as its argument. The `getYouTubeBanner()` method returns the URL of a YouTube video's banner image\r\n    // based on the given `this.videoId` and thumbnail quality (`this.thumbQuality`).\r\n    this._bannerSrc = `url(${this.__ngxService.getYouTubeBanner(\r\n      this.videoId,\r\n      this.thumbQuality\r\n    )})`;\r\n\r\n    // Set the `_videoUrl` variable to the result of calling the `getYouTubeUrl()` method from the injected `__ngxService` service,\r\n    // passing it the current `this.videoId` value as the first argument, and several boolean flags (`this.hasControls`, `this.allowFullScreen`,\r\n    // `this.loop`, `this.start`, `this.end`) as the remaining arguments. The `getYouTubeUrl()` method creates a URL for a YouTube video\r\n    // using embed codes and modifying the URL based on the supplied boolean values. The resulting URL is saved in the `_videoUrl` variable.\r\n    this._videoUrl = this.__ngxService.getYouTubeUrl(\r\n      this.videoId,\r\n      this.hasControls,\r\n      this.allowFullScreen,\r\n      this.loop,\r\n      this.start,\r\n      this.end\r\n    );\r\n  }\r\n  //#endregion\r\n}\r\n","<div\r\n  [ngStyle]=\"{ 'background-image': _bannerSrc }\"\r\n  class=\"ngx-lite-video{{ styleClass ? ' ' + styleClass : '' }}\"\r\n  (click)=\"_showIframe$.next(true)\"\r\n  [ngClass]=\"{ 'ngx-lite-with-title': videoTitle }\"\r\n>\r\n  <iframe\r\n    *ngIf=\"_showIframe$ | async\"\r\n    width=\"560\"\r\n    height=\"315\"\r\n    [src]=\"_videoUrl\"\r\n    title=\"YouTube video player\"\r\n    frameborder=\"0\"\r\n    allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture;\"\r\n    allowfullscreen\r\n  ></iframe>\r\n\r\n  <!-- Play btn before iframe is loaded -->\r\n  <div class=\"ngx-lite-video__play\" *ngIf=\"!_showIframe$.value\">\r\n    <button class=\"youtube-logo\" aria-label=\"YouTube Play Button\"></button>\r\n  </div>\r\n\r\n  <!-- Title shown before iframe is loaded -->\r\n  <p *ngIf=\"videoTitle && !_showIframe$.value\" class=\"ngx-lite-video__title\">\r\n    {{ videoTitle }}\r\n  </p>\r\n</div>\r\n","// Modules\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n// Components\r\nimport { NgxLiteYoutubeComponent } from './ngx-lite-youtube.component';\r\n\r\n@NgModule({\r\n  declarations: [NgxLiteYoutubeComponent],\r\n  imports: [CommonModule],\r\n  exports: [NgxLiteYoutubeComponent],\r\n})\r\nexport class NgxLiteYoutubeModule {}\r\n","// Vimeo\r\nexport * from './ngx-lite-vimeo/ngx-lite-vimeo.module';\r\nexport * from './ngx-lite-vimeo/ngx-lite-vimeo.component';\r\n// Youtube\r\nexport * from './ngx-lite-youtube/ngx-lite-youtube.module';\r\nexport * from './ngx-lite-youtube/ngx-lite-youtube.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NgxLiteVideoGeneralService","i2"],"mappings":"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"}