{"version":3,"file":"carousel-angular.mjs","sources":["../../projects/carousel-angular/src/lib/touches.ts","../../projects/carousel-angular/src/lib/carousel.ts","../../projects/carousel-angular/src/lib/container.ts","../../projects/carousel-angular/src/lib/cells.ts","../../projects/carousel-angular/src/lib/slide.ts","../../projects/carousel-angular/src/lib/utils.ts","../../projects/carousel-angular/src/lib/carousel.component.ts","../../projects/carousel-angular/src/lib/carousel.component.html","../../projects/carousel-angular/src/lib/carousel.module.ts","../../projects/carousel-angular/src/public-api.ts","../../projects/carousel-angular/src/carousel-angular.ts"],"sourcesContent":["export interface Properties {\n  element: HTMLElement;\n  listeners?: 'auto' | 'mouse and touch';\n  touchListeners?: any;\n  mouseListeners?: any;\n  otherListeners?: any;\n  resize?: boolean;\n}\n\nexport type EventType =\n  | undefined\n  | 'touchend'\n  | 'pan'\n  | 'pinch'\n  | 'horizontal-swipe'\n  | 'vertical-swipe'\n  | 'tap'\n  | 'longtap';\nexport type TouchHandler =\n  | 'handleTouchstart'\n  | 'handleTouchmove'\n  | 'handleTouchend';\nexport type MouseHandler =\n  | 'handleMousedown'\n  | 'handleMousemove'\n  | 'handleMouseup';\n\nexport class Touches {\n  properties: Properties;\n\n  element: HTMLElement;\n\n  elementPosition: ClientRect;\n\n  eventType: EventType = undefined;\n\n  handlers: any = {};\n\n  startX = 0;\n\n  startY = 0;\n\n  lastTap = 0;\n\n  doubleTapTimeout: any;\n\n  doubleTapMinTimeout = 300;\n\n  tapMinTimeout = 200;\n\n  touchstartTime = 0;\n\n  i = 0;\n\n  isMousedown = false;\n\n  _touchListeners: any = {\n    touchstart: 'handleTouchstart',\n    touchmove: 'handleTouchmove',\n    touchend: 'handleTouchend'\n  };\n\n  _mouseListeners: any = {\n    mousedown: 'handleMousedown',\n    mousemove: 'handleMousemove',\n    mouseup: 'handleMouseup',\n    wheel: 'handleWheel'\n  };\n\n  _otherListeners: any = {\n    resize: 'handleResize'\n  };\n\n  get touchListeners() {\n    return this.properties.touchListeners\n      ? this.properties.touchListeners\n      : this._touchListeners;\n  }\n\n  get mouseListeners() {\n    return this.properties.mouseListeners\n      ? this.properties.mouseListeners\n      : this._mouseListeners;\n  }\n\n  get otherListeners() {\n    return this.properties.otherListeners\n      ? this.properties.otherListeners\n      : this._otherListeners;\n  }\n\n  constructor(properties: Properties) {\n    this.properties = properties;\n    this.element = this.properties.element;\n    this.elementPosition = this.getElementPosition();\n\n    this.toggleEventListeners('addEventListener');\n  }\n\n  destroy() {\n    this.toggleEventListeners('removeEventListener');\n  }\n\n  toggleEventListeners(action: 'addEventListener' | 'removeEventListener') {\n    let listeners;\n\n    if (this.properties.listeners === 'mouse and touch') {\n      listeners = Object.assign(this.touchListeners, this.mouseListeners);\n    } else {\n      listeners = this.detectTouchScreen()\n        ? this.touchListeners\n        : this.mouseListeners;\n    }\n\n    if (this.properties.resize) {\n      listeners = Object.assign(listeners, this.otherListeners);\n    }\n\n    for (const listener in listeners) {\n      const handler: MouseHandler = listeners[listener];\n\n      // Window\n      if (listener === 'resize') {\n        if (action === 'addEventListener') {\n          window.addEventListener(listener, this[handler], false);\n        }\n        if (action === 'removeEventListener') {\n          window.removeEventListener(listener, this[handler], false);\n        }\n        // Document\n      } else if (listener === 'mouseup' || listener === 'mousemove') {\n        if (action === 'addEventListener') {\n          document.addEventListener(listener, this[handler], {\n            passive: false\n          });\n        }\n        if (action === 'removeEventListener') {\n          document.removeEventListener(listener, this[handler], false);\n        }\n        // Element\n      } else {\n        if (action === 'addEventListener') {\n          this.element.addEventListener(listener, this[handler], false);\n        }\n        if (action === 'removeEventListener') {\n          this.element.removeEventListener(listener, this[handler], false);\n        }\n      }\n    }\n  }\n\n  addEventListeners(listener: string) {\n    const handler: MouseHandler = this._mouseListeners[listener];\n    window.addEventListener(listener, this[handler], false);\n  }\n\n  removeEventListeners(listener: string) {\n    const handler: MouseHandler = this._mouseListeners[listener];\n    window.removeEventListener(listener, this[handler], false);\n  }\n\n  /*\n   * Listeners\n   */\n\n  /* Touchstart */\n\n  handleTouchstart = (event: any) => {\n    this.elementPosition = this.getElementPosition();\n    this.touchstartTime = new Date().getTime();\n\n    if (this.eventType === undefined) {\n      this.getTouchstartPosition(event);\n    }\n\n    this.runHandler('touchstart', event);\n  };\n\n  /* Touchmove */\n\n  handleTouchmove = (event: any) => {\n    const { touches } = event;\n\n    // Pan\n    if (this.detectPan(touches)) {\n      this.runHandler('pan', event);\n    }\n\n    // Pinch\n    if (this.detectPinch(event)) {\n      this.runHandler('pinch', event);\n    }\n\n    // Linear swipe\n    switch (this.detectLinearSwipe(event)) {\n      case 'horizontal-swipe':\n        event.swipeType = 'horizontal-swipe';\n        this.runHandler('horizontal-swipe', event);\n        break;\n      case 'vertical-swipe':\n        event.swipeType = 'vertical-swipe';\n        this.runHandler('vertical-swipe', event);\n        break;\n    }\n\n    // Linear swipe\n    if (\n      this.detectLinearSwipe(event) ||\n      this.eventType === 'horizontal-swipe' ||\n      this.eventType === 'vertical-swipe'\n    ) {\n      this.handleLinearSwipe(event);\n    }\n  };\n\n  handleLinearSwipe(event: any) {\n    // event.preventDefault();\n\n    this.i++;\n\n    if (this.i > 3) {\n      this.eventType = this.getLinearSwipeType(event);\n    }\n\n    if (this.eventType === 'horizontal-swipe') {\n      this.runHandler('horizontal-swipe', event);\n    }\n\n    if (this.eventType === 'vertical-swipe') {\n      this.runHandler('vertical-swipe', event);\n    }\n  }\n\n  /* Touchend */\n\n  handleTouchend = (event: any) => {\n    const { touches } = event;\n\n    // Double Tap\n    if (this.detectDoubleTap()) {\n      this.runHandler('double-tap', event);\n    }\n\n    // Tap\n    this.detectTap();\n\n    this.runHandler('touchend', event);\n    this.eventType = 'touchend';\n\n    if (touches && touches.length === 0) {\n      this.eventType = undefined;\n      this.i = 0;\n    }\n  };\n\n  /* Mousedown */\n\n  handleMousedown = (event: any) => {\n    this.isMousedown = true;\n    this.elementPosition = this.getElementPosition();\n    this.touchstartTime = new Date().getTime();\n\n    if (this.eventType === undefined) {\n      this.getMousedownPosition(event);\n    }\n\n    this.runHandler('mousedown', event);\n  };\n\n  /* Mousemove */\n\n  handleMousemove = (event: any) => {\n    // event.preventDefault();\n\n    if (!this.isMousedown) {\n      return;\n    }\n\n    // Pan\n    this.runHandler('pan', event);\n\n    // Linear swipe\n    switch (this.detectLinearSwipe(event)) {\n      case 'horizontal-swipe':\n        event.swipeType = 'horizontal-swipe';\n        this.runHandler('horizontal-swipe', event);\n        break;\n      case 'vertical-swipe':\n        event.swipeType = 'vertical-swipe';\n        this.runHandler('vertical-swipe', event);\n        break;\n    }\n\n    // Linear swipe\n    if (\n      this.detectLinearSwipe(event) ||\n      this.eventType === 'horizontal-swipe' ||\n      this.eventType === 'vertical-swipe'\n    ) {\n      this.handleLinearSwipe(event);\n    }\n  };\n\n  /* Mouseup */\n\n  handleMouseup = (event: any) => {\n    // Tap\n    this.detectTap();\n\n    this.isMousedown = false;\n    this.runHandler('mouseup', event);\n    this.eventType = undefined;\n    this.i = 0;\n  };\n\n  /* Wheel */\n\n  handleWheel = (event: any) => {\n    this.runHandler('wheel', event);\n  };\n\n  /* Resize */\n\n  handleResize = (event: any) => {\n    this.runHandler('resize', event);\n  };\n\n  runHandler(eventName: any, response: any) {\n    if (this.handlers[eventName]) {\n      this.handlers[eventName](response);\n    }\n  }\n\n  /*\n   * Detection\n   */\n\n  detectPan(touches: any) {\n    return (\n      (touches.length === 1 && !this.eventType) || this.eventType === 'pan'\n    );\n  }\n\n  detectDoubleTap() {\n    if (this.eventType != undefined) {\n      return;\n    }\n\n    const currentTime = new Date().getTime();\n    const tapLength = currentTime - this.lastTap;\n\n    clearTimeout(this.doubleTapTimeout);\n\n    if (tapLength < this.doubleTapMinTimeout && tapLength > 0) {\n      return true;\n    }\n    this.doubleTapTimeout = setTimeout(() => {\n      clearTimeout(this.doubleTapTimeout);\n    }, this.doubleTapMinTimeout);\n\n    this.lastTap = currentTime;\n\n    return undefined;\n  }\n\n  detectTap(): void {\n    if (this.eventType != undefined) {\n      return;\n    }\n\n    const currentTime = new Date().getTime();\n    const tapLength = currentTime - this.touchstartTime;\n\n    if (tapLength > 0) {\n      if (tapLength < this.tapMinTimeout) {\n        this.runHandler('tap', event);\n      } else {\n        this.runHandler('longtap', event);\n      }\n    }\n  }\n\n  detectPinch(event: any) {\n    const { touches } = event;\n    return (\n      (touches.length === 2 && this.eventType === undefined) ||\n      this.eventType === 'pinch'\n    );\n  }\n\n  detectLinearSwipe(event: any) {\n    const { touches } = event;\n\n    if (touches) {\n      if (\n        (touches.length === 1 && !this.eventType) ||\n        this.eventType === 'horizontal-swipe' ||\n        this.eventType === 'vertical-swipe'\n      ) {\n        return this.getLinearSwipeType(event);\n      }\n    } else if (\n      !this.eventType ||\n      this.eventType === 'horizontal-swipe' ||\n      this.eventType === 'vertical-swipe'\n    ) {\n      return this.getLinearSwipeType(event);\n    }\n\n    return undefined;\n  }\n\n  getLinearSwipeType(event: any) {\n    if (\n      this.eventType !== 'horizontal-swipe' &&\n      this.eventType !== 'vertical-swipe'\n    ) {\n      const movementX = Math.abs(this.moveLeft(0, event) - this.startX);\n      const movementY = Math.abs(this.moveTop(0, event) - this.startY);\n\n      if (movementY * 3 > movementX) {\n        return 'vertical-swipe';\n      }\n      return 'horizontal-swipe';\n    }\n    return this.eventType;\n  }\n\n  getElementPosition() {\n    return this.element.getBoundingClientRect();\n  }\n\n  getTouchstartPosition(event: any) {\n    this.startX = event.touches[0].clientX - this.elementPosition.left;\n    this.startY = event.touches[0].clientY - this.elementPosition.top;\n  }\n\n  getMousedownPosition(event: any) {\n    this.startX = event.clientX - this.elementPosition.left;\n    this.startY = event.clientY - this.elementPosition.top;\n  }\n\n  moveLeft(index: any, event: any) {\n    const { touches } = event;\n\n    if (touches) {\n      return touches[index].clientX - this.elementPosition.left;\n    }\n    return event.clientX - this.elementPosition.left;\n  }\n\n  moveTop(index: any, event: any) {\n    const { touches } = event;\n\n    if (touches) {\n      return touches[index].clientY - this.elementPosition.top;\n    }\n    return event.clientY - this.elementPosition.top;\n  }\n\n  detectTouchScreen() {\n    const prefixes = ' -webkit- -moz- -o- -ms- '.split(' ');\n    const mq = function (query: any) {\n      return window.matchMedia(query).matches;\n    };\n\n    if ('ontouchstart' in window) {\n      return true;\n    }\n\n    // include the 'heartz' as a way to have a non matching MQ to help terminate the join\n    // https://git.io/vznFH\n    const query = ['(', prefixes.join('touch-enabled),('), 'heartz', ')'].join(\n      ''\n    );\n    return mq(query);\n  }\n\n  /* Public properties and methods */\n  on(event: EventType, handler: Function) {\n    if (event) {\n      this.handlers[event] = handler;\n    }\n  }\n}\n","import { Properties } from './interfaces';\n\nexport class Carousel {\n  cellsElement: HTMLElement | undefined;\n\n  visibleWidth!: number;\n\n  autoplayId: any = null;\n\n  get cellLength() {\n    return this.cells.cellLength;\n  }\n\n  get lastCellIndex() {\n    return this.cells.cellLength - 1;\n  }\n\n  get overflowCellsLimit() {\n    return this.utils.overflowCellsLimit;\n  }\n\n  get autoplayIsPossible() {\n    return this.properties.autoplayIsPossible;\n  }\n\n  get margin() {\n    return this.properties.margin;\n  }\n\n  get minSwipeDistance() {\n    return this.properties.minSwipeDistance;\n  }\n\n  get transitionDuration() {\n    return this.properties.transitionDuration;\n  }\n\n  get transitionTimingFunction() {\n    return this.properties.transitionTimingFunction;\n  }\n\n  get fullCellWidth() {\n    return this.properties.cellWidth + this.margin;\n  }\n\n  get numberOfVisibleCells() {\n    return this.utils.numberOfVisibleCells;\n  }\n\n  get slideCounter() {\n    return this.slide.counter;\n  }\n\n  constructor(\n    private properties: Properties,\n    private utils: any,\n    private cells: any,\n    private container: any,\n    private slide: any\n  ) {\n    this.init();\n  }\n\n  updateProperties(properties: Properties) {\n    this.properties = properties;\n  }\n\n  init() {\n    this.cellsElement = this.properties.cellsElement;\n    this.visibleWidth =\n      this.properties.visibleWidth ||\n      this.cellsElement!.parentElement!.clientWidth;\n  }\n\n  destroy() {\n    clearInterval(this.autoplayId);\n  }\n\n  lineUpCells() {\n    this.cells.lineUp();\n  }\n\n  handleTouchstart = (event: any) => {\n    this.container.handleTouchstart();\n    this.slide.handleTouchstart(event);\n  };\n\n  handleHorizontalSwipe = (event: any) => {\n    this.container.handleHorizontalSwipe();\n  };\n\n  handleTouchend = (event: any) => {\n    if (this.properties.freeScroll) {\n      this.container.handleTouchend();\n    } else {\n      this.container.handleTouchend(true);\n      this.slide.handleTouchend(event);\n    }\n  };\n\n  handleTransitionend() {\n    this.slide.handleTransitionend();\n  }\n\n  next(length = 1) {\n    if (!this.isNextArrowDisabled()) {\n      this.slide.next(length);\n    }\n  }\n\n  prev(length = 1) {\n    this.slide.prev(length);\n  }\n\n  isNextArrowDisabled = () => this.slide.isNextArrowDisabled();\n\n  isPrevArrowDisabled = () => this.slide.isPrevArrowDisabled();\n\n  autoplay() {\n    if (this.autoplayId === null) {\n      this.autoplayId = setInterval(() => {\n        if (this.autoplayIsPossible) {\n          this.next();\n        }\n      }, this.properties.autoplayInterval);\n    }\n  }\n\n  stopAutoplay() {\n    if (this.autoplayId != null) {\n      clearInterval(this.autoplayId);\n      this.autoplayId = null;\n    }\n  }\n}\n","import { Properties as CarouselProperties } from './interfaces';\n\nexport class Container {\n  /* The index of the new position relative to\n   * the active index, for example -1 or +1\n   */\n  initialPositionX = 0;\n\n  initialElementPositionX = 0;\n\n  pullLimit = 100;\n\n  startTime = 0;\n\n  startX = 0;\n\n  moveX = 0;\n\n  isSwipeInProgress = false;\n\n  get visibleWidth() {\n    return this.utils.visibleWidth;\n  }\n\n  get overflowCellsLimit() {\n    return this.utils.overflowCellsLimit;\n  }\n\n  get element() {\n    return this.carouselProperties.cellsElement;\n  }\n\n  get freeScroll() {\n    return this.carouselProperties.freeScroll;\n  }\n\n  get fullCellWidth() {\n    return this.carouselProperties.cellWidth + this.carouselProperties.margin;\n  }\n\n  get numberOfVisibleCells() {\n    return this.utils.numberOfVisibleCells;\n  }\n\n  get transitionDuration() {\n    return this.carouselProperties.transitionDuration;\n  }\n\n  get transitionTimingFunction() {\n    return this.carouselProperties.transitionTimingFunction;\n  }\n\n  get cellLength() {\n    return this.cells.cellLength;\n  }\n\n  get tooFewCells() {\n    return this.numberOfVisibleCells > this.cellLength;\n  }\n\n  get disabled() {\n    return this.tooFewCells;\n  }\n\n  get margin() {\n    return this.carouselProperties.margin;\n  }\n\n  constructor(\n    private carouselProperties: CarouselProperties,\n    private utils: any,\n    private cells: any\n  ) {\n    this.init();\n  }\n\n  updateProperties(carouselProperties: CarouselProperties) {\n    this.carouselProperties = carouselProperties;\n  }\n\n  init() {\n    this.setWidth();\n  }\n\n  handleTouchstart() {\n    this.startX = this.utils.getStartX(event);\n    this.startTime = new Date().getTime();\n    this.initialElementPositionX = this.getInitialElementPositionX();\n  }\n\n  handleHorizontalSwipe() {\n    if (this.disabled) {\n      return;\n    }\n\n    if (!this.isSwipeInProgress) {\n      this.startX = this.utils.getStartX(event);\n      this.startTime = new Date().getTime();\n      this.initialElementPositionX = this.getInitialElementPositionX();\n    }\n\n    this.isSwipeInProgress = true;\n    this.moveX = this.utils.getMoveX(event);\n    this.move();\n  }\n\n  handleTouchend(simpleProcessing = false) {\n    if (this.disabled) {\n      return;\n    }\n\n    /* If touchend was passed to the Slide class */\n    if (simpleProcessing) {\n      this.isSwipeInProgress = false;\n      return;\n    }\n\n    this.isSwipeInProgress = false;\n    this.finishMoving();\n    this.clearInitialValues();\n  }\n\n  move() {\n    let positionX: number = this.getMovePositionX();\n    const isPulled = this.detectPulled();\n    const direction = this.getDirection();\n\n    if (isPulled) {\n      if (\n        (isPulled.edge === 'left' && direction === 'right') ||\n        (isPulled.edge === 'right' && direction === 'left')\n      ) {\n        positionX = this.slowdownOnPull(positionX);\n      }\n    }\n\n    this.transformPositionX(positionX, 0);\n\n    if (this.freeScroll) {\n      this.initialPositionX = positionX;\n    }\n\n    if (isPulled) {\n      if (isPulled.edge === 'left' && isPulled.overflowX > this.pullLimit) {\n        this.initialPositionX = 0;\n      }\n      if (isPulled.edge === 'right' && isPulled.overflowX > this.pullLimit) {\n        this.initialPositionX = positionX;\n      }\n    }\n  }\n\n  getMovePositionX() {\n    const distance = this.getDistance();\n    return this.initialElementPositionX - distance;\n  }\n\n  getDistance() {\n    return this.startX - this.moveX;\n  }\n\n  /* If the container is pulled out of the left or right border */\n  detectPulled() {\n    const currentPositionX = this.getCurrentPositionX();\n\n    if (currentPositionX > 0) {\n      return {\n        edge: 'left',\n        positionX: currentPositionX,\n        overflowX: Math.abs(currentPositionX)\n      };\n    }\n\n    if (currentPositionX < this.getEndPosition()) {\n      return {\n        edge: 'right',\n        positionX: currentPositionX,\n        overflowX: Math.abs(currentPositionX - this.getEndPosition())\n      };\n    }\n\n    return undefined;\n  }\n\n  slowdownOnPull(_positionX: number) {\n    let distance = Math.abs(this.getDistance());\n    const endPosition = this.getEndPosition();\n    const isPulled = this.detectPulled();\n\n    if (!isPulled) {\n      return 0;\n    }\n\n    const decelerationRatio = 3 + isPulled.overflowX / 50;\n    let positionX = 0;\n\n    if (isPulled.edge === 'left') {\n      if (this.initialElementPositionX < 0) {\n        distance -= Math.abs(this.initialElementPositionX);\n      }\n\n      const rubberPositionX = distance / decelerationRatio;\n      positionX = rubberPositionX;\n\n      if (this.initialElementPositionX > 0) {\n        positionX = this.initialElementPositionX + rubberPositionX;\n      }\n\n      if (positionX > this.pullLimit) {\n        positionX = this.pullLimit;\n      }\n    }\n\n    if (isPulled.edge === 'right') {\n      const rubberPositionX =\n        endPosition +\n        (this.initialElementPositionX - distance - endPosition) /\n          decelerationRatio;\n      const containerWidth = this.getWidth();\n\n      positionX = rubberPositionX;\n\n      if (\n        this.initialElementPositionX < -(containerWidth - this.visibleWidth)\n      ) {\n        positionX =\n          containerWidth -\n          this.visibleWidth +\n          this.initialElementPositionX +\n          rubberPositionX;\n      }\n\n      if (positionX < endPosition - this.pullLimit) {\n        positionX = endPosition - this.pullLimit;\n      }\n    }\n\n    return positionX;\n  }\n\n  finishMoving() {\n    const positionX = this.getMovePositionX();\n    let newPositionX = 0;\n\n    if (this.freeScroll) {\n      newPositionX = this.getInertia();\n    }\n\n    /* Align container while pulling */\n    newPositionX = this.getAlignedPositionOnPull(newPositionX);\n\n    this.transformPositionX(newPositionX);\n    this.setInitialPosition(positionX);\n  }\n\n  /* Returns the new position of the container with inertia */\n  getInertia() {\n    const distance = this.getDistance();\n    const currentTime = new Date().getTime();\n    const tapLength = currentTime - this.startTime;\n    const inertia = (distance / tapLength) * 100;\n\n    return this.initialPositionX - inertia;\n  }\n\n  getAlignedPositionOnPull(newPositionX: number) {\n    const direction = this.getDirection();\n\n    if (direction === 'left') {\n      const endPosition = this.getEndPosition();\n      if (newPositionX < endPosition) {\n        return endPosition;\n      }\n    }\n\n    return newPositionX;\n  }\n\n  getCurrentPositionX() {\n    const parentPosition = this.element!.parentElement!.getBoundingClientRect();\n    const position = this.element.getBoundingClientRect();\n    return position.left - parentPosition.left;\n  }\n\n  getEndPosition() {\n    const width = this.getWidth();\n    const visibleWidth = this.element!.parentElement!.clientWidth;\n    return visibleWidth - width;\n  }\n\n  transformPositionX(value: number, duration = this.transitionDuration) {\n    if (value === undefined) {\n      return;\n    }\n\n    this.element.style.transition = `transform ${duration}ms ${this.transitionTimingFunction}`;\n    this.element.style.transform = `translateX(${value}px)`;\n  }\n\n  getWidth() {\n    return this.cellLength * this.fullCellWidth;\n  }\n\n  setWidth() {\n    const width = this.getWidth();\n    this.element.style.width = `${width}px`;\n  }\n\n  setInitialPosition(position: number) {\n    this.initialPositionX = position;\n  }\n\n  getElementPosition() {\n    return this.element.getBoundingClientRect();\n  }\n\n  getInitialElementPositionX() {\n    const carouselElementPosition =\n      this.utils.getCarouselElementPosition().left;\n    return this.getElementPosition().left - carouselElementPosition;\n  }\n\n  clearInitialValues() {\n    this.startX = this.moveX = 0;\n  }\n\n  getDirection() {\n    const direction = Math.sign(this.startX - this.moveX);\n\n    if (direction === -1) {\n      return 'right';\n    }\n    if (direction === 1) {\n      return 'left';\n    }\n\n    return undefined;\n  }\n}\n","import { Properties as CarouselProperties } from './interfaces';\n\nexport class Cells {\n  cells: HTMLCollection | undefined;\n\n  element!: HTMLElement;\n\n  visibleWidth: number | undefined;\n\n  counter = 0;\n\n  get cellLength() {\n    return this.cells ? this.cells.length : 0;\n  }\n\n  get fullCellWidth() {\n    return this.carouselProperties.cellWidth + this.carouselProperties.margin;\n  }\n\n  get cellLengthInLightDOMMode() {\n    return this.cellLength;\n  }\n\n  get numberOfVisibleCells() {\n    return this.utils.numberOfVisibleCells;\n  }\n\n  get overflowCellsLimit() {\n    return this.utils.overflowCellsLimit;\n  }\n\n  constructor(\n    private carouselProperties: CarouselProperties,\n    private utils: any\n  ) {\n    this.init(carouselProperties);\n  }\n\n  updateProperties(carouselProperties: CarouselProperties) {\n    this.carouselProperties = carouselProperties;\n  }\n\n  lineUp() {\n    const cells = this.element ? this.element.children : [];\n\n    for (let i = 0; i < cells.length; i++) {\n      const cell = cells[i];\n      const positionX = this.getCellPositionInContainer(i);\n      (cell as HTMLElement).style.transform = `translateX(${positionX}px)`;\n      (\n        cell as HTMLElement\n      ).style.width = `${this.carouselProperties.cellWidth}px`;\n    }\n  }\n\n  ifSequenceOfCellsIsChanged() {\n    const cells: any = this.element.children;\n    return cells[0].style.transform !== 'translateX(0px)';\n  }\n\n  getCellPositionInContainer(cellIndexInDOMTree: number) {\n    return cellIndexInDOMTree * this.fullCellWidth;\n  }\n\n  setCounter(value: number) {\n    this.counter = value;\n  }\n\n  init(carouselProperties: CarouselProperties) {\n    this.element = this.carouselProperties.cellsElement;\n    this.cells = this.element.children;\n    this.visibleWidth =\n      this.carouselProperties.visibleWidth ||\n      this.element!.parentElement!.clientWidth;\n  }\n}\n","import { Properties as CarouselProperties } from './interfaces';\n\nexport interface Properties {\n  carouselProperties: CarouselProperties;\n}\n\nexport class Slide {\n  slideLength = 0;\n\n  isSlideInProgress = false;\n\n  direction: 'left' | 'right' | undefined;\n\n  counter = 0;\n\n  _counter = 0;\n\n  distance = 0;\n\n  distanceAbs = 0;\n\n  visibleWidth!: number;\n\n  isNotClickOnArrow = false;\n\n  initialPositionX = 0;\n\n  currentPositionX = 0;\n\n  /* The slide length has been limited by the limitSlideLength() method */\n  isSlideLengthLimited = false;\n\n  get fullCellWidth() {\n    return this.carouselProperties.cellWidth + this.carouselProperties.margin;\n  }\n\n  get margin() {\n    return this.carouselProperties.margin;\n  }\n\n  get minSwipeDistance() {\n    return this.carouselProperties.minSwipeDistance;\n  }\n\n  get numberOfVisibleCells() {\n    return this.utils.numberOfVisibleCells;\n  }\n\n  get visibleCellsOverflowContainer() {\n    return this.utils.visibleCellsOverflowContainer;\n  }\n\n  /* The position to which the container returns after each slide\n   * in the light DUM tree mode.\n   */\n  get fixedContainerPosition() {\n    return -(this.overflowCellsLimit * this.fullCellWidth);\n  }\n\n  get overflowCellsLimit() {\n    return this.utils.overflowCellsLimit;\n  }\n\n  /* Number of cell elements in the DUM tree */\n  get cellLength() {\n    return this.cells.cellLength;\n  }\n\n  constructor(\n    private carouselProperties: CarouselProperties,\n    private utils: any,\n    private cells: any,\n    private container: any\n  ) {\n    this.init();\n  }\n\n  updateProperties(carouselProperties: CarouselProperties) {\n    this.carouselProperties = carouselProperties;\n    this.setVisibleWidth();\n  }\n\n  init() {\n    this.visibleWidth =\n      this.carouselProperties.visibleWidth ||\n      this.carouselProperties.hostElement.clientWidth;\n  }\n\n  handleTouchstart() {\n    /* Touchstart event is not called for arrow */\n    this.isNotClickOnArrow = true;\n    this.isSlideLengthLimited = false;\n\n    if (!this.isSlideInProgress) {\n      this.initialPositionX = this.container.getCurrentPositionX();\n    }\n  }\n\n  handleTouchend() {\n    if (!this.isNotClickOnArrow) {\n      return;\n    }\n    this.currentPositionX = this.container.getCurrentPositionX();\n    this.distanceAbs = Math.abs(this.initialPositionX - this.currentPositionX);\n    this.distance = this.initialPositionX - this.currentPositionX;\n    this.direction = this.getDirection();\n    this.isNotClickOnArrow = false;\n    this.handleSlide();\n  }\n\n  handleTransitionend() {\n    this.setCounter();\n    this.isSlideInProgress = false;\n  }\n\n  handleSlide(customSlideLength: number | undefined = undefined) {\n    const isUsingButton = customSlideLength;\n    let newPositionX;\n\n    if ((isUsingButton && this.isSlideInProgress) || !this.direction) {\n      return;\n    }\n\n    /* Custom slide length is used in arrows */\n    if (customSlideLength) {\n      this.slideLength = this.limitSlideLength(customSlideLength);\n\n      if (!this.isSlideInProgress) {\n        this.initialPositionX = this.container.getCurrentPositionX();\n      }\n    } else {\n      this.slideLength = this.getSlideLength(this.distanceAbs);\n    }\n\n    /* Store intermediate counter value */\n    this._counter = this.getPreliminaryCounter();\n\n    if (this.direction === 'left') {\n      if (!customSlideLength) {\n        this.slideLength = this.limitSlideLength(\n          this.getSlideLength(this.distanceAbs)\n        );\n      }\n\n      this._counter = this.getPreliminaryCounter();\n      const isSlidesEnd = this.isSlidesEnd(this._counter);\n      newPositionX = this.getPositionByIndex(this._counter);\n\n      if (isSlidesEnd) {\n        this._counter = this.counter;\n\n        newPositionX = this.getPositionByIndex(this.counter);\n        this.slideLength = 0;\n      }\n    }\n\n    if (this.direction === 'right') {\n      if (!customSlideLength) {\n        this.slideLength = this.getSlideLength(this.distanceAbs);\n      }\n\n      if (this._counter < 0) {\n        this._counter = this.counter;\n        this.slideLength = this.counter;\n      }\n\n      newPositionX = this.getPositionByIndex(this.counter - this.slideLength);\n    }\n\n    if (this.container.getCurrentPositionX() !== newPositionX) {\n      this.isSlideInProgress = true;\n      this.container.transformPositionX(newPositionX);\n    }\n  }\n\n  next(length = 1) {\n    this.direction = 'left';\n    this.handleSlide(length);\n  }\n\n  prev(length = 1) {\n    this.direction = 'right';\n    this.handleSlide(length);\n  }\n\n  select(index: number) {\n    if (index > this.cellLength - 1) {\n      return;\n    }\n\n    if (index > this.counter) {\n      const length = index - this.counter;\n      this.next(length);\n    }\n\n    if (index < this.counter) {\n      const length = this.counter - index;\n      this.prev(length);\n    }\n  }\n\n  getPreliminaryCounter() {\n    if (this.direction === 'left') {\n      return this.counter + this.slideLength;\n    }\n\n    if (this.direction === 'right') {\n      return this.counter - this.slideLength;\n    }\n\n    return 0;\n  }\n\n  /*\n   * Limits the length of the slide during calls to the next() and prev()\n   * methods if the specified position is outside the cell length\n   */\n  limitSlideLength(slideLength: number) {\n    if (slideLength > 1) {\n      for (let i = 0; i < slideLength; i++) {\n        const newCounter = this.counter + (slideLength - i);\n\n        if (!this.isSlidesEnd(newCounter)) {\n          slideLength -= i;\n          this.isSlideLengthLimited = i > 0;\n          break;\n        }\n      }\n    }\n    return slideLength;\n  }\n\n  /* Offset the container to show the last cell completely */\n  getPositionCorrection(counter: number) {\n    let correction = 0;\n    const isLastSlide = this.isLastSlide(counter);\n\n    if (this.isSlideLengthLimited || isLastSlide) {\n      const cellsWidth =\n        this.cells.cellLengthInLightDOMMode * this.fullCellWidth;\n\n      if (this.visibleWidth < cellsWidth) {\n        correction = -(\n          this.numberOfVisibleCells * this.fullCellWidth -\n          this.visibleWidth -\n          this.margin\n        );\n      }\n\n      if (correction >= -this.margin) {\n        correction = 0;\n      }\n    }\n\n    return correction;\n  }\n\n  getSlideLength(distanceAbs: number) {\n    let length = Math.floor(distanceAbs / this.fullCellWidth);\n\n    if (distanceAbs % this.fullCellWidth >= this.minSwipeDistance) {\n      length++;\n    }\n\n    return length;\n  }\n\n  getDistanceAbs() {\n    return Math.abs(this.initialPositionX - this.currentPositionX);\n  }\n\n  getDirection() {\n    const direction = Math.sign(this.initialPositionX - this.currentPositionX);\n\n    if (direction === -1) {\n      return 'right';\n    }\n    if (direction === 1) {\n      return 'left';\n    }\n\n    return undefined;\n  }\n\n  isSlidesEnd(counter: number) {\n    const margin = this.visibleCellsOverflowContainer ? 1 : 0;\n    const imageLength = this.cells.cellLength;\n\n    return imageLength - counter + margin < this.numberOfVisibleCells;\n  }\n\n  isLastSlide(counter: number) {\n    return this.isSlidesEnd(counter + 1);\n  }\n\n  setCounter() {\n    if (this.direction === 'left') {\n      this.counter += this.slideLength;\n    }\n\n    if (this.direction === 'right') {\n      this.counter -= this.slideLength;\n    }\n  }\n\n  getPositionByIndex(_counter: number) {\n    let correction = this.getPositionCorrection(\n      this.counter + this.slideLength\n    );\n    let position;\n\n    if (correction !== 0) {\n      correction += this.fullCellWidth;\n    }\n\n    if (this.direction === 'right') {\n      correction = 0;\n    }\n\n    position = -(_counter * this.fullCellWidth - correction);\n\n    position = this.provideSafePosition(position);\n\n    return position;\n  }\n\n  provideSafePosition(position: number) {\n    const endPosition = this.container.getEndPosition();\n\n    if (this.direction === 'left') {\n      if (position > 0) {\n        position = 0;\n      }\n    }\n\n    if (this.direction === 'right') {\n      if (position < endPosition) {\n        position = endPosition;\n      }\n    }\n\n    return position;\n  }\n\n  getPositionWithoutCorrection(value: number) {\n    const remainder = Math.round(value) % this.fullCellWidth;\n\n    if (remainder !== 0) {\n      return value - (this.fullCellWidth + remainder);\n    }\n    return value;\n  }\n\n  isNextArrowDisabled() {\n    return (\n      this.isLastSlide(this.counter) ||\n      (!this.visibleCellsOverflowContainer &&\n        this.cellLength <= this.numberOfVisibleCells) ||\n      (this.visibleCellsOverflowContainer &&\n        this.cellLength < this.numberOfVisibleCells)\n    );\n  }\n\n  isPrevArrowDisabled() {\n    return this.counter === 0;\n  }\n\n  alignContainerFast() {\n    if (this.ifLeftDOMModeToBeginning(this.counter)) {\n      /* If we have already exited the light DOM mode but\n       * the cells are still out of place\n       */\n      if (this.cells.ifSequenceOfCellsIsChanged()) {\n        const positionX = -(this.counter * this.fullCellWidth);\n        this.container.transformPositionX(positionX, 0);\n\n        this.cells.setCounter(this.counter);\n        this.cells.lineUp();\n      }\n    }\n  }\n\n  ifLeftDOMModeToBeginning(counter: number) {\n    let flag;\n\n    if (counter <= this.overflowCellsLimit) {\n      flag = true;\n    }\n\n    if (this.counter <= this.overflowCellsLimit) {\n      flag = true;\n    }\n\n    return flag;\n  }\n\n  setVisibleWidth() {\n    this.visibleWidth =\n      this.carouselProperties.visibleWidth ||\n      this.carouselProperties.hostElement.clientWidth;\n  }\n}\n","import { Properties as CarouselProperties } from './interfaces';\n\nexport class Utils {\n  get margin() {\n    return this.carouselProperties.margin;\n  }\n\n  get overflowCellsLimit() {\n    return this.carouselProperties.overflowCellsLimit;\n  }\n\n  get numberOfVisibleCells() {\n    return Math.ceil(this.visibleWidth / this.fullCellWidth);\n  }\n\n  get visibleCellsOverflowContainer() {\n    return (\n      this.numberOfVisibleCells * this.fullCellWidth - this.margin >\n      this.visibleWidth\n    );\n  }\n\n  get fullCellWidth() {\n    return this.carouselProperties.cellWidth + this.carouselProperties.margin;\n  }\n\n  get visibleWidth() {\n    return (\n      this.carouselProperties.visibleWidth ||\n      this.carouselProperties!.cellsElement!.parentElement!.clientWidth\n    );\n  }\n\n  constructor(private carouselProperties: CarouselProperties) {}\n\n  updateProperties(carouselProperties: CarouselProperties) {\n    this.carouselProperties = carouselProperties;\n  }\n\n  getStartX(event: any) {\n    const { touches } = event;\n    const carouselElementPosition = this.getCarouselElementPosition().left;\n    let startX;\n\n    if (touches) {\n      startX = touches[0].clientX - carouselElementPosition;\n    } else {\n      startX = event.clientX - carouselElementPosition;\n    }\n\n    return startX;\n  }\n\n  getMoveX(event: any) {\n    const { touches } = event;\n    const carouselElementPositionX = this.getCarouselElementPosition().left;\n\n    if (touches) {\n      return touches[0].clientX - carouselElementPositionX;\n    }\n    return event.clientX - carouselElementPositionX;\n  }\n\n  getCarouselElementPosition() {\n    return this.carouselProperties.hostElement.getBoundingClientRect();\n  }\n}\n","import {\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  HostListener,\n  Input,\n  Output,\n  OnDestroy,\n  SimpleChanges\n} from '@angular/core';\n\nimport { Properties as CarouselProperties } from './interfaces';\nimport { Touches } from './touches';\nimport { Carousel } from './carousel';\nimport { Container } from './container';\nimport { Cells } from './cells';\nimport { Slide } from './slide';\nimport { Utils } from './utils';\n\n@Component({\n  selector: 'carousel, [carousel]',\n  templateUrl: './carousel.component.html',\n  styleUrls: ['./carousel.component.sass']\n})\nexport class CarouselComponent implements OnDestroy {\n  carousel: any;\n\n  container: any;\n\n  utils: any;\n\n  cells: any;\n\n  slide: any;\n\n  touches: any;\n\n  landscapeMode: any;\n\n  _isCounter = false;\n\n  _cellWidth: number | '100%' = 200;\n\n  isMoving = false;\n\n  isNgContent = false;\n\n  cellLength!: number;\n\n  dotsArr: any;\n\n  carouselProperties!: CarouselProperties;\n\n  savedCarouselWidth!: number;\n\n  get slideCounter() {\n    if (this.carousel) {\n      return this.carousel.slideCounter;\n    }\n  }\n\n  get lapCounter() {\n    if (this.carousel) {\n      return this.carousel.lapCounter;\n    }\n  }\n\n  get isLandscape() {\n    return window.innerWidth > window.innerHeight;\n  }\n\n  get isSafari(): any {\n    const ua = navigator.userAgent.toLowerCase();\n    if (ua.indexOf('safari') !== -1) {\n      return !(ua.indexOf('chrome') > -1);\n    }\n  }\n\n  get counter() {\n    const counter = this.slideCounter;\n    return counter + 1 + this.counterSeparator + this.cellLength;\n  }\n\n  get cellsElement() {\n    return this.elementRef.nativeElement.querySelector('.carousel-cells');\n  }\n\n  get isArrows() {\n    return this.arrows && !this.freeScroll;\n  }\n\n  get isCounter() {\n    return this._isCounter && this.cellLength > 1;\n  }\n\n  get activeDotIndex() {\n    return this.slideCounter % this.cellLength;\n  }\n\n  get cellLimit() {\n    if (this.carousel) {\n      return this.carousel.cellLimit;\n    }\n  }\n\n  get carouselWidth() {\n    return this.elementRef.nativeElement.clientWidth;\n  }\n\n  @Output() events: EventEmitter<any> = new EventEmitter<any>();\n\n  @Input() id!: number;\n\n  @Input() height = 450;\n\n  @Input() width!: number;\n\n  @Input() autoplay = true;\n\n  @Input() autoplayInterval = 5000;\n\n  @Input() pauseOnHover = true;\n\n  @Input() dots = false;\n\n  @Input() borderRadius!: number;\n\n  @Input() margin = 10;\n\n  @Input() objectFit: 'contain' | 'cover' | 'none' = 'cover';\n\n  @Input() minSwipeDistance = 10;\n\n  @Input() transitionDuration = 200;\n\n  @Input() transitionTimingFunction:\n    | 'ease'\n    | 'ease-in'\n    | 'ease-out'\n    | 'ease-in-out'\n    | 'linear' = 'ease-out';\n\n  @Input() videoProperties: any;\n\n  @Input() counterSeparator = ' / ';\n\n  @Input() overflowCellsLimit = 3;\n\n  @Input() listeners: 'auto' | 'mouse and touch' = 'mouse and touch';\n\n  @Input() cellsToShow = 1;\n\n  @Input() cellsToScroll = 1;\n\n  @Input() freeScroll = false;\n\n  @Input() arrows = true;\n\n  @Input() arrowsOutside = false;\n\n  @Input() arrowsTheme: 'light' | 'dark' = 'light';\n\n  @Input('cellWidth') set cellWidth(value: number | '100%') {\n    if (value) {\n      this._cellWidth = value;\n    }\n  }\n\n  @Input('counter') set isCounter(value: boolean) {\n    if (value) {\n      this._isCounter = value;\n    }\n  }\n\n  @HostBinding('class.carousel') hostClassCarousel = true;\n\n  @HostBinding('style.height') hostStyleHeight!: string;\n\n  @HostBinding('style.width') hostStyleWidth!: string;\n\n  @HostListener('window:resize', ['$event'])\n  onWindowResize(event: any) {\n    if (this.utils.visibleWidth !== this.savedCarouselWidth) {\n      this.resize();\n    }\n  }\n\n  @HostListener('mouseenter', ['$event'])\n  onMouseEnter() {\n    if (this.autoplay && this.pauseOnHover) {\n      this.carouselProperties.autoplayIsPossible = false;\n      this.carousel.stopAutoplay();\n    }\n  }\n\n  @HostListener('mouseleave', ['$event'])\n  onMouseLeave() {\n    if (this.autoplay && this.pauseOnHover) {\n      this.carouselProperties.autoplayIsPossible = true;\n      this.carousel.autoplay();\n    }\n  }\n\n  @HostListener('dragstart', ['$event'])\n  onDragStart() {\n    return false;\n  }\n\n  constructor(private elementRef: ElementRef, private ref: ChangeDetectorRef) {}\n\n  ngOnInit() {\n    this.isNgContent = this.cellsElement.children.length > 0;\n\n    this.touches = new Touches({\n      element: this.cellsElement,\n      listeners: this.listeners,\n      mouseListeners: {\n        mousedown: 'handleMousedown',\n        mouseup: 'handleMouseup'\n      }\n    });\n\n    this.touches.on('touchstart', this.handleTouchstart);\n    this.touches.on('horizontal-swipe', this.handleHorizontalSwipe);\n    this.touches.on('touchend', this.handleTouchend);\n    this.touches.on('mousedown', this.handleTouchstart);\n    this.touches.on('mouseup', this.handleTouchend);\n    this.touches.on('tap', this.handleTap);\n\n    this.setDimensions();\n  }\n\n  ngAfterViewInit() {\n    this.initCarousel();\n    this.cellLength = this.getCellLength();\n    this.dotsArr = Array(this.cellLength).fill(1);\n    this.ref.detectChanges();\n    this.carousel.lineUpCells();\n    this.savedCarouselWidth = this.carouselWidth;\n\n    /* Start detecting changes in the DOM tree */\n    this.detectDomChanges();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n        const isFirstChange = Object.values(changes).some(change => change.isFirstChange());\n    if (!isFirstChange && (changes.width || changes.height)) {\n      this.setDimensions();\n      this.initCarousel();\n      this.carousel.lineUpCells();\n      this.ref.detectChanges();\n    }\n  }\n\n  ngOnDestroy() {\n    this.touches.destroy();\n    // this.carousel.destroy();\n  }\n\n  initCarousel() {\n    this.carouselProperties = {\n      id: this.id,\n      cellsElement:\n        this.elementRef.nativeElement.querySelector('.carousel-cells'),\n      hostElement: this.elementRef.nativeElement,\n      cellWidth: this.getCellWidth(),\n      autoplayInterval: this.autoplayInterval,\n      autoplayIsPossible: true,\n      overflowCellsLimit: this.overflowCellsLimit,\n      visibleWidth: this.width,\n      margin: this.margin,\n      minSwipeDistance: this.minSwipeDistance,\n      transitionDuration: this.transitionDuration,\n      transitionTimingFunction: this.transitionTimingFunction,\n      videoProperties: this.videoProperties,\n      eventHandler: this.events,\n      freeScroll: this.freeScroll\n    };\n\n    this.utils = new Utils(this.carouselProperties);\n    this.cells = new Cells(this.carouselProperties, this.utils);\n    this.container = new Container(\n      this.carouselProperties,\n      this.utils,\n      this.cells\n    );\n    this.slide = new Slide(\n      this.carouselProperties,\n      this.utils,\n      this.cells,\n      this.container\n    );\n\n    if (this.autoplay && this.carousel) {\n      this.carousel.stopAutoplay();\n    }\n    this.carousel = new Carousel(\n      this.carouselProperties,\n      this.utils,\n      this.cells,\n      this.container,\n      this.slide\n    );\n\n    if (this.autoplay) {\n      this.carousel.autoplay();\n    }\n  }\n\n  resize() {\n    this.landscapeMode = this.isLandscape;\n    this.savedCarouselWidth = this.carouselWidth;\n\n    this.carouselProperties.cellWidth = this.getCellWidth();\n    this.cells.updateProperties(this.carouselProperties);\n    this.carousel.updateProperties(this.carouselProperties);\n    this.container.updateProperties(this.carouselProperties);\n    this.slide.updateProperties(this.carouselProperties);\n    this.utils.updateProperties(this.carouselProperties);\n    this.carousel.lineUpCells();\n    this.slide.select(0);\n    this.ref.detectChanges();\n  }\n\n  detectDomChanges() {\n    const observer = new MutationObserver((mutations) => {\n      this.onDomChanges();\n    });\n\n    const config = {\n      attributes: true,\n      childList: true,\n      characterData: true\n    };\n    observer.observe(this.cellsElement, config);\n  }\n\n  onDomChanges() {\n    this.cellLength = this.getCellLength();\n    this.carousel.lineUpCells();\n    this.ref.detectChanges();\n  }\n\n  setDimensions() {\n    this.hostStyleHeight = `${this.height}px`;\n    this.hostStyleWidth = `${this.width}px`;\n  }\n\n  handleTouchstart = (event: any) => {\n    this.touches.addEventListeners('mousemove', 'handleMousemove');\n    this.carousel.handleTouchstart(event);\n    this.isMoving = true;\n  };\n\n  handleHorizontalSwipe = (event: any) => {\n    event.preventDefault();\n    this.carousel.handleHorizontalSwipe(event);\n  };\n\n  handleTouchend = (event: any) => {\n    const { touches } = event;\n    this.carousel.handleTouchend(event);\n    this.touches.removeEventListeners('mousemove', 'handleMousemove');\n    this.isMoving = false;\n  };\n\n  handleTap = (event: any) => {\n    const outboundEvent: any = {\n      name: 'click'\n    };\n    const nodes = Array.prototype.slice.call(this.cellsElement.children);\n    const cellElement = event.srcElement.closest('.carousel-cell');\n    const i = nodes.indexOf(cellElement);\n    const cellIndex = nodes.indexOf(cellElement);\n\n    outboundEvent.cellIndex = cellIndex;\n  };\n\n  handleTransitionendCellContainer(event: any) {\n    if (event.target.className === 'carousel-cells') {\n      this.carousel.handleTransitionend();\n    }\n  }\n\n  getCellWidth() {\n    const elementWidth = this.carouselWidth;\n\n    if (this.cellsToShow) {\n      const margin = this.cellsToShow > 1 ? this.margin : 0;\n      const totalMargin = margin * (this.cellsToShow - 1);\n      return (elementWidth - totalMargin) / this.cellsToShow;\n    }\n\n    if (this._cellWidth === '100%') {\n      return elementWidth;\n    }\n    return this._cellWidth;\n  }\n\n  next() {\n    this.carousel.next(this.cellsToScroll);\n    this.carousel.stopAutoplay();\n  }\n\n  prev() {\n    this.carousel.prev(this.cellsToScroll);\n    this.carousel.stopAutoplay();\n  }\n\n  isNextArrowDisabled() {\n    if (this.carousel) {\n      return this.carousel.isNextArrowDisabled();\n    }\n  }\n\n  isPrevArrowDisabled() {\n    if (this.carousel) {\n      return this.carousel.isPrevArrowDisabled();\n    }\n  }\n\n  getCellLength() {\n    return this.cellsElement.children.length;\n  }\n}\n","<div class=\"carousel-counter\" *ngIf=\"isCounter\">{{counter}}</div>\r\n\r\n<div class=\"carousel-container\" [class.carousel-moving]=\"isMoving\">\r\n\t<div class=\"carousel-cells\" #cells (transitionend)=\"handleTransitionendCellContainer($event)\">\r\n\t\t<ng-content></ng-content>\r\n\t</div>\r\n\r\n\t<div class=\"carousel-dots\" *ngIf=\"dots\">\r\n\t\t<div class=\"carousel-dot\" [class.carousel-dot-active]=\"i === activeDotIndex\" *ngFor=\"let dot of dotsArr; index as i\"></div>\r\n\t</div>\r\n</div>\r\n\r\n<div class=\"carousel-arrows\"\r\n\t[class.carousel-arrows-outside]=\"arrowsOutside\"\r\n\t[class.carousel-dark-arrows]=\"arrowsTheme === 'dark'\"\r\n\t*ngIf=\"isArrows\">\r\n\r\n\t<div class=\"carousel-arrow carousel-arrow-prev\" [class.carousel-arrow-disabled]=\"isPrevArrowDisabled()\" (click)=\"prev()\"></div>\r\n\t<div class=\"carousel-arrow carousel-arrow-next\" [class.carousel-arrow-disabled]=\"isNextArrowDisabled()\" (click)=\"next()\"></div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CarouselComponent } from './carousel.component';\n\n@NgModule({\n  declarations: [CarouselComponent],\n  imports: [CommonModule],\n  exports: [CarouselComponent],\n  providers: [],\n  bootstrap: [],\n  entryComponents: [CarouselComponent]\n})\nexport class IvyCarouselModule {}\n","/*\n * Public API Surface of carousel-angular\n */\n\nexport * from './lib/carousel.module';\nexport * from './lib/carousel.component';\nexport * from './lib/interfaces';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}