{"version":3,"file":"almothafar-angular-signature-pad.mjs","sources":["../../projects/angular-signature-pad/src/lib/angular-signature-pad.component.ts","../../projects/angular-signature-pad/src/public-api.ts","../../projects/angular-signature-pad/src/almothafar-angular-signature-pad.ts"],"sourcesContent":["import {AfterContentInit, Component, ElementRef, EventEmitter, inject, Input, OnDestroy, Output} from '@angular/core';\r\nimport SignaturePad, {Options, PointGroup} from 'signature_pad';\r\n\r\nexport interface NgSignaturePadOptions extends Options {\r\n  canvasBackground?: string;\r\n  canvasHeight?: number;\r\n  canvasWidth?: number;\r\n}\r\n\r\n@Component({\r\n  template: '<canvas class=\"signature-pad-canvas\"></canvas>',\r\n  selector: 'signature-pad',\r\n  styleUrls: ['./angular-signature-pad.component.scss'],\r\n  standalone: true\r\n})\r\nexport class SignaturePadComponent implements AfterContentInit, OnDestroy {\r\n  @Input() public options: NgSignaturePadOptions;\r\n\r\n  @Output() public drawStart: EventEmitter<MouseEvent | Touch>;\r\n  @Output() public drawBeforeUpdate: EventEmitter<MouseEvent | Touch>;\r\n  @Output() public drawAfterUpdate: EventEmitter<MouseEvent | Touch>;\r\n  @Output() public drawEnd: EventEmitter<MouseEvent | Touch>;\r\n\r\n  private _elementRef = inject(ElementRef);\r\n  private signaturePad: SignaturePad;\r\n\r\n  constructor() {\r\n    this.options = this.options || {} as NgSignaturePadOptions;\r\n    this.drawStart = new EventEmitter<MouseEvent | Touch>();\r\n    this.drawBeforeUpdate = new EventEmitter<MouseEvent | Touch>();\r\n    this.drawAfterUpdate = new EventEmitter<MouseEvent | Touch>();\r\n    this.drawEnd = new EventEmitter<MouseEvent | Touch>();\r\n  }\r\n\r\n  public ngAfterContentInit(): void {\r\n    const canvas: HTMLCanvasElement = this.initCanvas(this.options);\r\n    this.initSignaturePad(canvas, this.options);\r\n    this.redrawCanvas();\r\n  }\r\n\r\n  public ngOnDestroy(): void {\r\n    const canvas: HTMLCanvasElement = this.getCanvas();\r\n    canvas.width = 0;\r\n    canvas.height = 0;\r\n  }\r\n\r\n  // noinspection JSUnusedGlobalSymbols\r\n  public getSignaturePad(): SignaturePad {\r\n    return this.signaturePad;\r\n  }\r\n\r\n  public getCanvas(): HTMLCanvasElement {\r\n    return this._elementRef.nativeElement.querySelector('canvas');\r\n  }\r\n\r\n  // noinspection JSUnusedGlobalSymbols\r\n  /**\r\n   * Redraw or Resize canvas, note this will clear data.\r\n   */\r\n  public redrawCanvas(): void {\r\n    const canvas: HTMLCanvasElement = this.getCanvas();\r\n    // when zoomed out to less than 100%, for some very strange reason,\r\n    // some browsers report devicePixelRatio as less than 1, and only part of the canvas is cleared then.\r\n    const ratio: number = Math.max(window.devicePixelRatio || 1, 1);\r\n\r\n    // Use explicit dimensions from options if provided, otherwise calculate from DOM\r\n    const baseWidth = this.options.canvasWidth\r\n      ? this.options.canvasWidth - 2\r\n      : this._getWidthFix(canvas);\r\n    const baseHeight = this.options.canvasHeight\r\n      ? this.options.canvasHeight - 2\r\n      : this._getHeightFix(canvas);\r\n\r\n    // Set internal canvas size (scaled for high DPI)\r\n    canvas.width = baseWidth * ratio;\r\n    canvas.height = baseHeight * ratio;\r\n\r\n    // Set CSS size to match the base dimensions (without ratio scaling)\r\n    canvas.style.width = baseWidth + 'px';\r\n    canvas.style.height = baseHeight + 'px';\r\n\r\n    canvas.getContext('2d').scale(ratio, ratio);\r\n    this.changeBackgroundColor(this.signaturePad.backgroundColor);\r\n  }\r\n\r\n  // noinspection JSUnusedGlobalSymbols\r\n  /**\r\n   * Change the color of the background dynamically.\r\n   */\r\n  public changeBackgroundColor(color: string): void {\r\n    this.signaturePad.backgroundColor = color;\r\n    const data = this.signaturePad.toData();\r\n    this.signaturePad.clear();\r\n    this.signaturePad.fromData(data);\r\n  }\r\n\r\n  // noinspection JSUnusedGlobalSymbols\r\n  /**\r\n   * Returns signature image as an array of point groups\r\n   */\r\n  public toData(): PointGroup[] {\r\n    if (this.signaturePad) {\r\n      return this.signaturePad.toData();\r\n    } else {\r\n      return [];\r\n    }\r\n  }\r\n\r\n  // noinspection JSUnusedGlobalSymbols\r\n  /**\r\n   * Draws signature image from an array of point groups\r\n   */\r\n  public fromData(points: Array<PointGroup>): void {\r\n    this.signaturePad.fromData(points);\r\n  }\r\n\r\n  // noinspection JSUnusedGlobalSymbols\r\n  /**\r\n   * Returns signature image as data URL (see https://mdn.io/todataurl for the list of possible parameters)\r\n   */\r\n  public toDataURL(imageType?: string, quality?: number): string {\r\n    return this.signaturePad.toDataURL(imageType, quality); // save image as data URL\r\n  }\r\n\r\n  // noinspection JSUnusedGlobalSymbols\r\n  /**\r\n   * Draws signature image from data URL\r\n   */\r\n  public fromDataURL(dataURL: string, options: { ratio?: number; width?: number; height?: number } = {}): Promise<void> {\r\n    // set default height and width on read data from URL\r\n    if (!options.hasOwnProperty('height') && this.options.canvasHeight) {\r\n      options.height = this.options.canvasHeight;\r\n    }\r\n    if (!options.hasOwnProperty('width') && this.options.canvasWidth) {\r\n      options.width = this.options.canvasWidth;\r\n    }\r\n    return this.signaturePad.fromDataURL(dataURL, options);\r\n  }\r\n\r\n  // noinspection JSUnusedGlobalSymbols\r\n  /**\r\n   * Clears the canvas\r\n   */\r\n  public clear(redraw: boolean = true): void {\r\n    if (redraw) {\r\n      this.signaturePad.clear();\r\n      this.redrawCanvas();\r\n    } else {\r\n      this.signaturePad.clear();\r\n    }\r\n    this.endStroke(null);\r\n  }\r\n\r\n  // noinspection JSUnusedGlobalSymbols\r\n  /**\r\n   * Returns true if canvas is empty, otherwise returns false\r\n   */\r\n  public isEmpty(): boolean {\r\n    return this.signaturePad.isEmpty();\r\n  }\r\n\r\n  // noinspection JSUnusedGlobalSymbols\r\n  /**\r\n   * Unbinds all event handlers\r\n   */\r\n  public off(): void {\r\n    this.signaturePad.off();\r\n  }\r\n\r\n  /**\r\n   * Rebinds all event handlers\r\n   */\r\n  public on(): void {\r\n    this.signaturePad.on();\r\n  }\r\n\r\n  /**\r\n   * set an option on the signaturePad - e.g. set('minWidth', 50);\r\n   * @param option one of SignaturePad to set with value, properties of NgSignaturePadOptions\r\n   * @param value the value of option\r\n   */\r\n  public set(option: string, value: any): void {\r\n    if (option === 'canvasHeight' || option === 'canvasWidth') {\r\n      // Check if the value is the same in options\r\n      if (this.options[option] === value) {\r\n        // Same value, no need to change and redraw\r\n        return;\r\n      }\r\n      // Update the options so redrawCanvas will use the new value\r\n      this.options[option] = value;\r\n      this.clear();\r\n    } else {\r\n      if (this.signaturePad[option] === value) {\r\n        // Same value, no need to change and redraw\r\n        return;\r\n      }\r\n      this.signaturePad[option] = value;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * notify subscribers on signature begin\r\n   */\r\n  public beginStroke(event: MouseEvent | Touch): void {\r\n    this.drawStart.emit(event);\r\n  }\r\n\r\n  public beforeUpdateStroke(event: MouseEvent | Touch): void {\r\n    this.drawBeforeUpdate.emit(event);\r\n  }\r\n\r\n  public afterUpdateStroke(event: MouseEvent | Touch): void {\r\n    this.drawAfterUpdate.emit(event);\r\n  }\r\n\r\n  /**\r\n   * notify subscribers on signature end\r\n   */\r\n  public endStroke(event: MouseEvent | Touch): void {\r\n    this.drawEnd.emit(event);\r\n  }\r\n\r\n  private initCanvas(options: NgSignaturePadOptions): HTMLCanvasElement {\r\n    const canvas: HTMLCanvasElement = this.getCanvas();\r\n    if (this.options.canvasHeight) {\r\n      canvas.height = options.canvasHeight - 2;\r\n    }\r\n    if (this.options.canvasWidth) {\r\n      canvas.width = options.canvasWidth - 2;\r\n    }\r\n    if (this.options.canvasBackground) {\r\n      canvas.style.background = options.canvasBackground;\r\n    }\r\n    return canvas;\r\n  }\r\n\r\n  private initSignaturePad(canvas: HTMLCanvasElement, options?: Options): void {\r\n    this.signaturePad = new SignaturePad(canvas, options);\r\n    this.signaturePad.addEventListener('beginStroke', (event: CustomEvent) => this.beginStroke(event.detail));\r\n    this.signaturePad.addEventListener('beforeUpdateStroke', (event: CustomEvent) => this.beforeUpdateStroke(event.detail));\r\n    this.signaturePad.addEventListener('afterUpdateStroke', (event: CustomEvent) => this.afterUpdateStroke(event.detail));\r\n    this.signaturePad.addEventListener('endStroke', (event: CustomEvent) => this.endStroke(event.detail));\r\n  }\r\n\r\n  /**\r\n   * To prevent the growing effect when the redrawCanvas is called for the width\r\n   * @param canvas\r\n   * @private\r\n   */\r\n  private _getWidthFix(canvas: HTMLCanvasElement) {\r\n    const computedStyle = getComputedStyle(canvas);\r\n\r\n    const extraPadding = parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight);\r\n    const extraBorder = parseFloat(computedStyle.borderLeftWidth) + parseFloat(computedStyle.borderRightWidth);\r\n    return canvas.offsetWidth - (extraPadding + extraBorder);\r\n  }\r\n\r\n  /**\r\n   * To prevent the growing effect when the redrawCanvas is called for the height\r\n   * @param canvas\r\n   * @private\r\n   */\r\n  private _getHeightFix(canvas: HTMLCanvasElement) {\r\n    const computedStyle = getComputedStyle(canvas);\r\n\r\n    const extraPadding = parseFloat(computedStyle.paddingTop) + parseFloat(computedStyle.paddingBottom);\r\n    const extraBorder = parseFloat(computedStyle.borderTopWidth) + parseFloat(computedStyle.borderBottomWidth);\r\n\r\n    return canvas.offsetHeight - (extraPadding + extraBorder);\r\n  }\r\n}\r\n","/*\n * Public API Surface of angular-signature-pad\n */\n\nexport * from './lib/angular-signature-pad.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}