UNPKG

ng-qrcode

Version:

Simple AOT compatible QR code generator for your Angular project.

1 lines 15.3 kB
{"version":3,"file":"ng-qrcode.mjs","sources":["../../../projects/ng-qrcode/src/lib/qr-code.directive.ts","../../../projects/ng-qrcode/src/lib/qr-code.component.ts","../../../projects/ng-qrcode/src/lib/qr-code.module.ts","../../../projects/ng-qrcode/src/public-api.ts","../../../projects/ng-qrcode/src/ng-qrcode.ts"],"sourcesContent":["import { Directive, Input, isDevMode, OnChanges, ViewContainerRef } from \"@angular/core\"\nimport qrcode from \"qrcode\"\nimport { QrCodeErrorCorrectionLevel, QRCodeMaskPattern, RGBAColor } from \"./types\"\n\nconst validColorRegex = /^#(?:[0-9a-fA-F]{3,4}){1,2}$/\n\nconst validNumberRegex = /^[0-9.]+$/\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: `canvas[qrCode]`,\n standalone: true,\n})\nexport class QrCodeDirective implements OnChanges {\n\n static readonly DEFAULT_ERROR_CORRECTION_LEVEL: QrCodeErrorCorrectionLevel = \"M\"\n static readonly DEFAULT_CENTER_IMAGE_SIZE = 40\n\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input(\"qrCode\") value!: string\n\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input(\"qrCodeVersion\") version?: number\n\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input(\"qrCodeErrorCorrectionLevel\") errorCorrectionLevel?: QrCodeErrorCorrectionLevel = QrCodeDirective.DEFAULT_ERROR_CORRECTION_LEVEL\n\n @Input() width?: number | string\n @Input() height?: number | string\n @Input() darkColor?: RGBAColor = \"#000000FF\"\n @Input() lightColor?: RGBAColor = \"#FFFFFFFF\"\n\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input(\"qrCodeCenterImageSrc\") centerImageSrc?: string\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input(\"qrCodeCenterImageWidth\") centerImageWidth?: number | string\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input(\"qrCodeCenterImageHeight\") centerImageHeight?: number | string\n\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input(\"qrCodeMargin\") margin?: number = 16\n\n @Input()\n qrScale?: number | undefined\n\n @Input()\n qrCodeMaskPattern?: QRCodeMaskPattern | undefined\n\n private centerImage?: HTMLImageElement\n\n constructor(\n // eslint-disable-next-line @angular-eslint/prefer-inject\n private viewContainerRef: ViewContainerRef,\n ) {\n }\n\n async ngOnChanges() {\n if (!this.value) {\n return\n }\n\n if (this.version && this.version > 40) {\n console.warn(\"[qrCode] max version is 40, clamping\")\n this.version = 40\n } else if (this.version && this.version < 1) {\n console.warn(\"[qrCode] min version is 1, clamping\")\n this.version = 1\n } else if (this.version !== undefined && isNaN(this.version)) {\n console.warn(\"[qrCode] version should be set to a number, defaulting to auto\")\n this.version = undefined\n }\n\n const canvas = this.viewContainerRef.element.nativeElement as HTMLCanvasElement | null\n\n if (!canvas) {\n // native element not available on server side rendering\n return\n }\n\n const context = canvas.getContext(\"2d\")\n\n if (context) {\n context.clearRect(0, 0, context.canvas.width, context.canvas.height)\n }\n\n const errorCorrectionLevel = this.errorCorrectionLevel ?? QrCodeDirective.DEFAULT_ERROR_CORRECTION_LEVEL\n\n const dark = this.darkColor && validColorRegex.test(this.darkColor) ? this.darkColor : undefined\n const light = this.lightColor && validColorRegex.test(this.lightColor) ? this.lightColor : undefined\n\n if (isDevMode()) {\n if (!dark && this.darkColor) {\n console.error(\"[ng-qrcode] darkColor set to invalid value, must be RGBA hex color string, eg: #3050A1FF\")\n }\n\n if (!light && this.lightColor) {\n console.error(\"[ng-qrcode] lightColor set to invalid value, must be RGBA hex color string, eg: #3050A130\")\n }\n }\n\n await qrcode\n .toCanvas(canvas, this.value, {\n version: this.version,\n errorCorrectionLevel,\n width: getOptionalInt(this.width),\n margin: this.margin,\n scale: this.qrScale,\n maskPattern: this.qrCodeMaskPattern,\n color: {\n dark,\n light,\n },\n })\n\n const centerImageSrc = this.centerImageSrc\n const centerImageWidth = getIntOrDefault(this.centerImageWidth, QrCodeDirective.DEFAULT_CENTER_IMAGE_SIZE)\n const centerImageHeight = getIntOrDefault(this.centerImageHeight, QrCodeDirective.DEFAULT_CENTER_IMAGE_SIZE)\n\n if (centerImageSrc && context) {\n\n if (!this.centerImage) {\n this.centerImage = new Image(centerImageWidth, centerImageHeight)\n }\n\n const centerImage = this.centerImage\n\n if (centerImageSrc !== this.centerImage.src) {\n centerImage.src = centerImageSrc\n }\n\n if (centerImageWidth !== this.centerImage.width) {\n centerImage.width = centerImageWidth\n }\n\n if (centerImageHeight !== this.centerImage.height) {\n centerImage.height = centerImageHeight\n }\n\n const doDrawImage = () => {\n context.drawImage(\n centerImage,\n canvas.width / 2 - centerImageWidth / 2,\n canvas.height / 2 - centerImageHeight / 2, centerImageWidth, centerImageHeight,\n )\n }\n\n centerImage.onload = doDrawImage\n\n if (centerImage.complete) {\n doDrawImage()\n }\n\n }\n\n }\n\n}\n\nexport function getOptionalInt(value: string | number): number;\nexport function getOptionalInt(value: string | number | undefined): number | undefined;\nexport function getOptionalInt(value: string | number | undefined): number | undefined {\n if (value === undefined || value === \"\") {\n return undefined\n }\n\n if (typeof value === \"string\") {\n\n if (!validNumberRegex.test(value)) {\n throw new Error(`'${ value }' is not a valid number`)\n }\n\n return parseFloat(value)\n }\n\n return value\n}\n\nexport function getIntOrDefault(value: string | number | undefined, defaultValue: number): number {\n if (value === undefined || value === \"\") {\n return defaultValue\n }\n\n return getOptionalInt(value)\n}\n","import { CommonModule } from \"@angular/common\"\nimport { Component, Input } from \"@angular/core\"\nimport { QrCodeDirective } from \"./qr-code.directive\"\nimport { QrCodeErrorCorrectionLevel, QRCodeMaskPattern, RGBAColor } from \"./types\"\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: \"qr-code\",\n template: `\n @if (value) {\n <canvas\n [qrCode]=\"value\"\n [qrCodeErrorCorrectionLevel]=\"errorCorrectionLevel\"\n [qrCodeCenterImageSrc]=\"centerImageSrc\"\n [qrCodeCenterImageWidth]=\"centerImageSize\"\n [qrCodeCenterImageHeight]=\"centerImageSize\"\n [qrCodeMargin]=\"margin\"\n [qrScale]=\"scale\"\n [qrCodeMaskPattern]=\"maskPattern\"\n [width]=\"size\"\n [height]=\"size\"\n [class]=\"styleClass\"\n [ngStyle]=\"style\"\n [darkColor]=\"darkColor\"\n [lightColor]=\"lightColor\"\n >\n </canvas>\n }\n `,\n styles: [],\n standalone: true,\n imports: [QrCodeDirective, CommonModule]\n})\nexport class QrCodeComponent {\n\n @Input()\n value?: string\n\n @Input()\n size?: string | number\n\n @Input()\n style?: {\n // matches type of ngStyle https://angular.io/api/common/NgStyle\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [klass: string]: any\n } | null\n\n @Input()\n styleClass?: string\n\n @Input()\n darkColor?: RGBAColor\n\n @Input()\n lightColor?: RGBAColor\n\n @Input()\n errorCorrectionLevel?: QrCodeErrorCorrectionLevel\n\n @Input()\n centerImageSrc?: string\n\n @Input()\n centerImageSize?: string | number\n\n @Input()\n margin?: number\n\n @Input()\n scale?: number\n\n @Input()\n maskPattern?: QRCodeMaskPattern\n}\n","import { CommonModule } from \"@angular/common\"\nimport { NgModule } from \"@angular/core\"\nimport { QrCodeComponent } from \"./qr-code.component\"\nimport { QrCodeDirective } from \"./qr-code.directive\"\n\n/**\n * @deprecated prefer importing `QrCodeComponent` or `QrCodeDirective` directly\n */\n@NgModule({\n declarations: [\n ],\n imports: [\n CommonModule,\n QrCodeComponent,\n QrCodeDirective,\n ],\n exports: [\n QrCodeComponent,\n QrCodeDirective,\n ],\n})\nexport class QrCodeModule {\n}\n","/*\n * Public API Surface of ng-qrcode\n */\n\nexport * from \"./lib/qr-code.component\"\nexport * from \"./lib/qr-code.directive\"\nexport * from './lib/qr-code.module'\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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"}