{"version":3,"file":"jjmhalew-ngx-lightbox.mjs","sources":["../../../projects/ngx-lightbox/src/lib/services/lightbox-event.service.ts","../../../projects/ngx-lightbox/src/lib/services/lightbox-ui-config.ts","../../../projects/ngx-lightbox/src/lib/components/lightbox/lightbox.component.ts","../../../projects/ngx-lightbox/src/lib/components/lightbox/lightbox.component.html","../../../projects/ngx-lightbox/src/lib/components/lightbox-overlay/lightbox-overlay.component.ts","../../../projects/ngx-lightbox/src/lib/services/lightbox-config.service.ts","../../../projects/ngx-lightbox/src/lib/services/lightbox.service.ts","../../../projects/ngx-lightbox/src/lib/lightbox.module.ts","../../../projects/ngx-lightbox/src/public-api.ts","../../../projects/ngx-lightbox/src/jjmhalew-ngx-lightbox.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\r\nimport { Observable, Subject } from \"rxjs\";\r\n\r\nexport interface IEvent {\r\n  id: LIGHTBOX_EVENT;\r\n  data?: any;\r\n}\r\n\r\nexport interface IAlbum {\r\n  src: string;\r\n  caption?: string;\r\n  thumb: string;\r\n  downloadUrl?: string;\r\n}\r\n\r\nexport enum LIGHTBOX_EVENT {\r\n  CHANGE_PAGE = 1,\r\n  CLOSE = 2,\r\n  OPEN = 3,\r\n  ZOOM_IN = 4,\r\n  ZOOM_OUT = 5,\r\n  ROTATE_LEFT = 6,\r\n  ROTATE_RIGHT = 7,\r\n  DOWNLOAD = 8,\r\n}\r\n\r\n@Injectable()\r\nexport class LightboxEvent {\r\n  private _lightboxEventSource: Subject<IEvent>;\r\n  public lightboxEvent$: Observable<IEvent>;\r\n\r\n  constructor() {\r\n    this._lightboxEventSource = new Subject<IEvent>();\r\n    this.lightboxEvent$ = this._lightboxEventSource.asObservable();\r\n  }\r\n\r\n  public broadcastLightboxEvent(event: IEvent): void {\r\n    this._lightboxEventSource.next(event);\r\n  }\r\n}\r\n\r\nfunction getWindow(): Window & typeof globalThis {\r\n  return window;\r\n}\r\n\r\n@Injectable()\r\nexport class LightboxWindowRef {\r\n  public get nativeWindow(): Window & typeof globalThis {\r\n    return getWindow();\r\n  }\r\n}\r\n","export class LightboxUiConfig {\r\n  /* control the appear of the reloader\r\n  // false: image has loaded completely and ready to be shown\r\n  // true: image is still loading */\r\n  public showReloader: boolean = true;\r\n\r\n  // control the appear of the nav arrow\r\n  // the arrowNav is the parent of both left and right arrow\r\n  // in some cases, the parent shows but the child does not show\r\n  public showLeftArrow: boolean = false;\r\n  public showRightArrow: boolean = false;\r\n  public showArrowNav: boolean = false;\r\n\r\n  // control the appear of the zoom and rotate buttons\r\n  public showZoomButton: boolean = false;\r\n  public showRotateButton: boolean = false;\r\n\r\n  // control whether to show the\r\n  // page number or not\r\n  public showPageNumber: boolean = false;\r\n  public showCaption: boolean = false;\r\n\r\n  /* control whether to show the download button or not */\r\n  public showDownloadButton: boolean = false;\r\n\r\n  /* control whether to show the download button or not */\r\n  public showDownloadExtButton: boolean = false;\r\n\r\n  public classList: string = \"lightbox animation fadeIn\";\r\n}\r\n","\r\nimport {\r\n  AfterViewInit,\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  ComponentRef,\r\n  ElementRef,\r\n  inject,\r\n  model,\r\n  OnDestroy,\r\n  OnInit,\r\n  Renderer2,\r\n  SecurityContext,\r\n  signal,\r\n  viewChild,\r\n  DOCUMENT\r\n} from \"@angular/core\";\r\nimport { DomSanitizer } from \"@angular/platform-browser\";\r\nimport { FileSaverService } from \"ngx-filesaver\";\r\n\r\nimport { LightboxConfig } from \"../../services/lightbox-config.service\";\r\nimport { IAlbum, IEvent, LIGHTBOX_EVENT, LightboxEvent, LightboxWindowRef } from \"../../services/lightbox-event.service\";\r\nimport { LightboxUiConfig } from \"../../services/lightbox-ui-config\";\r\n\r\n@Component({\r\n    templateUrl: \"./lightbox.component.html\",\r\n    selector: \"[lb-content]\",\r\n    host: {\r\n        \"(click)\": \"close($event)\",\r\n        \"[class]\": \"ui().classList\",\r\n    },\r\n    styleUrl: \"./lightbox.component.scss\",\r\n    imports: [],\r\n    changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class LightboxComponent implements OnInit, AfterViewInit, OnDestroy, OnInit {\r\n  private _elemRef = inject(ElementRef);\r\n  private _rendererRef = inject(Renderer2);\r\n  private _lightboxEvent = inject(LightboxEvent);\r\n  public _lightboxElem = inject(ElementRef);\r\n  private _lightboxWindowRef = inject(LightboxWindowRef);\r\n  private _fileSaverService = inject(FileSaverService);\r\n  private _sanitizer = inject(DomSanitizer);\r\n  private _changeDetectorRef = inject(ChangeDetectorRef);\r\n  private _documentRef: Document = inject(DOCUMENT);\r\n\r\n  public albums = model<IAlbum[]>([]);\r\n  public currentImageIndex = model<number>(0);\r\n  public options = model<Partial<LightboxConfig>>({});\r\n  public cmpRef = model<ComponentRef<LightboxComponent>>();\r\n\r\n  protected _outerContainerElem = viewChild<ElementRef<HTMLDivElement>>(\"outerContainer\");\r\n  protected _containerElem = viewChild<ElementRef<HTMLDivElement>>(\"container\");\r\n  protected _leftArrowElem = viewChild<ElementRef<HTMLAnchorElement>>(\"leftArrow\");\r\n  protected _rightArrowElem = viewChild<ElementRef<HTMLAnchorElement>>(\"rightArrow\");\r\n  protected _navArrowElem = viewChild<ElementRef<HTMLDivElement>>(\"navArrow\");\r\n  protected _dataContainerElem = viewChild<ElementRef<HTMLDivElement>>(\"dataContainer\");\r\n  protected _imageElem = viewChild<ElementRef<HTMLImageElement>>(\"image\");\r\n  protected _captionElem = viewChild<ElementRef<HTMLSpanElement>>(\"caption\");\r\n  protected _numberElem = viewChild<ElementRef<HTMLSpanElement>>(\"number\");\r\n\r\n  public contentPageNumber = signal<string>(\"\");\r\n  /* control the interactive of the directive */\r\n  public ui = signal<LightboxUiConfig>(new LightboxUiConfig());\r\n  private _cssValue: any; /* {\r\n    containerTopPadding: number;\r\n    containerRightPadding: number;\r\n    containerBottomPadding: number;\r\n    containerLeftPadding: number;\r\n    imageBorderWidthTop: number;\r\n    imageBorderWidthBottom: number;\r\n    imageBorderWidthLeft: number;\r\n    imageBorderWidthRight: number;\r\n  }; */\r\n  private _event: any;\r\n  private _windowRef: Window & typeof globalThis;\r\n  private rotate = signal<number>(0);\r\n\r\n  constructor() {\r\n    // initialize data\r\n    this._windowRef = this._lightboxWindowRef.nativeWindow;\r\n\r\n    this._event = {};\r\n    this._lightboxElem = this._elemRef;\r\n    this._event.subscription = this._lightboxEvent.lightboxEvent$.subscribe((event: IEvent) => this._onReceivedEvent(event));\r\n  }\r\n\r\n  public ngOnInit(): void {\r\n    this.albums()?.forEach(album => {\r\n      if (album.caption) {\r\n        album.caption = this._sanitizer.sanitize(SecurityContext.HTML, album.caption) ?? \"\";\r\n      }\r\n    });\r\n  }\r\n\r\n  public ngAfterViewInit(): void {\r\n    // need to init css value here, after the view ready\r\n    // actually these values are always 0\r\n    this._cssValue = {\r\n      containerTopPadding: Math.round(this._getCssStyleValue(this._containerElem()!, \"padding-top\")),\r\n      containerRightPadding: Math.round(this._getCssStyleValue(this._containerElem()!, \"padding-right\")),\r\n      containerBottomPadding: Math.round(this._getCssStyleValue(this._containerElem()!, \"padding-bottom\")),\r\n      containerLeftPadding: Math.round(this._getCssStyleValue(this._containerElem()!, \"padding-left\")),\r\n      imageBorderWidthTop: Math.round(this._getCssStyleValue(this._imageElem()!, \"border-top-width\")),\r\n      imageBorderWidthBottom: Math.round(this._getCssStyleValue(this._imageElem()!, \"border-bottom-width\")),\r\n      imageBorderWidthLeft: Math.round(this._getCssStyleValue(this._imageElem()!, \"border-left-width\")),\r\n      imageBorderWidthRight: Math.round(this._getCssStyleValue(this._imageElem()!, \"border-right-width\")),\r\n    };\r\n\r\n    if (this._validateInputData()) {\r\n      this._prepareComponent();\r\n      this._registerImageLoadingEvent();\r\n    }\r\n  }\r\n\r\n  public ngOnDestroy(): void {\r\n    if (!this.options().disableKeyboardNav) {\r\n      // unbind keyboard event\r\n      this._disableKeyboardNav();\r\n    }\r\n\r\n    this._event.subscription.unsubscribe();\r\n  }\r\n\r\n  public close($event: any): void {\r\n    $event.stopPropagation();\r\n    if (\r\n      $event.target.classList.contains(\"lightbox\") ||\r\n      $event.target.classList.contains(\"lb-loader\") ||\r\n      $event.target.classList.contains(\"lb-close\")\r\n    ) {\r\n      this._lightboxEvent.broadcastLightboxEvent({ id: LIGHTBOX_EVENT.CLOSE, data: null });\r\n    }\r\n  }\r\n\r\n  public downloadExt(): void {\r\n    this._lightboxEvent.broadcastLightboxEvent({\r\n      id: LIGHTBOX_EVENT.DOWNLOAD,\r\n      data: this.albums()[this.currentImageIndex()],\r\n    });\r\n  }\r\n\r\n  public download($event: any): void {\r\n    $event.stopPropagation();\r\n    const url = this.albums()[this.currentImageIndex()].src;\r\n    const downloadUrl = this.albums()[this.currentImageIndex()].downloadUrl;\r\n    const parts = url.split(\"/\");\r\n    const fileName = parts[parts.length - 1];\r\n    const canvas = document.createElement(\"canvas\");\r\n    const ctx = canvas.getContext(\"2d\");\r\n    const preloader = new Image();\r\n    const _this = this;\r\n\r\n    preloader.onload = function () {\r\n      // @ts-ignore\r\n      canvas.width = this.naturalWidth;\r\n      // @ts-ignore\r\n      canvas.height = this.naturalHeight;\r\n\r\n      // @ts-ignore\r\n      ctx.drawImage(this, 0, 0);\r\n      canvas.toBlob(\r\n        blob => {\r\n          _this._fileSaverService.save(blob, fileName);\r\n        },\r\n        \"image/jpeg\",\r\n        0.75\r\n      );\r\n    };\r\n    preloader.crossOrigin = \"\";\r\n    if (downloadUrl && downloadUrl.length > 0) preloader.src = this._sanitizer.sanitize(SecurityContext.URL, downloadUrl) ?? \"\";\r\n    else preloader.src = this._sanitizer.sanitize(SecurityContext.URL, url) ?? \"\";\r\n  }\r\n\r\n  public control($event: any): void {\r\n    $event.stopPropagation();\r\n    let height: number;\r\n    let width: number;\r\n    if ($event.target.classList.contains(\"lb-turnLeft\")) {\r\n      this.rotate.set(this.rotate() - 90);\r\n      this._rotateContainer();\r\n      this._calcTransformPoint();\r\n      this._imageElem()!.nativeElement.style.transform = `rotate(${this.rotate()}deg)`;\r\n      this._lightboxEvent.broadcastLightboxEvent({ id: LIGHTBOX_EVENT.ROTATE_LEFT, data: null });\r\n    } else if ($event.target.classList.contains(\"lb-turnRight\")) {\r\n      this.rotate.set(this.rotate() + 90);\r\n      this._rotateContainer();\r\n      this._calcTransformPoint();\r\n      this._imageElem()!.nativeElement.style.transform = `rotate(${this.rotate()}deg)`;\r\n      this._lightboxEvent.broadcastLightboxEvent({ id: LIGHTBOX_EVENT.ROTATE_RIGHT, data: null });\r\n    } else if ($event.target.classList.contains(\"lb-zoomOut\")) {\r\n      height = parseInt(this._outerContainerElem()!.nativeElement.style.height, 10) / 1.5;\r\n      width = parseInt(this._outerContainerElem()!.nativeElement.style.width, 10) / 1.5;\r\n      this._outerContainerElem()!.nativeElement.style.height = height + \"px\";\r\n      this._outerContainerElem()!.nativeElement.style.width = width + \"px\";\r\n      height = parseInt(this._imageElem()!.nativeElement.style.height, 10) / 1.5;\r\n      width = parseInt(this._imageElem()!.nativeElement.style.width, 10) / 1.5;\r\n      this._imageElem()!.nativeElement.style.height = height + \"px\";\r\n      this._imageElem()!.nativeElement.style.width = width + \"px\";\r\n      this._lightboxEvent.broadcastLightboxEvent({ id: LIGHTBOX_EVENT.ZOOM_OUT, data: null });\r\n    } else if ($event.target.classList.contains(\"lb-zoomIn\")) {\r\n      height = parseInt(this._outerContainerElem()!.nativeElement.style.height, 10) * 1.5;\r\n      width = parseInt(this._outerContainerElem()!.nativeElement.style.width, 10) * 1.5;\r\n      this._outerContainerElem()!.nativeElement.style.height = height + \"px\";\r\n      this._outerContainerElem()!.nativeElement.style.width = width + \"px\";\r\n      height = parseInt(this._imageElem()!.nativeElement.style.height, 10) * 1.5;\r\n      width = parseInt(this._imageElem()!.nativeElement.style.width, 10) * 1.5;\r\n      this._imageElem()!.nativeElement.style.height = height + \"px\";\r\n      this._imageElem()!.nativeElement.style.width = width + \"px\";\r\n      this._lightboxEvent.broadcastLightboxEvent({ id: LIGHTBOX_EVENT.ZOOM_IN, data: null });\r\n    }\r\n  }\r\n\r\n  private _rotateContainer(): void {\r\n    let temp = this.rotate();\r\n    if (temp < 0) {\r\n      temp *= -1;\r\n    }\r\n    if ((temp / 90) % 4 === 1 || (temp / 90) % 4 === 3) {\r\n      this._outerContainerElem()!.nativeElement.style.height = this._imageElem()!.nativeElement.style.width;\r\n      this._outerContainerElem()!.nativeElement.style.width = this._imageElem()!.nativeElement.style.height;\r\n      this._containerElem()!.nativeElement.style.height = this._imageElem()!.nativeElement.style.width;\r\n      this._containerElem()!.nativeElement.style.width = this._imageElem()!.nativeElement.style.height;\r\n    } else {\r\n      this._outerContainerElem()!.nativeElement.style.height = this._imageElem()!.nativeElement.style.height;\r\n      this._outerContainerElem()!.nativeElement.style.width = this._imageElem()!.nativeElement.style.width;\r\n      this._containerElem()!.nativeElement.style.height = this._imageElem()!.nativeElement.style.width;\r\n      this._containerElem()!.nativeElement.style.width = this._imageElem()!.nativeElement.style.height;\r\n    }\r\n  }\r\n\r\n  private _resetImage(): void {\r\n    this.rotate.set(0);\r\n    this._imageElem()!.nativeElement.style.transform = `rotate(${this.rotate()}deg)`;\r\n  }\r\n\r\n  private _calcTransformPoint(): void {\r\n    const height = parseInt(this._imageElem()!.nativeElement.style.height, 10);\r\n    const width = parseInt(this._imageElem()!.nativeElement.style.width, 10);\r\n    let temp = this.rotate() % 360;\r\n    if (temp < 0) {\r\n      temp = 360 + temp;\r\n    }\r\n    if (temp === 90) {\r\n      this._imageElem()!.nativeElement.style.transformOrigin = height / 2 + \"px \" + height / 2 + \"px\";\r\n    } else if (temp === 180) {\r\n      this._imageElem()!.nativeElement.style.transformOrigin = width / 2 + \"px \" + height / 2 + \"px\";\r\n    } else if (temp === 270) {\r\n      this._imageElem()!.nativeElement.style.transformOrigin = width / 2 + \"px \" + width / 2 + \"px\";\r\n    }\r\n  }\r\n\r\n  public nextImage(): void {\r\n    if (this.albums().length === 1) {\r\n      return;\r\n    } else if (this.currentImageIndex() === this.albums().length - 1) {\r\n      this._changeImage(0);\r\n    } else {\r\n      this._changeImage(this.currentImageIndex() + 1);\r\n    }\r\n  }\r\n\r\n  public prevImage(): void {\r\n    if (this.albums().length === 1) {\r\n      return;\r\n    } else if (this.currentImageIndex() === 0 && this.albums().length > 1) {\r\n      this._changeImage(this.albums().length - 1);\r\n    } else {\r\n      this._changeImage(this.currentImageIndex() - 1);\r\n    }\r\n  }\r\n\r\n  private _validateInputData(): boolean {\r\n    if (this.albums() && this.albums() instanceof Array && this.albums().length > 0) {\r\n      for (let i = 0; i < this.albums().length; i++) {\r\n        // check whether each _nside\r\n        // album has src data or not\r\n        if (this.albums()[i].src) {\r\n          continue;\r\n        }\r\n\r\n        throw new Error(\"One of the album data does not have source data\");\r\n      }\r\n    } else {\r\n      throw new Error(\"No album data or album data is not correct in type\");\r\n    }\r\n\r\n    // to prevent data understand as string\r\n    // convert it to number\r\n    if (isNaN(this.currentImageIndex())) {\r\n      throw new Error(\"Current image index is not a number\");\r\n    } else {\r\n      this.currentImageIndex.set(Number(this.currentImageIndex()));\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  private _registerImageLoadingEvent(): void {\r\n    const preloader = new Image();\r\n\r\n    preloader.onload = (): void => {\r\n      this._onLoadImageSuccess();\r\n    };\r\n\r\n    const src: string = this.albums()[this.currentImageIndex()].src;\r\n    preloader.src = this._sanitizer.sanitize(SecurityContext.URL, src) ?? \"\";\r\n  }\r\n\r\n  /**\r\n   * Fire when the image is loaded\r\n   */\r\n  private _onLoadImageSuccess(): void {\r\n    if (!this.options().disableKeyboardNav) {\r\n      // unbind keyboard event during transition\r\n      this._disableKeyboardNav();\r\n    }\r\n\r\n    let imageHeight;\r\n    let imageWidth;\r\n    let maxImageHeight;\r\n    let maxImageWidth;\r\n    let windowHeight;\r\n    let windowWidth;\r\n    let naturalImageWidth;\r\n    let naturalImageHeight;\r\n\r\n    // set default width and height of image to be its natural\r\n    imageWidth = naturalImageWidth = this._imageElem()!.nativeElement.naturalWidth;\r\n    imageHeight = naturalImageHeight = this._imageElem()!.nativeElement.naturalHeight;\r\n    if (this.options().fitImageInViewPort) {\r\n      windowWidth = this._windowRef.innerWidth;\r\n      windowHeight = this._windowRef.innerHeight;\r\n      maxImageWidth =\r\n        windowWidth -\r\n        this._cssValue.containerLeftPadding -\r\n        this._cssValue.containerRightPadding -\r\n        this._cssValue.imageBorderWidthLeft -\r\n        this._cssValue.imageBorderWidthRight -\r\n        20;\r\n      maxImageHeight =\r\n        windowHeight -\r\n        this._cssValue.containerTopPadding -\r\n        this._cssValue.containerTopPadding -\r\n        this._cssValue.imageBorderWidthTop -\r\n        this._cssValue.imageBorderWidthBottom -\r\n        120;\r\n      if (naturalImageWidth > maxImageWidth || naturalImageHeight > maxImageHeight) {\r\n        if (naturalImageWidth / maxImageWidth > naturalImageHeight / maxImageHeight) {\r\n          imageWidth = maxImageWidth;\r\n          imageHeight = Math.round(naturalImageHeight / (naturalImageWidth / imageWidth));\r\n        } else {\r\n          imageHeight = maxImageHeight;\r\n          imageWidth = Math.round(naturalImageWidth / (naturalImageHeight / imageHeight));\r\n        }\r\n      }\r\n\r\n      this._rendererRef.setStyle(this._imageElem()!.nativeElement, \"width\", `${imageWidth}px`);\r\n      this._rendererRef.setStyle(this._imageElem()!.nativeElement, \"height\", `${imageHeight}px`);\r\n    }\r\n\r\n    this._sizeContainer(imageWidth, imageHeight);\r\n\r\n    if (this.options().centerVertically) {\r\n      this._centerVertically(imageWidth, imageHeight);\r\n    }\r\n  }\r\n\r\n  private _centerVertically(imageWidth: number, imageHeight: number): void {\r\n    const scrollOffset = this._documentRef.documentElement.scrollTop;\r\n    const windowHeight = this._windowRef.innerHeight;\r\n\r\n    const viewOffset = windowHeight / 2 - imageHeight / 2;\r\n    const topDistance = scrollOffset + viewOffset;\r\n\r\n    this._rendererRef.setStyle(this._lightboxElem.nativeElement, \"top\", `${topDistance}px`);\r\n  }\r\n\r\n  private _sizeContainer(imageWidth: number, imageHeight: number): void {\r\n    const oldWidth = this._outerContainerElem()!.nativeElement.offsetWidth;\r\n    const oldHeight = this._outerContainerElem()!.nativeElement.offsetHeight;\r\n    const newWidth =\r\n      imageWidth +\r\n      this._cssValue.containerRightPadding +\r\n      this._cssValue.containerLeftPadding +\r\n      this._cssValue.imageBorderWidthLeft +\r\n      this._cssValue.imageBorderWidthRight;\r\n    const newHeight =\r\n      imageHeight +\r\n      this._cssValue.containerTopPadding +\r\n      this._cssValue.containerBottomPadding +\r\n      this._cssValue.imageBorderWidthTop +\r\n      this._cssValue.imageBorderWidthBottom;\r\n\r\n    // make sure that distances are large enough for transitionend event to be fired, at least 5px.\r\n    if (Math.abs(oldWidth - newWidth) + Math.abs(oldHeight - newHeight) > 5) {\r\n      this._rendererRef.setStyle(this._outerContainerElem()!.nativeElement, \"width\", `${newWidth}px`);\r\n      this._rendererRef.setStyle(this._outerContainerElem()!.nativeElement, \"height\", `${newHeight}px`);\r\n\r\n      // bind resize event to outer container\r\n      // use enableTransition to prevent infinite loader\r\n      if (this.options().enableTransition) {\r\n        this._event.transition = this._rendererRef.listen(\r\n          this._outerContainerElem()!.nativeElement,\r\n          \"transitionend\",\r\n          (event: TransitionEvent) => {\r\n            if (event.target === event.currentTarget) {\r\n              this._postResize(newWidth, newHeight);\r\n            }\r\n          }\r\n        );\r\n      } else {\r\n        this._postResize(newWidth, newHeight);\r\n      }\r\n    } else {\r\n      this._postResize(newWidth, newHeight);\r\n    }\r\n  }\r\n\r\n  private _postResize(newWidth: number, newHeight: number): void {\r\n    // unbind resize event\r\n    if (this._event.transition !== undefined) {\r\n      this._event.transition(); // Remove the listener\r\n      this._event.transition = undefined; // Clean up\r\n    }\r\n\r\n    this._rendererRef.setStyle(this._dataContainerElem()!.nativeElement, \"width\", `${newWidth}px`);\r\n    this._showImage();\r\n  }\r\n\r\n  private _showImage(): void {\r\n    this.ui().showReloader = false;\r\n    this._updateNav();\r\n    this._updateDetails();\r\n    if (!this.options().disableKeyboardNav) {\r\n      this._enableKeyboardNav();\r\n    }\r\n    this._changeDetectorRef.detectChanges(); // needed due to zoneless, otherwise reload icon will stay in-screen until user clicks\r\n  }\r\n\r\n  private _prepareComponent(): void {\r\n    // add css animation\r\n    this._addCssAnimation();\r\n\r\n    // position the image according to user's option\r\n    this._positionLightBox();\r\n\r\n    // update controls visibility on next view generation\r\n    setTimeout(() => {\r\n      this.ui().showZoomButton = this.options().showZoom!;\r\n      this.ui().showRotateButton = this.options().showRotate!;\r\n      this.ui().showDownloadButton = this.options().showDownloadButton!;\r\n      // this.ui().showDownloadExtButton = this.options().showDownloadExtButton; // TODO: re-enable\r\n    }, 0);\r\n  }\r\n\r\n  private _positionLightBox(): void {\r\n    // @see https://stackoverflow.com/questions/3464876/javascript-get-window-x-y-position-for-scroll\r\n    const top = (this._windowRef.scrollY || this._documentRef.documentElement.scrollTop) + this.options().positionFromTop!;\r\n    const left = this._windowRef.scrollX || this._documentRef.documentElement.scrollLeft;\r\n\r\n    if (!this.options().centerVertically) {\r\n      this._rendererRef.setStyle(this._lightboxElem.nativeElement, \"top\", `${top}px`);\r\n    }\r\n\r\n    this._rendererRef.setStyle(this._lightboxElem.nativeElement, \"left\", `${left}px`);\r\n    this._rendererRef.setStyle(this._lightboxElem.nativeElement, \"display\", \"block\");\r\n\r\n    // disable scrolling of the page while open\r\n    if (this.options().disableScrolling) {\r\n      this._rendererRef.addClass(this._documentRef.documentElement, \"lb-disable-scrolling\");\r\n    }\r\n  }\r\n\r\n  /**\r\n   * addCssAnimation add classes for animate lightbox\r\n   */\r\n  private _addCssAnimation(): void {\r\n    const resizeDuration = this.options().resizeDuration;\r\n    const fadeDuration = this.options().fadeDuration;\r\n\r\n    this._rendererRef.setStyle(this._lightboxElem.nativeElement, \"animation-duration\", `${fadeDuration}s`);\r\n    this._rendererRef.setStyle(this._outerContainerElem()!.nativeElement, \"transition-duration\", `${resizeDuration}s`);\r\n    this._rendererRef.setStyle(this._dataContainerElem()!.nativeElement, \"animation-duration\", `${fadeDuration}s`);\r\n    this._rendererRef.setStyle(this._imageElem()!.nativeElement, \"animation-duration\", `${fadeDuration}s`);\r\n    this._rendererRef.setStyle(this._captionElem()!.nativeElement, \"animation-duration\", `${fadeDuration}s`);\r\n    this._rendererRef.setStyle(this._numberElem()!.nativeElement, \"animation-duration\", `${fadeDuration}s`);\r\n  }\r\n\r\n  private _end(): void {\r\n    this.ui().classList = \"lightbox animation fadeOut\";\r\n    if (this.options().disableScrolling) {\r\n      this._rendererRef.removeClass(this._documentRef.documentElement, \"lb-disable-scrolling\");\r\n    }\r\n    setTimeout(() => {\r\n      this.cmpRef()?.destroy();\r\n    }, this.options().fadeDuration! * 1000);\r\n  }\r\n\r\n  private _updateDetails(): void {\r\n    // update the caption\r\n    if (typeof this.albums()[this.currentImageIndex()].caption !== \"undefined\" && this.albums()[this.currentImageIndex()].caption !== \"\") {\r\n      this.ui().showCaption = true;\r\n    }\r\n\r\n    // update the page number if user choose to do so\r\n    // does not perform numbering the page if the\r\n    // array length in album <= 1\r\n    if (this.albums().length > 1 && this.options().showImageNumberLabel) {\r\n      this.ui().showPageNumber = true;\r\n      this.contentPageNumber.set(this._albumLabel());\r\n    }\r\n  }\r\n\r\n  private _albumLabel(): string {\r\n    // due to {this.currentImageIndex()} is set from 0 to {this.album().length} - 1\r\n    return this.options()\r\n      .albumLabel!.replace(/%1/g, (this.currentImageIndex() + 1).toString())\r\n      .replace(/%2/g, this.albums().length.toString());\r\n  }\r\n\r\n  private _changeImage(newIndex: number): void {\r\n    this._resetImage();\r\n    this.currentImageIndex.set(newIndex);\r\n    this._hideImage();\r\n    this._registerImageLoadingEvent();\r\n    this._lightboxEvent.broadcastLightboxEvent({ id: LIGHTBOX_EVENT.CHANGE_PAGE, data: newIndex });\r\n  }\r\n\r\n  private _hideImage(): void {\r\n    this.ui().showReloader = true;\r\n    this.ui().showArrowNav = false;\r\n    this.ui().showLeftArrow = false;\r\n    this.ui().showRightArrow = false;\r\n    this.ui().showPageNumber = false;\r\n    this.ui().showCaption = false;\r\n  }\r\n\r\n  private _updateNav(): void {\r\n    let alwaysShowNav = false;\r\n\r\n    // check to see the browser support touch event\r\n    try {\r\n      this._documentRef.createEvent(\"TouchEvent\");\r\n      alwaysShowNav = this.options().alwaysShowNavOnTouchDevices ? true : false;\r\n    } catch (e) {\r\n      // noop\r\n    }\r\n\r\n    // initially show the arrow nav\r\n    // which is the parent of both left and right nav\r\n    this._showArrowNav();\r\n    if (this.albums().length > 1) {\r\n      if (this.options().wrapAround) {\r\n        if (alwaysShowNav) {\r\n          this._rendererRef.setStyle(this._leftArrowElem()!.nativeElement, \"opacity\", \"1\");\r\n          this._rendererRef.setStyle(this._rightArrowElem()!.nativeElement, \"opacity\", \"1\");\r\n        }\r\n\r\n        this._showLeftArrowNav();\r\n        this._showRightArrowNav();\r\n      } else {\r\n        if (this.currentImageIndex() > 0) {\r\n          this._showLeftArrowNav();\r\n          if (alwaysShowNav) {\r\n            this._rendererRef.setStyle(this._leftArrowElem()!.nativeElement, \"opacity\", \"1\");\r\n          }\r\n        }\r\n\r\n        if (this.currentImageIndex() < this.albums().length - 1) {\r\n          this._showRightArrowNav();\r\n          if (alwaysShowNav) {\r\n            this._rendererRef.setStyle(this._rightArrowElem()!.nativeElement, \"opacity\", \"1\");\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private _showLeftArrowNav(): void {\r\n    this.ui().showLeftArrow = true;\r\n  }\r\n\r\n  private _showRightArrowNav(): void {\r\n    this.ui().showRightArrow = true;\r\n  }\r\n\r\n  private _showArrowNav(): void {\r\n    this.ui().showArrowNav = this.albums().length !== 1;\r\n  }\r\n\r\n  private _enableKeyboardNav(): void {\r\n    this._event.keyup = this._rendererRef.listen(\"document\", \"keyup\", (event: KeyboardEvent) => {\r\n      this._keyboardAction(event);\r\n    });\r\n  }\r\n\r\n  private _disableKeyboardNav(): void {\r\n    if (this._event.keyup) {\r\n      this._event.keyup();\r\n    }\r\n  }\r\n\r\n  private _keyboardAction($event: KeyboardEvent): void {\r\n    const KEYCODE_ESC = 27;\r\n    const KEYCODE_LEFTARROW = 37;\r\n    const KEYCODE_RIGHTARROW = 39;\r\n    const keycode = $event.keyCode;\r\n    const key = String.fromCharCode(keycode).toLowerCase();\r\n\r\n    if (keycode === KEYCODE_ESC || key.match(/x|o|c/)) {\r\n      this._lightboxEvent.broadcastLightboxEvent({ id: LIGHTBOX_EVENT.CLOSE, data: null });\r\n    } else if (key === \"p\" || keycode === KEYCODE_LEFTARROW) {\r\n      if (this.currentImageIndex() !== 0) {\r\n        this._changeImage(this.currentImageIndex() - 1);\r\n      } else if (this.options().wrapAround && this.albums().length > 1) {\r\n        this._changeImage(this.albums().length - 1);\r\n      }\r\n    } else if (key === \"n\" || keycode === KEYCODE_RIGHTARROW) {\r\n      if (this.currentImageIndex() !== this.albums().length - 1) {\r\n        this._changeImage(this.currentImageIndex() + 1);\r\n      } else if (this.options().wrapAround && this.albums().length > 1) {\r\n        this._changeImage(0);\r\n      }\r\n    }\r\n  }\r\n\r\n  private _getCssStyleValue(elem: ElementRef, propertyName: string): number {\r\n    return parseFloat(this._windowRef.getComputedStyle(elem.nativeElement, null).getPropertyValue(propertyName));\r\n  }\r\n\r\n  private _onReceivedEvent(event: IEvent): void {\r\n    switch (event.id) {\r\n      case LIGHTBOX_EVENT.CLOSE:\r\n        this._end();\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n  }\r\n}\r\n","<div class=\"lb-outerContainer transition\" #outerContainer id=\"outerContainer\">\r\n  <div class=\"lb-container\" #container id=\"container\">\r\n    <img\r\n      class=\"lb-image\"\r\n      id=\"image\"\r\n      [src]=\"albums()[currentImageIndex()].src\"\r\n      class=\"lb-image animation fadeIn\"\r\n      [hidden]=\"ui().showReloader\"\r\n      #image />\r\n    <div class=\"lb-nav\" [hidden]=\"!ui().showArrowNav\" #navArrow>\r\n      <a class=\"lb-prev\" [hidden]=\"!ui().showLeftArrow\" (click)=\"prevImage()\" #leftArrow></a>\r\n      <a class=\"lb-next\" [hidden]=\"!ui().showRightArrow\" (click)=\"nextImage()\" #rightArrow></a>\r\n    </div>\r\n    <div class=\"lb-loader\" [hidden]=\"!ui().showReloader\" (click)=\"close($event)\">\r\n      <a class=\"lb-cancel\"></a>\r\n    </div>\r\n  </div>\r\n</div>\r\n<div class=\"lb-dataContainer\" [hidden]=\"ui().showReloader\" #dataContainer>\r\n  <div class=\"lb-data\">\r\n    <div class=\"lb-details\">\r\n      <span\r\n        class=\"lb-caption animation fadeIn\"\r\n        [hidden]=\"!ui().showCaption\"\r\n        [innerHtml]=\"albums()[currentImageIndex()].caption\"\r\n        #caption>\r\n      </span>\r\n      <span class=\"lb-number animation fadeIn\" [hidden]=\"!ui().showPageNumber\" #number>{{ contentPageNumber() }}</span>\r\n    </div>\r\n    <div class=\"lb-controlContainer\">\r\n      <div class=\"lb-closeContainer\">\r\n        <a class=\"lb-close\" (click)=\"close($event)\"></a>\r\n      </div>\r\n      <div class=\"lb-downloadContainer\" [hidden]=\"!ui().showDownloadButton\">\r\n        <a class=\"lb-download\" (click)=\"download($event)\"></a>\r\n      </div>\r\n      <div class=\"lb-downloadContainer\" [hidden]=\"!ui().showDownloadExtButton\">\r\n        <a class=\"lb-download\" (click)=\"downloadExt()\"></a>\r\n      </div>\r\n      <div class=\"lb-turnContainer\" [hidden]=\"!ui().showRotateButton\">\r\n        <a class=\"lb-turnLeft\" (click)=\"control($event)\"></a>\r\n        <a class=\"lb-turnRight\" (click)=\"control($event)\"></a>\r\n      </div>\r\n      <div class=\"lb-zoomContainer\" [hidden]=\"!ui().showZoomButton\">\r\n        <a class=\"lb-zoomOut\" (click)=\"control($event)\"></a>\r\n        <a class=\"lb-zoomIn\" (click)=\"control($event)\"></a>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>","\r\nimport {\r\n  AfterViewInit,\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  ComponentRef,\r\n  ElementRef,\r\n  HostListener,\r\n  inject,\r\n  model,\r\n  OnDestroy,\r\n  Renderer2,\r\n  DOCUMENT,\r\n  signal\r\n} from \"@angular/core\";\r\nimport { Subscription } from \"rxjs\";\r\n\r\nimport { LightboxConfig } from \"../../services/lightbox-config.service\";\r\nimport { IEvent, LIGHTBOX_EVENT, LightboxEvent } from \"../../services/lightbox-event.service\";\r\n\r\n@Component({\r\n    selector: \"[lb-overlay]\",\r\n    template: \"\",\r\n    imports: [],\r\n    changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class LightboxOverlayComponent implements AfterViewInit, OnDestroy {\r\n  private _elemRef = inject(ElementRef);\r\n  private _rendererRef = inject(Renderer2);\r\n  private _lightboxEvent = inject(LightboxEvent);\r\n  private _documentRef: Document = inject(DOCUMENT);\r\n\r\n  public options = model<Partial<LightboxConfig>>();\r\n  public cmpRef = model<ComponentRef<LightboxOverlayComponent>>();\r\n\r\n  private _subscription: Subscription;\r\n\r\n  private _isClosing = signal<boolean>(false);\r\n\r\n  constructor() {\r\n    this._elemRef.nativeElement.className = \"lightboxOverlay animation fadeInOverlay\";\r\n    this._subscription = this._lightboxEvent.lightboxEvent$.subscribe((event: IEvent) => this._onReceivedEvent(event));\r\n  }\r\n\r\n  @HostListener(\"click\")\r\n  public close(): void {\r\n    // broadcast to itself and all others subscriber including the components\r\n    this._lightboxEvent.broadcastLightboxEvent({ id: LIGHTBOX_EVENT.CLOSE, data: null });\r\n  }\r\n\r\n  public ngAfterViewInit(): void {\r\n    const fadeDuration = this.options()!.fadeDuration;\r\n\r\n    this._rendererRef.setStyle(this._elemRef.nativeElement, \"animation-duration\", `${fadeDuration}s`);\r\n    this._sizeOverlay();\r\n  }\r\n\r\n  @HostListener(\"window:resize\")\r\n  public onResize(): void {\r\n    if (!this._isClosing()) {\r\n      this._sizeOverlay();\r\n    }\r\n  }\r\n\r\n  public ngOnDestroy(): void {\r\n    this._subscription.unsubscribe();\r\n  }\r\n\r\n  private _sizeOverlay(): void {\r\n    const width = this._documentRef.body.scrollWidth;\r\n    const height = this._documentRef.body.scrollHeight;\r\n\r\n    this._rendererRef.setStyle(this._elemRef.nativeElement, \"width\", `${width}px`);\r\n    this._rendererRef.setStyle(this._elemRef.nativeElement, \"height\", `${height}px`);\r\n  }\r\n\r\n  private _onReceivedEvent(event: IEvent): void {\r\n    switch (event.id) {\r\n      case LIGHTBOX_EVENT.CLOSE:\r\n        this._end();\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n  }\r\n\r\n  private _end(): void {\r\n     this._isClosing.set(true);\r\n\r\n    this._elemRef.nativeElement.className = \"lightboxOverlay animation fadeOutOverlay\";\r\n\r\n    // queue self destruction after the animation has finished\r\n    this._rendererRef.listen(this._elemRef.nativeElement, 'animationend', () => {\r\n      this.cmpRef()?.destroy();\r\n    });\r\n  }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\n\r\n@Injectable()\r\nexport class LightboxConfig {\r\n  public fadeDuration: number = 0.7;\r\n  public resizeDuration: number = 0.5;\r\n  public fitImageInViewPort: boolean = true;\r\n  public positionFromTop: number = 20;\r\n  public showImageNumberLabel: boolean = false;\r\n  public alwaysShowNavOnTouchDevices: boolean = false;\r\n  public wrapAround: boolean = false;\r\n  public disableKeyboardNav: boolean = false;\r\n  public disableScrolling: boolean = false;\r\n  public centerVertically: boolean = false;\r\n  public enableTransition: boolean = true;\r\n  public albumLabel: string = \"Image %1 of %2\";\r\n  public showZoom: boolean = false;\r\n  public showRotate: boolean = false;\r\n  public showDownloadButton: boolean = false;\r\n  public containerElementResolver: (document: any) => HTMLElement = documentRef => documentRef.querySelector(\"body\");\r\n}\r\n","import { DOCUMENT } from \"@angular/common\";\r\nimport {\r\n  ApplicationRef,\r\n  ComponentRef,\r\n  createComponent,\r\n  EnvironmentInjector,\r\n  inject,\r\n  Injectable,\r\n  inputBinding,\r\n} from \"@angular/core\";\r\n\r\nimport { LightboxComponent } from \"../components/lightbox/lightbox.component\";\r\nimport { LightboxOverlayComponent } from \"../components/lightbox-overlay/lightbox-overlay.component\";\r\nimport { LightboxConfig } from \"./lightbox-config.service\";\r\nimport { IAlbum, LIGHTBOX_EVENT, LightboxEvent } from \"./lightbox-event.service\";\r\n\r\n@Injectable()\r\nexport class Lightbox {\r\n  private _applicationRef = inject(ApplicationRef);\r\n  private environmentInjector = inject(EnvironmentInjector);\r\n\r\n  private _lightboxConfig = inject(LightboxConfig);\r\n  private _lightboxEvent = inject(LightboxEvent);\r\n  private _documentRef: Document = inject(DOCUMENT);\r\n\r\n  public open(album: IAlbum[], curIndex = 0, options = {}): void {\r\n    const newOptions: Partial<LightboxConfig> = {\r\n      ...this._lightboxConfig,\r\n      ...options\r\n    };\r\n\r\n    const overlayComponentRef: ComponentRef<LightboxOverlayComponent>\r\n    = createComponent(LightboxOverlayComponent, {\r\n      environmentInjector: this._applicationRef.injector,\r\n      elementInjector: this.environmentInjector,\r\n      bindings: [\r\n        inputBinding(\"options\", () => newOptions),\r\n        inputBinding(\"cmpRef\", () => overlayComponentRef)\r\n      ],\r\n    });\r\n\r\n    const componentRef: ComponentRef<LightboxComponent>\r\n    = createComponent(LightboxComponent, {\r\n      environmentInjector: this._applicationRef.injector,\r\n      elementInjector: this.environmentInjector,\r\n      bindings: [\r\n        inputBinding(\"albums\", () => album),\r\n        inputBinding(\"currentImageIndex\", () => curIndex),\r\n        inputBinding(\"options\", () => newOptions),\r\n        inputBinding(\"cmpRef\", () => componentRef)\r\n      ],\r\n    });\r\n\r\n    this._applicationRef.attachView(overlayComponentRef.hostView);\r\n    this._applicationRef.attachView(componentRef.hostView);\r\n\r\n    overlayComponentRef.onDestroy(() =>\r\n      this._applicationRef.detachView(overlayComponentRef.hostView)\r\n    );\r\n    componentRef.onDestroy(() =>\r\n      this._applicationRef.detachView(componentRef.hostView)\r\n    );\r\n\r\n    const containerElement = newOptions.containerElementResolver!(this._documentRef);\r\n    containerElement.appendChild(overlayComponentRef.location.nativeElement);\r\n    containerElement.appendChild(componentRef.location.nativeElement);\r\n\r\n    this._lightboxEvent.broadcastLightboxEvent({ id: LIGHTBOX_EVENT.OPEN });\r\n  }\r\n}\r\n","import { NgModule } from \"@angular/core\";\r\nimport { FileSaverModule } from \"ngx-filesaver\";\r\n\r\nimport { LightboxComponent } from \"./components/lightbox/lightbox.component\";\r\nimport { LightboxOverlayComponent } from \"./components/lightbox-overlay/lightbox-overlay.component\";\r\nimport { Lightbox } from \"./services/lightbox.service\";\r\nimport { LightboxConfig } from \"./services/lightbox-config.service\";\r\nimport { LightboxEvent, LightboxWindowRef } from \"./services/lightbox-event.service\";\r\n\r\n@NgModule({\r\n  providers: [Lightbox, LightboxConfig, LightboxEvent, LightboxWindowRef],\r\n  imports: [FileSaverModule, LightboxOverlayComponent, LightboxComponent],\r\n})\r\nexport class LightboxModule {}\r\n","/*\r\n * Public API Surface of ngx-lightbox\r\n */\r\n\r\nexport { Lightbox } from \"./lib/services/lightbox.service\";\r\nexport { LightboxConfig } from \"./lib/services/lightbox-config.service\";\r\nexport { LightboxEvent, LIGHTBOX_EVENT } from \"./lib/services/lightbox-event.service\";\r\nexport type { IAlbum, IEvent } from \"./lib/services/lightbox-event.service\";\r\n\r\nexport { LightboxModule } from \"./lib/lightbox.module\";","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DOCUMENT"],"mappings":"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"}