{"version":3,"file":"omnedia-ngx-map.mjs","sources":["../../../projects/ngx-map/src/lib/ngx-map.component.ts","../../../projects/ngx-map/src/lib/ngx-map.component.html","../../../projects/ngx-map/src/public-api.ts","../../../projects/ngx-map/src/omnedia-ngx-map.ts"],"sourcesContent":["import {\r\n  AfterViewInit,\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  ElementRef,\r\n  Inject,\r\n  Input,\r\n  OnDestroy,\r\n  PLATFORM_ID,\r\n  QueryList,\r\n  signal,\r\n  ViewChild,\r\n  ViewChildren,\r\n} from \"@angular/core\";\r\nimport {CommonModule, isPlatformBrowser} from \"@angular/common\";\r\nimport {DomSanitizer, SafeHtml} from \"@angular/platform-browser\";\r\nimport {Dot} from \"./ngx-map.types\";\r\n\r\n@Component({\r\n  selector: \"om-map\",\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n  templateUrl: \"./ngx-map.component.html\",\r\n  styleUrl: \"./ngx-map.component.scss\",\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgxMapComponent implements AfterViewInit, OnDestroy {\r\n  @ViewChild(\"OmMap\", {static: true})\r\n  container!: ElementRef<HTMLDivElement>;\r\n\r\n  @ViewChildren(\"animatedPath\") animatedPaths!: QueryList<\r\n    ElementRef<SVGPathElement>\r\n  >;\r\n\r\n  @ViewChildren(\"animatedPathAnimation\") animations!: QueryList<\r\n    ElementRef<SVGAnimationElement>\r\n  >;\r\n\r\n  @Input()\r\n  precomputedMap?: object | string;\r\n\r\n  @Input()\r\n  styleClass: string | undefined;\r\n\r\n  @Input(\"dots\")\r\n  set updateDots(dots: Dot[]) {\r\n    dots = dots.map((dot, index) => {\r\n      dot.animationStart = `${this.getRandomDelay()}; omMapPathAnimation${index}.end+${this.getRandomDelay()}`;\r\n      return dot;\r\n    });\r\n\r\n    this.dots.set(dots);\r\n  }\r\n\r\n  dots = signal<Dot[]>([]);\r\n\r\n  @Input()\r\n  lineColor: string = \"#0ea5e9\";\r\n\r\n  @Input(\"backgroundColor\")\r\n  set updateBackgroundColor(color: string) {\r\n    this.backgroundColor = color;\r\n    this.generateSvgMapDebounced();\r\n  }\r\n\r\n  backgroundColor?: string;\r\n\r\n  @Input(\"mapColor\")\r\n  set updateMapColor(color: string) {\r\n    this.mapColor = color;\r\n    this.generateSvgMapDebounced();\r\n  }\r\n\r\n  mapColor: string = \"rgba(0,0,0,0.40)\";\r\n\r\n  @Input(\"mapDotsShape\")\r\n  set updateMapDotsShape(shape: \"circle\" | \"hexagon\") {\r\n    this.mapDotsShape = shape;\r\n    this.generateSvgMapDebounced();\r\n  }\r\n\r\n  mapDotsShape: \"circle\" | \"hexagon\" = \"circle\";\r\n\r\n  @Input(\"mapDotsRadius\")\r\n  set updateMapDotsRadius(radius: number) {\r\n    this.mapDotsRadius = radius;\r\n    this.generateSvgMapDebounced();\r\n  }\r\n\r\n  mapDotsRadius = 0.22;\r\n\r\n  @Input()\r\n  animated: boolean = false;\r\n\r\n  svgMap = signal<SafeHtml>('');\r\n\r\n  private pathLengths: Map<number, number> = new Map();\r\n\r\n  private intersectionObserver?: IntersectionObserver;\r\n  private hasInitializedObserver = false;\r\n  isInView = signal(false);\r\n  private debounceTimer?: number;\r\n\r\n  constructor(\r\n    @Inject(PLATFORM_ID) private platformId: object,\r\n    private readonly sanitizer: DomSanitizer,\r\n  ) {\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    if (isPlatformBrowser(this.platformId) && !this.hasInitializedObserver) {\r\n      this.hasInitializedObserver = true;\r\n      this.intersectionObserver = new IntersectionObserver(([entry]) => {\r\n        const wasInView = this.isInView();\r\n        this.isInView.set(entry.isIntersecting);\r\n\r\n        if (this.isInView() && !wasInView) {\r\n          this.triggerAnimations();\r\n        }\r\n      });\r\n      this.intersectionObserver.observe(this.container.nativeElement);\r\n    }\r\n\r\n    this.generateSvgMapDebounced();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.intersectionObserver?.disconnect();\r\n  }\r\n\r\n  projectPoint(lat: number, lng: number) {\r\n    const x = (lng + 180) * (800 / 360);\r\n    const y = (90 - lat) * (400 / 180);\r\n    return {x, y};\r\n  }\r\n\r\n  createCurvedPath(\r\n    start: { x: number; y: number },\r\n    end: { x: number; y: number },\r\n  ) {\r\n    const midX = (start.x + end.x) / 2;\r\n    const midY = Math.min(start.y, end.y) - 50;\r\n    return `M ${start.x} ${start.y} Q ${midX} ${midY} ${end.x} ${end.y}`;\r\n  }\r\n\r\n  getPathLength(index: number): number {\r\n    if (!this.pathLengths.has(index)) {\r\n      const pathElement = this.animatedPaths?.toArray()[index]?.nativeElement;\r\n      if (pathElement) {\r\n        this.pathLengths.set(index, pathElement.getTotalLength());\r\n      }\r\n    }\r\n    return this.pathLengths.get(index)!;\r\n  }\r\n\r\n  getRandomDelay(): string {\r\n    return `${((Math.random() + 1) * 2).toFixed(2)}s`;\r\n  }\r\n\r\n  private async generateSvgMapDebounced() {\r\n    clearTimeout(this.debounceTimer);\r\n\r\n    if (this.precomputedMap) {\r\n      const DottedMap = (await import('./dotted-map-wrapper')).default;\r\n      const mapConfig = {\r\n        map:\r\n          typeof this.precomputedMap === 'string'\r\n            ? JSON.parse(this.precomputedMap)\r\n            : this.precomputedMap,\r\n        height: 100, grid: \"diagonal\",\r\n      };\r\n\r\n      const map = new DottedMap(mapConfig);\r\n      const rawSvg = map.getSVG({\r\n        radius: this.mapDotsRadius,\r\n        color: this.mapColor,\r\n        shape: this.mapDotsShape,\r\n        backgroundColor: this.backgroundColor,\r\n      });\r\n\r\n      this.svgMap.set(this.sanitizer.bypassSecurityTrustHtml(rawSvg));\r\n      return;\r\n    }\r\n\r\n    this.debounceTimer = window.setTimeout(() => this.generateSvgMap(), 250);\r\n  }\r\n\r\n  private generateSvgMap() {\r\n    if (typeof Worker === 'undefined') return; // fallback for SSR\r\n\r\n    const worker = new Worker(new URL('./map-generator.worker', import.meta.url), {type: 'module'});\r\n    worker.postMessage({\r\n      options: {\r\n        radius: this.mapDotsRadius,\r\n        color: this.mapColor,\r\n        shape: this.mapDotsShape,\r\n        backgroundColor: this.backgroundColor,\r\n      },\r\n    });\r\n\r\n    worker.onmessage = ({data}) => {\r\n      this.svgMap.set(this.sanitizer.bypassSecurityTrustHtml(data));\r\n      worker.terminate();\r\n    };\r\n  }\r\n\r\n  private triggerAnimations(): void {\r\n    this.animations.forEach((animation, index) => {\r\n      const element = animation.nativeElement;\r\n\r\n      element.setAttribute(\"fill\", \"remove\");\r\n      setTimeout(() => {\r\n        element.setAttribute(\"fill\", \"freeze\");\r\n        element.beginElement();\r\n      }, index * 500);\r\n    });\r\n  }\r\n}\r\n","<div class=\"om-map\" [ngClass]=\"styleClass\" #OmMap>\r\n  <div class=\"om-map-svg\" [innerHTML]=\"svgMap()\"></div>\r\n  <svg class=\"om-map-overlay\" viewBox=\"0 0 800 400\">\r\n    @for (dot of dots(); track $index) {\r\n      <g>\r\n        <path\r\n          #animatedPath\r\n          [attr.d]=\"createCurvedPath(projectPoint(dot.start.lat, dot.start.lng), projectPoint(dot.end.lat, dot.end.lng))\"\r\n          fill=\"none\"\r\n          [attr.stroke]=\"lineColor\"\r\n          stroke-width=\"1\"\r\n          [attr.stroke-dasharray]=\"getPathLength($index)\"\r\n          [attr.stroke-dashoffset]=\"getPathLength($index)\"\r\n        >\r\n          @if (animated && isInView()) {\r\n            <animate\r\n              [id]=\"'omMapPathAnimation' + $index\"\r\n              attributeName=\"stroke-dashoffset\"\r\n              [attr.from]=\"getPathLength($index)\"\r\n              [attr.to]=\"-1 * getPathLength($index)\"\r\n              dur=\"2s\"\r\n              [attr.begin]=\"dot.animationStart\"\r\n            />\r\n          }\r\n          @if (!animated && isInView()) {\r\n            <animate\r\n              #animatedPathAnimation\r\n              [id]=\"'omMapPathAnimation' + $index\"\r\n              attributeName=\"stroke-dashoffset\"\r\n              [attr.from]=\"getPathLength($index)\"\r\n              [attr.to]=\"0\"\r\n              dur=\"1s\"\r\n              [attr.begin]=\"0.5 * $index +'s'\"\r\n              fill=\"freeze\"\r\n            />\r\n          }\r\n        </path>\r\n      </g>\r\n      <g>\r\n        <circle\r\n          [attr.cx]=\"projectPoint(dot.start.lat, dot.start.lng).x\"\r\n          [attr.cy]=\"projectPoint(dot.start.lat, dot.start.lng).y\"\r\n          r=\"2\"\r\n          [attr.fill]=\"lineColor\"\r\n        />\r\n        <circle\r\n          [attr.cx]=\"projectPoint(dot.start.lat, dot.start.lng).x\"\r\n          [attr.cy]=\"projectPoint(dot.start.lat, dot.start.lng).y\"\r\n          r=\"2\"\r\n          [attr.fill]=\"lineColor\"\r\n          opacity=\"0.5\"\r\n        >\r\n          @if (isInView()) {\r\n            <animate attributeName=\"r\" from=\"2\" to=\"8\" dur=\"1.5s\" repeatCount=\"indefinite\"/>\r\n            <animate attributeName=\"opacity\" from=\"0.5\" to=\"0\" dur=\"1.5s\" repeatCount=\"indefinite\"/>\r\n          }\r\n        </circle>\r\n      </g>\r\n      <g>\r\n        <circle\r\n          [attr.cx]=\"projectPoint(dot.end.lat, dot.end.lng).x\"\r\n          [attr.cy]=\"projectPoint(dot.end.lat, dot.end.lng).y\"\r\n          r=\"2\"\r\n          [attr.fill]=\"lineColor\"\r\n        />\r\n        <circle\r\n          [attr.cx]=\"projectPoint(dot.end.lat, dot.end.lng).x\"\r\n          [attr.cy]=\"projectPoint(dot.end.lat, dot.end.lng).y\"\r\n          r=\"2\"\r\n          [attr.fill]=\"lineColor\"\r\n          opacity=\"0.5\"\r\n        >\r\n          @if (isInView()) {\r\n            <animate attributeName=\"r\" from=\"2\" to=\"8\" dur=\"1.5s\" repeatCount=\"indefinite\"/>\r\n            <animate attributeName=\"opacity\" from=\"0.5\" to=\"0\" dur=\"1.5s\" repeatCount=\"indefinite\"/>\r\n          }\r\n        </circle>\r\n      </g>\r\n    }\r\n  </svg>\r\n</div>\r\n","/*\r\n * Public API Surface of ngx-map\r\n */\r\n\r\nexport * from \"./lib/ngx-map.component\";\r\nexport * from \"./lib/ngx-map.types\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}