@liquid-js/qr-code-styling 2.3.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"qr-code-styling-node.js","sources":["../src/types/index.ts","../src/constants/errorCorrectionPercents.ts","../src/tools/getMode.ts","../src/tools/merge.ts","../src/tools/sanitizeOptions.ts","../src/core/QROptions.ts","../src/figures/cornerDot/QRCornerDot.ts","../src/figures/cornerSquare/QRCornerSquare.ts","../src/figures/dot/QRDot.ts","../src/tools/browserImageTools.ts","../src/tools/calculateImageSize.ts","../src/core/QRSVG.ts","../src/core/QRCodeStyling.ts","../src/node.ts"],"sourcesContent":["import { browserImageTools } from \"../tools/browserImageTools\";\n\nexport interface UnknownObject {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n}\n\nexport enum DotType {\n dots = \"dots\",\n randomDots = \"random-dots\",\n rounded = \"rounded\",\n verticalLines = \"vertical-lines\",\n horizontalLines = \"horizontal-lines\",\n classy = \"classy\",\n classyRounded = \"classy-rounded\",\n square = \"square\",\n smallSquare = \"small-square\",\n extraRounded = \"extra-rounded\",\n diamond = \"diamond\"\n}\nexport enum CornerDotType {\n dot = \"dot\",\n square = \"square\",\n heart = \"heart\",\n extraRounded = \"extra-rounded\",\n classy = \"classy\",\n outpoint = \"outpoint\",\n inpoint = \"inpoint\"\n}\nexport enum CornerSquareType {\n dot = \"dot\",\n square = \"square\",\n extraRounded = \"extra-rounded\",\n classy = \"classy\",\n outpoint = \"outpoint\",\n inpoint = \"inpoint\"\n}\nexport enum GradientType {\n radial = \"radial\",\n linear = \"linear\"\n}\nexport enum ShapeType {\n square = \"square\",\n circle = \"circle\"\n}\n\nexport type Gradient = {\n /**\n * Type of gradient spread\n *\n * @default GradientType.linear\n */\n type: GradientType;\n /**\n * Rotation of gradient (in radians, Math.PI === 180 degrees)\n *\n * @default 0\n */\n rotation?: number;\n /** Gradient colors. */\n colorStops: {\n /** Position of color in gradient range */\n offset: number;\n /** Color of stop in gradient range */\n color: string;\n }[];\n};\n\ntype TypeNumber =\n | 0\n | 1\n | 2\n | 3\n | 4\n | 5\n | 6\n | 7\n | 8\n | 9\n | 10\n | 11\n | 12\n | 13\n | 14\n | 15\n | 16\n | 17\n | 18\n | 19\n | 20\n | 21\n | 22\n | 23\n | 24\n | 25\n | 26\n | 27\n | 28\n | 29\n | 30\n | 31\n | 32\n | 33\n | 34\n | 35\n | 36\n | 37\n | 38\n | 39\n | 40;\n\nconst TypeNumber = Array(41)\n .fill(0)\n .map((_, i) => i) as unknown as {\n [P in TypeNumber]: P;\n};\n\nexport { TypeNumber };\n\nexport enum ErrorCorrectionLevel {\n L = \"L\",\n M = \"M\",\n Q = \"Q\",\n H = \"H\"\n}\n\nexport enum Mode {\n numeric = \"Numeric\",\n alphanumeric = \"Alphanumeric\",\n byte = \"Byte\",\n kanji = \"Kanji\",\n unicode = \"Unicode\"\n}\n\nexport interface QRCode {\n addData(data: string, mode?: Mode.alphanumeric | Mode.byte | Mode.kanji | Mode.numeric): void;\n make(): void;\n getModuleCount(): number;\n isDark(row: number, col: number): boolean;\n}\n\nexport type Options = {\n /** Use a custom DOM domplementation */\n document?: Document;\n /** Use a custom image fetching & serializaton implementation */\n imageTools?: typeof browserImageTools;\n /** @ignore */\n width?: number;\n /** @ignore */\n height?: number;\n /** The data will be encoded in the QR code */\n data?: string;\n /** The image will be copied to the center of the QR code */\n image?: string | Buffer | Blob;\n /**\n * QR code shape\n *\n * @default ShapeType.square\n */\n shape?: ShapeType;\n /** Options will be passed to `qrcode-generator` lib */\n qrOptions?: {\n typeNumber?: TypeNumber;\n mode?: Mode;\n /** @default ErrorCorrectionLevel.Q */\n errorCorrectionLevel?: ErrorCorrectionLevel;\n };\n imageOptions?: {\n /**\n * Hide all dots covered by the image\n *\n * @default true\n */\n hideBackgroundDots?: boolean;\n /**\n * Coefficient of the image size\n *\n * @default 0.4\n */\n imageSize?: number;\n /**\n * Margin of the image (in blocks)\n *\n * @default 0\n */\n margin?: number;\n /**\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLImageElement/crossOrigin)\n */\n crossOrigin?: string;\n };\n dotsOptions?: {\n /**\n * QR dot size (in pixels)\n *\n * @default 10\n */\n size?: number;\n /**\n * Color of QR dots\n *\n * @default \"#000\"\n */\n color?: string;\n /** Gradient of QR dots */\n gradient?: Gradient;\n /**\n * Style of QR dots\n *\n * @default DotType.square\n */\n type?: DotType;\n };\n /** Corners Square options, omitted values match dots */\n cornersSquareOptions?: {\n /** Color of Corners Square */\n color?: string;\n /** Gradient of Corners Square */\n gradient?: Gradient;\n /** Style of Corners Square */\n type?: CornerSquareType;\n };\n /** Corners Dot options, omitted values match squares */\n cornersDotOptions?: {\n /** Color of Corners Dot */\n color?: string;\n /** Gradient of Corners Dot */\n gradient?: Gradient;\n /** Style of Corners Dot */\n type?: CornerDotType;\n };\n /** QR background styling options, false to disable background */\n backgroundOptions?:\n | {\n /** Background roundnes, from 0 (square) to 1 (circle) */\n round?: number;\n /** Background color */\n color?: string;\n /** Background Gradient */\n gradient?: Gradient;\n /**\n * Margin (in blocks) between background and the QR code\n *\n * @default 0\n */\n margin?: number;\n }\n | false;\n};\n\nexport type CanvasOptions = {\n width?: number;\n height?: number;\n margin?: number;\n};\n\nexport type FilterFunction = (i: number, j: number) => boolean;\n\nexport type DrawArgs = {\n x: number;\n y: number;\n size: number;\n rotation?: number;\n getNeighbor?: GetNeighbor;\n};\n\nexport type BasicFigureDrawArgs = {\n x: number;\n y: number;\n size: number;\n rotation?: number;\n};\n\nexport type RotateFigureArgs = {\n x: number;\n y: number;\n size: number;\n rotation?: number;\n draw: () => void;\n};\n\nexport type GetNeighbor = (x: number, y: number) => boolean;\n\nexport type ExtensionFunction = (svg: SVGElement, options: Options) => void;\n\nexport enum FileExtension {\n svg = \"svg\",\n png = \"png\",\n jpeg = \"jpeg\",\n webp = \"webp\"\n}\n","import { ErrorCorrectionLevel } from \"../types\";\n\nexport const ErrorCorrectionPercents = {\n [ErrorCorrectionLevel.L]: 0.07,\n [ErrorCorrectionLevel.M]: 0.15,\n [ErrorCorrectionLevel.Q]: 0.25,\n [ErrorCorrectionLevel.H]: 0.3\n};\n","import { Mode } from \"../types\";\n\nexport function getMode(data: string): Mode {\n switch (true) {\n case /^[0-9]*$/.test(data):\n return Mode.numeric;\n case /^[0-9A-Z $%*+\\-./:]*$/.test(data):\n return Mode.alphanumeric;\n // eslint-disable-next-line no-control-regex\n case /[^\\u0000-\\u00ff]/.test(data):\n return Mode.unicode;\n default:\n return Mode.byte;\n }\n}\n","import { UnknownObject } from \"../types\";\n\nconst isObject = (obj: Record<string, unknown>): boolean => !!obj && typeof obj === \"object\" && !Array.isArray(obj);\n\nexport function mergeDeep(target: UnknownObject, ...sources: UnknownObject[]): UnknownObject {\n if (!sources.length) return target;\n const source = sources.shift();\n if (source === undefined || !isObject(target) || !isObject(source)) return target;\n target = { ...target };\n Object.keys(source).forEach((key: string): void => {\n const targetValue = target[key];\n const sourceValue = source[key];\n\n if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\n target[key] = sourceValue;\n } else if (isObject(targetValue) && isObject(sourceValue)) {\n target[key] = mergeDeep(Object.assign({}, targetValue), sourceValue);\n } else {\n target[key] = sourceValue;\n }\n });\n\n return mergeDeep(target, ...sources);\n}\n","import { RequiredCanvasOptions, RequiredOptions } from \"../core/QROptions\";\nimport { Gradient } from \"../types\";\n\nfunction sanitizeGradient(gradient: Gradient): Gradient {\n const newGradient = { ...gradient };\n\n if (!newGradient.colorStops || !newGradient.colorStops.length) {\n throw \"Field 'colorStops' is required in gradient\";\n }\n\n if (newGradient.rotation) {\n newGradient.rotation = Number(newGradient.rotation);\n } else {\n newGradient.rotation = 0;\n }\n\n newGradient.colorStops = newGradient.colorStops.map((colorStop: { offset: number; color: string }) => ({\n ...colorStop,\n offset: Number(colorStop.offset)\n }));\n\n return newGradient;\n}\n\nexport function sanitizeOptions(options: RequiredOptions): RequiredOptions {\n const newOptions = { ...options };\n\n newOptions.imageOptions = {\n ...newOptions.imageOptions,\n hideBackgroundDots: Boolean(newOptions.imageOptions.hideBackgroundDots),\n imageSize: Math.min(1, Number(newOptions.imageOptions.imageSize)) || 1,\n margin: Number(newOptions.imageOptions.margin)\n };\n\n newOptions.dotsOptions = {\n ...newOptions.dotsOptions\n };\n if (newOptions.dotsOptions.gradient) {\n newOptions.dotsOptions.gradient = sanitizeGradient(newOptions.dotsOptions.gradient);\n }\n // Ensure integer dot size\n newOptions.dotsOptions.size = Math.round(Math.max(0, newOptions.dotsOptions.size) || 10);\n\n if (newOptions.cornersSquareOptions) {\n newOptions.cornersSquareOptions = {\n ...newOptions.cornersSquareOptions\n };\n if (newOptions.cornersSquareOptions.gradient) {\n newOptions.cornersSquareOptions.gradient = sanitizeGradient(newOptions.cornersSquareOptions.gradient);\n }\n }\n\n if (newOptions.cornersDotOptions) {\n newOptions.cornersDotOptions = {\n ...newOptions.cornersDotOptions\n };\n if (newOptions.cornersDotOptions.gradient) {\n newOptions.cornersDotOptions.gradient = sanitizeGradient(newOptions.cornersDotOptions.gradient);\n }\n }\n\n if (newOptions.backgroundOptions) {\n newOptions.backgroundOptions = {\n ...newOptions.backgroundOptions\n };\n if (newOptions.backgroundOptions.gradient) {\n newOptions.backgroundOptions.gradient = sanitizeGradient(newOptions.backgroundOptions.gradient);\n }\n }\n\n if (!newOptions.document) newOptions.document = document;\n\n return newOptions;\n}\n\nexport function sanitizeCanvasOptions(options: RequiredCanvasOptions): RequiredCanvasOptions {\n const newOptions = { ...options };\n\n newOptions.width = Number(newOptions.width);\n newOptions.height = Number(newOptions.height);\n newOptions.margin = Number(newOptions.margin);\n\n if (newOptions.margin > Math.min(newOptions.width, newOptions.height)) {\n newOptions.margin = Math.min(newOptions.width, newOptions.height);\n }\n\n return newOptions;\n}\n","import { CanvasOptions, DotType, ErrorCorrectionLevel, Gradient, Mode, Options, ShapeType, TypeNumber } from \"../types\";\n\nexport interface RequiredOptions extends Options {\n document: Document;\n shape: ShapeType;\n width: number;\n height: number;\n data: string;\n qrOptions: {\n typeNumber: TypeNumber;\n mode?: Mode;\n errorCorrectionLevel: ErrorCorrectionLevel;\n };\n imageOptions: {\n hideBackgroundDots: boolean;\n imageSize: number;\n crossOrigin?: string;\n margin: number;\n };\n dotsOptions: {\n type: DotType;\n color: string;\n gradient?: Gradient;\n size: number;\n };\n}\n\nexport const defaultOptions: RequiredOptions = {\n document: undefined as never,\n shape: ShapeType.square,\n width: undefined as never,\n height: undefined as never,\n data: \"\",\n qrOptions: {\n typeNumber: TypeNumber[0],\n mode: undefined,\n errorCorrectionLevel: ErrorCorrectionLevel.Q\n },\n imageOptions: {\n hideBackgroundDots: true,\n imageSize: 0.4,\n crossOrigin: undefined,\n margin: 0\n },\n dotsOptions: {\n type: DotType.square,\n color: \"#000\",\n size: 10\n }\n};\n\nexport interface RequiredCanvasOptions extends CanvasOptions {\n width: number;\n height: number;\n margin: number;\n}\n\nexport const defaultCanvasOptions: RequiredCanvasOptions = {\n width: 300,\n height: 300,\n margin: 0\n};\n","import { BasicFigureDrawArgs, CornerDotType, DrawArgs, RotateFigureArgs } from \"../../types\";\n\nexport class QRCornerDot {\n _element?: SVGElement;\n _svg: SVGElement;\n _type: CornerDotType;\n _document: Document;\n\n constructor({ svg, type, document }: { svg: SVGElement; type: CornerDotType; document: Document }) {\n this._svg = svg;\n this._type = type;\n this._document = document;\n }\n\n draw(x: number, y: number, size: number, rotation: number): void {\n const type = this._type;\n let drawFunction;\n\n switch (type) {\n case CornerDotType.square:\n drawFunction = this._drawSquare;\n break;\n case CornerDotType.heart:\n drawFunction = this._drawHeart;\n break;\n case CornerDotType.extraRounded:\n drawFunction = this._drawRounded;\n break;\n case CornerDotType.classy:\n drawFunction = this._drawClassy;\n break;\n case CornerDotType.inpoint:\n drawFunction = this._drawInpoint;\n break;\n case CornerDotType.outpoint:\n drawFunction = this._drawOutpoint;\n break;\n case CornerDotType.dot:\n default:\n drawFunction = this._drawDot;\n }\n\n drawFunction.call(this, { x, y, size, rotation });\n }\n\n _rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\n const cx = x + size / 2;\n const cy = y + size / 2;\n\n draw();\n this._element?.setAttribute(\"transform\", `rotate(${(180 * rotation) / Math.PI},${cx},${cy})`);\n }\n\n _basicDot(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\n this._element.setAttribute(\"cx\", String(x + size / 2));\n this._element.setAttribute(\"cy\", String(y + size / 2));\n this._element.setAttribute(\"r\", String(size / 2));\n }\n });\n }\n\n _basicSquare(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n this._element.setAttribute(\"x\", String(x));\n this._element.setAttribute(\"y\", String(y));\n this._element.setAttribute(\"width\", String(size));\n this._element.setAttribute(\"height\", String(size));\n }\n });\n }\n\n _basicHeart(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n const path = [\n \"M\",\n 0.925,\n 0.3538125,\n \"c\",\n 0,\n 0.0325869,\n -0.0054931,\n 0.0644619,\n -0.0164688,\n 0.095625,\n \"S\",\n 0.87825,\n 0.5147812,\n 0.850625,\n 0.5519688,\n \"C\",\n 0.823,\n 0.5891563,\n 0.7858125,\n 0.631125,\n 0.7390625,\n 0.677875,\n \"S\",\n 0.6331632,\n 0.7802256,\n 0.561625,\n 0.8446875,\n \"L\",\n 0.5,\n 0.8999375,\n \"l\",\n -0.061625,\n -0.05525,\n \"C\",\n 0.3668368,\n 0.7802256,\n 0.3076875,\n 0.724625,\n 0.2609375,\n 0.677875,\n \"S\",\n 0.177,\n 0.5891563,\n 0.149375,\n 0.5519688,\n \"S\",\n 0.1024444,\n 0.4806007,\n 0.0914688,\n 0.4494375,\n \"S\",\n 0.075,\n 0.3863994,\n 0.075,\n 0.3538125,\n \"C\",\n 0.075,\n 0.2872256,\n 0.0973125,\n 0.231625,\n 0.1419375,\n 0.187,\n \"S\",\n 0.2421631,\n 0.1200625,\n 0.30875,\n 0.1200625,\n \"c\",\n 0.0368369,\n 0,\n 0.0718994,\n 0.0077881,\n 0.1051875,\n 0.023375,\n \"S\",\n 0.4759131,\n 0.1809756,\n 0.5,\n 0.2093125,\n \"c\",\n 0.0240868,\n -0.0283369,\n 0.0527744,\n -0.0502881,\n 0.0860625,\n -0.065875,\n \"c\",\n 0.0332882,\n -0.0155869,\n 0.0683507,\n -0.023375,\n 0.1051875,\n -0.023375,\n \"c\",\n 0.0665869,\n 0,\n 0.1221875,\n 0.0223125,\n 0.1668125,\n 0.0669375,\n \"S\",\n 0.925,\n 0.2872256,\n 0.925,\n 0.3538125,\n \"z\"\n ];\n let move = false;\n let i = 0;\n this._element.setAttribute(\n \"d\",\n path\n .map((v) => {\n if (typeof v == \"string\") {\n i = 0;\n move = v.toUpperCase() == v;\n return v;\n }\n i++;\n v = v * size;\n if (move) {\n v += i % 2 == 1 ? x : y;\n }\n return v.toFixed(5);\n })\n .join(\" \")\n );\n }\n\n _basicRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n this._element.setAttribute(\"x\", String(x));\n this._element.setAttribute(\"y\", String(y));\n this._element.setAttribute(\"width\", String(size));\n this._element.setAttribute(\"height\", String(size));\n this._element.setAttribute(\"rx\", String(size / 4));\n this._element.setAttribute(\"ry\", String(size / 4));\n }\n });\n }\n\n _basicClassy(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y + 2.5 * dotSize}` +\n `v ${2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}` +\n `h ${4.5 * dotSize}` +\n `v ${-4.5 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}` +\n `h ${-2 * dotSize}` +\n `H ${x}` +\n `z`\n );\n }\n });\n }\n\n _basicInpoint(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y + dotSize / 2}` +\n `v ${dotSize / 4}` +\n `a ${dotSize / 4}, ${dotSize / 4} 0 0 0 ${dotSize / 4}, ${dotSize / 4}` +\n `h ${(dotSize / 4) * 3}` +\n `v ${(-dotSize / 4) * 3}` +\n `a ${dotSize / 4}, ${dotSize / 4} 0 0 0 ${-dotSize / 4}, ${-dotSize / 4}` +\n `h ${-dotSize / 2}` +\n `a ${dotSize / 4}, ${dotSize / 4} 0 0 0 ${-dotSize / 4}, ${dotSize / 4}` +\n `z`\n );\n }\n });\n }\n\n _drawDot({ x, y, size, rotation }: DrawArgs): void {\n this._basicDot({ x, y, size, rotation });\n }\n\n _drawSquare({ x, y, size, rotation }: DrawArgs): void {\n this._basicSquare({ x, y, size, rotation });\n }\n\n _drawHeart({ x, y, size, rotation }: DrawArgs): void {\n const scaleFactor = 0.2;\n this._basicHeart({\n x: x - (scaleFactor * size) / 2,\n y: y - (scaleFactor * size) / 2,\n size: size * (1 + scaleFactor),\n rotation\n });\n }\n\n _drawRounded({ x, y, size, rotation }: DrawArgs): void {\n this._basicRounded({ x, y, size, rotation });\n }\n\n _drawClassy({ x, y, size, rotation }: DrawArgs): void {\n this._basicClassy({ x, y, size, rotation });\n }\n\n _drawInpoint({ x, y, size, rotation }: DrawArgs): void {\n this._basicInpoint({ x, y, size, rotation });\n }\n\n _drawOutpoint({ x, y, size, rotation }: DrawArgs): void {\n this._basicInpoint({ x, y, size, rotation: (rotation || 0) + Math.PI });\n }\n}\n","import { CornerSquareType, DrawArgs, BasicFigureDrawArgs, RotateFigureArgs } from \"../../types\";\n\nexport class QRCornerSquare {\n _element?: SVGElement;\n _svg: SVGElement;\n _type: CornerSquareType;\n _document: Document;\n\n constructor({ svg, type, document }: { svg: SVGElement; type: CornerSquareType; document: Document }) {\n this._svg = svg;\n this._type = type;\n this._document = document;\n }\n\n draw(x: number, y: number, size: number, rotation: number): void {\n const type = this._type;\n let drawFunction;\n\n switch (type) {\n case CornerSquareType.square:\n drawFunction = this._drawSquare;\n break;\n case CornerSquareType.extraRounded:\n drawFunction = this._drawExtraRounded;\n break;\n case CornerSquareType.classy:\n drawFunction = this._drawClassy;\n break;\n case CornerSquareType.outpoint:\n drawFunction = this._drawOutpoint;\n break;\n case CornerSquareType.inpoint:\n drawFunction = this._drawInpoint;\n break;\n case CornerSquareType.dot:\n default:\n drawFunction = this._drawDot;\n }\n\n drawFunction.call(this, { x, y, size, rotation });\n }\n\n _rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\n const cx = x + size / 2;\n const cy = y + size / 2;\n\n draw();\n this._element?.setAttribute(\"transform\", `rotate(${(180 * rotation) / Math.PI},${cx},${cy})`);\n }\n\n _basicDot(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n `M ${x + size / 2} ${y}` + // M cx, y // Move to top of ring\n `a ${size / 2} ${size / 2} 0 1 0 0.1 0` + // a outerRadius, outerRadius, 0, 1, 0, 1, 0 // Draw outer arc, but don't close it\n `z` + // Z // Close the outer shape\n `m 0 ${dotSize}` + // m -1 outerRadius-innerRadius // Move to top point of inner radius\n `a ${size / 2 - dotSize} ${size / 2 - dotSize} 0 1 1 -0.1 0` + // a innerRadius, innerRadius, 0, 1, 1, -1, 0 // Draw inner arc, but don't close it\n `Z` // Z // Close the inner ring. Actually will still work without, but inner ring will have one unit missing in stroke\n );\n }\n });\n }\n\n _basicSquare(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y}` +\n `v ${size}` +\n `h ${size}` +\n `v ${-size}` +\n `z` +\n `M ${x + dotSize} ${y + dotSize}` +\n `h ${size - 2 * dotSize}` +\n `v ${size - 2 * dotSize}` +\n `h ${-size + 2 * dotSize}` +\n `z`\n );\n }\n });\n }\n\n _basicExtraRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y + 2.5 * dotSize}` +\n `v ${2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}` +\n `h ${2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${-dotSize * 2.5}` +\n `v ${-2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}` +\n `h ${-2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${dotSize * 2.5}` +\n `M ${x + 2.5 * dotSize} ${y + dotSize}` +\n `h ${2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}` +\n `v ${2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${dotSize * 1.5}` +\n `h ${-2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}` +\n `v ${-2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${-dotSize * 1.5}`\n );\n }\n });\n }\n\n _basicClassy(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y + 2.5 * dotSize}` +\n `v ${2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}` +\n `h ${4.5 * dotSize}` +\n `v ${-4.5 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}` +\n `h ${-2 * dotSize}` +\n `H ${x}` +\n `z` +\n `M ${x + 2.5 * dotSize} ${y + dotSize}` +\n `h ${2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}` +\n `v ${3.5 * dotSize}` +\n `h ${-3.5 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}` +\n `v ${-3.5 * dotSize}` +\n `z`\n );\n }\n });\n }\n\n _basicInpoint(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y + 2.5 * dotSize}` +\n `v ${2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}` +\n `h ${4.5 * dotSize}` +\n `v ${-4.5 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}` +\n `h ${-2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${dotSize * 2.5}` +\n `M ${x + 2.5 * dotSize} ${y + dotSize}` +\n `h ${2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}` +\n `v ${3.5 * dotSize}` +\n `h ${-3.5 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}` +\n `v ${-2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${-dotSize * 1.5}`\n );\n }\n });\n }\n\n _drawDot({ x, y, size, rotation }: DrawArgs): void {\n this._basicDot({ x, y, size, rotation });\n }\n\n _drawSquare({ x, y, size, rotation }: DrawArgs): void {\n this._basicSquare({ x, y, size, rotation });\n }\n\n _drawExtraRounded({ x, y, size, rotation }: DrawArgs): void {\n this._basicExtraRounded({ x, y, size, rotation });\n }\n\n _drawClassy({ x, y, size, rotation }: DrawArgs): void {\n this._basicClassy({ x, y, size, rotation });\n }\n\n _drawInpoint({ x, y, size, rotation }: DrawArgs): void {\n this._basicInpoint({ x, y, size, rotation });\n }\n\n _drawOutpoint({ x, y, size, rotation }: DrawArgs): void {\n this._basicInpoint({ x, y, size, rotation: (rotation || 0) + Math.PI });\n }\n}\n","import { DotType, GetNeighbor, DrawArgs, BasicFigureDrawArgs, RotateFigureArgs } from \"../../types\";\n\nexport class QRDot {\n _element?: SVGElement;\n _svg: SVGElement;\n _type: DotType;\n _document: Document;\n\n constructor({ svg, type, document }: { svg: SVGElement; type: DotType; document: Document }) {\n this._svg = svg;\n this._type = type;\n this._document = document;\n }\n\n draw(x: number, y: number, size: number, getNeighbor: GetNeighbor): void {\n const type = this._type;\n let drawFunction;\n\n switch (type) {\n case DotType.dots:\n drawFunction = this._drawDot;\n break;\n case DotType.randomDots:\n drawFunction = this._drawRandomDot;\n break;\n case DotType.classy:\n drawFunction = this._drawClassy;\n break;\n case DotType.classyRounded:\n drawFunction = this._drawClassyRounded;\n break;\n case DotType.rounded:\n drawFunction = this._drawRounded;\n break;\n case DotType.verticalLines:\n drawFunction = this._drawVerticalLines;\n break;\n case DotType.horizontalLines:\n drawFunction = this._drawHorizontalLines;\n break;\n case DotType.extraRounded:\n drawFunction = this._drawExtraRounded;\n break;\n case DotType.diamond:\n drawFunction = this._drawDiamond;\n break;\n case DotType.smallSquare:\n drawFunction = this._drawSmallSquare;\n break;\n case DotType.square:\n default:\n drawFunction = this._drawSquare;\n }\n\n drawFunction.call(this, { x, y, size, getNeighbor });\n }\n\n _rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\n const cx = x + size / 2;\n const cy = y + size / 2;\n\n draw();\n this._element?.setAttribute(\"transform\", `rotate(${(180 * rotation) / Math.PI},${cx},${cy})`);\n }\n\n _basicDot(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\n this._element.setAttribute(\"cx\", String(x + size / 2));\n this._element.setAttribute(\"cy\", String(y + size / 2));\n this._element.setAttribute(\"r\", String(size / 2));\n }\n });\n }\n\n _basicSquare(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n this._element.setAttribute(\"x\", String(x));\n this._element.setAttribute(\"y\", String(y));\n this._element.setAttribute(\"width\", String(size));\n this._element.setAttribute(\"height\", String(size));\n }\n });\n }\n\n //if rotation === 0 - right side is rounded\n _basicSideRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y}` + //go to top left position\n `v ${size}` + //draw line to left bottom corner\n `h ${size / 2}` + //draw line to left bottom corner + half of size right\n `a ${size / 2} ${size / 2}, 0, 0, 0, 0 ${-size}` // draw rounded corner\n );\n }\n });\n }\n\n //if rotation === 0 - top right corner is rounded\n _basicCornerRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y}` + //go to top left position\n `v ${size}` + //draw line to left bottom corner\n `h ${size}` + //draw line to right bottom corner\n `v ${-size / 2}` + //draw line to right bottom corner + half of size top\n `a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}` // draw rounded corner\n );\n }\n });\n }\n\n //if rotation === 0 - top right corner is rounded\n _basicCornerExtraRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y}` + //go to top left position\n `v ${size}` + //draw line to left bottom corner\n `h ${size}` + //draw line to right bottom corner\n `a ${size} ${size}, 0, 0, 0, ${-size} ${-size}` // draw rounded top right corner\n );\n }\n });\n }\n\n //if rotation === 0 - left bottom and right top corners are rounded\n _basicCornersRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y}` + //go to left top position\n `v ${size / 2}` + //draw line to left top corner + half of size bottom\n `a ${size / 2} ${size / 2}, 0, 0, 0, ${size / 2} ${size / 2}` + // draw rounded left bottom corner\n `h ${size / 2}` + //draw line to right bottom corner\n `v ${-size / 2}` + //draw line to right bottom corner + half of size top\n `a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}` // draw rounded right top corner\n );\n }\n });\n }\n\n _drawDot({ x, y, size }: DrawArgs): void {\n this._basicDot({ x, y, size, rotation: 0 });\n }\n\n _drawRandomDot({ x, y, size }: DrawArgs): void {\n const randomFactor = Math.random() * (1 - 0.75) + 0.75;\n this._basicDot({ x, y, size: size * randomFactor, rotation: 0 });\n }\n\n _drawSquare({ x, y, size }: DrawArgs): void {\n this._basicSquare({ x, y, size, rotation: 0 });\n }\n\n _drawSmallSquare({ x, y, size }: DrawArgs): void {\n const originalSize = size;\n\n size = originalSize * 0.7;\n x = x + originalSize * 0.15;\n y = y + originalSize * 0.15;\n\n this._basicSquare({ x, y, size, rotation: 0 });\n }\n\n _drawDiamond({ x, y, size }: DrawArgs): void {\n this._basicSquare({ x, y, size, rotation: Math.PI / 4 });\n }\n\n _drawRounded({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this._basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\n this._basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount === 2) {\n let rotation = 0;\n\n if (leftNeighbor && topNeighbor) {\n rotation = Math.PI / 2;\n } else if (topNeighbor && rightNeighbor) {\n rotation = Math.PI;\n } else if (rightNeighbor && bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this._basicCornerRounded({ x, y, size, rotation });\n return;\n }\n\n if (neighborsCount === 1) {\n let rotation = 0;\n\n if (topNeighbor) {\n rotation = Math.PI / 2;\n } else if (rightNeighbor) {\n rotation = Math.PI;\n } else if (bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this._basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n _drawVerticalLines({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (\n neighborsCount === 0 ||\n (leftNeighbor && !(topNeighbor || bottomNeighbor)) ||\n (rightNeighbor && !(topNeighbor || bottomNeighbor))\n ) {\n this._basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (topNeighbor && bottomNeighbor) {\n this._basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (topNeighbor && !bottomNeighbor) {\n const rotation = Math.PI / 2;\n this._basicSideRounded({ x, y, size, rotation });\n return;\n }\n\n if (bottomNeighbor && !topNeighbor) {\n const rotation = -Math.PI / 2;\n this._basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n _drawHorizontalLines({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (\n neighborsCount === 0 ||\n (topNeighbor && !(leftNeighbor || rightNeighbor)) ||\n (bottomNeighbor && !(leftNeighbor || rightNeighbor))\n ) {\n this._basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (leftNeighbor && rightNeighbor) {\n this._basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (leftNeighbor && !rightNeighbor) {\n const rotation = 0;\n this._basicSideRounded({ x, y, size, rotation });\n return;\n }\n\n if (rightNeighbor && !leftNeighbor) {\n const rotation = Math.PI;\n this._basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n _drawExtraRounded({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this._basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\n this._basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount === 2) {\n let rotation = 0;\n\n if (leftNeighbor && topNeighbor) {\n rotation = Math.PI / 2;\n } else if (topNeighbor && rightNeighbor) {\n rotation = Math.PI;\n } else if (rightNeighbor && bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this._basicCornerExtraRounded({ x, y, size, rotation });\n return;\n }\n\n if (neighborsCount === 1) {\n let rotation = 0;\n\n if (topNeighbor) {\n rotation = Math.PI / 2;\n } else if (rightNeighbor) {\n rotation = Math.PI;\n } else if (bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this._basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n _drawClassy({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this._basicCornersRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n if (!leftNeighbor && !topNeighbor) {\n this._basicCornerRounded({ x, y, size, rotation: -Math.PI / 2 });\n return;\n }\n\n if (!rightNeighbor && !bottomNeighbor) {\n this._basicCornerRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n this._basicSquare({ x, y, size, rotation: 0 });\n }\n\n _drawClassyRounded({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this._basicCornersRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n if (!leftNeighbor && !topNeighbor) {\n this._basicCornerExtraRounded({ x, y, size, rotation: -Math.PI / 2 });\n return;\n }\n\n if (!rightNeighbor && !bottomNeighbor) {\n this._basicCornerExtraRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n this._basicSquare({ x, y, size, rotation: 0 });\n }\n}\n","import { Options } from \"../types\";\n\nexport const browserImageTools = {\n toDataURL(url: string | Buffer | Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n if (typeof url == \"string\") {\n const xhr = new XMLHttpRequest();\n xhr.onload = function () {\n const reader = new FileReader();\n reader.onloadend = function () {\n resolve(reader.result as string);\n };\n reader.readAsDataURL(xhr.response);\n };\n xhr.onerror = xhr.onabort = xhr.ontimeout = reject;\n xhr.open(\"GET\", url);\n xhr.responseType = \"blob\";\n xhr.send();\n } else {\n const reader = new FileReader();\n reader.onloadend = function () {\n resolve(reader.result as string);\n };\n reader.readAsDataURL(url as Blob);\n }\n });\n },\n getSize(options: Options): Promise<{ width: number; height: number }> {\n return new Promise((resolve, reject) => {\n if (!options.image) {\n return reject(\"Image is not defined\");\n }\n\n const image = new Image();\n\n if (typeof options.imageOptions?.crossOrigin === \"string\") {\n image.crossOrigin = options.imageOptions.crossOrigin;\n }\n\n image.onload = (): void => {\n resolve({ width: image.width, height: image.height });\n };\n image.onerror = image.onabort = reject;\n if (typeof options.image == \"string\") image.src = options.image;\n else\n browserImageTools\n .toDataURL(options.image)\n .then((url) => (image.src = url))\n .catch(reject);\n });\n }\n};\n","interface ImageSizeOptions {\n originalHeight: number;\n originalWidth: number;\n maxHiddenDots: number;\n maxHiddenAxisDots?: number;\n dotSize: number;\n margin: number;\n}\n\ninterface ImageSizeResult {\n height: number;\n width: number;\n hideYDots: number;\n hideXDots: number;\n}\n\nexport function calculateImageSize({\n originalHeight,\n originalWidth,\n maxHiddenDots,\n maxHiddenAxisDots,\n dotSize,\n margin\n}: ImageSizeOptions): ImageSizeResult {\n const hideDots = { x: 0, y: 0 };\n const imageSize = { x: 0, y: 0 };\n\n if (\n originalHeight <= 0 ||\n originalWidth <= 0 ||\n maxHiddenDots <= 0 ||\n dotSize <= 0 ||\n 4 * margin ** 2 > maxHiddenDots\n ) {\n return {\n height: 0,\n width: 0,\n hideYDots: 0,\n hideXDots: 0\n };\n }\n\n //If set, ensure maxHiddenAxisDots is odd and at least 1\n if (maxHiddenAxisDots && maxHiddenAxisDots % 2 == 0) maxHiddenAxisDots = Math.max(1, maxHiddenAxisDots - 1);\n\n //Determine the bigger and smaller image dimension\n const dimMax = Math.max(originalWidth, originalHeight);\n const dimMin = Math.min(originalWidth, originalHeight);\n\n //Find max image size along the bigger dimension\n let lower = 0,\n upper = (maxHiddenAxisDots || maxHiddenDots) - 2 * margin;\n do {\n const size = lower + (upper - lower) / 2;\n let dotsMax = Math.max(1, Math.ceil(size + 2 * margin));\n if (dotsMax % 2 == 0) dotsMax++;\n let dotsMin = Math.max(1, Math.ceil((size * dimMin) / dimMax + 2 * margin));\n if (dotsMin % 2 == 0) dotsMin++;\n\n if (dotsMax * dotsMin > maxHiddenDots) upper = size;\n else lower = size;\n } while (Math.abs(lower - upper) > 0.001);\n\n //Calculate how many dots the given size corresponds to\n const size = lower;\n let hideMax = Math.max(1, Math.ceil(size + 2 * margin));\n if (hideMax % 2 == 0) hideMax++;\n let hideMin = Math.max(1, Math.ceil((size * dimMin) / dimMax + 2 * margin));\n if (hideMin % 2 == 0) hideMin++;\n\n //Set hidden dots along bigger and smaller dimension to the right axis\n if (originalWidth > originalHeight) {\n hideDots.x = hideMax;\n hideDots.y = hideMin;\n } else {\n hideDots.x = hideMin;\n hideDots.y = hideMax;\n }\n\n //Fit image to the hidden dots\n const maxW = (hideDots.x - 2 * margin) * dotSize;\n const maxH = (hideDots.y - 2 * margin) * dotSize;\n imageSize.x = maxW;\n imageSize.y = (maxW * originalHeight) / originalWidth;\n if (imageSize.y > maxH) {\n imageSize.y = maxH;\n imageSize.x = (maxH * originalWidth) / originalHeight;\n }\n\n return {\n height: Math.round(imageSize.y + 2 * margin * dotSize),\n width: Math.round(imageSize.x + 2 * margin * dotSize),\n hideYDots: hideDots.y,\n hideXDots: hideDots.x\n };\n}\n","import { ErrorCorrectionPercents } from \"../constants/errorCorrectionPercents\";\nimport { QRCornerDot } from \"../figures/cornerDot/QRCornerDot\";\nimport { QRCornerSquare } from \"../figures/cornerSquare/QRCornerSquare\";\nimport { QRDot } from \"../figures/dot/QRDot\";\nimport { browserImageTools } from \"../tools/browserImageTools\";\nimport { calculateImageSize } from \"../tools/calculateImageSize\";\nimport { FilterFunction, Gradient, GradientType, QRCode, ShapeType } from \"../types\";\nimport { RequiredOptions } from \"./QROptions\";\n\nconst squareMask = [\n [1, 1, 1, 1, 1, 1, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 1, 1, 1, 1, 1, 1]\n];\n\nconst dotMask = [\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 1, 1, 1, 0, 0],\n [0, 0, 1, 1, 1, 0, 0],\n [0, 0, 1, 1, 1, 0, 0],\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0, 0, 0]\n];\n\nconst alignmentCount = [\n [35, 49],\n [28, 36],\n [21, 25],\n [14, 16],\n [7, 9],\n [2, 4],\n [1, 1]\n];\n\nexport class QRSVG {\n /** @ignore */\n _element: SVGElement;\n /** @ignore */\n _defs: SVGElement;\n /** @ignore */\n _backgroundClipPath?: SVGElement;\n /** @ignore */\n _dotsClipPath?: SVGElement;\n /** @ignore */\n _cornersSquareClipPath?: SVGElement;\n /** @ignore */\n _cornersDotClipPath?: SVGElement;\n /** @ignore */\n _options: RequiredOptions;\n /** @ignore */\n _qr?: QRCode;\n /** @ignore */\n _document: Document;\n /** @ignore */\n private _imageTools: typeof browserImageTools;\n\n //TODO don't pass all options to this class\n constructor(options: RequiredOptions) {\n this._document = options.document;\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n this._element.setAttribute(\"width\", String(options.width));\n this._element.setAttribute(\"height\", String(options.height));\n this._element.setAttribute(\"viewBox\", `0 0 ${options.width} ${options.height}`);\n this._defs = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"defs\");\n this._element.appendChild(this._defs);\n this._imageTools = options.imageTools || browserImageTools;\n\n this._options = options;\n }\n\n get width(): number {\n return this._options.width;\n }\n\n get height(): number {\n return this._options.height;\n }\n\n getElement(): SVGElement {\n return this._element;\n }\n\n async drawQR(qr: QRCode): Promise<void> {\n const count = qr.getModuleCount();\n const typeNumber = parseInt(((count - 17) / 4).toFixed(0), 10);\n const dotSize = this._options.dotsOptions.size;\n let drawImageSize = {\n hideXDots: 0,\n hideYDots: 0,\n width: 0,\n height: 0\n };\n\n this._qr = qr;\n\n if (this._options.image) {\n //We need it to get image size\n const size = await this._imageTools.getSize(this._options);\n const { imageOptions, qrOptions } = this._options;\n const coverLevel = imageOptions.imageSize * ErrorCorrectionPercents[qrOptions.errorCorrectionLevel];\n const alignment = alignmentCount.find((v) => v[0] <= typeNumber) || [0, 0];\n const maxHiddenDots = Math.floor(coverLevel * (count * count - 3 * 8 * 8 - 2 * (count - 16) - alignment[1] * 25));\n\n drawImageSize = calculateImageSize({\n originalWidth: size.width,\n originalHeight: size.height,\n maxHiddenDots,\n maxHiddenAxisDots: count - 14,\n dotSize,\n margin: imageOptions.margin\n });\n }\n\n this.drawBackground();\n this.drawDots((i: number, j: number): boolean => {\n if (this._options.imageOptions.hideBackgroundDots) {\n if (\n i >= (count - drawImageSize.hideXDots) / 2 &&\n i < (count + drawImageSize.hideXDots) / 2 &&\n j >= (count - drawImageSize.hideYDots) / 2 &&\n j < (count + drawImageSize.hideYDots) / 2\n ) {\n return false;\n }\n }\n\n if (squareMask[i]?.[j] || squareMask[i - count + 7]?.[j] || squareMask[i]?.[j - count + 7]) {\n return false;\n }\n\n if (dotMask[i]?.[j] || dotMask[i - count + 7]?.[j] || dotMask[i]?.[j - count + 7]) {\n return false;\n }\n\n return true;\n });\n this.drawCorners();\n\n if (this._options.image && drawImageSize.width > 0 && drawImageSize.height > 0) {\n await this.drawImage({ width: drawImageSize.width, height: drawImageSize.height, count, dotSize });\n }\n }\n\n drawBackground(): void {\n const element = this._element;\n const options = this._options;\n\n if (element && options.backgroundOptions) {\n const gradientOptions = options.backgroundOptions.gradient;\n const color = options.backgroundOptions.color;\n\n this._createColor({\n options: gradientOptions,\n color: color,\n additionalRotation: 0,\n x: 0,\n y: 0,\n height: options.height,\n width: options.width,\n name: \"background-color\"\n });\n\n const size = Math.min(options.width, options.height);\n const element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n this._backgroundClipPath = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"clipPath\");\n this._backgroundClipPath.setAttribute(\"id\", \"clip-path-background-color\");\n this._defs.appendChild(this._backgroundClipPath);\n\n element.setAttribute(\"x\", String((options.width - size) / 2));\n element.setAttribute(\"y\", String((options.height - size) / 2));\n element.setAttribute(\"width\", String(size));\n element.setAttribute(\"height\", String(size));\n element.setAttribute(\"rx\", String((size / 2) * (options.backgroundOptions.round || 0)));\n\n this._backgroundClipPath.appendChild(element);\n }\n }\n\n drawDots(filter?: FilterFunction): void {\n if (!this._qr) {\n throw \"QR code is not defined\";\n }\n\n const options = this._options;\n const count = this._qr.getModuleCount();\n\n if (count > options.width || count > options.height) {\n throw \"The canvas is too small.\";\n }\n\n const minSize = Math.min(options.width, options.height);\n const dotSize = this._options.dotsOptions.size;\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\n const dot = new QRDot({ svg: this._element, type: options.dotsOptions.type, document: this._document });\n\n this._dotsClipPath = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"clipPath\");\n this._dotsClipPath.setAttribute(\"id\", \"clip-path-dot-color\");\n this._defs.appendChild(this._dotsClipPath);\n\n this._createColor({\n options: options.dotsOptions?.gradient,\n color: options.dotsOptions.color,\n additionalRotation: 0,\n x: 0,\n y: 0,\n height: options.height,\n width: options.width,\n name: \"dot-color\"\n });\n\n for (let i = 0; i < count; i++) {\n for (let j = 0; j < count; j++) {\n if (filter && !filter(i, j)) {\n continue;\n }\n if (!this._qr?.isDark(j, i)) {\n continue;\n }\n\n dot.draw(\n xBeginning + i * dotSize,\n yBeginning + j * dotSize,\n dotSize,\n (xOffset: number, yOffset: number): boolean => {\n if (i + xOffset < 0 || j + yOffset < 0 || i + xOffset >= count || j + yOffset >= count) return false;\n if (filter && !filter(i + xOffset, j + yOffset)) return false;\n return !!this._qr && this._qr.isDark(j + yOffset, i + xOffset);\n }\n );\n\n if (dot._element && this._dotsClipPath) {\n this._dotsClipPath.appendChild(dot._element);\n }\n }\n }\n\n if (options.shape === ShapeType.circle) {\n const margin = (this._options.backgroundOptions && this._options.backgroundOptions.margin) || 0;\n const additionalDots = Math.floor((minSize / dotSize - count - 2 * margin) / 2);\n const fakeCount = count + additionalDots * 2;\n const xFakeBeginning = xBeginning - additionalDots * dotSize;\n const yFakeBeginning = yBeginning - additionalDots * dotSize;\n const fakeMatrix: number[][] = [];\n const center = Math.floor(fakeCount / 2);\n\n for (let i = 0; i < fakeCount; i++) {\n fakeMatrix[i] = [];\n for (let j = 0; j < fakeCount; j++) {\n if (\n i >= additionalDots - 1 &&\n i <= fakeCount - additionalDots &&\n j >= additionalDots - 1 &&\n j <= fakeCount - additionalDots\n ) {\n fakeMatrix[i][j] = 0;\n continue;\n }\n\n if (Math.sqrt((i - center) * (i - center) + (j - center) * (j - center)) > center) {\n fakeMatrix[i][j] = 0;\n continue;\n }\n\n //Get random dots from QR code to show it outside of QR code\n fakeMatrix[i][j] = this._qr.isDark(\n j - 2 * additionalDots < 0 ? j : j >= count ? j - 2 * additionalDots : j - additionalDots,\n i - 2 * additionalDots < 0 ? i : i >= count ? i - 2 * additionalDots : i - additionalDots\n )\n ? 1\n : 0;\n }\n }\n\n for (let i = 0; i < fakeCount; i++) {\n for (let j = 0; j < fakeCount; j++) {\n if (!fakeMatrix[i][j]) continue;\n\n dot.draw(\n xFakeBeginning + i * dotSize,\n yFakeBeginning + j * dotSize,\n dotSize,\n (xOffset: number, yOffset: number): boolean => {\n return !!fakeMatrix[i + xOffset]?.[j + yOffset];\n }\n );\n if (dot._element && this._dotsClipPath) {\n this._dotsClipPath.appendChild(dot._element);\n }\n }\n }\n }\n }\n\n drawCorners(): void {\n if (!this._qr) {\n throw \"QR code is not defined\";\n }\n\n const element = this._element;\n const options = this._options;\n\n if (!element) {\n throw \"Element code is not defined\";\n }\n\n const count = this._qr.getModuleCount();\n const dotSize = this._options.dotsOptions.size;\n const cornersSquareSize = dotSize * 7;\n const cornersDotSize = dotSize * 3;\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\n\n [\n [0, 0, 0],\n [1, 0, Math.PI / 2],\n [0, 1, -Math.PI / 2]\n ].forEach(([column, row, rotation]) => {\n const x = xBeginning + column * dotSize * (count - 7);\n const y = yBeginning + row * dotSize * (count - 7);\n let cornersSquareClipPath = this._dotsClipPath;\n let cornersDotClipPath = this._dotsClipPath;\n\n if (options.cornersSquareOptions?.gradient || options.cornersSquareOptions?.color) {\n cornersSquareClipPath = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"clipPath\");\n cornersSquareClipPath.setAttribute(\"id\", `clip-path-corners-square-color-${column}-${row}`);\n this._defs.appendChild(cornersSquareClipPath);\n this._cornersSquareClipPath = this._cornersDotClipPath = cornersDotClipPath = cornersSquareClipPath;\n\n this._createColor({\n options: options.cornersSquareOptions?.gradient,\n color: options.cornersSquareOptions?.color,\n additionalRotation: rotation,\n x,\n y,\n height: cornersSquareSize,\n width: cornersSquareSize,\n name: `corners-square-color-${column}-${row}`\n });\n }\n\n if (options.cornersSquareOptions?.type) {\n const cornersSquare = new QRCornerSquare({\n svg: this._element,\n type: options.cornersSquareOptions.type,\n document: this._document\n });\n\n cornersSquare.draw(x, y, cornersSquareSize, rotation);\n\n if (cornersSquare._element && cornersSquareClipPath) {\n cornersSquareClipPath.appendChild(cornersSquare._element);\n }\n } else {\n const dot = new QRDot({ svg: this._element, type: options.dotsOptions.type, document: this._document });\n\n for (let i = 0; i < squareMask.length; i++) {\n for (let j = 0; j < squareMask[i].length; j++) {\n if (!squareMask[i]?.[j]) {\n continue;\n }\n\n dot.draw(\n x + i * dotSize,\n y + j * dotSize,\n dotSize,\n (xOffset: number, yOffset: number): boolean => !!squareMask[i + xOffset]?.[j + yOffset]\n );\n\n if (dot._element && cornersSquareClipPath) {\n cornersSquareClipPath.appendChild(dot._element);\n }\n }\n }\n }\n\n if (options.cornersDotOptions?.gradient || options.cornersDotOptions?.color) {\n cornersDotClipPath = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"clipPath\");\n cornersDotClipPath.setAttribute(\"id\", `clip-path-corners-dot-color-${column}-${row}`);\n this._defs.appendChild(cornersDotClipPath);\n this._cornersDotClipPath = cornersDotClipPath;\n\n this._createColor({\n options: options.cornersDotOptions?.gradient,\n color: options.cornersDotOptions?.color,\n additionalRotation: rotation,\n x: x + dotSize * 2,\n y: y + dotSize * 2,\n height: cornersDotSize,\n width: cornersDotSize,\n name: `corners-dot-color-${column}-${row}`\n });\n }\n\n if (options.cornersDotOptions?.type) {\n const cornersDot = new QRCornerDot({\n svg: this._element,\n type: options.cornersDotOptions.type,\n document: this._document\n });\n\n cornersDot.draw(x + dotSize * 2, y + dotSize * 2, cornersDotSize, rotation);\n\n if (cornersDot._element && cornersDotClipPath) {\n cornersDotClipPath.appendChild(cornersDot._element);\n }\n } else {\n const dot = new QRDot({ svg: this._element, type: options.dotsOptions.type, document: this._document });\n\n for (let i = 0; i < dotMask.length; i++) {\n for (let j = 0; j < dotMask[i].length; j++) {\n if (!dotMask[i]?.[j]) {\n continue;\n }\n\n dot.draw(\n x + i * dotSize,\n y + j * dotSize,\n dotSize,\n (xOffset: number, yOffset: number): boolean => !!dotMask[i + xOffset]?.[j + yOffset]\n );\n\n if (dot._element && cornersDotClipPath) {\n cornersDotClipPath.appendChild(dot._element);\n }\n }\n }\n }\n });\n }\n\n async drawImage({\n width,\n height,\n count,\n dotSize\n }: {\n width: number;\n height: number;\n count: number;\n dotSize: number;\n }): Promise<void> {\n const options = this._options;\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\n const margin = options.imageOptions.margin * dotSize;\n const dx = xBeginning + margin + (count * dotSize - width) / 2;\n const dy = yBeginning + margin + (count * dotSize - height) / 2;\n const dw = width - margin * 2;\n const dh = height - margin * 2;\n\n const imageUrl = await this._imageTools.toDataURL(options.image || \"\");\n let image: SVGElement = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"image\");\n image.setAttribute(\"href\", imageUrl || \"\");\n\n if (imageUrl.startsWith(\"data:image/svg+xml;\")) {\n let data = imageUrl.substring(19);\n const i = data.indexOf(\",\");\n const encoding = data.substring(0, i);\n data = data.substring(i + 1);\n\n switch (encoding) {\n case \"base64\":\n data = typeof atob == \"function\" ? atob(data) : Buffer.from(data, \"base64\").toString(\"utf8\");\n break;\n default:\n data = \"\";\n break;\n }\n\n if (data) {\n const container = new DOMParser().parseFromString(data, \"text/xml\");\n const rootEl = Array.from(container.getElementsByTagName(\"svg\"));\n if (rootEl.length) image = rootEl[0];\n }\n }\n\n image.setAttribute(\"x\", String(dx));\n image.setAttribute(\"y\", String(dy));\n image.setAttribute(\"width\", `${dw}px`);\n image.setAttribute(\"height\", `${dh}px`);\n\n this._element.appendChild(image);\n }\n\n /** @ignore */\n _createColor({\n options,\n color,\n additionalRotation,\n x,\n y,\n height,\n width,\n name\n }: {\n options?: Gradient;\n color?: string;\n additionalRotation: number;\n x: number;\n y: number;\n height: number;\n width: number;\n name: string;\n }): void {\n const size = width > height ? width : height;\n const rect = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n rect.setAttribute(\"x\", String(x));\n rect.setAttribute(\"y\", String(y));\n rect.setAttribute(\"height\", String(height));\n rect.setAttribute(\"width\", String(width));\n rect.setAttribute(\"clip-path\", `url('#clip-path-${name}')`);\n\n if (options) {\n let gradient: SVGElement;\n if (options.type === GradientType.radial) {\n gradient = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"radialGradient\");\n gradient.setAttribute(\"id\", name);\n gradient.setAttribute(\"gradientUnits\", \"userSpaceOnUse\");\n gradient.setAttribute(\"fx\", String(x + width / 2));\n gradient.setAttribute(\"fy\", String(y + height / 2));\n gradient.setAttribute(\"cx\", String(x + width / 2));\n gradient.setAttribute(\"cy\", String(y + height / 2));\n gradient.setAttribute(\"r\", String(size / 2));\n } else {\n const rotation = ((options.rotation || 0) + additionalRotation) % (2 * Math.PI);\n const positiveRotation = (rotation + 2 * Math.PI) % (2 * Math.PI);\n let x0 = x + width / 2;\n let y0 = y + height / 2;\n let x1 = x + width / 2;\n let y1 = y + height / 2;\n\n if (\n (positiveRotation >= 0 && positiveRotation <= 0.25 * Math.PI) ||\n (positiveRotation > 1.75 * Math.PI && positiveRotation <= 2 * Math.PI)\n ) {\n x0 = x0 - width / 2;\n y0 = y0 - (height / 2) * Math.tan(rotation);\n x1 = x1 + width / 2;\n y1 = y1 + (height / 2) * Math.tan(rotation);\n } else if (positiveRotation > 0.25 * Math.PI && positiveRotation <= 0.75 * Math.PI) {\n y0 = y0 - height / 2;\n x0 = x0 - width / 2 / Math.tan(rotation);\n y1 = y1 + height / 2;\n x1 = x1 + width / 2 / Math.tan(rotation);\n } else if (positiveRotation > 0.75 * Math.PI && positiveRotation <= 1.25 * Math.PI) {\n x0 = x0 + width / 2;\n y0 = y0 + (height / 2) * Math.tan(rotation);\n x1 = x1 - width / 2;\n y1 = y1 - (height / 2) * Math.tan(rotation);\n } else if (positiveRotation > 1.25 * Math.PI && positiveRotation <= 1.75 * Math.PI) {\n y0 = y0 + height / 2;\n x0 = x0 + width / 2 / Math.tan(rotation);\n y1 = y1 - height / 2;\n x1 = x1 - width / 2 / Math.tan(rotation);\n }\n\n gradient = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"linearGradient\");\n gradient.setAttribute(\"id\", name);\n gradient.setAttribute(\"gradientUnits\", \"userSpaceOnUse\");\n gradient.setAttribute(\"x1\", String(Math.round(x0)));\n gradient.setAttribute(\"y1\", String(Math.round(y0)));\n gradient.setAttribute(\"x2\", String(Math.round(x1)));\n gradient.setAttribute(\"y2\", String(Math.round(y1)));\n }\n\n options.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => {\n const stop = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"stop\");\n stop.setAttribute(\"offset\", `${100 * offset}%`);\n stop.setAttribute(\"stop-color\", color);\n gradient.appendChild(stop);\n });\n\n rect.setAttribute(\"fill\", `url('#${name}')`);\n this._defs.appendChild(gradient);\n } else if (color) {\n rect.setAttribute(\"fill\", color);\n }\n\n this._element.appendChild(rect);\n }\n}\n","import qrcode from \"qrcode-generator\";\nimport { getMode } from \"../tools/getMode\";\nimport { mergeDeep } from \"../tools/merge\";\nimport { sanitizeOptions } from \"../tools/sanitizeOptions\";\nimport { ExtensionFunction, Mode, Options, QRCode, ShapeType } from \"../types\";\nimport { defaultOptions, RequiredOptions } from \"./QROptions\";\nimport { QRSVG } from \"./QRSVG\";\n\nexport class QRCodeStyling {\n /** @ignore */\n _options: RequiredOptions;\n /** @ignore */\n _container?: HTMLElement;\n /** @ignore */\n _svg?: SVGElement;\n /** @ignore */\n _qr?: QRCode;\n /** @ignore */\n _extension?: ExtensionFunction;\n /** @ignore */\n _svgDrawingPromise?: Promise<void>;\n\n constructor(options?: Partial<Options>) {\n this._options = options ? sanitizeOptions(mergeDeep(defaultOptions, options) as RequiredOptions) : defaultOptions;\n this.update();\n }\n\n /** @ignore */\n static _clearContainer(container?: HTMLElement): void {\n if (container) {\n container.innerHTML = \"\";\n }\n }\n\n /** @ignore */\n _setupSvg(): void {\n if (!this._qr) {\n return;\n }\n const count = Math.ceil((this._options.shape == ShapeType.circle ? Math.sqrt(2) : 1) * this._qr.getModuleCount());\n const margin = (this._options.backgroundOptions && this._options.backgroundOptions.margin) || 0;\n const size = Math.ceil(this._options.dotsOptions.size * (count + 2 * margin));\n const qrSVG = new QRSVG({\n ...this._options,\n width: size,\n height: size\n });\n\n this._svg = qrSVG.getElement();\n this._svgDrawingPromise = qrSVG.drawQR(this._qr).then(() => {\n if (!this._svg) return;\n this._extension?.(qrSVG.getElement(), this._options);\n });\n }\n\n /** @ignore */\n async _getElement(): Promise<SVGElement | undefined> {\n if (!this._qr) throw \"QR code is empty\";\n\n if (!this._svg || !this._svgDrawingPromise) {\n this._setupSvg();\n }\n await this._svgDrawingPromise;\n return this._svg;\n }\n\n update(\n /** The same options as for initialization */\n options?: Partial<Options>\n ): void {\n QRCodeStyling._clearContainer(this._container);\n this._options = options ? sanitizeOptions(mergeDeep(this._options, options) as RequiredOptions) : this._options;\n\n if (!this._options.data) {\n return;\n }\n\n this._qr = qrcode(this._options.qrOptions.typeNumber, this._options.qrOptions.errorCorrectionLevel);\n let mode = this._options.qrOptions.mode || getMode(this._options.data);\n if (mode == Mode.unicode) {\n qrcode.stringToBytes = qrcode.stringToBytesFuncs[\"UTF-8\"];\n mode = Mode.byte;\n } else {\n qrcode.stringToBytes = qrcode.stringToBytesFuncs[\"default\"];\n }\n this._qr.addData(this._options.data, mode);\n this._qr.make();\n\n this._setupSvg();\n\n this.append(this._container);\n }\n\n append(\n /** This container will be used for appending of the QR code */\n container?: HTMLElement\n ): void {\n if (!container) {\n return;\n }\n\n if (typeof container.appendChild !== \"function\") {\n throw \"Container should be a single DOM node\";\n }\n\n if (this._svg) {\n container.appendChild(this._svg);\n }\n\n this._container = container;\n }\n\n /**\n *\n * @example\n *\n * ```js\n * const extension = (svg, options) => {\n * const { width, height } = options;\n * const size = Math.min(width, height);\n * const border = options.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n * const borderAttributes = {\n * fill: \"none\",\n * x: (width - size + 40) / 2,\n * y: (height - size + 40) / 2,\n * width: size - 40,\n * height: size - 40,\n * stroke: \"black\",\n * \"stroke-width\": 40,\n * rx: 100\n * };\n * Object.keys(borderAttributes).forEach((attribute) => {\n * border.setAttribute(attribute, borderAttributes[attribute]);\n * });\n * svg.appendChild(border);\n * };\n * ```\n */\n applyExtension(\n /** Extension is a function that takes svg and previously applied options and modifies an svg */\n extension: ExtensionFunction\n ): void {\n if (!extension) {\n throw \"Extension function should be defined.\";\n }\n\n this._extension = extension;\n this.update();\n }\n\n deleteExtension(): void {\n this._extension = undefined;\n this.update();\n }\n\n async serialize(): Promise<string | undefined> {\n if (!this._qr) throw \"QR code is empty\";\n\n const element = await this._getElement();\n\n if (!element) {\n return;\n }\n\n const serializer = new XMLSerializer();\n let source = serializer.serializeToString(element);\n\n source = '<?xml version=\"1.0\" standalone=\"no\"?>\\r\\n' + source;\n return source;\n }\n}\n","import { DOMImplementation, DOMParser, XMLSerializer } from \"@xmldom/xmldom\";\nimport { fileTypeFromBuffer } from \"file-type\";\nimport sharp from \"sharp\";\nimport { RequiredOptions } from \"./core/QROptions\";\nimport { QRCodeStyling as _QRCodeStyling } from \"./index\";\nexport { ErrorCorrectionPercents } from \"./constants/errorCorrectionPercents\";\nexport * from \"./types\";\nimport type * as _browserUtils from \"./tools/browserUtils\";\n\nexport const browserUtils: typeof _browserUtils | undefined = undefined;\n\nexport class QRCodeStyling extends _QRCodeStyling {\n constructor(options: RequiredOptions) {\n const dom = new DOMImplementation().createDocument(null, null);\n const imageCache = new Map<string, Promise<{ contentType?: string | null; data: Buffer }>>();\n\n const loadImage = async function (url: string | Buffer | Blob) {\n if (typeof url == \"string\") {\n let pr = imageCache.get(url);\n if (pr) return pr;\n pr = fetch(url).then((res) =>\n res\n .arrayBuffer()\n .then((buff) => Buffer.from(buff))\n .then(async (data) => ({\n contentType: res.headers.get(\"Content-Type\") || (await fileTypeFromBuffer(data).then((r) => r?.mime)),\n data\n }))\n );\n imageCache.set(url, pr);\n return pr;\n } else {\n const buff = Buffer.from(url as Buffer);\n const mime = await fileTypeFromBuffer(buff).then((r) => r?.mime);\n return {\n contentType: mime,\n data: buff\n };\n }\n };\n\n global.XMLSerializer = XMLSerializer;\n global.DOMParser = DOMParser;\n\n super({\n ...options,\n document: options.document || dom,\n imageTools: options.imageTools || {\n toDataURL: (url) =>\n loadImage(url).then(\n ({ contentType, data }) =>\n `data:${contentType?.replace(\"application/xml\", \"image/svg+xml\")};base64,${data.toString(\"base64\")}`\n ),\n getSize: async function (options) {\n if (!options.image) {\n throw new Error(\"Image is not defined\");\n }\n const { data } = Buffer.isBuffer(options.image) ? { data: options.image } : await loadImage(options.image);\n const meta = await sharp(data).metadata();\n return {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n width: meta.width!,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n height: meta.height!\n };\n }\n }\n });\n }\n}\n"],"names":["_QRCodeStyling","XMLSerializer","DOMParser"],"mappings":"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"}
1
+ {"version":3,"file":"qr-code-styling-node.js","sources":["../src/types/index.ts","../src/constants/errorCorrectionPercents.ts","../src/tools/getMode.ts","../src/tools/merge.ts","../src/tools/sanitizeOptions.ts","../src/core/QROptions.ts","../src/figures/cornerDot/QRCornerDot.ts","../src/figures/cornerSquare/QRCornerSquare.ts","../src/figures/dot/QRDot.ts","../src/tools/browserImageTools.ts","../src/tools/calculateImageSize.ts","../src/core/QRSVG.ts","../src/core/QRCodeStyling.ts","../src/node.ts"],"sourcesContent":["import { browserImageTools } from \"../tools/browserImageTools\";\n\nexport interface UnknownObject {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n}\n\nexport enum DotType {\n dots = \"dots\",\n randomDots = \"random-dots\",\n rounded = \"rounded\",\n verticalLines = \"vertical-lines\",\n horizontalLines = \"horizontal-lines\",\n classy = \"classy\",\n classyRounded = \"classy-rounded\",\n square = \"square\",\n smallSquare = \"small-square\",\n extraRounded = \"extra-rounded\",\n diamond = \"diamond\"\n}\nexport enum CornerDotType {\n dot = \"dot\",\n square = \"square\",\n heart = \"heart\",\n extraRounded = \"extra-rounded\",\n classy = \"classy\",\n outpoint = \"outpoint\",\n inpoint = \"inpoint\"\n}\nexport enum CornerSquareType {\n dot = \"dot\",\n square = \"square\",\n extraRounded = \"extra-rounded\",\n classy = \"classy\",\n outpoint = \"outpoint\",\n inpoint = \"inpoint\"\n}\nexport enum GradientType {\n radial = \"radial\",\n linear = \"linear\"\n}\nexport enum ShapeType {\n square = \"square\",\n circle = \"circle\"\n}\n\nexport type Gradient = {\n /**\n * Type of gradient spread\n *\n * @default GradientType.linear\n */\n type: GradientType;\n /**\n * Rotation of gradient (in radians, Math.PI === 180 degrees)\n *\n * @default 0\n */\n rotation?: number;\n /** Gradient colors. */\n colorStops: {\n /** Position of color in gradient range */\n offset: number;\n /** Color of stop in gradient range */\n color: string;\n }[];\n};\n\ntype TypeNumber =\n | 0\n | 1\n | 2\n | 3\n | 4\n | 5\n | 6\n | 7\n | 8\n | 9\n | 10\n | 11\n | 12\n | 13\n | 14\n | 15\n | 16\n | 17\n | 18\n | 19\n | 20\n | 21\n | 22\n | 23\n | 24\n | 25\n | 26\n | 27\n | 28\n | 29\n | 30\n | 31\n | 32\n | 33\n | 34\n | 35\n | 36\n | 37\n | 38\n | 39\n | 40;\n\nconst TypeNumber = Array(41)\n .fill(0)\n .map((_, i) => i) as unknown as {\n [P in TypeNumber]: P;\n};\n\nexport { TypeNumber };\n\nexport enum ErrorCorrectionLevel {\n L = \"L\",\n M = \"M\",\n Q = \"Q\",\n H = \"H\"\n}\n\nexport enum Mode {\n numeric = \"Numeric\",\n alphanumeric = \"Alphanumeric\",\n byte = \"Byte\",\n kanji = \"Kanji\",\n unicode = \"Unicode\"\n}\n\nexport interface QRCode {\n addData(data: string, mode?: Mode.alphanumeric | Mode.byte | Mode.kanji | Mode.numeric): void;\n make(): void;\n getModuleCount(): number;\n isDark(row: number, col: number): boolean;\n}\n\nexport type Options = {\n /** Use a custom DOM domplementation */\n document?: Document;\n /** Use a custom image fetching & serializaton implementation */\n imageTools?: typeof browserImageTools;\n /** @ignore */\n width?: number;\n /** @ignore */\n height?: number;\n /** The data will be encoded in the QR code */\n data?: string;\n /** The image will be copied to the center of the QR code */\n image?: string | Buffer | Blob;\n /**\n * QR code shape\n *\n * @default ShapeType.square\n */\n shape?: ShapeType;\n /** Options will be passed to `qrcode-generator` lib */\n qrOptions?: {\n typeNumber?: TypeNumber;\n mode?: Mode;\n /** @default ErrorCorrectionLevel.Q */\n errorCorrectionLevel?: ErrorCorrectionLevel;\n };\n imageOptions?: {\n /**\n * Hide all dots covered by the image\n *\n * @default true\n */\n hideBackgroundDots?: boolean;\n /**\n * Coefficient of the image size\n *\n * @default 0.4\n */\n imageSize?: number;\n /**\n * Margin of the image (in blocks)\n *\n * @default 0\n */\n margin?: number;\n /**\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLImageElement/crossOrigin)\n */\n crossOrigin?: string;\n };\n dotsOptions?: {\n /**\n * QR dot size (in pixels)\n *\n * @default 10\n */\n size?: number;\n /**\n * Color of QR dots\n *\n * @default \"#000\"\n */\n color?: string;\n /** Gradient of QR dots */\n gradient?: Gradient;\n /**\n * Style of QR dots\n *\n * @default DotType.square\n */\n type?: DotType;\n };\n /** Corners Square options, omitted values match dots */\n cornersSquareOptions?: {\n /** Color of Corners Square */\n color?: string;\n /** Gradient of Corners Square */\n gradient?: Gradient;\n /** Style of Corners Square */\n type?: CornerSquareType;\n };\n /** Corners Dot options, omitted values match squares */\n cornersDotOptions?: {\n /** Color of Corners Dot */\n color?: string;\n /** Gradient of Corners Dot */\n gradient?: Gradient;\n /** Style of Corners Dot */\n type?: CornerDotType;\n };\n /** QR background styling options, false to disable background */\n backgroundOptions?:\n | {\n /** Background roundnes, from 0 (square) to 1 (circle) */\n round?: number;\n /** Background color */\n color?: string;\n /** Background Gradient */\n gradient?: Gradient;\n /**\n * Margin (in blocks) between background and the QR code\n *\n * @default 0\n */\n margin?: number;\n }\n | false;\n /** `import { stringToBytesFuncs } from \"@liquid-js/qr-code-styling/kanji\";` to add Kanji support */\n stringToBytesFuncs?: { [encoding: string]: (s: string) => number[] };\n};\n\nexport type CanvasOptions = {\n width?: number;\n height?: number;\n margin?: number;\n};\n\nexport type FilterFunction = (i: number, j: number) => boolean;\n\nexport type DrawArgs = {\n x: number;\n y: number;\n size: number;\n rotation?: number;\n getNeighbor?: GetNeighbor;\n};\n\nexport type BasicFigureDrawArgs = {\n x: number;\n y: number;\n size: number;\n rotation?: number;\n};\n\nexport type RotateFigureArgs = {\n x: number;\n y: number;\n size: number;\n rotation?: number;\n draw: () => void;\n};\n\nexport type GetNeighbor = (x: number, y: number) => boolean;\n\nexport type ExtensionFunction = (svg: SVGElement, options: Options) => void;\n\nexport enum FileExtension {\n svg = \"svg\",\n png = \"png\",\n jpeg = \"jpeg\",\n webp = \"webp\"\n}\n","import { ErrorCorrectionLevel } from \"../types\";\n\nexport const ErrorCorrectionPercents = {\n [ErrorCorrectionLevel.L]: 0.07,\n [ErrorCorrectionLevel.M]: 0.15,\n [ErrorCorrectionLevel.Q]: 0.25,\n [ErrorCorrectionLevel.H]: 0.3\n};\n","import { Mode } from \"../types\";\n\nexport function getMode(data: string): Mode {\n switch (true) {\n case /^[0-9]*$/.test(data):\n return Mode.numeric;\n case /^[0-9A-Z $%*+\\-./:]*$/.test(data):\n return Mode.alphanumeric;\n // eslint-disable-next-line no-control-regex\n case /[^\\u0000-\\u00ff]/.test(data):\n return Mode.unicode;\n default:\n return Mode.byte;\n }\n}\n","import { UnknownObject } from \"../types\";\n\nconst isObject = (obj: Record<string, unknown>): boolean => !!obj && typeof obj === \"object\" && !Array.isArray(obj);\n\nexport function mergeDeep(target: UnknownObject, ...sources: UnknownObject[]): UnknownObject {\n if (!sources.length) return target;\n const source = sources.shift();\n if (source === undefined || !isObject(target) || !isObject(source)) return target;\n target = { ...target };\n Object.keys(source).forEach((key: string): void => {\n const targetValue = target[key];\n const sourceValue = source[key];\n\n if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\n target[key] = sourceValue;\n } else if (isObject(targetValue) && isObject(sourceValue)) {\n target[key] = mergeDeep(Object.assign({}, targetValue), sourceValue);\n } else {\n target[key] = sourceValue;\n }\n });\n\n return mergeDeep(target, ...sources);\n}\n","import { RequiredCanvasOptions, RequiredOptions } from \"../core/QROptions\";\nimport { Gradient } from \"../types\";\n\nfunction sanitizeGradient(gradient: Gradient): Gradient {\n const newGradient = { ...gradient };\n\n if (!newGradient.colorStops || !newGradient.colorStops.length) {\n throw \"Field 'colorStops' is required in gradient\";\n }\n\n if (newGradient.rotation) {\n newGradient.rotation = Number(newGradient.rotation);\n } else {\n newGradient.rotation = 0;\n }\n\n newGradient.colorStops = newGradient.colorStops.map((colorStop: { offset: number; color: string }) => ({\n ...colorStop,\n offset: Number(colorStop.offset)\n }));\n\n return newGradient;\n}\n\nexport function sanitizeOptions(options: RequiredOptions): RequiredOptions {\n const newOptions = { ...options };\n\n newOptions.imageOptions = {\n ...newOptions.imageOptions,\n hideBackgroundDots: Boolean(newOptions.imageOptions.hideBackgroundDots),\n imageSize: Math.min(1, Number(newOptions.imageOptions.imageSize)) || 1,\n margin: Number(newOptions.imageOptions.margin)\n };\n\n newOptions.dotsOptions = {\n ...newOptions.dotsOptions\n };\n if (newOptions.dotsOptions.gradient) {\n newOptions.dotsOptions.gradient = sanitizeGradient(newOptions.dotsOptions.gradient);\n }\n // Ensure integer dot size\n newOptions.dotsOptions.size = Math.round(Math.max(0, newOptions.dotsOptions.size) || 10);\n\n if (newOptions.cornersSquareOptions) {\n newOptions.cornersSquareOptions = {\n ...newOptions.cornersSquareOptions\n };\n if (newOptions.cornersSquareOptions.gradient) {\n newOptions.cornersSquareOptions.gradient = sanitizeGradient(newOptions.cornersSquareOptions.gradient);\n }\n }\n\n if (newOptions.cornersDotOptions) {\n newOptions.cornersDotOptions = {\n ...newOptions.cornersDotOptions\n };\n if (newOptions.cornersDotOptions.gradient) {\n newOptions.cornersDotOptions.gradient = sanitizeGradient(newOptions.cornersDotOptions.gradient);\n }\n }\n\n if (newOptions.backgroundOptions) {\n newOptions.backgroundOptions = {\n ...newOptions.backgroundOptions\n };\n if (newOptions.backgroundOptions.gradient) {\n newOptions.backgroundOptions.gradient = sanitizeGradient(newOptions.backgroundOptions.gradient);\n }\n }\n\n if (!newOptions.document) newOptions.document = document;\n\n return newOptions;\n}\n\nexport function sanitizeCanvasOptions(options: RequiredCanvasOptions): RequiredCanvasOptions {\n const newOptions = { ...options };\n\n newOptions.width = Number(newOptions.width);\n newOptions.height = Number(newOptions.height);\n newOptions.margin = Number(newOptions.margin);\n\n if (newOptions.margin > Math.min(newOptions.width, newOptions.height)) {\n newOptions.margin = Math.min(newOptions.width, newOptions.height);\n }\n\n return newOptions;\n}\n","import { CanvasOptions, DotType, ErrorCorrectionLevel, Gradient, Mode, Options, ShapeType, TypeNumber } from \"../types\";\n\nexport interface RequiredOptions extends Options {\n document: Document;\n shape: ShapeType;\n width: number;\n height: number;\n data: string;\n qrOptions: {\n typeNumber: TypeNumber;\n mode?: Mode;\n errorCorrectionLevel: ErrorCorrectionLevel;\n };\n imageOptions: {\n hideBackgroundDots: boolean;\n imageSize: number;\n crossOrigin?: string;\n margin: number;\n };\n dotsOptions: {\n type: DotType;\n color: string;\n gradient?: Gradient;\n size: number;\n };\n}\n\nexport const defaultOptions: RequiredOptions = {\n document: undefined as never,\n shape: ShapeType.square,\n width: undefined as never,\n height: undefined as never,\n data: \"\",\n qrOptions: {\n typeNumber: TypeNumber[0],\n mode: undefined,\n errorCorrectionLevel: ErrorCorrectionLevel.Q\n },\n imageOptions: {\n hideBackgroundDots: true,\n imageSize: 0.4,\n crossOrigin: undefined,\n margin: 0\n },\n dotsOptions: {\n type: DotType.square,\n color: \"#000\",\n size: 10\n }\n};\n\nexport interface RequiredCanvasOptions extends CanvasOptions {\n width: number;\n height: number;\n margin: number;\n}\n\nexport const defaultCanvasOptions: RequiredCanvasOptions = {\n width: 300,\n height: 300,\n margin: 0\n};\n","import { BasicFigureDrawArgs, CornerDotType, DrawArgs, RotateFigureArgs } from \"../../types\";\n\nexport class QRCornerDot {\n _element?: SVGElement;\n _svg: SVGElement;\n _type: CornerDotType;\n _document: Document;\n\n constructor({ svg, type, document }: { svg: SVGElement; type: CornerDotType; document: Document }) {\n this._svg = svg;\n this._type = type;\n this._document = document;\n }\n\n draw(x: number, y: number, size: number, rotation: number): void {\n const type = this._type;\n let drawFunction;\n\n switch (type) {\n case CornerDotType.square:\n drawFunction = this._drawSquare;\n break;\n case CornerDotType.heart:\n drawFunction = this._drawHeart;\n break;\n case CornerDotType.extraRounded:\n drawFunction = this._drawRounded;\n break;\n case CornerDotType.classy:\n drawFunction = this._drawClassy;\n break;\n case CornerDotType.inpoint:\n drawFunction = this._drawInpoint;\n break;\n case CornerDotType.outpoint:\n drawFunction = this._drawOutpoint;\n break;\n case CornerDotType.dot:\n default:\n drawFunction = this._drawDot;\n }\n\n drawFunction.call(this, { x, y, size, rotation });\n }\n\n _rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\n const cx = x + size / 2;\n const cy = y + size / 2;\n\n draw();\n this._element?.setAttribute(\"transform\", `rotate(${(180 * rotation) / Math.PI},${cx},${cy})`);\n }\n\n _basicDot(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\n this._element.setAttribute(\"cx\", String(x + size / 2));\n this._element.setAttribute(\"cy\", String(y + size / 2));\n this._element.setAttribute(\"r\", String(size / 2));\n }\n });\n }\n\n _basicSquare(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n this._element.setAttribute(\"x\", String(x));\n this._element.setAttribute(\"y\", String(y));\n this._element.setAttribute(\"width\", String(size));\n this._element.setAttribute(\"height\", String(size));\n }\n });\n }\n\n _basicHeart(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n const path = [\n \"M\",\n 0.925,\n 0.3538125,\n \"c\",\n 0,\n 0.0325869,\n -0.0054931,\n 0.0644619,\n -0.0164688,\n 0.095625,\n \"S\",\n 0.87825,\n 0.5147812,\n 0.850625,\n 0.5519688,\n \"C\",\n 0.823,\n 0.5891563,\n 0.7858125,\n 0.631125,\n 0.7390625,\n 0.677875,\n \"S\",\n 0.6331632,\n 0.7802256,\n 0.561625,\n 0.8446875,\n \"L\",\n 0.5,\n 0.8999375,\n \"l\",\n -0.061625,\n -0.05525,\n \"C\",\n 0.3668368,\n 0.7802256,\n 0.3076875,\n 0.724625,\n 0.2609375,\n 0.677875,\n \"S\",\n 0.177,\n 0.5891563,\n 0.149375,\n 0.5519688,\n \"S\",\n 0.1024444,\n 0.4806007,\n 0.0914688,\n 0.4494375,\n \"S\",\n 0.075,\n 0.3863994,\n 0.075,\n 0.3538125,\n \"C\",\n 0.075,\n 0.2872256,\n 0.0973125,\n 0.231625,\n 0.1419375,\n 0.187,\n \"S\",\n 0.2421631,\n 0.1200625,\n 0.30875,\n 0.1200625,\n \"c\",\n 0.0368369,\n 0,\n 0.0718994,\n 0.0077881,\n 0.1051875,\n 0.023375,\n \"S\",\n 0.4759131,\n 0.1809756,\n 0.5,\n 0.2093125,\n \"c\",\n 0.0240868,\n -0.0283369,\n 0.0527744,\n -0.0502881,\n 0.0860625,\n -0.065875,\n \"c\",\n 0.0332882,\n -0.0155869,\n 0.0683507,\n -0.023375,\n 0.1051875,\n -0.023375,\n \"c\",\n 0.0665869,\n 0,\n 0.1221875,\n 0.0223125,\n 0.1668125,\n 0.0669375,\n \"S\",\n 0.925,\n 0.2872256,\n 0.925,\n 0.3538125,\n \"z\"\n ];\n let move = false;\n let i = 0;\n this._element.setAttribute(\n \"d\",\n path\n .map((v) => {\n if (typeof v == \"string\") {\n i = 0;\n move = v.toUpperCase() == v;\n return v;\n }\n i++;\n v = v * size;\n if (move) {\n v += i % 2 == 1 ? x : y;\n }\n return v.toFixed(5);\n })\n .join(\" \")\n );\n }\n\n _basicRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n this._element.setAttribute(\"x\", String(x));\n this._element.setAttribute(\"y\", String(y));\n this._element.setAttribute(\"width\", String(size));\n this._element.setAttribute(\"height\", String(size));\n this._element.setAttribute(\"rx\", String(size / 4));\n this._element.setAttribute(\"ry\", String(size / 4));\n }\n });\n }\n\n _basicClassy(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y + 2.5 * dotSize}` +\n `v ${2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}` +\n `h ${4.5 * dotSize}` +\n `v ${-4.5 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}` +\n `h ${-2 * dotSize}` +\n `H ${x}` +\n `z`\n );\n }\n });\n }\n\n _basicInpoint(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y + dotSize / 2}` +\n `v ${dotSize / 4}` +\n `a ${dotSize / 4}, ${dotSize / 4} 0 0 0 ${dotSize / 4}, ${dotSize / 4}` +\n `h ${(dotSize / 4) * 3}` +\n `v ${(-dotSize / 4) * 3}` +\n `a ${dotSize / 4}, ${dotSize / 4} 0 0 0 ${-dotSize / 4}, ${-dotSize / 4}` +\n `h ${-dotSize / 2}` +\n `a ${dotSize / 4}, ${dotSize / 4} 0 0 0 ${-dotSize / 4}, ${dotSize / 4}` +\n `z`\n );\n }\n });\n }\n\n _drawDot({ x, y, size, rotation }: DrawArgs): void {\n this._basicDot({ x, y, size, rotation });\n }\n\n _drawSquare({ x, y, size, rotation }: DrawArgs): void {\n this._basicSquare({ x, y, size, rotation });\n }\n\n _drawHeart({ x, y, size, rotation }: DrawArgs): void {\n const scaleFactor = 0.2;\n this._basicHeart({\n x: x - (scaleFactor * size) / 2,\n y: y - (scaleFactor * size) / 2,\n size: size * (1 + scaleFactor),\n rotation\n });\n }\n\n _drawRounded({ x, y, size, rotation }: DrawArgs): void {\n this._basicRounded({ x, y, size, rotation });\n }\n\n _drawClassy({ x, y, size, rotation }: DrawArgs): void {\n this._basicClassy({ x, y, size, rotation });\n }\n\n _drawInpoint({ x, y, size, rotation }: DrawArgs): void {\n this._basicInpoint({ x, y, size, rotation });\n }\n\n _drawOutpoint({ x, y, size, rotation }: DrawArgs): void {\n this._basicInpoint({ x, y, size, rotation: (rotation || 0) + Math.PI });\n }\n}\n","import { CornerSquareType, DrawArgs, BasicFigureDrawArgs, RotateFigureArgs } from \"../../types\";\n\nexport class QRCornerSquare {\n _element?: SVGElement;\n _svg: SVGElement;\n _type: CornerSquareType;\n _document: Document;\n\n constructor({ svg, type, document }: { svg: SVGElement; type: CornerSquareType; document: Document }) {\n this._svg = svg;\n this._type = type;\n this._document = document;\n }\n\n draw(x: number, y: number, size: number, rotation: number): void {\n const type = this._type;\n let drawFunction;\n\n switch (type) {\n case CornerSquareType.square:\n drawFunction = this._drawSquare;\n break;\n case CornerSquareType.extraRounded:\n drawFunction = this._drawExtraRounded;\n break;\n case CornerSquareType.classy:\n drawFunction = this._drawClassy;\n break;\n case CornerSquareType.outpoint:\n drawFunction = this._drawOutpoint;\n break;\n case CornerSquareType.inpoint:\n drawFunction = this._drawInpoint;\n break;\n case CornerSquareType.dot:\n default:\n drawFunction = this._drawDot;\n }\n\n drawFunction.call(this, { x, y, size, rotation });\n }\n\n _rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\n const cx = x + size / 2;\n const cy = y + size / 2;\n\n draw();\n this._element?.setAttribute(\"transform\", `rotate(${(180 * rotation) / Math.PI},${cx},${cy})`);\n }\n\n _basicDot(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n `M ${x + size / 2} ${y}` + // M cx, y // Move to top of ring\n `a ${size / 2} ${size / 2} 0 1 0 0.1 0` + // a outerRadius, outerRadius, 0, 1, 0, 1, 0 // Draw outer arc, but don't close it\n `z` + // Z // Close the outer shape\n `m 0 ${dotSize}` + // m -1 outerRadius-innerRadius // Move to top point of inner radius\n `a ${size / 2 - dotSize} ${size / 2 - dotSize} 0 1 1 -0.1 0` + // a innerRadius, innerRadius, 0, 1, 1, -1, 0 // Draw inner arc, but don't close it\n `Z` // Z // Close the inner ring. Actually will still work without, but inner ring will have one unit missing in stroke\n );\n }\n });\n }\n\n _basicSquare(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y}` +\n `v ${size}` +\n `h ${size}` +\n `v ${-size}` +\n `z` +\n `M ${x + dotSize} ${y + dotSize}` +\n `h ${size - 2 * dotSize}` +\n `v ${size - 2 * dotSize}` +\n `h ${-size + 2 * dotSize}` +\n `z`\n );\n }\n });\n }\n\n _basicExtraRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y + 2.5 * dotSize}` +\n `v ${2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}` +\n `h ${2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${-dotSize * 2.5}` +\n `v ${-2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}` +\n `h ${-2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${dotSize * 2.5}` +\n `M ${x + 2.5 * dotSize} ${y + dotSize}` +\n `h ${2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}` +\n `v ${2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${dotSize * 1.5}` +\n `h ${-2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}` +\n `v ${-2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${-dotSize * 1.5}`\n );\n }\n });\n }\n\n _basicClassy(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y + 2.5 * dotSize}` +\n `v ${2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}` +\n `h ${4.5 * dotSize}` +\n `v ${-4.5 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}` +\n `h ${-2 * dotSize}` +\n `H ${x}` +\n `z` +\n `M ${x + 2.5 * dotSize} ${y + dotSize}` +\n `h ${2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}` +\n `v ${3.5 * dotSize}` +\n `h ${-3.5 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}` +\n `v ${-3.5 * dotSize}` +\n `z`\n );\n }\n });\n }\n\n _basicInpoint(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y + 2.5 * dotSize}` +\n `v ${2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}` +\n `h ${4.5 * dotSize}` +\n `v ${-4.5 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}` +\n `h ${-2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${dotSize * 2.5}` +\n `M ${x + 2.5 * dotSize} ${y + dotSize}` +\n `h ${2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}` +\n `v ${3.5 * dotSize}` +\n `h ${-3.5 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}` +\n `v ${-2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${-dotSize * 1.5}`\n );\n }\n });\n }\n\n _drawDot({ x, y, size, rotation }: DrawArgs): void {\n this._basicDot({ x, y, size, rotation });\n }\n\n _drawSquare({ x, y, size, rotation }: DrawArgs): void {\n this._basicSquare({ x, y, size, rotation });\n }\n\n _drawExtraRounded({ x, y, size, rotation }: DrawArgs): void {\n this._basicExtraRounded({ x, y, size, rotation });\n }\n\n _drawClassy({ x, y, size, rotation }: DrawArgs): void {\n this._basicClassy({ x, y, size, rotation });\n }\n\n _drawInpoint({ x, y, size, rotation }: DrawArgs): void {\n this._basicInpoint({ x, y, size, rotation });\n }\n\n _drawOutpoint({ x, y, size, rotation }: DrawArgs): void {\n this._basicInpoint({ x, y, size, rotation: (rotation || 0) + Math.PI });\n }\n}\n","import { DotType, GetNeighbor, DrawArgs, BasicFigureDrawArgs, RotateFigureArgs } from \"../../types\";\n\nexport class QRDot {\n _element?: SVGElement;\n _svg: SVGElement;\n _type: DotType;\n _document: Document;\n\n constructor({ svg, type, document }: { svg: SVGElement; type: DotType; document: Document }) {\n this._svg = svg;\n this._type = type;\n this._document = document;\n }\n\n draw(x: number, y: number, size: number, getNeighbor: GetNeighbor): void {\n const type = this._type;\n let drawFunction;\n\n switch (type) {\n case DotType.dots:\n drawFunction = this._drawDot;\n break;\n case DotType.randomDots:\n drawFunction = this._drawRandomDot;\n break;\n case DotType.classy:\n drawFunction = this._drawClassy;\n break;\n case DotType.classyRounded:\n drawFunction = this._drawClassyRounded;\n break;\n case DotType.rounded:\n drawFunction = this._drawRounded;\n break;\n case DotType.verticalLines:\n drawFunction = this._drawVerticalLines;\n break;\n case DotType.horizontalLines:\n drawFunction = this._drawHorizontalLines;\n break;\n case DotType.extraRounded:\n drawFunction = this._drawExtraRounded;\n break;\n case DotType.diamond:\n drawFunction = this._drawDiamond;\n break;\n case DotType.smallSquare:\n drawFunction = this._drawSmallSquare;\n break;\n case DotType.square:\n default:\n drawFunction = this._drawSquare;\n }\n\n drawFunction.call(this, { x, y, size, getNeighbor });\n }\n\n _rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\n const cx = x + size / 2;\n const cy = y + size / 2;\n\n draw();\n this._element?.setAttribute(\"transform\", `rotate(${(180 * rotation) / Math.PI},${cx},${cy})`);\n }\n\n _basicDot(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\n this._element.setAttribute(\"cx\", String(x + size / 2));\n this._element.setAttribute(\"cy\", String(y + size / 2));\n this._element.setAttribute(\"r\", String(size / 2));\n }\n });\n }\n\n _basicSquare(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n this._element.setAttribute(\"x\", String(x));\n this._element.setAttribute(\"y\", String(y));\n this._element.setAttribute(\"width\", String(size));\n this._element.setAttribute(\"height\", String(size));\n }\n });\n }\n\n //if rotation === 0 - right side is rounded\n _basicSideRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y}` + //go to top left position\n `v ${size}` + //draw line to left bottom corner\n `h ${size / 2}` + //draw line to left bottom corner + half of size right\n `a ${size / 2} ${size / 2}, 0, 0, 0, 0 ${-size}` // draw rounded corner\n );\n }\n });\n }\n\n //if rotation === 0 - top right corner is rounded\n _basicCornerRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y}` + //go to top left position\n `v ${size}` + //draw line to left bottom corner\n `h ${size}` + //draw line to right bottom corner\n `v ${-size / 2}` + //draw line to right bottom corner + half of size top\n `a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}` // draw rounded corner\n );\n }\n });\n }\n\n //if rotation === 0 - top right corner is rounded\n _basicCornerExtraRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y}` + //go to top left position\n `v ${size}` + //draw line to left bottom corner\n `h ${size}` + //draw line to right bottom corner\n `a ${size} ${size}, 0, 0, 0, ${-size} ${-size}` // draw rounded top right corner\n );\n }\n });\n }\n\n //if rotation === 0 - left bottom and right top corners are rounded\n _basicCornersRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._rotateFigure({\n ...args,\n draw: () => {\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y}` + //go to left top position\n `v ${size / 2}` + //draw line to left top corner + half of size bottom\n `a ${size / 2} ${size / 2}, 0, 0, 0, ${size / 2} ${size / 2}` + // draw rounded left bottom corner\n `h ${size / 2}` + //draw line to right bottom corner\n `v ${-size / 2}` + //draw line to right bottom corner + half of size top\n `a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}` // draw rounded right top corner\n );\n }\n });\n }\n\n _drawDot({ x, y, size }: DrawArgs): void {\n this._basicDot({ x, y, size, rotation: 0 });\n }\n\n _drawRandomDot({ x, y, size }: DrawArgs): void {\n const randomFactor = Math.random() * (1 - 0.75) + 0.75;\n this._basicDot({ x, y, size: size * randomFactor, rotation: 0 });\n }\n\n _drawSquare({ x, y, size }: DrawArgs): void {\n this._basicSquare({ x, y, size, rotation: 0 });\n }\n\n _drawSmallSquare({ x, y, size }: DrawArgs): void {\n const originalSize = size;\n\n size = originalSize * 0.7;\n x = x + originalSize * 0.15;\n y = y + originalSize * 0.15;\n\n this._basicSquare({ x, y, size, rotation: 0 });\n }\n\n _drawDiamond({ x, y, size }: DrawArgs): void {\n this._basicSquare({ x, y, size, rotation: Math.PI / 4 });\n }\n\n _drawRounded({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this._basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\n this._basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount === 2) {\n let rotation = 0;\n\n if (leftNeighbor && topNeighbor) {\n rotation = Math.PI / 2;\n } else if (topNeighbor && rightNeighbor) {\n rotation = Math.PI;\n } else if (rightNeighbor && bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this._basicCornerRounded({ x, y, size, rotation });\n return;\n }\n\n if (neighborsCount === 1) {\n let rotation = 0;\n\n if (topNeighbor) {\n rotation = Math.PI / 2;\n } else if (rightNeighbor) {\n rotation = Math.PI;\n } else if (bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this._basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n _drawVerticalLines({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (\n neighborsCount === 0 ||\n (leftNeighbor && !(topNeighbor || bottomNeighbor)) ||\n (rightNeighbor && !(topNeighbor || bottomNeighbor))\n ) {\n this._basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (topNeighbor && bottomNeighbor) {\n this._basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (topNeighbor && !bottomNeighbor) {\n const rotation = Math.PI / 2;\n this._basicSideRounded({ x, y, size, rotation });\n return;\n }\n\n if (bottomNeighbor && !topNeighbor) {\n const rotation = -Math.PI / 2;\n this._basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n _drawHorizontalLines({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (\n neighborsCount === 0 ||\n (topNeighbor && !(leftNeighbor || rightNeighbor)) ||\n (bottomNeighbor && !(leftNeighbor || rightNeighbor))\n ) {\n this._basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (leftNeighbor && rightNeighbor) {\n this._basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (leftNeighbor && !rightNeighbor) {\n const rotation = 0;\n this._basicSideRounded({ x, y, size, rotation });\n return;\n }\n\n if (rightNeighbor && !leftNeighbor) {\n const rotation = Math.PI;\n this._basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n _drawExtraRounded({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this._basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\n this._basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount === 2) {\n let rotation = 0;\n\n if (leftNeighbor && topNeighbor) {\n rotation = Math.PI / 2;\n } else if (topNeighbor && rightNeighbor) {\n rotation = Math.PI;\n } else if (rightNeighbor && bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this._basicCornerExtraRounded({ x, y, size, rotation });\n return;\n }\n\n if (neighborsCount === 1) {\n let rotation = 0;\n\n if (topNeighbor) {\n rotation = Math.PI / 2;\n } else if (rightNeighbor) {\n rotation = Math.PI;\n } else if (bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this._basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n _drawClassy({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this._basicCornersRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n if (!leftNeighbor && !topNeighbor) {\n this._basicCornerRounded({ x, y, size, rotation: -Math.PI / 2 });\n return;\n }\n\n if (!rightNeighbor && !bottomNeighbor) {\n this._basicCornerRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n this._basicSquare({ x, y, size, rotation: 0 });\n }\n\n _drawClassyRounded({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this._basicCornersRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n if (!leftNeighbor && !topNeighbor) {\n this._basicCornerExtraRounded({ x, y, size, rotation: -Math.PI / 2 });\n return;\n }\n\n if (!rightNeighbor && !bottomNeighbor) {\n this._basicCornerExtraRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n this._basicSquare({ x, y, size, rotation: 0 });\n }\n}\n","import { Options } from \"../types\";\n\nexport const browserImageTools = {\n toDataURL(url: string | Buffer | Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n if (typeof url == \"string\") {\n const xhr = new XMLHttpRequest();\n xhr.onload = function () {\n const reader = new FileReader();\n reader.onloadend = function () {\n resolve(reader.result as string);\n };\n reader.readAsDataURL(xhr.response);\n };\n xhr.onerror = xhr.onabort = xhr.ontimeout = reject;\n xhr.open(\"GET\", url);\n xhr.responseType = \"blob\";\n xhr.send();\n } else {\n const reader = new FileReader();\n reader.onloadend = function () {\n resolve(reader.result as string);\n };\n reader.readAsDataURL(url as Blob);\n }\n });\n },\n getSize(options: Options): Promise<{ width: number; height: number }> {\n return new Promise((resolve, reject) => {\n if (!options.image) {\n return reject(\"Image is not defined\");\n }\n\n const image = new Image();\n\n if (typeof options.imageOptions?.crossOrigin === \"string\") {\n image.crossOrigin = options.imageOptions.crossOrigin;\n }\n\n image.onload = (): void => {\n resolve({ width: image.width, height: image.height });\n };\n image.onerror = image.onabort = reject;\n if (typeof options.image == \"string\") image.src = options.image;\n else\n browserImageTools\n .toDataURL(options.image)\n .then((url) => (image.src = url))\n .catch(reject);\n });\n }\n};\n","interface ImageSizeOptions {\n originalHeight: number;\n originalWidth: number;\n maxHiddenDots: number;\n maxHiddenAxisDots?: number;\n dotSize: number;\n margin: number;\n}\n\ninterface ImageSizeResult {\n height: number;\n width: number;\n hideYDots: number;\n hideXDots: number;\n}\n\nexport function calculateImageSize({\n originalHeight,\n originalWidth,\n maxHiddenDots,\n maxHiddenAxisDots,\n dotSize,\n margin\n}: ImageSizeOptions): ImageSizeResult {\n const hideDots = { x: 0, y: 0 };\n const imageSize = { x: 0, y: 0 };\n\n if (\n originalHeight <= 0 ||\n originalWidth <= 0 ||\n maxHiddenDots <= 0 ||\n dotSize <= 0 ||\n 4 * margin ** 2 > maxHiddenDots\n ) {\n return {\n height: 0,\n width: 0,\n hideYDots: 0,\n hideXDots: 0\n };\n }\n\n //If set, ensure maxHiddenAxisDots is odd and at least 1\n if (maxHiddenAxisDots && maxHiddenAxisDots % 2 == 0) maxHiddenAxisDots = Math.max(1, maxHiddenAxisDots - 1);\n\n //Determine the bigger and smaller image dimension\n const dimMax = Math.max(originalWidth, originalHeight);\n const dimMin = Math.min(originalWidth, originalHeight);\n\n //Find max image size along the bigger dimension\n let lower = 0,\n upper = (maxHiddenAxisDots || maxHiddenDots) - 2 * margin;\n do {\n const size = lower + (upper - lower) / 2;\n let dotsMax = Math.max(1, Math.ceil(size + 2 * margin));\n if (dotsMax % 2 == 0) dotsMax++;\n let dotsMin = Math.max(1, Math.ceil((size * dimMin) / dimMax + 2 * margin));\n if (dotsMin % 2 == 0) dotsMin++;\n\n if (dotsMax * dotsMin > maxHiddenDots) upper = size;\n else lower = size;\n } while (Math.abs(lower - upper) > 0.001);\n\n //Calculate how many dots the given size corresponds to\n const size = lower;\n let hideMax = Math.max(1, Math.ceil(size + 2 * margin));\n if (hideMax % 2 == 0) hideMax++;\n let hideMin = Math.max(1, Math.ceil((size * dimMin) / dimMax + 2 * margin));\n if (hideMin % 2 == 0) hideMin++;\n\n //Set hidden dots along bigger and smaller dimension to the right axis\n if (originalWidth > originalHeight) {\n hideDots.x = hideMax;\n hideDots.y = hideMin;\n } else {\n hideDots.x = hideMin;\n hideDots.y = hideMax;\n }\n\n //Fit image to the hidden dots\n const maxW = (hideDots.x - 2 * margin) * dotSize;\n const maxH = (hideDots.y - 2 * margin) * dotSize;\n imageSize.x = maxW;\n imageSize.y = (maxW * originalHeight) / originalWidth;\n if (imageSize.y > maxH) {\n imageSize.y = maxH;\n imageSize.x = (maxH * originalWidth) / originalHeight;\n }\n\n return {\n height: Math.round(imageSize.y + 2 * margin * dotSize),\n width: Math.round(imageSize.x + 2 * margin * dotSize),\n hideYDots: hideDots.y,\n hideXDots: hideDots.x\n };\n}\n","import { ErrorCorrectionPercents } from \"../constants/errorCorrectionPercents\";\nimport { QRCornerDot } from \"../figures/cornerDot/QRCornerDot\";\nimport { QRCornerSquare } from \"../figures/cornerSquare/QRCornerSquare\";\nimport { QRDot } from \"../figures/dot/QRDot\";\nimport { browserImageTools } from \"../tools/browserImageTools\";\nimport { calculateImageSize } from \"../tools/calculateImageSize\";\nimport { FilterFunction, Gradient, GradientType, QRCode, ShapeType } from \"../types\";\nimport { RequiredOptions } from \"./QROptions\";\n\nconst squareMask = [\n [1, 1, 1, 1, 1, 1, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 1, 1, 1, 1, 1, 1]\n];\n\nconst dotMask = [\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 1, 1, 1, 0, 0],\n [0, 0, 1, 1, 1, 0, 0],\n [0, 0, 1, 1, 1, 0, 0],\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0, 0, 0]\n];\n\nconst alignmentCount = [\n [35, 49],\n [28, 36],\n [21, 25],\n [14, 16],\n [7, 9],\n [2, 4],\n [1, 1]\n];\n\nexport class QRSVG {\n /** @ignore */\n _element: SVGElement;\n /** @ignore */\n _defs: SVGElement;\n /** @ignore */\n _backgroundClipPath?: SVGElement;\n /** @ignore */\n _dotsClipPath?: SVGElement;\n /** @ignore */\n _cornersSquareClipPath?: SVGElement;\n /** @ignore */\n _cornersDotClipPath?: SVGElement;\n /** @ignore */\n _options: RequiredOptions;\n /** @ignore */\n _qr?: QRCode;\n /** @ignore */\n _document: Document;\n /** @ignore */\n private _imageTools: typeof browserImageTools;\n\n //TODO don't pass all options to this class\n constructor(options: RequiredOptions) {\n this._document = options.document;\n this._element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n this._element.setAttribute(\"width\", String(options.width));\n this._element.setAttribute(\"height\", String(options.height));\n this._element.setAttribute(\"viewBox\", `0 0 ${options.width} ${options.height}`);\n this._defs = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"defs\");\n this._element.appendChild(this._defs);\n this._imageTools = options.imageTools || browserImageTools;\n\n this._options = options;\n }\n\n get width(): number {\n return this._options.width;\n }\n\n get height(): number {\n return this._options.height;\n }\n\n getElement(): SVGElement {\n return this._element;\n }\n\n async drawQR(qr: QRCode): Promise<void> {\n const count = qr.getModuleCount();\n const typeNumber = parseInt(((count - 17) / 4).toFixed(0), 10);\n const dotSize = this._options.dotsOptions.size;\n let drawImageSize = {\n hideXDots: 0,\n hideYDots: 0,\n width: 0,\n height: 0\n };\n\n this._qr = qr;\n\n if (this._options.image) {\n //We need it to get image size\n const size = await this._imageTools.getSize(this._options);\n const { imageOptions, qrOptions } = this._options;\n const coverLevel = imageOptions.imageSize * ErrorCorrectionPercents[qrOptions.errorCorrectionLevel];\n const alignment = alignmentCount.find((v) => v[0] <= typeNumber) || [0, 0];\n const maxHiddenDots = Math.floor(coverLevel * (count * count - 3 * 8 * 8 - 2 * (count - 16) - alignment[1] * 25));\n\n drawImageSize = calculateImageSize({\n originalWidth: size.width,\n originalHeight: size.height,\n maxHiddenDots,\n maxHiddenAxisDots: count - 14,\n dotSize,\n margin: imageOptions.margin\n });\n }\n\n this.drawBackground();\n this.drawDots((i: number, j: number): boolean => {\n if (this._options.imageOptions.hideBackgroundDots) {\n if (\n i >= (count - drawImageSize.hideXDots) / 2 &&\n i < (count + drawImageSize.hideXDots) / 2 &&\n j >= (count - drawImageSize.hideYDots) / 2 &&\n j < (count + drawImageSize.hideYDots) / 2\n ) {\n return false;\n }\n }\n\n if (squareMask[i]?.[j] || squareMask[i - count + 7]?.[j] || squareMask[i]?.[j - count + 7]) {\n return false;\n }\n\n if (dotMask[i]?.[j] || dotMask[i - count + 7]?.[j] || dotMask[i]?.[j - count + 7]) {\n return false;\n }\n\n return true;\n });\n this.drawCorners();\n\n if (this._options.image && drawImageSize.width > 0 && drawImageSize.height > 0) {\n await this.drawImage({ width: drawImageSize.width, height: drawImageSize.height, count, dotSize });\n }\n }\n\n drawBackground(): void {\n const element = this._element;\n const options = this._options;\n\n if (element && options.backgroundOptions) {\n const gradientOptions = options.backgroundOptions.gradient;\n const color = options.backgroundOptions.color;\n\n this._createColor({\n options: gradientOptions,\n color: color,\n additionalRotation: 0,\n x: 0,\n y: 0,\n height: options.height,\n width: options.width,\n name: \"background-color\"\n });\n\n const size = Math.min(options.width, options.height);\n const element = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n this._backgroundClipPath = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"clipPath\");\n this._backgroundClipPath.setAttribute(\"id\", \"clip-path-background-color\");\n this._defs.appendChild(this._backgroundClipPath);\n\n element.setAttribute(\"x\", String((options.width - size) / 2));\n element.setAttribute(\"y\", String((options.height - size) / 2));\n element.setAttribute(\"width\", String(size));\n element.setAttribute(\"height\", String(size));\n element.setAttribute(\"rx\", String((size / 2) * (options.backgroundOptions.round || 0)));\n\n this._backgroundClipPath.appendChild(element);\n }\n }\n\n drawDots(filter?: FilterFunction): void {\n if (!this._qr) {\n throw \"QR code is not defined\";\n }\n\n const options = this._options;\n const count = this._qr.getModuleCount();\n\n if (count > options.width || count > options.height) {\n throw \"The canvas is too small.\";\n }\n\n const minSize = Math.min(options.width, options.height);\n const dotSize = this._options.dotsOptions.size;\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\n const dot = new QRDot({ svg: this._element, type: options.dotsOptions.type, document: this._document });\n\n this._dotsClipPath = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"clipPath\");\n this._dotsClipPath.setAttribute(\"id\", \"clip-path-dot-color\");\n this._defs.appendChild(this._dotsClipPath);\n\n this._createColor({\n options: options.dotsOptions?.gradient,\n color: options.dotsOptions.color,\n additionalRotation: 0,\n x: 0,\n y: 0,\n height: options.height,\n width: options.width,\n name: \"dot-color\"\n });\n\n for (let i = 0; i < count; i++) {\n for (let j = 0; j < count; j++) {\n if (filter && !filter(i, j)) {\n continue;\n }\n if (!this._qr?.isDark(j, i)) {\n continue;\n }\n\n dot.draw(\n xBeginning + i * dotSize,\n yBeginning + j * dotSize,\n dotSize,\n (xOffset: number, yOffset: number): boolean => {\n if (i + xOffset < 0 || j + yOffset < 0 || i + xOffset >= count || j + yOffset >= count) return false;\n if (filter && !filter(i + xOffset, j + yOffset)) return false;\n return !!this._qr && this._qr.isDark(j + yOffset, i + xOffset);\n }\n );\n\n if (dot._element && this._dotsClipPath) {\n this._dotsClipPath.appendChild(dot._element);\n }\n }\n }\n\n if (options.shape === ShapeType.circle) {\n const margin = (this._options.backgroundOptions && this._options.backgroundOptions.margin) || 0;\n const additionalDots = Math.floor((minSize / dotSize - count - 2 * margin) / 2);\n const fakeCount = count + additionalDots * 2;\n const xFakeBeginning = xBeginning - additionalDots * dotSize;\n const yFakeBeginning = yBeginning - additionalDots * dotSize;\n const fakeMatrix: number[][] = [];\n const center = Math.floor(fakeCount / 2);\n\n for (let i = 0; i < fakeCount; i++) {\n fakeMatrix[i] = [];\n for (let j = 0; j < fakeCount; j++) {\n if (\n i >= additionalDots - 1 &&\n i <= fakeCount - additionalDots &&\n j >= additionalDots - 1 &&\n j <= fakeCount - additionalDots\n ) {\n fakeMatrix[i][j] = 0;\n continue;\n }\n\n if (Math.sqrt((i - center) * (i - center) + (j - center) * (j - center)) > center) {\n fakeMatrix[i][j] = 0;\n continue;\n }\n\n //Get random dots from QR code to show it outside of QR code\n fakeMatrix[i][j] = this._qr.isDark(\n j - 2 * additionalDots < 0 ? j : j >= count ? j - 2 * additionalDots : j - additionalDots,\n i - 2 * additionalDots < 0 ? i : i >= count ? i - 2 * additionalDots : i - additionalDots\n )\n ? 1\n : 0;\n }\n }\n\n for (let i = 0; i < fakeCount; i++) {\n for (let j = 0; j < fakeCount; j++) {\n if (!fakeMatrix[i][j]) continue;\n\n dot.draw(\n xFakeBeginning + i * dotSize,\n yFakeBeginning + j * dotSize,\n dotSize,\n (xOffset: number, yOffset: number): boolean => {\n return !!fakeMatrix[i + xOffset]?.[j + yOffset];\n }\n );\n if (dot._element && this._dotsClipPath) {\n this._dotsClipPath.appendChild(dot._element);\n }\n }\n }\n }\n }\n\n drawCorners(): void {\n if (!this._qr) {\n throw \"QR code is not defined\";\n }\n\n const element = this._element;\n const options = this._options;\n\n if (!element) {\n throw \"Element code is not defined\";\n }\n\n const count = this._qr.getModuleCount();\n const dotSize = this._options.dotsOptions.size;\n const cornersSquareSize = dotSize * 7;\n const cornersDotSize = dotSize * 3;\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\n\n [\n [0, 0, 0],\n [1, 0, Math.PI / 2],\n [0, 1, -Math.PI / 2]\n ].forEach(([column, row, rotation]) => {\n const x = xBeginning + column * dotSize * (count - 7);\n const y = yBeginning + row * dotSize * (count - 7);\n let cornersSquareClipPath = this._dotsClipPath;\n let cornersDotClipPath = this._dotsClipPath;\n\n if (options.cornersSquareOptions?.gradient || options.cornersSquareOptions?.color) {\n cornersSquareClipPath = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"clipPath\");\n cornersSquareClipPath.setAttribute(\"id\", `clip-path-corners-square-color-${column}-${row}`);\n this._defs.appendChild(cornersSquareClipPath);\n this._cornersSquareClipPath = this._cornersDotClipPath = cornersDotClipPath = cornersSquareClipPath;\n\n this._createColor({\n options: options.cornersSquareOptions?.gradient,\n color: options.cornersSquareOptions?.color,\n additionalRotation: rotation,\n x,\n y,\n height: cornersSquareSize,\n width: cornersSquareSize,\n name: `corners-square-color-${column}-${row}`\n });\n }\n\n if (options.cornersSquareOptions?.type) {\n const cornersSquare = new QRCornerSquare({\n svg: this._element,\n type: options.cornersSquareOptions.type,\n document: this._document\n });\n\n cornersSquare.draw(x, y, cornersSquareSize, rotation);\n\n if (cornersSquare._element && cornersSquareClipPath) {\n cornersSquareClipPath.appendChild(cornersSquare._element);\n }\n } else {\n const dot = new QRDot({ svg: this._element, type: options.dotsOptions.type, document: this._document });\n\n for (let i = 0; i < squareMask.length; i++) {\n for (let j = 0; j < squareMask[i].length; j++) {\n if (!squareMask[i]?.[j]) {\n continue;\n }\n\n dot.draw(\n x + i * dotSize,\n y + j * dotSize,\n dotSize,\n (xOffset: number, yOffset: number): boolean => !!squareMask[i + xOffset]?.[j + yOffset]\n );\n\n if (dot._element && cornersSquareClipPath) {\n cornersSquareClipPath.appendChild(dot._element);\n }\n }\n }\n }\n\n if (options.cornersDotOptions?.gradient || options.cornersDotOptions?.color) {\n cornersDotClipPath = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"clipPath\");\n cornersDotClipPath.setAttribute(\"id\", `clip-path-corners-dot-color-${column}-${row}`);\n this._defs.appendChild(cornersDotClipPath);\n this._cornersDotClipPath = cornersDotClipPath;\n\n this._createColor({\n options: options.cornersDotOptions?.gradient,\n color: options.cornersDotOptions?.color,\n additionalRotation: rotation,\n x: x + dotSize * 2,\n y: y + dotSize * 2,\n height: cornersDotSize,\n width: cornersDotSize,\n name: `corners-dot-color-${column}-${row}`\n });\n }\n\n if (options.cornersDotOptions?.type) {\n const cornersDot = new QRCornerDot({\n svg: this._element,\n type: options.cornersDotOptions.type,\n document: this._document\n });\n\n cornersDot.draw(x + dotSize * 2, y + dotSize * 2, cornersDotSize, rotation);\n\n if (cornersDot._element && cornersDotClipPath) {\n cornersDotClipPath.appendChild(cornersDot._element);\n }\n } else {\n const dot = new QRDot({ svg: this._element, type: options.dotsOptions.type, document: this._document });\n\n for (let i = 0; i < dotMask.length; i++) {\n for (let j = 0; j < dotMask[i].length; j++) {\n if (!dotMask[i]?.[j]) {\n continue;\n }\n\n dot.draw(\n x + i * dotSize,\n y + j * dotSize,\n dotSize,\n (xOffset: number, yOffset: number): boolean => !!dotMask[i + xOffset]?.[j + yOffset]\n );\n\n if (dot._element && cornersDotClipPath) {\n cornersDotClipPath.appendChild(dot._element);\n }\n }\n }\n }\n });\n }\n\n async drawImage({\n width,\n height,\n count,\n dotSize\n }: {\n width: number;\n height: number;\n count: number;\n dotSize: number;\n }): Promise<void> {\n const options = this._options;\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\n const margin = options.imageOptions.margin * dotSize;\n const dx = xBeginning + margin + (count * dotSize - width) / 2;\n const dy = yBeginning + margin + (count * dotSize - height) / 2;\n const dw = width - margin * 2;\n const dh = height - margin * 2;\n\n const imageUrl = await this._imageTools.toDataURL(options.image || \"\");\n let image: SVGElement = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"image\");\n image.setAttribute(\"href\", imageUrl || \"\");\n\n if (imageUrl.startsWith(\"data:image/svg+xml;\")) {\n let data = imageUrl.substring(19);\n const i = data.indexOf(\",\");\n const encoding = data.substring(0, i);\n data = data.substring(i + 1);\n\n switch (encoding) {\n case \"base64\":\n data = typeof atob == \"function\" ? atob(data) : Buffer.from(data, \"base64\").toString(\"utf8\");\n break;\n default:\n data = \"\";\n break;\n }\n\n if (data) {\n const container = new DOMParser().parseFromString(data, \"text/xml\");\n const rootEl = Array.from(container.getElementsByTagName(\"svg\"));\n if (rootEl.length) image = rootEl[0];\n }\n }\n\n image.setAttribute(\"x\", String(dx));\n image.setAttribute(\"y\", String(dy));\n image.setAttribute(\"width\", `${dw}px`);\n image.setAttribute(\"height\", `${dh}px`);\n\n this._element.appendChild(image);\n }\n\n /** @ignore */\n _createColor({\n options,\n color,\n additionalRotation,\n x,\n y,\n height,\n width,\n name\n }: {\n options?: Gradient;\n color?: string;\n additionalRotation: number;\n x: number;\n y: number;\n height: number;\n width: number;\n name: string;\n }): void {\n const size = width > height ? width : height;\n const rect = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n rect.setAttribute(\"x\", String(x));\n rect.setAttribute(\"y\", String(y));\n rect.setAttribute(\"height\", String(height));\n rect.setAttribute(\"width\", String(width));\n rect.setAttribute(\"clip-path\", `url('#clip-path-${name}')`);\n\n if (options) {\n let gradient: SVGElement;\n if (options.type === GradientType.radial) {\n gradient = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"radialGradient\");\n gradient.setAttribute(\"id\", name);\n gradient.setAttribute(\"gradientUnits\", \"userSpaceOnUse\");\n gradient.setAttribute(\"fx\", String(x + width / 2));\n gradient.setAttribute(\"fy\", String(y + height / 2));\n gradient.setAttribute(\"cx\", String(x + width / 2));\n gradient.setAttribute(\"cy\", String(y + height / 2));\n gradient.setAttribute(\"r\", String(size / 2));\n } else {\n const rotation = ((options.rotation || 0) + additionalRotation) % (2 * Math.PI);\n const positiveRotation = (rotation + 2 * Math.PI) % (2 * Math.PI);\n let x0 = x + width / 2;\n let y0 = y + height / 2;\n let x1 = x + width / 2;\n let y1 = y + height / 2;\n\n if (\n (positiveRotation >= 0 && positiveRotation <= 0.25 * Math.PI) ||\n (positiveRotation > 1.75 * Math.PI && positiveRotation <= 2 * Math.PI)\n ) {\n x0 = x0 - width / 2;\n y0 = y0 - (height / 2) * Math.tan(rotation);\n x1 = x1 + width / 2;\n y1 = y1 + (height / 2) * Math.tan(rotation);\n } else if (positiveRotation > 0.25 * Math.PI && positiveRotation <= 0.75 * Math.PI) {\n y0 = y0 - height / 2;\n x0 = x0 - width / 2 / Math.tan(rotation);\n y1 = y1 + height / 2;\n x1 = x1 + width / 2 / Math.tan(rotation);\n } else if (positiveRotation > 0.75 * Math.PI && positiveRotation <= 1.25 * Math.PI) {\n x0 = x0 + width / 2;\n y0 = y0 + (height / 2) * Math.tan(rotation);\n x1 = x1 - width / 2;\n y1 = y1 - (height / 2) * Math.tan(rotation);\n } else if (positiveRotation > 1.25 * Math.PI && positiveRotation <= 1.75 * Math.PI) {\n y0 = y0 + height / 2;\n x0 = x0 + width / 2 / Math.tan(rotation);\n y1 = y1 - height / 2;\n x1 = x1 - width / 2 / Math.tan(rotation);\n }\n\n gradient = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"linearGradient\");\n gradient.setAttribute(\"id\", name);\n gradient.setAttribute(\"gradientUnits\", \"userSpaceOnUse\");\n gradient.setAttribute(\"x1\", String(Math.round(x0)));\n gradient.setAttribute(\"y1\", String(Math.round(y0)));\n gradient.setAttribute(\"x2\", String(Math.round(x1)));\n gradient.setAttribute(\"y2\", String(Math.round(y1)));\n }\n\n options.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => {\n const stop = this._document.createElementNS(\"http://www.w3.org/2000/svg\", \"stop\");\n stop.setAttribute(\"offset\", `${100 * offset}%`);\n stop.setAttribute(\"stop-color\", color);\n gradient.appendChild(stop);\n });\n\n rect.setAttribute(\"fill\", `url('#${name}')`);\n this._defs.appendChild(gradient);\n } else if (color) {\n rect.setAttribute(\"fill\", color);\n }\n\n this._element.appendChild(rect);\n }\n}\n","import qrcode from \"qrcode-generator\";\nimport { getMode } from \"../tools/getMode\";\nimport { mergeDeep } from \"../tools/merge\";\nimport { sanitizeOptions } from \"../tools/sanitizeOptions\";\nimport { ExtensionFunction, Mode, Options, QRCode, ShapeType } from \"../types\";\nimport { defaultOptions, RequiredOptions } from \"./QROptions\";\nimport { QRSVG } from \"./QRSVG\";\n\nexport class QRCodeStyling {\n /** @ignore */\n _options: RequiredOptions;\n /** @ignore */\n _container?: HTMLElement;\n /** @ignore */\n _svg?: SVGElement;\n /** @ignore */\n _qr?: QRCode;\n /** @ignore */\n _extension?: ExtensionFunction;\n /** @ignore */\n _svgDrawingPromise?: Promise<void>;\n\n constructor(options?: Partial<Options>) {\n this._options = options ? sanitizeOptions(mergeDeep(defaultOptions, options) as RequiredOptions) : defaultOptions;\n this.update();\n }\n\n /** @ignore */\n static _clearContainer(container?: HTMLElement): void {\n if (container) {\n container.innerHTML = \"\";\n }\n }\n\n /** @ignore */\n _setupSvg(): void {\n if (!this._qr) {\n return;\n }\n const count = Math.ceil((this._options.shape == ShapeType.circle ? Math.sqrt(2) : 1) * this._qr.getModuleCount());\n const margin = (this._options.backgroundOptions && this._options.backgroundOptions.margin) || 0;\n const size = Math.ceil(this._options.dotsOptions.size * (count + 2 * margin));\n const qrSVG = new QRSVG({\n ...this._options,\n width: size,\n height: size\n });\n\n this._svg = qrSVG.getElement();\n this._svgDrawingPromise = qrSVG.drawQR(this._qr).then(() => {\n if (!this._svg) return;\n this._extension?.(qrSVG.getElement(), this._options);\n });\n }\n\n /** @ignore */\n async _getElement(): Promise<SVGElement | undefined> {\n if (!this._qr) throw \"QR code is empty\";\n\n if (!this._svg || !this._svgDrawingPromise) {\n this._setupSvg();\n }\n await this._svgDrawingPromise;\n return this._svg;\n }\n\n update(\n /** The same options as for initialization */\n options?: Partial<Options>\n ): void {\n QRCodeStyling._clearContainer(this._container);\n this._options = options ? sanitizeOptions(mergeDeep(this._options, options) as RequiredOptions) : this._options;\n\n if (!this._options.data) {\n return;\n }\n\n if (this._options.stringToBytesFuncs) {\n Object.assign(qrcode.stringToBytesFuncs, this._options.stringToBytesFuncs);\n delete this._options.stringToBytesFuncs;\n }\n\n this._qr = qrcode(this._options.qrOptions.typeNumber, this._options.qrOptions.errorCorrectionLevel);\n let mode = this._options.qrOptions.mode || getMode(this._options.data);\n if (mode == Mode.unicode) {\n qrcode.stringToBytes = qrcode.stringToBytesFuncs[\"UTF-8\"];\n mode = Mode.byte;\n } else {\n qrcode.stringToBytes = qrcode.stringToBytesFuncs[\"default\"];\n }\n this._qr.addData(this._options.data, mode);\n this._qr.make();\n\n this._setupSvg();\n\n this.append(this._container);\n }\n\n append(\n /** This container will be used for appending of the QR code */\n container?: HTMLElement\n ): void {\n if (!container) {\n return;\n }\n\n if (typeof container.appendChild !== \"function\") {\n throw \"Container should be a single DOM node\";\n }\n\n if (this._svg) {\n container.appendChild(this._svg);\n }\n\n this._container = container;\n }\n\n /**\n *\n * @example\n *\n * ```js\n * const extension = (svg, options) => {\n * const { width, height } = options;\n * const size = Math.min(width, height);\n * const border = options.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n * const borderAttributes = {\n * fill: \"none\",\n * x: (width - size + 40) / 2,\n * y: (height - size + 40) / 2,\n * width: size - 40,\n * height: size - 40,\n * stroke: \"black\",\n * \"stroke-width\": 40,\n * rx: 100\n * };\n * Object.keys(borderAttributes).forEach((attribute) => {\n * border.setAttribute(attribute, borderAttributes[attribute]);\n * });\n * svg.appendChild(border);\n * };\n * ```\n */\n applyExtension(\n /** Extension is a function that takes svg and previously applied options and modifies an svg */\n extension: ExtensionFunction\n ): void {\n if (!extension) {\n throw \"Extension function should be defined.\";\n }\n\n this._extension = extension;\n this.update();\n }\n\n deleteExtension(): void {\n this._extension = undefined;\n this.update();\n }\n\n async serialize(): Promise<string | undefined> {\n if (!this._qr) throw \"QR code is empty\";\n\n const element = await this._getElement();\n\n if (!element) {\n return;\n }\n\n const serializer = new XMLSerializer();\n let source = serializer.serializeToString(element);\n\n source = '<?xml version=\"1.0\" standalone=\"no\"?>\\r\\n' + source;\n return source;\n }\n}\n","import { DOMImplementation, DOMParser, XMLSerializer } from \"@xmldom/xmldom\";\r\nimport { fileTypeFromBuffer } from \"file-type\";\r\nimport sharp from \"sharp\";\r\nimport { RequiredOptions } from \"./core/QROptions\";\r\nimport { QRCodeStyling as _QRCodeStyling } from \"./index\";\r\nexport { ErrorCorrectionPercents } from \"./constants/errorCorrectionPercents\";\r\nexport * from \"./types\";\r\nimport type * as _browserUtils from \"./tools/browserUtils\";\r\n\r\nexport const browserUtils: typeof _browserUtils | undefined = undefined;\r\n\r\nexport class QRCodeStyling extends _QRCodeStyling {\r\n constructor(options: RequiredOptions) {\r\n const dom = new DOMImplementation().createDocument(null, null);\r\n const imageCache = new Map<string, Promise<{ contentType?: string | null; data: Buffer }>>();\r\n\r\n const loadImage = async function (url: string | Buffer | Blob) {\r\n if (typeof url == \"string\") {\r\n let pr = imageCache.get(url);\r\n if (pr) return pr;\r\n pr = fetch(url).then((res) =>\r\n res\r\n .arrayBuffer()\r\n .then((buff) => Buffer.from(buff))\r\n .then(async (data) => ({\r\n contentType: res.headers.get(\"Content-Type\") || (await fileTypeFromBuffer(data).then((r) => r?.mime)),\r\n data\r\n }))\r\n );\r\n imageCache.set(url, pr);\r\n return pr;\r\n } else {\r\n const buff = Buffer.from(url as Buffer);\r\n const mime = await fileTypeFromBuffer(buff).then((r) => r?.mime);\r\n return {\r\n contentType: mime,\r\n data: buff\r\n };\r\n }\r\n };\r\n\r\n global.XMLSerializer = XMLSerializer;\r\n global.DOMParser = DOMParser;\r\n\r\n super({\r\n ...options,\r\n document: options.document || dom,\r\n imageTools: options.imageTools || {\r\n toDataURL: (url) =>\r\n loadImage(url).then(\r\n ({ contentType, data }) =>\r\n `data:${contentType?.replace(\"application/xml\", \"image/svg+xml\")};base64,${data.toString(\"base64\")}`\r\n ),\r\n getSize: async function (options) {\r\n if (!options.image) {\r\n throw new Error(\"Image is not defined\");\r\n }\r\n const { data } = Buffer.isBuffer(options.image) ? { data: options.image } : await loadImage(options.image);\r\n const meta = await sharp(data).metadata();\r\n return {\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n width: meta.width!,\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n height: meta.height!\r\n };\r\n }\r\n }\r\n });\r\n }\r\n}\r\n"],"names":["_QRCodeStyling","XMLSerializer","DOMParser"],"mappings":"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"}