{"version":3,"file":"tots-ngx-drag-scroll.mjs","sources":["../../../projects/ngx-drag-scroll/src/lib/ngx-drag-scroll-item.ts","../../../projects/ngx-drag-scroll/src/lib/ngx-drag-scroll.component.ts","../../../projects/ngx-drag-scroll/src/lib/ngx-drag-scroll.module.ts","../../../projects/ngx-drag-scroll/src/public-api.ts","../../../projects/ngx-drag-scroll/src/tots-ngx-drag-scroll.ts"],"sourcesContent":["import { Directive, ElementRef, Input, HostBinding, Inject } from '@angular/core';\n\n@Directive({\n  selector: '[drag-scroll-item]'\n})\nexport class DragScrollItemDirective {\n  @HostBinding('style.display')\n  display = 'inline-block';\n\n  @Input('drag-disabled')\n  get dragDisabled() { return this._dragDisabled; }\n  set dragDisabled(value: boolean) { this._dragDisabled = value; }\n\n  _dragDisabled = false;\n\n  _elementRef: ElementRef;\n\n  constructor(\n    @Inject(ElementRef) elementRef: ElementRef,\n  ) {\n    this._elementRef = elementRef;\n  }\n}\n","import {\n  ElementRef,\n  Component,\n  Renderer2,\n  OnDestroy,\n  Input,\n  Output,\n  AfterViewInit,\n  OnChanges,\n  EventEmitter,\n  ViewChild,\n  ContentChildren,\n  AfterViewChecked,\n  QueryList,\n  Inject,\n  HostBinding,\n  HostListener\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { DragScrollItemDirective } from './ngx-drag-scroll-item';\n\n@Component({\n  selector: 'drag-scroll',\n  template: `\n    <div class=\"drag-scroll-content\" #contentRef>\n      <ng-content></ng-content>\n    </div>\n  `,\n  styles: [`\n    :host {\n      overflow: hidden;\n      display: block;\n    }\n    .drag-scroll-content {\n      height: 100%;\n      overflow: auto;\n      white-space: nowrap;\n    }\n    `]\n})\nexport class DragScrollComponent implements OnDestroy, AfterViewInit, OnChanges, AfterViewChecked {\n  private _index = 0;\n\n  private _scrollbarHidden = false;\n\n  private _disabled = false;\n\n  private _xDisabled = false;\n\n  private _xWheelEnabled = false;\n\n  private _yDisabled = false;\n\n  private _dragDisabled = false;\n\n  private _snapDisabled = false;\n\n  private _snapOffset = 0;\n\n  private _snapDuration = 500;\n\n  private _isDragging = false;\n\n  private _onMouseMoveListener: Function;\n\n  private _onMouseUpListener: Function;\n\n  private _onMouseDownListener: Function;\n\n  private _onScrollListener: Function;\n\n  private _onDragStartListener: Function;\n\n  /**\n   * Is the user currently pressing the element\n   */\n  isPressed = false;\n\n  /**\n   * Is the user currently scrolling the element\n   */\n  isScrolling = false;\n\n  scrollTimer: number | NodeJS.Timer = -1;\n\n  scrollToTimer: number | NodeJS.Timer = -1;\n\n  /**\n   * Is the user currently dragging the element\n   */\n  get isDragging(): boolean {\n    return this._isDragging;\n  }\n\n  /**\n   * The x coordinates on the element\n   */\n  downX = 0;\n\n  /**\n   * The y coordinates on the element\n   */\n  downY = 0;\n\n  displayType: string | null = 'block';\n\n  elWidth: string | null = null;\n\n  elHeight: string | null = null;\n\n  /**\n   * The parentNode of carousel Element\n   */\n  parentNode: HTMLElement;\n\n  /**\n   * The carousel Element\n   */\n\n  @ViewChild('contentRef', { static: true }) _contentRef: ElementRef;\n\n  @ContentChildren(DragScrollItemDirective, { descendants: true }) _children: QueryList<DragScrollItemDirective>;\n\n  @HostBinding('style.pointer-events') _pointerEvents = 'auto';\n\n  wrapper: HTMLDivElement | null;\n\n  scrollbarWidth: string | null = null;\n\n  get currIndex() { return this._index; }\n  set currIndex(value) {\n    if (value !== this._index) {\n      this._index = value;\n      this.indexChanged.emit(value);\n    }\n  }\n\n  isAnimating = false;\n\n  prevChildrenLength = 0;\n\n  indexBound = 0;\n\n  rtl = false;\n\n  @Output() dsInitialized = new EventEmitter<void>();\n\n  @Output() indexChanged = new EventEmitter<number>();\n\n  @Output() reachesLeftBound = new EventEmitter<boolean>();\n\n  @Output() reachesRightBound = new EventEmitter<boolean>();\n\n  @Output() snapAnimationFinished = new EventEmitter<number>();\n\n  @Output() dragStart = new EventEmitter<void>();\n\n  @Output() dragEnd = new EventEmitter<void>();\n\n  /**\n   * Whether the scrollbar is hidden\n   */\n  @Input('scrollbar-hidden')\n  get scrollbarHidden() { return this._scrollbarHidden; }\n  set scrollbarHidden(value: boolean) { this._scrollbarHidden = value; }\n\n  /**\n   * Whether horizontally and vertically draging and scrolling is be disabled\n   */\n  @Input('drag-scroll-disabled')\n  get disabled() { return this._disabled; }\n  set disabled(value: boolean) { this._disabled = value; }\n\n  /**\n   * Whether horizontally dragging and scrolling is be disabled\n   */\n  @Input('drag-scroll-x-disabled')\n  get xDisabled() { return this._xDisabled; }\n  set xDisabled(value: boolean) { this._xDisabled = value; }\n\n  /**\n   * Whether vertically dragging and scrolling events is disabled\n   */\n  @Input('drag-scroll-y-disabled')\n  get yDisabled() { return this._yDisabled; }\n  set yDisabled(value: boolean) { this._yDisabled = value; }\n\n  /**\n   * Whether scrolling horizontally with mouse wheel is enabled\n   */\n  @Input('scroll-x-wheel-enabled')\n  get xWheelEnabled() { return this._xWheelEnabled; }\n  set xWheelEnabled(value: boolean) { this._xWheelEnabled = value; }\n\n  @Input('drag-disabled')\n  get dragDisabled() { return this._dragDisabled; }\n  set dragDisabled(value: boolean) { this._dragDisabled = value; }\n\n  @Input('snap-disabled')\n  get snapDisabled() { return this._snapDisabled; }\n  set snapDisabled(value: boolean) { this._snapDisabled = value; }\n\n  @Input('snap-offset')\n  get snapOffset() { return this._snapOffset; }\n  set snapOffset(value: number) { this._snapOffset = value; }\n\n  @Input('snap-duration')\n  get snapDuration() { return this._snapDuration; }\n  set snapDuration(value: number) { this._snapDuration = value; }\n\n  constructor(\n    @Inject(ElementRef) private _elementRef: ElementRef,\n    @Inject(Renderer2) private _renderer: Renderer2,\n    @Inject(DOCUMENT) private _document: any\n  ) {\n    this.scrollbarWidth = `${this.getScrollbarWidth()}px`;\n  }\n\n  ngOnChanges() {\n    this.setScrollBar();\n\n    if (this.xDisabled || this.disabled || this._scrollbarHidden) {\n      this.disableScroll('x');\n    } else {\n      this.enableScroll('x');\n    }\n\n    if (this.yDisabled || this.disabled) {\n      this.disableScroll('y');\n    } else {\n      this.enableScroll('y');\n    }\n  }\n\n  ngAfterViewInit() {\n    // auto assign computed css\n    this._renderer.setAttribute(this._contentRef.nativeElement, 'drag-scroll', 'true');\n\n    this.displayType = typeof window !== 'undefined' ? window.getComputedStyle(this._elementRef.nativeElement).display : 'block';\n\n    this._renderer.setStyle(this._contentRef.nativeElement, 'display', this.displayType);\n    this._renderer.setStyle(this._contentRef.nativeElement, 'whiteSpace', 'noWrap');\n\n    // store ele width height for later user\n    this.markElDimension();\n\n    this._renderer.setStyle(this._contentRef.nativeElement, 'width', this.elWidth);\n    this._renderer.setStyle(this._contentRef.nativeElement, 'height', this.elHeight);\n\n    if (this.wrapper) {\n      this.checkScrollbar();\n    }\n\n    this._onMouseDownListener = this._renderer.listen(this._contentRef.nativeElement, 'mousedown', this.onMouseDownHandler.bind(this));\n    this._onScrollListener = this._renderer.listen(this._contentRef.nativeElement, 'scroll', this.onScrollHandler.bind(this));\n    // prevent Firefox from dragging images\n    this._onDragStartListener = this._renderer.listen(this._contentRef.nativeElement, 'dragstart', (e) => {\n      e.preventDefault();\n    });\n    this.checkNavStatus();\n    this.dsInitialized.emit();\n    this.adjustMarginToLastChild();\n\n    this.rtl = getComputedStyle(this._contentRef.nativeElement).getPropertyValue('direction') === 'rtl';\n  }\n\n  ngAfterViewChecked() {\n    // avoid extra checks\n    if (this._children.length !== this.prevChildrenLength) {\n      this.markElDimension();\n      this.checkScrollbar();\n      this.prevChildrenLength = this._children.length;\n      this.checkNavStatus();\n    }\n  }\n\n  ngOnDestroy() {\n    this._renderer.setAttribute(this._contentRef.nativeElement, 'drag-scroll', 'false');\n    if (this._onMouseDownListener) {\n      this._onMouseDownListener = this._onMouseDownListener();\n    }\n    if (this._onScrollListener) {\n      this._onScrollListener = this._onScrollListener();\n    }\n    if (this._onDragStartListener) {\n      this._onDragStartListener = this._onDragStartListener();\n    }\n  }\n\n  onMouseMoveHandler(event: MouseEvent) {\n    this.onMouseMove(event);\n  }\n\n  onMouseMove(event: MouseEvent) {\n    if (event.clientX === this.downX && event.clientY === this.downY) {\n      // Ignore 'mousemove\" event triggered at the same coordinates that the last mousedown event (consequence of window resize)\n      return;\n    }\n    if (this.isPressed && !this.disabled) {\n      // Workaround for prevent scroll stuck if browser lost focus\n      // MouseEvent.buttons not support by Safari\n      // eslint-disable-next-line import/no-deprecated\n      if (!event.buttons && !event.which) {\n        return this.onMouseUpHandler(event);\n      }\n\n      this._pointerEvents = 'none';\n      this._setIsDragging(true);\n\n      // Drag X\n      if (!this.xDisabled && !this.dragDisabled) {\n        const clientX = (event as MouseEvent).clientX;\n        this._contentRef.nativeElement.scrollLeft =\n          this._contentRef.nativeElement.scrollLeft - clientX + this.downX;\n        this.downX = clientX;\n      }\n\n      // Drag Y\n      if (!this.yDisabled && !this.dragDisabled) {\n        const clientY = (event as MouseEvent).clientY;\n        this._contentRef.nativeElement.scrollTop =\n          this._contentRef.nativeElement.scrollTop - clientY + this.downY;\n        this.downY = clientY;\n      }\n    }\n  }\n\n  onMouseDownHandler(event: MouseEvent) {\n    const dragScrollItem: DragScrollItemDirective | null = this.locateDragScrollItem(event.target as Element);\n    if (dragScrollItem && dragScrollItem.dragDisabled) {\n      return;\n    }\n\n    const isTouchEvent = event.type === 'touchstart';\n\n    this._startGlobalListening(isTouchEvent);\n    this.isPressed = true;\n\n    const mouseEvent = event as MouseEvent;\n    this.downX = mouseEvent.clientX;\n    this.downY = mouseEvent.clientY;\n\n    clearTimeout(this.scrollToTimer as number);\n  }\n\n  onScrollHandler() {\n    this.checkNavStatus();\n    if (!this.isPressed && !this.isAnimating && !this.snapDisabled) {\n      this.isScrolling = true;\n      clearTimeout(this.scrollTimer as number);\n      this.scrollTimer = setTimeout(() => {\n        this.isScrolling = false;\n        this.locateCurrentIndex(true);\n      }, 500);\n    } else {\n      this.locateCurrentIndex();\n    }\n  }\n\n  onMouseUpHandler(event: MouseEvent) {\n    if (this.isPressed) {\n      this.isPressed = false;\n      this._pointerEvents = 'auto';\n      this._setIsDragging(false);\n      if (!this.snapDisabled) {\n        this.locateCurrentIndex(true);\n      } else {\n        this.locateCurrentIndex();\n      }\n      this._stopGlobalListening();\n    }\n  }\n\n  /*\n   * Nav button\n   */\n  moveLeft() {\n    if ((this.currIndex !== 0 || this.snapDisabled)) {\n      this.currIndex--;\n      clearTimeout(this.scrollToTimer as number);\n      this.scrollTo(this._contentRef.nativeElement, this.toChildrenLocation(), this.snapDuration);\n    }\n  }\n\n  moveRight() {\n    const container = this.wrapper || this.parentNode;\n    const containerWidth = container ? container.clientWidth : 0;\n\n    if (!this.isScrollReachesRightEnd() && this.currIndex < this.maximumIndex(containerWidth, this._children.toArray())) {\n      this.currIndex++;\n      clearTimeout(this.scrollToTimer as number);\n      this.scrollTo(this._contentRef.nativeElement, this.toChildrenLocation(), this.snapDuration);\n    }\n  }\n\n  moveTo(index: number) {\n    const container = this.wrapper || this.parentNode;\n    const containerWidth = container ? container.clientWidth : 0;\n    if (\n      index >= 0 &&\n      index !== this.currIndex &&\n      this.currIndex <= this.maximumIndex(containerWidth, this._children.toArray())\n    ) {\n      this.currIndex = Math.min(index, this.maximumIndex(containerWidth, this._children.toArray()));\n      clearTimeout(this.scrollToTimer as number);\n      this.scrollTo(this._contentRef.nativeElement, this.toChildrenLocation(), this.snapDuration);\n    }\n  }\n\n  checkNavStatus() {\n    setTimeout(() => {\n      const onlyOneItem = Boolean(this._children.length <= 1);\n      const containerIsLargerThanContent = Boolean(this._contentRef.nativeElement.scrollWidth <=\n        this._contentRef.nativeElement.clientWidth);\n      if (onlyOneItem || containerIsLargerThanContent) {\n        // only one element\n        this.reachesLeftBound.emit(true);\n        this.reachesRightBound.emit(true);\n      } else if (this.isScrollReachesRightEnd()) {\n        // reached right end\n        this.reachesLeftBound.emit(false);\n        this.reachesRightBound.emit(true);\n      } else if (this._contentRef.nativeElement.scrollLeft === 0 &&\n        this._contentRef.nativeElement.scrollWidth > this._contentRef.nativeElement.clientWidth) {\n        // reached left end\n        this.reachesLeftBound.emit(true);\n        this.reachesRightBound.emit(false);\n      } else {\n        // in the middle\n        this.reachesLeftBound.emit(false);\n        this.reachesRightBound.emit(false);\n      }\n    }, 0);\n  }\n\n  @HostListener('wheel', ['$event'])\n  public onWheel(event: WheelEvent) {\n    if (this._xWheelEnabled) {\n      event.preventDefault();\n\n      if (this._snapDisabled) {\n        this._contentRef.nativeElement.scrollBy(event.deltaY, 0);\n      } else {\n        if (event.deltaY < 0) {\n          this.moveLeft();\n        } else if (event.deltaY > 0) {\n          this.moveRight();\n        }\n      }\n    }\n  }\n\n  @HostListener('window:resize')\n  public onWindowResize() {\n    this.refreshWrapperDimensions();\n    this.checkNavStatus();\n  }\n\n  private _setIsDragging(value: boolean) {\n    if (this._isDragging === value) {\n      return;\n    }\n\n    this._isDragging = value;\n    value ? this.dragStart.emit() : this.dragEnd.emit();\n  }\n\n  private _startGlobalListening(isTouchEvent: boolean) {\n    if (!this._onMouseMoveListener) {\n      const eventName = isTouchEvent ? 'touchmove' : 'mousemove';\n      this._onMouseMoveListener = this._renderer.listen('document', eventName, this.onMouseMoveHandler.bind(this));\n    }\n\n    if (!this._onMouseUpListener) {\n      const eventName = isTouchEvent ? 'touchend' : 'mouseup';\n      this._onMouseUpListener = this._renderer.listen('document', eventName, this.onMouseUpHandler.bind(this));\n    }\n  }\n\n  private _stopGlobalListening() {\n    if (this._onMouseMoveListener) {\n      this._onMouseMoveListener = this._onMouseMoveListener();\n    }\n\n    if (this._onMouseUpListener) {\n      this._onMouseUpListener = this._onMouseUpListener();\n    }\n  }\n\n  private disableScroll(axis: string): void {\n    this._renderer.setStyle(this._contentRef.nativeElement, `overflow-${axis}`, 'hidden');\n  }\n\n  private enableScroll(axis: string): void {\n    this._renderer.setStyle(this._contentRef.nativeElement, `overflow-${axis}`, 'auto');\n  }\n\n  private hideScrollbar(): void {\n    if (this._contentRef.nativeElement.style.display !== 'none' && !this.wrapper) {\n      this.parentNode = this._contentRef.nativeElement.parentNode;\n\n      // create container element\n      this.wrapper = this._renderer.createElement('div');\n      this._renderer.setAttribute(this.wrapper, 'class', 'drag-scroll-wrapper');\n      this._renderer.addClass(this.wrapper, 'drag-scroll-container');\n\n      this.refreshWrapperDimensions();\n\n      this._renderer.setStyle(this.wrapper, 'overflow', 'hidden');\n\n      this._renderer.setStyle(this._contentRef.nativeElement, 'width', `calc(100% + ${this.scrollbarWidth})`);\n      this._renderer.setStyle(this._contentRef.nativeElement, 'height', `calc(100% + ${this.scrollbarWidth})`);\n\n      // Append container element to component element.\n      this._renderer.appendChild(this._elementRef.nativeElement, this.wrapper);\n\n      // Append content element to container element.\n      this._renderer.appendChild(this.wrapper, this._contentRef.nativeElement);\n\n      this.adjustMarginToLastChild();\n    }\n  }\n\n  private showScrollbar(): void {\n    if (this.wrapper) {\n      this._renderer.setStyle(this._contentRef.nativeElement, 'width', '100%');\n      this._renderer.setStyle(this._contentRef.nativeElement, 'height', this.wrapper.style.height);\n      if (this.parentNode !== null) {\n        this.parentNode.removeChild(this.wrapper);\n        this.parentNode.appendChild(this._contentRef.nativeElement);\n      }\n      this.wrapper = null;\n\n      this.adjustMarginToLastChild();\n    }\n  }\n\n  private checkScrollbar() {\n    if (this._contentRef.nativeElement.scrollWidth <= this._contentRef.nativeElement.clientWidth) {\n      this._renderer.setStyle(this._contentRef.nativeElement, 'height', '100%');\n    } else {\n      this._renderer.setStyle(this._contentRef.nativeElement, 'height', `calc(100% + ${this.scrollbarWidth})`);\n    }\n    if (this._contentRef.nativeElement.scrollHeight <= this._contentRef.nativeElement.clientHeight) {\n      this._renderer.setStyle(this._contentRef.nativeElement, 'width', '100%');\n    } else {\n      this._renderer.setStyle(this._contentRef.nativeElement, 'width', `calc(100% + ${this.scrollbarWidth})`);\n    }\n  }\n\n  private setScrollBar(): void {\n    if (this.scrollbarHidden) {\n      this.hideScrollbar();\n    } else {\n      this.showScrollbar();\n    }\n  }\n\n  private getScrollbarWidth(): number {\n    /**\n     * Browser Scrollbar Widths (2016)\n     * OSX (Chrome, Safari, Firefox) - 15px\n     * Windows XP (IE7, Chrome, Firefox) - 17px\n     * Windows 7 (IE10, IE11, Chrome, Firefox) - 17px\n     * Windows 8.1 (IE11, Chrome, Firefox) - 17px\n     * Windows 10 (IE11, Chrome, Firefox) - 17px\n     * Windows 10 (Edge 12/13) - 12px\n     */\n    const outer = this._renderer.createElement('div');\n    this._renderer.setStyle(outer, 'visibility', 'hidden');\n    this._renderer.setStyle(outer, 'width', '100px');\n    this._renderer.setStyle(outer, 'msOverflowStyle', 'scrollbar');  // needed for WinJS apps\n    // document.body.appendChild(outer);\n    this._renderer.appendChild(this._document.body, outer);\n    // this._renderer.appendChild(this._renderer.selectRootElement('body'), outer);\n    const widthNoScroll = outer.offsetWidth;\n    // force scrollbars\n    this._renderer.setStyle(outer, 'overflow', 'scroll');\n\n    // add innerdiv\n    const inner = this._renderer.createElement('div');\n    this._renderer.setStyle(inner, 'width', '100%');\n    this._renderer.appendChild(outer, inner);\n\n    const widthWithScroll = inner.offsetWidth;\n\n    // remove divs\n    this._renderer.removeChild(this._document.body, outer);\n\n    /**\n     * Scrollbar width will be 0 on Mac OS with the\n     * default \"Only show scrollbars when scrolling\" setting (Yosemite and up).\n     * setting default width to 20;\n     */\n    return widthNoScroll - widthWithScroll || 20;\n  }\n\n  private refreshWrapperDimensions() {\n    if (this.wrapper) {\n      this._renderer.setStyle(this.wrapper, 'width', '100%');\n      if (this._elementRef.nativeElement.style.height > 0 || this._elementRef.nativeElement.offsetHeight > 0) {\n        this._renderer.setStyle(this.wrapper, 'height', this._elementRef.nativeElement.style.height\n          || this._elementRef.nativeElement.offsetHeight + 'px');\n      } else {\n        this._renderer.setStyle(this.wrapper, 'height', '100%');\n      }\n    }\n  }\n\n  /*\n  * The below solution is heavily inspired from\n  * https://gist.github.com/andjosh/6764939\n  */\n  private scrollTo(element: Element, to: number, duration: number) {\n    const self = this;\n    self.isAnimating = true;\n    const rtlFactor = this.rtl ? -1 : 1;\n    const start = element.scrollLeft,\n      change = (rtlFactor * to) - start - this.snapOffset,\n      increment = 20;\n    let currentTime = 0;\n\n    // t = current time\n    // b = start value\n    // c = change in value\n    // d = duration\n    const easeInOutQuad = function (t: number, b: number, c: number, d: number) {\n      t /= d / 2;\n      if (t < 1) {\n        return c / 2 * t * t + b;\n      }\n      t--;\n      return -c / 2 * (t * (t - 2) - 1) + b;\n    };\n\n    const animateScroll = function () {\n      currentTime += increment;\n      element.scrollLeft = easeInOutQuad(currentTime, start, change, duration);\n      if (currentTime < duration) {\n        self.scrollToTimer = setTimeout(animateScroll, increment);\n      } else {\n        // run one more frame to make sure the animation is fully finished\n        setTimeout(() => {\n          self.isAnimating = false;\n          self.snapAnimationFinished.emit(self.currIndex);\n        }, increment);\n      }\n    };\n    animateScroll();\n  }\n\n  private locateCurrentIndex(snap?: boolean) {\n    const scrollLeft = Math.abs(this._contentRef.nativeElement.scrollLeft);\n\n    this.currentChildWidth((currentChildWidth, nextChildrenWidth, childrenWidth, idx: number, stop) => {\n      if (\n        (scrollLeft >= childrenWidth &&\n          scrollLeft <= nextChildrenWidth)\n      ) {\n        if (nextChildrenWidth - scrollLeft > currentChildWidth / 2 && !this.isScrollReachesRightEnd()) {\n          // roll back scrolling\n          if (!this.isAnimating) {\n            this.currIndex = idx;\n          }\n          if (snap) {\n            this.scrollTo(this._contentRef.nativeElement, childrenWidth, this.snapDuration);\n          }\n        } else if (scrollLeft !== 0) {\n          // forward scrolling\n          if (!this.isAnimating) {\n            this.currIndex = idx + 1;\n          }\n          if (snap) {\n            this.scrollTo(this._contentRef.nativeElement, childrenWidth + currentChildWidth, this.snapDuration);\n          }\n        }\n        stop();\n      } else if ((idx + 1) === (this._children.length - 1)) {\n        // reaches last index\n        if (!this.isAnimating) {\n          this.currIndex = idx + 1;\n        }\n        stop();\n      }\n    });\n  }\n\n  private currentChildWidth(cb: (\n    currentClildWidth: number,\n    nextChildrenWidth: number,\n    childrenWidth: number,\n    index: number,\n    breakFunc: () => void) => void) {\n    let childrenWidth = 0;\n    let shouldBreak = false;\n    const breakFunc = function () {\n      shouldBreak = true;\n    };\n    const childrenArr = this._children.toArray();\n\n    for (let i = 0; i < childrenArr.length; i++) {\n      if (i === childrenArr.length - 1) {\n        break;\n      }\n      if (shouldBreak) {\n        break;\n      }\n\n      const nextChildrenWidth = childrenWidth + childrenArr[i + 1]._elementRef.nativeElement.clientWidth;\n      const currentClildWidth = childrenArr[i]._elementRef.nativeElement.clientWidth;\n      cb(currentClildWidth, nextChildrenWidth, childrenWidth, i, breakFunc);\n\n      childrenWidth += currentClildWidth;\n    }\n  }\n\n  private toChildrenLocation(): number {\n    let to = 0;\n    const childrenArr = this._children.toArray();\n    for (let i = 0; i < this.currIndex; i++) {\n      to += childrenArr[i]._elementRef.nativeElement.clientWidth;\n    }\n    return to;\n  }\n\n  private locateDragScrollItem(element: Element): DragScrollItemDirective | null {\n    let item: DragScrollItemDirective | null = null;\n    const childrenArr = this._children.toArray();\n    for (let i = 0; i < childrenArr.length; i++) {\n      if (element === childrenArr[i]._elementRef.nativeElement) {\n        item = childrenArr[i];\n      }\n    }\n    return item;\n  }\n\n  private markElDimension() {\n    if (this.wrapper) {\n      this.elWidth = this.wrapper.style.width;\n      this.elHeight = this.wrapper.style.height;\n    } else {\n      this.elWidth = this._elementRef.nativeElement.style.width || (this._elementRef.nativeElement.offsetWidth + 'px');\n      this.elHeight = this._elementRef.nativeElement.style.height || (this._elementRef.nativeElement.offsetHeight + 'px');\n    }\n    const container = this.wrapper || this.parentNode;\n    const containerWidth = container ? container.clientWidth : 0;\n    if (this._children.length > 1) {\n      this.indexBound = this.maximumIndex(containerWidth, this._children.toArray());\n    }\n  }\n\n  private maximumIndex(containerWidth: number, childrenElements: DragScrollItemDirective[]): number {\n    let count = 0;\n    let childrenWidth = 0;\n    for (let i = 0; i <= childrenElements.length; i++) {\n      // last N element\n      const dragScrollItemDirective: DragScrollItemDirective = childrenElements[childrenElements.length - 1 - i];\n      if (!dragScrollItemDirective) {\n        break;\n      } else {\n        const nativeElement = dragScrollItemDirective._elementRef.nativeElement;\n        let itemWidth = nativeElement.clientWidth;\n        if (itemWidth === 0 && nativeElement.firstElementChild) {\n          itemWidth = dragScrollItemDirective._elementRef.nativeElement.firstElementChild.clientWidth;\n        }\n        childrenWidth += itemWidth;\n        if (childrenWidth < containerWidth) {\n          count++;\n        } else {\n          break;\n        }\n      }\n    }\n    return childrenElements.length - count;\n  }\n\n  private isScrollReachesRightEnd(): boolean {\n    const scrollLeftPos = Math.abs(this._contentRef.nativeElement.scrollLeft) + this._contentRef.nativeElement.offsetWidth;\n    return scrollLeftPos >= this._contentRef.nativeElement.scrollWidth;\n  }\n\n  /**\n   * adds a margin right style to the last child element which will resolve the issue\n   * of last item gets cutoff.\n   */\n  private adjustMarginToLastChild(): void {\n    if (this._children && this._children.length > 0 && this.hideScrollbar) {\n      const childrenArr = this._children.toArray();\n      const lastItem = childrenArr[childrenArr.length - 1]._elementRef.nativeElement;\n      if (this.wrapper && childrenArr.length > 1) {\n        this._renderer.setStyle(lastItem, 'margin-right', this.scrollbarWidth);\n      } else {\n        this._renderer.setStyle(lastItem, 'margin-right', 0);\n      }\n    }\n  }\n}\n","import { NgModule } from '@angular/core';\n\nimport { DragScrollComponent } from './ngx-drag-scroll.component';\nimport { DragScrollItemDirective } from './ngx-drag-scroll-item';\n\n@NgModule({\n  exports: [\n    DragScrollComponent,\n    DragScrollItemDirective\n  ],\n  declarations: [\n    DragScrollComponent,\n    DragScrollItemDirective\n  ]\n})\nexport class DragScrollModule { }\n","/*\n * Public API Surface of ngx-drag-scroll\n */\n\nexport * from './lib/ngx-drag-scroll.module';\nexport * from './lib/ngx-drag-scroll.component';\nexport * from './lib/ngx-drag-scroll-item';\nexport * from './lib/interface/drag-scroll-element';\nexport * from './lib/interface/drag-scroll-option';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}