{"version":3,"file":"eisberg-labs-ngx-barcode-scanner.mjs","sources":["../../../ngx-barcode-scanner/src/lib/ngx-barcode-scanner.service.ts","../../../ngx-barcode-scanner/src/lib/utils.ts","../../../ngx-barcode-scanner/src/lib/ngx-barcode-scanner.component.ts","../../../ngx-barcode-scanner/src/lib/ngx-barcode-scanner.component.html","../../../ngx-barcode-scanner/src/lib/ngx-barcode-scanner.module.ts","../../../ngx-barcode-scanner/src/eisberg-labs-ngx-barcode-scanner.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport Quagga, { QuaggaJSConfigObject, QuaggaJSResultObject } from '@ericblade/quagga2';\nimport { from, Observable, Subject } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class NgxBarcodeScannerService {\n  private scanResult?: Subject<string>;\n\n  public defaultConfig(): QuaggaJSConfigObject {\n    return {\n      inputStream: {\n        name: 'Live',\n        type: 'LiveStream',\n      },\n      locator: {\n        patchSize: 'medium',\n        halfSample: false,\n      },\n      locate: true,\n      numOfWorkers: 8,\n      frequency: 10,\n    };\n  }\n\n  isScanMatch(scanResult: QuaggaJSResultObject, errorThresholdPercentage: number): boolean {\n    const avgErrors = this.meanBy(scanResult.codeResult.decodedCodes, 'error');\n    return !!avgErrors && avgErrors < errorThresholdPercentage;\n  }\n\n  start(config: QuaggaJSConfigObject, errorThresholdPercentage: number): Observable<string> {\n    if (typeof this.scanResult === 'undefined') {\n      this.scanResult = new Subject<string>();\n    }\n    Quagga.onProcessed((scanResult: QuaggaJSResultObject) => {\n      this.onProcessed(scanResult);\n    });\n    Quagga.onDetected((result: QuaggaJSResultObject) => {\n      const barcode = result.codeResult.code;\n      if (this.isScanMatch(result, errorThresholdPercentage)) {\n        this.scanResult?.next(barcode + '');\n      }\n    });\n\n    Quagga.init(config, async (error) => {\n      if (error) {\n        this.scanResult?.error(error);\n        await this.stop();\n      } else {\n        Quagga.start();\n      }\n    });\n\n    return this.scanResult;\n  }\n\n  stop(): Observable<void> {\n    if (typeof this.scanResult !== 'undefined') {\n      this.scanResult?.unsubscribe();\n      this.scanResult = undefined;\n    }\n    return from(Quagga.stop());\n  }\n\n  /* eslint-disable */\n  private meanBy(arr: any[], property: string): number | undefined {\n    if (!arr) {\n      return undefined;\n    }\n    return arr.reduce((acc, item) => (property in item ? acc + item[property] : acc), 0) / arr.length;\n  }\n\n  private onProcessed(result: QuaggaJSResultObject) {\n    const drawingCtx = Quagga.canvas.ctx.overlay;\n    const drawingCanvas: HTMLCanvasElement = Quagga.canvas.dom.overlay;\n\n    if (result) {\n      if (result.boxes) {\n        const canvasWidth: string = drawingCanvas.getAttribute('width') ?? '0';\n        const canvasHeight: string = drawingCanvas.getAttribute('height') ?? '0';\n        const width = parseInt(canvasWidth, 10);\n        const height = parseInt(canvasHeight, 10);\n        drawingCtx.clearRect(0, 0, width, height);\n        result.boxes\n          .filter((box) => box !== result.box)\n          .forEach((box) => {\n            Quagga.ImageDebug.drawPath(box, { x: 0, y: 1 }, drawingCtx, { color: 'green', lineWidth: 2 });\n          });\n      }\n\n      if (result.box) {\n        Quagga.ImageDebug.drawPath(result.box, { x: 0, y: 1 }, drawingCtx, { color: '#00F', lineWidth: 2 });\n      }\n\n      if (result.codeResult && result.codeResult.code) {\n        Quagga.ImageDebug.drawPath(result.line, { x: 'x', y: 'y' }, drawingCtx, { color: 'red', lineWidth: 3 });\n      }\n    }\n  }\n}\n","export class Utils {\n  /* eslint-disable */\n  static setOrDefault(object: any, path: string, value: any): void {\n    if (typeof object[path] === 'undefined') {\n      object[path] = value;\n    }\n  }\n}\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { NgxBarcodeScannerService } from './ngx-barcode-scanner.service';\nimport {QuaggaJSCodeReader, QuaggaJSConfigObject} from '@ericblade/quagga2';\nimport { Utils } from './utils';\n\n@Component({\n  selector: 'ngx-barcode-scanner',\n  templateUrl: './ngx-barcode-scanner.component.html',\n  styleUrls: ['./ngx-barcode-scanner.component.css'],\n})\nexport class NgxBarcodeScannerComponent implements OnInit, OnDestroy {\n  @Input() codes: string | string[] = [\n    'code_128',\n    'ean',\n    'ean_8',\n    'code_39',\n    'code_39_vin',\n    'codabar',\n    'upc',\n    'upc_e',\n    'i2of5',\n    '2of5',\n    'code_93',\n  ];\n  @Input() config: QuaggaJSConfigObject;\n  @Input() errorThreshold: number;\n  @Input() value: string;\n  @Output() valueChange = new EventEmitter();\n  @Output() exception = new EventEmitter();\n\n  constructor(private service: NgxBarcodeScannerService) {}\n\n  private setConfig() {\n    if (!this.config) {\n      this.config = {\n        ...this.service.defaultConfig(),\n        decoder: {\n          readers: this.readers(),\n        },\n      };\n    }\n    if (!this.config.inputStream) {\n      this.config.inputStream = {};\n    }\n    Utils.setOrDefault(this.config.inputStream, 'name', 'Live');\n    Utils.setOrDefault(this.config.inputStream, 'type', 'LiveStream');\n    if (!this.config.locator) {\n      this.config.locator = {};\n    }\n    Utils.setOrDefault(this.config.locator, 'patchSize', 'medium');\n    Utils.setOrDefault(this.config.locator, 'halfSample', false);\n    Utils.setOrDefault(this.config, 'locate', true);\n    Utils.setOrDefault(this.config, 'numOfWorkers', 8);\n    Utils.setOrDefault(this.config, 'frequency', 10);\n    if (!this.config.decoder) {\n      this.config.decoder = {};\n    }\n    Utils.setOrDefault(this.config.decoder, 'readers', this.readers());\n  }\n\n  ngOnInit(): void {\n    this.setConfig();\n    const threshold = isNaN(this.errorThreshold) ? 0.1 : this.errorThreshold;\n    const scanningService = this.service.start(this.config, threshold);\n    scanningService.subscribe(\n      (value) => {\n        this.valueChange.emit(value);\n      },\n      (error) => {\n        this.exception.emit(error);\n      }\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.service.stop();\n  }\n\n  readers(): QuaggaJSCodeReader[] {\n    const types = typeof this.codes === 'string' ? [this.codes] : this.codes;\n    return types.map((it) => `${it}_reader` as QuaggaJSCodeReader);\n  }\n}\n","<div id=\"interactive\" class=\"viewport\"></div>\n","import { NgModule } from '@angular/core';\nimport { NgxBarcodeScannerComponent } from './ngx-barcode-scanner.component';\n\n@NgModule({\n  declarations: [NgxBarcodeScannerComponent],\n  imports: [],\n  exports: [NgxBarcodeScannerComponent],\n})\nexport class NgxBarcodeScannerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NgxBarcodeScannerService"],"mappings":"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"}