{"version":3,"file":"azerafati-ngx-scroll-drag.mjs","sources":["../../../projects/ngx-scroll-drag/src/lib/inertia.class.ts","../../../projects/ngx-scroll-drag/src/lib/scroll-drag.directive.ts","../../../projects/ngx-scroll-drag/src/lib/scroll-shadow/scroll-shadow.component.ts","../../../projects/ngx-scroll-drag/src/lib/scroll-shadow/scroll-shadow.component.html","../../../projects/ngx-scroll-drag/src/lib/ngx-scroll-drag.module.ts","../../../projects/ngx-scroll-drag/src/public-api.ts","../../../projects/ngx-scroll-drag/src/azerafati-ngx-scroll-drag.ts"],"sourcesContent":["import { ScrollDragDirective } from \"./scroll-drag.directive\";\n\nconst INERTIAL_MOVE_DIVIDER = 15;\n\nexport interface Coords {\n  x: number;\n  y: number;\n}\n\nexport class Inertia {\n  private impulseY = 0;\n  private totalImpulseEnergy = 0;\n  private inertialMoveDivider = INERTIAL_MOVE_DIVIDER;\n  private mouseWayPoints: Coords[] = [];\n  private readonly maxPointsToCheckSpeed = 3;\n\n  constructor(private scrollDragDirective: ScrollDragDirective) {\n  }\n\n  public addMouseWayPoints(x: number, y: number): Inertia {\n    if (this.mouseWayPoints.push({x, y}) > this.maxPointsToCheckSpeed) {\n      this.mouseWayPoints.shift();\n    }\n\n    return this;\n  }\n\n\n  public stopInertion(): Inertia {\n    this.totalImpulseEnergy = 0;\n    return this;\n  }\n\n  public startInertialMove(x: number, y: number): void {\n    const totalDist = this.mouseWayPoints.reduce(function (prev, curr) {\n      prev += curr.y;\n      return prev;\n    }, 0);\n\n    this.impulseY = totalDist / this.mouseWayPoints.length - y;\n\n    this.totalImpulseEnergy = Math.abs(this.impulseY);\n\n    this.clearWayPoints();\n    if (this.totalImpulseEnergy > 10) {\n      this.inertialDisplacement();\n    }\n  }\n\n  private clearWayPoints(): Inertia {\n    this.mouseWayPoints.length = 0;\n    return this;\n  }\n\n  private inertialDisplacement(): void {\n\n    if (this.totalImpulseEnergy <= 0) {\n      this.inertialMoveDivider = INERTIAL_MOVE_DIVIDER;\n      return;\n    }\n\n    const scrollOffset = this.impulseY;\n\n    this.scrollDragDirective.scroll(scrollOffset);\n\n    setTimeout(() => {\n      this.totalImpulseEnergy -= Math.abs(scrollOffset / this.inertialMoveDivider);\n      this.inertialDisplacement();\n    }, 1000 / 60);\n  }\n}\n","import {\n  AfterViewInit,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  Renderer2\n} from '@angular/core'\nimport { Subject, Subscription, throttleTime } from \"rxjs\"\nimport { Inertia } from \"./inertia.class\"\n\nenum Direction {\n  Top = 'top',\n  Bottom = 'bottom',\n  Right = 'right',\n  Left = 'left'\n}\n\nexport type ShadowDir = { [key in Direction]: boolean }\n\n@Directive({\n    selector: '[ngxScrollDrag]',\n    host: {\n        '[style.user-select]': '\"none\"',\n        '[style.overflow-scrolling]': '\"touch\"',\n    },\n    standalone: false\n})\nexport class ScrollDragDirective implements OnInit, AfterViewInit, OnDestroy {\n\n  @Input()\n  scrollDirection: 'Horizontal' | 'Vertical' = 'Vertical'\n\n  @Input()\n  scrollShadow = false\n\n  @Output()\n  shadowChange = new EventEmitter<{ direction: Direction, isShown: boolean }>()\n\n  @Input()\n  backgroundColor = 'white'\n\n  @Input()\n  disableDrag = false\n\n  shadow: ShadowDir = {\n    [Direction.Top]: false,\n    [Direction.Bottom]: false,\n    [Direction.Right]: false,\n    [Direction.Left]: false,\n  }\n\n  private dateScrollChange$ = new Subject<void>()\n  private dateScrollChangeSubscription?: Subscription\n  private inertia!: Inertia\n  private scrollDragSnap = 0\n  private startDragY?: number\n  private startDragX?: number\n  private isPressed = false\n  private readonly element: HTMLElement\n\n  constructor(\n    private elemRef: ElementRef,\n    private renderer: Renderer2,\n  ) {\n    this.element = this.elemRef.nativeElement\n  }\n\n  @Input('ngxScrollDrag')\n  set ngxScrollDrag(value: number | string | undefined) {\n    this.scrollDragSnap = Number(value || 0)\n  }\n\n  ngAfterViewInit(): void {\n    this.inertia = new Inertia(this)\n  }\n\n  @HostListener(\"mousedown\", [\"$event\"])\n  startDrag(ev: MouseEvent): void {\n    if (this.disableDrag) return\n\n    if (this.scrollDirection === 'Vertical') {\n      this.startDragY = ev.clientY + this.element.scrollTop\n    } else {\n      this.startDragX = ev.clientX + this.element.scrollLeft\n    }\n    this.isPressed = true\n    this.inertia.stopInertion()\n  }\n\n  @HostListener(\"mousemove\", [\"$event\"])\n  drag(ev: MouseEvent): void {\n    if (this.disableDrag) return\n\n    this.isPressed = ev.buttons === 1\n    if (this.isPressed) {\n      if (this.scrollDirection === 'Vertical') {\n        this.element.scrollTop = (this.startDragY ? this.startDragY - ev.clientY : 0)\n      } else {\n        this.element.scrollLeft = (this.startDragX ? this.startDragX - ev.clientX : 0)\n      }\n      this.inertia.addMouseWayPoints(ev.clientX, ev.clientY)\n    }\n  }\n\n  @HostListener(\"mouseleave\", [\"$event\"])\n  leave(ev: MouseEvent): void {\n    if (this.disableDrag) return\n\n    if (this.isPressed) {\n      this.inertia.startInertialMove(ev.clientX, ev.clientY)\n    }\n    this.onScroll()\n  }\n\n  @HostListener(\"mouseup\", [\"$event\"])\n  stopDrag(ev: MouseEvent): void {\n    if (this.disableDrag) return\n\n    if (this.isPressed) {\n      this.isPressed = false\n      this.inertia.startInertialMove(ev.clientX, ev.clientY)\n    }\n    this.onScroll()\n  }\n\n  @HostListener(\"wheel\", [\"$event\"])\n  @HostListener(\"scroll\", [\"$event\"])\n  onScroll(): void {\n    this.dateScrollChange$.next()\n  }\n\n  ngOnInit(): void {\n    this.dateScrollChangeSubscription = this.dateScrollChange$.pipe(\n      throttleTime(100, undefined, {leading: true, trailing: true}\n      )).subscribe(() => {\n        if (!this.isPressed && this.scrollDragSnap) {\n          const scrollTop = Math.round(this.element.scrollTop / this.scrollDragSnap) * this.scrollDragSnap\n          this.element.scrollTo({top: scrollTop, behavior: 'smooth'})\n        }\n        this.setBoxShadowClass()\n        if (this.scrollShadow) {\n          this.setBackgroundShadow(this.element)\n        } else {\n          this.renderer.setStyle(this.element, 'background', null)\n        }\n      }\n    )\n    this.onScroll()\n  }\n\n  scroll(scrollOffset: number): void {\n    const draggedElm = this.element\n    if (this.scrollDirection === 'Vertical') {\n      draggedElm.scrollTop = draggedElm.scrollTop + scrollOffset\n    } else {\n      draggedElm.scrollLeft = draggedElm.scrollLeft + scrollOffset\n    }\n    this.onScroll()\n  }\n\n  ngOnDestroy(): void {\n    this.dateScrollChangeSubscription?.unsubscribe()\n  }\n\n  private setBoxShadowClass(): void {\n    const edgeZoneSize = 5\n\n    if (this.scrollDirection === \"Vertical\") {\n      this.switchClass(this.element.scrollTop + this.element.clientHeight < this.element.scrollHeight - edgeZoneSize, Direction.Bottom)\n      this.switchClass(this.element.scrollTop > edgeZoneSize, Direction.Top)\n    } else {\n      this.switchClass(Math.abs(this.element.scrollLeft) > edgeZoneSize, Direction.Left)\n      // in RTL chrome desktop gets scrollLeft as a negative number unlike chrome mobile\n      this.switchClass(Math.abs(this.element.scrollLeft) + this.element.clientWidth < Math.abs(this.element.scrollWidth - edgeZoneSize), Direction.Right)\n    }\n\n    this.renderer.addClass(this.element, 'ngx-scroll-drag-shadow')\n\n  }\n\n  private switchClass(condition: boolean, direction: Direction): void {\n    const shadowClass = 'ngx-scroll-drag-shadow-' + direction\n    this.shadow[direction] = condition\n    this.renderer[condition ? 'addClass' : 'removeClass'](this.element, shadowClass)\n  }\n\n  private setBackgroundShadow(elm: HTMLElement): void {\n    const shadowSize = '0.75em'\n    const backgroundColor = this.backgroundColor\n    const shadowColor = 'rgba(34,34,34, 0.5)'\n    const transparent = 'rgba(255, 255, 255, 0)'\n    if (this.scrollDirection === 'Vertical') {\n      this.renderer.setStyle(elm, 'background', `\n        linear-gradient( ${backgroundColor} 30%, ${transparent} ) center top,\n        linear-gradient( ${transparent}, ${backgroundColor} 70% ) center bottom,\n        radial-gradient(farthest-side at 50% 0, ${shadowColor}, ${transparent}) center top,\n        radial-gradient(farthest-side at 50% 100%, ${shadowColor}, ${transparent}) center bottom\n    `)\n      this.renderer.setStyle(elm, 'background-size', `100% calc(${shadowSize} * 4), 100% calc(${shadowSize} * 4), 100% ${shadowSize}, 100% ${shadowSize}`)\n    } else {\n      this.renderer.setStyle(elm, 'background', `\n        linear-gradient(to right, ${backgroundColor}, ${backgroundColor}, ${transparent} calc(${shadowSize} * 2)),\n        linear-gradient(to left, ${backgroundColor}, ${backgroundColor}, ${transparent} calc(${shadowSize} * 2)),\n        radial-gradient(farthest-side at 0 50%, ${shadowColor}, ${transparent}),\n        radial-gradient(farthest-side at 100% 50%, ${shadowColor}, ${transparent}) 100%\n    `)\n      this.renderer.setStyle(elm, 'background-size', `100% 100%, 100% 100%, ${shadowSize} 100%, ${shadowSize} 100%`)\n    }\n\n    this.renderer.setStyle(elm, 'background-repeat', 'no-repeat')\n    this.renderer.setStyle(elm, 'background-color', this.backgroundColor)\n    this.renderer.setStyle(elm, 'background-attachment', 'local, local, scroll, scroll')\n  }\n\n}\n\n","import { AfterContentInit, Component, ContentChild } from '@angular/core'\nimport { ScrollDragDirective, ShadowDir } from \"../scroll-drag.directive\"\n\n@Component({\n    selector: 'ngx-scroll-shadow',\n    templateUrl: './scroll-shadow.component.html',\n    styleUrls: ['./scroll-shadow.component.scss'],\n    standalone: false\n})\nexport class ScrollShadowComponent implements AfterContentInit {\n\n  @ContentChild(ScrollDragDirective)\n  scrollDragDirective?: ScrollDragDirective\n\n  shadow: ShadowDir | undefined\n\n  constructor() {\n  }\n\n  ngAfterContentInit(): void {\n    this.shadow = this.scrollDragDirective?.shadow\n  }\n\n}\n","<ng-content></ng-content>\n<div class=\"shadow-top\" [class.hide-shadow]=\"!shadow?.top\"></div>\n<div class=\"shadow-bottom\" [class.hide-shadow]=\"!shadow?.bottom\"></div>\n<div class=\"shadow-right\" [class.hide-shadow]=\"!shadow?.right\"></div>\n<div class=\"shadow-left\" [class.hide-shadow]=\"!shadow?.left\"></div>\n","import {NgModule} from '@angular/core'\nimport {ScrollDragDirective} from './scroll-drag.directive'\nimport {ScrollShadowComponent} from './scroll-shadow/scroll-shadow.component'\nimport {NgIf} from \"@angular/common\"\n\n@NgModule({\n  declarations: [ScrollDragDirective, ScrollShadowComponent],\n  imports: [NgIf],\n  exports: [ScrollDragDirective, ScrollShadowComponent]\n})\nexport class NgxScrollDragModule {\n}\n","/*\n * Public API Surface of ngx-scroll-drag\n */\n\nexport * from './lib/ngx-scroll-drag.module';\nexport * from './lib/scroll-drag.directive';\nexport * from './lib/scroll-shadow/scroll-shadow.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}