UNPKG

ngx-drag-scroll-mkg

Version:

Fork of lightweight drag to scroll library for Angular

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