{"version":3,"file":"ngx-bootstrap-carousel.mjs","sources":["../../../../src/carousel/carousel.config.ts","../../../../src/carousel/utils.ts","../../../../src/carousel/carousel.component.ts","../../../../src/carousel/carousel.component.html","../../../../src/carousel/slide.component.ts","../../../../src/carousel/carousel.module.ts","../../../../src/carousel/ngx-bootstrap-carousel.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CarouselConfig {\n  /* Default interval of auto changing of slides */\n  interval = 5000;\n\n  /* Is loop of auto changing of slides can be paused */\n  noPause = false;\n\n  /* Is slides can wrap from the last to the first slide */\n  noWrap = false;\n\n  /* Show carousel-indicators */\n  showIndicators = true;\n\n  /* Slides can be paused on focus */\n  pauseOnFocus = false;\n\n  /* If `true` - carousel indicators indicate slides chunks works ONLY if singleSlideOffset = FALSE */\n  indicatorsByChunk = false;\n\n  /* If value more then 1 — carousel works in multilist mode */\n  itemsPerSlide = 1;\n\n  /* If `true` — carousel shifts by one element. By default carousel shifts by number\n    of visible elements (itemsPerSlide field) */\n  singleSlideOffset = false;\n}\n","/**\n * Returns the index of the last element in the array where predicate is true, and -1\n * otherwise.\n * @param array The source array to search in\n * @param predicate find calls predicate once for each element of the array, in descending\n * order, until it finds one where predicate returns true. If such an element is found,\n * findLastIndex immediately returns that element index. Otherwise, findLastIndex returns -1.\n */\nexport function findLastIndex<T>(array: T[], predicate: (value: T, index: number, obj: T[]) => boolean): number {\n  let l = array.length;\n\n  while (l--) {\n    if (predicate(array[l], l, array)) {\n      return l;\n    }\n  }\n\n  return -1;\n}\n\nexport function chunkByNumber<T>(array: T[], size: number): T[][] {\n  const out = [];\n  const n = Math.ceil(array.length / size);\n  let i = 0;\n\n  while (i < n) {\n    const chunk = array.splice(0, i === n - 1 && size < array.length ? array.length : size);\n\n    out.push(chunk);\n    i++;\n  }\n\n  return out;\n}\n\nexport function isNumber(value?: unknown): value is number {\n  return typeof value === 'number' || Object.prototype.toString.call(value) === '[object Number]';\n}\n","/***\n * pause (not yet supported) (?string='hover') - event group name which pauses\n * the cycling of the carousel, if hover pauses on mouseenter and resumes on\n * mouseleave keyboard (not yet supported) (?boolean=true) - if false\n * carousel will not react to keyboard events\n * note: swiping not yet supported\n */\n/****\n * Problems:\n * 1) if we set an active slide via model changes, .active class remains on a\n * current slide.\n * 2) if we have only one slide, we shouldn't show prev/next nav buttons\n * 3) if first or last slide is active and noWrap is true, there should be\n * \"disabled\" class on the nav buttons.\n * 4) default interval should be equal 5000\n */\n\nimport {\n  Component, OnDestroy, AfterViewInit, Inject, PLATFORM_ID, ChangeDetectorRef, input, output, effect\n} from '@angular/core';\nimport { isPlatformBrowser, NgStyle } from '@angular/common';\n\nimport { LinkedList, getBsVer, IBsVersion } from 'ngx-bootstrap/utils';\nimport { SlideComponent } from './slide.component';\nimport { CarouselConfig } from './carousel.config';\nimport { findLastIndex, chunkByNumber, isNumber } from './utils';\nimport { SlideWithIndex, IndexedSlideList } from './models';\n\nexport enum Direction {\n  UNKNOWN,\n  NEXT,\n  PREV\n}\n\nlet _currentId = 1;\n\n/**\n * Base element to create carousel\n */\n@Component({\n    selector: 'carousel',\n    templateUrl: './carousel.component.html',\n    standalone: true,\n    imports: [NgStyle]\n})\nexport class CarouselComponent implements AfterViewInit, OnDestroy {\n  /* If `true` — carousel will not cycle continuously and will have hard stops (prevent looping) */\n  noWrap = input<boolean>(this._config.noWrap);\n  /*  If `true` — will disable pausing on carousel mouse hover */\n  noPause = input<boolean>(this._config.noPause);\n  /*  If `true` — carousel-indicators are visible  */\n  showIndicators = input<boolean>(this._config.showIndicators);\n  /*  If `true` - autoplay will be stopped on focus */\n  pauseOnFocus = input<boolean>(this._config.pauseOnFocus);\n  /* If `true` - carousel indicators indicate slides chunks\n     works ONLY if singleSlideOffset = FALSE */\n  indicatorsByChunk = input<boolean>(this._config.indicatorsByChunk);\n  /* If value more then 1 — carousel works in multilist mode */\n  itemsPerSlide = input<number>(this._config.itemsPerSlide);\n  /* If `true` — carousel shifts by one element. By default carousel shifts by number\n     of visible elements (itemsPerSlide field) */\n  singleSlideOffset = input<boolean>(this._config.singleSlideOffset);\n  /** Turn on/off animation. Animation doesn't work for multilist carousel */\n  isAnimated = input<boolean>(false);\n\n  /** Will be emitted when active slide has been changed. Part of two-way-bindable [(activeSlide)] property */\n  activeSlideChange = output<number>();\n\n  /** Will be emitted when active slides has been changed in multilist mode */\n  slideRangeChange = output<number[]|void>();\n\n  /** Index of currently displayed slide(started for 0) */\n  // eslint-disable-next-line @angular-eslint/no-input-rename\n  activeSlideInput = input<number>(0, { alias: 'activeSlide' });\n\n  /* Index to start display slides from it */\n  startFromIndex = input<number>(0);\n\n  /**\n   * Delay of item cycling in milliseconds. If false, carousel won't cycle\n   * automatically.\n   */\n  interval = input<number>(this._config.interval);\n\n  get slides(): SlideComponent[] {\n    return this._slides.toArray();\n  }\n\n  get isFirstSlideVisible(): boolean {\n    const indexes = this.getVisibleIndexes();\n    if (!indexes || (indexes instanceof Array && !indexes.length)) {\n      return false;\n    }\n\n    return indexes.includes(0);\n  }\n\n  get isLastSlideVisible(): boolean {\n    const indexes = this.getVisibleIndexes();\n    if (!indexes || (indexes instanceof Array && !indexes.length)) {\n      return false;\n    }\n\n    return indexes.includes(this._slides.length -1);\n  }\n\n  get activeSlide(): number {\n    return this._currentActiveSlide || 0;\n  }\n\n  set activeSlide(index: number) {\n    if (this.multilist) {\n      return;\n    }\n\n    if (isNumber(index)) {\n      this.customActiveSlide = index;\n    }\n\n    if (this._slides.length && index !== this._currentActiveSlide) {\n      this._select(index);\n    }\n  }\n\n  protected currentInterval?: number;\n  protected _currentActiveSlide?: number;\n  protected _slides: LinkedList<SlideComponent> = new LinkedList<SlideComponent>();\n  protected _chunkedSlides?: SlideWithIndex[][];\n  protected _slidesWithIndexes?: SlideWithIndex[];\n  protected _currentVisibleSlidesIndex = 0;\n  protected isPlaying = false;\n  protected destroyed = false;\n  private customActiveSlide?: number;\n  private _indicatorsByChunk = false;\n  currentId = 0;\n\n  get _bsVer(): IBsVersion {\n    return getBsVer();\n  }\n\n  constructor(\n    private _config: CarouselConfig,\n    private cdr: ChangeDetectorRef,\n    @Inject(PLATFORM_ID) public platformId: number\n  ) {\n    this.currentId = _currentId++;\n\n    // Watch for activeSlide input changes\n    effect(() => {\n      const index = this.activeSlideInput();\n      if (this.multilist) {\n        return;\n      }\n      if (isNumber(index)) {\n        this.customActiveSlide = index;\n      }\n      if (this._slides.length && index !== this._currentActiveSlide) {\n        this._select(index);\n      }\n    });\n\n    // Watch for interval changes and restart timer\n    effect(() => {\n      const _ = this.interval();\n      this.restartTimer();\n    });\n  }\n\n  ngAfterViewInit(): void {\n    setTimeout(() => {\n      if (this.singleSlideOffset()) {\n        this._indicatorsByChunk = false;\n      } else {\n        this._indicatorsByChunk = this.indicatorsByChunk();\n      }\n      if (this.multilist) {\n        this._chunkedSlides = chunkByNumber(\n          this.mapSlidesAndIndexes(),\n          this.itemsPerSlide()\n        );\n        this.selectInitialSlides();\n      }\n\n      if (this.customActiveSlide && !this.multilist) {\n        this._select(this.customActiveSlide);\n      }\n    }, 0);\n  }\n\n  ngOnDestroy(): void {\n    this.destroyed = true;\n    this.resetTimer();\n  }\n\n  /**\n   * Adds new slide. If this slide is first in collection - set it as active\n   * and starts auto changing\n   * @param slide\n   */\n  addSlide(slide: SlideComponent): void {\n    this._slides.add(slide);\n\n    if (this.multilist && this._slides.length <= this.itemsPerSlide()) {\n      slide.active = true;\n    }\n\n    if (!this.multilist && this.isAnimated()) {\n      slide.isAnimated = true;\n    }\n\n    if (!this.multilist && this._slides.length === 1) {\n      this._currentActiveSlide = undefined;\n      if (!this.customActiveSlide) {\n        this.activeSlide = 0;\n      }\n      this.play();\n    }\n\n    if (this.multilist && this._slides.length > this.itemsPerSlide()) {\n      this.play();\n    }\n  }\n\n  /**\n   * Removes specified slide. If this slide is active - will roll to another\n   * slide\n   * @param slide\n   */\n  removeSlide(slide: SlideComponent): void {\n    const remIndex = this._slides.indexOf(slide);\n\n    if (this._currentActiveSlide === remIndex) {\n      // removing of active slide\n      let nextSlideIndex: number;\n      if (this._slides.length > 1) {\n        // if this slide last - will roll to first slide, if noWrap flag is\n        // FALSE or to previous, if noWrap is TRUE in case, if this slide in\n        // middle of collection, index of next slide is same to removed\n        nextSlideIndex = !this.isLast(remIndex)\n          ? remIndex\n          : this.noWrap() ? remIndex - 1 : 0;\n      }\n      this._slides.remove(remIndex);\n\n      // prevents exception with changing some value after checking\n      setTimeout(() => {\n        this._select(nextSlideIndex);\n      }, 0);\n    } else {\n      this._slides.remove(remIndex);\n      const currentSlideIndex = this.getCurrentSlideIndex();\n      setTimeout(() => {\n        // after removing, need to actualize index of current active slide\n        this._currentActiveSlide = currentSlideIndex;\n        this.activeSlideChange.emit(this._currentActiveSlide);\n      }, 0);\n    }\n  }\n\n  nextSlideFromInterval(force = false): void {\n    this.move(Direction.NEXT, force);\n  }\n\n  /**\n   * Rolling to next slide\n   * @param force: {boolean} if true - will ignore noWrap flag\n   */\n  nextSlide(force = false): void {\n    if (this.isPlaying) {\n      this.restartTimer();\n    }\n    this.move(Direction.NEXT, force);\n  }\n\n  /**\n   * Rolling to previous slide\n   * @param force: {boolean} if true - will ignore noWrap flag\n   */\n  previousSlide(force = false): void {\n    if (this.isPlaying) {\n      this.restartTimer();\n    }\n    this.move(Direction.PREV, force);\n  }\n\n  getFirstVisibleIndex(): number {\n    return this.slides.findIndex(this.getActive);\n  }\n\n  getLastVisibleIndex(): number {\n    return findLastIndex(this.slides, this.getActive);\n  }\n\n  getActive = (slide: SlideComponent) => slide.active;\n\n  move(direction: Direction, force = false): void {\n    const firstVisibleIndex = this.getFirstVisibleIndex();\n    const lastVisibleIndex = this.getLastVisibleIndex();\n\n    if (this.noWrap()) {\n      if (\n        direction === Direction.NEXT &&\n        this.isLast(lastVisibleIndex) ||\n        direction === Direction.PREV &&\n        firstVisibleIndex === 0\n      ) {\n        return;\n      }\n    }\n\n    if (!this.multilist) {\n      this.activeSlide = this.findNextSlideIndex(direction, force) || 0;\n    } else {\n      this.moveMultilist(direction);\n    }\n  }\n\n  /**\n   * Swith slides by enter, space and arrows keys\n   * @internal\n   */\n  keydownPress(event: KeyboardEvent) {\n    if (event.keyCode === 13 || event.key === 'Enter' || event.keyCode === 32 || event.key === 'Space') {\n      this.nextSlide();\n      event.preventDefault();\n\n      return;\n    }\n\n    if (event.keyCode === 37 || event.key === 'LeftArrow') {\n      this.previousSlide();\n\n      return;\n    }\n\n    if (event.keyCode === 39 || event.key === 'RightArrow') {\n      this.nextSlide();\n\n      return;\n    }\n  }\n\n  /**\n   * Play on mouse leave\n   * @internal\n   */\n  onMouseLeave(): void {\n    if (!this.pauseOnFocus()) {\n      this.play();\n    }\n  }\n\n  /**\n   * Play on mouse up\n   * @internal\n   */\n  onMouseUp(): void {\n    if (!this.pauseOnFocus()) {\n      this.play();\n    }\n  }\n\n  /**\n   * When slides on focus autoplay is stopped(optional)\n   * @internal\n   */\n  pauseFocusIn(): void {\n    if (this.pauseOnFocus()) {\n      this.isPlaying = false;\n      this.resetTimer();\n    }\n  }\n\n  /**\n   * When slides out of focus autoplay is started\n   * @internal\n   */\n  pauseFocusOut(): void {\n    this.play();\n  }\n\n  /**\n   * Rolling to specified slide\n   * @param index: {number} index of slide, which must be shown\n   */\n  selectSlide(index: number): void {\n    if (this.isPlaying) {\n      this.restartTimer();\n    }\n\n    if (!this.multilist) {\n      this.activeSlide = this._indicatorsByChunk ? index * this.itemsPerSlide() : index;\n    } else {\n      this.selectSlideRange(this._indicatorsByChunk ? index * this.itemsPerSlide() : index);\n    }\n  }\n\n  /**\n   * Starts a auto changing of slides\n   */\n  play(): void {\n    if (!this.isPlaying) {\n      this.isPlaying = true;\n      this.restartTimer();\n    }\n  }\n\n  /**\n   * Stops a auto changing of slides\n   */\n  pause(): void {\n    if (!this.noPause()) {\n      this.isPlaying = false;\n      this.resetTimer();\n    }\n  }\n\n  /**\n   * Finds and returns index of currently displayed slide\n   */\n  getCurrentSlideIndex(): number {\n    return this._slides.findIndex(this.getActive);\n  }\n\n  /**\n   * Defines, whether the specified index is last in collection\n   * @param index\n   */\n  isLast(index: number): boolean {\n    return index + 1 >= this._slides.length;\n  }\n\n  /**\n   * Defines, whether the specified index is first in collection\n   * @param index\n   */\n  isFirst(index: number): boolean {\n    return index === 0;\n  }\n\n  indicatorsSlides(): SlideComponent[] {\n    return this.slides.filter(\n      (slide: SlideComponent, index: number) => !this._indicatorsByChunk || index % this.itemsPerSlide() === 0\n    );\n  }\n\n  private selectInitialSlides(): void {\n    const startIndex = this.startFromIndex() <= this._slides.length\n      ? this.startFromIndex()\n      : 0;\n\n    this.hideSlides();\n\n    if (this.singleSlideOffset()) {\n      this._slidesWithIndexes = this.mapSlidesAndIndexes();\n\n      if (this._slides.length - startIndex < this.itemsPerSlide()) {\n        const slidesToAppend = this._slidesWithIndexes.slice(0, startIndex);\n\n        this._slidesWithIndexes = [\n          ...this._slidesWithIndexes,\n          ...slidesToAppend\n        ]\n          .slice(slidesToAppend.length)\n          .slice(0, this.itemsPerSlide());\n      } else {\n        this._slidesWithIndexes = this._slidesWithIndexes.slice(\n          startIndex,\n          startIndex + this.itemsPerSlide()\n        );\n      }\n\n      this._slidesWithIndexes.forEach((slide: SlideWithIndex) => slide.item.active = true);\n      this.makeSlidesConsistent(this._slidesWithIndexes);\n    } else {\n      this.selectRangeByNestedIndex(startIndex);\n    }\n\n    this.slideRangeChange.emit(this.getVisibleIndexes());\n  }\n\n  /**\n   * Defines next slide index, depending of direction\n   * @param direction: Direction(UNKNOWN|PREV|NEXT)\n   * @param force: {boolean} if TRUE - will ignore noWrap flag, else will\n   *   return undefined if next slide require wrapping\n   */\n  private findNextSlideIndex(direction: Direction, force: boolean): number | void {\n    let nextSlideIndex = 0;\n\n    if (\n      !force &&\n      (this.isLast(this.activeSlide) &&\n        direction !== Direction.PREV &&\n        this.noWrap())\n    ) {\n      return;\n    }\n\n    switch (direction) {\n      case Direction.NEXT:\n        // if this is last slide, not force, looping is disabled\n        // and need to going forward - select current slide, as a next\n        if (typeof this._currentActiveSlide === 'undefined') {\n          nextSlideIndex = 0;\n          break;\n        }\n        if (!this.isLast(this._currentActiveSlide)) {\n          nextSlideIndex = this._currentActiveSlide + 1;\n          break;\n        }\n        nextSlideIndex = !force && this.noWrap() ? this._currentActiveSlide : 0;\n        break;\n      case Direction.PREV:\n        // if this is first slide, not force, looping is disabled\n        // and need to going backward - select current slide, as a next\n        if (typeof this._currentActiveSlide === 'undefined') {\n          nextSlideIndex = 0;\n          break;\n        }\n        if (this._currentActiveSlide > 0) {\n          nextSlideIndex = this._currentActiveSlide - 1;\n          break;\n        }\n        if (!force && this.noWrap()) {\n          nextSlideIndex = this._currentActiveSlide;\n          break;\n        }\n        nextSlideIndex = this._slides.length - 1;\n        break;\n      default:\n        throw new Error('Unknown direction');\n    }\n\n    return nextSlideIndex;\n  }\n\n  private mapSlidesAndIndexes(): SlideWithIndex[] {\n    return this.slides\n      .slice()\n      .map((slide: SlideComponent, index: number) => {\n        return {\n          index,\n          item: slide\n        };\n      });\n  }\n\n\n  private selectSlideRange(index: number): void {\n    if (this.isIndexInRange(index)) {\n      return;\n    }\n\n    this.hideSlides();\n\n    if (!this.singleSlideOffset()) {\n      this.selectRangeByNestedIndex(index);\n    } else {\n      const startIndex = this.isIndexOnTheEdges(index)\n        ? index\n        : index - this.itemsPerSlide() + 1;\n\n      const endIndex = this.isIndexOnTheEdges(index)\n        ? index + this.itemsPerSlide()\n        : index + 1;\n\n      this._slidesWithIndexes = this.mapSlidesAndIndexes().slice(startIndex, endIndex);\n      this.makeSlidesConsistent(this._slidesWithIndexes);\n\n      this._slidesWithIndexes.forEach((slide: SlideWithIndex) => slide.item.active = true);\n    }\n\n    this.slideRangeChange.emit(this.getVisibleIndexes());\n  }\n\n  private selectRangeByNestedIndex(index: number): void {\n    if (!this._chunkedSlides) {\n      return;\n    }\n\n    const selectedRange = this._chunkedSlides\n      .map((slidesList, i: number) => {\n        return {\n          index: i,\n          list: slidesList\n        };\n      })\n      .find(\n        (slidesList: IndexedSlideList) => {\n          return slidesList.list.find(slide => slide.index === index) !== undefined;\n        }\n      );\n\n    if (!selectedRange) {\n      return;\n    }\n\n    this._currentVisibleSlidesIndex = selectedRange.index;\n\n    this._chunkedSlides[selectedRange.index].forEach((slide: SlideWithIndex) => {\n      slide.item.active = true;\n    });\n  }\n\n  private isIndexOnTheEdges(index: number): boolean {\n    return (\n      index + 1 - this.itemsPerSlide() <= 0 ||\n      index + this.itemsPerSlide() <= this._slides.length\n    );\n  }\n\n  private isIndexInRange(index: number): boolean {\n    if (this.singleSlideOffset() && this._slidesWithIndexes) {\n      const visibleIndexes = this._slidesWithIndexes.map((slide: SlideWithIndex) => slide.index);\n\n      return visibleIndexes.indexOf(index) >= 0;\n    }\n\n    return (\n      index <= this.getLastVisibleIndex() &&\n      index >= this.getFirstVisibleIndex()\n    );\n  }\n\n  private hideSlides(): void {\n    this.slides.forEach((slide: SlideComponent) => slide.active = false);\n  }\n\n  private isVisibleSlideListLast(): boolean {\n    if (!this._chunkedSlides) {\n      return false;\n    }\n\n    return this._currentVisibleSlidesIndex === this._chunkedSlides.length - 1;\n  }\n\n  private isVisibleSlideListFirst(): boolean {\n    return this._currentVisibleSlidesIndex === 0;\n  }\n\n  private moveSliderByOneItem(direction: Direction): void {\n    let firstVisibleIndex: number;\n    let lastVisibleIndex: number;\n    let indexToHide: number;\n    let indexToShow: number;\n\n    if (this.noWrap()) {\n      firstVisibleIndex = this.getFirstVisibleIndex();\n      lastVisibleIndex = this.getLastVisibleIndex();\n\n      indexToHide = direction === Direction.NEXT\n        ? firstVisibleIndex\n        : lastVisibleIndex;\n\n      indexToShow = direction !== Direction.NEXT\n        ? firstVisibleIndex - 1\n        : !this.isLast(lastVisibleIndex)\n          ? lastVisibleIndex + 1 : 0;\n\n      const slideToHide = this._slides.get(indexToHide);\n      if (slideToHide) {\n        slideToHide.active = false;\n      }\n\n      const slideToShow = this._slides.get(indexToShow);\n      if (slideToShow) {\n        slideToShow.active = true;\n      }\n\n      const slidesToReorder = this.mapSlidesAndIndexes().filter(\n        (slide: SlideWithIndex) => slide.item.active\n      );\n\n      this.makeSlidesConsistent(slidesToReorder);\n      if (this.singleSlideOffset()) {\n        this._slidesWithIndexes = slidesToReorder;\n      }\n\n      this.slideRangeChange.emit(this.getVisibleIndexes());\n      return;\n    }\n\n    if (!this._slidesWithIndexes || !this._slidesWithIndexes[0]) {\n      return;\n    }\n\n    let index: number;\n\n    firstVisibleIndex = this._slidesWithIndexes[0].index;\n    lastVisibleIndex = this._slidesWithIndexes[this._slidesWithIndexes.length - 1].index;\n\n    if (direction === Direction.NEXT) {\n      this._slidesWithIndexes.shift();\n\n      index = this.isLast(lastVisibleIndex)\n        ? 0\n        : lastVisibleIndex + 1;\n\n      const item = this._slides.get(index);\n\n      if (item) {\n        this._slidesWithIndexes.push({ index, item });\n      }\n    } else {\n      this._slidesWithIndexes.pop();\n      index = this.isFirst(firstVisibleIndex)\n        ? this._slides.length - 1\n        : firstVisibleIndex - 1;\n\n      const item = this._slides.get(index);\n      if (item) {\n        this._slidesWithIndexes = [{ index, item }, ...this._slidesWithIndexes];\n      }\n    }\n\n    this.hideSlides();\n\n    this._slidesWithIndexes.forEach(slide => slide.item.active = true);\n    this.makeSlidesConsistent(this._slidesWithIndexes);\n\n    this.slideRangeChange.emit(\n      this._slidesWithIndexes.map((slide: SlideWithIndex) => slide.index)\n    );\n  }\n\n  private makeSlidesConsistent = (slides: SlideWithIndex[]): void => {\n    slides.forEach((slide: SlideWithIndex, index: number) => slide.item.order = index);\n  };\n\n  private moveMultilist(direction: Direction): void {\n    if (this.singleSlideOffset()) {\n      this.moveSliderByOneItem(direction);\n    } else {\n      this.hideSlides();\n\n      if (this.noWrap()) {\n        this._currentVisibleSlidesIndex = direction === Direction.NEXT\n          ? this._currentVisibleSlidesIndex + 1\n          : this._currentVisibleSlidesIndex - 1;\n      } else if (direction === Direction.NEXT) {\n        this._currentVisibleSlidesIndex = this.isVisibleSlideListLast()\n          ? 0\n          : this._currentVisibleSlidesIndex + 1;\n      } else {\n        if (this.isVisibleSlideListFirst()) {\n          this._currentVisibleSlidesIndex = this._chunkedSlides\n            ? this._chunkedSlides.length - 1\n            : 0;\n        } else {\n          this._currentVisibleSlidesIndex = this._currentVisibleSlidesIndex - 1;\n        }\n      }\n\n      if (this._chunkedSlides) {\n        this._chunkedSlides[this._currentVisibleSlidesIndex].forEach(\n          (slide: SlideWithIndex) => slide.item.active = true\n        );\n      }\n      this.slideRangeChange.emit(this.getVisibleIndexes());\n    }\n  }\n\n  private getVisibleIndexes(): number[] | void {\n    if (!this.singleSlideOffset() && this._chunkedSlides) {\n      return this._chunkedSlides[this._currentVisibleSlidesIndex]\n        .map((slide: SlideWithIndex) => slide.index);\n    }\n\n    if (this._slidesWithIndexes) {\n      return this._slidesWithIndexes.map((slide: SlideWithIndex) => slide.index);\n    }\n  }\n\n  /**\n   * Sets a slide, which specified through index, as active\n   * @param index\n   */\n  private _select(index: number): void {\n    if (isNaN(index)) {\n      this.pause();\n\n      return;\n    }\n\n    if (!this.multilist && typeof this._currentActiveSlide !== 'undefined') {\n      const currentSlide = this._slides.get(this._currentActiveSlide);\n      if (typeof currentSlide !== 'undefined') {\n        currentSlide.active = false;\n      }\n    }\n\n    const nextSlide = this._slides.get(index);\n\n    if (typeof nextSlide !== 'undefined') {\n      this._currentActiveSlide = index;\n      nextSlide.active = true;\n      this.activeSlideChange.emit(index);\n      this.cdr.markForCheck();\n    }\n  }\n\n  /**\n   * Starts loop of auto changing of slides - zoneless version\n   */\n  private restartTimer() {\n    this.resetTimer();\n    const intervalValue = +this.interval();\n    if (!isNaN(intervalValue) && intervalValue > 0 && isPlatformBrowser(this.platformId)) {\n      this.currentInterval = window.setInterval(() => {\n        const nInterval = +this.interval();\n        if (\n          this.isPlaying &&\n          !isNaN(nInterval) &&\n          nInterval > 0 &&\n          this.slides.length\n        ) {\n          this.nextSlideFromInterval();\n          this.cdr.markForCheck();\n        } else {\n          this.pause();\n        }\n      }, intervalValue);\n    }\n  }\n\n  get multilist(): boolean {\n    return this.itemsPerSlide() > 1;\n  }\n\n  /**\n   * Stops loop of auto changing of slides\n   */\n  private resetTimer(): void {\n    if (this.currentInterval) {\n      clearInterval(this.currentInterval);\n      this.currentInterval = void 0;\n    }\n  }\n\n  checkDisabledClass(buttonType: 'prev' | 'next'): boolean {\n    if (buttonType === 'prev') {\n      return (this.activeSlide === 0 && this.noWrap() && !this.multilist) || (this.isFirstSlideVisible && this.noWrap() && this.multilist);\n    }\n\n    return (this.isLast(this.activeSlide) && this.noWrap() && !this.multilist) || (this.isLastSlideVisible && this.noWrap() && this.multilist);\n  }\n}\n","<div (mouseenter)=\"pause()\"\n     (mouseleave)=\"onMouseLeave()\"\n     (mouseup)=\"onMouseUp()\"\n     (keydown)=\"keydownPress($event)\"\n     (focusin)=\"pauseFocusIn()\"\n     (focusout)=\"pauseFocusOut()\"\n     [id]=\"'carousel' + currentId\"\n     class=\"carousel slide\" tabindex=\"0\">\n  @if (!_bsVer.isBs5 && showIndicators() && slides.length > 1) {\n    <ol class=\"carousel-indicators\">\n      @for (slide of indicatorsSlides(); track slide; let i = $index) {\n        <li\n          [class.active]=\"slide.active === true\"\n          (click)=\"selectSlide(i)\">\n        </li>\n      }\n    </ol>\n  }\n  @if (_bsVer.isBs5 && showIndicators() && slides.length > 1) {\n    <div class=\"carousel-indicators\">\n      @for (slide of indicatorsSlides(); track slide; let i = $index) {\n        <button\n          [class.active]=\"slide.active === true\"\n          (click)=\"selectSlide(i)\"\n          type=\"button\"\n          [attr.data-bs-target]=\"'#carousel' + currentId\"\n          [attr.data-bs-slide-to]=\"i\" aria-current=\"true\"\n          >\n        </button>\n      }\n    </div>\n  }\n  <div class=\"carousel-inner\" [ngStyle]=\"{'display': multilist ? 'flex' : 'block'}\">\n    <ng-content></ng-content>\n  </div>\n  @if (slides.length > 1) {\n    <a class=\"left carousel-control carousel-control-prev\"\n      href=\"javascript:void(0);\"\n      [class.disabled]=\"checkDisabledClass('prev')\"\n      [attr.data-bs-target]=\"'#carousel' + currentId\"\n      (click)=\"previousSlide()\"\n      tabindex=\"0\" role=\"button\">\n      <span class=\"icon-prev carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n      <span class=\"sr-only visually-hidden\">Previous</span>\n    </a>\n  }\n\n  @if (slides.length > 1) {\n    <a class=\"right carousel-control carousel-control-next\"\n      href=\"javascript:void(0);\"\n      (click)=\"nextSlide()\"\n      [class.disabled]=\"checkDisabledClass('next')\"\n      [attr.data-bs-target]=\"'#carousel' + currentId\"\n      tabindex=\"0\" role=\"button\">\n      <span class=\"icon-next carousel-control-next-icon\" aria-hidden=\"true\"></span>\n      <span class=\"sr-only visually-hidden\">Next</span>\n    </a>\n  }\n</div>\n","import {\n  Component,\n  HostBinding,\n  OnDestroy,\n  OnInit,\n  input,\n  effect\n} from '@angular/core';\n\nimport { CarouselComponent } from './carousel.component';\n\n@Component({\n    selector: 'slide',\n    template: `\n    <div [class.active]=\"active\" class=\"item\">\n      <ng-content></ng-content>\n    </div>\n  `,\n    host: {\n        '[attr.aria-hidden]': '!active',\n        '[class.multilist-margin]': 'multilist'\n    },\n    styles: [`\n    :host.carousel-animation {\n       transition: opacity 0.6s ease, visibility 0.6s ease;\n       float: left;\n    }\n    :host.carousel-animation.active {\n      opacity: 1;\n      visibility: visible;\n    }\n    :host.carousel-animation:not(.active) {\n      display: block;\n      position: absolute;\n      opacity: 0;\n      visibility: hidden;\n    }\n    :host.multilist-margin {\n      margin-right: auto;\n    }\n    :host.carousel-item {\n      perspective: 1000px;\n    }\n  `],\n    standalone: true\n})\nexport class SlideComponent implements OnInit, OnDestroy {\n  /** Is current slide active */\n  @HostBinding('class.active')\n  active = false;\n  // eslint-disable-next-line @angular-eslint/no-input-rename\n  activeInput = input<boolean | undefined>(undefined, { alias: 'active' });\n\n  @HostBinding('style.width') itemWidth = '100%';\n  @HostBinding('style.order') order = 0;\n  @HostBinding('class.carousel-animation') isAnimated = false;\n\n  /** Wraps element by appropriate CSS classes */\n  @HostBinding('class.item')\n  @HostBinding('class.carousel-item')\n  addClass = true;\n\n  /** Link to Parent(container-collection) component */\n  protected carousel: CarouselComponent;\n  multilist = false;\n  constructor(carousel: CarouselComponent) {\n    this.carousel = carousel;\n\n    // Watch for active input changes (only when explicitly bound)\n    effect(() => {\n      const activeValue = this.activeInput();\n      if (activeValue !== undefined) {\n        this.active = activeValue;\n      }\n    });\n  }\n\n  /** Fires changes in container collection after adding a new slide instance */\n  ngOnInit(): void {\n    this.carousel.addSlide(this);\n    this.itemWidth = `${100 / this.carousel.itemsPerSlide()}%`;\n    this.multilist = this.carousel?.itemsPerSlide() > 1;\n  }\n\n  /** Fires changes in container collection after removing of this slide instance */\n  ngOnDestroy(): void {\n    this.carousel.removeSlide(this);\n  }\n}\n","import { NgModule } from '@angular/core';\n\nimport { CarouselComponent } from './carousel.component';\nimport { SlideComponent } from './slide.component';\n\n@NgModule({\n    imports: [SlideComponent, CarouselComponent],\n    exports: [SlideComponent, CarouselComponent]\n})\nexport class CarouselModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.CarouselComponent"],"mappings":"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"}