{"version":3,"file":"omnedia-ngx-particles.mjs","sources":["../../../projects/ngx-particles/src/lib/ngx-particles.component.ts","../../../projects/ngx-particles/src/lib/ngx-particles.component.html","../../../projects/ngx-particles/src/public-api.ts","../../../projects/ngx-particles/src/omnedia-ngx-particles.ts"],"sourcesContent":["import {CommonModule, isPlatformBrowser} from \"@angular/common\";\r\nimport {\r\n  AfterViewInit,\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  ElementRef,\r\n  HostListener,\r\n  Inject,\r\n  Input,\r\n  OnDestroy,\r\n  PLATFORM_ID,\r\n  signal,\r\n  ViewChild,\r\n} from \"@angular/core\";\r\nimport {Circle} from \"./ngx-particles.types\";\r\n\r\n@Component({\r\n  selector: \"om-particles\",\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n  templateUrl: \"./ngx-particles.component.html\",\r\n  styleUrl: \"./ngx-particles.component.scss\",\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgxParticlesComponent implements AfterViewInit, OnDestroy {\r\n  @ViewChild(\"OmParticlesCanvas\")\r\n  canvasRef!: ElementRef<HTMLCanvasElement>;\r\n\r\n  @ViewChild(\"OmParticlesWrapper\")\r\n  wrapperRef!: ElementRef<HTMLElement>;\r\n\r\n  @Input(\"quantity\")\r\n  quantity = 100;\r\n\r\n  @Input(\"size\")\r\n  size = 0.4;\r\n\r\n  @Input(\"circleColor\")\r\n  color = \"#9c9c9c\";\r\n\r\n  @Input(\"staticity\")\r\n  staticity = 50;\r\n\r\n  @Input(\"ease\")\r\n  ease = 50;\r\n\r\n  @Input(\"particleSpeed\")\r\n  particleSpeed = 1;\r\n\r\n  @Input(\"vx\")\r\n  vx = 0;\r\n\r\n  @Input(\"vy\")\r\n  vy = 0;\r\n\r\n  private mousePosition: { x: number; y: number } = {x: 0, y: 0};\r\n  private mouse: { x: number; y: number } = {x: 0, y: 0};\r\n\r\n  private circles: Circle[] = [];\r\n\r\n  @HostListener(\"mousemove\", [\"$event\"])\r\n  onClick(event: MouseEvent) {\r\n    this.mousePosition = {\r\n      x: event.clientX,\r\n      y: event.clientY,\r\n    };\r\n\r\n    this.onMouseMove();\r\n  }\r\n\r\n  private isInView = signal(false);\r\n  private isAnimating = signal(false);\r\n  private animationFrameId?: number;\r\n  private intersectionObserver?: IntersectionObserver;\r\n\r\n  constructor(\r\n    @Inject(PLATFORM_ID) private platformId: object\r\n  ) {\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.setCanvasSize();\r\n    this.animate();\r\n\r\n    if (isPlatformBrowser(this.platformId)) {\r\n      this.intersectionObserver = new IntersectionObserver(([entry]) => {\r\n        this.renderContents(entry.isIntersecting);\r\n      });\r\n      this.intersectionObserver.observe(this.canvasRef.nativeElement);\r\n    }\r\n\r\n    window.addEventListener(\"resize\", () => this.setCanvasSize());\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    window.removeEventListener(\"resize\", () => this.setCanvasSize());\r\n\r\n    if (this.intersectionObserver) {\r\n      this.intersectionObserver.disconnect();\r\n    }\r\n\r\n    if (this.animationFrameId) {\r\n      cancelAnimationFrame(this.animationFrameId);\r\n    }\r\n  }\r\n\r\n  renderContents(isIntersecting: boolean) {\r\n    if (isIntersecting && !this.isInView()) {\r\n      this.isInView.set(true);\r\n\r\n      if (!this.isAnimating()) {\r\n        this.animationFrameId = requestAnimationFrame(() => this.animate());\r\n      }\r\n    } else if (!isIntersecting) {\r\n      this.isInView.set(false);\r\n    }\r\n  }\r\n\r\n  private setCanvasSize(): void {\r\n    this.canvasRef.nativeElement.width =\r\n      this.wrapperRef.nativeElement.getBoundingClientRect().width;\r\n    this.canvasRef.nativeElement.height =\r\n      this.wrapperRef.nativeElement.getBoundingClientRect().height;\r\n\r\n    this.circles = [];\r\n    this.drawParticles();\r\n  }\r\n\r\n  private drawParticles(): void {\r\n    this.clearContext();\r\n\r\n    for (let i = 0; i < this.quantity; i++) {\r\n      const circle = this.circleParams();\r\n      this.drawCircle(circle);\r\n    }\r\n  }\r\n\r\n  private circleParams(): Circle {\r\n    const x = Math.floor(Math.random() * this.canvasRef.nativeElement.width);\r\n    const y = Math.floor(Math.random() * this.canvasRef.nativeElement.height);\r\n    const translateX = 0;\r\n    const translateY = 0;\r\n    const pSize = Math.floor(Math.random() * 2) + this.size;\r\n    const alpha = 0;\r\n    const targetAlpha = parseFloat((Math.random() * 0.6 + 0.1).toFixed(1));\r\n    const dx = (Math.random() - 0.5) * 0.1;\r\n    const dy = (Math.random() - 0.5) * 0.1;\r\n    const magnetism = 0.1 + Math.random() * 4;\r\n\r\n    return {\r\n      x,\r\n      y,\r\n      translateX,\r\n      translateY,\r\n      size: pSize,\r\n      alpha,\r\n      targetAlpha,\r\n      dx,\r\n      dy,\r\n      magnetism,\r\n    };\r\n  }\r\n\r\n  private drawCircle(circle: Circle, update = false): void {\r\n    const context = this.canvasRef.nativeElement.getContext(\"2d\");\r\n\r\n    if (!context) {\r\n      return;\r\n    }\r\n\r\n    const {x, y, translateX, translateY, size, alpha} = circle;\r\n    const rgb = this.hexToRgb(this.color);\r\n\r\n    context.translate(translateX, translateY);\r\n    context.beginPath();\r\n    context.arc(x, y, size, 0, 2 * Math.PI);\r\n    context.fillStyle = `rgba(${rgb.join(\", \")}, ${alpha})`;\r\n    context.fill();\r\n    context.setTransform(1, 0, 0, 1, 0, 0);\r\n\r\n    if (!update) {\r\n      this.circles.push(circle);\r\n    }\r\n  }\r\n\r\n  private animate(): void {\r\n    if (!this.isInView()) {\r\n      this.isAnimating.set(false);\r\n      return;\r\n    }\r\n\r\n    this.isAnimating.set(true);\r\n\r\n    this.clearContext();\r\n\r\n    this.circles.forEach((circle: Circle, i: number) => {\r\n      // Handle the alpha value\r\n      const edge = [\r\n        circle.x + circle.translateX - circle.size, // distance from left edge\r\n        this.canvasRef.nativeElement.width -\r\n        circle.x -\r\n        circle.translateX -\r\n        circle.size, // distance from right edge\r\n        circle.y + circle.translateY - circle.size, // distance from top edge\r\n        this.canvasRef.nativeElement.height -\r\n        circle.y -\r\n        circle.translateY -\r\n        circle.size, // distance from bottom edge\r\n      ];\r\n\r\n      const closestEdge = edge.reduce((a, b) => Math.min(a, b));\r\n      const remapClosestEdge = parseFloat(\r\n        this.remapValue(closestEdge, 0, 20, 0, 1).toFixed(2)\r\n      );\r\n\r\n      if (remapClosestEdge > 1) {\r\n        circle.alpha += 0.02;\r\n        if (circle.alpha > circle.targetAlpha) {\r\n          circle.alpha = circle.targetAlpha;\r\n        }\r\n      } else {\r\n        circle.alpha = circle.targetAlpha * remapClosestEdge;\r\n      }\r\n\r\n      circle.x += (circle.dx + this.vx) * this.particleSpeed;\r\n      circle.y += (circle.dy + this.vy) * this.particleSpeed;\r\n      circle.translateX +=\r\n        (this.mouse.x / (this.staticity / circle.magnetism) -\r\n          circle.translateX) /\r\n        this.ease;\r\n      circle.translateY +=\r\n        (this.mouse.y / (this.staticity / circle.magnetism) -\r\n          circle.translateY) /\r\n        this.ease;\r\n\r\n      this.drawCircle(circle, true);\r\n\r\n      // circle gets out of the canvas\r\n      if (\r\n        circle.x < -circle.size ||\r\n        circle.x > this.canvasRef.nativeElement.width + circle.size ||\r\n        circle.y < -circle.size ||\r\n        circle.y > this.canvasRef.nativeElement.height + circle.size\r\n      ) {\r\n        // remove the circle from the array\r\n        this.circles.splice(i, 1);\r\n        // create a new circle\r\n        const newCircle = this.circleParams();\r\n        this.drawCircle(newCircle);\r\n        // update the circle position\r\n      }\r\n    });\r\n\r\n    this.animationFrameId = requestAnimationFrame(() => this.animate());\r\n  }\r\n\r\n  private clearContext(): void {\r\n    const context = this.canvasRef.nativeElement.getContext(\"2d\");\r\n\r\n    if (!context) {\r\n      return;\r\n    }\r\n\r\n    context.clearRect(\r\n      0,\r\n      0,\r\n      this.canvasRef.nativeElement.width,\r\n      this.canvasRef.nativeElement.height\r\n    );\r\n  }\r\n\r\n  private onMouseMove(): void {\r\n    const rect = this.canvasRef.nativeElement.getBoundingClientRect();\r\n    const {w, h} = {\r\n      w: this.canvasRef.nativeElement.width,\r\n      h: this.canvasRef.nativeElement.height,\r\n    };\r\n\r\n    const x = this.mousePosition.x - rect.left - w / 2;\r\n    const y = this.mousePosition.y - rect.top - h / 2;\r\n\r\n    const inside = x < w / 2 && x > -w / 2 && y < h / 2 && y > -h / 2;\r\n\r\n    if (inside) {\r\n      this.mouse = {x: x, y: y};\r\n    }\r\n  }\r\n\r\n  private remapValue(\r\n    value: number,\r\n    start1: number,\r\n    end1: number,\r\n    start2: number,\r\n    end2: number\r\n  ): number {\r\n    const remapped =\r\n      ((value - start1) * (end2 - start2)) / (end1 - start1) + start2;\r\n\r\n    return remapped > 0 ? remapped : 0;\r\n  }\r\n\r\n  private hexToRgb(hex: string): number[] {\r\n    hex = hex.replace(\"#\", \"\");\r\n\r\n    if (hex.length === 3) {\r\n      hex = hex\r\n        .split(\"\")\r\n        .map((char) => char + char)\r\n        .join(\"\");\r\n    }\r\n\r\n    const hexInt = parseInt(hex, 16);\r\n    const red = (hexInt >> 16) & 255;\r\n    const green = (hexInt >> 8) & 255;\r\n    const blue = hexInt & 255;\r\n    return [red, green, blue];\r\n  }\r\n}\r\n","<div class=\"om-particles\" #OmParticlesWrapper>\r\n  <div class=\"om-particles-background\">\r\n    <canvas #OmParticlesCanvas></canvas>\r\n  </div>\r\n\r\n  <ng-content></ng-content>\r\n</div>\r\n","/*\r\n * Public API Surface of ngx-particles\r\n */\r\n\r\nexport * from \"./lib/ngx-particles.component\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}