{"version":3,"file":"ngx-zone-signature-pad.mjs","sources":["../../../projects/signature-pad/src/lib/signature-pad.component.ts","../../../projects/signature-pad/src/lib/signature-pad.component.html","../../../projects/signature-pad/src/public-api.ts","../../../projects/signature-pad/src/ngx-zone-signature-pad.ts"],"sourcesContent":["import {\r\n  Component,\r\n  ElementRef,\r\n  Input,\r\n  OnInit,\r\n  OnDestroy,\r\n  ViewChild,\r\n  AfterViewInit\r\n} from '@angular/core';\r\n\r\ninterface Point {\r\n  x: number;\r\n  y: number;\r\n  pressure: number;\r\n}\r\n\r\ntype Stroke = Point[];\r\n\r\n@Component({\r\n  selector: 'ngx-signature-pad',\r\n  templateUrl: './signature-pad.component.html',\r\n  styleUrls: ['./signature-pad.component.scss'],\r\n  standalone: true\r\n})\r\nexport class SignaturePadComponent implements OnInit, AfterViewInit, OnDestroy {\r\n  @ViewChild('canvas', { static: false }) canvasRef!: ElementRef<HTMLCanvasElement>;\r\n\r\n  // Drawing configuration\r\n  @Input() penColor: string = '#000';\r\n  @Input() backgroundColor: string = 'transparent';\r\n  @Input() minWidth: number = 0.5;\r\n  @Input() maxWidth: number = 2.5;\r\n  @Input() penSize: number = 10;\r\n  @Input() smoothing: boolean = true;\r\n  @Input() showUndoButton: boolean = true;\r\n  @Input() showClearButton: boolean = true;\r\n  @Input() height: number = 400;\r\n\r\n  // Theme/Color configuration (optional - uses CSS variables if not provided)\r\n  @Input() canvasBackgroundColor?: string;\r\n  @Input() buttonBackgroundColor?: string;\r\n  @Input() buttonTextColor?: string;\r\n  @Input() buttonBorderColor?: string;\r\n  @Input() buttonHoverColor?: string;\r\n  @Input() buttonDisabledColor?: string;\r\n  @Input() buttonFocusColor?: string;\r\n  @Input() iconColor?: string;\r\n\r\n  private ctx: CanvasRenderingContext2D | null = null;\r\n  private drawing: boolean = false;\r\n  private strokes: Stroke[] = [];\r\n  private currentStroke: Point[] = [];\r\n  private lastSize = { width: 0, height: 0 };\r\n  private resizeTimeout: any = null;\r\n  private resizeObserver: ResizeObserver | null = null;\r\n  private eventListeners: Array<() => void> = [];\r\n\r\n  isEmpty: boolean = true;\r\n\r\n  ngOnInit(): void {}\r\n\r\n  ngAfterViewInit(): void {\r\n    this.initCanvas();\r\n    this.setupEventListeners();\r\n    this.setupResizeObserver();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.cleanup();\r\n  }\r\n\r\n  private initCanvas(): void {\r\n    this.resizeCanvas();\r\n  }\r\n\r\n  private setupEventListeners(): void {\r\n    const canvas = this.canvasRef.nativeElement;\r\n\r\n    const handlePointerDown = (e: PointerEvent) => {\r\n      e.preventDefault();\r\n      this.drawing = true;\r\n      const pt = this.getPointFromEvent(e);\r\n      this.currentStroke = [pt];\r\n      this.isEmpty = false;\r\n    };\r\n\r\n    const handlePointerMove = (e: PointerEvent) => {\r\n      if (!this.drawing) return;\r\n      const pt = this.getPointFromEvent(e);\r\n      this.currentStroke.push(pt);\r\n      this.redraw();\r\n      if (this.ctx) {\r\n        this.drawStroke(this.ctx, this.currentStroke);\r\n      }\r\n    };\r\n\r\n    const handlePointerUp = () => {\r\n      if (!this.drawing) return;\r\n      this.drawing = false;\r\n      this.strokes = [...this.strokes, [...this.currentStroke]];\r\n      this.currentStroke = [];\r\n    };\r\n\r\n    canvas.addEventListener('pointerdown', handlePointerDown);\r\n    canvas.addEventListener('pointermove', handlePointerMove);\r\n    window.addEventListener('pointerup', handlePointerUp);\r\n\r\n    this.eventListeners.push(() => {\r\n      canvas.removeEventListener('pointerdown', handlePointerDown);\r\n      canvas.removeEventListener('pointermove', handlePointerMove);\r\n      window.removeEventListener('pointerup', handlePointerUp);\r\n    });\r\n  }\r\n\r\n  private setupResizeObserver(): void {\r\n    const canvas = this.canvasRef.nativeElement;\r\n    const wrapper = canvas.parentElement;\r\n    const container = wrapper?.parentElement;\r\n\r\n    if (!container) return;\r\n\r\n    this.resizeObserver = new ResizeObserver((entries) => {\r\n      if (this.drawing) return;\r\n\r\n      for (const entry of entries) {\r\n        const newWidth = Math.round(entry.contentRect.width);\r\n\r\n        // Only resize if width actually changed and is valid\r\n        if (newWidth !== this.lastSize.width && newWidth > 0) {\r\n          clearTimeout(this.resizeTimeout);\r\n          this.resizeTimeout = setTimeout(() => this.resizeCanvas(), 100);\r\n          break;\r\n        }\r\n      }\r\n    });\r\n\r\n    // Observe the container, not the wrapper with padding\r\n    this.resizeObserver.observe(container);\r\n  }\r\n\r\n  private resizeCanvas(): void {\r\n    const canvas = this.canvasRef.nativeElement;\r\n    if (!canvas || this.drawing) return;\r\n\r\n    const ratio = window.devicePixelRatio || 1;\r\n    const wrapper = canvas.parentElement;\r\n    if (!wrapper) return;\r\n\r\n    // Use clientWidth and account for padding to get actual available space\r\n    const computedStyle = window.getComputedStyle(wrapper);\r\n    const paddingLeft = parseFloat(computedStyle.paddingLeft) || 0;\r\n    const paddingRight = parseFloat(computedStyle.paddingRight) || 0;\r\n    const newWidth = Math.round(wrapper.clientWidth - paddingLeft - paddingRight);\r\n    const newHeight = this.height;\r\n\r\n    // Prevent resize if size is invalid\r\n    if (newWidth <= 0 || newHeight <= 0) return;\r\n\r\n    const oldSize = this.lastSize;\r\n    if (oldSize.width === newWidth && oldSize.height === newHeight) return;\r\n\r\n    const scaled = this.scaleStrokes(this.strokes, oldSize, { width: newWidth, height: newHeight });\r\n    this.strokes = scaled;\r\n\r\n    canvas.width = newWidth * ratio;\r\n    canvas.height = newHeight * ratio;\r\n    canvas.style.width = `${newWidth}px`;\r\n    canvas.style.height = `${newHeight}px`;\r\n\r\n    const ctx = canvas.getContext('2d');\r\n    if (ctx) {\r\n      ctx.setTransform(1, 0, 0, 1, 0, 0);\r\n      ctx.scale(ratio, ratio);\r\n      this.ctx = ctx;\r\n    }\r\n\r\n    this.lastSize = { width: newWidth, height: newHeight };\r\n    this.redraw();\r\n  }\r\n\r\n  private scaleStrokes(sList: Stroke[], oldSize: { width: number; height: number }, newSize: { width: number; height: number }): Stroke[] {\r\n    if (!oldSize.width || !oldSize.height) return sList;\r\n    const xRatio = newSize.width / oldSize.width;\r\n    const yRatio = newSize.height / oldSize.height;\r\n    return sList.map((stroke) =>\r\n      stroke.map((p) => ({ ...p, x: p.x * xRatio, y: p.y * yRatio }))\r\n    );\r\n  }\r\n\r\n  private drawStroke(ctx: CanvasRenderingContext2D, stroke: Stroke): void {\r\n    if (!stroke || stroke.length === 0) return;\r\n    ctx.save();\r\n    ctx.strokeStyle = this.penColor;\r\n    ctx.lineCap = 'round';\r\n    ctx.lineJoin = 'round';\r\n    ctx.beginPath();\r\n\r\n    for (let i = 0; i < stroke.length; i++) {\r\n      const p = stroke[i];\r\n      const width = Math.max(this.minWidth, Math.min(this.maxWidth, (p.pressure || 0.5) * this.penSize));\r\n      ctx.lineWidth = width;\r\n\r\n      if (i === 0) {\r\n        ctx.moveTo(p.x, p.y);\r\n      } else if (this.smoothing && i > 1) {\r\n        const prev = stroke[i - 1];\r\n        const midX = (prev.x + p.x) / 2;\r\n        const midY = (prev.y + p.y) / 2;\r\n        ctx.quadraticCurveTo(prev.x, prev.y, midX, midY);\r\n      } else {\r\n        ctx.lineTo(p.x, p.y);\r\n      }\r\n    }\r\n\r\n    ctx.stroke();\r\n    ctx.restore();\r\n  }\r\n\r\n  private redraw(): void {\r\n    const canvas = this.canvasRef.nativeElement;\r\n    const ctx = this.ctx;\r\n    if (!canvas || !ctx) return;\r\n\r\n    ctx.clearRect(0, 0, this.lastSize.width, this.lastSize.height);\r\n\r\n    if (this.backgroundColor) {\r\n      ctx.save();\r\n      ctx.setTransform(1, 0, 0, 1, 0, 0);\r\n      ctx.fillStyle = this.backgroundColor;\r\n      ctx.fillRect(0, 0, canvas.width, canvas.height);\r\n      ctx.restore();\r\n    }\r\n\r\n    for (let stroke of this.strokes) {\r\n      this.drawStroke(ctx, stroke);\r\n    }\r\n  }\r\n\r\n  private getPointFromEvent(e: PointerEvent): Point {\r\n    const rect = this.canvasRef.nativeElement.getBoundingClientRect();\r\n    const pressure = e.pressure || 0.5;\r\n    return { x: e.clientX - rect.left, y: e.clientY - rect.top, pressure };\r\n  }\r\n\r\n  undo(): void {\r\n    this.strokes = this.strokes.slice(0, -1);\r\n    if (this.strokes.length === 0) {\r\n      this.isEmpty = true;\r\n    }\r\n    this.redraw();\r\n  }\r\n\r\n  clear(): void {\r\n    this.strokes = [];\r\n    this.isEmpty = true;\r\n    this.redraw();\r\n  }\r\n\r\n  savePNG(): void {\r\n    const canvas = this.canvasRef.nativeElement;\r\n    const dataUrl = canvas.toDataURL('image/png');\r\n    const a = document.createElement('a');\r\n    a.href = dataUrl;\r\n    a.download = 'signature.png';\r\n    a.click();\r\n  }\r\n\r\n  getSignatureDataURL(): string {\r\n    return this.canvasRef.nativeElement.toDataURL('image/png');\r\n  }\r\n\r\n  getSignatureBlob(): Promise<Blob | null> {\r\n    return new Promise((resolve) => {\r\n      this.canvasRef.nativeElement.toBlob((blob) => {\r\n        resolve(blob);\r\n      }, 'image/png');\r\n    });\r\n  }\r\n\r\n  private cleanup(): void {\r\n    clearTimeout(this.resizeTimeout);\r\n    if (this.resizeObserver) {\r\n      this.resizeObserver.disconnect();\r\n    }\r\n    this.eventListeners.forEach(cleanup => cleanup());\r\n    this.eventListeners = [];\r\n  }\r\n}\r\n","<div class=\"signature-pad-container\">\r\n  <!-- Canvas Container -->\r\n  <div class=\"canvas-wrapper\">\r\n    <canvas\r\n      #canvas\r\n      class=\"signature-canvas\"\r\n      [style.touchAction]=\"'none'\"\r\n      [style.backgroundColor]=\"canvasBackgroundColor || null\">\r\n    </canvas>\r\n  </div>\r\n\r\n  <!-- Control Buttons (Optional) -->\r\n  @if (showUndoButton || showClearButton) {\r\n    <div class=\"controls-wrapper\">\r\n      @if (showUndoButton) {\r\n        <button\r\n          (click)=\"undo()\"\r\n          [disabled]=\"isEmpty\"\r\n          class=\"control-btn\"\r\n          type=\"button\"\r\n          [style.backgroundColor]=\"buttonBackgroundColor || null\"\r\n          [style.color]=\"buttonTextColor || null\"\r\n          [style.borderColor]=\"buttonBorderColor || null\">\r\n          <svg\r\n            xmlns=\"http://www.w3.org/2000/svg\"\r\n            width=\"16\"\r\n            height=\"16\"\r\n            viewBox=\"0 0 24 24\"\r\n            fill=\"none\"\r\n            stroke=\"currentColor\"\r\n            stroke-width=\"2\"\r\n            stroke-linecap=\"round\"\r\n            stroke-linejoin=\"round\"\r\n            [style.color]=\"iconColor || null\">\r\n            <polyline points=\"9 14 4 9 9 4\"></polyline>\r\n            <path d=\"M20 20v-7a4 4 0 0 0-4-4H4\"></path>\r\n          </svg>\r\n          Undo\r\n        </button>\r\n      }\r\n      @if (showClearButton) {\r\n        <button\r\n          (click)=\"clear()\"\r\n          [disabled]=\"isEmpty\"\r\n          class=\"control-btn\"\r\n          type=\"button\"\r\n          [style.backgroundColor]=\"buttonBackgroundColor || null\"\r\n          [style.color]=\"buttonTextColor || null\"\r\n          [style.borderColor]=\"buttonBorderColor || null\">\r\n          <svg\r\n            xmlns=\"http://www.w3.org/2000/svg\"\r\n            width=\"16\"\r\n            height=\"16\"\r\n            viewBox=\"0 0 24 24\"\r\n            fill=\"none\"\r\n            stroke=\"currentColor\"\r\n            stroke-width=\"2\"\r\n            stroke-linecap=\"round\"\r\n            stroke-linejoin=\"round\"\r\n            [style.color]=\"iconColor || null\">\r\n            <polyline points=\"3 6 5 6 21 6\"></polyline>\r\n            <path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"></path>\r\n          </svg>\r\n          Clear\r\n        </button>\r\n      }\r\n    </div>\r\n  }\r\n</div>\r\n","/*\r\n * Public API Surface of signature-pad\r\n */\r\n\r\nexport * from './lib/signature-pad.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}