{"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, inject, model, 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  public readonly options = model<NgSignaturePadOptions>({});\r\n  public readonly drawStart = output<MouseEvent | Touch>();\r\n  public readonly drawBeforeUpdate = output<MouseEvent | Touch>();\r\n  public readonly drawAfterUpdate = output<MouseEvent | Touch>();\r\n  public readonly drawEnd = output<MouseEvent | Touch>();\r\n  public readonly drawClear = output<void>();\r\n\r\n  private _elementRef = inject(ElementRef);\r\n  private signaturePad!: SignaturePad;\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    if (this.signaturePad) {\r\n      this.signaturePad.off();\r\n    }\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 options = this.options();\r\n    const baseWidth = options.canvasWidth\r\n      ? options.canvasWidth - 2\r\n      : this._getWidthFix(canvas);\r\n    const baseHeight = options.canvasHeight\r\n      ? 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    const optionsValue = this.options();\r\n    if (!options.hasOwnProperty('height') && optionsValue.canvasHeight) {\r\n      options.height = optionsValue.canvasHeight;\r\n    }\r\n    if (!options.hasOwnProperty('width') && optionsValue.canvasWidth) {\r\n      options.width = optionsValue.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.drawClear.emit();\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 as keyof NgSignaturePadOptions] === value) {\r\n        // Same value, no need to change and redraw\r\n        return;\r\n      }\r\n      // Update the signal so redrawCanvas will use the new value\r\n      this.options.update(o => ({...o, [option]: value}));\r\n      this.clear();\r\n    } else {\r\n      const pad = this.signaturePad as unknown as Record<string, any>;\r\n      if (pad[option] === value) {\r\n        // Same value, no need to change and redraw\r\n        return;\r\n      }\r\n      pad[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 (options.canvasHeight) {\r\n      canvas.height = options.canvasHeight - 2;\r\n    }\r\n    if (options.canvasWidth) {\r\n      canvas.width = options.canvasWidth - 2;\r\n    }\r\n    if (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: Event) => this.beginStroke((event as CustomEvent).detail));\r\n    this.signaturePad.addEventListener('beforeUpdateStroke', (event: Event) => this.beforeUpdateStroke((event as CustomEvent).detail));\r\n    this.signaturePad.addEventListener('afterUpdateStroke', (event: Event) => this.afterUpdateStroke((event as CustomEvent).detail));\r\n    this.signaturePad.addEventListener('endStroke', (event: Event) => this.endStroke((event as CustomEvent).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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"}