{"version":3,"file":"angularx-qrcode.mjs","sources":["../../../projects/angularx-qrcode/src/lib/angularx-qrcode.component.ts","../../../projects/angularx-qrcode/src/public-api.ts","../../../projects/angularx-qrcode/src/angularx-qrcode.ts"],"sourcesContent":["import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnChanges,\n  Output,\n  Renderer2,\n  ViewChild,\n} from \"@angular/core\"\nimport { DomSanitizer, SafeUrl } from \"@angular/platform-browser\"\nimport {\n  QRCodeRenderersOptions,\n  QRCodeToDataURLOptions,\n  QRCodeToStringOptions,\n  toCanvas,\n  toDataURL,\n  toString,\n} from \"qrcode\"\nimport {\n  QRCodeVersion,\n  QRCodeElementType,\n  FixMeLater,\n  QRCodeConfigType,\n  QRCodeErrorCorrectionLevel,\n} from \"./types\"\n\n@Component({\n  selector: \"qrcode\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `<div #qrcElement [class]=\"cssClass\"></div>`,\n})\nexport class QRCodeComponent implements OnChanges {\n  @Input() public allowEmptyString = false\n  @Input() public colorDark = \"#000000ff\"\n  @Input() public colorLight = \"#ffffffff\"\n  @Input() public cssClass = \"qrcode\"\n  @Input() public elementType: QRCodeElementType = \"canvas\"\n  @Input()\n  public errorCorrectionLevel: QRCodeErrorCorrectionLevel = \"M\"\n  @Input() public imageSrc?: string\n  @Input() public imageHeight?: number\n  @Input() public imageWidth?: number\n  @Input() public margin = 4\n  @Input() public qrdata = \"\"\n  @Input() public scale = 4\n  @Input() public version?: QRCodeVersion\n  @Input() public width = 10\n\n  // Accessibility features introduced in 13.0.4+\n  @Input() public alt?: string\n  @Input() public ariaLabel?: string\n  @Input() public title?: string\n\n  @Output() qrCodeURL = new EventEmitter<SafeUrl>()\n\n  @ViewChild(\"qrcElement\", { static: true }) public qrcElement!: ElementRef\n\n  public context: CanvasRenderingContext2D | null = null\n  private centerImage?: HTMLImageElement\n\n  constructor(\n    private renderer: Renderer2,\n    private sanitizer: DomSanitizer\n  ) {}\n\n  public async ngOnChanges(): Promise<void> {\n    await this.createQRCode()\n  }\n\n  protected isValidQrCodeText(data: string | null): boolean {\n    if (this.allowEmptyString === false) {\n      return !(\n        typeof data === \"undefined\" ||\n        data === \"\" ||\n        data === \"null\" ||\n        data === null\n      )\n    }\n    return !(typeof data === \"undefined\")\n  }\n\n  private toDataURL(qrCodeConfig: QRCodeToDataURLOptions): Promise<FixMeLater> {\n    return new Promise(\n      (\n        resolve: (arg: FixMeLater) => FixMeLater,\n        reject: (arg: FixMeLater) => FixMeLater\n      ) => {\n        toDataURL(\n          this.qrdata,\n          qrCodeConfig,\n          (err: Error | null | undefined, url: string) => {\n            if (err) {\n              reject(err)\n            } else {\n              resolve(url)\n            }\n          }\n        )\n      }\n    )\n  }\n\n  private toCanvas(\n    canvas: HTMLCanvasElement,\n    qrCodeConfig: QRCodeRenderersOptions\n  ): Promise<FixMeLater> {\n    return new Promise(\n      (\n        resolve: (arg: FixMeLater) => FixMeLater,\n        reject: (arg: FixMeLater) => FixMeLater\n      ) => {\n        toCanvas(\n          canvas,\n          this.qrdata,\n          qrCodeConfig,\n          (error: Error | null | undefined) => {\n            if (error) {\n              reject(error)\n            } else {\n              resolve(\"success\")\n            }\n          }\n        )\n      }\n    )\n  }\n\n  private toSVG(qrCodeConfig: QRCodeToStringOptions): Promise<FixMeLater> {\n    return new Promise(\n      (\n        resolve: (arg: FixMeLater) => FixMeLater,\n        reject: (arg: FixMeLater) => FixMeLater\n      ) => {\n        toString(\n          this.qrdata,\n          qrCodeConfig,\n          (err: Error | null | undefined, url: string) => {\n            if (err) {\n              reject(err)\n            } else {\n              resolve(url)\n            }\n          }\n        )\n      }\n    )\n  }\n\n  private renderElement(element: Element): void {\n    for (const node of this.qrcElement.nativeElement.childNodes) {\n      this.renderer.removeChild(this.qrcElement.nativeElement, node)\n    }\n    this.renderer.appendChild(this.qrcElement.nativeElement, element)\n  }\n\n  private async createQRCode(): Promise<void> {\n    // Set sensitive defaults\n    if (this.version && this.version > 40) {\n      console.warn(\"[angularx-qrcode] max value for `version` is 40\")\n      this.version = 40\n    } else if (this.version && this.version < 1) {\n      console.warn(\"[angularx-qrcode]`min value for `version` is 1\")\n      this.version = 1\n    } else if (this.version !== undefined && isNaN(this.version)) {\n      console.warn(\n        \"[angularx-qrcode] version should be a number, defaulting to auto.\"\n      )\n      this.version = undefined\n    }\n\n    try {\n      if (!this.isValidQrCodeText(this.qrdata)) {\n        throw new Error(\n          \"[angularx-qrcode] Field `qrdata` is empty, set 'allowEmptyString=\\\"true\\\"' to overwrite this behaviour.\"\n        )\n      }\n\n      // This is a workaround to allow an empty string as qrdata\n      if (this.isValidQrCodeText(this.qrdata) && this.qrdata === \"\") {\n        this.qrdata = \" \"\n      }\n\n      const config: QRCodeConfigType = {\n        color: {\n          dark: this.colorDark,\n          light: this.colorLight,\n        },\n        errorCorrectionLevel: this.errorCorrectionLevel,\n        margin: this.margin,\n        scale: this.scale,\n        version: this.version,\n        width: this.width,\n      }\n\n      const centerImageSrc = this.imageSrc\n      const centerImageHeight = this.imageHeight || 40\n      const centerImageWidth = this.imageWidth || 40\n\n      switch (this.elementType) {\n        case \"canvas\": {\n          const canvasElement: HTMLCanvasElement =\n            this.renderer.createElement(\"canvas\")\n          this.context = canvasElement.getContext(\"2d\")\n          this.toCanvas(canvasElement, config)\n            .then(() => {\n              if (this.ariaLabel) {\n                this.renderer.setAttribute(\n                  canvasElement,\n                  \"aria-label\",\n                  `${this.ariaLabel}`\n                )\n              }\n              if (this.title) {\n                this.renderer.setAttribute(\n                  canvasElement,\n                  \"title\",\n                  `${this.title}`\n                )\n              }\n\n              if (centerImageSrc && this.context) {\n                this.centerImage = new Image(\n                  centerImageWidth,\n                  centerImageHeight\n                )\n\n                if (centerImageSrc !== this.centerImage.src) {\n                  this.centerImage.crossOrigin = \"anonymous\"\n                  this.centerImage.src = centerImageSrc\n                }\n\n                if (centerImageHeight !== this.centerImage.height) {\n                  this.centerImage.height = centerImageHeight\n                }\n\n                if (centerImageWidth !== this.centerImage.width) {\n                  this.centerImage.width = centerImageWidth\n                }\n\n                const centerImage = this.centerImage\n\n                if (centerImage) {\n                  centerImage.onload = () => {\n                    this.context?.drawImage(\n                      centerImage,\n                      canvasElement.width / 2 - centerImageWidth / 2,\n                      canvasElement.height / 2 - centerImageHeight / 2,\n                      centerImageWidth,\n                      centerImageHeight\n                    )\n                  }\n                }\n              }\n\n              this.renderElement(canvasElement)\n              this.emitQRCodeURL(canvasElement as HTMLCanvasElement)\n            })\n            .catch((e) => {\n              console.error(\"[angularx-qrcode] canvas error:\", e)\n            })\n          break\n        }\n        case \"svg\": {\n          const svgParentElement: HTMLElement =\n            this.renderer.createElement(\"div\")\n          this.toSVG(config)\n            .then((svgString: string) => {\n              this.renderer.setProperty(\n                svgParentElement,\n                \"innerHTML\",\n                svgString\n              )\n              const svgElement = svgParentElement.firstChild as SVGSVGElement\n              this.renderer.setAttribute(svgElement, \"height\", `${this.width}`)\n              this.renderer.setAttribute(svgElement, \"width\", `${this.width}`)\n              this.renderElement(svgElement)\n              this.emitQRCodeURL(svgElement)\n            })\n            .catch((e) => {\n              console.error(\"[angularx-qrcode] svg error:\", e)\n            })\n          break\n        }\n        case \"url\":\n        case \"img\":\n        default: {\n          const imgElement: HTMLImageElement =\n            this.renderer.createElement(\"img\")\n          this.toDataURL(config)\n            .then((dataUrl: string) => {\n              if (this.alt) {\n                imgElement.setAttribute(\"alt\", this.alt)\n              }\n              if (this.ariaLabel) {\n                imgElement.setAttribute(\"aria-label\", this.ariaLabel)\n              }\n              imgElement.setAttribute(\"src\", dataUrl)\n              if (this.title) {\n                imgElement.setAttribute(\"title\", this.title)\n              }\n              this.renderElement(imgElement)\n              this.emitQRCodeURL(imgElement)\n            })\n            .catch((e) => {\n              console.error(\"[angularx-qrcode] img/url error:\", e)\n            })\n        }\n      }\n    } catch (e: FixMeLater) {\n      console.error(\"[angularx-qrcode] Error generating QR Code:\", e.message)\n    }\n  }\n\n  convertBase64ImageUrlToBlob(base64ImageUrl: string) {\n    // split into two parts\n    const parts = base64ImageUrl.split(\";base64,\")\n    // hold the content/mime type f.e. image/png\n    const imageType = parts[0].split(\":\")[1]\n    // decode base64 string\n    const decodedData = atob(parts[1])\n    // create unit8array of size same as row data length\n    const uInt8Array = new Uint8Array(decodedData.length)\n    // insert all character code into uint8array\n    for (let i = 0; i < decodedData.length; ++i) {\n      uInt8Array[i] = decodedData.charCodeAt(i)\n    }\n    // return blob image after conversion\n    return new Blob([uInt8Array], { type: imageType })\n  }\n\n  emitQRCodeURL(element: HTMLCanvasElement | HTMLImageElement | SVGSVGElement) {\n    const className = element.constructor.name\n    if (className === SVGSVGElement.name) {\n      const svgHTML = element.outerHTML\n      const blob = new Blob([svgHTML], { type: \"image/svg+xml\" })\n      const urlSvg = URL.createObjectURL(blob)\n      const urlSanitized = this.sanitizer.bypassSecurityTrustUrl(urlSvg)\n      this.qrCodeURL.emit(urlSanitized)\n      return\n    }\n\n    let urlImage = \"\"\n\n    if (className === HTMLCanvasElement.name) {\n      urlImage = (element as HTMLCanvasElement).toDataURL(\"image/png\")\n    }\n\n    if (className === HTMLImageElement.name) {\n      urlImage = (element as HTMLImageElement).src\n    }\n\n    const blobData: Blob = this.convertBase64ImageUrlToBlob(urlImage)\n    const urlBlob = URL.createObjectURL(blobData)\n    const urlSanitized = this.sanitizer.bypassSecurityTrustUrl(urlBlob)\n    this.qrCodeURL.emit(urlSanitized)\n  }\n}\n","/*\n * Public API Surface of angularx-qrcode\n */\n\nexport { QRCodeComponent } from \"./lib/angularx-qrcode.component\"\nexport * from \"./lib/types\"\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}