{"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 {\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;\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 {\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.7/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, 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 = ``;\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 => {\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 => {\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()): AsyncSubject => {\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((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(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 const isMobileNormal = /Android|webOS|iPhone|iPad|iPod/i.test(navigator.userAgent);\n return !!(phone.test(vendor) || version.test(vendor.substr(0, 4))) && !isSafari.test(vendor) || isMobileNormal;\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 {\n const as = new AsyncSubject();\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 {\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 {\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 = new AsyncSubject(), renderer?: Renderer2): AsyncSubject => {\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);\n const scriptRemoteLatest = (document.querySelectorAll(`script[src=\"${WASMREMOTELATEST}\"]`) as any as Array);\n if (scriptRemote.length || scriptRemoteLatest.length) {\n DONE(false);\n } else {\n const scriptProject = (document.querySelectorAll(`script[src=\"${WASMPROJECT}\"]`) as any as Array);\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, IS_MOBILE } 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: `
`,\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;\n @ViewChild('canvas') public canvas!: ElementRef;\n @ViewChild('resultsPanel') public resultsPanel!: ElementRef;\n\n /**\n * EventEmitter\n */\n @Output() public event = new EventEmitter();\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([]);\n public devices = new BehaviorSubject([]);\n public deviceIndexActive: number = 0;\n\n /**\n * Private\n */\n private rAF_ID: any;\n private dataForResize: ScannerQRCodeResult[] = [];\n private ready = new AsyncSubject();\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 } else {\n this.loadCameraDevices();\n }\n this.resize();\n });\n }\n\n /**\n * loadCameraDevices\n */\n public loadCameraDevices(): void {\n navigator.mediaDevices.enumerateDevices().then(devices => {\n let cameraDevices: ScannerQRCodeDevice[] = devices?.filter(f => f.kind == 'videoinput')\n this.devices.next(cameraDevices);\n UPDATE_WIDTH_HEIGHT_VIDEO(this.video.nativeElement, this.canvas.nativeElement);\n }).catch(() => {\n this.devices.next([]);\n });\n }\n\n /**\n * start\n * @param playDeviceCustom \n * @returns \n */\n public start(playDeviceCustom?: Function): AsyncSubject {\n const as = new AsyncSubject();\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 {\n this.STATUS.pauseOFF();\n this.STATUS.startOFF();\n this.STATUS.torchOFF();\n this.STATUS.loadingOFF();\n const as = new AsyncSubject();\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 {\n const as = new AsyncSubject();\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 {\n const as = new AsyncSubject();\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 = new AsyncSubject()): AsyncSubject {\n const deviceSelect = this.devices.value?.find(f => f.deviceId === deviceId);\n const video = () => {\n if (IS_MOBILE()) {\n let ideal: 'environment' | 'user' | undefined;\n const label = deviceSelect?.label ?? '';\n if (/back|rear|environment/i.test(label)) {\n ideal = 'environment';\n }\n if (/front|user/i.test(label)) {\n ideal = 'user';\n }\n return {\n ...(ideal\n ? { facingMode: { ideal } }\n : { deviceId: { exact: deviceId } }),\n ...this.constraints.video\n };\n } else {\n return { deviceId: { exact: deviceId }, ...this.constraints.video };\n }\n };\n const constraints = { ...this.constraints, audio: false, video: video() };\n if (!deviceId) {\n stop();\n this.stop();\n AS_COMPLETE(as, false);\n } else if (deviceId && constraints) {\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 // 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 } else {\n AS_COMPLETE(as, false);\n this.STATUS.loadingOFF();\n }\n return as;\n }\n\n /**\n * loadImage\n * @param src \n * @returns \n */\n public loadImage(src: string): AsyncSubject {\n const as = new AsyncSubject();\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 {\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 {\n const as = new AsyncSubject();\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 {\n const as = new AsyncSubject();\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, 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.playDeviceOptinal(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 * playDeviceOptinal\n * @param as\n * @param playDeviceCustom \n */\n private playDeviceOptinal(as: AsyncSubject, playDeviceCustom?: Function) {\n const cameraDevices = this.devices?.value;\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 }\n\n /**\n * drawImage\n * @param element \n * @param callback \n */\n private async drawImage(element: HTMLImageElement | HTMLVideoElement, callback: Function = () => { }): Promise {\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 {\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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"}