{"version":3,"file":"ngx-capture.mjs","sources":["../../../projects/ngx-capture/src/lib/ngx-capture.service.ts","../../../projects/ngx-capture/src/lib/ngx-capture.component.ts","../../../projects/ngx-capture/src/lib/ngx-capture.module.ts","../../../projects/ngx-capture/src/public-api.ts","../../../projects/ngx-capture/src/ngx-capture.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\r\nimport html2canvas from 'html2canvas';\r\nimport {from, Observable, of} from 'rxjs';\r\n\r\nexport interface CropDimensions {\r\n  x: number;\r\n  y: number;\r\n  width: number;\r\n  height: number;\r\n}\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class NgxCaptureService {\r\n  getImage(screen: HTMLElement, fullCapture?: boolean, cropDimensions?: CropDimensions): Observable<string> {\r\n    let options = {\r\n      logging: false,\r\n      useCORS: true,\r\n      scale: 1\r\n    };\r\n\r\n    if (!fullCapture && cropDimensions.width > 10 && cropDimensions.height > 10) {\r\n      options = {...options, ...cropDimensions};\r\n    } else if (!fullCapture) {\r\n      return of(null);\r\n    }\r\n\r\n    return from(\r\n      html2canvas(screen, options)\r\n        .then(\r\n          (canv) => {\r\n            return canv.toDataURL('image/png');\r\n          },\r\n          (err) => {\r\n            throw new Error(err);\r\n          }\r\n        )\r\n        .catch((res) => {\r\n          throw new Error(res);\r\n        })\r\n    );\r\n  }\r\n\r\n  downloadImage(img: string) {\r\n    const element = document.createElement('a');\r\n    element.setAttribute('href', img);\r\n    element.setAttribute('download', 'capture');\r\n    element.style.display = 'none';\r\n    document.body.appendChild(element);\r\n    element.click();\r\n    document.body.removeChild(element);\r\n  }\r\n}\r\n","import { Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { take, tap } from 'rxjs/operators';\r\nimport { CropDimensions, NgxCaptureService } from './ngx-capture.service';\r\n\r\ntype Point = {\r\n  x: number;\r\n  y: number;\r\n};\r\n\r\n@Component({\r\n  selector: 'ngx-capture',\r\n  template: `\r\n    <ng-content></ng-content>\r\n    <div class=\"overlay\" #over>\r\n      <div class=\"rectangle\" #rect></div>\r\n    </div>\r\n  `,\r\n  styleUrls: ['./ngx-capture.component.scss'],\r\n})\r\nexport class NgxCaptureComponent implements OnInit {\r\n  @ViewChild('rect', { static: true }) rectangle: ElementRef;\r\n  @ViewChild('over', { static: true }) overlay: ElementRef;\r\n\r\n  @Input() target: any;\r\n  @Output() resultImage = new EventEmitter<string>();\r\n\r\n  rect: HTMLElement;\r\n  captureZone: HTMLElement;\r\n\r\n  isDrawing = false;\r\n\r\n  mouseStart: Point = { x: 0, y: 0 };\r\n\r\n  cropDimensions: CropDimensions = {\r\n    x: 0,\r\n    y: 0,\r\n    width: 0,\r\n    height: 0,\r\n  };\r\n\r\n  destroy$ = new Subject<void>();\r\n\r\n  constructor(private captureService: NgxCaptureService) {}\r\n\r\n  ngOnInit() {\r\n    setTimeout(() => {\r\n      this.rect = this.rectangle.nativeElement;\r\n      this.captureZone = this.overlay.nativeElement;\r\n\r\n      if (!this.captureZone) {\r\n        console.warn('\"captureZone\" is not set');\r\n        return;\r\n      }\r\n\r\n      this.captureZone.onmousedown = (e) => this.startCapture(e);\r\n      this.captureZone.onmousemove = (e) => this.drawRect(e);\r\n      this.captureZone.onmouseup = () => this.endCapture();\r\n    }, 2000);\r\n  }\r\n\r\n  private startCapture(e: any) {\r\n    const mouse = this.setMousePosition(e, true);\r\n\r\n    this.isDrawing = true;\r\n\r\n    this.cropDimensions = {\r\n      x: mouse.x,\r\n      y: mouse.y,\r\n      width: 0,\r\n      height: 0,\r\n    };\r\n\r\n    this.captureZone.style.cursor = 'crosshair';\r\n  }\r\n\r\n  private drawRect(e: any) {\r\n    if (this.isDrawing) {\r\n      const mouse = this.setMousePosition(e, false);\r\n\r\n      this.cropDimensions = {\r\n        x: mouse.x - this.mouseStart.x < 0 ? mouse.x : this.mouseStart.x,\r\n        y: mouse.y - this.mouseStart.y < 0 ? mouse.y : this.mouseStart.y,\r\n        width: Math.abs(mouse.x - this.mouseStart.x),\r\n        height: Math.abs(mouse.y - this.mouseStart.y),\r\n      };\r\n      this.setRectangle();\r\n    }\r\n  }\r\n\r\n  private setMousePosition(e: any, isStart = false): Point {\r\n    const ev = e || window.event; // Moz || IE\r\n    const mouse: Point = { x: 0, y: 0 };\r\n\r\n    if (ev.pageX) {\r\n      // Moz\r\n      mouse.x = ev.clientX;\r\n      mouse.y = ev.clientY;\r\n    } else if (ev.clientX) {\r\n      // IE\r\n      mouse.x = ev.clientX + document.body.scrollLeft;\r\n      mouse.y = ev.clientY + document.body.scrollTop;\r\n    }\r\n\r\n    if (isStart) {\r\n      this.mouseStart.x = mouse.x;\r\n      this.mouseStart.y = mouse.y;\r\n    }\r\n\r\n    return mouse;\r\n  }\r\n\r\n  private endCapture() {\r\n    this.captureZone.style.cursor = 'default';\r\n    this.isDrawing = false;\r\n\r\n    this.captureService\r\n      .getImage(this.target, false, {\r\n        ...this.cropDimensions,\r\n        x: this.cropDimensions.x + window.scrollX,\r\n        y: this.cropDimensions.y + window.scrollY,\r\n      })\r\n      .pipe(\r\n        take(1),\r\n        tap((img) => {\r\n          this.resultImage.emit(img);\r\n        })\r\n      )\r\n      .subscribe();\r\n\r\n    this.cropDimensions = {\r\n      x: 0,\r\n      y: 0,\r\n      width: 0,\r\n      height: 0,\r\n    };\r\n    this.setRectangle();\r\n  }\r\n\r\n  private setRectangle() {\r\n    this.rect.style.left = this.cropDimensions.x + 'px';\r\n    this.rect.style.top = this.cropDimensions.y + 'px';\r\n    this.rect.style.width = this.cropDimensions.width + 'px';\r\n    this.rect.style.height = this.cropDimensions.height + 'px';\r\n  }\r\n}\r\n","import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\r\nimport { NgxCaptureComponent } from './ngx-capture.component';\r\n\r\n@NgModule({\r\n  declarations: [NgxCaptureComponent],\r\n  imports: [\r\n  ],\r\n  exports: [NgxCaptureComponent],\r\n  schemas: [CUSTOM_ELEMENTS_SCHEMA]\r\n})\r\nexport class NgxCaptureModule { }\r\n","/*\r\n * Public API Surface of ngx-capture\r\n */\r\n\r\nexport * from './lib/ngx-capture.service';\r\nexport * from './lib/ngx-capture.component';\r\nexport * from './lib/ngx-capture.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NgxCaptureService"],"mappings":"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"}