{"version":3,"file":"ajf-core-signature.mjs","sources":["../../../projects/core/signature/src/canvas-to-png.ts","../../../projects/core/signature/src/signature.ts","../../../projects/core/signature/src/public_api.ts","../../../projects/core/signature/src/ajf-core-signature.ts"],"sourcesContent":["/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {deflate} from 'pako';\n\nconst PNG_SIGNATURE = [137, 80, 78, 71, 13, 10, 26, 10];\nconst CRC_TABLE = (() => {\n  const table = new Uint32Array(256);\n  for (let n = 0; n < 256; n++) {\n    let c = n;\n    for (let k = 0; k < 8; k++) {\n      c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n    }\n    table[n] = c;\n  }\n  return table;\n})();\n\nfunction crc32(bytes: Uint8Array): number {\n  let crc = 0xffffffff;\n  for (let i = 0; i < bytes.length; i++) {\n    crc = CRC_TABLE[(crc ^ bytes[i]) & 0xff] ^ (crc >>> 8);\n  }\n  return (crc ^ 0xffffffff) >>> 0;\n}\n\nfunction chunk(type: string, data: Uint8Array): Uint8Array {\n  const typeBytes = new Uint8Array(type.length);\n  for (let i = 0; i < type.length; i++) {\n    typeBytes[i] = type.charCodeAt(i);\n  }\n  const body = new Uint8Array(typeBytes.length + data.length);\n  body.set(typeBytes, 0);\n  body.set(data, typeBytes.length);\n\n  const out = new Uint8Array(4 + body.length + 4);\n  const view = new DataView(out.buffer);\n  view.setUint32(0, data.length);\n  out.set(body, 4);\n  view.setUint32(4 + body.length, crc32(body));\n  return out;\n}\n\n/**\n * Encodes an image made only of black pixels over a transparent background\n * (e.g. a signature drawn on a canvas) as a palette-indexed PNG.\n *\n * Since every pixel is either transparent or some shade of black\n * (anti-aliased strokes only vary the alpha channel), the palette never\n * needs more than 256 entries, so a color type 3 (indexed) PNG can be built\n * regardless of the image content. This is dramatically smaller than the\n * plain RGBA PNG produced by `canvas.toDataURL('image/png')`, which the\n * browser always encodes at 32 bits per pixel with no palette reduction.\n */\nexport function canvasToIndexedPngDataUrl(canvas: HTMLCanvasElement): string {\n  const width = canvas.width;\n  const height = canvas.height;\n  const ctx = canvas.getContext('2d')!;\n  const {data} = ctx.getImageData(0, 0, width, height);\n\n  const palette: number[] = []; // alpha value of each palette entry, index 0 is always alpha 0\n  const alphaToIndex = new Map<number, number>();\n  alphaToIndex.set(0, 0);\n  palette.push(0);\n\n  const indices = new Uint8Array(width * height);\n  for (let p = 0; p < indices.length; p++) {\n    const alpha = data[p * 4 + 3];\n    let index = alphaToIndex.get(alpha);\n    if (index == null) {\n      if (palette.length >= 256) {\n        // extremely unlikely for a black-on-transparent signature; fall back\n        // to the closest already-registered alpha level rather than failing.\n        index = 0;\n        let closestDiff = Infinity;\n        for (const [a, i] of alphaToIndex) {\n          const diff = Math.abs(a - alpha);\n          if (diff < closestDiff) {\n            closestDiff = diff;\n            index = i;\n          }\n        }\n      } else {\n        index = palette.length;\n        palette.push(alpha);\n        alphaToIndex.set(alpha, index);\n      }\n    }\n    indices[p] = index;\n  }\n\n  const plte = new Uint8Array(palette.length * 3); // all entries are black, only alpha (tRNS) varies\n  const trns = new Uint8Array(palette.length);\n  for (let i = 0; i < palette.length; i++) {\n    trns[i] = palette[i];\n  }\n\n  const bitDepth = palette.length <= 2 ? 1 : palette.length <= 16 ? 4 : 8;\n  const rowBytes = Math.ceil((width * bitDepth) / 8);\n  const raw = new Uint8Array((rowBytes + 1) * height);\n  let offset = 0;\n  for (let y = 0; y < height; y++) {\n    raw[offset++] = 0; // no filter\n    if (bitDepth === 8) {\n      for (let x = 0; x < width; x++) {\n        raw[offset++] = indices[y * width + x];\n      }\n    } else {\n      const pixelsPerByte = 8 / bitDepth;\n      for (let x = 0; x < width; x += pixelsPerByte) {\n        let byte = 0;\n        for (let b = 0; b < pixelsPerByte; b++) {\n          const px = x + b;\n          const value = px < width ? indices[y * width + px] : 0;\n          byte |= value << (8 - bitDepth * (b + 1));\n        }\n        raw[offset++] = byte;\n      }\n    }\n  }\n\n  const idatData = deflate(raw);\n\n  const ihdr = new Uint8Array(13);\n  const ihdrView = new DataView(ihdr.buffer);\n  ihdrView.setUint32(0, width);\n  ihdrView.setUint32(4, height);\n  ihdr[8] = bitDepth;\n  ihdr[9] = 3; // color type: indexed\n  ihdr[10] = 0; // compression\n  ihdr[11] = 0; // filter\n  ihdr[12] = 0; // interlace\n\n  const chunks = [\n    new Uint8Array(PNG_SIGNATURE),\n    chunk('IHDR', ihdr),\n    chunk('PLTE', plte),\n    chunk('tRNS', trns),\n    chunk('IDAT', idatData),\n    chunk('IEND', new Uint8Array(0)),\n  ];\n\n  const totalLength = chunks.reduce((sum, c) => sum + c.length, 0);\n  const png = new Uint8Array(totalLength);\n  let pos = 0;\n  for (const c of chunks) {\n    png.set(c, pos);\n    pos += c.length;\n  }\n\n  let binary = '';\n  for (let i = 0; i < png.length; i++) {\n    binary += String.fromCharCode(png[i]);\n  }\n  return `data:image/png;base64,${btoa(binary)}`;\n}\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {ChangeDetectorRef, Directive, HostListener, Renderer2, ViewChild} from '@angular/core';\nimport {ControlValueAccessor} from '@angular/forms';\nimport {AjfFile} from '@ajf/core/file-input';\n\n@Directive()\nexport abstract class AjfSignature implements ControlValueAccessor {\n  @ViewChild('sigPad') sigPad: any;\n  sigPadElement: HTMLCanvasElement | null = null;\n  context: CanvasRenderingContext2D | null = null;\n  isDrawing = false;\n  isDrawn = false;\n  /**\n   * implements the control form value.\n   * represents the signature value.\n   *\n   * @memberof AjfSignature\n   */\n  private _signatureValue: AjfFile | null = null;\n  get value(): AjfFile | null {\n    return this._signatureValue;\n  }\n  set value(value: AjfFile | null) {\n    if (this._signatureValue !== value) {\n      this._signatureValue = value;\n      this._cdr.detectChanges();\n      this._onChangeCallback(value);\n    }\n  }\n\n  private _onChangeCallback = (_: any) => {};\n  private _onTouchedCallback = () => {};\n\n  constructor(protected _cdr: ChangeDetectorRef, private _renderer: Renderer2) {}\n\n  @HostListener('document:mouseup', ['$event'])\n  @HostListener('document:touchend', ['$event'])\n  onMouseUp(_e: Event) {\n    this.isDrawing = false;\n  }\n\n  onMouseDown(e: Event) {\n    this.isDrawing = true;\n    const coords = this.relativeCoords(e);\n    if (this.context != null && coords) {\n      this.context.moveTo(coords.x, coords.y);\n    }\n  }\n\n  onMouseMove(e: Event) {\n    e.preventDefault();\n    e.stopPropagation();\n    if (this.isDrawing) {\n      const coords = this.relativeCoords(e);\n      if (this.context != null && coords) {\n        this.context.lineTo(coords.x, coords.y);\n        this.context.stroke();\n      }\n      this.isDrawn = true;\n    }\n  }\n\n  /** ControlValueAccessor implements */\n  writeValue(value: AjfFile | null) {\n    this._signatureValue = value;\n  }\n\n  registerOnChange(fn: (value: any) => void): void {\n    this._onChangeCallback = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this._onTouchedCallback = fn;\n  }\n\n  private relativeCoords(event: any) {\n    if (event.target != null) {\n      const evtType: string = event.type;\n      const bounds = event.target.getBoundingClientRect();\n      const x =\n        (evtType.includes('touch') ? event.touches[0].clientX : event.clientX) - bounds.left;\n      const y = (evtType.includes('touch') ? event.touches[0].clientY : event.clientY) - bounds.top;\n      return {x: x, y: y};\n    }\n    return null;\n  }\n}\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nexport * from './canvas-to-png';\nexport * from './signature';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}