ngx-drag-scroll-mkg
Version:
Fork of lightweight drag to scroll library for Angular
1 lines • 54.8 kB
Source Map (JSON)
{"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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"}