UNPKG

react-qrcode-pretty

Version:

Qrcode generator for react apps with many customization options

1 lines 36.5 kB
{"version":3,"sources":["../src/index.ts","../src/QrcodeCanvas.tsx","../src/helpers.ts","../src/rectangleCanvas.ts","../src/QrcodeSVG.tsx","../src/rectanglePath.ts"],"sourcesContent":["import download from 'downloadjs';\r\nimport { useState } from 'react';\r\n\r\nexport { default as QrcodeCanvas } from './QrcodeCanvas';\r\nexport { default as QrcodeSVG } from './QrcodeSVG';\r\n\r\n/**\r\n * React Hook to download Qrcode Type\r\n * @returns [ setQrcode, download, isReady ]\r\n */\r\nexport type UseQrcodeDownload = [\r\n (QrcodeRef: HTMLCanvasElement | SVGSVGElement) => void,\r\n (fileName: string) => void,\r\n boolean\r\n];\r\n\r\n/**\r\n * React Hook to download Qrcode Canvas (PNG) or SVG\r\n * @param [suffix=''] add a suffix to the file name to download\r\n * @returns [ setQrcode, download, isReady ]\r\n */\r\nexport function useQrcodeDownload(suffix: string = ''): UseQrcodeDownload {\r\n\r\n const [qrcode, setQrcode] = useState<HTMLCanvasElement | SVGSVGElement | null>(null);\r\n const isCanvas: boolean = qrcode instanceof HTMLCanvasElement;\r\n\r\n return [\r\n setQrcode,\r\n (fileName: string) => {\r\n if (qrcode) download(\r\n isCanvas ? (qrcode as HTMLCanvasElement).toDataURL('image/png') : new Blob([qrcode.outerHTML], { type: \"image/svg+xml;charset=utf-8\" }),\r\n fileName + suffix + (isCanvas ? '.png' : '.svg'),\r\n isCanvas ? 'image/png' : 'image/svg+xml'\r\n )\r\n },\r\n qrcode !== null\r\n ];\r\n\r\n}\r\n\r\nexport type {\r\n QrcodeColor,\r\n QrcodeColorEffect,\r\n QrcodeElement,\r\n QrcodeFormat,\r\n QrcodeImageSettings,\r\n QrcodePart,\r\n QrcodePartOption,\r\n QrcodeProps,\r\n QrcodeRadius,\r\n QrcodeRadiusEdge,\r\n QrcodeRectangleProps,\r\n QrcodeStyle,\r\n QrcodeWrapped\r\n} from './types';\r\n\r\n","import qrcodeGenerator from 'qrcode-generator';\r\nimport { useEffect, useRef } from 'react';\r\n\r\nimport canvasRectangle from './rectangleCanvas';\r\n\r\nimport {\r\n getColor,\r\n qrcodeData,\r\n qrCodeStyleRadius\r\n} from './helpers';\r\n\r\nimport type {\r\n QrcodeImageSettings,\r\n QrcodePartOption,\r\n QrcodeProps,\r\n QrcodeRectangleProps,\r\n QrcodeWrapped\r\n} from './types';\r\n\r\n/**\r\n * Qrcode React Component\r\n * @author Guilherme Neves <guilhermeasn@yahoo.com.br>\r\n */\r\nexport function QrcodeCanvas(props: QrcodeProps<'canvas'>) {\r\n\r\n const canvas = useRef<HTMLCanvasElement>(null);\r\n\r\n const qrcode: QRCode = qrcodeGenerator(props.modules ?? 0, props.level ?? (props.image ? 'H' : 'M'));\r\n qrcode.addData(props.value ?? '', props.mode);\r\n qrcode.make();\r\n\r\n const modules: number = qrcode.getModuleCount();\r\n\r\n const {\r\n margin, padding, space, moduleSize,\r\n qrcodeSize, moduleEyeStart, moduleEyeEnd,\r\n variant, color, colorEffect, imagem\r\n } = qrcodeData(props, modules);\r\n\r\n useEffect(() => {\r\n\r\n if (!canvas.current) return;\r\n\r\n const context = canvas.current.getContext('2d');\r\n if (!context) return;\r\n\r\n context.clearRect(0, 0, space + qrcodeSize, space + qrcodeSize);\r\n\r\n canvasRectangle(context, {\r\n height: padding * 2 + qrcodeSize,\r\n width: padding * 2 + qrcodeSize,\r\n positionX: margin,\r\n positionY: margin,\r\n fill: props.bgColor ?? '#FFF',\r\n radius: props.bgRounded ? 10 : undefined\r\n });\r\n\r\n for (let row = 0; row < modules; row++) {\r\n\r\n for (let col = 0; col < modules; col++) {\r\n\r\n if (!qrcode.isDark(row, col)) continue;\r\n\r\n let key: QrcodePartOption = (\r\n (col < moduleEyeStart && row < moduleEyeStart) ||\r\n (col < moduleEyeStart && row > moduleEyeEnd) ||\r\n (col > moduleEyeEnd && row < moduleEyeStart)\r\n ) ? 'eyes' : 'body';\r\n\r\n let changer: Partial<QrcodeRectangleProps> = {\r\n stroke: key === 'body' && props.divider ? (props.bgColor ?? '#FFF') : null\r\n };\r\n\r\n const wrapped: QrcodeWrapped = {\r\n row: {\r\n before: row > 0 ? qrcode.isDark(row - 1, col) : false,\r\n after: row < modules - 1 ? qrcode.isDark(row + 1, col) : false\r\n },\r\n col: {\r\n before: col > 0 ? qrcode.isDark(row, col - 1) : false,\r\n after: col < modules - 1 ? qrcode.isDark(row, col + 1) : false\r\n }\r\n };\r\n\r\n changer.radius = qrCodeStyleRadius(\r\n variant[key],\r\n moduleSize,\r\n modules,\r\n wrapped,\r\n row,\r\n col,\r\n key\r\n );\r\n\r\n canvasRectangle(context, {\r\n positionX: col * moduleSize + margin + padding,\r\n positionY: row * moduleSize + margin + padding,\r\n height: moduleSize,\r\n width: moduleSize,\r\n fill: getColor(color[key], colorEffect[key], col, row),\r\n ...changer\r\n });\r\n\r\n }\r\n\r\n }\r\n\r\n if (imagem) addImage(\r\n context, imagem, modules,\r\n moduleSize, margin, padding,\r\n props.bgColor\r\n );\r\n\r\n if (typeof props.onReady === 'function') {\r\n props.onReady(canvas.current);\r\n }\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [props]);\r\n\r\n return <canvas\r\n {...props.internalProps}\r\n ref={canvas}\r\n width={qrcodeSize + space}\r\n height={qrcodeSize + space}\r\n >{props.children}</canvas>;\r\n\r\n}\r\n\r\nfunction addImage(context: CanvasRenderingContext2D, imageSet: QrcodeImageSettings, modules: number, moduleSize: number, margin: number, padding: number, bgColor?: string) {\r\n const image = new Image();\r\n image.src = imageSet.src;\r\n image.onload = () => {\r\n const size = Math.floor(modules * moduleSize / 5);\r\n const position = size * 2 + margin + padding;\r\n if (!imageSet.overlap) canvasRectangle(context, {\r\n height: imageSet.height ?? size,\r\n width: imageSet.width ?? size,\r\n positionX: imageSet.positionX ?? position,\r\n positionY: imageSet.positionY ?? position,\r\n fill: bgColor ?? '#FFF',\r\n });\r\n context.drawImage(\r\n image,\r\n imageSet.positionX ?? position,\r\n imageSet.positionY ?? position,\r\n imageSet.width ?? size,\r\n imageSet.height ?? size\r\n );\r\n }\r\n}\r\n\r\nexport default QrcodeCanvas;\r\n","import { QrcodeColor, QrcodeColorEffect, QrcodeImageSettings, QrcodePart, QrcodePartOption, QrcodeProps, QrcodeRadius, QrcodeRadiusEdge, QrcodeStyle, QrcodeWrapped } from \"./types\";\r\n\r\ntype ColorRGB = {\r\n r: number;\r\n g: number;\r\n b: number;\r\n}\r\n\r\ntype ColorLevel = (\r\n | 'light'\r\n | 'medium'\r\n | 'dark'\r\n);\r\n\r\nfunction colorHexToRGB(hex: string): ColorRGB {\r\n\r\n hex = hex.replace(/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i, (_, r, g, b) => (\r\n r + r + g + g + b + b\r\n ));\r\n\r\n const result = /([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n\r\n return result ? {\r\n r: parseInt(result[1], 16),\r\n g: parseInt(result[2], 16),\r\n b: parseInt(result[3], 16)\r\n } : { r: 0, g: 0, b: 0 };\r\n\r\n}\r\n\r\nfunction colorRGBtoHex({ r, g, b }: ColorRGB): string {\r\n return \"#\" + ((1 << 24) | (r << 16) | (g << 8) | b).toString(16).slice(1);\r\n}\r\n\r\nfunction colorGradient(color: string, level: number): string {\r\n\r\n const rgb = colorHexToRGB(color);\r\n\r\n for (let k in rgb) {\r\n rgb[k as keyof ColorRGB] += level;\r\n if (rgb[k as keyof ColorRGB] > 255) rgb[k as keyof ColorRGB] = 255;\r\n if (rgb[k as keyof ColorRGB] < 0) rgb[k as keyof ColorRGB] = 0;\r\n }\r\n\r\n return colorRGBtoHex(rgb);\r\n\r\n}\r\n\r\nfunction getShadeColor(colorBase: string): string {\r\n const { r, g, b } = colorHexToRGB(colorBase);\r\n const max = Math.min(r, g, b);\r\n const random = getRandomInt(0, max);\r\n return colorRGBtoHex({ r: r - random, g: g - random, b: b - random });\r\n}\r\n\r\nfunction colorLevel(color: string): ColorLevel {\r\n const sum: number = Object.values(colorHexToRGB(color)).reduce((t, c) => t + c, 0);\r\n return sum > 510 ? 'light' : sum > 255 ? 'medium' : 'dark';\r\n}\r\n\r\nfunction getRandomInt(min: number, max: number): number {\r\n return Math.floor(Math.random() * (max - min + 1)) + min;\r\n}\r\n\r\nexport function getRandomColor(colorBase: string): string {\r\n const level = colorLevel(colorBase);\r\n const min: number = level === 'dark' ? 0 : level === 'medium' ? 63 : 127;\r\n const max: number = level === 'dark' ? 127 : level === 'medium' ? 191 : 255;\r\n return colorRGBtoHex({ r: getRandomInt(min, max), g: getRandomInt(min, max), b: getRandomInt(min, max) });\r\n}\r\n\r\nfunction qrCodePartNormalize<T>(defaultReturn: T, part: undefined | null | T | QrcodePart<T>): QrcodePart<T> {\r\n\r\n return (part\r\n && typeof part === 'object'\r\n && 'eyes' in part\r\n && 'body' in part\r\n ) ? part : {\r\n eyes: part ?? defaultReturn,\r\n body: part ?? defaultReturn\r\n };\r\n\r\n}\r\n\r\nfunction qrCodeImageNormalize(imageSet?: string | QrcodeImageSettings): QrcodeImageSettings | null {\r\n if (imageSet && typeof imageSet === 'object') return imageSet;\r\n if (typeof imageSet === 'string') return { src: imageSet };\r\n return null;\r\n}\r\n\r\nexport function qrCodeRadiusNormalize(radius?: QrcodeRadius): Required<QrcodeRadiusEdge> {\r\n return (typeof radius === 'number' || !radius) ? {\r\n top_left: radius ?? 0, top_right: radius ?? 0,\r\n bottom_left: radius ?? 0, bottom_right: radius ?? 0\r\n } : {\r\n top_left: 0, top_right: 0,\r\n bottom_left: 0, bottom_right: 0,\r\n ...radius\r\n }\r\n}\r\n\r\nexport function qrCodeStyleRadius(\r\n variant: QrcodeStyle,\r\n moduleSize: number,\r\n modules: number,\r\n wrapped: QrcodeWrapped,\r\n row: number,\r\n col: number,\r\n key: QrcodePartOption\r\n): QrcodeRadius {\r\n\r\n const radius = moduleSize / 1.6;\r\n\r\n switch (variant) {\r\n\r\n case 'dots': return radius;\r\n\r\n case 'rounded': return moduleSize / 2;\r\n\r\n case 'circle': return {\r\n top_left: !wrapped.col.before && !wrapped.row.before && wrapped.col.after && wrapped.row.after ? moduleSize * 1.35 : 0,\r\n top_right: wrapped.col.before && !wrapped.row.before && !wrapped.col.after && wrapped.row.after ? moduleSize * 1.35 : 0,\r\n bottom_left: !wrapped.col.before && wrapped.row.before && wrapped.col.after && !wrapped.row.after ? moduleSize * 1.35 : 0,\r\n bottom_right: wrapped.col.before && wrapped.row.before && !wrapped.col.after && !wrapped.row.after ? moduleSize * 1.35 : 0\r\n };\r\n\r\n case 'fluid': return {\r\n top_right: !wrapped.col.after && !wrapped.row.before ? radius : 0,\r\n top_left: !wrapped.col.before && !wrapped.row.before ? radius : 0,\r\n bottom_right: !wrapped.col.after && !wrapped.row.after ? radius : 0,\r\n bottom_left: !wrapped.col.before && !wrapped.row.after ? radius : 0\r\n };\r\n\r\n case 'reverse': return {\r\n top_right: wrapped.col.after && wrapped.row.before ? radius : 0,\r\n top_left: wrapped.col.before && wrapped.row.before ? radius : 0,\r\n bottom_right: wrapped.col.after && wrapped.row.after ? radius : 0,\r\n bottom_left: wrapped.col.before && wrapped.row.after ? radius : 0\r\n };\r\n\r\n\r\n case 'morse': return !wrapped.col.before && !wrapped.col.after ? radius : {\r\n top_left: !wrapped.col.before ? radius : 0,\r\n bottom_left: !wrapped.col.before ? radius : 0,\r\n top_right: !wrapped.col.after ? radius : 0,\r\n bottom_right: !wrapped.col.after ? radius : 0\r\n };\r\n\r\n\r\n case 'shower': return !wrapped.row.before && !wrapped.row.after ? radius : {\r\n top_left: !wrapped.row.before ? radius : 0,\r\n top_right: !wrapped.row.before ? radius : 0,\r\n bottom_left: !wrapped.row.after ? radius : 0,\r\n bottom_right: !wrapped.row.after ? radius : 0\r\n };\r\n\r\n case 'gravity':\r\n const half = Math.floor(modules / 2);\r\n return {\r\n top_right: !wrapped.col.after && !wrapped.row.before && !(row > half && col < half) ? radius : 0,\r\n top_left: !wrapped.col.before && !wrapped.row.before && !(row > half && col > half) ? radius : 0,\r\n bottom_right: !wrapped.col.after && !wrapped.row.after && !(row < half && col < half) ? radius : 0,\r\n bottom_left: !wrapped.col.before && !wrapped.row.after && !(row < half && col > half) ? radius : 0\r\n };\r\n\r\n case 'italic': return {\r\n top_right: 0,\r\n top_left: !wrapped.col.before && !wrapped.row.before ? (key === 'eyes' ? moduleSize * 1.2 : radius) : 0,\r\n bottom_right: !wrapped.col.after && !wrapped.row.after ? (key === 'eyes' ? moduleSize * 1.2 : radius) : 0,\r\n bottom_left: 0\r\n }\r\n\r\n case 'inclined': return {\r\n top_right: !wrapped.col.after && !wrapped.row.before ? (key === 'eyes' ? moduleSize * 1.2 : radius) : 0,\r\n top_left: 0,\r\n bottom_right: 0,\r\n bottom_left: !wrapped.col.before && !wrapped.row.after ? (key === 'eyes' ? moduleSize * 1.2 : radius) : 0\r\n }\r\n\r\n default: return 0;\r\n\r\n }\r\n\r\n}\r\n\r\nexport function getColor(color: QrcodeColor, effect: QrcodeColorEffect, col: number, row: number): QrcodeColor {\r\n\r\n switch (effect) {\r\n\r\n case 'gradient-dark-vertical': return colorGradient(color, row * -3);\r\n case 'gradient-dark-horizontal': return colorGradient(color, col * -3);\r\n case 'gradient-dark-diagonal': return colorGradient(color, (col + row) * -2);\r\n case 'gradient-light-vertical': return colorGradient(color, row * 3);\r\n case 'gradient-light-horizontal': return colorGradient(color, col * 3);\r\n case 'gradient-light-diagonal': return colorGradient(color, (col + row) * 2);\r\n\r\n case 'shades': return getShadeColor(color);\r\n case 'colored': return getRandomColor(color);\r\n\r\n default: return color;\r\n\r\n }\r\n\r\n}\r\n\r\nexport async function loadImageAsBase64(src: string): Promise<string> {\r\n const response = await fetch(src);\r\n const blob = await response.blob();\r\n return new Promise((resolve) => {\r\n const reader = new FileReader();\r\n reader.onloadend = () => resolve(reader.result as string);\r\n reader.readAsDataURL(blob);\r\n });\r\n}\r\n\r\nexport function qrcodeData(props : QrcodeProps<any>, modules: number) {\r\n\r\n const margin: number = Math.floor(props.margin ?? 0);\r\n const padding: number = Math.floor(props.padding ?? 0);\r\n const space: number = (margin + padding) * 2;\r\n const moduleSize: number = Math.floor((props.size ?? modules * 10) / modules);\r\n const qrcodeSize: number = modules * moduleSize;\r\n const moduleEyeStart: number = 7;\r\n const moduleEyeEnd: number = modules - moduleEyeStart - 1;\r\n const variant: QrcodePart<QrcodeStyle> = qrCodePartNormalize<QrcodeStyle>('standard', props.variant);\r\n const color: QrcodePart<QrcodeColor> = qrCodePartNormalize<QrcodeColor>('#000', props.color);\r\n const colorEffect: QrcodePart<QrcodeColorEffect> = qrCodePartNormalize<QrcodeColorEffect>('none', props.colorEffect);\r\n const imagem: QrcodeImageSettings | null = qrCodeImageNormalize(props.image);\r\n \r\n return {\r\n margin, padding, space, moduleSize,\r\n qrcodeSize, moduleEyeStart, moduleEyeEnd,\r\n variant, color, colorEffect, imagem\r\n }\r\n\r\n}\r\n","import { qrCodeRadiusNormalize } from \"./helpers\";\r\nimport type { QrcodeRectangleProps } from \"./types\";\r\n\r\nexport default function rectangleCanvas(context: CanvasRenderingContext2D, props: QrcodeRectangleProps) {\r\n\r\n const radius = qrCodeRadiusNormalize(props.radius);\r\n\r\n context.beginPath();\r\n\r\n context.moveTo(props.positionX + radius.top_left, props.positionY);\r\n\r\n context.lineTo(props.positionX + props.width - radius.top_right, props.positionY);\r\n context.quadraticCurveTo(props.positionX + props.width, props.positionY, props.positionX + props.width, props.positionY + radius.top_right);\r\n\r\n context.lineTo(props.positionX + props.width, props.positionY + props.height - radius.bottom_right);\r\n context.quadraticCurveTo(props.positionX + props.width, props.positionY + props.height, props.positionX + props.width - radius.bottom_right, props.positionY + props.height);\r\n\r\n context.lineTo(props.positionX + radius.bottom_left, props.positionY + props.height);\r\n context.quadraticCurveTo(props.positionX, props.positionY + props.height, props.positionX, props.positionY + props.height - radius.bottom_left);\r\n\r\n context.lineTo(props.positionX, props.positionY + radius.top_left);\r\n context.quadraticCurveTo(props.positionX, props.positionY, props.positionX + radius.top_left, props.positionY);\r\n\r\n if (props.fill) {\r\n context.fillStyle = props.fill;\r\n context.fill();\r\n }\r\n\r\n if (props.stroke) {\r\n context.strokeStyle = props.stroke;\r\n context.stroke();\r\n }\r\n\r\n context.closePath();\r\n\r\n}","import qrcodeGenerator from 'qrcode-generator';\r\nimport React, { JSX, useEffect, useRef } from 'react';\r\n\r\nimport rectanglePath from './rectanglePath';\r\n\r\nimport {\r\n getColor,\r\n loadImageAsBase64,\r\n qrcodeData,\r\n qrCodeStyleRadius\r\n} from './helpers';\r\n\r\nimport type {\r\n QrcodeImageSettings,\r\n QrcodePartOption,\r\n QrcodeProps,\r\n QrcodeWrapped\r\n} from './types';\r\n\r\n/**\r\n * Qrcode React Component\r\n * @author Guilherme Neves <guilhermeasn@yahoo.com.br>\r\n */\r\nexport function QrcodeSvg(props: QrcodeProps<'SVG'>) {\r\n\r\n const SVG = useRef<SVGSVGElement>(null);\r\n\r\n const qrcode: QRCode = qrcodeGenerator(props.modules ?? 0, props.level ?? (props.image ? 'H' : 'M'));\r\n qrcode.addData(props.value ?? '', props.mode);\r\n qrcode.make();\r\n\r\n const modules: number = qrcode.getModuleCount();\r\n\r\n const {\r\n margin, padding, space, moduleSize,\r\n qrcodeSize, moduleEyeStart, moduleEyeEnd,\r\n variant, color, colorEffect, imagem\r\n } = qrcodeData(props, modules);\r\n\r\n const rects: JSX.Element[] = [];\r\n\r\n for (let row = 0; row < modules; row++) {\r\n for (let col = 0; col < modules; col++) {\r\n if (!qrcode.isDark(row, col)) continue;\r\n\r\n const key: QrcodePartOption = (\r\n (col < 7 && row < 7) ||\r\n (col < 7 && row >= modules - 7) ||\r\n (col >= modules - 7 && row < 7)\r\n ) ? 'eyes' : 'body';\r\n\r\n const x = col * moduleSize + margin + padding;\r\n const y = row * moduleSize + margin + padding;\r\n const c = getColor(color[key], colorEffect[key], col, row);\r\n\r\n const wrapped: QrcodeWrapped = {\r\n row: {\r\n before: row > 0 ? qrcode.isDark(row - 1, col) : false,\r\n after: row < modules - 1 ? qrcode.isDark(row + 1, col) : false\r\n },\r\n col: {\r\n before: col > 0 ? qrcode.isDark(row, col - 1) : false,\r\n after: col < modules - 1 ? qrcode.isDark(row, col + 1) : false\r\n }\r\n };\r\n\r\n rects.push(\r\n <path\r\n d={rectanglePath({\r\n height: moduleSize,\r\n width: moduleSize,\r\n positionX: x,\r\n positionY: y,\r\n radius: qrCodeStyleRadius(\r\n variant[key],\r\n moduleSize,\r\n modules,\r\n wrapped,\r\n row,\r\n col,\r\n key\r\n )\r\n })}\r\n key={`${row}-${col}`}\r\n fill={c}\r\n stroke={props.divider && key === 'body' ? (props.bgColor ?? '#FFF') : undefined}\r\n />\r\n );\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (typeof props.onReady === 'function' && SVG.current) {\r\n props.onReady(SVG.current);\r\n }\r\n }, [props, SVG]);\r\n\r\n return (\r\n <svg\r\n shapeRendering=\"geometricPrecision\"\r\n {...props.internalProps}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox={`0 0 ${qrcodeSize + space} ${qrcodeSize + space}`}\r\n width={qrcodeSize + space}\r\n height={qrcodeSize + space}\r\n ref={SVG}\r\n >\r\n <rect\r\n x={margin}\r\n y={margin}\r\n width={qrcodeSize + padding * 2}\r\n height={qrcodeSize + padding * 2}\r\n fill={props.bgColor ?? '#FFF'}\r\n rx={props.bgRounded ? 10 : 0}\r\n />\r\n {rects}\r\n <Image\r\n imageSet={imagem}\r\n modules={modules}\r\n moduleSize={moduleSize}\r\n margin={margin}\r\n padding={padding}\r\n bgColor={props.bgColor}\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\nfunction Image({\r\n imageSet, modules, moduleSize,\r\n margin, padding, bgColor\r\n} : {\r\n imageSet: QrcodeImageSettings | null, modules: number, moduleSize: number,\r\n margin: number, padding: number, bgColor?: string\r\n}) {\r\n\r\n const size = Math.floor(modules * moduleSize / 5);\r\n const position = size * 2 + margin + padding;\r\n\r\n const [src, setSrc] = React.useState<string>();\r\n\r\n useEffect(() => {\r\n if (src || !imageSet) return;\r\n loadImageAsBase64(imageSet.src).then(setSrc);\r\n }, [imageSet, src]);\r\n\r\n if (!src || !imageSet) return <></>;\r\n\r\n return <>\r\n\r\n {imageSet.overlap ? <></> : (\r\n <rect\r\n width={imageSet.width ?? size}\r\n height={imageSet.height ?? size}\r\n x={imageSet.positionX ?? position}\r\n y={imageSet.positionY ?? position}\r\n fill={bgColor ?? '#FFF'}\r\n />\r\n )}\r\n\r\n <image\r\n href={src}\r\n width={imageSet.width ?? size}\r\n height={imageSet.height ?? size}\r\n x={imageSet.positionX ?? position}\r\n y={imageSet.positionY ?? position}\r\n preserveAspectRatio=\"xMidYMid meet\"\r\n />\r\n\r\n </>;\r\n\r\n}\r\n\r\nexport default QrcodeSvg;\r\n","import { qrCodeRadiusNormalize } from \"./helpers\";\r\nimport type { QrcodeRectangleProps } from \"./types\";\r\n\r\nexport default function rectanglePath(props: QrcodeRectangleProps) {\r\n\r\n const radius = qrCodeRadiusNormalize(props.radius);\r\n\r\n return `\r\n M ${props.positionX + radius.top_left},${props.positionY}\r\n H ${props.positionX + props.width - radius.top_right}\r\n A ${radius.top_right},${radius.top_right} 0 0 1 ${props.positionX + props.width},${props.positionY + radius.top_right}\r\n V ${props.positionY + props.height - radius.bottom_right}\r\n A ${radius.bottom_right},${radius.bottom_right} 0 0 1 ${props.positionX + props.width - radius.bottom_right},${props.positionY + props.height}\r\n H ${props.positionX + radius.bottom_left}\r\n A ${radius.bottom_left},${radius.bottom_left} 0 0 1 ${props.positionX},${props.positionY + props.height - radius.bottom_left}\r\n V ${props.positionY + radius.top_left}\r\n A ${radius.top_left},${radius.top_left} 0 0 1 ${props.positionX + radius.top_left},${props.positionY}\r\n Z\r\n `.trim().replace(/\\s+/g, ' ');\r\n\r\n}\r\n"],"mappings":"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","names":["_a","_b","qrcodeGenerator","useEffect","useRef","jsx","useRef","qrcodeGenerator","useEffect","Image"]}