{"version":3,"file":"ngx-scanner-qrcode.mjs","sources":["../../../projects/ngx-scanner-qrcode/src/lib/ngx-scanner-qrcode.options.ts","../../../projects/ngx-scanner-qrcode/src/lib/ngx-scanner-qrcode.default.ts","../../../projects/ngx-scanner-qrcode/src/lib/ngx-scanner-qrcode.helper.ts","../../../projects/ngx-scanner-qrcode/src/lib/ngx-scanner-qrcode.service.ts","../../../projects/ngx-scanner-qrcode/src/lib/ngx-scanner-qrcode.loader.ts","../../../projects/ngx-scanner-qrcode/src/lib/ngx-scanner-qrcode.component.ts","../../../projects/ngx-scanner-qrcode/src/public-api.ts","../../../projects/ngx-scanner-qrcode/src/ngx-scanner-qrcode.ts"],"sourcesContent":["export interface ScannerQRCodeConfig {\n  src?: string;\n  fps?: number;\n  vibrate?: number; /** support mobile */\n  decode?: string;\n  unScan?: boolean;\n  isBeep?: boolean;\n  isMasked?: boolean;\n  loadWasmUrl?: string;\n  symbolType?: ScannerQRCodeSymbolType[];\n  constraints?: MediaStreamConstraints;\n  canvasStyles?: CanvasRenderingContext2D[] | any[];\n}\n\nexport interface ScannerQRCodeSelectedFiles {\n  url: string;\n  name: string;\n  file: File;\n  data?: ScannerQRCodeResult[];\n  canvas?: HTMLCanvasElement;\n}\n\nexport interface ScannerQRCodeDevice {\n  kind: string;\n  label: string;\n  groupId: string;\n  deviceId: string;\n}\n\nexport interface ScannerQRCodePoint {\n  x: number;\n  y: number;\n}\n\nexport enum ScannerQRCodeSymbolType {\n  ScannerQRCode_NONE = 0,   /**< no symbol decoded */\n  ScannerQRCode_PARTIAL = 1,   /**< intermediate status */\n  ScannerQRCode_EAN2 = 2,   /**< GS1 2-digit add-on */\n  ScannerQRCode_EAN5 = 5,   /**< GS1 5-digit add-on */\n  ScannerQRCode_EAN8 = 8,   /**< EAN-8 */\n  ScannerQRCode_UPCE = 9,   /**< UPC-E */\n  ScannerQRCode_ISBN10 = 10,  /**< ISBN-10 (from EAN-13). @since 0.4 */\n  ScannerQRCode_UPCA = 12,  /**< UPC-A */\n  ScannerQRCode_EAN13 = 13,  /**< EAN-13 */\n  ScannerQRCode_ISBN13 = 14,  /**< ISBN-13 (from EAN-13). @since 0.4 */\n  ScannerQRCode_COMPOSITE = 15,  /**< EAN/UPC composite */\n  ScannerQRCode_I25 = 25,  /**< Interleaved 2 of 5. @since 0.4 */\n  ScannerQRCode_DATABAR = 34,  /**< GS1 DataBar (RSS). @since 0.11 */\n  ScannerQRCode_DATABAR_EXP = 35,  /**< GS1 DataBar Expanded. @since 0.11 */\n  ScannerQRCode_CODABAR = 38,  /**< Codabar. @since 0.11 */\n  ScannerQRCode_CODE39 = 39,  /**< Code 39. @since 0.4 */\n  ScannerQRCode_PDF417 = 57,  /**< PDF417. @since 0.6 */\n  ScannerQRCode_QRCODE = 64,  /**< QR Code. @since 0.10 */\n  ScannerQRCode_SQCODE = 80,  /**< SQ Code. @since 0.20.1 */\n  ScannerQRCode_CODE93 = 93,  /**< Code 93. @since 0.11 */\n  ScannerQRCode_CODE128 = 128, /**< Code 128 */\n\n  /*\n   * Please see _ScannerQRCode_get_symbol_hash() if adding\n   * anything after 128\n   */\n\n  /** mask for base symbol type.\n   * @deprecated in 0.11, remove this from existing code\n   */\n  ScannerQRCode_SYMBOL = 0x00ff,\n  /** 2-digit add-on flag.\n   * @deprecated in 0.11, a ::ScannerQRCode_EAN2 component is used for\n   * 2-digit GS1 add-ons\n   */\n  ScannerQRCode_ADDON2 = 0x0200,\n  /** 5-digit add-on flag.\n   * @deprecated in 0.11, a ::ScannerQRCode_EAN5 component is used for\n   * 5-digit GS1 add-ons\n   */\n  ScannerQRCode_ADDON5 = 0x0500,\n  /** add-on flag mask.\n   * @deprecated in 0.11, GS1 add-ons are represented using composite\n   * symbols of type ::ScannerQRCode_COMPOSITE; add-on components use ::ScannerQRCode_EAN2\n   * or ::ScannerQRCode_EAN5\n   */\n  ScannerQRCode_ADDON = 0x0700,\n}\n\nexport enum ScannerQRCodeConfigType {\n  ScannerQRCode_CFG_ENABLE = 0,            /**< enable symbology/feature */\n  ScannerQRCode_CFG_ADD_CHECK,        /**< enable check digit when optional */\n  ScannerQRCode_CFG_EMIT_CHECK,       /**< return check digit when present */\n  ScannerQRCode_CFG_ASCII,            /**< enable full ASCII character set */\n  ScannerQRCode_CFG_BINARY,           /**< don't convert binary data to text */\n  ScannerQRCode_CFG_NUM,              /**< number of boolean decoder configs */\n\n  ScannerQRCode_CFG_MIN_LEN = 0x20,        /**< minimum data length for valid decode */\n  ScannerQRCode_CFG_MAX_LEN,        /**< maximum data length for valid decode */\n\n  ScannerQRCode_CFG_UNCERTAINTY = 0x40,    /**< required video consistency frames */\n\n  ScannerQRCode_CFG_POSITION = 0x80,       /**< enable scanner to collect position data */\n  ScannerQRCode_CFG_TEST_INVERTED,  /**< if fails to decode, test inverted */\n\n  ScannerQRCode_CFG_X_DENSITY = 0x100,     /**< image scanner vertical scan density */\n  ScannerQRCode_CFG_Y_DENSITY,     /**< image scanner horizontal scan density */\n}\n\nexport enum ScannerQRCodeOrientation {\n  ScannerQRCode_ORIENT_UNKNOWN = -1,       /**< unable to determine orientation */\n  ScannerQRCode_ORIENT_UP,            /**< upright, read left to right */\n  ScannerQRCode_ORIENT_RIGHT,         /**< sideways, read top to bottom */\n  ScannerQRCode_ORIENT_DOWN,          /**< upside-down, read right to left */\n  ScannerQRCode_ORIENT_LEFT,          /**< sideways, read bottom to top */\n}\n\nclass ScannerQRCodeTypePointer {\n  protected ptr: number;\n  protected ptr32: number;\n  protected buf: ArrayBuffer;\n  protected HEAP8: Int8Array;\n  protected HEAP32: Int32Array;\n  protected HEAPU32: Uint32Array;\n\n  constructor(ptr: number, buf: ArrayBuffer) {\n    this.ptr = ptr;\n    this.ptr32 = ptr >> 2;\n    this.buf = buf;\n    this.HEAP8 = new Int8Array(buf);\n    this.HEAPU32 = new Uint32Array(buf);\n    this.HEAP32 = new Int32Array(buf);\n  }\n}\n\nclass ScannerQRCodeSymbolPtr extends ScannerQRCodeTypePointer {\n  get type(): ScannerQRCodeSymbolType {\n    return this.HEAPU32[this.ptr32] as ScannerQRCodeSymbolType;\n  }\n\n  get data(): Int8Array {\n    const len = this.HEAPU32[this.ptr32 + 4];\n    const ptr = this.HEAPU32[this.ptr32 + 5];\n    return Int8Array.from(this.HEAP8.subarray(ptr, ptr + len));\n  }\n\n  get points(): Array<ScannerQRCodePoint> {\n    const len = this.HEAPU32[this.ptr32 + 7];\n    const ptr = this.HEAPU32[this.ptr32 + 8];\n    const ptr32 = ptr >> 2;\n    const res: ScannerQRCodePoint[] = [];\n    for (let i = 0; i < len; ++i) {\n      const x = this.HEAP32[ptr32 + i * 2];\n      const y = this.HEAP32[ptr32 + i * 2 + 1];\n      res.push({ x, y } as ScannerQRCodePoint);\n    }\n    return res;\n  }\n\n  get orientation(): ScannerQRCodeOrientation {\n    return this.HEAP32[this.ptr32 + 9];\n  }\n\n  get next(): ScannerQRCodeSymbolPtr | null {\n    const ptr = this.HEAPU32[this.ptr32 + 11];\n    if (!ptr) return null;\n    return new ScannerQRCodeSymbolPtr(ptr, this.buf);\n  }\n\n  get time(): number {\n    return this.HEAPU32[this.ptr32 + 13];\n  }\n\n  get cacheCount(): number {\n    return this.HEAP32[this.ptr32 + 14];\n  }\n\n  get quality(): number {\n    return this.HEAP32[this.ptr32 + 15];\n  }\n}\n\nclass SymbolSetPtr extends ScannerQRCodeTypePointer {\n  get head(): ScannerQRCodeSymbolPtr | null {\n    const ptr = this.HEAPU32[this.ptr32 + 2];\n    if (!ptr) return null;\n    return new ScannerQRCodeSymbolPtr(ptr, this.buf);\n  }\n}\n\nexport class ScannerQRCodeResult {\n  type: ScannerQRCodeSymbolType;\n  typeName: string;\n  data: Int8Array;\n  points: Array<ScannerQRCodePoint>;\n  orientation: ScannerQRCodeOrientation;\n  time: number;\n  cacheCount: number;\n  quality: number;\n  value: string = '';\n\n  private constructor(ptr: ScannerQRCodeSymbolPtr) {\n    this.type = ptr.type;\n    this.typeName = ScannerQRCodeSymbolType[this.type];\n    this.data = ptr.data;\n    this.points = ptr.points;\n    this.orientation = ptr.orientation;\n    this.time = ptr.time;\n    this.cacheCount = ptr.cacheCount;\n    this.quality = ptr.quality;\n  }\n\n  static createSymbolsFromPtr(ptr: number, buf: ArrayBuffer): Array<ScannerQRCodeResult> {\n    if (ptr == 0) return [];\n\n    const set = new SymbolSetPtr(ptr, buf);\n    let symbol = set.head;\n    const res: ScannerQRCodeResult[] = [];\n    while (symbol !== null) {\n      res.push(new ScannerQRCodeResult(symbol));\n      symbol = symbol.next;\n    }\n    return res;\n  }\n\n  decode(encoding?: string) {\n    const decoder = new TextDecoder(encoding);\n    return decoder.decode(this.data);\n  }\n}","import { ScannerQRCodeConfig, ScannerQRCodeSymbolType } from \"./ngx-scanner-qrcode.options\";\r\n\r\nexport const WASMPROJECT = \"assets/wasm/index.js\";\r\nexport const WASMREMOTE = \"https://cdn.jsdelivr.net/npm/ngx-scanner-qrcode@1.7.6/wasm/index.js\";\r\nexport const WASMREMOTELATEST = \"https://cdn.jsdelivr.net/npm/ngx-scanner-qrcode@latest/wasm/index.js\";\r\n\r\nexport const BEEP = `data:audio/mpeg;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5LjEwMAAAAAAAAAAAAAAA/+M4wAAAAAAAAAAAAEluZm8AAAAPAAAABQAAAkAAgICAgICAgICAgICAgICAgICAgKCgoKCgoKCgoKCgoKCgoKCgoKCgwMDAwMDAwMDAwMDAwMDAwMDAwMDg4ODg4ODg4ODg4ODg4ODg4ODg4P//////////////////////////AAAAAExhdmM1OC41NAAAAAAAAAAAAAAAACQEUQAAAAAAAAJAk0uXRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+MYxAANQAbGeUEQAAHZYZ3fASqD4P5TKBgocg+Bw/8+CAYBA4XB9/4EBAEP4nB9+UOf/6gfUCAIKyjgQ/Kf//wfswAAAwQA/+MYxAYOqrbdkZGQAMA7DJLCsQxNOij///////////+tv///3RWiZGBEhsf/FO/+LoCSFs1dFVS/g8f/4Mhv0nhqAieHleLy/+MYxAYOOrbMAY2gABf/////////////////usPJ66R0wI4boY9/8jQYg//g2SPx1M0N3Z0kVJLIs///Uw4aMyvHJJYmPBYG/+MYxAgPMALBucAQAoGgaBoFQVBUFQWDv6gZBUFQVBUGgaBr5YSgqCoKhIGg7+IQVBUFQVBoGga//SsFSoKnf/iVTEFNRTMu/+MYxAYAAANIAAAAADEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV`;\r\n\r\nexport const MEDIA_STREAM_DEFAULT: MediaStreamConstraints = {\r\n  audio: false,\r\n  video: true\r\n};\r\n\r\nexport const CANVAS_STYLES_LAYER: CanvasRenderingContext2D | any = {\r\n  lineWidth: 1,\r\n  strokeStyle: 'green',\r\n  fillStyle: '#55f02880'\r\n}\r\n\r\nexport const CANVAS_STYLES_TEXT: CanvasRenderingContext2D | any = {\r\n  font: '15px serif',\r\n  strokeStyle: '#fff0',\r\n  fillStyle: '#ff0000'\r\n}\r\n\r\nexport const CONFIG_DEFAULT: ScannerQRCodeConfig = {\r\n  src: '',\r\n  fps: 30,\r\n  vibrate: 300,\r\n  decode: 'utf-8',\r\n  unScan: false,\r\n  isBeep: true,\r\n  isMasked: true,\r\n  loadWasmUrl: '',\r\n  symbolType: [ScannerQRCodeSymbolType.ScannerQRCode_NONE],\r\n  constraints: MEDIA_STREAM_DEFAULT,\r\n  canvasStyles: [CANVAS_STYLES_LAYER, CANVAS_STYLES_TEXT]\r\n};","import { AsyncSubject } from \"rxjs\";\nimport { BEEP, CANVAS_STYLES_LAYER, CANVAS_STYLES_TEXT, CONFIG_DEFAULT } from \"./ngx-scanner-qrcode.default\";\nimport { ScannerQRCodeConfig, ScannerQRCodeSelectedFiles, ScannerQRCodeSymbolType } from \"./ngx-scanner-qrcode.options\";\ndeclare var zbarWasm: any;\n\n/**\n * WASM_READY\n * @returns \n */\nexport var WASM_READY = () => ('zbarWasm' in window);\n\n/**\n * OVERRIDES\n * @param variableKey \n * @param config \n * @param defaultConfig \n * @returns \n */\nexport const OVERRIDES = (variableKey: string, config: any, defaultConfig: any) => {\n  if (config && Object.keys(config[variableKey]).length) {\n    for (const key in defaultConfig) {\n      const cloneDeep = JSON.parse(JSON.stringify({ ...config[variableKey], ...{ [key]: (defaultConfig as any)[key] } }));\n      config[variableKey] = config[variableKey].hasOwnProperty(key) ? config[variableKey] : cloneDeep;\n    }\n    return config[variableKey];\n  } else {\n    return defaultConfig;\n  }\n};\n\n/**\n * AS_COMPLETE\n * @param as \n * @param data \n * @param error \n */\nexport const AS_COMPLETE = (as: AsyncSubject<any>, data: any, error?: any) => {\n  error ? as.error(error) : as.next(data);\n  as.complete();\n};\n\n/**\n * PLAY_AUDIO\n * @param isPlay \n * @returns \n */\nexport const PLAY_AUDIO = (isPlay: boolean = false) => {\n  if (isPlay === false) return;\n  const audio = new Audio(BEEP);\n  // when the sound has been loaded, execute your code\n  audio.oncanplaythrough = () => {\n    const promise = audio.play();\n    if (promise) {\n      promise.catch((e) => {\n        if (e.name === \"NotAllowedError\" || e.name === \"NotSupportedError\") {\n          // console.log(e.name);\n        }\n      });\n    }\n  };\n};\n\n/**\n * DRAW_RESULT_APPEND_CHILD\n * @param code \n * @param oriCanvas \n * @param elTarget \n * @param canvasStyles \n */\nexport const DRAW_RESULT_APPEND_CHILD = (code: any[], oriCanvas: HTMLCanvasElement, elTarget: HTMLCanvasElement | HTMLDivElement, canvasStyles: CanvasRenderingContext2D[]) => {\n  let widthZoom;\n  let heightZoom;\n  let oriWidth = oriCanvas.width;\n  let oriHeight = oriCanvas.height;\n  let oriWHRatio = oriWidth / oriHeight;\n  let imgWidth = parseInt(getComputedStyle(oriCanvas).width);\n  let imgHeight = parseInt(getComputedStyle(oriCanvas).height);\n  let imgWHRatio = imgWidth / imgHeight;\n  elTarget.innerHTML = '';\n\n  if (oriWHRatio > imgWHRatio) {\n    widthZoom = imgWidth / oriWidth;\n    heightZoom = imgWidth / oriWHRatio / oriHeight;\n  } else {\n    heightZoom = imgHeight / oriHeight;\n    widthZoom = (imgHeight * oriWHRatio) / oriWidth;\n  }\n\n  for (let i = 0; i < code.length; i++) {\n    const _code = code[i];\n    // New canvas\n    let cvs = document.createElement(\"canvas\");\n    let ctx = cvs.getContext('2d', { willReadFrequently: true }) as CanvasRenderingContext2D;\n    let loc: any = {};\n    let X: any = [];\n    let Y: any = [];\n    let fontSize = 0;\n    let svgSize = 0;\n\n    let num = canvasStyles.length === 2 && canvasStyles[1]?.font?.replace(/[^0-9]/g, '');\n    if (num && /[0-9]/g.test(num)) {\n      fontSize = parseFloat(num);\n      svgSize = (widthZoom || 1) * fontSize;\n      if (Number.isNaN(svgSize)) {\n        svgSize = fontSize;\n      }\n    }\n\n    // Point x,y\n    const points = _code.points;\n    for (let j = 0; j < points.length; j++) {\n      const xj = points?.[j]?.x ?? 0;\n      const yj = points?.[j]?.y ?? 0;\n      loc[`x${j + 1}`] = xj;\n      loc[`y${j + 1}`] = yj;\n      X.push(xj);\n      Y.push(yj);\n    }\n\n    // Min max\n    let maxX = Math.max(...X);\n    let minX = Math.min(...X);\n    let maxY = Math.max(...Y);\n    let minY = Math.min(...Y);\n\n    // Add class\n    cvs.setAttribute('class', 'qrcode-polygon');\n\n    // Size with screen zoom\n    if (oriWHRatio > imgWHRatio) {\n      cvs.style.top = minY * heightZoom + (imgHeight - imgWidth / oriWHRatio) * 0.5 + \"px\";\n      cvs.style.left = minX * widthZoom + \"px\";\n      cvs.width = (maxX - minX) * widthZoom;\n      cvs.height = (maxY - minY) * widthZoom;\n    } else {\n      cvs.style.top = minY * heightZoom + \"px\";\n      cvs.style.left = minX * widthZoom + (imgWidth - imgHeight * oriWHRatio) * 0.5 + \"px\";\n      cvs.width = (maxX - minX) * heightZoom;\n      cvs.height = (maxY - minY) * heightZoom;\n    }\n\n    // Style for canvas\n    for (const key in canvasStyles[0]) {\n      (ctx as any)[key] = (canvasStyles[0] as any)[key];\n    }\n\n    // polygon [x,y, x,y, x,y.....];\n    const polygon = [];\n    for (let k = 0; k < X.length; k++) {\n      polygon.push((loc[`x${k + 1}`] - minX) * heightZoom);\n      polygon.push((loc[`y${k + 1}`] - minY) * widthZoom);\n    }\n\n    // Copy array\n    const shape = polygon.slice(0) as any;\n\n    // Draw polygon\n    ctx.beginPath();\n    ctx.moveTo(shape.shift(), shape.shift());\n    while (shape.length) {\n      ctx.lineTo(shape.shift(), shape.shift()); //x,y\n    }\n    ctx.closePath();\n    ctx.fill();\n    ctx.stroke();\n\n    if (fontSize) {\n      // Tooltip result\n      const qrcodeTooltipTemp = document.createElement('div');\n      qrcodeTooltipTemp.setAttribute('class', 'qrcode-tooltip-temp');\n      qrcodeTooltipTemp.innerText = _code.value;\n      qrcodeTooltipTemp.style.maxWidth = ((oriWidth > window.innerWidth) ? window.innerWidth * 0.9 : oriWidth) + \"px\";\n      qrcodeTooltipTemp.style.borderRadius = `clamp(1px, ${(widthZoom * fontSize) - 10}px, 3px)`;\n      qrcodeTooltipTemp.style.paddingBlock = `clamp(1px, ${(widthZoom * fontSize) - 10}px, 3px)`; // top - bottom\n      qrcodeTooltipTemp.style.paddingInline = `clamp(2.5px, ${(widthZoom * fontSize) - 6}px, 10px)`; // left - right\n      const xmlString = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${svgSize}\" height=\"${svgSize}\" viewBox=\"0 0 512 512\"><rect x=\"128\" y=\"128\" width=\"336\" height=\"336\" rx=\"57\" ry=\"57\"></rect><path d=\"M383.5,128l.5-24a56.16,56.16,0,0,0-56-56H112a64.19,64.19,0,0,0-64,64V328a56.16,56.16,0,0,0,56,56h24\"></path></svg>`;\n      const xmlDom = new DOMParser().parseFromString(xmlString, 'application/xml');\n      const svgDom = qrcodeTooltipTemp.ownerDocument.importNode(xmlDom.documentElement, true);\n      svgDom.style.marginLeft = `clamp(1px, ${(widthZoom * fontSize) - 10}px, 3px)`; // left - right\n      qrcodeTooltipTemp.appendChild(svgDom);\n      svgDom.addEventListener(\"click\", () => window.navigator['clipboard'].writeText(_code.value));\n      qrcodeTooltipTemp.addEventListener(\"click\", () => window.navigator['clipboard'].writeText(_code.value));\n\n      // Tooltip box\n      const qrcodeTooltip = document.createElement('div');\n      qrcodeTooltip.setAttribute('class', 'qrcode-tooltip');\n      qrcodeTooltip.appendChild(qrcodeTooltipTemp);\n      heightZoom = imgHeight / oriHeight;\n      widthZoom = (imgHeight * oriWHRatio) / oriWidth;\n      qrcodeTooltip.style.fontSize = widthZoom * fontSize + 'px';\n      qrcodeTooltip.style.top = minY * heightZoom + \"px\";\n      qrcodeTooltip.style.left = minX * widthZoom + (imgWidth - imgHeight * oriWHRatio) * 0.5 + \"px\";\n      qrcodeTooltip.style.width = (maxX - minX) * heightZoom + \"px\";\n      qrcodeTooltip.style.height = (maxY - minY) * heightZoom + \"px\";\n\n      // Result text\n      const resultText = document.createElement('span');\n      resultText.innerText = _code.value;\n\n      // Set position result text\n      resultText.style.top = minY * heightZoom + (-20 * heightZoom) + \"px\";\n      resultText.style.left = minX * widthZoom + (imgWidth - imgHeight * oriWHRatio) * 0.5 + \"px\";\n\n      // Style text\n      const ff = canvasStyles[1]?.font?.split(' ')?.[1];\n      resultText.style.fontFamily = ff;\n      resultText.style.fontSize = widthZoom * fontSize + 'px';\n      resultText.style.color = canvasStyles?.[1]?.fillStyle as string;\n\n      elTarget?.appendChild(qrcodeTooltip);\n      elTarget?.appendChild(resultText);\n    }\n\n    elTarget?.appendChild(cvs);\n  };\n\n}\n\n/**\n * DRAW_RESULT_ON_CANVAS\n * @param code \n * @param cvs \n * @param canvasStyles \n */\nexport const DRAW_RESULT_ON_CANVAS = (code: any[], cvs: HTMLCanvasElement, canvasStyles: CanvasRenderingContext2D[]) => {\n  let ctx = cvs.getContext('2d', { willReadFrequently: true }) as CanvasRenderingContext2D;\n\n  for (let i = 0; i < code.length; i++) {\n    const _code = code[i];\n    let loc: any = {};\n    let X: any = [];\n    let Y: any = [];\n    let fontSize = 0;\n\n    const fs = canvasStyles[1]?.font?.split(' ')?.[0];\n    let num = fs?.replace(/[^0-9]/g, '');\n    if (num && /[0-9]/g.test(num)) {\n      fontSize = parseFloat(num);\n    }\n\n    // Point x,y\n    const points = _code.points;\n    for (let j = 0; j < points.length; j++) {\n      const xj = points?.[j]?.x ?? 0;\n      const yj = points?.[j]?.y ?? 0;\n      loc[`x${j + 1}`] = xj;\n      loc[`y${j + 1}`] = yj;\n      X.push(xj);\n      Y.push(yj);\n    }\n\n    // Min max\n    let minX = Math.min(...X);\n    let minY = Math.min(...Y);\n\n    const styleLayer = () => {\n      for (const key in canvasStyles[0]) {\n        (ctx as any)[key] = (canvasStyles[0] as any)[key];\n      }\n\n      // polygon [x,y, x,y, x,y.....];\n      const polygon = [];\n      for (let k = 0; k < X.length; k++) {\n        polygon.push(loc[`x${k + 1}`]);\n        polygon.push(loc[`y${k + 1}`]);\n      }\n\n      // Copy array\n      const shape = polygon.slice(0) as any;\n\n      // Draw polygon\n      ctx.beginPath();\n      ctx.moveTo(shape.shift(), shape.shift());\n      while (shape.length) {\n        ctx.lineTo(shape.shift(), shape.shift()); //x,y\n      }\n      ctx.closePath();\n      ctx.fill();\n      ctx.stroke();\n    }\n\n    let cvs2 = document.createElement('canvas');\n    const styleText = () => {\n      const ff = canvasStyles[1]?.font?.split(' ')?.[1];\n      cvs2.height = cvs.height;\n      cvs2.width = cvs.width;\n      let ctx2 = cvs2.getContext('2d', { willReadFrequently: true }) as CanvasRenderingContext2D;\n      ctx2.font = fontSize + `px ` + ff;\n      for (const key in canvasStyles[1]) {\n        (ctx2 as any)[key] = (canvasStyles[1] as any)[key];\n      }\n      FILL_TEXT_MULTI_LINE(ctx2, _code.value, minX, minY - 5);\n    }\n\n    styleLayer();\n    styleText();\n    // Merge cvs2 into cvs\n    ctx.drawImage(cvs2, 0, 0);\n  };\n}\n\n/**\n * READ_AS_DATA_URL\n * @param file \n * @param configs \n * @returns \n */\nexport const READ_AS_DATA_URL = (file: File, configs: ScannerQRCodeConfig): Promise<ScannerQRCodeSelectedFiles> => {\n  /** overrides **/\n  let decode = configs?.decode ?? CONFIG_DEFAULT.decode;\n  let canvasStyles = configs?.canvasStyles?.length === 2 ? configs?.canvasStyles : [CANVAS_STYLES_LAYER, CANVAS_STYLES_TEXT];\n  let isBeep = configs?.isBeep ?? CONFIG_DEFAULT.isBeep;\n  let isMasked = configs?.isMasked ?? CONFIG_DEFAULT.isMasked;\n  let unScan = configs?.unScan ?? CONFIG_DEFAULT.unScan;\n  let symbolType = configs?.symbolType ?? CONFIG_DEFAULT.symbolType;\n\n  /** drawImage **/\n  return new Promise((resolve, reject) => {\n    const fileReader = new FileReader();\n    fileReader.onload = () => {\n      const objectFile = {\n        name: file.name,\n        file: file,\n        url: URL.createObjectURL(file)\n      };\n      // Set the src of this Image object.\n      const image = new Image();\n      // Setting cross origin value to anonymous\n      image.setAttribute('crossOrigin', 'anonymous');\n      // When our image has loaded.\n      image.onload = async () => {\n        // Get the canvas element by using the getElementById method.\n        const canvas = document.createElement('canvas');\n        // HTMLImageElement size\n        canvas.width = image.naturalWidth || image.width;\n        canvas.height = image.naturalHeight || image.height;\n        // Get a 2D drawing context for the canvas.\n        const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n        // Draw image\n        ctx.drawImage(image, 0, 0, canvas.width, canvas.height);\n        // Data image\n        const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n        // Unscan\n        if (unScan) {\n          return resolve(Object.assign({}, objectFile, { data: [], canvas: canvas }));\n        }\n        // Scanner\n        if (WASM_READY()) {\n          let code = await zbarWasm.scanImageData(imageData);\n\n          // SymbolType\n          const hasSymbolType = symbolType?.some(s => s.toString() !== ScannerQRCodeSymbolType.ScannerQRCode_NONE.toString());\n          if (hasSymbolType) {\n            code = code.filter((s: any) => {\n              const type = s.typeName.replace('ZBAR', 'ScannerQRCode');\n              const valid = symbolType?.some(s => s.toString() === ScannerQRCodeSymbolType[type].toString());\n              return valid;\n            });\n          }\n\n          if (code?.length) {\n            // Decode\n            code.forEach((s: any) => s.value = s.decode(decode?.toLocaleLowerCase()));\n\n            // Overlay\n            if (isMasked) {\n              DRAW_RESULT_ON_CANVAS(code, canvas, canvasStyles);\n            }\n\n            // Emit object\n            const blob = await CANVAS_TO_BLOB(canvas);\n            const url = URL.createObjectURL(blob);\n            const blobToFile = (theBlob: any, fileName: string) => new File([theBlob], fileName, { lastModified: new Date().getTime(), type: theBlob.type });\n            resolve(Object.assign({}, objectFile, { data: code, url: url, canvas: canvas, file: blobToFile(blob, objectFile.name) }));\n\n            PLAY_AUDIO(isBeep);\n          } else {\n            resolve(Object.assign({}, objectFile, { data: code, canvas: canvas }));\n          }\n        }\n      };\n      // Set src\n      image.src = objectFile.url;\n    }\n    fileReader.onerror = (error: any) => reject(error);\n    fileReader.readAsDataURL(file);\n  })\n}\n\n/**\n * Convert canvas to blob\n * canvas.toBlob((blob) => { .. }, 'image/jpeg', 0.95); // JPEG at 95% quality\n * @param canvas \n * @param type \n * @returns \n */\nexport const CANVAS_TO_BLOB = (canvas: HTMLCanvasElement, type?: string): Promise<any> => {\n  return new Promise((resolve, reject) => canvas.toBlob(blob => resolve(blob), type));\n}\n\n/**\n * Convert blob to file\n * @param theBlob \n * @param fileName \n * @returns \n */\nexport const BLOB_TO_FILE = (theBlob: any, fileName: string): File => {\n  return new File([theBlob], fileName, { lastModified: new Date().getTime(), type: theBlob.type });\n}\n\n/**\n * FILES_TO_SCAN\n * @param files \n * @param configs \n * @param percentage \n * @param quality \n * @param as \n * @returns \n */\nexport const FILES_TO_SCAN = (files: File[] = [], configs: ScannerQRCodeConfig, percentage?: number, quality?: number, as = new AsyncSubject<ScannerQRCodeSelectedFiles[]>()): AsyncSubject<ScannerQRCodeSelectedFiles[]> => {\n  COMPRESS_IMAGE_FILE(files, percentage, quality).then((_files: File[]) => {\n    Promise.all(Object.assign([], _files).map((m: File) => READ_AS_DATA_URL(m, configs))).then((img: ScannerQRCodeSelectedFiles[]) => {\n      AS_COMPLETE(as, img);\n    }).catch((error: any) => AS_COMPLETE(as, null, error));\n  });\n  return as;\n}\n\n/**\n * FILL_TEXT_MULTI_LINE\n * @param ctx \n * @param text \n * @param x \n * @param y \n */\nexport const FILL_TEXT_MULTI_LINE = (ctx: CanvasRenderingContext2D, text: string, x: number, y: number) => {\n  let lineHeight = ctx.measureText(\"M\").width * 1.2;\n  let lines = text.split(\"\\n\");\n  for (var i = 0; i < lines.length; ++i) {\n    ctx.fillText(lines[i], x, y);\n    ctx.strokeText(lines[i], x, y);\n    y += lineHeight;\n  }\n}\n\n/**\n * COMPRESS_IMAGE_FILE\n * @param files \n * @param percentage \n * @param quality \n * @returns \n */\nexport const COMPRESS_IMAGE_FILE = (files: File[] = [], percentage = 100, quality = 100) => {\n  if (files.length && (percentage < 100 || quality < 100)) {\n    // Have files\n    const resizedFiles: File[] = [];\n    return new Promise<File[]>((resolve, reject) => {\n      for (const file of files) {\n        const image = new Image() as HTMLImageElement;\n        const reader = new FileReader();\n        reader.onload = function (event: any) {\n          image.onload = function () {\n            const canvas = document.createElement('canvas');\n            const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n            const newWidth = Math.round(image.width * (percentage / 100));\n            const newHeight = Math.round(image.height * (percentage / 100));\n            canvas.width = newWidth;\n            canvas.height = newHeight;\n            ctx.drawImage(image, 0, 0, newWidth, newHeight);\n            canvas.toBlob((blob: any) => {\n              const resizedFile = new File([blob], file.name, { type: file.type });\n              resizedFiles.push(resizedFile);\n              if (files.length === resizedFiles.length) {\n                resolve(resizedFiles);\n              }\n            }, file.type, quality / 100);\n          };\n          image.src = event.target.result;\n        };\n        reader.onerror = (error: any) => reject(error);\n        reader.readAsDataURL(file);\n      }\n    });\n  } else {\n    // No files selected\n    return Promise.resolve<File[]>(files);\n  }\n}\n\n/**\n * REMOVE_RESULT_PANEL\n * @param element \n */\nexport const REMOVE_RESULT_PANEL = (element: HTMLElement) => {\n  // clear text result and tooltip\n  Object.assign([], element.childNodes).forEach(el => element.removeChild(el));\n}\n\n/**\n * RESET_CANVAS\n * @param canvas \n */\nexport const RESET_CANVAS = (canvas: HTMLCanvasElement) => {\n  // reset canvas\n  const context = canvas.getContext('2d', { willReadFrequently: true }) as CanvasRenderingContext2D;\n  // clear frame when reloop\n  context.clearRect(0, 0, canvas.width, canvas.height);\n}\n\n/**\n * UPDATE_WIDTH_HEIGHT_VIDEO\n * @param video \n * @param canvas \n */\nexport const UPDATE_WIDTH_HEIGHT_VIDEO = (video: HTMLVideoElement, canvas: HTMLCanvasElement): void => {\n  video.style.width = canvas.offsetWidth + 'px';\n  video.style.height = canvas.offsetHeight + 'px';\n}\n\n/**\n * VIBRATE\n * @param time \n */\nexport const VIBRATE = (time: number = 300) => {\n  time && IS_MOBILE() && window?.navigator?.vibrate(time);\n};\n\n/**\n * IS_MOBILE\n * @returns \n */\nexport const IS_MOBILE = () => {\n  const vendor = navigator.userAgent || navigator['vendor'] || (window as any)['opera'];\n  const phone = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i;\n  const version = /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i;\n  const isSafari = /^((?!chrome|android).)*safari/i;\n  return !!(phone.test(vendor) || version.test(vendor.substr(0, 4))) && !isSafari.test(vendor);\n};\n","import { Injectable } from '@angular/core';\nimport { AsyncSubject } from 'rxjs';\nimport { AS_COMPLETE, COMPRESS_IMAGE_FILE, FILES_TO_SCAN } from './ngx-scanner-qrcode.helper';\nimport { ScannerQRCodeConfig, ScannerQRCodeSelectedFiles } from './ngx-scanner-qrcode.options';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class NgxScannerQrcodeService {\n\n  /**\n   * loadFiles\n   * @param files \n   * @param percentage \n   * @param quality \n   * @returns \n   */\n  public loadFiles(files: File[] = [], percentage?: number, quality?: number): AsyncSubject<ScannerQRCodeSelectedFiles[]> {\n    const as = new AsyncSubject<ScannerQRCodeSelectedFiles[]>();\n    COMPRESS_IMAGE_FILE(files, percentage, quality).then((_files: File[]) => {\n      Promise.all(Object.assign([], _files).map((m: File) => this.readAsDataURL(m))).then((img: ScannerQRCodeSelectedFiles[]) => AS_COMPLETE(as, img)).catch((error: any) => AS_COMPLETE(as, null, error));\n    });\n    return as;\n  }\n\n  /**\n   * loadFilesToScan\n   * @param files \n   * @param config \n   * @param percentage \n   * @param quality \n   * @returns \n   */\n  public loadFilesToScan(files: File[] = [], config: ScannerQRCodeConfig, percentage?: number, quality?: number): AsyncSubject<ScannerQRCodeSelectedFiles[]> {\n    return FILES_TO_SCAN(files, config, percentage, quality);\n  }\n\n  /**\n   * readAsDataURL\n   * @param file \n   * @returns \n   */\n  private readAsDataURL(file: File): Promise<ScannerQRCodeSelectedFiles> {\n    /** drawImage **/\n    return new Promise((resolve, reject) => {\n      const fileReader = new FileReader();\n      fileReader.onload = () => {\n        const objectFile = {\n          name: file.name,\n          file: file,\n          url: URL.createObjectURL(file)\n        };\n        resolve(objectFile);\n      }\n      fileReader.onerror = (error: any) => reject(error);\n      fileReader.readAsDataURL(file);\n    })\n  }\n}","import { AsyncSubject } from \"rxjs\";\nimport { AS_COMPLETE, WASM_READY } from \"./ngx-scanner-qrcode.helper\";\nimport { Renderer2 } from \"@angular/core\";\nimport { WASMPROJECT, WASMREMOTE, WASMREMOTELATEST } from \"./ngx-scanner-qrcode.default\";\ndeclare var zbarWasm: any;\n\n/**\n * LOAD_WASM\n * @param loadWasmUrl \n * @param as \n * @param renderer \n * @returns \n */\nexport const LOAD_WASM = (loadWasmUrl = '', as: AsyncSubject<boolean | any> = new AsyncSubject(), renderer?: Renderer2): AsyncSubject<boolean | any> => {\n    let retry = 0;\n    const LOAD_WASM_RETRY = (isLoadWasmRemote = false) => {\n        const DONE = (isFirst: boolean) => {\n            let timeoutId: any;\n            try {\n                const END = () => {\n                    if (isFirst) {\n                        zbarWasm.setModuleArgs({ locateFile: (filename: string, directory: string) => loadWasmUrl ? loadWasmUrl : directory + filename });\n                    }\n                    setTimeout(() => AS_COMPLETE(as, true));\n                };\n                const L = () => {\n                    clearTimeout(timeoutId);\n                    WASM_READY() ? END() : timeoutId = setTimeout(() => L());\n                }\n                setTimeout(() => L());\n                setTimeout(() => clearTimeout(timeoutId), 3000);\n            } catch (error) {\n                clearTimeout(timeoutId);\n            }\n        }\n        const scriptRemote = (document.querySelectorAll(`script[src=\"${WASMREMOTE}\"]`) as any as Array<HTMLElement>);\n        const scriptRemoteLatest = (document.querySelectorAll(`script[src=\"${WASMREMOTELATEST}\"]`) as any as Array<HTMLElement>);\n        if (scriptRemote.length || scriptRemoteLatest.length) {\n            DONE(false);\n        } else {\n            const scriptProject = (document.querySelectorAll(`script[src=\"${WASMPROJECT}\"]`) as any as Array<HTMLElement>);\n            if (scriptProject.length === 1) {\n                DONE(false);\n            } else {\n                scriptProject.forEach(f => f.remove());\n                if (renderer) {\n                    const script = renderer.createElement(\"script\") as HTMLScriptElement;\n                    renderer.setAttribute(script, \"src\", isLoadWasmRemote ? WASMREMOTE : WASMPROJECT);\n                    renderer.setAttribute(script, \"type\", \"text/javascript\");\n                    renderer.setAttribute(script, \"async\", \"\");\n                    renderer.appendChild(document.head, script);\n                    script.onload = () => DONE(true);\n                    script.onerror = () => {\n                        if (retry < 2) {\n                            document.head.removeChild(script);\n                            LOAD_WASM_RETRY(true);\n                        } else {\n                            AS_COMPLETE(as, false, 'Could not load script ' + isLoadWasmRemote ? WASMREMOTE : WASMPROJECT);\n                        }\n                    }\n                    retry += 1;\n                } else {\n                    const mod = document.createElement('script');\n                    mod.setAttribute(\"src\", isLoadWasmRemote ? WASMREMOTE : WASMPROJECT);\n                    mod.setAttribute(\"type\", \"text/javascript\");\n                    mod.setAttribute(\"async\", \"\");\n                    document.head.appendChild(mod);\n                    mod.onload = () => DONE(true);\n                    mod.onerror = () => {\n                        if (retry < 2) {\n                            document.head.removeChild(mod);\n                            LOAD_WASM_RETRY(true);\n                        } else {\n                            AS_COMPLETE(as, false, 'Could not load script ' + isLoadWasmRemote ? WASMREMOTE : WASMPROJECT);\n                        }\n                    }\n                    retry += 1;\n                }\n            }\n        }\n    }\n    LOAD_WASM_RETRY();\n    return as;\n}","import { Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, Renderer2, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { AsyncSubject, BehaviorSubject } from 'rxjs';\nimport { CANVAS_STYLES_LAYER, CANVAS_STYLES_TEXT, CONFIG_DEFAULT, MEDIA_STREAM_DEFAULT } from './ngx-scanner-qrcode.default';\nimport { AS_COMPLETE, BLOB_TO_FILE, CANVAS_TO_BLOB, DRAW_RESULT_APPEND_CHILD, FILES_TO_SCAN, OVERRIDES, PLAY_AUDIO, REMOVE_RESULT_PANEL, RESET_CANVAS, UPDATE_WIDTH_HEIGHT_VIDEO, VIBRATE, WASM_READY } from './ngx-scanner-qrcode.helper';\nimport { LOAD_WASM } from './ngx-scanner-qrcode.loader';\nimport { ScannerQRCodeConfig, ScannerQRCodeDevice, ScannerQRCodeResult, ScannerQRCodeSelectedFiles, ScannerQRCodeSymbolType } from './ngx-scanner-qrcode.options';\ndeclare var zbarWasm: any;\n\n@Component({\n  selector: 'ngx-scanner-qrcode',\n  template: `<div #resultsPanel class=\"origin-overlay\"></div><canvas #canvas class=\"origin-canvas\"></canvas><video #video playsinline class=\"origin-video\"></video>`,\n  styleUrls: ['./ngx-scanner-qrcode.component.scss'],\n  host: { 'class': 'ngx-scanner-qrcode' },\n  exportAs: 'scanner',\n  encapsulation: ViewEncapsulation.None\n})\nexport class NgxScannerQrcodeComponent implements OnInit, OnDestroy {\n\n  /**\n   * Element\n   * playsinline required to tell iOS safari we don't want fullscreen\n   */\n  @ViewChild('video') public video!: ElementRef<HTMLVideoElement>;\n  @ViewChild('canvas') public canvas!: ElementRef<HTMLCanvasElement>;\n  @ViewChild('resultsPanel') public resultsPanel!: ElementRef<HTMLDivElement>;\n\n  /**\n   * EventEmitter\n   */\n  @Output() public event = new EventEmitter<ScannerQRCodeResult[]>();\n\n  /**\n   * Input\n   */\n  @Input() public config: ScannerQRCodeConfig = CONFIG_DEFAULT;\n  @Input() public src: string | undefined = CONFIG_DEFAULT.src;\n  @Input() public fps: number | undefined = CONFIG_DEFAULT.fps;\n  @Input() public vibrate: number | undefined = CONFIG_DEFAULT.vibrate;\n  @Input() public decode: string | undefined = CONFIG_DEFAULT.decode;\n  @Input() public isBeep: boolean | undefined = CONFIG_DEFAULT.isBeep;\n  @Input() public isMasked: boolean | undefined = CONFIG_DEFAULT.isMasked;\n  @Input() public unScan: boolean | undefined = CONFIG_DEFAULT.unScan;\n  @Input() public loadWasmUrl: string | undefined = CONFIG_DEFAULT.loadWasmUrl;\n  @Input() public symbolType: ScannerQRCodeSymbolType[] | undefined = CONFIG_DEFAULT.symbolType;\n  @Input() public constraints: MediaStreamConstraints | any = CONFIG_DEFAULT.constraints;\n  @Input() public canvasStyles: CanvasRenderingContext2D[] | any[] = [CANVAS_STYLES_LAYER, CANVAS_STYLES_TEXT];\n\n  /**\n   * Export\n  */\n  public isStart: boolean = false;\n  public isPause: boolean = false;\n  public isLoading: boolean = false;\n  public isTorch: boolean = false;\n  public data = new BehaviorSubject<ScannerQRCodeResult[]>([]);\n  public devices = new BehaviorSubject<ScannerQRCodeDevice[]>([]);\n  public deviceIndexActive: number = 0;\n\n  /**\n   * Private\n  */\n  private rAF_ID: any;\n  private dataForResize: ScannerQRCodeResult[] = [];\n  private ready = new AsyncSubject<boolean>();\n\n  private STATUS = {\n    startON: () => this.isStart = true,\n    pauseON: () => this.isPause = true,\n    loadingON: () => this.isLoading = true,\n    startOFF: () => this.isStart = false,\n    pauseOFF: () => this.isPause = false,\n    loadingOFF: () => this.isLoading = false,\n    torchOFF: () => this.isTorch = false,\n  }\n\n  constructor(private renderer: Renderer2, private elementRef: ElementRef) { }\n\n  ngOnInit(): void {\n    this.overrideConfig();\n    LOAD_WASM(this.loadWasmUrl, this.ready, this.renderer).subscribe(() => {\n      if (this.src) {\n        this.loadImage(this.src);\n      }\n      this.resize();\n    });\n  }\n\n  /**\n   * start\n   * @param playDeviceCustom \n   * @returns \n   */\n  public start(playDeviceCustom?: Function): AsyncSubject<any> {\n    const as = new AsyncSubject<any>();\n    if (this.isStart) {\n      // Reject\n      AS_COMPLETE(as, false);\n    } else {\n      // fix safari\n      this.safariWebRTC(as, playDeviceCustom);\n    }\n    return as;\n  }\n\n  /**\n   * stop\n   * @returns \n   */\n  public stop(): AsyncSubject<any> {\n    this.STATUS.pauseOFF();\n    this.STATUS.startOFF();\n    this.STATUS.torchOFF();\n    this.STATUS.loadingOFF();\n    const as = new AsyncSubject<any>();\n    try {\n      clearTimeout(this.rAF_ID);\n      (this.video.nativeElement.srcObject as MediaStream).getTracks().forEach((track: MediaStreamTrack) => {\n        track.stop();\n        AS_COMPLETE(as, true);\n      });\n      this.dataForResize = [];\n      RESET_CANVAS(this.canvas.nativeElement);\n      REMOVE_RESULT_PANEL(this.resultsPanel.nativeElement);\n    } catch (error) {\n      AS_COMPLETE(as, false, error as any);\n    }\n    return as;\n  }\n\n  /**\n   * play\n   * @returns \n   */\n  public play(): AsyncSubject<any> {\n    const as = new AsyncSubject<any>();\n    if (this.isPause) {\n      this.video.nativeElement.play();\n      this.STATUS.pauseOFF();\n      this.requestAnimationFrame();\n      AS_COMPLETE(as, true);\n    } else {\n      AS_COMPLETE(as, false);\n    }\n    return as;\n  }\n\n  /**\n   * pause\n   * @returns \n   */\n  public pause(): AsyncSubject<any> {\n    const as = new AsyncSubject<any>();\n    if (this.isStart) {\n      clearTimeout(this.rAF_ID);\n      this.video.nativeElement.pause();\n      this.STATUS.pauseON();\n      AS_COMPLETE(as, true);\n    } else {\n      AS_COMPLETE(as, false);\n    }\n    return as;\n  }\n\n  /**\n   * playDevice\n   * @param deviceId \n   * @param as \n   * @returns \n   */\n  public playDevice(deviceId: string, as: AsyncSubject<any> = new AsyncSubject<any>()): AsyncSubject<any> {\n    const constraints = this.getConstraints();\n    const existDeviceId = (this.isStart && constraints) ? constraints.deviceId !== deviceId : true;\n    switch (true) {\n      case deviceId === 'null' || deviceId === 'undefined' || !deviceId:\n        stop();\n        this.stop();\n        AS_COMPLETE(as, false);\n        break;\n      case deviceId && existDeviceId:\n        stop();\n        this.stop();\n        // Loading on\n        this.STATUS.loadingON();\n        this.deviceIndexActive = this.devices.value.findIndex((f: ScannerQRCodeDevice) => f.deviceId === deviceId);\n        const constraints = { ...this.constraints, audio: false, video: { deviceId: deviceId, ...this.constraints.video } };\n        // MediaStream\n        navigator.mediaDevices.getUserMedia(constraints).then((stream: MediaStream) => {\n          this.video.nativeElement.srcObject = stream;\n          this.video.nativeElement.onloadedmetadata = () => {\n            this.video.nativeElement.play();\n            this.requestAnimationFrame();\n            AS_COMPLETE(as, true);\n            this.STATUS.startON();\n            this.STATUS.loadingOFF();\n          }\n        }).catch((error: any) => {\n          this.eventEmit(false);\n          AS_COMPLETE(as, false, error);\n          this.STATUS.startOFF();\n          this.STATUS.loadingOFF();\n        });\n        break;\n      default:\n        AS_COMPLETE(as, false);\n        this.STATUS.loadingOFF();\n        break;\n    }\n    return as;\n  }\n\n  /**\n   * loadImage\n   * @param src \n   * @returns \n   */\n  public loadImage(src: string): AsyncSubject<any> {\n    const as = new AsyncSubject<any>();\n    // Loading on\n    this.STATUS.startOFF();\n    this.STATUS.loadingON();\n    // Set the src of this Image object.\n    const image = new Image();\n    // Setting cross origin value to anonymous\n    image.setAttribute('crossOrigin', 'anonymous');\n    // When our image has loaded.\n    image.onload = () => {\n      WASM_READY() && this.drawImage(image, (flag: boolean) => {\n        AS_COMPLETE(as, flag);\n        this.STATUS.startOFF();\n        this.STATUS.loadingOFF();\n      });\n    };\n    // Set src\n    image.src = src;\n    return as;\n  }\n\n  /**\n   * torcher\n   * @returns \n   */\n  public torcher(): AsyncSubject<any> {\n    const as = this.applyConstraints({ advanced: [{ torch: this.isTorch }] });\n    as.subscribe(() => false, () => this.isTorch = !this.isTorch);\n    return as;\n  }\n\n  /**\n   * applyConstraints\n   * @param constraints \n   * @param deviceIndex \n   * @returns \n   */\n  public applyConstraints(constraints: MediaTrackConstraintSet | MediaTrackConstraints | any, deviceIndex = 0): AsyncSubject<any> {\n    const as = new AsyncSubject<any>();\n    if (this.isStart) {\n      const stream = this.video.nativeElement.srcObject as MediaStream;\n      if (deviceIndex !== null || deviceIndex !== undefined || !Number.isNaN(deviceIndex)) {\n        const videoTrack = stream.getVideoTracks()[deviceIndex] as MediaStreamTrack;\n        const imageCapture = new (window as any).ImageCapture(videoTrack);\n        imageCapture.getPhotoCapabilities().then(async () => {\n          await videoTrack.applyConstraints(constraints);\n          UPDATE_WIDTH_HEIGHT_VIDEO(this.video.nativeElement, this.canvas.nativeElement);\n          AS_COMPLETE(as, true);\n        }).catch((error: any) => {\n          switch (error?.name) {\n            case 'NotFoundError':\n            case 'DevicesNotFoundError':\n              AS_COMPLETE(as, false, 'Required track is missing' as string);\n              break;\n            case 'NotReadableError':\n            case 'TrackStartError':\n              AS_COMPLETE(as, false, 'Webcam or mic are already in use' as string);\n              break;\n            case 'OverconstrainedError':\n            case 'ConstraintNotSatisfiedError':\n              AS_COMPLETE(as, false, 'Constraints can not be satisfied by avb. devices' as string);\n              break;\n            case 'NotAllowedError':\n            case 'PermissionDeniedError':\n              AS_COMPLETE(as, false, 'Permission denied in browser' as string);\n              break;\n            case 'TypeError':\n              AS_COMPLETE(as, false, 'Empty constraints object' as string);\n              break;\n            default:\n              AS_COMPLETE(as, false, error as any);\n              break;\n          }\n        });\n      } else {\n        AS_COMPLETE(as, false, 'Please check again deviceIndex' as string);\n      }\n    } else {\n      AS_COMPLETE(as, false, 'Please start the scanner' as string);\n    }\n    return as;\n  };\n\n  /**\n   * getConstraints\n   * @param deviceIndex \n   * @returns \n   */\n  public getConstraints(deviceIndex = 0): MediaTrackConstraintSet | MediaTrackConstraints {\n    const stream = this.video.nativeElement.srcObject as MediaStream;\n    const videoTrack = stream?.getVideoTracks()[deviceIndex] as MediaStreamTrack;\n    return videoTrack?.getConstraints() as MediaTrackConstraints;\n  }\n\n  /**\n   * download\n   * @param fileName \n   * @param percentage \n   * @param quality \n   * @returns \n   */\n  public download(fileName: string = `ngx_scanner_qrcode_${Date.now()}.png`, percentage?: number, quality?: number): AsyncSubject<ScannerQRCodeSelectedFiles[]> {\n    const as = new AsyncSubject<any>();\n    (async () => {\n      const blob = await CANVAS_TO_BLOB(this.canvas.nativeElement);\n      const file = BLOB_TO_FILE(blob, fileName);\n      FILES_TO_SCAN([file], this.config, percentage, quality, as).subscribe((res: ScannerQRCodeSelectedFiles[]) => {\n        res.forEach((item: ScannerQRCodeSelectedFiles) => {\n          if (item?.data?.length) {\n            const link = document.createElement('a');\n            link.href = item.url;\n            link.download = item.name;\n            link.click();\n            link.remove();\n          }\n        });\n      });\n    })();\n    return as;\n  }\n\n  /**\n   * resize\n   */\n  private resize(): void {\n    window.addEventListener(\"resize\", () => {\n      DRAW_RESULT_APPEND_CHILD(this.dataForResize as any, this.canvas.nativeElement, this.resultsPanel.nativeElement, this.canvasStyles);\n      UPDATE_WIDTH_HEIGHT_VIDEO(this.video.nativeElement, this.canvas.nativeElement);\n    });\n  }\n\n  /**\n   * overrideConfig\n   */\n  private overrideConfig(): void {\n    if ('src' in this.config) this.src = this.config.src;\n    if ('fps' in this.config) this.fps = this.config.fps;\n    if ('vibrate' in this.config) this.vibrate = this.config.vibrate;\n    if ('decode' in this.config) this.decode = this.config.decode;\n    if ('isBeep' in this.config) this.isBeep = this.config.isBeep;\n    if ('isMasked' in this.config) this.isMasked = this.config.isMasked;\n    if ('unScan' in this.config) this.unScan = this.config.unScan;\n    if ('loadWasmUrl' in this.config) this.loadWasmUrl = this.config.loadWasmUrl;\n    if ('symbolType' in this.config) this.symbolType = this.config.symbolType;\n    if ('constraints' in this.config) this.constraints = OVERRIDES('constraints', this.config, MEDIA_STREAM_DEFAULT);\n    if ('canvasStyles' in this.config && this.config?.canvasStyles?.length === 2) this.canvasStyles = this.config.canvasStyles;\n  }\n\n  /**\n   * safariWebRTC\n   * Fix issue on safari\n   * https://webrtchacks.com/guide-to-safari-webrtc\n   * @param as \n   * @param playDeviceCustom \n   */\n  private safariWebRTC(as: AsyncSubject<any>, playDeviceCustom?: Function): void {\n    // Loading on\n    this.STATUS.startOFF();\n    this.STATUS.loadingON();\n    navigator.mediaDevices.getUserMedia(this.constraints).then((stream: MediaStream) => {\n      stream.getTracks().forEach(track => track.stop());\n      this.loadAllDevices(as, playDeviceCustom);\n    }).catch((error: any) => {\n      AS_COMPLETE(as, false, error);\n      this.STATUS.startOFF();\n      this.STATUS.loadingOFF();\n    });\n  }\n\n  /**\n   * loadAllDevices\n   * @param as \n   * @param playDeviceCustom \n   */\n  private loadAllDevices(as: AsyncSubject<any>, playDeviceCustom?: Function): void {\n    navigator.mediaDevices.enumerateDevices().then(devices => {\n      let cameraDevices: ScannerQRCodeDevice[] = devices.filter(f => f.kind == 'videoinput');\n      this.devices.next(cameraDevices);\n      if (cameraDevices?.length > 0) {\n        AS_COMPLETE(as, cameraDevices);\n        playDeviceCustom ? playDeviceCustom(cameraDevices) : this.playDevice(cameraDevices[0].deviceId);\n      } else {\n        AS_COMPLETE(as, false, 'No camera detected.' as any);\n        this.STATUS.startOFF();\n        this.STATUS.loadingOFF();\n      }\n    }).catch((error: any) => {\n      AS_COMPLETE(as, false, error);\n      this.STATUS.startOFF();\n      this.STATUS.loadingOFF();\n    });\n  }\n\n  /**\n   * drawImage\n   * @param element \n   * @param callback \n   */\n  private async drawImage(element: HTMLImageElement | HTMLVideoElement, callback: Function = () => { }): Promise<void> {\n    // Get the canvas element by using the getElementById method.\n    const canvas = this.canvas.nativeElement;\n    // Get a 2D drawing context for the canvas.\n    const ctx = canvas.getContext('2d', { willReadFrequently: true }) as CanvasRenderingContext2D;\n    // HTMLImageElement size\n    if (element instanceof HTMLImageElement) {\n      canvas.width = element.naturalWidth;\n      canvas.height = element.naturalHeight;\n      element.style.visibility = '';\n      this.video.nativeElement.style.visibility = 'hidden';\n      // Image center and auto scale\n      this.renderer.setStyle(this.elementRef.nativeElement, 'width', canvas.width + 'px');\n      this.renderer.setStyle(this.elementRef.nativeElement, 'maxWidth', 100 + '%');\n      this.renderer.setStyle(this.elementRef.nativeElement, 'display', 'inline-block');\n    }\n    // HTMLVideoElement size\n    if (element instanceof HTMLVideoElement) {\n      canvas.width = element.videoWidth;\n      canvas.height = element.videoHeight;\n      element.style.visibility = '';\n      this.canvas.nativeElement.style.visibility = 'hidden';\n    }\n    // Set width, height for video element\n    UPDATE_WIDTH_HEIGHT_VIDEO(this.video.nativeElement, canvas);\n    // clear frame\n    ctx.clearRect(0, 0, canvas.width, canvas.height)\n    // Draw image\n    ctx.drawImage(element, 0, 0, canvas.width, canvas.height);\n    // Data image\n    const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n    // Unscan\n    if (this.unScan) {\n      return Promise.resolve();\n    }\n    // Draw frame\n    let code = await zbarWasm.scanImageData(imageData);\n    // SymbolType\n    const hasSymbolType = this.symbolType?.some(s => s.toString() !== ScannerQRCodeSymbolType.ScannerQRCode_NONE.toString());\n    if (hasSymbolType) {\n      code = code.filter((s: any) => {\n        const type = s.typeName.replace('ZBAR', 'ScannerQRCode');\n        const valid = this.symbolType?.some(s => s.toString() === ScannerQRCodeSymbolType[type].toString());\n        return valid;\n      });\n    }\n    if (code?.length) {\n      // Decode\n      code.forEach((s: any) => s.value = s.decode(this.decode?.toLocaleLowerCase()));\n      // Overlay\n      if (this.isMasked) {\n        DRAW_RESULT_APPEND_CHILD(code, Object.freeze(this.canvas.nativeElement), this.resultsPanel.nativeElement, this.canvasStyles);\n      }\n      // To blob and emit data\n      const EMIT_DATA = () => {\n        this.eventEmit(code);\n        this.dataForResize = code;\n      };\n      // HTMLImageElement\n      if (element instanceof HTMLImageElement) {\n        callback(true);\n        EMIT_DATA();\n        VIBRATE(this.vibrate);\n        PLAY_AUDIO(this.isBeep);\n      }\n      // HTMLVideoElement\n      if (element instanceof HTMLVideoElement) {\n        EMIT_DATA();\n        VIBRATE(this.vibrate);\n        PLAY_AUDIO(this.isBeep);\n      }\n    } else {\n      callback(false);\n      REMOVE_RESULT_PANEL(this.resultsPanel.nativeElement);\n      this.dataForResize = [];\n    }\n  }\n\n  /**\n   * eventEmit\n   * @param response \n   */\n  private eventEmit(response: any = false): void {\n    (response !== false) && this.data.next(response || []);\n    (response !== false) && this.event.emit(response || []);\n  }\n\n  /**\n   * Single-thread\n   * Loop Recording on Camera\n   * Must be destroy request \n   * Not using: requestAnimationFrame\n   * @param delay\n   */\n  private requestAnimationFrame(delay: number = 100): void {\n    try {\n      clearTimeout(this.rAF_ID);\n      this.rAF_ID = setTimeout(() => {\n        if (this.video.nativeElement.readyState === this.video.nativeElement.HAVE_ENOUGH_DATA) {\n          delay = 0; // Appy first request\n          WASM_READY() && this.drawImage(this.video.nativeElement);\n          this.isStart && !this.isPause && this.requestAnimationFrame(delay);\n        }\n      }, /*avoid cache mediaStream*/ delay || this.fps);\n    } catch (error) {\n      clearTimeout(this.rAF_ID);\n    }\n  }\n\n  /**\n   * isReady\n   */\n  get isReady(): AsyncSubject<boolean> {\n    return this.ready;\n  }\n\n  ngOnDestroy(): void {\n    this.pause();\n  }\n}\n","/*\n * Public API Surface of ngx-scanner-qrcode\n */\n\nexport * from './lib/ngx-scanner-qrcode.service';\nexport * from './lib/ngx-scanner-qrcode.component';\nexport * from './lib/ngx-scanner-qrcode.options';\nexport * from './lib/ngx-scanner-qrcode.loader';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}