{"version":3,"file":"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/public-api.ts","../../../projects/ngx-drag-scroll/src/ngx-drag-scroll.ts"],"sourcesContent":["import {\n  Directive,\n  ElementRef,\n  HostBinding,\n  inject,\n  input\n} 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  dragDisabled = input<boolean>(false, { alias: 'drag-disabled' });\n\n  elementRef = inject(ElementRef);\n}\n","import {\n  AfterViewChecked,\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ContentChildren,\n  ElementRef,\n  HostBinding,\n  HostListener,\n  inject,\n  OnChanges,\n  OnDestroy,\n  QueryList,\n  Renderer2,\n  ViewChild,\n  input,\n  output\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    `\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  ],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DragScrollComponent\n  implements OnDestroy, AfterViewInit, OnChanges, AfterViewChecked\n{\n  private _index = 0;\n\n  private _isDragging = false;\n\n  private _onMouseMoveListener: () => void | null = null;\n\n  private _onMouseUpListener: () => void | null = null;\n\n  private _onMouseDownListener: () => void | null = null;\n\n  private _onScrollListener: () => void | null = null;\n\n  private _onDragStartListener: () => void | null = null;\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 })\n  _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() {\n    return this._index;\n  }\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  dsInitialized = output<void>();\n\n  indexChanged = output<number>();\n\n  reachesLeftBound = output<boolean>();\n\n  reachesRightBound = output<boolean>();\n\n  snapAnimationFinished = output<number>();\n\n  dragStart = output<void>();\n\n  dragEnd = output<void>();\n\n  /**\n   * Whether the scrollbar is hidden\n   */\n  scrollbarHidden = input<boolean>(false, { alias: 'scrollbar-hidden' });\n\n  /**\n   * Whether horizontally and vertically draging and scrolling is be disabled\n   */\n  disabled = input<boolean>(false, { alias: 'drag-scroll-disabled' });\n\n  /**\n   * Whether horizontally dragging and scrolling is be disabled\n   */\n  xDisabled = input<boolean>(false, { alias: 'drag-scroll-x-disabled' });\n\n  /**\n   * Whether vertically dragging and scrolling events is disabled\n   */\n  yDisabled = input<boolean>(false, { alias: 'drag-scroll-y-disabled' });\n\n  /**\n   * Whether scrolling horizontally with mouse wheel is enabled\n   */\n  xWheelEnabled = input<boolean>(false, { alias: 'scroll-x-wheel-enabled' });\n\n  dragDisabled = input<boolean>(false, { alias: 'drag-disabled' });\n\n  snapDisabled = input<boolean>(false, { alias: 'snap-disabled' });\n\n  snapOffset = input<number>(0, { alias: 'snap-offset' });\n\n  snapDuration = input<number>(500, { alias: 'snap-duration' });\n\n  private _elementRef = inject(ElementRef);\n  private _renderer = inject(Renderer2);\n  private _document = inject(DOCUMENT);\n\n  constructor() {\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(\n      this._contentRef.nativeElement,\n      'drag-scroll',\n      'true'\n    );\n\n    this.displayType =\n      typeof window !== 'undefined'\n        ? window.getComputedStyle(this._elementRef.nativeElement).display\n        : 'block';\n\n    this._renderer.setStyle(\n      this._contentRef.nativeElement,\n      'display',\n      this.displayType\n    );\n    this._renderer.setStyle(\n      this._contentRef.nativeElement,\n      'whiteSpace',\n      'noWrap'\n    );\n\n    // store ele width height for later user\n    this.markElDimension();\n\n    this._renderer.setStyle(\n      this._contentRef.nativeElement,\n      'width',\n      this.elWidth\n    );\n    this._renderer.setStyle(\n      this._contentRef.nativeElement,\n      'height',\n      this.elHeight\n    );\n\n    if (this.wrapper) {\n      this.checkScrollbar();\n    }\n\n    this._onMouseDownListener = this._renderer.listen(\n      this._contentRef.nativeElement,\n      'mousedown',\n      this.onMouseDownHandler.bind(this)\n    );\n    this._onScrollListener = this._renderer.listen(\n      this._contentRef.nativeElement,\n      'scroll',\n      this.onScrollHandler.bind(this)\n    );\n    // prevent Firefox from dragging images\n    this._onDragStartListener = this._renderer.listen(\n      this._contentRef.nativeElement,\n      'dragstart',\n      (e) => {\n        e.preventDefault();\n      }\n    );\n    this.checkNavStatus();\n    this.dsInitialized.emit();\n    this.adjustMarginToLastChild();\n\n    this.rtl =\n      getComputedStyle(this._contentRef.nativeElement).getPropertyValue(\n        'direction'\n      ) === '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(\n      this._contentRef.nativeElement,\n      'drag-scroll',\n      'false'\n    );\n    if (this._onMouseDownListener) {\n      this._onMouseDownListener();\n      this._onMouseDownListener = null;\n    }\n    if (this._onScrollListener) {\n      this._onScrollListener();\n      this._onScrollListener = null;\n    }\n    if (this._onDragStartListener) {\n      this._onDragStartListener();\n      this._onDragStartListener = null;\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      if (!event.buttons && !event.which) {\n        return this.onMouseUpHandler();\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 =\n      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() {\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(\n        this._contentRef.nativeElement,\n        this.toChildrenLocation(),\n        this.snapDuration()\n      );\n    }\n  }\n\n  moveRight() {\n    const container = this.wrapper || this.parentNode;\n    const containerWidth = container ? container.clientWidth : 0;\n\n    if (\n      !this.isScrollReachesRightEnd() &&\n      this.currIndex <\n        this.maximumIndex(containerWidth, this._children.toArray())\n    ) {\n      this.currIndex++;\n      clearTimeout(this.scrollToTimer as number);\n      this.scrollTo(\n        this._contentRef.nativeElement,\n        this.toChildrenLocation(),\n        this.snapDuration()\n      );\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 <=\n        this.maximumIndex(containerWidth, this._children.toArray())\n    ) {\n      this.currIndex = Math.min(\n        index,\n        this.maximumIndex(containerWidth, this._children.toArray())\n      );\n      clearTimeout(this.scrollToTimer as number);\n      this.scrollTo(\n        this._contentRef.nativeElement,\n        this.toChildrenLocation(),\n        this.snapDuration()\n      );\n    }\n  }\n\n  checkNavStatus() {\n    setTimeout(() => {\n      const onlyOneItem = Boolean(this._children.length <= 1);\n      const containerIsLargerThanContent = Boolean(\n        this._contentRef.nativeElement.scrollWidth <=\n        this._contentRef.nativeElement.clientWidth\n      );\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 (\n        this._contentRef.nativeElement.scrollLeft === 0 &&\n        this._contentRef.nativeElement.scrollWidth >\n          this._contentRef.nativeElement.clientWidth\n      ) {\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    if (value) {\n      this.dragStart.emit();\n    } else {\n      this.dragEnd.emit();\n    }\n  }\n\n  private _startGlobalListening(isTouchEvent: boolean) {\n    if (!this._onMouseMoveListener) {\n      const eventName = isTouchEvent ? 'touchmove' : 'mousemove';\n      this._onMouseMoveListener = this._renderer.listen(\n        'document',\n        eventName,\n        this.onMouseMoveHandler.bind(this)\n      );\n    }\n\n    if (!this._onMouseUpListener) {\n      const eventName = isTouchEvent ? 'touchend' : 'mouseup';\n      this._onMouseUpListener = this._renderer.listen(\n        'document',\n        eventName,\n        this.onMouseUpHandler.bind(this)\n      );\n    }\n  }\n\n  private stopGlobalListening() {\n    if (this._onMouseMoveListener) {\n      this._onMouseMoveListener();\n      this._onMouseMoveListener = null;\n    }\n\n    if (this._onMouseUpListener) {\n      this._onMouseUpListener();\n      this._onMouseUpListener = null;\n    }\n  }\n\n  private disableScroll(axis: string): void {\n    this._renderer.setStyle(\n      this._contentRef.nativeElement,\n      `overflow-${axis}`,\n      'hidden'\n    );\n  }\n\n  private enableScroll(axis: string): void {\n    this._renderer.setStyle(\n      this._contentRef.nativeElement,\n      `overflow-${axis}`,\n      'auto'\n    );\n  }\n\n  private hideScrollbar(): void {\n    if (\n      this._contentRef.nativeElement.style.display !== 'none' &&\n      !this.wrapper\n    ) {\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(\n        this._contentRef.nativeElement,\n        'width',\n        `calc(100% + ${this.scrollbarWidth})`\n      );\n      this._renderer.setStyle(\n        this._contentRef.nativeElement,\n        'height',\n        `calc(100% + ${this.scrollbarWidth})`\n      );\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(\n        this._contentRef.nativeElement,\n        'height',\n        this.wrapper.style.height\n      );\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 (\n      this._contentRef.nativeElement.scrollWidth <=\n      this._contentRef.nativeElement.clientWidth\n    ) {\n      this._renderer.setStyle(this._contentRef.nativeElement, 'height', '100%');\n    } else {\n      this._renderer.setStyle(\n        this._contentRef.nativeElement,\n        'height',\n        `calc(100% + ${this.scrollbarWidth})`\n      );\n    }\n    if (\n      this._contentRef.nativeElement.scrollHeight <=\n      this._contentRef.nativeElement.clientHeight\n    ) {\n      this._renderer.setStyle(this._contentRef.nativeElement, 'width', '100%');\n    } else {\n      this._renderer.setStyle(\n        this._contentRef.nativeElement,\n        'width',\n        `calc(100% + ${this.scrollbarWidth})`\n      );\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 (\n        this._elementRef.nativeElement.style.height > 0 ||\n        this._elementRef.nativeElement.offsetHeight > 0\n      ) {\n        this._renderer.setStyle(\n          this.wrapper,\n          'height',\n          this._elementRef.nativeElement.style.height ||\n            this._elementRef.nativeElement.offsetHeight + 'px'\n        );\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    this.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 (\n      t: number,\n      b: number,\n      c: number,\n      d: number\n    ) {\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 = () => {\n      currentTime += increment;\n      element.scrollLeft = easeInOutQuad(currentTime, start, change, duration);\n      if (currentTime < duration) {\n        this.scrollToTimer = setTimeout(animateScroll, increment);\n      } else {\n        // run one more frame to make sure the animation is fully finished\n        setTimeout(() => {\n          this.isAnimating = false;\n          this.snapAnimationFinished.emit(this.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(\n      (\n        currentChildWidth,\n        nextChildrenWidth,\n        childrenWidth,\n        idx: number,\n        stop\n      ) => {\n        if (scrollLeft >= childrenWidth && scrollLeft <= nextChildrenWidth) {\n          if (\n            nextChildrenWidth - scrollLeft > currentChildWidth / 2 &&\n            !this.isScrollReachesRightEnd()\n          ) {\n            // roll back scrolling\n            if (!this.isAnimating) {\n              this.currIndex = idx;\n            }\n            if (snap) {\n              this.scrollTo(\n                this._contentRef.nativeElement,\n                childrenWidth,\n                this.snapDuration()\n              );\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(\n                this._contentRef.nativeElement,\n                childrenWidth + currentChildWidth,\n                this.snapDuration()\n              );\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\n  private currentChildWidth(\n    cb: (\n      currentClildWidth: number,\n      nextChildrenWidth: number,\n      childrenWidth: number,\n      index: number,\n      breakFunc: () => void\n    ) => void\n  ) {\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 =\n        childrenWidth + childrenArr[i + 1].elementRef.nativeElement.clientWidth;\n      const currentClildWidth =\n        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(\n    element: Element\n  ): 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 =\n        this._elementRef.nativeElement.style.width ||\n        this._elementRef.nativeElement.offsetWidth + 'px';\n      this.elHeight =\n        this._elementRef.nativeElement.style.height ||\n        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(\n        containerWidth,\n        this._children.toArray()\n      );\n    }\n  }\n\n  private maximumIndex(\n    containerWidth: number,\n    childrenElements: DragScrollItemDirective[]\n  ): 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 =\n        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 =\n            dragScrollItemDirective.elementRef.nativeElement.firstElementChild\n              .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 =\n      Math.abs(this._contentRef.nativeElement.scrollLeft) +\n      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 =\n        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","/*\n * Public API Surface of ngx-drag-scroll\n */\n\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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"}