UNPKG

@tots/ngx-drag-scroll

Version:

Lightweight drag to scroll library for Angular

1 lines 54 kB
{"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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