{"version":3,"file":"ngx-carouselx.mjs","sources":["../../../projects/ngx-carouselx/src/lib/pointer.service.ts","../../../projects/ngx-carouselx/src/lib/carousel.component.ts","../../../projects/ngx-carouselx/src/lib/carousel.component.html","../../../projects/ngx-carouselx/src/public-api.ts","../../../projects/ngx-carouselx/src/ngx-carouselx.ts"],"sourcesContent":["import { Injectable, ElementRef, EventEmitter, Renderer2, Inject, PLATFORM_ID, RendererFactory2 } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\nclass State {\n  // a tag width\n  aw: number = 0;\n  // a tag height\n  ah: number = 0;\n  // actual image width\n  w: number = 0;\n  // actual image height\n  h: number = 0;\n  // aspect ratio of image\n  get ar(): number {\n    return this.w / this.h;\n  }\n  // diagonal of image\n  get diag(): number {\n    return Math.sqrt((this.w * this.w) + (this.h * this.h));\n  }\n  // is state populated and valid\n  get valid(): boolean {\n    return this.w > 0 && this.h > 0 && this.aw > 0 && this.ah > 0;\n  }\n  // is image actual size bounded by width against the a tag view port, horizontal clip in case of cover\n  get widthBound(): boolean {\n    return this.ar > (this.aw / this.ah);\n  }\n}\n\n@Injectable()\nexport class PointerService {\n  // private _renderer: Renderer2;\n\n  //options\n  private _disableSwiping = false;\n  private _enableZoom = false;\n  private _enablePan = false;\n\n  // adapted from https://github.com/mdn/dom-examples/blob/master/pointerevents/Pinch_zoom_gestures.html\n  private _startEVCache: PointerEvent | null = null;\n  private _evCache: Array<PointerEvent> = new Array();\n  private _previousDiagonal: number = -1;\n  private _originalState: State = new State();\n  private _slideEvent: EventEmitter<number> = new EventEmitter<number>(true);\n  // custom click event is a workaround for the fact that click+move will fire a click event after move\n  private _clickEvent: EventEmitter<void> = new EventEmitter<void>(true);\n\n  private pointerUp = (event: PointerEvent) => {\n    this._pointerUp(event);\n  }\n\n  private pointerDown = (event: PointerEvent) => {\n    this._pointerDown(event);\n  }\n\n  private pointerMove = (event: PointerEvent) => {\n    this._pointerMove(event);\n  }\n\n  public set disableSwiping(state: boolean) {\n    this._disableSwiping = state;\n  }\n\n  public set enableZoom(state: boolean) {\n    this._enableZoom = state;\n  }\n\n  public set enablePan(state: boolean) {\n    this._enablePan = state;\n  }\n\n  bind(el: ElementRef) {\n    if (isPlatformBrowser(this.platform_id)) {\n      el.nativeElement.addEventListener('pointerdown', this.pointerDown);\n      el.nativeElement.addEventListener('pointerup', this.pointerUp);\n      el.nativeElement.addEventListener('pointercancel', this.pointerUp);\n      el.nativeElement.addEventListener('pointerout', this.pointerUp);\n      el.nativeElement.addEventListener('pointerleave', this.pointerUp);\n      el.nativeElement.addEventListener('pointermove', this.pointerMove);\n    }\n  }\n\n  unbind(el: ElementRef) {\n    if (isPlatformBrowser(this.platform_id)) {\n      el.nativeElement.removeEventListener('pointerdown', this.pointerDown);\n      el.nativeElement.removeEventListener('pointerup', this.pointerUp);\n      el.nativeElement.removeEventListener('pointercancel', this.pointerUp);\n      el.nativeElement.removeEventListener('pointerout', this.pointerUp);\n      el.nativeElement.removeEventListener('pointerleave', this.pointerUp);\n      el.nativeElement.removeEventListener('pointermove', this.pointerMove);\n    }\n  }\n\n  public get slideEvent(): EventEmitter<number> {\n    return this._slideEvent;\n  }\n\n  public get clickEvent(): EventEmitter<void> {\n    return this._clickEvent;\n  }\n\n  constructor(\n    // rendererFactory: RendererFactory2,\n    @Inject(PLATFORM_ID) private platform_id: any\n  ) {\n    // this._renderer = rendererFactory.createRenderer(null, null);\n  }\n\n  private _pointerDown(e: PointerEvent) {\n    this._evCache.push(e);\n    if (this._evCache.length === 1) {\n      this._startEVCache = e;\n      if (this._enablePan || this._enableZoom) {\n        // Cache the image sizes and container sizes\n        this._loadOriginalState(e);\n        // Convert backgroundSize to pixels\n        this._convertBGSizeToPixels(e);\n        // Convert backgroundPosition to pixels\n        this._convertBGPosToPixels(e);\n      }\n    }\n  }\n\n  // Saving original state, calculation is done only once during during 1st pointerdown\n  private _loadOriginalState(e: PointerEvent): void {\n    if (!this._originalState.valid && e.target && (e.target as any).style && (e.target as any).style.backgroundImage) {\n      const imgUrlArr = (e.target as any).style.backgroundImage.match(/^url\\([\"']?(.+?)[\"']?\\)$/);\n      const img = new Image();\n      img.src = imgUrlArr[1];\n      this._originalState.aw = (e.target as any).offsetWidth;\n      this._originalState.ah = (e.target as any).offsetHeight;\n      this._originalState.w = img.width;\n      this._originalState.h = img.height;\n    }\n  }\n\n  // Convert BG size literals and percentage to pixels in x axis and preserve image aspect ratio\n  private _convertBGSizeToPixels(e: PointerEvent): void {\n    const imgElement = (e.target as any);\n    let bgSize = imgElement.style.backgroundSize;\n    if (bgSize.indexOf(' ') > -1) {\n      // backgroundSize pattern \"auto 100px\" or \"100px auto\" or \"100px 200px\"\n      const sizeTuple = bgSize.split(' ');\n      bgSize = this._originalState.widthBound ? sizeTuple[0] : sizeTuple[1];\n    }\n    if (bgSize === 'cover') {\n      bgSize = this._originalState.widthBound ? this._originalState.ah * this._originalState.ar : this._originalState.aw;\n    }\n    else if (bgSize.indexOf('px') > -1) {\n      bgSize = bgSize.substring(0, bgSize.length - 2);\n    }\n    else if (bgSize.indexOf('%') > -1) { // Untested\n      const bgSizePercentage = Number(bgSize.substring(0, bgSize.length - 1)) / 100;\n      bgSize = this._originalState.widthBound ? this._originalState.aw * bgSizePercentage : this._originalState.ah * bgSizePercentage * this._originalState.ar;\n    }\n    else if (bgSize === 'auto') {\n      bgSize = this._originalState.w;\n    }\n    else if (bgSize === 'contain') {\n      bgSize = this._originalState.widthBound ? this._originalState.aw : this._originalState.ah * this._originalState.ar;\n    }\n    else {\n      // backgroundSize pattern \"could not identify\" // will be treated as contain\n      bgSize = this._originalState.widthBound ? this._originalState.aw : this._originalState.ah * this._originalState.ar;\n    }\n    imgElement.style.backgroundSize = bgSize + 'px auto';\n  }\n\n  // Convert BG position literals and percentage to pixels\n  private _convertBGPosToPixels(e: PointerEvent): void {\n    if (this._originalState.valid) {\n      const imgElement = (e.target as any);\n      const bgSize = this._currentBGSize(e);\n      let bgPosX = imgElement.style.backgroundPositionX;\n      if (bgPosX.indexOf('px') === -1) {\n        bgPosX = this._convertLiteralPosToPercentage(bgPosX);\n        if (bgPosX.indexOf('%') > -1) {\n          let bgPosXPercentage = Number(bgPosX.substring(0, bgPosX.length - 1)) / 100;\n          bgPosX = bgPosXPercentage * (this._originalState.aw - bgSize);\n        }\n        imgElement.style.backgroundPositionX = bgPosX + 'px';\n      }\n      let bgPosY = imgElement.style.backgroundPositionY;\n      if (bgPosY.indexOf('px') === -1) {\n        bgPosY = this._convertLiteralPosToPercentage(bgPosY);\n        if (bgPosY.indexOf('%') > -1) {\n          let bgPosYPercentage = Number(bgPosY.substring(0, bgPosY.length - 1)) / 100;\n          bgPosY = bgPosYPercentage * (this._originalState.ah - (bgSize / this._originalState.ar));\n        }\n        imgElement.style.backgroundPositionY = bgPosY + 'px';\n      }\n    }\n  }\n\n  private _pointerUp(e: PointerEvent) {\n    // Remove this event from the target's cache\n    for (let i = 0; i < this._evCache.length; i++) {\n      if (this._evCache[i].pointerId === e.pointerId) {\n        this._evCache.splice(i, 1);\n        break;\n      }\n    }\n    // Purge diagonal if 2 pointers are not present\n    if (this._evCache.length !== 2) {\n      this._previousDiagonal = -1;\n    }\n    // Purge start event and original state if no pointers are present\n    if (this._evCache.length === 0 && this._startEVCache !== null) {\n      this._checkClickOrSwipe(e);\n      this._startEVCache = null;\n      this._originalState = new State();\n    }\n  }\n\n  /**\n   * 0th Check\n   * target is a slide\n   *\n   * 1st Check for click\n   * or x movement is less than 15 px and y movement is less than 15 px\n   *\n   * 2nd if not click, check for swipe\n   * duration < 1000 ms\n   * and x movement is >= 30 px\n   * and y movement is <= 100 px\n   */\n  private _checkClickOrSwipe(e: PointerEvent): void {\n    if (!this._targetIsASlide(e)) {\n      return;\n    }\n    const duration = e.timeStamp - this._startEVCache!.timeStamp;\n    const dirX = e.pageX - this._startEVCache!.pageX;\n    const dirY = e.pageY - this._startEVCache!.pageY;\n    if (!this._enablePan // Skip click event when panning is enabled\n      && Math.abs(dirX) < 15 // Very less x movement\n      && Math.abs(dirY) < 15 // Very less y movement\n    ) {\n      // Click\n      this._clickEvent.emit();\n    }\n    else if (duration < 1000 // Short enough\n      && Math.abs(dirY) <= 100 // Horizontal enough\n      && Math.abs(dirX) >= 30 // Long enough\n      && !this._disableSwiping // swipe enabled\n      && this._cannotPanMoreTest(e, dirX) // cannot pan in swipe direction\n    ) {\n      // swipe\n      this._slideEvent.emit(dirX < 0 ? 1 : -1);\n    }\n  }\n\n  // Deem the target is a slide if it contains the slides class\n  private _targetIsASlide(e: PointerEvent): boolean {\n    return (e.target as any).classList.contains('slides');\n  }\n\n  // Check if image can pan more in the swipe direction. Return false if it can.\n  private _cannotPanMoreTest(e: PointerEvent, dirX: number): boolean {\n    if (!this._enablePan) { // Pan not enabled\n      return true;\n    }\n    const xPos = this._currentBGPosX(e);\n    const bgSize = this._currentBGSize(e);\n    if (dirX < 0 && bgSize > this._originalState.aw && Math.round(this._originalState.aw - bgSize - xPos) < 0) {\n      // image can be panned to the right\n      return false;\n    }\n    else if (dirX > 0 && bgSize > this._originalState.aw && xPos < 0) {\n      // image can be panned to the left\n      return false;\n    }\n    return true;\n  }\n\n  private _pointerMove(e: PointerEvent) {\n    // Prevent defaulted to start drag event after mouse click, else cancel event gets fired\n    e.preventDefault();\n\n    // If one pointer is down, goto 1 point action\n    if (this._evCache.length === 1 && this._enablePan) {\n      this._1pointMoveAction(e);\n    }\n    // Find this event in the cache and update its record with this event\n    for (let i = 0; i < this._evCache.length; i++) {\n      if (e.pointerId === this._evCache[i].pointerId) {\n        this._evCache[i] = e;\n        break;\n      }\n    }\n    // If two pointers are down, goto 2 point action\n    if (this._evCache.length === 2 && this._enableZoom) {\n      this._2pointMoveAction(e);\n    }\n  }\n\n  private _1pointMoveAction(e: PointerEvent): void {\n    if (this._evCache[0].pointerId === e.pointerId) {\n      const dx = this._evCache[0].pageX - e.pageX;\n      const dy = this._evCache[0].pageY - e.pageY;\n      if (this._originalState.valid && (dx !== 0 || dy !== 0)) {\n        this._transformBGPosition(e, dx, dy);\n      }\n    }\n  }\n\n  private _2pointMoveAction(e: PointerEvent): void {\n    // check for pinch gestures\n    // Calculate the distance between the two pointers\n    const x = Math.abs(this._evCache[0].pageX - this._evCache[1].pageX);\n    const y = Math.abs(this._evCache[0].pageY - this._evCache[1].pageY);\n    let currentDiagonal = Math.sqrt((x * x) + (y * y));\n\n    // Start 2 point action after previous diagonal and orginal state is valid\n    if (this._previousDiagonal > 0 && this._originalState.valid) {\n      const deltaX = currentDiagonal - this._previousDiagonal;\n      this._transformBGSize(e, deltaX);\n    }\n    this._previousDiagonal = currentDiagonal;\n  }\n\n  // commented and not used, actual deltaX is too small for proper user experience\n  // calculate movement in x axis after 2 point movement, assume isosceles right triangle\n  // private _deltaX(prevDiag: number, currDiag: number): number {\n  //   return (currDiag - prevDiag) / Math.sqrt(2);\n  // }\n\n  // Transform the image background position\n  private _transformBGPosition(e: PointerEvent, dx: number, dy: number): void {\n    const imgElement = (e.target as any);\n    const previousPosX = this._currentBGPosX(e);\n    const previousPosY = this._currentBGPosY(e);\n    const newPosX = this._newBGPosXConstraint(previousPosX - dx, e);\n    const newPosY = this._newBGPosYConstraint(previousPosY - dy, e);\n    if (newPosX !== previousPosX || newPosY !== previousPosY) {\n      this._setBGPos(imgElement, newPosX, newPosY);\n    }\n  }\n\n  // Set new background position\n  private _setBGPos(element: any, x: number, y: number): void {\n    element.style.backgroundPositionX = x + 'px';\n    element.style.backgroundPositionY = y + 'px';\n  }\n\n  // Check for current background position x\n  private _currentBGPosX(e: PointerEvent): number {\n    let bgPosX = (e.target as any).style.backgroundPositionX;\n    if (bgPosX.indexOf('px') > -1) {\n      bgPosX = bgPosX.substring(0, bgPosX.length - 2);\n    }\n    return Number(bgPosX);\n  }\n\n  // Check for current background position y\n  private _currentBGPosY(e: PointerEvent): number {\n    let bgPosY = (e.target as any).style.backgroundPositionY;\n    if (bgPosY.indexOf('px') > -1) {\n      bgPosY = bgPosY.substring(0, bgPosY.length - 2);\n    }\n    return Number(bgPosY);\n  }\n\n  private _convertLiteralPosToPercentage(literal: string): string {\n    if (literal === 'center') {\n      return '50%';\n    }\n    else if (literal === 'top' || literal === 'left') {\n      return '0%';\n    }\n    else if (literal === 'bottom' || literal === 'right') {\n      return '100%';\n    }\n    return '50%';\n  }\n\n  // Transform the image background size by deltaX\n  private _transformBGSize(e: PointerEvent, deltaX: number): void {\n    const imgElement = (e.target as any);\n    const currentSize = this._currentBGSize(e);\n    const newSize = this._newBGSizeConstraint(currentSize + deltaX);\n    if (newSize !== currentSize) {\n      this._setBGSize(imgElement, newSize);\n    }\n  }\n\n  private _setBGSize(element: any, size: number): void {\n    element.style.backgroundSize = size + 'px auto';\n    // stop all browser touch action after zooming slide\n    element.style.touchAction = 'none';\n  }\n\n  // Check for current background size\n  private _currentBGSize(e: PointerEvent): number {\n    const bgSize = (e.target as any).style.backgroundSize;\n    if (bgSize.indexOf(' ') > -1) {\n      // backgroundSize pattern \"auto 100px\" or \"100px auto\" or \"100px 200px\"\n      const sizeTuple = bgSize.split(' ');\n      const size = this._originalState.widthBound ? sizeTuple[0].substring(0, sizeTuple[0].length - 2) : sizeTuple[1].substring(0, sizeTuple[1].length - 2);\n      return Number(size);\n    }\n    else if (bgSize.indexOf('px') > -1) {\n      // backgroundSize pattern \"100px\"\n      const size = bgSize.substring(0, bgSize.length - 2);\n      return Number(size);\n    }\n    return 0;\n  }\n\n  // If image size is below \"contain\", set to \"contain\"\n  private _newBGSizeConstraint(newSize: number): number {\n    if (this._originalState.widthBound) {\n      return newSize < this._originalState.aw ? this._originalState.aw : newSize;\n    } else {\n      return newSize / this._originalState.ar < this._originalState.ah ? this._originalState.ah * this._originalState.ar : newSize;\n    }\n  }\n\n  private _newBGPosXConstraint(newX: number, e: PointerEvent): number {\n    const bgSize = this._currentBGSize(e);\n    if (bgSize >= this._originalState.aw) {\n      // when image width is greater than container width\n      if (newX > 0) {\n        return 0;\n      }\n      else if (newX < this._originalState.aw - bgSize) {\n        return this._originalState.aw - bgSize;\n      }\n    }\n    else {\n      if (newX < 0) {\n        return 0;\n      }\n      else if (newX > this._originalState.aw - bgSize) {\n        return this._originalState.aw - bgSize;\n      }\n    }\n    return newX;\n  }\n\n  private _newBGPosYConstraint(newY: number, e: PointerEvent): number {\n    const bgSize = this._currentBGSize(e);\n    if (bgSize / this._originalState.ar >= this._originalState.ah) {\n      // when image height is greater than container height\n      if (newY > 0) {\n        return 0;\n      }\n      else if (newY < this._originalState.ah - (bgSize / this._originalState.ar)) {\n        return this._originalState.ah - (bgSize / this._originalState.ar);\n      }\n    }\n    else {\n      if (newY < 0) {\n        return 0;\n      }\n      else if (newY > this._originalState.ah - (bgSize / this._originalState.ar)) {\n        return this._originalState.ah - (bgSize / this._originalState.ar);\n      }\n    }\n    return newY;\n  }\n}\n","import { Component, ElementRef, EventEmitter, Inject, Input, Output, PLATFORM_ID, Renderer2, ViewChild, DoCheck, NgZone, OnInit, OnDestroy, ChangeDetectionStrategy, ChangeDetectorRef, OnChanges, SimpleChanges, AfterViewInit, makeStateKey, TransferState } from '@angular/core';\n// import { SwipeService } from './swipe.service';\nimport { isPlatformServer, DOCUMENT, NgStyle } from '@angular/common';\nimport { ISlide } from './ISlide';\nimport { IImage } from './IImage';\nimport { DomSanitizer, SafeStyle } from '@angular/platform-browser';\nimport { PointerService } from './pointer.service';\nimport { Subscription } from 'rxjs';\n\nconst FIRST_SLIDE_KEY = makeStateKey<any>('firstSlide');\n\n@Component({\n  selector: 'carouselx',\n  standalone: true,\n  imports: [NgStyle],\n  templateUrl: './carousel.component.html',\n  styleUrls: ['./carousel.component.scss'],\n  providers: [PointerService],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CarouselComponent implements OnInit, AfterViewInit, DoCheck, OnChanges, OnDestroy {\n  slideIndex: number = -1;\n  slides: ISlide[] = [];\n  hideLeftArrow: boolean = false;\n  hideRightArrow: boolean = false;\n  private _urlCache!: (string | IImage)[];\n  private _autoplayIntervalId: any;\n  private _initial: boolean = true;\n  private _isHidden: boolean = false;\n  private _slideSub!: Subscription;\n  private _clickSub!: Subscription;\n\n  @Input() imageUrls: (string | IImage)[] = [];\n  @Input() height: string = '100%';\n  @Input() minHeight!: string;\n  @Input() arrowSize!: string;\n  @Input() showArrows: boolean = true;\n  @Input() disableSwiping: boolean = false;\n  @Input() autoPlay: boolean = false;\n  @Input() autoPlayInterval: number = 3333;\n  @Input() stopAutoPlayOnSlide: boolean = true;\n  @Input() autoPlayWaitForLazyLoad: boolean = true;\n  @Input() debug!: boolean;\n  @Input() backgroundSize: string = 'cover';\n  @Input() backgroundPosition: string = 'center center';\n  @Input() backgroundRepeat: string = 'no-repeat';\n  @Input() showDots: boolean = false;\n  @Input() dotColor: string = '#FFF';\n  @Input() showCaptions: boolean = true;\n  @Input() captionColor: string = '#FFF';\n  @Input() captionBackground: string = 'rgba(0, 0, 0, .35)';\n  @Input() lazyLoad: boolean = false;\n  @Input() hideOnNoSlides: boolean = false;\n  @Input() fullscreen: boolean = false;\n  @Input() enableZoom: boolean = false;\n  @Input() enablePan: boolean = false;\n  @Input() noLoop: boolean = false;\n\n  @Output() onSlideLeft = new EventEmitter<number>();\n  @Output() onSlideRight = new EventEmitter<number>();\n  @Output() onSwipeLeft = new EventEmitter<number>();\n  @Output() onSwipeRight = new EventEmitter<number>();\n  @Output() onFullscreenExit = new EventEmitter<boolean>();\n  @Output() onIndexChanged = new EventEmitter<number>();\n  @Output() onImageLazyLoad = new EventEmitter<ISlide>();\n  @Output() onClick = new EventEmitter<{ slide: ISlide, index: number }>();\n\n  @ViewChild('container', { static: true }) container!: ElementRef;\n  @ViewChild('prevArrow', { static: true }) prevArrow!: ElementRef;\n  @ViewChild('nextArrow', { static: true }) nextArrow!: ElementRef;\n\n  get safeStyleDotColor(): SafeStyle {\n    return this.sanitizer.bypassSecurityTrustStyle(`--dot-color: ${ this.dotColor }`);\n  }\n\n  constructor(\n    private _pointerService: PointerService,\n    private _renderer: Renderer2,\n    private _transferState: TransferState,\n    private _ngZone: NgZone,\n    private _cdRef: ChangeDetectorRef,\n    public sanitizer: DomSanitizer,\n    @Inject(PLATFORM_ID) private platform_id: any,\n    @Inject(DOCUMENT) private document: any\n  ) { }\n\n  ngOnInit() {\n    if (this.debug !== undefined) {\n      console.warn('[Deprecation Warning]: The debug input will be removed from ng-carousel in 1.3.0');\n    }\n    this._slideSub = this._pointerService.slideEvent.subscribe((indexDirection: number) => {\n      this.onSlide(indexDirection, true);\n    });\n    this._clickSub = this._pointerService.clickEvent.subscribe(() => {\n      this._onClick();\n    });\n    if (this.noLoop) {\n      this.hideLeftArrow = true;\n    }\n  }\n\n  ngAfterViewInit(): void {\n    this._pointerService.bind(this.container);\n  }\n\n  ngOnDestroy() {\n    try {\n      if (this._slideSub && !this._slideSub.closed) {\n        this._slideSub.unsubscribe();\n      }\n    }\n    catch (error) {\n      console.warn('Slide Subscription error caught in ng-carousel OnDestroy:', error);\n    }\n\n    try {\n      if (this._clickSub && !this._clickSub.closed) {\n        this._clickSub.unsubscribe();\n      }\n    }\n    catch (error) {\n      console.warn('Click Subscription error caught in ng-carousel OnDestroy:', error);\n    }\n\n    try {\n      this._pointerService.unbind(this.container);\n    }\n    catch (error) {\n      console.warn('Pointer Service unbind error caught in ng-carousel OnDestroy:', error);\n    }\n\n    try {\n      if (this._autoplayIntervalId) {\n        this._ngZone.runOutsideAngular(() => clearInterval(this._autoplayIntervalId));\n        this._autoplayIntervalId = null;\n      }\n    }\n    catch (error) {\n      console.warn('Autoplay cancel error caught in ng-carousel OnDestroy:', error);\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['noLoop']) {\n      if (changes['noLoop'].currentValue) {\n        this.hideLeftArrow = this.slideIndex <= 0;\n        this.hideRightArrow = this.slideIndex === this.slides.length - 1;\n      }\n      else {\n        this.hideLeftArrow = false;\n        this.hideRightArrow = false;\n      }\n\n      this._cdRef.detectChanges();\n    }\n  }\n\n  ngDoCheck() {\n    // if this is the first being called, create a copy of the input\n    if (this.imageUrls && this.imageUrls.length > 0) {\n      if (this._initial === true) {\n        this._urlCache = Array.from(this.imageUrls);\n      }\n\n      if (this._isHidden === true) {\n        this._renderer.removeStyle(this.container.nativeElement, 'display');\n        this._isHidden = false;\n      }\n\n      this.setSlides();\n    }\n    else if (this.hideOnNoSlides === true) {\n      this._renderer.setStyle(this.container.nativeElement, 'display', 'none');\n      this._isHidden = true;\n    }\n\n    this.setStyles();\n    this.handleAutoPlay();\n    this._pointerService.disableSwiping = this.disableSwiping;\n    this._pointerService.enableZoom = this.enableZoom;\n    this._pointerService.enablePan = this.enablePan;\n  }\n\n  /**\n   * @param {number} indexDirection\n   * @param {boolean} isSwipe\n   * @description this is the function that should be called to make the slides change.\n   *              indexDirection to move back is -1, to move forward is 1, and to stay in place is 0.\n   *              0 is taken into account for failed swipes\n   */\n  onSlide(indexDirection: number, isSwipe?: boolean): void {\n    this.handleAutoPlay(this.stopAutoPlayOnSlide);\n    this.slide(indexDirection, isSwipe);\n  }\n\n  // /**\n  //  * @param {TouchEvent} e\n  //  * @param {string} when\n  //  * @description Use the swipe service to detect swipe events from phone and tablets\n  //  */\n  // onSwipe(e: TouchEvent, when: string): void {\n  //   if (this.disableSwiping === true) {\n  //     return;\n  //   }\n\n  //   const indexDirection = this._swipeService.swipe(e, when);\n  //   // handle a failed swipe\n  //   if (indexDirection === 0) {\n  //     return;\n  //   }\n  //   else {\n  //     this.onSlide(indexDirection, true);\n  //   }\n  // }\n\n  /**\n   * @description Redirect to current slide \"href\" if defined\n   */\n  private _onClick(): void {\n    const currentSlide = this.slides.length > 0 && this.slides[this.slideIndex];\n    if(currentSlide) this.onClick.emit({ slide: currentSlide, index: this.slideIndex });\n\n    if (currentSlide && currentSlide.image.clickAction) {\n      currentSlide.image.clickAction();\n    }\n    else if (currentSlide && currentSlide.image.href) {\n      this.document.location.href = currentSlide.image.href;\n    }\n  }\n\n  /**\n   * @param {number} index\n   * @description set the index to the desired index - 1 and simulate a right slide\n   */\n  goToSlide(index: number) {\n    const beforeClickIndex = this.slideIndex;\n    this.slideIndex = index - 1;\n    this.setSlideIndex(1);\n\n    if (this.slides[this.slideIndex] && !this.slides[this.slideIndex].loaded) {\n      this.loadRemainingSlides();\n    }\n\n    this.handleAutoPlay(this.stopAutoPlayOnSlide);\n    this.slideRight(beforeClickIndex);\n    this.slides[beforeClickIndex].selected = false;\n    this.slides[this.slideIndex].selected = true;\n\n    this._cdRef.detectChanges();\n  }\n\n  /**\n   * @param {number} index\n   * @description set the index to the desired index - 1 and simulate a right slide\n   */\n  getSlideStyle(index: number) {\n    const slide = this.slides[index];\n\n    if (slide && slide.loaded) {\n      return {\n        \"background-image\": 'url(' + slide.image.url + ')',\n        \"background-size\": slide.image.backgroundSize || this.backgroundSize,\n        \"background-position\": slide.image.backgroundPosition || this.backgroundPosition,\n        \"background-repeat\": slide.image.backgroundRepeat || this.backgroundRepeat\n      };\n    }\n    else {\n      // doesn't compile correctly if returning an empty object, sooooo.....\n      return {\n        \"background-image\": undefined,\n        \"background-size\": undefined,\n        \"background-position\": undefined,\n        \"background-repeat\": undefined\n      };\n    }\n  }\n\n  exitFullScreen(e: Event) {\n    e.preventDefault();\n    this.fullscreen = false;\n    this.onFullscreenExit.emit(true);\n  }\n\n  /**\n   * @param {number} indexDirection\n   * @param {boolean} isSwipe\n   * @description Set the new slide index, then make the transition happen.\n   */\n  private slide(indexDirection: number, isSwipe?: boolean): void {\n    const oldIndex = this.slideIndex;\n\n    if (this.setSlideIndex(indexDirection)) {\n      if (this.slides[this.slideIndex] && !this.slides[this.slideIndex].loaded) {\n        this.loadRemainingSlides();\n      }\n\n      if (indexDirection === 1) {\n        this.slideRight(oldIndex, isSwipe);\n      }\n      else {\n        this.slideLeft(oldIndex, isSwipe);\n      }\n\n      this.slides[oldIndex].selected = false;\n      this.slides[this.slideIndex].selected = true;\n    }\n\n    this._cdRef.detectChanges();\n  }\n\n  /**\n   * @param {number} indexDirection\n   * @description This is just treating the url array like a circular list.\n   */\n  private setSlideIndex(indexDirection: number): boolean {\n    let willChange = true;\n    this.slideIndex += indexDirection;\n\n    if (this.noLoop) {\n      this.hideRightArrow = this.slideIndex === this.slides.length - 1;\n      this.hideLeftArrow = false;\n    }\n\n    if (this.slideIndex < 0) {\n      if (this.noLoop) {\n        this.slideIndex -= indexDirection;\n        willChange = false;\n        this.hideLeftArrow = true;\n      }\n      else {\n        this.slideIndex = this.slides.length - 1;\n      }\n    }\n    else if (this.slideIndex >= this.slides.length) {\n      if (this.noLoop) {\n        this.slideIndex -= indexDirection;\n        willChange = false;\n        this.hideRightArrow = true;\n      }\n      else {\n        this.slideIndex = 0;\n      }\n    }\n\n    if (willChange) {\n      this.onIndexChanged.emit(this.slideIndex);\n    }\n\n    return willChange;\n  }\n\n  /**\n   * @param {number} oldIndex\n   * @param {boolean} isSwipe\n   * @description This function handles the variables to move the CSS classes around accordingly.\n   *              In order to correctly handle animations, the new slide as well as the slides to\n   *              the left and right are assigned classes.\n   */\n  private slideLeft(oldIndex: number, isSwipe?: boolean): void {\n    if (isSwipe === true) {\n      this.onSwipeLeft.emit(this.slideIndex);\n    }\n    else {\n      this.onSlideLeft.emit(this.slideIndex);\n    }\n\n    this.slides[this.getLeftSideIndex(oldIndex)].leftSide = false;\n    this.slides[oldIndex].leftSide = true;\n    this.slides[oldIndex].action = 'slideOutLeft';\n    this.slides[this.slideIndex].rightSide = false;\n    this.slides[this.getRightSideIndex()].rightSide = true;\n    this.slides[this.slideIndex].action = 'slideInRight';\n  }\n\n  /**\n   * @param {number} oldIndex\n   * @param {boolean} isSwipe\n   * @description This function handles the variables to move the CSS classes around accordingly.\n   *              In order to correctly handle animations, the new slide as well as the slides to\n   *              the left and right are assigned classes.\n   */\n  private slideRight(oldIndex: number, isSwipe?: boolean): void {\n    if (isSwipe === true) {\n      this.onSwipeRight.emit(this.slideIndex);\n    }\n    else {\n      this.onSlideRight.emit(this.slideIndex);\n    }\n\n    this.slides[this.getRightSideIndex(oldIndex)].rightSide = false;\n    this.slides[oldIndex].rightSide = true;\n    this.slides[oldIndex].action = 'slideOutRight';\n    this.slides[this.slideIndex].leftSide = false;\n    this.slides[this.getLeftSideIndex()].leftSide = true;\n    this.slides[this.slideIndex].action = 'slideInLeft';\n  }\n\n  /**\n   * @description Check to make sure slide images have been set or haven't changed\n   */\n  private setSlides(): void {\n    if (this.imageUrls) {\n      if (this.checkCache() || this._initial === true) {\n        this._initial = false;\n        this._urlCache = Array.from(this.imageUrls);\n        this.slides = [];\n\n        if (this.lazyLoad === true) {\n          this.buildLazyLoadSlideArray();\n        }\n        else {\n          this.buildSlideArray();\n        }\n        this._cdRef.detectChanges();\n      }\n    }\n  }\n\n  /**\n   * @description create the slides without background urls, which will be added in\n   *              for the \"lazy load,\" then load only the first slide\n   */\n  private buildLazyLoadSlideArray(): void {\n    for (let image of this.imageUrls) {\n      this.slides.push({\n        image: (typeof image === 'string' ? { url: null } : { url: null, href: image.href || '' }),\n        action: '',\n        leftSide: false,\n        rightSide: false,\n        selected: false,\n        loaded: false\n      });\n    }\n    if (this.slideIndex === -1) {\n      this.slideIndex = 0;\n    }\n    this.slides[this.slideIndex].selected = true;\n    this.loadFirstSlide();\n    this.onIndexChanged.emit(this.slideIndex);\n  }\n\n  /**\n   * @description create the slides with background urls all at once\n   */\n  private buildSlideArray(): void {\n    for (let image of this.imageUrls) {\n      this.slides.push({\n        image: (typeof image === 'string' ? { url: image } : image),\n        action: '',\n        leftSide: false,\n        rightSide: false,\n        selected: false,\n        loaded: true\n      });\n    }\n    if (this.slideIndex === -1) {\n      this.slideIndex = 0;\n    }\n    this.slides[this.slideIndex].selected = true;\n    this.onIndexChanged.emit(this.slideIndex);\n  }\n\n  /**\n   * @description load the first slide image if lazy loading\n   *              this takes server side and browser side into account\n   */\n  private loadFirstSlide(): void {\n    const tmpIndex = this.slideIndex;\n    const tmpImage = this.imageUrls[tmpIndex];\n\n    // if server side, we don't need to worry about the rest of the slides\n    if (isPlatformServer(this.platform_id)) {\n      this.slides[tmpIndex].image = (typeof tmpImage === 'string' ? { url: tmpImage } : tmpImage);\n      this.slides[tmpIndex].loaded = true;\n      this._transferState.set(FIRST_SLIDE_KEY, this.slides[tmpIndex]);\n    }\n    else {\n      const firstSlideFromTransferState = this._transferState.get(FIRST_SLIDE_KEY, null as any);\n      // if the first slide didn't finish loading on the server side, we need to load it\n      if (firstSlideFromTransferState === null) {\n        let loadImage = new Image();\n        loadImage.src = (typeof tmpImage === 'string' ? tmpImage : tmpImage.url) || '';\n        loadImage.addEventListener('load', () => {\n          this.slides[tmpIndex].image = (typeof tmpImage === 'string' ? { url: tmpImage } : tmpImage);\n          this.slides[tmpIndex].loaded = true;\n          this.onImageLazyLoad.emit(this.slides[tmpIndex]);\n          this._cdRef.detectChanges();\n        });\n      }\n      else {\n        this.slides[tmpIndex] = firstSlideFromTransferState;\n        this._transferState.remove(FIRST_SLIDE_KEY);\n      }\n    }\n  }\n\n  /**\n   * @description if lazy loading in browser, start loading remaining slides\n   * @todo: figure out how to not show the spinner if images are loading fast enough\n   */\n  private loadRemainingSlides(): void {\n    for (let i = 0; i < this.slides.length; i++) {\n      if (!this.slides[i].loaded) {\n        new Promise((resolve) => {\n          const tmpImage = this.imageUrls[i];\n          let loadImage = new Image();\n          loadImage.addEventListener('load', () => {\n            this.slides[i].image = (typeof tmpImage === 'string' ? { url: tmpImage } : tmpImage);\n            this.slides[i].loaded = true;\n            this._cdRef.detectChanges();\n            this.onImageLazyLoad.emit(this.slides[i]);\n            resolve(true);\n          });\n          loadImage.src = (typeof tmpImage === 'string' ? tmpImage : tmpImage.url) || '';\n        });\n      }\n    }\n  }\n\n  /**\n   * @param {boolean} stopAutoPlay\n   * @description Start or stop autoPlay, don't do it at all server side\n   */\n  private handleAutoPlay(stopAutoPlay?: boolean): void {\n    if (isPlatformServer(this.platform_id)) {\n      return;\n    }\n\n    if (stopAutoPlay === true || this.autoPlay === false) {\n      if (this._autoplayIntervalId) {\n        this._ngZone.runOutsideAngular(() => clearInterval(this._autoplayIntervalId));\n        this._autoplayIntervalId = null;\n      }\n    }\n    else if (!this._autoplayIntervalId) {\n      this._ngZone.runOutsideAngular(() => {\n        this._autoplayIntervalId = setInterval(() => {\n          if (!this.autoPlayWaitForLazyLoad || (this.autoPlayWaitForLazyLoad && this.slides[this.slideIndex] && this.slides[this.slideIndex].loaded)) {\n            this._ngZone.run(() => this.slide(1));\n          }\n        }, this.autoPlayInterval);\n      });\n    }\n  }\n\n  /**\n   * @description Keep the styles up to date with the input\n   */\n  private setStyles(): void {\n    if (this.fullscreen) {\n      this._renderer.setStyle(this.container.nativeElement, 'height', '100%');\n      // Would be nice to make it configurable\n      this._renderer.setStyle(this.container.nativeElement, 'background-color', 'white');\n    }\n    else {\n      // Would be nice to make it configurable\n      this._renderer.removeStyle(this.container.nativeElement, 'background-color');\n      if (this.height) {\n        this._renderer.setStyle(this.container.nativeElement, 'height', this.height);\n      }\n\n      if (this.minHeight) {\n        this._renderer.setStyle(this.container.nativeElement, 'min-height', this.minHeight);\n      }\n    }\n    if (this.arrowSize) {\n      this._renderer.setStyle(this.prevArrow.nativeElement, 'height', this.arrowSize);\n      this._renderer.setStyle(this.prevArrow.nativeElement, 'width', this.arrowSize);\n      this._renderer.setStyle(this.nextArrow.nativeElement, 'height', this.arrowSize);\n      this._renderer.setStyle(this.nextArrow.nativeElement, 'width', this.arrowSize);\n    }\n  }\n\n  /**\n   * @description compare image array to the cache, returns false if no changes\n   */\n  private checkCache(): boolean {\n    return !(this._urlCache.length === this.imageUrls.length && this._urlCache.every((cacheElement, i) => cacheElement === this.imageUrls[i]));\n  }\n\n  /**\n   * @param {number} i\n   * @returns {number}\n   * @description get the index for the slide to the left of the new slide\n   */\n  private getLeftSideIndex(i?: number): number {\n    if (i === undefined) {\n      i = this.slideIndex;\n    }\n\n    if (--i < 0) {\n      i = this.slides.length - 1;\n    }\n\n    return i;\n  }\n\n  /**\n   * @param {number} i\n   * @returns {number}\n   * @description get the index for the slide to the right of the new slide\n   */\n  private getRightSideIndex(i?: number): number {\n    if (i === undefined) {\n      i = this.slideIndex;\n    }\n\n    if (++i >= this.slides.length) {\n      i = 0;\n    }\n\n    return i;\n  }\n\n  /**\n   * @param {number} index\n   * @param {ISlide} slide\n   * @returns {any}\n   * @description a trackBy function for the ngFor loops\n   */\n  trackByFn(index: number, slide: ISlide): any {\n    return slide.image;\n  }\n\n  /**\n   * @description don't let click events fire, handle in pointer service instead\n   */\n  handleClick(even: any) {\n    event!.preventDefault();\n  }\n}\n","<!-- fullscreen bar -->\n<div\n  [class.display-none]=\"!fullscreen\"\n  class=\"fs-container\"\n  (click)=\"exitFullScreen($event)\"\n>\n  <i title=\"Back\" class=\"arrow-exitfs prev\"></i>\n</div>\n<div\n  #container\n  class=\"carousel-container\"\n  [class.carousel-container-fs]=\"fullscreen\"\n>\n  <!-- slides -->\n  @for (slide of slides; track trackByFn(i, slide); let i = $index) {\n     <a\n     class=\"slides\"\n     href=\"#!\"\n     tabindex=\"-1\"\n     [title]=\"slide?.image?.title\"\n     [ngStyle]=\"getSlideStyle(i)\"\n     (click)=\"handleClick($event)\"\n     [class.selected]=\"slide?.selected\"\n     [class.hide-slide]=\"\n          !slide?.selected && !slide?.leftSide && !slide?.rightSide\n     \"\n     [class.left-side]=\"slide?.leftSide\"\n     [class.right-side]=\"slide?.rightSide\"\n     [class.slide-in-left]=\"slide?.action === 'slideInLeft'\"\n     [class.slide-in-right]=\"slide?.action === 'slideInRight'\"\n     [class.slide-out-left]=\"slide?.action === 'slideOutLeft'\"\n     [class.slide-out-right]=\"slide?.action === 'slideOutRight'\"\n     [class.link]=\"slide?.image?.clickAction || slide?.image?.href\"\n     >\n     @if (!slide?.loaded) {\n          <div class=\"loader\"></div>\n     } \n     @if (showCaptions && slide?.image?.caption) {\n          <div\n               class=\"caption\"\n               [ngStyle]=\"{ 'color': captionColor, 'background-color': captionBackground }\"\n               [innerHTML]=\"slide?.image?.caption\"\n          ></div>\n     }\n     </a>\n  }\n  <!-- left arrow -->\n  <div\n    [class.display-none]=\"!showArrows || hideLeftArrow\"\n    (click)=\"onSlide(-1)\"\n    class=\"arrow-container prev\"\n  >\n    <i #prevArrow title=\"Previous\" class=\"arrow prev\"></i>\n  </div>\n  <!-- right arrow -->\n  <div\n    [class.display-none]=\"!showArrows || hideRightArrow\"\n    (click)=\"onSlide(1)\"\n    class=\"arrow-container next\"\n  >\n    <i #nextArrow title=\"Next\" class=\"arrow next\"></i>\n  </div>\n  <!-- dots -->\n  @if (showDots) {\n  <ul class=\"slick-dots\">\n    @for (slide of slides; track trackByFn(i, slide); let i = $index) {\n    <li (click)=\"goToSlide(i)\" [class.slick-active]=\"slide.selected\">\n      <button type=\"button\" [attr.style]=\"safeStyleDotColor\">\n        {{ i }}\n      </button>\n    </li>\n    }\n  </ul>\n  }\n</div>\n","/*\n * Public API Surface of ngx-carousel\n */\n\nexport * from './lib/carousel.component'\nexport * from './lib/IImage'\nexport * from './lib/ISlide'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PointerService"],"mappings":"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"}