{"version":3,"file":"ngx-carousel-ease.mjs","sources":["../../../projects/carousel/src/lib/carousel.ts","../../../projects/carousel/src/lib/validation.ts","../../../projects/carousel/src/lib/communSlider.ts","../../../projects/carousel/src/lib/infiniteSlider.ts","../../../projects/carousel/src/lib/finiteSlider.ts","../../../projects/carousel/src/lib/carousel.service.ts","../../../projects/carousel/src/lib/carousel.component.ts","../../../projects/carousel/src/lib/carousel.component.html","../../../projects/carousel/src/public-api.ts","../../../projects/carousel/src/ngx-carousel-ease.ts"],"sourcesContent":["import { signal } from '@angular/core';\r\n\r\nexport class Carousel {\r\n  slides!: NodeListOf<HTMLDivElement>;\r\n  originalSlideWidth!: number;\r\n  slideWidthWithGap!: number;\r\n\r\n  numberDots = signal(0);\r\n  maxScrollableContent = signal(0);\r\n  arrayNumberDots = signal<number[]>([]);\r\n\r\n  slidesContainer!: HTMLDivElement;\r\n  totalSlides = 0;\r\n  initialSlideToShow = 1;\r\n  paddingCarousel = 0;\r\n  carouselWidth!: number;\r\n  widthSlideContainer!: number;\r\n  arrayOfSlides: HTMLDivElement[] = [];\r\n\r\n  constructor(\r\n    private readonly carousel: HTMLDivElement,\r\n    private readonly maxWidthCarousel: number | undefined,\r\n    public slideToShow: number,\r\n    public slideWidth: number,\r\n    public readonly slideMaxWidth: number,\r\n    public readonly gap: number,\r\n    private readonly responsive: boolean,\r\n    private readonly loop: boolean\r\n  ) {\r\n    this.init();\r\n  }\r\n\r\n  get carouselElement() {\r\n    return this.carousel;\r\n  }\r\n\r\n  init() {\r\n    this.paddingCarousel = this.getPaddingCarousel();\r\n    this.initialSlideToShow = this.slideToShow;\r\n    this.slidesContainer = this.selectSlidesContainer();\r\n    this.slides = this.selectSlides();\r\n    this.arrayOfSlides = this.slidesToArray();\r\n    this.totalSlides = this.slides.length;\r\n    this.originalSlideWidth = this.slideWidth;\r\n    this.setWidthSlides();\r\n    this.setMaxWidthCarousel();\r\n    this.updateProperties();\r\n    this.slidesContainer.style.gap = `${this.gap}px`;\r\n    this.setDraggableImgToFalse();\r\n  }\r\n\r\n  /**\r\n   * Set the slide width and max width\r\n   * NB: In responsive mode, width is automatically adapted through the setAutoColumnSlideContainer() method.\r\n   * Reselect slides for infinite mode slides creation (this method will be called).\r\n   */\r\n  setWidthSlides() {\r\n    this.slides = this.selectSlides();\r\n\r\n    for (const slide of this.slides) {\r\n      slide.style.maxWidth = `${this.slideMaxWidth}px`;\r\n      slide.style.width = this.responsive ? '100%' : `${this.slideWidth}px`;\r\n      slide.style.userSelect = 'none';\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Update carousel properties\r\n   * Occurs at start and at resizing.\r\n   */\r\n  updateProperties() {\r\n    this.carouselWidth = this.carousel.clientWidth;\r\n    if (this.responsive) {\r\n      this.updateSlideToShowResponsive();\r\n      this.setAutoColumnSlideContainer();\r\n    } else {\r\n      this.updateSlideToShowNotResponsive();\r\n    }\r\n\r\n    this.numberDots.set(this.setNumberDots());\r\n    this.arrayNumberDots.set([...Array(this.numberDots()).keys()]);\r\n\r\n    this.slideWidthWithGap = this.slideWidth + this.gap;\r\n    this.setWidthSlideContainer();\r\n    this.maxScrollableContent.set(this.getMaxScroll());\r\n  }\r\n\r\n  /**\r\n   * Update slide to show (responsive mode)\r\n   * Computes the number of slide fitting\r\n   */\r\n  updateSlideToShowResponsive() {\r\n    const slideWidthPlusGap = this.originalSlideWidth + this.gap;\r\n\r\n    const referenceWidth = Math.min(\r\n      this.carouselWidth,\r\n      this.maxWidthCarousel || Infinity,\r\n      window.innerWidth\r\n    );\r\n\r\n    const slideFitting = Math.floor(referenceWidth / slideWidthPlusGap) || 1;\r\n\r\n    this.determineSlideToShow(slideFitting);\r\n  }\r\n\r\n  /**\r\n   * Determine slide to show\r\n   * Useful to compute the slide displayed on screen and for the slider class.\r\n   * In not responsive mode, the maximum slides to show is determined by the maximum available space and the width of the slide set by the user.\r\n   */\r\n  determineSlideToShow(slideFitting: number) {\r\n    const maxSlidesToShow = this.responsive\r\n      ? this.initialSlideToShow\r\n      : this.totalSlides;\r\n\r\n    this.slideToShow = Math.min(slideFitting, maxSlidesToShow);\r\n  }\r\n\r\n  /**\r\n   * Update slide to show (not responsive mode)\r\n   * Computes the number of slide fitting. The number of slides to be shown are determined by the number of slides fitting within its container.\r\n   */\r\n  updateSlideToShowNotResponsive() {\r\n    const slideWidthPlusGap = this.slideWidth + this.gap;\r\n\r\n    const referenceWidth = Math.min(\r\n      this.carouselWidth,\r\n      this.maxWidthCarousel || Infinity,\r\n      window.innerWidth\r\n    );\r\n\r\n    const numberOfSlidesComputed =\r\n      Math.floor(referenceWidth / slideWidthPlusGap) || 1;\r\n    const slideFitting = Math.min(numberOfSlidesComputed, this.totalSlides);\r\n\r\n    this.determineSlideToShow(slideFitting);\r\n  }\r\n\r\n  getPaddingCarousel() {\r\n    const computedStyle = window.getComputedStyle(this.carousel);\r\n    const paddingLeft = computedStyle.getPropertyValue('padding-left');\r\n    const paddingRight = computedStyle.getPropertyValue('padding-right');\r\n\r\n    return parseFloat(paddingLeft) + parseFloat(paddingRight);\r\n  }\r\n\r\n  setMaxWidthCarousel() {\r\n    this.carousel.style.maxWidth = `${this.maxWidthCarousel}px`;\r\n  }\r\n\r\n  /**\r\n   * Set the with of a slide, responsive mode\r\n   * There are [n cards - 1] gaps (3 cards, 2 gaps)\r\n   */\r\n  setAutoColumnSlideContainer() {\r\n    const windowWidth =\r\n      this.carouselWidth -\r\n      this.paddingCarousel -\r\n      (this.slideToShow - 1) * this.gap;\r\n\r\n    const widthPerSlide = windowWidth / this.slideToShow;\r\n    this.slidesContainer.style.gridAutoColumns = `${widthPerSlide}px`;\r\n\r\n    this.slideWidth = widthPerSlide;\r\n  }\r\n\r\n  /**\r\n   * Define the slide container width\r\n   * Make non visible gaps of non visible cards scrollable and is used to compute the maxScrollableContent (strechingEffect)\r\n   */\r\n  setWidthSlideContainer() {\r\n    this.widthSlideContainer =\r\n      this.selectSlides().length * this.slideWidthWithGap - this.gap;\r\n    this.slidesContainer.style.width = `${this.widthSlideContainer}px`;\r\n  }\r\n\r\n  selectSlides(): NodeListOf<HTMLDivElement> {\r\n    return this.carousel.querySelectorAll('.carousel-slide');\r\n  }\r\n\r\n  slidesToArray() {\r\n    return Array.from(this.slides);\r\n  }\r\n\r\n  selectSlidesContainer() {\r\n    return this.carousel.querySelector('.slides-container') as HTMLDivElement;\r\n  }\r\n\r\n  /**\r\n   * Set number of dots\r\n   * If infinite mode, one more window than normal mode.\r\n   */\r\n  setNumberDots() {\r\n    if (this.loop) return this.totalSlides;\r\n\r\n    return this.slideToShow > 1\r\n      ? this.totalSlides - this.slideToShow + 1\r\n      : this.totalSlides;\r\n  }\r\n\r\n  /**\r\n   * Get the max scrollable content\r\n   * Useful for the streching effect (not infinite mode), end of the slides\r\n   */\r\n  getMaxScroll() {\r\n    return (this.numberDots() - 1) * this.slideWidthWithGap;\r\n  }\r\n\r\n  setDraggableImgToFalse() {\r\n    const images = this.slidesContainer.querySelectorAll('img');\r\n    images?.forEach((image) => {\r\n      image.setAttribute('draggable', 'false');\r\n    });\r\n  }\r\n}\r\n","import { TemplateRef, ViewContainerRef } from '@angular/core';\r\n\r\nexport class Validation {\r\n  carouselSlides!: NodeListOf<HTMLDivElement> | undefined;\r\n\r\n  constructor(\r\n    private readonly carousel: HTMLDivElement,\r\n    private readonly slideWidth: number,\r\n    private readonly slideMaxWidth: number,\r\n    private readonly gap: number,\r\n    private readonly slideToScroll: number,\r\n    private readonly carouselViewContainer: ViewContainerRef,\r\n    private readonly carouselTemplateRef: TemplateRef<any>\r\n  ) {\r\n    this.carouselSlides = this.carousel.querySelectorAll('.carousel-slide');\r\n\r\n    this.checkIfCarouselViewContainerAndTemplateRefAreSet();\r\n    this.slideMaxWidthShouldBeGreaterThanSlideWidth();\r\n    this.slideWidthAndGapShouldBeGreaterThanZero();\r\n    this.requiredClassShouldBeAdded();\r\n    this.slideToScrollNotGreaterThanTotalSlides();\r\n  }\r\n\r\n  checkIfCarouselViewContainerAndTemplateRefAreSet() {\r\n    if (\r\n      this.carouselViewContainer === undefined ||\r\n      this.carouselTemplateRef === undefined\r\n    ) {\r\n      throw new Error(\r\n        `carouselViewContainer or carouselTemplateRef is undefined. Please wrap your slides as following : \r\n  <carousel>\r\n    <ng-template #carouselTemplateRef #carouselViewContainer>\r\n      <!-- Your slides here -->\r\n    </ng-template>.\r\n  </carousel>\r\nThis is necessary for infinite mode to keep Angular elements attached (click event, directives, etc).`\r\n      );\r\n    }\r\n  }\r\n\r\n  slideMaxWidthShouldBeGreaterThanSlideWidth() {\r\n    if (this.slideMaxWidth < this.slideWidth) {\r\n      throw new Error(\r\n        `slideMaxWidth (value: ${this.slideMaxWidth}) is lower than slideWidth (value: ${this.slideWidth}). Please increase the max width or decrease the slide width.`\r\n      );\r\n    }\r\n  }\r\n\r\n  slideWidthAndGapShouldBeGreaterThanZero() {\r\n    const slideWidthPlusGap = this.slideWidth + this.gap;\r\n\r\n    if (slideWidthPlusGap <= 0) {\r\n      throw new Error(\r\n        'Unable to construct Carousel. SlideWidth and gap lower or equal than zero. Please add a positive value for the slideWidth and gap.'\r\n      );\r\n    }\r\n  }\r\n\r\n  requiredClassShouldBeAdded() {\r\n    if (this.carouselSlides === undefined || this.carouselSlides.length === 0) {\r\n      throw new Error(\r\n        'No elements with \"carousel-slide\" as class have been found. Please add this class to each of your slides.'\r\n      );\r\n    }\r\n  }\r\n\r\n  slideToScrollNotGreaterThanTotalSlides() {\r\n    if (\r\n      this.carouselSlides &&\r\n      this.slideToScroll > this.carouselSlides.length\r\n    ) {\r\n      throw new Error(\r\n        `slideToScroll value (${this.slideToScroll}) is greater than the total amount of slide (${this.carouselSlides.length}). This can cause invisible cards in infinite mode. Please lower the slideToScroll value.`\r\n      );\r\n    }\r\n  }\r\n}\r\n","import { signal } from '@angular/core';\r\nimport { Carousel } from './carousel';\r\nimport { CarouselService } from './carousel.service';\r\n\r\nexport class CommunSlider {\r\n  dragging = signal(false);\r\n  currentSlide = signal(0);\r\n  lastWindow = 0;\r\n  currentTranslation = signal(0);\r\n  previousTranslation = 0;\r\n  direction: 'right' | 'left' = 'right';\r\n  startX = 0;\r\n  previousX = 0;\r\n  currentX = 0;\r\n  positionChange = 0;\r\n  prevLimit = 0;\r\n  nextLimit = 0;\r\n  slidesContainer!: HTMLDivElement;\r\n  arrayOfSlides!: HTMLDivElement[];\r\n  totalAmountOfSlides!: number;\r\n  fullWidthInf = 0;\r\n  lastWindowTranslation = 0;\r\n  totalSlides = 0;\r\n  DOMLimitReached = false;\r\n  visibleOffsetCardNotResponsive = 0;\r\n  invisibleOffsetCardNotResponsive = 0;\r\n  accumulatedSlide = 0;\r\n  currentCarouselID = 0;\r\n  autoInterval!: number;\r\n  playActive = signal(false);\r\n  playButtonDisabled = signal(false);\r\n  directionAutoPlay = (slides: number) => {};\r\n\r\n  constructor(\r\n    readonly carousel: Carousel,\r\n    readonly responsive: boolean,\r\n    readonly slideToScroll: number,\r\n    readonly LIMIT_AUTO_SLIDE: number,\r\n    readonly strechingLimit: number,\r\n    readonly autoSlide: boolean,\r\n    readonly animationTimingFn: string,\r\n    readonly animationTimingMs: number,\r\n    readonly enableMouseDrag: boolean,\r\n    readonly enableTouch: boolean,\r\n    readonly autoPlay: boolean,\r\n    readonly autoPlayInterval: number,\r\n    readonly autoPlayAtStart: boolean,\r\n    readonly playDirection: string,\r\n    readonly autoplaySlideToScroll: number,\r\n    public carouselService: CarouselService\r\n  ) {\r\n    this.initProperties();\r\n    this.updateProperties();\r\n  }\r\n\r\n  initProperties() {\r\n    this.slidesContainer = this.carousel.slidesContainer;\r\n    this.arrayOfSlides = this.carousel.arrayOfSlides;\r\n\r\n    this.totalSlides = this.carousel.totalSlides;\r\n    this.totalAmountOfSlides = this.totalSlides;\r\n\r\n    this.nextLimit = Math.floor(this.carousel.slideWidthWithGap);\r\n    this.prevLimit = -this.carousel.slideWidthWithGap;\r\n\r\n    if (this.autoPlayAtStart) this.launchAutoPlay();\r\n  }\r\n\r\n  launchAutoPlay() {\r\n    if (!this.autoPlay) return;\r\n    this.playActive.set(true);\r\n\r\n    this.autoInterval = window.setInterval(() => {\r\n      this.directionAutoPlay(this.autoplaySlideToScroll);\r\n    }, this.autoPlayInterval);\r\n  }\r\n\r\n  stopAutoPlay() {\r\n    if (!this.autoPlay) return;\r\n\r\n    this.playActive.set(false);\r\n    clearInterval(this.autoInterval);\r\n  }\r\n\r\n  /**\r\n   * Update properties of the slider\r\n   * Fired at start and at resizing.\r\n   */\r\n  updateProperties() {\r\n    this.updateNotResponsive();\r\n\r\n    this.lastWindow = this.carousel.numberDots() - 1;\r\n    this.fullWidthInf = this.totalSlides * this.carousel.slideWidthWithGap;\r\n\r\n    this.lastWindowTranslation =\r\n      this.slidesContainer.clientWidth -\r\n      this.carousel.slideToShow * this.carousel.slideWidthWithGap +\r\n      this.carousel.gap;\r\n\r\n    this.lastWindowTranslation += this.responsive\r\n      ? 0\r\n      : -this.visibleOffsetCardNotResponsive - this.carousel.gap;\r\n\r\n    const maxScrollable =\r\n      this.carousel.widthSlideContainer -\r\n      this.carousel.carouselWidth +\r\n      this.carousel.paddingCarousel;\r\n    this.carousel.maxScrollableContent.set(maxScrollable);\r\n\r\n    if (this.carousel.numberDots() === 1) {\r\n      // if all slides visible in one window, max scrollable content equals 0\r\n      this.carousel.maxScrollableContent.set(0);\r\n    }\r\n  }\r\n\r\n  updateNotResponsive() {\r\n    if (this.responsive) return;\r\n\r\n    // visible part of the offset of the card in px\r\n    this.visibleOffsetCardNotResponsive =\r\n      this.carousel.carouselWidth -\r\n      this.carousel.slideToShow * this.carousel.slideWidthWithGap -\r\n      this.carousel.paddingCarousel;\r\n\r\n    this.invisibleOffsetCardNotResponsive =\r\n      this.carousel.slideWidth - this.visibleOffsetCardNotResponsive;\r\n  }\r\n\r\n  /**\r\n   * Fired at drag start\r\n   * Instantiate property of the starting drag point on the X axis. Used to compute the translation.\r\n   * Disabling the transition while applying the transformation because of the attached animation.\r\n   */\r\n  dragStart(event: MouseEvent | TouchEvent) {\r\n    if (this.currentEventIsDisabled(event)) return;\r\n    clearInterval(this.autoInterval);\r\n\r\n    this.dragging.set(true);\r\n    this.startX =\r\n      event instanceof MouseEvent ? event.pageX : event.touches[0].pageX;\r\n\r\n    // Useful for direction detection\r\n    this.previousX = this.startX;\r\n    this.slidesContainer.style.transition = 'none';\r\n  }\r\n\r\n  /**\r\n   * Checks if current event is allowed by user.\r\n   * TouchEvent partially supported on Firefox (and working on Safari despite the MDN docs).\r\n   */\r\n  currentEventIsDisabled(event: MouseEvent | TouchEvent) {\r\n    const isMouseEvent = event instanceof MouseEvent;\r\n\r\n    return (\r\n      (isMouseEvent && !this.enableMouseDrag) ||\r\n      (!isMouseEvent && !this.enableTouch)\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Update the direction\r\n   * Do not update the direction in case of the same previous position.\r\n   */\r\n  setDirection() {\r\n    if (this.previousX > this.currentX) {\r\n      this.direction = 'right';\r\n    } else if (this.previousX < this.currentX) {\r\n      this.direction = 'left';\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Update the last window translation\r\n   * Useful to get the max translation at the end of the slides.\r\n   * In not responsive mode, there is possibly a not fully displayed card (card offset).\r\n   */\r\n  updateLastWindowTranslation() {\r\n    const total = this.totalAmountOfSlides * this.carousel.slideWidthWithGap;\r\n\r\n    this.lastWindowTranslation =\r\n      total - this.carousel.slideToShow * this.carousel.slideWidthWithGap;\r\n\r\n    this.lastWindowTranslation += this.responsive\r\n      ? 0\r\n      : -this.visibleOffsetCardNotResponsive - this.carousel.gap;\r\n  }\r\n\r\n  /**\r\n   * Decrease limit (movement to the left)\r\n   * In infinite mode, take full width of a set if on the first slide as new slides are created to the left (a whole set offset).\r\n   * Exception: if not responsive (card offset) and finite carousel, the next limit is at the maximum (the end of the carousel)\r\n   */\r\n  decreaseLimits(slidesCreatedOnTheLeft = false) {\r\n    let translationCorrectionAfterClone = this.prevLimit;\r\n\r\n    if (slidesCreatedOnTheLeft) {\r\n      translationCorrectionAfterClone = this.fullWidthInf;\r\n    }\r\n\r\n    this.prevLimit =\r\n      translationCorrectionAfterClone - this.carousel.slideWidthWithGap;\r\n\r\n    this.nextLimit = this.prevLimit + 2 * this.carousel.slideWidthWithGap;\r\n\r\n    this.prevLimit = Math.floor(this.prevLimit);\r\n    this.nextLimit = Math.floor(this.nextLimit);\r\n  }\r\n\r\n  /**\r\n   * Increase limit on basis of previous computed limits (movement to the right)\r\n   * Schema: || previous | current || next\r\n   * Exception: if not responsive (card offset) and finite carousel, the next limit is at the maximum (the end of the carousel)\r\n   */\r\n  increaseLimits() {\r\n    this.nextLimit += Math.floor(this.carousel.slideWidthWithGap);\r\n    this.prevLimit = Math.floor(\r\n      this.nextLimit - this.carousel.slideWidthWithGap * 2\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Change prev and next limit on basis of the provided slide number\r\n   * Prev and next limit are always calculated as the following:\r\n   * || <= prev | current || <= next\r\n   */\r\n  changePrevAndNextLimits(slideNumber: number) {\r\n    const limitInPX = slideNumber * this.carousel.slideWidthWithGap;\r\n    this.nextLimit = Math.floor(limitInPX + this.carousel.slideWidthWithGap);\r\n\r\n    this.prevLimit = Math.floor(\r\n      this.nextLimit - this.carousel.slideWidthWithGap * 2\r\n    );\r\n  }\r\n\r\n  fireSlideChangeEvent(slideHasChanged: boolean, slide: number) {\r\n    if (!slideHasChanged) return;\r\n\r\n    this.carouselService.emit(slide, this.carousel.carouselElement);\r\n  }\r\n\r\n  applyTransformation(transformation: number) {\r\n    this.slidesContainer.style.transition = `transform ${this.animationTimingMs}ms ${this.animationTimingFn}`;\r\n\r\n    this.applyTranslation(-transformation);\r\n\r\n    this.dragging.set(false);\r\n    this.previousTranslation = -transformation;\r\n    this.currentTranslation.set(-transformation);\r\n  }\r\n\r\n  applyTranslation(transformation: number) {\r\n    this.slidesContainer.style.transform = `translate3d(${transformation}px, 0, 0)`;\r\n  }\r\n}\r\n","import { EmbeddedViewRef, TemplateRef, ViewContainerRef } from '@angular/core';\r\nimport { Carousel } from './carousel';\r\nimport { CarouselService } from './carousel.service';\r\nimport { CommunSlider } from './communSlider';\r\n\r\nexport class InfiniteSlider extends CommunSlider {\r\n  readonly MAX_DOM_SIZE: number;\r\n\r\n  constructor(\r\n    carousel: Carousel,\r\n    responsive: boolean,\r\n    slideToScroll: number,\r\n    LIMIT_AUTO_SLIDE: number,\r\n    strechingLimit: number,\r\n    autoSlide: boolean,\r\n    animationTimingFn: string,\r\n    animationTimingMs: number,\r\n    MAX_DOM_SIZE: number,\r\n    enableMouseDrag: boolean,\r\n    enableTouch: boolean,\r\n    autoPlay: boolean,\r\n    autoPlayInterval: number,\r\n    autoPlayAtStart: boolean,\r\n    playDirection: string,\r\n    autoplaySlideToScroll: number,\r\n    carouselService: CarouselService,\r\n    readonly carouselViewContainer: ViewContainerRef,\r\n    readonly carouselTemplateRef: TemplateRef<any>,\r\n  ) {\r\n    super(\r\n      carousel,\r\n      responsive,\r\n      slideToScroll,\r\n      LIMIT_AUTO_SLIDE,\r\n      strechingLimit,\r\n      autoSlide,\r\n      animationTimingFn,\r\n      animationTimingMs,\r\n      enableMouseDrag,\r\n      enableTouch,\r\n      autoPlay,\r\n      autoPlayInterval,\r\n      autoPlayAtStart,\r\n      playDirection,\r\n      autoplaySlideToScroll,\r\n      carouselService,\r\n    );\r\n    this.MAX_DOM_SIZE = MAX_DOM_SIZE;\r\n    this.initProperties();\r\n    this.updateProperties();\r\n    this.addSlidesToRightAtStart();\r\n  }\r\n\r\n  override initProperties() {\r\n    this.defineAutoPlayDirection();\r\n    super.initProperties();\r\n  }\r\n\r\n  /**\r\n   * next and prev are defined separatively\r\n   */\r\n  defineAutoPlayDirection() {\r\n    if (this.playDirection === 'ltr') {\r\n      this.directionAutoPlay = this.next.bind(this);\r\n    } else {\r\n      this.directionAutoPlay = this.prev.bind(this);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Add slides to the right at start\r\n   * If only one window (number of dots === 1) and not responsive mode, there is possibly space at start for slides to the right (even though this configuration does not make a lot of sense)\r\n   * TODO: ajouter des slides si slidesToShow > total slides\r\n   */\r\n  addSlidesToRightAtStart() {\r\n    if (this.carousel.numberDots() > 1 || this.responsive) {\r\n      return;\r\n    }\r\n\r\n    this.addSlidesToTheRight();\r\n  }\r\n\r\n  /**\r\n   * Fired at drag start\r\n   * Instantiate property of the starting drag point on the X axis. Used to compute the translation.\r\n   * Disabling the transition while applying the transformation because of the attached animation.\r\n   */\r\n  override dragStart(event: MouseEvent | TouchEvent) {\r\n    if (super.currentEventIsDisabled(event)) return;\r\n\r\n    super.dragStart(event);\r\n  }\r\n\r\n  /**\r\n   * Relaunch autoPlay if not disabled or infinite mode (never disabled by limits)\r\n   * Restart only if started (playActive).\r\n   */\r\n  relaunchAutoPlay() {\r\n    if (this.playActive()) {\r\n      clearInterval(this.autoInterval);\r\n      this.launchAutoPlay();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Fired at drag end\r\n   */\r\n  dragStop(event: MouseEvent | TouchEvent) {\r\n    if (this.currentEventIsDisabled(event)) return;\r\n    this.dragging.set(false);\r\n    this.previousTranslation = this.currentTranslation();\r\n\r\n    this.autoSlider();\r\n  }\r\n\r\n  autoSlider() {\r\n    if (!this.autoSlide) return;\r\n\r\n    const referenceWidth = Math.min(\r\n      this.carousel.slideWidth,\r\n      this.carousel.slideMaxWidth || Infinity,\r\n    );\r\n    const currentLimit = this.prevLimit + this.carousel.slideWidthWithGap;\r\n\r\n    // previousTranslation always a negative number, currentLimit always positive\r\n    const currentPositionChange = this.previousTranslation + currentLimit;\r\n    const moveComparedToSlide = (currentPositionChange / referenceWidth) * 100;\r\n\r\n    if (\r\n      moveComparedToSlide < -this.LIMIT_AUTO_SLIDE ||\r\n      moveComparedToSlide > this.LIMIT_AUTO_SLIDE\r\n    ) {\r\n      if (moveComparedToSlide > this.LIMIT_AUTO_SLIDE) {\r\n        this.changeSlideNumber(-1);\r\n        this.decreaseLimits();\r\n      } else {\r\n        this.changeSlideNumber(1);\r\n        this.increaseLimits();\r\n      }\r\n    }\r\n\r\n    if (-this.currentTranslation() > this.lastWindowTranslation) {\r\n      this.addSlidesToTheRight();\r\n    }\r\n\r\n    this.computeTransformation(this.accumulatedSlide);\r\n  }\r\n\r\n  /**\r\n   * Fired at dragging\r\n   * Compute the translation, change the slide number, update the direction.\r\n   */\r\n  dragMove(event: MouseEvent | TouchEvent) {\r\n    if (this.currentEventIsDisabled(event)) return;\r\n    if (!this.dragging()) return;\r\n\r\n    this.currentX =\r\n      event instanceof MouseEvent ? event.pageX : event.changedTouches[0].pageX;\r\n\r\n    this.setDirection();\r\n    this.previousX = this.currentX;\r\n\r\n    this.positionChange = this.currentX - this.startX;\r\n    this.currentTranslation.set(this.positionChange + this.previousTranslation);\r\n\r\n    this.applyTranslation(this.currentTranslation());\r\n    this.modifyCurrentSlide();\r\n  }\r\n\r\n  /**\r\n   * Responsible for changing slide number and updating the limits.\r\n   * If createSlidesInfiniteModeIfLimits() doesn't take action, slide change according to previous computed limits.\r\n   */\r\n  modifyCurrentSlide() {\r\n    if (this.createSlidesInfiniteModeIfLimits()) return;\r\n\r\n    if (-this.currentTranslation() < this.prevLimit) {\r\n      this.changeSlideNumber(-1);\r\n      this.decreaseLimits();\r\n    } else if (-this.currentTranslation() >= this.nextLimit) {\r\n      this.changeSlideNumber(1);\r\n      this.increaseLimits();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handle slide creation in infinite mode if limits reached\r\n   * Mouse or touch drag.\r\n   */\r\n  createSlidesInfiniteModeIfLimits() {\r\n    if (this.currentTranslation() > 0) {\r\n      this.addSlidesToTheLeft();\r\n      this.decreaseLimits(true);\r\n\r\n      // not enabled at start\r\n      if (this.currentSlide() > 0) {\r\n        this.changeSlideNumber(-1);\r\n      }\r\n\r\n      return true;\r\n    } else if (-this.currentTranslation() > this.lastWindowTranslation) {\r\n      this.addSlidesToTheRight();\r\n\r\n      if (this.DOMLimitReached) {\r\n        this.changePrevAndNextLimits(this.accumulatedSlide);\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Append or prepend new slides according to the direction\r\n   * If new slides prepended, update the translation to the correct place (appending new slides do not change the translation).\r\n   * Limit DOM growth or update last window translation if applicable.\r\n   */\r\n  appendOrPrependElements() {\r\n    let view: EmbeddedViewRef<any> | null = null;\r\n\r\n    if (this.direction === 'left') {\r\n      view = this.carouselViewContainer.createEmbeddedView(\r\n        this.carouselTemplateRef,\r\n        {},\r\n        { index: 0 },\r\n      );\r\n\r\n      this.accumulatedSlide += this.totalSlides;\r\n      this.resetViewLeftDirection();\r\n    } else {\r\n      view = this.carouselViewContainer.createEmbeddedView(\r\n        this.carouselTemplateRef,\r\n      );\r\n    }\r\n\r\n    // Update slide widths for both directions\r\n    view.detectChanges();\r\n    this.carousel.setWidthSlides();\r\n    this.carousel.setDraggableImgToFalse();\r\n\r\n    // Limit DOM growth, max X times original DOM size\r\n    if (this.totalAmountOfSlides >= this.MAX_DOM_SIZE * this.totalSlides) {\r\n      this.limitDOMGrowth();\r\n      this.DOMLimitReached = true;\r\n    } else {\r\n      this.totalAmountOfSlides += this.totalSlides;\r\n      this.DOMLimitReached = false;\r\n      this.updateLastWindowTranslation();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Limit DOM growth\r\n   * Reset the view accordingly.\r\n   */\r\n  limitDOMGrowth() {\r\n    if (this.direction === 'right') {\r\n      this.carouselViewContainer.remove(0);\r\n\r\n      this.resetViewRightDirection();\r\n      this.accumulatedSlide -= this.totalSlides;\r\n    } else {\r\n      this.carouselViewContainer.remove();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Reset the view in a movement to the left\r\n   * New slides added to the left, so the view has to be updated accordingly.\r\n   * If the carousel is moved with the mouse | touch event (dragging is true), the offset should be equal to a full carousel width. Otherwise (with the buttons), the computed translation should be taken into account.\r\n   * getBoundingClientRect triggers reflow of the element.\r\n   */\r\n  resetViewLeftDirection() {\r\n    const translation = Math.abs(this.previousTranslation) + this.fullWidthInf;\r\n    this.previousTranslation = -translation;\r\n\r\n    this.slidesContainer.style.transition = 'none';\r\n    const transformation = this.dragging() ? -this.fullWidthInf : -translation;\r\n    this.applyTranslation(transformation);\r\n\r\n    this.slidesContainer.getBoundingClientRect();\r\n  }\r\n\r\n  /**\r\n   * Reset the view in a movement to the right\r\n   * First set of slides have been deleted, so the translation has to be updated accordingly.\r\n   * currentTranslation is a negative number so it will be decreased by a set of slides.\r\n   * getBoundingClientRect triggers reflow of the element.\r\n   */\r\n  resetViewRightDirection() {\r\n    const translation = this.currentTranslation() + this.fullWidthInf;\r\n\r\n    this.slidesContainer.style.transition = 'none';\r\n    this.applyTranslation(translation);\r\n    this.previousTranslation = translation - this.positionChange;\r\n\r\n    this.slidesContainer.getBoundingClientRect();\r\n  }\r\n\r\n  addSlidesToTheLeft() {\r\n    this.appendOrPrependElements();\r\n  }\r\n\r\n  addSlidesToTheRight() {\r\n    this.appendOrPrependElements();\r\n  }\r\n\r\n  /**\r\n   * Increase limit on basis of previous computed limits (movement to the right)\r\n   * Schema: || previous | current || next\r\n   */\r\n  override increaseLimits() {\r\n    this.nextLimit += Math.floor(this.carousel.slideWidthWithGap);\r\n    this.prevLimit = Math.floor(\r\n      this.nextLimit - this.carousel.slideWidthWithGap * 2,\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Previous button navigation\r\n   */\r\n  prev(slides = this.slideToScroll) {\r\n    this.direction = 'left';\r\n\r\n    this.handleBtnInfinite(-slides);\r\n    this.changeSlideNumber(-slides);\r\n    this.changePrevAndNextLimits(this.accumulatedSlide);\r\n    this.computeTransformation(this.accumulatedSlide);\r\n    this.relaunchAutoPlay();\r\n  }\r\n\r\n  /**\r\n   * Next button navigation\r\n   */\r\n  next(slides = this.slideToScroll) {\r\n    this.direction = 'right';\r\n\r\n    this.handleBtnInfinite(slides);\r\n    this.changeSlideNumber(slides);\r\n    this.changePrevAndNextLimits(this.accumulatedSlide);\r\n    this.computeTransformation(this.accumulatedSlide);\r\n    this.relaunchAutoPlay();\r\n  }\r\n\r\n  /**\r\n   * Buttons navigation in infinite mode\r\n   * Create new slide if limits reached (start or end). Update slide, limits and apply transformation accordingly.\r\n   * There is (possibly) a card offset if not responsive\r\n   */\r\n  handleBtnInfinite(step: number) {\r\n    const cardOffset = this.responsive ? 0 : 1;\r\n    const goingTo = this.accumulatedSlide + step;\r\n\r\n    if (goingTo < 0) {\r\n      this.addSlidesToTheLeft();\r\n    } else if (\r\n      goingTo + this.carousel.slideToShow + cardOffset >\r\n      this.totalAmountOfSlides\r\n    ) {\r\n      this.addSlidesToTheRight();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Navigation with bullet points\r\n   * Update values accordingly.\r\n   */\r\n  goTo(bullet: number) {\r\n    const slideHasChanged = this.currentSlide() !== bullet;\r\n    this.direction = this.currentSlide() < bullet ? 'right' : 'left';\r\n\r\n    this.currentSlide.set(bullet);\r\n    this.fireSlideChangeEvent(slideHasChanged, this.currentSlide());\r\n\r\n    this.relaunchAutoPlay();\r\n    this.navInfiniteBullets(bullet);\r\n  }\r\n\r\n  /**\r\n   * Bullets navigation\r\n   * Create new slides if exceeding end of carousel.\r\n   * There is (possibly) a card offset if not responsive\r\n   */\r\n  navInfiniteBullets(bullet: number) {\r\n    const cardOffset = this.responsive ? 0 : 1;\r\n    const positionOfCurrentSlide = this.accumulatedSlide % this.totalSlides;\r\n    const difference = bullet - positionOfCurrentSlide;\r\n    this.accumulatedSlide += difference;\r\n\r\n    const newwSlidesShouldBeCreated =\r\n      this.accumulatedSlide + this.carousel.slideToShow + cardOffset >\r\n      this.totalAmountOfSlides;\r\n\r\n    if (newwSlidesShouldBeCreated) {\r\n      this.addSlidesToTheRight();\r\n    }\r\n\r\n    this.computeTransformation(this.accumulatedSlide);\r\n    this.changePrevAndNextLimits(this.accumulatedSlide);\r\n  }\r\n\r\n  /**\r\n   * Exception: if only one window (numberDots === 1), update the accumulatedSlide to let the transformation occurs, but currentSlide should stay at 0.\r\n   */\r\n  changeSlideNumber(step: number) {\r\n    const slideNumberBeforeChange: number = this.currentSlide();\r\n    this.infiniteChangeSlideNumber(step);\r\n\r\n    if (this.carousel.numberDots() === 1) {\r\n      this.currentSlide.set(0);\r\n    }\r\n\r\n    const current: number =\r\n      this.carousel.numberDots() > 1\r\n        ? this.currentSlide()\r\n        : this.accumulatedSlide;\r\n\r\n    const slideHasChanged: boolean =\r\n      slideNumberBeforeChange !== this.currentSlide();\r\n    this.fireSlideChangeEvent(slideHasChanged, current);\r\n  }\r\n\r\n  infiniteChangeSlideNumber(step: number) {\r\n    this.accumulatedSlide += step;\r\n    this.currentSlide.update((slide) => slide + step);\r\n\r\n    const lastSlide = this.totalSlides - 1;\r\n    if (this.currentSlide() > lastSlide) {\r\n      this.currentSlide.update((slide) => slide % this.totalSlides);\r\n    } else if (this.currentSlide() < 0) {\r\n      this.currentSlide.update((slide) => slide + this.totalSlides);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Compute transformation that will be applied on basis of the provided slide number\r\n   */\r\n  computeTransformation(slide: number) {\r\n    const transformation = slide * this.carousel.slideWidthWithGap;\r\n\r\n    this.applyTransformation(transformation);\r\n  }\r\n}\r\n","import { Carousel } from './carousel';\r\nimport { CarouselService } from './carousel.service';\r\nimport { CommunSlider } from './communSlider';\r\n\r\nexport class FiniteSlider extends CommunSlider {\r\n  constructor(\r\n    carousel: Carousel,\r\n    responsive: boolean,\r\n    slideToScroll: number,\r\n    LIMIT_AUTO_SLIDE: number,\r\n    strechingLimit: number,\r\n    autoSlide: boolean,\r\n    animationTimingFn: string,\r\n    animationTimingMs: number,\r\n    enableMouseDrag: boolean,\r\n    enableTouch: boolean,\r\n    autoPlay: boolean,\r\n    autoPlayInterval: number,\r\n    autoPlayAtStart: boolean,\r\n    playDirection: string,\r\n    autoplaySlideToScroll: number,\r\n    carouselService: CarouselService\r\n  ) {\r\n    super(\r\n      carousel,\r\n      responsive,\r\n      slideToScroll,\r\n      LIMIT_AUTO_SLIDE,\r\n      strechingLimit,\r\n      autoSlide,\r\n      animationTimingFn,\r\n      animationTimingMs,\r\n      enableMouseDrag,\r\n      enableTouch,\r\n      autoPlay,\r\n      autoPlayInterval,\r\n      autoPlayAtStart,\r\n      playDirection,\r\n      autoplaySlideToScroll,\r\n      carouselService\r\n    );\r\n    this.initProperties();\r\n    this.updateProperties();\r\n  }\r\n\r\n  override initProperties() {\r\n    this.defineAutoPlayDirection();\r\n    super.initProperties();\r\n    this.disableAutoPlayBtn();\r\n  }\r\n\r\n  /**\r\n   * In finite carousel, clear autoPlay interval if limits are reached.\r\n   */\r\n  disableAutoPlayBtn() {\r\n    if (!this.autoPlay) return;\r\n    this.playButtonDisabled.set(false);\r\n\r\n    // start\r\n    if (\r\n      this.currentSlide() === 0 &&\r\n      this.playDirection === 'rtl' &&\r\n      this.currentTranslation() === 0\r\n    ) {\r\n      this.playButtonDisabled.set(true);\r\n      this.playActive.set(false);\r\n      clearInterval(this.autoInterval);\r\n    }\r\n\r\n    // end\r\n    if (\r\n      this.currentSlide() === this.lastWindow &&\r\n      this.playDirection === 'ltr' &&\r\n      this.currentTranslation() <= -this.carousel.maxScrollableContent()\r\n    ) {\r\n      this.playButtonDisabled.set(true);\r\n      this.playActive.set(false);\r\n      clearInterval(this.autoInterval);\r\n    }\r\n\r\n    if (this.carousel.numberDots() === 1) this.playButtonDisabled.set(true);\r\n  }\r\n\r\n  /**\r\n   * Fired at drag start\r\n   * Instantiate property of the starting drag point on the X axis. Used to compute the translation.\r\n   * Disabling the transition while applying the transformation because of the attached animation.\r\n   */\r\n  override dragStart(event: MouseEvent | TouchEvent) {\r\n    super.dragStart(event);\r\n    this.disableAutoPlayBtn();\r\n  }\r\n\r\n  /**\r\n   * Fired at drag end\r\n   * If limits reached (start or end), put back to the current slide. Updates previous translation.\r\n   */\r\n  dragStop(event: MouseEvent | TouchEvent) {\r\n    if (this.currentEventIsDisabled(event)) return;\r\n    this.dragging.set(false);\r\n    this.previousTranslation = this.currentTranslation();\r\n\r\n    this.autoSlider();\r\n    this.disableAutoPlayBtn();\r\n\r\n    const limit =\r\n      this.currentTranslation() > 0 ||\r\n      -this.currentTranslation() > this.lastWindowTranslation;\r\n\r\n    if (limit) {\r\n      this.computeTransformation(this.currentSlide());\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Fired at dragging\r\n   * Compute the translation, change the slide number, update the direction.\r\n   */\r\n  dragMove(event: MouseEvent | TouchEvent) {\r\n    if (this.currentEventIsDisabled(event)) return;\r\n    if (!this.dragging()) return;\r\n\r\n    this.currentX =\r\n      event instanceof MouseEvent ? event.pageX : event.changedTouches[0].pageX;\r\n\r\n    this.setDirection();\r\n    this.previousX = this.currentX;\r\n\r\n    this.positionChange = this.currentX - this.startX;\r\n    this.currentTranslation.set(this.positionChange + this.previousTranslation);\r\n\r\n    // Current translation exceeding start or end limits\r\n    if (this.strechingEffect()) return;\r\n\r\n    this.applyTranslation(this.currentTranslation());\r\n    this.modifyCurrentSlide();\r\n  }\r\n\r\n  strechingEffect() {\r\n    return (\r\n      (this.currentTranslation() > this.strechingLimit &&\r\n        this.currentSlide() === 0) ||\r\n      this.currentTranslation() <\r\n        -this.carousel.maxScrollableContent() - this.strechingLimit\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Responsible for changing slide number and updating the limits.\r\n   * In finite mode, if all slides visible on one window or end of carousel, early return to not trigger change event.\r\n   */\r\n  modifyCurrentSlide() {\r\n    if (this.endOfCarousel()) return;\r\n\r\n    if (-this.currentTranslation() < this.prevLimit) {\r\n      this.changeSlideNumber(-1);\r\n      this.decreaseLimits();\r\n    } else if (-this.currentTranslation() >= this.nextLimit) {\r\n      this.changeSlideNumber(1);\r\n      this.increaseLimits();\r\n    }\r\n  }\r\n\r\n  endOfCarousel() {\r\n    return (\r\n      this.carousel.numberDots() === 1 ||\r\n      (this.currentSlide() === this.lastWindow && this.direction === 'right')\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Auto slide card if option enabled, applied on both directions.\r\n   * Prevents auto slide on limits in finite mode (if streching < limit auto slide).\r\n   * If only one slide is displayed (slideToShow === 1), the width of the slide corresponds to the window's width (a dot). Hence, taking the min between the two.\r\n   * In non responsive and non infinite, there is possibly an offset of the current limit.\r\n   */\r\n  autoSlider() {\r\n    if (!this.autoSlide) return;\r\n    if (\r\n      this.currentTranslation() > 0 ||\r\n      -this.currentTranslation() > this.lastWindowTranslation\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    const referenceWidth = Math.min(\r\n      this.carousel.slideWidth,\r\n      this.carousel.slideMaxWidth || Infinity\r\n    );\r\n    let currentLimit = this.prevLimit + this.carousel.slideWidthWithGap;\r\n\r\n    if (!this.responsive && this.currentSlide() > this.lastWindow - 1) {\r\n      currentLimit = this.lastWindowTranslation;\r\n    }\r\n\r\n    // previousTranslation always a negative number, currentLimit always positive\r\n    const currentPositionChange = this.previousTranslation + currentLimit;\r\n    const moveComparedToSlide = (currentPositionChange / referenceWidth) * 100;\r\n\r\n    if (\r\n      moveComparedToSlide < -this.LIMIT_AUTO_SLIDE ||\r\n      moveComparedToSlide > this.LIMIT_AUTO_SLIDE\r\n    ) {\r\n      if (moveComparedToSlide > this.LIMIT_AUTO_SLIDE) {\r\n        this.changeSlideNumber(-1);\r\n        this.decreaseLimits();\r\n      } else {\r\n        this.changeSlideNumber(1);\r\n        this.increaseLimits();\r\n      }\r\n    }\r\n\r\n    this.computeTransformation(this.accumulatedSlide);\r\n  }\r\n\r\n  /**\r\n   * Decrease limit (movement to the left)\r\n   * Exception: if not responsive (card offset) and finite carousel, the next limit is at the maximum (the end of the carousel)\r\n   */\r\n  override decreaseLimits() {\r\n    super.decreaseLimits();\r\n\r\n    if (!this.responsive && this.currentSlide() >= this.lastWindow - 1) {\r\n      this.nextLimit = this.lastWindowTranslation;\r\n    }\r\n\r\n    this.nextLimit = Math.floor(this.nextLimit);\r\n  }\r\n\r\n  /**\r\n   * Increase limit on basis of previous computed limits (movement to the right)\r\n   * Schema: || previous | current || next\r\n   * Exception: if not responsive (card offset) and finite carousel, the next limit is at the maximum (the end of the carousel)\r\n   */\r\n  override increaseLimits() {\r\n    super.increaseLimits();\r\n\r\n    if (!this.responsive && this.currentSlide() >= this.lastWindow - 1) {\r\n      this.nextLimit = this.lastWindowTranslation;\r\n\r\n      if (this.currentSlide() === this.lastWindow) {\r\n        // only update previous limit if last slide reached\r\n        this.prevLimit = Math.floor(\r\n          this.nextLimit - this.invisibleOffsetCardNotResponsive\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Previous button navigation\r\n   */\r\n  prev(slides = this.slideToScroll) {\r\n    this.direction = 'left';\r\n\r\n    this.changeSlideNumber(-slides);\r\n    this.changePrevAndNextLimits(this.accumulatedSlide);\r\n    this.computeTransformation(this.accumulatedSlide);\r\n    this.disableAutoPlayBtn();\r\n    this.relaunchAutoPlay();\r\n  }\r\n\r\n  /**\r\n   * Relaunch autoPlay if not disabled.\r\n   * Restart only if started (playActive). Play button disabled when limits reached (finite carousel).\r\n   */\r\n  relaunchAutoPlay() {\r\n    if (!this.playButtonDisabled() && this.playActive()) {\r\n      clearInterval(this.autoInterval);\r\n      this.launchAutoPlay();\r\n    }\r\n  }\r\n\r\n  defineAutoPlayDirection() {\r\n    if (this.playDirection === 'ltr') {\r\n      this.directionAutoPlay = this.next.bind(this);\r\n    } else {\r\n      this.directionAutoPlay = this.prev.bind(this);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Next button navigation\r\n   */\r\n  next(slides = this.slideToScroll) {\r\n    this.direction = 'right';\r\n\r\n    this.changeSlideNumber(slides);\r\n    this.changePrevAndNextLimits(this.accumulatedSlide);\r\n    this.computeTransformation(this.accumulatedSlide);\r\n    this.disableAutoPlayBtn();\r\n    this.relaunchAutoPlay();\r\n  }\r\n\r\n  /**\r\n   * Navigation with bullet points\r\n   * Update values accordingly.\r\n   */\r\n  goTo(bullet: number) {\r\n    const slideHasChanged = this.currentSlide() !== bullet;\r\n    this.direction = this.currentSlide() < bullet ? 'right' : 'left';\r\n\r\n    this.currentSlide.set(bullet);\r\n    this.fireSlideChangeEvent(slideHasChanged, this.currentSlide());\r\n\r\n    this.disableAutoPlayBtn();\r\n    this.relaunchAutoPlay();\r\n\r\n    this.accumulatedSlide = this.currentSlide();\r\n    this.changePrevAndNextLimits(bullet);\r\n    this.computeTransformation(bullet);\r\n  }\r\n\r\n  /**\r\n   * Exception: if only one window (numberDots === 1), update the accumulatedSlide to let the transformation occurs, but currentSlide should stay at 0.\r\n   */\r\n  changeSlideNumber(step: number) {\r\n    const slideNumberBeforeChange = this.currentSlide();\r\n\r\n    this.finiteChangeSlideNumber(step);\r\n\r\n    if (this.carousel.numberDots() === 1) {\r\n      this.currentSlide.set(0);\r\n    }\r\n\r\n    const current =\r\n      this.carousel.numberDots() > 1\r\n        ? this.currentSlide()\r\n        : this.accumulatedSlide;\r\n\r\n    const slideHasChanged = slideNumberBeforeChange !== this.currentSlide();\r\n\r\n    this.fireSlideChangeEvent(slideHasChanged, current);\r\n  }\r\n\r\n  finiteChangeSlideNumber(step: number) {\r\n    this.currentSlide.update((slide) => slide + step);\r\n\r\n    if (this.currentSlide() > this.lastWindow) {\r\n      this.currentSlide.set(this.lastWindow);\r\n    } else if (this.currentSlide() < 0) {\r\n      this.currentSlide.set(0);\r\n    }\r\n\r\n    this.accumulatedSlide = this.currentSlide();\r\n  }\r\n\r\n  /**\r\n   * Compute transformation that will be applied on basis of the provided slide number\r\n   * Exception: if not responsive (card offset) and finite carousel, the next limit is the end of the carousel\r\n   */\r\n  computeTransformation(slide: number) {\r\n    let transformation = slide * this.carousel.slideWidthWithGap;\r\n\r\n    if (\r\n      !this.responsive &&\r\n      slide >= this.lastWindow - 1 &&\r\n      this.carousel.numberDots() > 1\r\n    ) {\r\n      this.nextLimit = this.lastWindowTranslation;\r\n\r\n      if (slide === this.lastWindow) {\r\n        // if last window, go to maximum & update prev limit\r\n        transformation = this.lastWindowTranslation;\r\n        this.prevLimit = Math.floor(\r\n          this.nextLimit - this.invisibleOffsetCardNotResponsive\r\n        );\r\n      }\r\n    }\r\n\r\n    this.applyTransformation(transformation);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class CarouselService {\r\n  emit(slide: number, carouselElement: HTMLDivElement) {\r\n    const event = new CustomEvent('slideChange', { detail: slide });\r\n\r\n    // dispatch event on the parent\r\n    carouselElement.parentElement?.dispatchEvent(event);\r\n  }\r\n}\r\n","import {\r\n  AfterViewInit,\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  computed,\r\n  ContentChild,\r\n  ElementRef,\r\n  Inject,\r\n  input,\r\n  PLATFORM_ID,\r\n  Signal,\r\n  signal,\r\n  TemplateRef,\r\n  ViewChild,\r\n  ViewContainerRef,\r\n} from '@angular/core';\r\nimport { Carousel } from './carousel';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport { Validation } from './validation';\r\nimport { CarouselService } from './carousel.service';\r\nimport { AnimationsTiming } from './interfaces';\r\nimport { InfiniteSlider } from './infiniteSlider';\r\nimport { FiniteSlider } from './finiteSlider';\r\n\r\n@Component({\r\n  selector: 'carousel',\r\n  templateUrl: './carousel.component.html',\r\n  styleUrls: ['./carousel.component.css'],\r\n  imports: [],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CarouselComponent implements AfterViewInit {\r\n  maxWidthCarousel = input<number>();\r\n  infinite = input(false);\r\n  responsive = input(true);\r\n  autoSlide = input(true);\r\n  slideToShow = input(3);\r\n  slideToScroll = input(2);\r\n  autoslideLimitPercentCard = input(30);\r\n  strechingLimit = input(60);\r\n  slideWidth = input(300);\r\n  slideMaxWidth = input(500);\r\n  dots = input(true);\r\n  arrows = input(true);\r\n  counter = input(true);\r\n  enableMouseDrag = input(true);\r\n  enableTouch = input(true);\r\n  counterSeparator = input('/');\r\n  gapBetweenSlides = input(16);\r\n  animationTimingMs = input(300);\r\n  maxDomSize = input(4);\r\n  animationTimingFn = input<AnimationsTiming>('ease-out');\r\n\r\n  autoPlay = input(false);\r\n  autoPlayInterval = input(1500);\r\n  autoPlayAtStart = input(false);\r\n  displayAutoPlayControls = input(true);\r\n  autoPlaySlideToScroll = input(1);\r\n  autoPlayDirection = input<'ltr' | 'rtl'>('ltr');\r\n\r\n  @ViewChild('carouselContainer')\r\n  private carouselContainer!: ElementRef<HTMLDivElement>;\r\n  private resizeEvent!: () => void;\r\n  private mouseUpEvent!: (event: MouseEvent | TouchEvent) => void;\r\n  private visibilityEvent!: (event: any) => void;\r\n  private previousWidth = 0;\r\n  private currentWidth = 0;\r\n  private isBrowser = true;\r\n  private carousel!: Carousel;\r\n  slider!: InfiniteSlider | FiniteSlider;\r\n\r\n  // view container and template reference for infinite\r\n  @ContentChild('carouselViewContainer', { read: ViewContainerRef })\r\n  carouselViewContainer!: ViewContainerRef;\r\n  @ContentChild('carouselTemplateRef', { read: TemplateRef })\r\n  carouselTemplateRef!: TemplateRef<any>;\r\n\r\n  // Template variables\r\n  carouselDots: Signal<number> = signal(0);\r\n  carouselMaxScrollableContent: Signal<number> = signal(0);\r\n  carouselArrayNumberDots: Signal<number[]> = signal<number[]>([]);\r\n  sliderCurrentSlide: Signal<number> = signal(0);\r\n  sliderCurrentTranslation: Signal<number> = signal(0);\r\n  sliderPlayActive: Signal<boolean> = signal(false);\r\n  sliderPlayButtonDisabled: Signal<boolean> = signal(false);\r\n  sliderDragging: Signal<boolean> = signal(false);\r\n\r\n  constructor(\r\n    private cd: ChangeDetectorRef,\r\n    private carouselService: CarouselService,\r\n    @Inject(PLATFORM_ID) platformId: Object,\r\n  ) {\r\n    this.isBrowser = isPlatformBrowser(platformId);\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    if (!this.isBrowser) return;\r\n\r\n    const carouselContainer = this.carouselContainer.nativeElement;\r\n    this.previousWidth = window.innerWidth;\r\n    this.currentWidth = window.innerWidth;\r\n\r\n    if (this.carouselViewContainer && this.carouselTemplateRef) {\r\n      const view = this.carouselViewContainer.createEmbeddedView(\r\n        this.carouselTemplateRef,\r\n      );\r\n      view.detectChanges();\r\n    }\r\n\r\n    new Validation(\r\n      carouselContainer,\r\n      this.slideWidth(),\r\n      this.slideMaxWidth(),\r\n      this.gapBetweenSlides(),\r\n      this.slideToScroll(),\r\n      this.carouselViewContainer,\r\n      this.carouselTemplateRef,\r\n    );\r\n\r\n    this.carousel = new Carousel(\r\n      carouselContainer,\r\n      this.maxWidthCarousel(),\r\n      this.slideToShow(),\r\n      this.slideWidth(),\r\n      this.slideMaxWidth(),\r\n      this.gapBetweenSlides(),\r\n      this.responsive(),\r\n      this.infinite(),\r\n    );\r\n\r\n    this.instantiateSlider();\r\n    this.listeners();\r\n    this.cd.detectChanges();\r\n  }\r\n\r\n  instantiateSlider() {\r\n    if (this.infinite()) {\r\n      this.slider = new InfiniteSlider(\r\n        this.carousel,\r\n        this.responsive(),\r\n        this.slideToScroll(),\r\n        this.autoslideLimitPercentCard(),\r\n        this.strechingLimit(),\r\n        this.autoSlide(),\r\n        this.animationTimingFn(),\r\n        this.animationTimingMs(),\r\n        this.maxDomSize(),\r\n        this.enableMouseDrag(),\r\n        this.enableTouch(),\r\n        this.autoPlay(),\r\n        this.autoPlayInterval(),\r\n        this.autoPlayAtStart(),\r\n        this.autoPlayDirection(),\r\n        this.autoPlaySlideToScroll(),\r\n        this.carouselService,\r\n        this.carouselViewContainer,\r\n        this.carouselTemplateRef,\r\n      );\r\n    } else {\r\n      this.slider = new FiniteSlider(\r\n        this.carousel,\r\n        this.responsive(),\r\n        this.slideToScroll(),\r\n        this.autoslideLimitPercentCard(),\r\n        this.strechingLimit(),\r\n        this.autoSlide(),\r\n        this.animationTimingFn(),\r\n        this.animationTimingMs(),\r\n        this.enableMouseDrag(),\r\n        this.enableTouch(),\r\n        this.autoPlay(),\r\n        this.autoPlayInterval(),\r\n        this.autoPlayAtStart(),\r\n        this.autoPlayDirection(),\r\n        this.autoPlaySlideToScroll(),\r\n        this.carouselService,\r\n      );\r\n    }\r\n\r\n    this.carouselDots = computed(() => this.carousel.numberDots());\r\n    this.carouselMaxScrollableContent = computed(() =>\r\n      this.carousel.maxScrollableContent(),\r\n    );\r\n    this.carouselArrayNumberDots = computed(() =>\r\n      this.carousel.arrayNumberDots(),\r\n    );\r\n\r\n    this.sliderCurrentSlide = computed(() => this.slider.currentSlide());\r\n    this.sliderCurrentTranslation = computed(() =>\r\n      this.slider.currentTranslation(),\r\n    );\r\n    this.sliderCurrentTranslation = computed(() =>\r\n      this.slider.currentTranslation(),\r\n    );\r\n    this.sliderPlayActive = computed(() => this.slider.playActive());\r\n    this.sliderPlayButtonDisabled = computed(() =>\r\n      this.slider.playButtonDisabled(),\r\n    );\r\n    this.sliderDragging = computed(() => this.slider.dragging());\r\n  }\r\n\r\n  listeners() {\r\n    this.mouseUpEvent = (event) => {\r\n      if (!this.sliderDragging()) return;\r\n\r\n      this.slider.dragStop(event);\r\n      this.slider.relaunchAutoPlay();\r\n      this.cd.markForCheck();\r\n    };\r\n\r\n    this.visibilityEvent = (event) => {\r\n      const visibility = event.target.visibilityState;\r\n      this.slider.dragStop(event);\r\n\r\n      if (visibility === 'hidden') {\r\n        clearInterval(this.slider.autoInterval);\r\n      }\r\n\r\n      if (visibility === 'visible') {\r\n        this.slider.relaunchAutoPlay();\r\n      }\r\n\r\n      this.cd.markForCheck();\r\n    };\r\n\r\n    this.resizeEvent = () => {\r\n      this.resize();\r\n    };\r\n\r\n    window.addEventListener('mouseup', this.mouseUpEvent);\r\n    window.addEventListener('resize', this.resizeEvent);\r\n    document.addEventListener('visibilitychange', this.visibilityEvent);\r\n  }\r\n\r\n  /**\r\n   * Reinitialize variables at resize\r\n   */\r\n  resize() {\r\n    // on smartphones a vertical scroll triggers a resize event\r\n    this.currentWidth = window.innerWidth;\r\n    if (this.currentWidth === this.previousWidth) return;\r\n\r\n    this.previousWidth = window.innerWidth;\r\n    this.carousel.updateProperties();\r\n    this.slider.updateProperties();\r\n\r\n    this.slider.stopAutoPlay();\r\n    const slideNumberBeforeChange = this.slider.currentSlide();\r\n    this.slider.currentSlide.set(0);\r\n    const slideHasChanged =\r\n      slideNumberBeforeChange !== this.slider.currentSlide();\r\n    this.slider.accumulatedSlide = 0;\r\n    this.slider.computeTransformation(0);\r\n    this.slider.changePrevAndNextLimits(0);\r\n    this.slider.fireSlideChangeEvent(slideHasChanged, 0);\r\n\r\n    this.cd.markForCheck();\r\n  }\r\n\r\n  /**\r\n   * Removes active subscriptions and clear interval autoplay.\r\n   */\r\n  ngOnDestroy() {\r\n    if (!this.isBrowser) return;\r\n\r\n    this.carouselViewContainer.clear();\r\n    window.removeEventListener('resize', this.resizeEvent);\r\n    window.removeEventListener('mouseup', this.mouseUpEvent);\r\n    document.removeEventListener('visibilitychange', this.visibilityEvent);\r\n    this.slider.stopAutoPlay();\r\n  }\r\n}\r\n","<div class=\"carousel-container\" #carouselContainer>\r\n  <div class=\"banner-container\">\r\n    @if (arrows()) {\r\n    <div class=\"btn-container\">\r\n      <button\r\n        class=\"prev\"\r\n        aria-label=\"previous button navigation\"\r\n        (click)=\"slider.prev()\"\r\n        [disabled]=\"\r\n          !infinite() &&\r\n          ((this.sliderCurrentSlide() === 0 &&\r\n            this.sliderCurrentTranslation() >= 0) ||\r\n            carouselDots() === 1)\r\n        \"\r\n      >\r\n        <svg\r\n          xmlns=\"http://www.w3.org/2000/svg\"\r\n          height=\"16\"\r\n          width=\"16\"\r\n          viewBox=\"0 0 512 512\"\r\n        >\r\n          <path\r\n            d=\"M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 288 480 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-370.7 0 73.4-73.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-128 128z\"\r\n          />\r\n        </svg>\r\n      </button>\r\n      <button\r\n        class=\"next\"\r\n        aria-label=\"next button navigation\"\r\n        (click)=\"slider.next()\"\r\n        [disabled]=\"\r\n          !infinite() &&\r\n          ((this.sliderCurrentSlide() === carouselDots() - 1 &&\r\n            this.sliderCurrentTranslation() <=\r\n              -this.carouselMaxScrollableContent()) ||\r\n            carouselDots() === 1)\r\n        \"\r\n      >\r\n        <svg\r\n          xmlns=\"http://www.w3.org/2000/svg\"\r\n          height=\"16\"\r\n          width=\"16\"\r\n          viewBox=\"0 0 512 512\"\r\n        >\r\n          <path\r\n            d=\"M502.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l370.7 0-73.4 73.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l128-128z\"\r\n          />\r\n        </svg>\r\n      </button>\r\n    </div>\r\n    } @if (autoPlay() && displayAutoPlayControls()) {\r\n    <div class=\"autoplay-container\">\r\n      <button\r\n        class=\"play\"\r\n        [disabled]=\"this.sliderPlayActive() || this.sliderPlayButtonDisabled()\"\r\n        (click)=\"slider.launchAutoPlay()\"\r\n        aria-label=\"play button navigation\"\r\n      >\r\n        <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\">\r\n          <path\r\n            d=\"M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z\"\r\n          />\r\n        </svg>\r\n      </button>\r\n      <button\r\n        class=\"pause\"\r\n        [disabled]=\"!this.sliderPlayActive()\"\r\n        (click)=\"slider.stopAutoPlay()\"\r\n        aria-label=\"pause button navigation\"\r\n      >\r\n        <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\r\n          <path\r\n            d=\"M48 64C21.5 64 0 85.5 0 112V400c0 26.5 21.5 48 48 48H80c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48H48zm192 0c-26.5 0-48 21.5-48 48V400c0 26.5 21.5 48 48 48h32c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48H240z\"\r\n          />\r\n        </svg>\r\n      </button>\r\n    </div>\r\n    } @if (counter()) {\r\n    <div class=\"counter\">\r\n      <p>\r\n        {{ this.sliderCurrentSlide() + 1 }} {{ counterSeparator() }}\r\n        {{ carouselDots() }}\r\n      </p>\r\n    </div>\r\n    }\r\n  </div>\r\n\r\n  <div\r\n    class=\"slides-container\"\r\n    [class.dragging]=\"this.sliderDragging()\"\r\n    (mousedown)=\"slider.dragStart($event)\"\r\n    (touchstart)=\"slider.dragStart($event)\"\r\n    (mousemove)=\"slider.dragMove($event)\"\r\n    (touchmove)=\"slider.dragMove($event)\"\r\n    (touchend)=\"slider.dragStop($event); this.slider.relaunchAutoPlay()\"\r\n  >\r\n    <ng-content></ng-content>\r\n  </div>\r\n\r\n  @if (dots()) {\r\n  <div class=\"bullets-container\">\r\n    @for (bullet of this.carouselArrayNumberDots(); track $index) {\r\n    <button\r\n      class=\"bullet\"\r\n      aria-label=\"bullet point navigation\"\r\n      [class.current]=\"bullet === slider.currentSlide()\"\r\n      (click)=\"slider.goTo(bullet)\"\r\n    ></button>\r\n    }\r\n  </div>\r\n  }\r\n</div>\r\n","/*\r\n * Public API Surface of carousel\r\n */\r\n\r\nexport * from './lib/carousel.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}