@liquid-js/qr-code-styling 4.0.0-3 → 4.0.0-5

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/utils/merge.ts","../src/utils/gradient.ts","../src/utils/options.ts","../src/utils/qrcode.ts","../src/utils/svg.ts","../src/figures/corner-dot.ts","../src/figures/corner-square.ts","../src/figures/dot.ts","../src/tools/browser-image-tools.ts","../src/core/qr-svg.ts","../src/utils/image.ts","../src/core/qr-code-styling.ts","../src/tools/browser-utils.ts","../src/node.ts"],"sourcesContent":["const isObject = (obj: Record<string, unknown> | undefined): boolean =>\n !!obj && typeof obj === \"object\" && !Array.isArray(obj);\n\nexport type UnknownObject =\n | {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n }\n | undefined;\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","export enum GradientType {\n radial = \"radial\",\n linear = \"linear\"\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\nexport function 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","import { ErrorCorrectionLevel, Mode, TypeNumber } from \"@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js\";\nimport { browserImageTools } from \"../tools/browser-image-tools.js\";\nimport { Gradient, sanitizeGradient } from \"./gradient.js\";\n\nexport enum DotType {\n dot = \"dot\",\n randomDot = \"random-dot\",\n rounded = \"rounded\",\n extraRounded = \"extra-rounded\",\n verticalLine = \"vertical-line\",\n horizontalLine = \"horizontal-line\",\n classy = \"classy\",\n classyRounded = \"classy-rounded\",\n square = \"square\",\n smallSquare = \"small-square\",\n tinySquare = \"tiny-square\",\n diamond = \"diamond\"\n}\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}\n\nexport enum CornerSquareType {\n dot = \"dot\",\n square = \"square\",\n extraRounded = \"extra-rounded\",\n classy = \"classy\",\n outpoint = \"outpoint\",\n inpoint = \"inpoint\"\n}\n\nexport enum ShapeType {\n square = \"square\",\n circle = \"circle\"\n}\n\nexport enum ImageMode {\n /**\n * Place image in the center of the code\n */\n center = \"center\",\n /**\n * Place image over the center of the code\n */\n overlay = \"overlay\",\n /**\n * Use image as background, draw dots over it\n */\n background = \"background\"\n}\n\nexport interface 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 `@liquid-js/qrcode-generator` lib */\n qrOptions: {\n typeNumber: TypeNumber;\n mode?: `${Mode}`;\n /** @default ErrorCorrectionLevel.Q */\n errorCorrectionLevel: `${ErrorCorrectionLevel}`;\n };\n imageOptions: {\n /**\n * Image mode\n *\n * @default ImageMode.center\n */\n mode: `${ImageMode}`;\n /**\n * Fill blank areas of the code with selected color\n */\n fill: {\n /**\n * Color of QR dots\n *\n * @default \"rgba(255,255,255,0.75)\"\n */\n color: string;\n /** Gradient of Corners Dot */\n gradient?: Gradient;\n };\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 const defaultOptions: Options = {\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 mode: ImageMode.center,\n imageSize: 0.4,\n crossOrigin: undefined,\n margin: 0,\n fill: {\n color: \"rgba(255,255,255,1)\"\n }\n },\n dotsOptions: {\n type: DotType.square,\n color: \"#000\",\n size: 10\n }\n};\n\nexport function sanitizeOptions(options: Options): Options {\n const newOptions = { ...options };\n\n newOptions.imageOptions = {\n ...newOptions.imageOptions,\n imageSize: Math.min(1, Number(newOptions.imageOptions.imageSize)) || 1,\n margin: Number(newOptions.imageOptions.margin),\n fill: {\n ...newOptions.imageOptions.fill\n }\n };\n\n if (newOptions.imageOptions.mode == ImageMode.background) newOptions.imageOptions.margin = 0;\n if (newOptions.imageOptions.fill.gradient) {\n newOptions.imageOptions.fill.gradient = sanitizeGradient(newOptions.imageOptions.fill.gradient);\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","import { ErrorCorrectionLevel, Mode } from \"@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js\";\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\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","const rx = /\\.?0+$/;\n\nexport function numToAttr(value: number) {\n return value.toFixed(7).replace(rx, \"\");\n}\n\nexport function svgPath(strings: TemplateStringsArray, ...values: unknown[]) {\n return strings\n .reduce((t, v, i) => {\n let p: unknown = \"\";\n if (i) p = values[i - 1];\n if (typeof p == \"number\") p = numToAttr(p);\n return `${t}${p}${v}`;\n }, \"\")\n .trim()\n .replace(/[\\s\\n\\r]+/gim, \" \");\n}\n","import { BasicFigureDrawArgs, DrawArgs, RotateFigureArgs } from \"../types/helper.js\";\nimport { CornerDotType } from \"../utils/options.js\";\nimport { numToAttr, svgPath } from \"../utils/svg.js\";\n\nexport class QRCornerDot {\n private _element?: SVGElement;\n\n get element() {\n return this._element;\n }\n\n constructor(\n private readonly type: `${CornerDotType}`,\n private readonly document: Document\n ) {}\n\n draw(args: DrawArgs): 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, args);\n }\n\n private 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(${numToAttr((180 * rotation) / Math.PI)},${cx},${cy})`);\n }\n\n private 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\", numToAttr(x + size / 2));\n this._element.setAttribute(\"cy\", numToAttr(y + size / 2));\n this._element.setAttribute(\"r\", numToAttr(size / 2));\n }\n });\n }\n\n private 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\", numToAttr(x));\n this._element.setAttribute(\"y\", numToAttr(y));\n this._element.setAttribute(\"width\", numToAttr(size));\n this._element.setAttribute(\"height\", numToAttr(size));\n }\n });\n }\n\n private 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 1,\n 0.3262506,\n \"c\",\n 0,\n 0.0383376,\n -0.0064626,\n 0.0758377,\n -0.0193751,\n 0.1125001,\n \"s\",\n -0.0356247,\n 0.076875,\n -0.0681248,\n 0.1206252,\n \"c\",\n -0.0325,\n 0.0437499,\n -0.0762503,\n 0.0931247,\n -0.1312501,\n 0.1481249,\n \"C\",\n 0.7262502,\n 0.7625008,\n 0.6566626,\n 0.8279132,\n 0.5724999,\n 0.9037505,\n \"L\",\n 0.5,\n 0.9687506,\n \"L\",\n 0.4275001,\n 0.9037505,\n \"C\",\n 0.3433374,\n 0.8279132,\n 0.2737499,\n 0.7625005,\n 0.21875,\n 0.7075007,\n \"C\",\n 0.1637501,\n 0.6525008,\n 0.1199999,\n 0.6031258,\n 0.0874999,\n 0.5593758,\n \"S\",\n 0.0322876,\n 0.4754133,\n 0.0193751,\n 0.4387506,\n \"S\",\n 0,\n 0.3645881,\n 0,\n 0.3262506,\n \"c\",\n 0,\n -0.0783374,\n 0.0262499,\n -0.1437498,\n 0.07875,\n -0.1962499,\n \"s\",\n 0.1179124,\n -0.07875,\n 0.1962499,\n -0.07875,\n \"c\",\n 0.0433376,\n 0,\n 0.0845875,\n 0.0091625,\n 0.12375,\n 0.0274999,\n \"S\",\n 0.4716623,\n 0.1229131,\n 0.5,\n 0.1562506,\n \"c\",\n 0.0283374,\n -0.0333375,\n 0.0620874,\n -0.0591625,\n 0.1012502,\n -0.0775,\n \"c\",\n 0.0391627,\n -0.0183375,\n 0.0804126,\n -0.0274999,\n 0.12375,\n -0.0274999,\n \"c\",\n 0.0783374,\n 0,\n 0.1437497,\n 0.0262499,\n 0.1962501,\n 0.07875,\n \"S\",\n 1,\n 0.2479131,\n 1,\n 0.3262506,\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 numToAttr(v);\n })\n .join(\" \")\n );\n }\n\n private 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\", numToAttr(x));\n this._element.setAttribute(\"y\", numToAttr(y));\n this._element.setAttribute(\"width\", numToAttr(size));\n this._element.setAttribute(\"height\", numToAttr(size));\n this._element.setAttribute(\"rx\", numToAttr(size / 4));\n this._element.setAttribute(\"ry\", numToAttr(size / 4));\n }\n });\n }\n\n private 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 svgPath`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 private 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 svgPath`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 private drawDot({ x, y, size, rotation }: DrawArgs): void {\n this.basicDot({ x, y, size, rotation });\n }\n\n private drawSquare({ x, y, size, rotation }: DrawArgs): void {\n this.basicSquare({ x, y, size, rotation });\n }\n\n private drawHeart({ x, y, size, rotation }: DrawArgs): void {\n this.basicHeart({ x, y, size, rotation });\n }\n\n private drawRounded({ x, y, size, rotation }: DrawArgs): void {\n this.basicRounded({ x, y, size, rotation });\n }\n\n private drawClassy({ x, y, size, rotation }: DrawArgs): void {\n this.basicClassy({ x, y, size, rotation });\n }\n\n private drawInpoint({ x, y, size, rotation }: DrawArgs): void {\n this.basicInpoint({ x, y, size, rotation });\n }\n\n private drawOutpoint({ x, y, size, rotation }: DrawArgs): void {\n this.basicInpoint({ x, y, size, rotation: (rotation || 0) + Math.PI });\n }\n}\n","import { BasicFigureDrawArgs, DrawArgs, RotateFigureArgs } from \"../types/helper.js\";\nimport { CornerSquareType } from \"../utils/options.js\";\nimport { numToAttr, svgPath } from \"../utils/svg.js\";\n\nexport class QRCornerSquare {\n private _element?: SVGElement;\n private _fill?: SVGElement;\n\n get element() {\n return this._element;\n }\n\n get fill() {\n return this._fill;\n }\n\n constructor(\n private readonly type: `${CornerSquareType}`,\n private readonly document: Document\n ) {}\n\n draw(args: DrawArgs): 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, args);\n }\n\n private 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(${numToAttr((180 * rotation) / Math.PI)},${cx},${cy})`);\n this._fill?.setAttribute(\"transform\", `rotate(${numToAttr((180 * rotation) / Math.PI)},${cx},${cy})`);\n }\n\n private 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 svgPath`M ${x + size / 2} ${y}\n a ${size / 2} ${size / 2} 0 1 0 0.1 0\n z\n m 0 ${dotSize}\n a ${size / 2 - dotSize} ${size / 2 - dotSize} 0 1 1 -0.1 0\n Z`\n );\n this._fill = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._fill.setAttribute(\"clip-rule\", \"evenodd\");\n this._fill.setAttribute(\n \"d\",\n svgPath`M ${x + size / 2} ${y - dotSize}\n a ${size / 2 + dotSize} ${size / 2 + dotSize} 0 1 0 0.1 0\n z`\n );\n }\n });\n }\n\n private 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 svgPath`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 this._fill = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._fill.setAttribute(\"clip-rule\", \"evenodd\");\n this._fill.setAttribute(\n \"d\",\n svgPath`\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 private 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 svgPath`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 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 ${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 z`\n );\n this._fill = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._fill.setAttribute(\"clip-rule\", \"evenodd\");\n this._fill.setAttribute(\n \"d\",\n svgPath`\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 z`\n );\n }\n });\n }\n\n private 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 svgPath`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 this._fill = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._fill.setAttribute(\"clip-rule\", \"evenodd\");\n this._fill.setAttribute(\n \"d\",\n svgPath`\n M ${x + 0.5 * dotSize} ${y - dotSize}\n h ${4 * dotSize}\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${dotSize * 3.5} ${dotSize * 3.5}\n v ${5.5 * dotSize}\n h ${-5.5 * dotSize}\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${-dotSize * 3.5} ${-dotSize * 3.5}\n v ${-5.5 * dotSize}\n z`\n );\n }\n });\n }\n\n private 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 svgPath`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 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 ${-2 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${-dotSize * 1.5}\n z`\n );\n this._fill = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._fill.setAttribute(\"clip-rule\", \"evenodd\");\n this._fill.setAttribute(\n \"d\",\n svgPath`\n M ${x + 0.5 * dotSize} ${y - dotSize}\n h ${4 * dotSize}\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${dotSize * 3.5} ${dotSize * 3.5}\n v ${5.5 * dotSize}\n h ${-5.5 * dotSize}\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${-dotSize * 3.5} ${-dotSize * 3.5}\n v ${-2 * dotSize}\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${dotSize * 3.5} ${-dotSize * 3.5}\n z`\n );\n }\n });\n }\n\n private drawDot({ x, y, size, rotation }: DrawArgs): void {\n this.basicDot({ x, y, size, rotation });\n }\n\n private drawSquare({ x, y, size, rotation }: DrawArgs): void {\n this.basicSquare({ x, y, size, rotation });\n }\n\n private drawExtraRounded({ x, y, size, rotation }: DrawArgs): void {\n this.basicExtraRounded({ x, y, size, rotation });\n }\n\n private drawClassy({ x, y, size, rotation }: DrawArgs): void {\n this.basicClassy({ x, y, size, rotation });\n }\n\n private drawInpoint({ x, y, size, rotation }: DrawArgs): void {\n this.basicInpoint({ x, y, size, rotation });\n }\n\n private drawOutpoint({ x, y, size, rotation }: DrawArgs): void {\n this.basicInpoint({ x, y, size, rotation: (rotation || 0) + Math.PI });\n }\n}\n","import { BasicFigureDrawArgs, DrawArgs, RotateFigureArgs } from \"../types/helper.js\";\nimport { DotType } from \"../utils/options.js\";\nimport { numToAttr, svgPath } from \"../utils/svg.js\";\n\nexport class QRDot {\n private _element?: SVGElement;\n\n get element() {\n return this._element;\n }\n\n constructor(\n private readonly type: `${DotType}`,\n private readonly document: Document\n ) {}\n\n draw(args: DrawArgs): void {\n const type = this.type;\n let drawFunction;\n\n switch (type) {\n case DotType.dot:\n drawFunction = this.drawDot;\n break;\n case DotType.randomDot:\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.verticalLine:\n drawFunction = this.drawVerticalLine;\n break;\n case DotType.horizontalLine:\n drawFunction = this.drawHorizontalLine;\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.tinySquare:\n drawFunction = this.drawTinySquare;\n break;\n case DotType.square:\n default:\n drawFunction = this.drawSquare;\n }\n\n drawFunction.call(this, args);\n }\n\n private 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(${numToAttr((180 * rotation) / Math.PI)},${cx},${cy})`);\n }\n\n private 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\", numToAttr(x + size / 2));\n this._element.setAttribute(\"cy\", numToAttr(y + size / 2));\n this._element.setAttribute(\"r\", numToAttr(size / 2));\n }\n });\n }\n\n private 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\", numToAttr(x));\n this._element.setAttribute(\"y\", numToAttr(y));\n this._element.setAttribute(\"width\", numToAttr(size));\n this._element.setAttribute(\"height\", numToAttr(size));\n }\n });\n }\n\n //if rotation === 0 - right side is rounded\n private 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 svgPath`M ${x} ${y}\n v ${size}\n h ${size / 2}\n a ${size / 2} ${size / 2}, 0, 0, 0, 0 ${-size}\n z`\n );\n }\n });\n }\n\n //if rotation === 0 - top right corner is rounded\n private 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 svgPath`M ${x} ${y}\n v ${size}\n h ${size}\n v ${-size / 2}\n a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}\n z`\n );\n }\n });\n }\n\n //if rotation === 0 - top right corner is rounded\n private 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 svgPath`M ${x} ${y}\n v ${size}\n h ${size}\n a ${size} ${size}, 0, 0, 0, ${-size} ${-size}\n z`\n );\n }\n });\n }\n\n //if rotation === 0 - left bottom and right top corners are rounded\n private 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 svgPath`M ${x} ${y}\n v ${size / 2}\n a ${size / 2} ${size / 2}, 0, 0, 0, ${size / 2} ${size / 2}\n h ${size / 2}\n v ${-size / 2}\n a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}\n z`\n );\n }\n });\n }\n\n private drawDot({ x, y, size }: DrawArgs): void {\n this.basicDot({ x, y, size, rotation: 0 });\n }\n\n private 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 private drawSquare({ x, y, size }: DrawArgs): void {\n this.basicSquare({ x, y, size, rotation: 0 });\n }\n\n private 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 private drawTinySquare({ x, y, size }: DrawArgs): void {\n const originalSize = size;\n\n size = originalSize * 0.3;\n x = x + originalSize * 0.35;\n y = y + originalSize * 0.35;\n\n this.basicSquare({ x, y, size, rotation: 0 });\n }\n\n private drawDiamond({ x, y, size }: DrawArgs): void {\n this.basicSquare({ x, y, size, rotation: Math.PI / 4 });\n }\n\n private 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 private drawVerticalLine({ 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 private drawHorizontalLine({ 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 private 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 private 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 private 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","export const browserImageTools = {\n toDataURL(url: string | Buffer | Blob): Promise<string> {\n if (typeof url == \"string\" && url.startsWith(\"data:\")) return Promise.resolve(url);\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, true);\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(src: string | Blob | Buffer, crossOrigin?: string): Promise<{ width: number; height: number }> {\n return new Promise((resolve, reject) => {\n const image = new Image();\n\n if (crossOrigin === \"string\") {\n image.crossOrigin = crossOrigin;\n }\n\n image.onload = (): void => {\n resolve({ width: image.width, height: image.height });\n };\n image.onerror = image.onabort = reject;\n\n if (typeof src == \"string\") image.src = src;\n else\n browserImageTools\n .toDataURL(src)\n .then((url) => (image.src = url))\n .catch(reject);\n });\n }\n};\n","import { QRCodeMinimal } from \"@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js\";\nimport { QRUtil } from \"@liquid-js/qrcode-generator/lib/qrcode/QRUtil.js\";\nimport { QRCornerDot } from \"../figures/corner-dot.js\";\nimport { QRCornerSquare } from \"../figures/corner-square.js\";\nimport { QRDot } from \"../figures/dot.js\";\nimport { browserImageTools } from \"../tools/browser-image-tools.js\";\nimport { Gradient, GradientType } from \"../utils/gradient.js\";\nimport { calculateImageSize } from \"../utils/image.js\";\nimport { DotType, ImageMode, Options, ShapeType } from \"../utils/options.js\";\nimport { numToAttr } from \"../utils/svg.js\";\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\nexport class QRSVG {\n private _element: SVGElement;\n\n get element() {\n return this._element;\n }\n\n private defs: SVGElement;\n\n private backgroundMask?: SVGElement;\n private backgroundMaskGroup?: SVGElement;\n\n private dotsMask?: SVGElement;\n private dotsMaskGroup?: SVGElement;\n\n private lightDotsMask?: SVGElement;\n private lightDotsMaskGroup?: SVGElement;\n\n private qr?: QRCodeMinimal;\n private document: Document;\n private imageTools: typeof browserImageTools;\n\n constructor(\n private options: Pick<\n Options,\n | \"width\"\n | \"height\"\n | \"document\"\n | \"imageTools\"\n | \"image\"\n | \"imageOptions\"\n | \"dotsOptions\"\n | \"cornersDotOptions\"\n | \"cornersSquareOptions\"\n | \"backgroundOptions\"\n | \"shape\"\n > & { errorCorrectionPercent: number }\n ) {\n this.document = options.document;\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n const width = numToAttr(options.width);\n const height = numToAttr(options.height);\n this._element.setAttribute(\"width\", width);\n this._element.setAttribute(\"height\", height);\n this._element.setAttribute(\"viewBox\", `0 0 ${width} ${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\n get width(): number {\n return this.options.width;\n }\n\n get height(): number {\n return this.options.height;\n }\n\n async drawQR(qr: QRCodeMinimal): 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.image, this.options.imageOptions.crossOrigin);\n const { imageOptions, errorCorrectionPercent } = this.options;\n\n if (imageOptions.mode == ImageMode.background) {\n const maxWidth = this.options.width * imageOptions.imageSize;\n const maxHeight = this.options.height * imageOptions.imageSize;\n let { width, height } = size;\n\n height = (height / width) * maxWidth;\n width = maxWidth;\n\n if (height > maxHeight) {\n width = (width / height) * maxHeight;\n height = maxHeight;\n }\n\n drawImageSize = {\n hideXDots: 0,\n hideYDots: 0,\n width,\n height\n };\n } else {\n const coverLevel = imageOptions.imageSize * errorCorrectionPercent;\n const alignment = QRUtil.getPatternPosition(typeNumber);\n const maxHiddenDots = Math.floor(\n coverLevel * (count * count - 3 * 8 * 8 - 2 * (count - 16) - alignment.length ** 2 * 25)\n );\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\n this.drawBackground();\n\n if (\n this.options.imageOptions.mode != ImageMode.overlay &&\n this.options.image &&\n drawImageSize.width > 0 &&\n drawImageSize.height > 0\n ) {\n await this.drawImage({ width: drawImageSize.width, height: drawImageSize.height, count, dotSize });\n }\n\n this.drawDots((i: number, j: number): boolean => {\n if (this.options.imageOptions.mode == ImageMode.center) {\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 ((i < 8 && j < 8) || (i >= count - 8 && j < 8) || (j >= count - 8 && i < 8)) return false;\n\n return true;\n });\n\n if (\n this.options.imageOptions.mode == ImageMode.overlay &&\n this.options.image &&\n drawImageSize.width > 0 &&\n drawImageSize.height > 0\n ) {\n await this.drawImage({ width: drawImageSize.width, height: drawImageSize.height, count, dotSize });\n }\n\n this.drawCorners();\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.backgroundMask, this.backgroundMaskGroup] = this.createMask(\"mask-background-color\");\n this.defs.appendChild(this.backgroundMask);\n\n element.setAttribute(\"x\", numToAttr((options.width - size) / 2));\n element.setAttribute(\"y\", numToAttr((options.height - size) / 2));\n element.setAttribute(\"width\", numToAttr(size));\n element.setAttribute(\"height\", numToAttr(size));\n element.setAttribute(\"rx\", numToAttr((size / 2) * (options.backgroundOptions.round || 0)));\n\n this.backgroundMaskGroup.appendChild(element);\n }\n }\n\n drawDots(filter?: (i: number, j: number) => boolean): 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 let dot = new QRDot(options.dotsOptions.type, this.document);\n const overlayDot = new QRDot(DotType.tinySquare, this.document);\n const markerDot = new QRDot(DotType.square, this.document);\n\n [this.dotsMask, this.dotsMaskGroup] = this.createMask(\"mask-dot-color\");\n this.defs.appendChild(this.dotsMask);\n\n if (options.imageOptions.mode == ImageMode.background) {\n [this.lightDotsMask, this.lightDotsMaskGroup] = this.createMask(\"mask-light-dot-color\");\n this.defs.appendChild(this.lightDotsMask);\n }\n\n let margin = 0;\n let additionalDots = 0;\n let fakeCount = count;\n\n if (options.shape === ShapeType.circle) {\n margin = (this.options.backgroundOptions && this.options.backgroundOptions.margin) || 0;\n additionalDots = Math.floor((minSize / dotSize - count - 2 * margin) / 2);\n fakeCount = count + additionalDots * 2;\n }\n\n const xFakeBeginning = xBeginning - additionalDots * dotSize;\n const yFakeBeginning = yBeginning - additionalDots * dotSize;\n const colorX = xFakeBeginning;\n const colorY = yFakeBeginning;\n const colorCount = count + additionalDots * 2;\n const fakeMatrix: (boolean | undefined)[][] = new Array(fakeCount);\n const center = Math.floor(fakeCount / 2);\n\n for (let i = 0; i < fakeCount; i++) {\n fakeMatrix[i] = new Array(fakeCount);\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 const ii = i - additionalDots;\n const jj = j - additionalDots;\n if (filter && !filter(ii, jj)) fakeMatrix[i][j] = undefined;\n else fakeMatrix[i][j] = !!this.qr.isDark(jj, ii);\n continue;\n }\n\n if (\n options.shape === ShapeType.circle &&\n Math.sqrt((i - center) * (i - center) + (j - center) * (j - center)) > center\n ) {\n fakeMatrix[i][j] = undefined;\n continue;\n }\n\n if (\n i == additionalDots - 1 ||\n i == fakeCount - additionalDots ||\n j == additionalDots - 1 ||\n j == fakeCount - additionalDots\n ) {\n if (\n (j == additionalDots - 1 && (i < additionalDots + 8 || i > fakeCount - additionalDots - 9)) ||\n (j == fakeCount - additionalDots && i < additionalDots + 8) ||\n (i == additionalDots - 1 && (j < additionalDots + 8 || j > fakeCount - additionalDots - 9)) ||\n (i == fakeCount - additionalDots && j < additionalDots + 8)\n )\n fakeMatrix[i][j] = undefined;\n else fakeMatrix[i][j] = false;\n continue;\n }\n\n if (this.lightDotsMask) continue;\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 }\n }\n\n const typeNr = (count - 17) / 4;\n const alignment = QRUtil.getPatternPosition(typeNr);\n\n for (let i = 0; i < fakeCount; i++) {\n const iAlign = alignment.find((v) => i - additionalDots > v - 3 && i - additionalDots < v + 3);\n for (let j = 0; j < fakeCount; j++) {\n const jAlign = alignment.find((v) => j - additionalDots > v - 3 && j - additionalDots < v + 3);\n if (fakeMatrix[i][j] == undefined) continue;\n\n if (this.lightDotsMask) {\n dot =\n iAlign &&\n jAlign &&\n ((iAlign != alignment[0] && jAlign != alignment[0]) ||\n (jAlign != alignment[0] && jAlign != alignment[alignment.length - 1]) ||\n (iAlign != alignment[0] && iAlign != alignment[alignment.length - 1]))\n ? markerDot\n : overlayDot;\n }\n\n if (!fakeMatrix[i][j]) {\n if (this.lightDotsMask) {\n dot.draw({\n x: xFakeBeginning + i * dotSize,\n y: yFakeBeginning + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean => {\n return fakeMatrix[i + xOffset]?.[j + yOffset] === false;\n }\n });\n\n if (dot.element && this.lightDotsMaskGroup) {\n this.lightDotsMaskGroup.appendChild(dot.element);\n }\n }\n continue;\n }\n\n dot.draw({\n x: xFakeBeginning + i * dotSize,\n y: yFakeBeginning + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean => {\n return fakeMatrix[i + xOffset]?.[j + yOffset] === true;\n }\n });\n if (dot.element && this.dotsMaskGroup) {\n this.dotsMaskGroup.appendChild(dot.element);\n }\n }\n }\n\n if (this.lightDotsMask) {\n this.createColor({\n options: options.imageOptions.fill.gradient,\n color: options.imageOptions.fill.color,\n additionalRotation: 0,\n x: colorX - dotSize,\n y: colorY - dotSize,\n height: (colorCount + 2) * dotSize,\n width: (colorCount + 2) * dotSize,\n name: \"light-dot-color\"\n });\n }\n\n this.createColor({\n options: options.dotsOptions?.gradient,\n color: options.dotsOptions.color,\n additionalRotation: 0,\n x: colorX,\n y: colorY,\n height: colorCount * dotSize,\n width: colorCount * dotSize,\n name: \"dot-color\"\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 cornersSquareMask = this.dotsMask;\n let cornersSquareMaskGroup = this.dotsMaskGroup;\n let cornersDotMask = this.dotsMask;\n let cornersDotMaskGroup = this.dotsMaskGroup;\n\n if (options.cornersSquareOptions?.gradient || options.cornersSquareOptions?.color) {\n [cornersSquareMask, cornersSquareMaskGroup] = this.createMask(`mask-corners-square-color-${column}-${row}`);\n this.defs.appendChild(cornersSquareMask);\n cornersDotMask = cornersSquareMask;\n cornersDotMaskGroup = cornersSquareMaskGroup;\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(options.cornersSquareOptions.type, this.document);\n\n cornersSquare.draw({\n x,\n y,\n size: cornersSquareSize,\n rotation\n });\n\n if (cornersSquare.element && cornersSquareMaskGroup) {\n cornersSquareMaskGroup.appendChild(cornersSquare.element);\n }\n\n if (cornersSquare.fill && this.lightDotsMaskGroup) {\n this.lightDotsMaskGroup.appendChild(cornersSquare.fill);\n }\n } else {\n const dot = new QRDot(options.dotsOptions.type, 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 if (this.lightDotsMask && !dotMask[i]?.[j]) {\n dot.draw({\n x: x + i * dotSize,\n y: y + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean =>\n !squareMask[i + xOffset]?.[j + yOffset] && !dotMask[i + xOffset]?.[j + yOffset]\n });\n\n if (dot.element && this.lightDotsMaskGroup) {\n this.lightDotsMaskGroup.appendChild(dot.element);\n }\n }\n continue;\n }\n\n dot.draw({\n x: x + i * dotSize,\n y: y + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean => !!squareMask[i + xOffset]?.[j + yOffset]\n });\n\n if (dot.element && cornersSquareMaskGroup) {\n cornersSquareMaskGroup.appendChild(dot.element);\n }\n }\n }\n\n if (this.lightDotsMask)\n for (let i = -1; i < 8; i++) {\n for (let j = -1; j < 8; j++) {\n if (i == -1 || i == 7 || j == -1 || j == 7) {\n dot.draw({\n x: x + i * dotSize,\n y: y + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean => {\n const ii = i + xOffset;\n const jj = j + yOffset;\n return ii >= -1 && ii <= 7 && jj >= -1 && jj <= 7 && (ii == -1 || ii == 7 || jj == -1 || jj == 7);\n }\n });\n\n if (dot.element && this.lightDotsMaskGroup) {\n this.lightDotsMaskGroup.appendChild(dot.element);\n }\n }\n }\n }\n }\n\n if (options.cornersDotOptions?.gradient || options.cornersDotOptions?.color) {\n [cornersDotMask, cornersDotMaskGroup] = this.createMask(`mask-corners-dot-color-${column}-${row}`);\n this.defs.appendChild(cornersDotMask);\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(options.cornersDotOptions.type, this.document);\n\n cornersDot.draw({\n x: x + dotSize * 2,\n y: y + dotSize * 2,\n size: cornersDotSize,\n rotation\n });\n\n if (cornersDot.element && cornersDotMaskGroup) {\n cornersDotMaskGroup.appendChild(cornersDot.element);\n }\n } else {\n const dot = new QRDot(options.dotsOptions.type, 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: x + i * dotSize,\n y: y + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean => !!dotMask[i + xOffset]?.[j + yOffset]\n });\n\n if (dot.element && cornersDotMaskGroup) {\n cornersDotMaskGroup.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.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"xlink: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\", numToAttr(dx));\n image.setAttribute(\"y\", numToAttr(dy));\n image.setAttribute(\"width\", `${numToAttr(dw)}px`);\n image.setAttribute(\"height\", `${numToAttr(dh)}px`);\n\n this._element.appendChild(image);\n }\n\n private 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\", numToAttr(x));\n rect.setAttribute(\"y\", numToAttr(y));\n rect.setAttribute(\"height\", numToAttr(height));\n rect.setAttribute(\"width\", numToAttr(width));\n rect.setAttribute(\"style\", `mask:url(#mask-${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\", numToAttr(x + width / 2));\n gradient.setAttribute(\"fy\", numToAttr(y + height / 2));\n gradient.setAttribute(\"cx\", numToAttr(x + width / 2));\n gradient.setAttribute(\"cy\", numToAttr(y + height / 2));\n gradient.setAttribute(\"r\", numToAttr(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\", numToAttr(x0));\n gradient.setAttribute(\"y1\", numToAttr(y0));\n gradient.setAttribute(\"x2\", numToAttr(x1));\n gradient.setAttribute(\"y2\", numToAttr(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\", `${numToAttr(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 private createMask(id: string) {\n const options = this.options;\n\n const mask = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"mask\");\n mask.setAttribute(\"id\", id);\n mask.setAttribute(\"maskUnits\", \"userSpaceOnUse\");\n mask.setAttribute(\"x\", \"0\");\n mask.setAttribute(\"y\", \"0\");\n mask.setAttribute(\"width\", numToAttr(options.width));\n mask.setAttribute(\"height\", numToAttr(options.height));\n\n const group = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n group.setAttribute(\"fill\", \"#fff\");\n mask.appendChild(group);\n\n return [mask, group];\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 { QRCodeMinimal } from \"@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js\";\nimport { stringToBytes_UTF8 } from \"@liquid-js/qrcode-generator/lib/text/stringToBytes_UTF8.js\";\nimport { RecursivePartial } from \"../types/helper.js\";\nimport { mergeDeep } from \"../utils/merge.js\";\nimport { ImageMode, Options, ShapeType, defaultOptions, sanitizeOptions } from \"../utils/options.js\";\nimport { ErrorCorrectionPercents, getMode } from \"../utils/qrcode.js\";\nimport { QRSVG } from \"./qr-svg.js\";\n\nObject.assign(QRCodeMinimal.stringToBytesFuncs, stringToBytes_UTF8);\n\nexport type ExtensionFunction = (svg: SVGElement, options: RecursivePartial<Options>) => void;\n\nexport class QRCodeStyling {\n private options: Options;\n private container?: HTMLElement;\n private qr?: QRCodeMinimal;\n private extension?: ExtensionFunction;\n private svgDrawingPromise?: Promise<void>;\n private qrSVG?: QRSVG;\n\n get size() {\n if (this.qrSVG)\n return {\n width: this.qrSVG.width,\n height: this.qrSVG.height\n };\n return undefined;\n }\n\n constructor(options?: RecursivePartial<Options>) {\n this.options = options ? sanitizeOptions(mergeDeep(defaultOptions, options) as Options) : defaultOptions;\n this.update();\n }\n\n update(\n /** The same options as for initialization */\n options?: RecursivePartial<Options>\n ): void {\n if (this.container) this.container.innerHTML = \"\";\n\n this.options = options ? sanitizeOptions(mergeDeep(this.options, options) as Options) : this.options;\n\n if (!this.options.data) {\n return;\n }\n\n if (this.options.stringToBytesFuncs) {\n Object.assign(QRCodeMinimal.stringToBytesFuncs, this.options.stringToBytesFuncs);\n delete this.options.stringToBytesFuncs;\n }\n\n this.qr = new QRCodeMinimal(this.options.qrOptions.typeNumber, this.options.qrOptions.errorCorrectionLevel);\n const mode = this.options.qrOptions.mode || getMode(this.options.data);\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 (this.qrSVG?.element) {\n container.appendChild(this.qrSVG.element);\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 if (!this.qrSVG?.element || !this.svgDrawingPromise) {\n this.setupSvg();\n }\n await this.svgDrawingPromise;\n\n if (!this.qrSVG?.element) {\n return;\n }\n\n const serializer = new XMLSerializer();\n let source = serializer.serializeToString(this.qrSVG.element);\n\n source = '<?xml version=\"1.0\" standalone=\"no\"?>\\r\\n' + source;\n return source;\n }\n\n private setupSvg(): void {\n if (!this.qr) {\n return;\n }\n let moduleCount = this.qr.getModuleCount();\n if (this.options.imageOptions.mode == ImageMode.background) moduleCount += 2;\n const count = Math.ceil((this.options.shape == ShapeType.circle ? Math.sqrt(2) : 1) * moduleCount);\n const margin = (this.options.backgroundOptions && this.options.backgroundOptions.margin) || 0;\n const size = Math.ceil(this.options.dotsOptions.size * (count + 2 * margin));\n this.qrSVG = new QRSVG({\n ...this.options,\n width: size,\n height: size,\n errorCorrectionPercent: ErrorCorrectionPercents[this.options.qrOptions.errorCorrectionLevel]\n });\n\n this.svgDrawingPromise = this.qrSVG.drawQR(this.qr).then(() => {\n if (!this.qrSVG?.element) return;\n this.extension?.(this.qrSVG.element, this.options);\n });\n }\n}\n","import { QRCodeStyling } from \"../core/qr-code-styling.js\";\nimport { RecursivePartial } from \"../types/helper.js\";\nimport { CanvasOptions, defaultCanvasOptions, sanitizeCanvasOptions } from \"../utils/canvas-options.js\";\nimport { mergeDeep } from \"../utils/merge.js\";\n\nexport enum FileExtension {\n svg = \"svg\",\n png = \"png\",\n jpeg = \"jpeg\",\n webp = \"webp\"\n}\n\nexport function drawToCanvas(\n qrCode: QRCodeStyling,\n options?: RecursivePartial<CanvasOptions>\n): { canvas: HTMLCanvasElement; canvasDrawingPromise: Promise<void> | undefined } | undefined {\n const { width, height, margin } = options\n ? sanitizeCanvasOptions(mergeDeep(defaultCanvasOptions, options) as CanvasOptions)\n : defaultCanvasOptions;\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = width;\n canvas.height = height;\n\n const size = Math.min(width, height) - 2 * margin;\n\n const canvasDrawingPromise = qrCode.serialize().then((xml) => {\n if (!xml) return;\n const svg64 = btoa(xml);\n const image64 = \"data:image/svg+xml;base64,\" + svg64;\n const image = new Image();\n\n return new Promise<void>((resolve, reject) => {\n image.onload = (): void => {\n // Ensure pixel-perfect rendering of SVG to avoid artefact, then downscale to requested size\n const aaFactor = Math.ceil((2 * size) / Math.min(image.width, image.height));\n let aaCanvas: HTMLCanvasElement | OffscreenCanvas;\n try {\n aaCanvas = new OffscreenCanvas(image.width * aaFactor, image.height * aaFactor);\n } catch (_) {\n // Fallback to regular canvas element\n aaCanvas = document.createElement(\"canvas\");\n aaCanvas.width = image.width * aaFactor;\n aaCanvas.height = image.height * aaFactor;\n }\n aaCanvas.getContext(\"2d\")?.drawImage(image, 0, 0, aaCanvas.width, aaCanvas.height);\n\n canvas?.getContext(\"2d\")?.drawImage(aaCanvas, (width - size) / 2, (height - size) / 2, size, size);\n resolve();\n };\n image.onerror = image.onabort = reject;\n\n image.src = image64;\n });\n });\n\n return { canvas, canvasDrawingPromise };\n}\n\nexport async function download(\n qrCode: QRCodeStyling,\n downloadOptions: `${FileExtension}` | { name?: string; extension: `${FileExtension}` },\n options?: RecursivePartial<CanvasOptions>\n): Promise<void> {\n let extension: `${FileExtension}` = FileExtension.png;\n let name = \"qr\";\n\n //TODO remove deprecated code in the v2\n if (typeof downloadOptions === \"string\") {\n extension = downloadOptions;\n console.warn(\n \"Extension is deprecated as argument for 'download' method, please pass object { name: '...', extension: '...' } as argument\"\n );\n } else if (typeof downloadOptions === \"object\" && downloadOptions !== null) {\n if (downloadOptions.name) {\n name = downloadOptions.name;\n }\n if (downloadOptions.extension) {\n extension = downloadOptions.extension;\n }\n }\n\n if (extension.toLowerCase() === \"svg\") {\n const source = await qrCode.serialize();\n if (!source) return;\n const url = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(source);\n downloadURI(url, `${name}.svg`);\n } else {\n const res = drawToCanvas(qrCode, options);\n if (!res) return;\n const { canvas, canvasDrawingPromise } = res;\n await canvasDrawingPromise;\n const url = canvas.toDataURL(`image/${extension}`);\n downloadURI(url, `${name}.${extension}`);\n }\n}\n\nexport function downloadURI(uri: string, name: string): void {\n const link = document.createElement(\"a\");\n link.download = name;\n link.href = uri;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n}\n","import { DOMImplementation, DOMParser, XMLSerializer } from \"@xmldom/xmldom\";\nimport { fileTypeFromBuffer } from \"file-type\";\nimport sharp from \"sharp\";\nimport { QRCodeStyling as _QRCodeStyling } from \"./core/qr-code-styling.js\";\nimport type * as _browserUtils from \"./tools/browser-utils.js\";\nimport { RecursivePartial } from \"./types/helper.js\";\nimport { Options } from \"./utils/options.js\";\nexport { ErrorCorrectionLevel, Mode, TypeNumber } from \"@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js\";\nexport { type ExtensionFunction } from \"./core/qr-code-styling.js\";\nexport { FileExtension } from \"./tools/browser-utils.js\";\nexport { type RecursivePartial } from \"./types/helper.js\";\nexport { type CanvasOptions } from \"./utils/canvas-options.js\";\nexport { GradientType, type Gradient } from \"./utils/gradient.js\";\nexport { CornerDotType, CornerSquareType, DotType, ImageMode, ShapeType, type Options } from \"./utils/options.js\";\nexport { ErrorCorrectionPercents } from \"./utils/qrcode.js\";\n\nexport const browserUtils: typeof _browserUtils | undefined = undefined;\n\nexport class QRCodeStyling extends _QRCodeStyling {\n constructor(options: RecursivePartial<Options>) {\n const dom = new DOMImplementation().createDocument(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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n global.XMLSerializer = XMLSerializer as any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n global.DOMParser = DOMParser as any;\n\n super({\n ...options,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n document: options.document || (dom as any),\n imageTools: options.imageTools || {\n toDataURL: (url: string | Buffer | Blob): Promise<string> => {\n if (typeof url == \"string\" && url.startsWith(\"data:\")) return Promise.resolve(url);\n return loadImage(url).then(\n ({ contentType, data }) =>\n `data:${contentType?.replace(\"application/xml\", \"image/svg+xml\")};base64,${data.toString(\"base64\")}`\n );\n },\n getSize: async (src: string | Blob | Buffer): Promise<{ width: number; height: number }> => {\n const { data } = Buffer.isBuffer(options.image) ? { data: options.image } : await loadImage(src);\n const meta = await sharp(data).metadata();\n return {\n width: meta.width!,\n\n height: meta.height!\n };\n }\n }\n });\n }\n}\n"],"names":["isObject","obj","isArray","target","sources","length","undefined","source","keys","forEach","key","targetValue","Array","sourceValue","mergeDeep","Object","assign","GradientType","DotType","CornerDotType","CornerSquareType","ShapeType","ImageMode","sanitizeGradient","gradient","colorStops","newGradient","rotation","Number","map","colorStop","offset","radial","linear","dot","randomDot","rounded","extraRounded","verticalLine","horizontalLine","classy","classyRounded","square","smallSquare","tinySquare","diamond","heart","outpoint","inpoint","circle","center","overlay","background","defaultOptions","document","shape","width","height","data","qrOptions","typeNumber","TypeNumber","mode","errorCorrectionLevel","ErrorCorrectionLevel","Q","imageOptions","imageSize","crossOrigin","margin","fill","color","dotsOptions","type","size","sanitizeOptions","options","newOptions","Math","min","round","max","cornersSquareOptions","cornersDotOptions","backgroundOptions","ErrorCorrectionPercents","L","M","H","rx","numToAttr","value","toFixed","replace","strings","values","reduce","t","v","i","p","trim","element","this","_element","constructor","draw","args","drawFunction","drawSquare","drawHeart","drawRounded","drawClassy","drawInpoint","drawOutpoint","drawDot","call","rotateFigure","x","y","cx","cy","setAttribute","PI","basicDot","createElementNS","basicSquare","basicHeart","move","path","toUpperCase","join","basicRounded","basicClassy","svgPath","dotSize","basicInpoint","_fill","drawExtraRounded","basicExtraRounded","drawRandomDot","drawClassyRounded","drawVerticalLine","drawHorizontalLine","drawDiamond","drawSmallSquare","drawTinySquare","basicSideRounded","basicCornerRounded","basicCornerExtraRounded","basicCornersRounded","random","getNeighbor","leftNeighbor","rightNeighbor","topNeighbor","neighborsCount","bottomNeighbor","leftNeighbor_rotation","browserImageTools","toDataURL","url","startsWith","Promise","resolve","reject","xhr","XMLHttpRequest","onload","xhr.onload","reader","FileReader","onloadend","reader.onloadend","result","readAsDataURL","response","onerror","onabort","ontimeout","open","responseType","send","getSize","src","image","Image","then","catch","squareMask","dotMask","defs","appendChild","imageTools","drawQR","qr","parseInt","count","drawImageSize","hideXDots","hideYDots","errorCorrectionPercent","maxWidth","maxHeight","coverLevel","alignment","QRUtil","getPatternPosition","calculateImageSize","originalHeight","originalWidth","maxHiddenDots","maxHiddenAxisDots","dimMax","dimMin","lower","upper","dotsMax","ceil","dotsMin","abs","hideMax","hideMin","maxW","maxH","floor","drawBackground","drawImage","drawDots","j","drawCorners","createColor","additionalRotation","name","backgroundMask","backgroundMaskGroup","createMask","filter","getModuleCount","minSize","QRDot","overlayDot","markerDot","dotsMask","dotsMaskGroup","lightDotsMask","lightDotsMaskGroup","additionalDots","fakeCount","xFakeBeginning","xBeginning","yFakeBeginning","colorCount","fakeMatrix","ii","jj","isDark","sqrt","iAlign","find","jAlign","center_jAlign","xOffset","yOffset","column","row","yBeginning","cornersSquareMask","cornersSquareMaskGroup","cornersDotMask","cornersDotMaskGroup","cornersSquareSize","cornersDotMask_cornersSquare_dot","QRCornerSquare","cornersSquare","cornersDotSize","column_cornersDot","QRCornerDot","cornersDot","dx","dy","dw","dh","setAttributeNS","imageUrl","substring","indexOf","encoding","container_data","atob","Buffer","from","toString","container","parseFromString","DOMParser","rootEl","getElementsByTagName","rect","x0","y0","x1","y1","positiveRotation","tan","stop","id","mask","group","QRCodeMinimal","stringToBytesFuncs","stringToBytes_UTF8","qrSVG","update","innerHTML","getMode","test","Mode","numeric","alphanumeric","unicode","byte","addData","make","setupSvg","append","applyExtension","extension","deleteExtension","serialize","svgDrawingPromise","serializeToString","XMLSerializer","moduleCount","QRSVG","FileExtension","svg","png","jpeg","webp","QRCodeStyling","QRCodeStyling$1","async","loadImage","pr","imageCache","get","fetch","res","arrayBuffer","buff","contentType","headers","fileTypeFromBuffer","r","mime","set","dom","createDocument","DOMImplementation","Map","super","isBuffer","meta","sharp","metadata"],"mappings":"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"}
1
+ {"version":3,"file":"qr-code-styling-node.js","sources":["../src/utils/merge.ts","../src/utils/gradient.ts","../src/utils/options.ts","../src/utils/qrcode.ts","../src/utils/svg.ts","../src/figures/corner-dot.ts","../src/figures/corner-square.ts","../src/figures/dot.ts","../src/tools/browser-image-tools.ts","../src/core/qr-svg.ts","../src/utils/image.ts","../src/core/qr-code-styling.ts","../src/tools/browser-utils.ts","../src/node.ts"],"sourcesContent":["const isObject = (obj: Record<string, unknown> | undefined): boolean =>\n !!obj && typeof obj === \"object\" && !Array.isArray(obj);\n\nexport type UnknownObject =\n | {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n }\n | undefined;\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","export enum GradientType {\n radial = \"radial\",\n linear = \"linear\"\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\nexport function 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","import { ErrorCorrectionLevel, Mode, TypeNumber } from \"@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js\";\nimport { browserImageTools } from \"../tools/browser-image-tools.js\";\nimport { Gradient, sanitizeGradient } from \"./gradient.js\";\n\nexport enum DotType {\n dot = \"dot\",\n randomDot = \"random-dot\",\n rounded = \"rounded\",\n extraRounded = \"extra-rounded\",\n verticalLine = \"vertical-line\",\n horizontalLine = \"horizontal-line\",\n classy = \"classy\",\n classyRounded = \"classy-rounded\",\n square = \"square\",\n smallSquare = \"small-square\",\n tinySquare = \"tiny-square\",\n diamond = \"diamond\"\n}\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}\n\nexport enum CornerSquareType {\n dot = \"dot\",\n square = \"square\",\n extraRounded = \"extra-rounded\",\n classy = \"classy\",\n outpoint = \"outpoint\",\n inpoint = \"inpoint\"\n}\n\nexport enum ShapeType {\n square = \"square\",\n circle = \"circle\"\n}\n\nexport enum ImageMode {\n /**\n * Place image in the center of the code\n */\n center = \"center\",\n /**\n * Place image over the center of the code\n */\n overlay = \"overlay\",\n /**\n * Use image as background, draw dots over it\n */\n background = \"background\"\n}\n\nexport interface 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 `@liquid-js/qrcode-generator` lib */\n qrOptions: {\n typeNumber: TypeNumber;\n mode?: `${Mode}`;\n /** @default ErrorCorrectionLevel.Q */\n errorCorrectionLevel: `${ErrorCorrectionLevel}`;\n };\n imageOptions: {\n /**\n * Image mode\n *\n * @default ImageMode.center\n */\n mode: `${ImageMode}`;\n /**\n * Fill blank areas of the code with selected color\n */\n fill: {\n /**\n * Color of QR dots\n *\n * @default \"rgba(255,255,255,0.75)\"\n */\n color: string;\n /** Gradient of Corners Dot */\n gradient?: Gradient;\n };\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 const defaultOptions: Options = {\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 mode: ImageMode.center,\n imageSize: 0.4,\n crossOrigin: undefined,\n margin: 0,\n fill: {\n color: \"rgba(255,255,255,1)\"\n }\n },\n dotsOptions: {\n type: DotType.square,\n color: \"#000\",\n size: 10\n }\n};\n\nexport function sanitizeOptions(options: Options): Options {\n const newOptions = { ...options };\n\n newOptions.imageOptions = {\n ...newOptions.imageOptions,\n imageSize: Math.min(1, Number(newOptions.imageOptions.imageSize)) || 1,\n margin: Number(newOptions.imageOptions.margin),\n fill: {\n ...newOptions.imageOptions.fill\n }\n };\n\n if (newOptions.imageOptions.mode == ImageMode.overlay) newOptions.imageOptions.margin = 0;\n if (newOptions.imageOptions.fill.gradient) {\n newOptions.imageOptions.fill.gradient = sanitizeGradient(newOptions.imageOptions.fill.gradient);\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","import { ErrorCorrectionLevel, Mode } from \"@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js\";\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\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","const rx = /\\.?0+$/;\n\nexport function numToAttr(value: number) {\n return value.toFixed(7).replace(rx, \"\");\n}\n\nexport function svgPath(strings: TemplateStringsArray, ...values: unknown[]) {\n return strings\n .reduce((t, v, i) => {\n let p: unknown = \"\";\n if (i) p = values[i - 1];\n if (typeof p == \"number\") p = numToAttr(p);\n return `${t}${p}${v}`;\n }, \"\")\n .trim()\n .replace(/[\\s\\n\\r]+/gim, \" \");\n}\n","import { BasicFigureDrawArgs, DrawArgs, RotateFigureArgs } from \"../types/helper.js\";\nimport { CornerDotType } from \"../utils/options.js\";\nimport { numToAttr, svgPath } from \"../utils/svg.js\";\n\nexport class QRCornerDot {\n private _element?: SVGElement;\n\n get element() {\n return this._element;\n }\n\n constructor(\n private readonly type: `${CornerDotType}`,\n private readonly document: Document\n ) {}\n\n draw(args: DrawArgs): 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, args);\n }\n\n private 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(${numToAttr((180 * rotation) / Math.PI)},${cx},${cy})`);\n }\n\n private 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\", numToAttr(x + size / 2));\n this._element.setAttribute(\"cy\", numToAttr(y + size / 2));\n this._element.setAttribute(\"r\", numToAttr(size / 2));\n }\n });\n }\n\n private 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\", numToAttr(x));\n this._element.setAttribute(\"y\", numToAttr(y));\n this._element.setAttribute(\"width\", numToAttr(size));\n this._element.setAttribute(\"height\", numToAttr(size));\n }\n });\n }\n\n private 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 1,\n 0.3262506,\n \"c\",\n 0,\n 0.0383376,\n -0.0064626,\n 0.0758377,\n -0.0193751,\n 0.1125001,\n \"s\",\n -0.0356247,\n 0.076875,\n -0.0681248,\n 0.1206252,\n \"c\",\n -0.0325,\n 0.0437499,\n -0.0762503,\n 0.0931247,\n -0.1312501,\n 0.1481249,\n \"C\",\n 0.7262502,\n 0.7625008,\n 0.6566626,\n 0.8279132,\n 0.5724999,\n 0.9037505,\n \"L\",\n 0.5,\n 0.9687506,\n \"L\",\n 0.4275001,\n 0.9037505,\n \"C\",\n 0.3433374,\n 0.8279132,\n 0.2737499,\n 0.7625005,\n 0.21875,\n 0.7075007,\n \"C\",\n 0.1637501,\n 0.6525008,\n 0.1199999,\n 0.6031258,\n 0.0874999,\n 0.5593758,\n \"S\",\n 0.0322876,\n 0.4754133,\n 0.0193751,\n 0.4387506,\n \"S\",\n 0,\n 0.3645881,\n 0,\n 0.3262506,\n \"c\",\n 0,\n -0.0783374,\n 0.0262499,\n -0.1437498,\n 0.07875,\n -0.1962499,\n \"s\",\n 0.1179124,\n -0.07875,\n 0.1962499,\n -0.07875,\n \"c\",\n 0.0433376,\n 0,\n 0.0845875,\n 0.0091625,\n 0.12375,\n 0.0274999,\n \"S\",\n 0.4716623,\n 0.1229131,\n 0.5,\n 0.1562506,\n \"c\",\n 0.0283374,\n -0.0333375,\n 0.0620874,\n -0.0591625,\n 0.1012502,\n -0.0775,\n \"c\",\n 0.0391627,\n -0.0183375,\n 0.0804126,\n -0.0274999,\n 0.12375,\n -0.0274999,\n \"c\",\n 0.0783374,\n 0,\n 0.1437497,\n 0.0262499,\n 0.1962501,\n 0.07875,\n \"S\",\n 1,\n 0.2479131,\n 1,\n 0.3262506,\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 numToAttr(v);\n })\n .join(\" \")\n );\n }\n\n private 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\", numToAttr(x));\n this._element.setAttribute(\"y\", numToAttr(y));\n this._element.setAttribute(\"width\", numToAttr(size));\n this._element.setAttribute(\"height\", numToAttr(size));\n this._element.setAttribute(\"rx\", numToAttr(size / 4));\n this._element.setAttribute(\"ry\", numToAttr(size / 4));\n }\n });\n }\n\n private 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 svgPath`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 private 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 svgPath`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 private drawDot({ x, y, size, rotation }: DrawArgs): void {\n this.basicDot({ x, y, size, rotation });\n }\n\n private drawSquare({ x, y, size, rotation }: DrawArgs): void {\n this.basicSquare({ x, y, size, rotation });\n }\n\n private drawHeart({ x, y, size, rotation }: DrawArgs): void {\n this.basicHeart({ x, y, size, rotation });\n }\n\n private drawRounded({ x, y, size, rotation }: DrawArgs): void {\n this.basicRounded({ x, y, size, rotation });\n }\n\n private drawClassy({ x, y, size, rotation }: DrawArgs): void {\n this.basicClassy({ x, y, size, rotation });\n }\n\n private drawInpoint({ x, y, size, rotation }: DrawArgs): void {\n this.basicInpoint({ x, y, size, rotation });\n }\n\n private drawOutpoint({ x, y, size, rotation }: DrawArgs): void {\n this.basicInpoint({ x, y, size, rotation: (rotation || 0) + Math.PI });\n }\n}\n","import { BasicFigureDrawArgs, DrawArgs, RotateFigureArgs } from \"../types/helper.js\";\nimport { CornerSquareType } from \"../utils/options.js\";\nimport { numToAttr, svgPath } from \"../utils/svg.js\";\n\nexport class QRCornerSquare {\n private _element?: SVGElement;\n private _fill?: SVGElement;\n\n get element() {\n return this._element;\n }\n\n get fill() {\n return this._fill;\n }\n\n constructor(\n private readonly type: `${CornerSquareType}`,\n private readonly document: Document\n ) {}\n\n draw(args: DrawArgs): 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, args);\n }\n\n private 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(${numToAttr((180 * rotation) / Math.PI)},${cx},${cy})`);\n this._fill?.setAttribute(\"transform\", `rotate(${numToAttr((180 * rotation) / Math.PI)},${cx},${cy})`);\n }\n\n private 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 svgPath`M ${x + size / 2} ${y}\n a ${size / 2} ${size / 2} 0 1 0 0.1 0\n z\n m 0 ${dotSize}\n a ${size / 2 - dotSize} ${size / 2 - dotSize} 0 1 1 -0.1 0\n Z`\n );\n this._fill = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._fill.setAttribute(\"clip-rule\", \"evenodd\");\n this._fill.setAttribute(\n \"d\",\n svgPath`M ${x + size / 2} ${y - dotSize}\n a ${size / 2 + dotSize} ${size / 2 + dotSize} 0 1 0 0.1 0\n z`\n );\n }\n });\n }\n\n private 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 svgPath`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 this._fill = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._fill.setAttribute(\"clip-rule\", \"evenodd\");\n this._fill.setAttribute(\n \"d\",\n svgPath`\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 private 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 svgPath`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 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 ${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 z`\n );\n this._fill = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._fill.setAttribute(\"clip-rule\", \"evenodd\");\n this._fill.setAttribute(\n \"d\",\n svgPath`\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 z`\n );\n }\n });\n }\n\n private 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 svgPath`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 this._fill = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._fill.setAttribute(\"clip-rule\", \"evenodd\");\n this._fill.setAttribute(\n \"d\",\n svgPath`\n M ${x + 0.5 * dotSize} ${y - dotSize}\n h ${4 * dotSize}\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${dotSize * 3.5} ${dotSize * 3.5}\n v ${5.5 * dotSize}\n h ${-5.5 * dotSize}\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${-dotSize * 3.5} ${-dotSize * 3.5}\n v ${-5.5 * dotSize}\n z`\n );\n }\n });\n }\n\n private 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 svgPath`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 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 ${-2 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${-dotSize * 1.5}\n z`\n );\n this._fill = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._fill.setAttribute(\"clip-rule\", \"evenodd\");\n this._fill.setAttribute(\n \"d\",\n svgPath`\n M ${x + 0.5 * dotSize} ${y - dotSize}\n h ${4 * dotSize}\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${dotSize * 3.5} ${dotSize * 3.5}\n v ${5.5 * dotSize}\n h ${-5.5 * dotSize}\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${-dotSize * 3.5} ${-dotSize * 3.5}\n v ${-2 * dotSize}\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${dotSize * 3.5} ${-dotSize * 3.5}\n z`\n );\n }\n });\n }\n\n private drawDot({ x, y, size, rotation }: DrawArgs): void {\n this.basicDot({ x, y, size, rotation });\n }\n\n private drawSquare({ x, y, size, rotation }: DrawArgs): void {\n this.basicSquare({ x, y, size, rotation });\n }\n\n private drawExtraRounded({ x, y, size, rotation }: DrawArgs): void {\n this.basicExtraRounded({ x, y, size, rotation });\n }\n\n private drawClassy({ x, y, size, rotation }: DrawArgs): void {\n this.basicClassy({ x, y, size, rotation });\n }\n\n private drawInpoint({ x, y, size, rotation }: DrawArgs): void {\n this.basicInpoint({ x, y, size, rotation });\n }\n\n private drawOutpoint({ x, y, size, rotation }: DrawArgs): void {\n this.basicInpoint({ x, y, size, rotation: (rotation || 0) + Math.PI });\n }\n}\n","import { BasicFigureDrawArgs, DrawArgs, RotateFigureArgs } from \"../types/helper.js\";\nimport { DotType } from \"../utils/options.js\";\nimport { numToAttr, svgPath } from \"../utils/svg.js\";\n\nexport class QRDot {\n private _element?: SVGElement;\n\n get element() {\n return this._element;\n }\n\n constructor(\n private readonly type: `${DotType}`,\n private readonly document: Document\n ) {}\n\n draw(args: DrawArgs): void {\n const type = this.type;\n let drawFunction;\n\n switch (type) {\n case DotType.dot:\n drawFunction = this.drawDot;\n break;\n case DotType.randomDot:\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.verticalLine:\n drawFunction = this.drawVerticalLine;\n break;\n case DotType.horizontalLine:\n drawFunction = this.drawHorizontalLine;\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.tinySquare:\n drawFunction = this.drawTinySquare;\n break;\n case DotType.square:\n default:\n drawFunction = this.drawSquare;\n }\n\n drawFunction.call(this, args);\n }\n\n private 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(${numToAttr((180 * rotation) / Math.PI)},${cx},${cy})`);\n }\n\n private 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\", numToAttr(x + size / 2));\n this._element.setAttribute(\"cy\", numToAttr(y + size / 2));\n this._element.setAttribute(\"r\", numToAttr(size / 2));\n }\n });\n }\n\n private 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\", numToAttr(x));\n this._element.setAttribute(\"y\", numToAttr(y));\n this._element.setAttribute(\"width\", numToAttr(size));\n this._element.setAttribute(\"height\", numToAttr(size));\n }\n });\n }\n\n //if rotation === 0 - right side is rounded\n private 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 svgPath`M ${x} ${y}\n v ${size}\n h ${size / 2}\n a ${size / 2} ${size / 2}, 0, 0, 0, 0 ${-size}\n z`\n );\n }\n });\n }\n\n //if rotation === 0 - top right corner is rounded\n private 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 svgPath`M ${x} ${y}\n v ${size}\n h ${size}\n v ${-size / 2}\n a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}\n z`\n );\n }\n });\n }\n\n //if rotation === 0 - top right corner is rounded\n private 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 svgPath`M ${x} ${y}\n v ${size}\n h ${size}\n a ${size} ${size}, 0, 0, 0, ${-size} ${-size}\n z`\n );\n }\n });\n }\n\n //if rotation === 0 - left bottom and right top corners are rounded\n private 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 svgPath`M ${x} ${y}\n v ${size / 2}\n a ${size / 2} ${size / 2}, 0, 0, 0, ${size / 2} ${size / 2}\n h ${size / 2}\n v ${-size / 2}\n a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}\n z`\n );\n }\n });\n }\n\n private drawDot({ x, y, size }: DrawArgs): void {\n this.basicDot({ x, y, size, rotation: 0 });\n }\n\n private 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 private drawSquare({ x, y, size }: DrawArgs): void {\n this.basicSquare({ x, y, size, rotation: 0 });\n }\n\n private 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 private drawTinySquare({ x, y, size }: DrawArgs): void {\n const originalSize = size;\n\n size = originalSize * 0.3;\n x = x + originalSize * 0.35;\n y = y + originalSize * 0.35;\n\n this.basicSquare({ x, y, size, rotation: 0 });\n }\n\n private drawDiamond({ x, y, size }: DrawArgs): void {\n this.basicSquare({ x, y, size, rotation: Math.PI / 4 });\n }\n\n private 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 private drawVerticalLine({ 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 private drawHorizontalLine({ 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 private 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 private 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 private 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","export const browserImageTools = {\n toDataURL(url: string | Buffer | Blob): Promise<string> {\n if (typeof url == \"string\" && url.startsWith(\"data:\")) return Promise.resolve(url);\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, true);\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(src: string | Blob | Buffer, crossOrigin?: string): Promise<{ width: number; height: number }> {\n return new Promise((resolve, reject) => {\n const image = new Image();\n\n if (crossOrigin === \"string\") {\n image.crossOrigin = crossOrigin;\n }\n\n image.onload = (): void => {\n resolve({ width: image.width, height: image.height });\n };\n image.onerror = image.onabort = reject;\n\n if (typeof src == \"string\") image.src = src;\n else\n browserImageTools\n .toDataURL(src)\n .then((url) => (image.src = url))\n .catch(reject);\n });\n }\n};\n","import { QRCodeMinimal } from \"@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js\";\nimport { QRUtil } from \"@liquid-js/qrcode-generator/lib/qrcode/QRUtil.js\";\nimport { QRCornerDot } from \"../figures/corner-dot.js\";\nimport { QRCornerSquare } from \"../figures/corner-square.js\";\nimport { QRDot } from \"../figures/dot.js\";\nimport { browserImageTools } from \"../tools/browser-image-tools.js\";\nimport { Gradient, GradientType } from \"../utils/gradient.js\";\nimport { calculateImageSize } from \"../utils/image.js\";\nimport { DotType, ImageMode, Options, ShapeType } from \"../utils/options.js\";\nimport { numToAttr } from \"../utils/svg.js\";\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\nexport class QRSVG {\n private _element: SVGElement;\n\n get element() {\n return this._element;\n }\n\n private defs: SVGElement;\n\n private backgroundMask?: SVGElement;\n private backgroundMaskGroup?: SVGElement;\n\n private dotsMask?: SVGElement;\n private dotsMaskGroup?: SVGElement;\n\n private lightDotsMask?: SVGElement;\n private lightDotsMaskGroup?: SVGElement;\n\n private qr?: QRCodeMinimal;\n private document: Document;\n private imageTools: typeof browserImageTools;\n\n constructor(\n private options: Pick<\n Options,\n | \"width\"\n | \"height\"\n | \"document\"\n | \"imageTools\"\n | \"image\"\n | \"imageOptions\"\n | \"dotsOptions\"\n | \"cornersDotOptions\"\n | \"cornersSquareOptions\"\n | \"backgroundOptions\"\n | \"shape\"\n > & { errorCorrectionPercent: number }\n ) {\n this.document = options.document;\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n const width = numToAttr(options.width);\n const height = numToAttr(options.height);\n this._element.setAttribute(\"width\", width);\n this._element.setAttribute(\"height\", height);\n this._element.setAttribute(\"viewBox\", `0 0 ${width} ${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\n get width(): number {\n return this.options.width;\n }\n\n get height(): number {\n return this.options.height;\n }\n\n async drawQR(qr: QRCodeMinimal): 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.image, this.options.imageOptions.crossOrigin);\n const { imageOptions, errorCorrectionPercent } = this.options;\n\n if (imageOptions.mode == ImageMode.background) {\n const margin = (this.options.backgroundOptions && this.options.backgroundOptions.margin) || 0;\n const maxWidth = (this.options.width - 2 * margin * dotSize) * imageOptions.imageSize;\n const maxHeight = (this.options.height - 2 * margin * dotSize) * imageOptions.imageSize;\n let { width, height } = size;\n\n height = (height / width) * maxWidth;\n width = maxWidth;\n\n if (height > maxHeight) {\n width = (width / height) * maxHeight;\n height = maxHeight;\n }\n\n drawImageSize = {\n hideXDots: 0,\n hideYDots: 0,\n width,\n height\n };\n } else {\n const coverLevel = imageOptions.imageSize * errorCorrectionPercent;\n const alignment = QRUtil.getPatternPosition(typeNumber);\n const maxHiddenDots = Math.floor(\n coverLevel * (count * count - 3 * 8 * 8 - 2 * (count - 16) - alignment.length ** 2 * 25)\n );\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\n this.drawBackground();\n\n if (\n this.options.imageOptions.mode != ImageMode.overlay &&\n this.options.image &&\n drawImageSize.width > 0 &&\n drawImageSize.height > 0\n ) {\n await this.drawImage({ width: drawImageSize.width, height: drawImageSize.height, count, dotSize });\n }\n\n this.drawDots((i: number, j: number): boolean => {\n if (this.options.imageOptions.mode == ImageMode.center) {\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 ((i < 8 && j < 8) || (i >= count - 8 && j < 8) || (j >= count - 8 && i < 8)) return false;\n\n return true;\n });\n\n if (\n this.options.imageOptions.mode == ImageMode.overlay &&\n this.options.image &&\n drawImageSize.width > 0 &&\n drawImageSize.height > 0\n ) {\n await this.drawImage({ width: drawImageSize.width, height: drawImageSize.height, count, dotSize });\n }\n\n this.drawCorners();\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.backgroundMask, this.backgroundMaskGroup] = this.createMask(\"mask-background-color\");\n this.defs.appendChild(this.backgroundMask);\n\n element.setAttribute(\"x\", numToAttr((options.width - size) / 2));\n element.setAttribute(\"y\", numToAttr((options.height - size) / 2));\n element.setAttribute(\"width\", numToAttr(size));\n element.setAttribute(\"height\", numToAttr(size));\n element.setAttribute(\"rx\", numToAttr((size / 2) * (options.backgroundOptions.round || 0)));\n\n this.backgroundMaskGroup.appendChild(element);\n }\n }\n\n drawDots(filter?: (i: number, j: number) => boolean): 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 dotSize = this.options.dotsOptions.size;\n let minSize = Math.min(options.width, options.height);\n if (options.imageOptions.mode == ImageMode.background) minSize -= 2 * dotSize * (options.imageOptions.margin || 0);\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\n let dot = new QRDot(options.dotsOptions.type, this.document);\n const overlayDot = new QRDot(DotType.tinySquare, this.document);\n const markerDot = new QRDot(DotType.square, this.document);\n\n [this.dotsMask, this.dotsMaskGroup] = this.createMask(\"mask-dot-color\");\n this.defs.appendChild(this.dotsMask);\n\n if (options.imageOptions.mode == ImageMode.background) {\n [this.lightDotsMask, this.lightDotsMaskGroup] = this.createMask(\"mask-light-dot-color\");\n this.defs.appendChild(this.lightDotsMask);\n }\n\n let margin = 0;\n let additionalDots = 0;\n let fakeCount = count;\n\n if (options.shape === ShapeType.circle) {\n margin = (this.options.backgroundOptions && this.options.backgroundOptions.margin) || 0;\n additionalDots = Math.floor((minSize / dotSize - count - 2 * margin) / 2);\n fakeCount = count + additionalDots * 2;\n } else if (options.imageOptions.mode == ImageMode.background) {\n additionalDots = 1;\n fakeCount = count + additionalDots * 2;\n }\n\n const xFakeBeginning = xBeginning - additionalDots * dotSize;\n const yFakeBeginning = yBeginning - additionalDots * dotSize;\n const colorX = xFakeBeginning;\n const colorY = yFakeBeginning;\n const colorCount = count + additionalDots * 2;\n const fakeMatrix: (boolean | undefined)[][] = new Array(fakeCount);\n const center = Math.floor(fakeCount / 2);\n\n for (let i = 0; i < fakeCount; i++) {\n fakeMatrix[i] = new Array(fakeCount);\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 const ii = i - additionalDots;\n const jj = j - additionalDots;\n if (filter && !filter(ii, jj)) fakeMatrix[i][j] = undefined;\n else fakeMatrix[i][j] = !!this.qr.isDark(jj, ii);\n continue;\n }\n\n if (\n options.shape === ShapeType.circle &&\n Math.sqrt((i - center) * (i - center) + (j - center) * (j - center)) > center\n ) {\n fakeMatrix[i][j] = undefined;\n continue;\n }\n\n if (\n i == additionalDots - 1 ||\n i == fakeCount - additionalDots ||\n j == additionalDots - 1 ||\n j == fakeCount - additionalDots\n ) {\n if (\n (j == additionalDots - 1 && (i < additionalDots + 8 || i > fakeCount - additionalDots - 9)) ||\n (j == fakeCount - additionalDots && i < additionalDots + 8) ||\n (i == additionalDots - 1 && (j < additionalDots + 8 || j > fakeCount - additionalDots - 9)) ||\n (i == fakeCount - additionalDots && j < additionalDots + 8)\n )\n fakeMatrix[i][j] = undefined;\n else fakeMatrix[i][j] = false;\n continue;\n }\n\n // if (this.lightDotsMask) continue;\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 }\n }\n\n const typeNr = (count - 17) / 4;\n const alignment = QRUtil.getPatternPosition(typeNr);\n\n for (let i = 0; i < fakeCount; i++) {\n const iAlign = alignment.find((v) => i - additionalDots > v - 3 && i - additionalDots < v + 3);\n for (let j = 0; j < fakeCount; j++) {\n const jAlign = alignment.find((v) => j - additionalDots > v - 3 && j - additionalDots < v + 3);\n if (fakeMatrix[i][j] == undefined) continue;\n\n if (this.lightDotsMask) {\n dot =\n iAlign &&\n jAlign &&\n ((iAlign != alignment[0] && jAlign != alignment[0]) ||\n (jAlign != alignment[0] && jAlign != alignment[alignment.length - 1]) ||\n (iAlign != alignment[0] && iAlign != alignment[alignment.length - 1]))\n ? markerDot\n : overlayDot;\n }\n\n if (!fakeMatrix[i][j]) {\n if (this.lightDotsMask) {\n dot.draw({\n x: xFakeBeginning + i * dotSize,\n y: yFakeBeginning + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean => {\n return fakeMatrix[i + xOffset]?.[j + yOffset] === false;\n }\n });\n\n if (dot.element && this.lightDotsMaskGroup) {\n this.lightDotsMaskGroup.appendChild(dot.element);\n }\n }\n continue;\n }\n\n dot.draw({\n x: xFakeBeginning + i * dotSize,\n y: yFakeBeginning + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean => {\n return fakeMatrix[i + xOffset]?.[j + yOffset] === true;\n }\n });\n if (dot.element && this.dotsMaskGroup) {\n this.dotsMaskGroup.appendChild(dot.element);\n }\n }\n }\n\n if (this.lightDotsMask) {\n this.createColor({\n options: options.imageOptions.fill.gradient,\n color: options.imageOptions.fill.color,\n additionalRotation: 0,\n x: colorX,\n y: colorY,\n height: colorCount * dotSize,\n width: colorCount * dotSize,\n name: \"light-dot-color\"\n });\n }\n\n this.createColor({\n options: options.dotsOptions?.gradient,\n color: options.dotsOptions.color,\n additionalRotation: 0,\n x: colorX,\n y: colorY,\n height: colorCount * dotSize,\n width: colorCount * dotSize,\n name: \"dot-color\"\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 cornersSquareMask = this.dotsMask;\n let cornersSquareMaskGroup = this.dotsMaskGroup;\n let cornersDotMask = this.dotsMask;\n let cornersDotMaskGroup = this.dotsMaskGroup;\n\n if (options.cornersSquareOptions?.gradient || options.cornersSquareOptions?.color) {\n [cornersSquareMask, cornersSquareMaskGroup] = this.createMask(`mask-corners-square-color-${column}-${row}`);\n this.defs.appendChild(cornersSquareMask);\n cornersDotMask = cornersSquareMask;\n cornersDotMaskGroup = cornersSquareMaskGroup;\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(options.cornersSquareOptions.type, this.document);\n\n cornersSquare.draw({\n x,\n y,\n size: cornersSquareSize,\n rotation\n });\n\n if (cornersSquare.element && cornersSquareMaskGroup) {\n cornersSquareMaskGroup.appendChild(cornersSquare.element);\n }\n\n if (cornersSquare.fill && this.lightDotsMaskGroup) {\n this.lightDotsMaskGroup.appendChild(cornersSquare.fill);\n }\n } else {\n const dot = new QRDot(options.dotsOptions.type, 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 if (this.lightDotsMask && !dotMask[i]?.[j]) {\n dot.draw({\n x: x + i * dotSize,\n y: y + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean =>\n !squareMask[i + xOffset]?.[j + yOffset] && !dotMask[i + xOffset]?.[j + yOffset]\n });\n\n if (dot.element && this.lightDotsMaskGroup) {\n this.lightDotsMaskGroup.appendChild(dot.element);\n }\n }\n continue;\n }\n\n dot.draw({\n x: x + i * dotSize,\n y: y + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean => !!squareMask[i + xOffset]?.[j + yOffset]\n });\n\n if (dot.element && cornersSquareMaskGroup) {\n cornersSquareMaskGroup.appendChild(dot.element);\n }\n }\n }\n\n if (this.lightDotsMask)\n for (let i = -1; i < 8; i++) {\n for (let j = -1; j < 8; j++) {\n if (i == -1 || i == 7 || j == -1 || j == 7) {\n dot.draw({\n x: x + i * dotSize,\n y: y + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean => {\n const ii = i + xOffset;\n const jj = j + yOffset;\n return ii >= -1 && ii <= 7 && jj >= -1 && jj <= 7 && (ii == -1 || ii == 7 || jj == -1 || jj == 7);\n }\n });\n\n if (dot.element && this.lightDotsMaskGroup) {\n this.lightDotsMaskGroup.appendChild(dot.element);\n }\n }\n }\n }\n }\n\n if (options.cornersDotOptions?.gradient || options.cornersDotOptions?.color) {\n [cornersDotMask, cornersDotMaskGroup] = this.createMask(`mask-corners-dot-color-${column}-${row}`);\n this.defs.appendChild(cornersDotMask);\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(options.cornersDotOptions.type, this.document);\n\n cornersDot.draw({\n x: x + dotSize * 2,\n y: y + dotSize * 2,\n size: cornersDotSize,\n rotation\n });\n\n if (cornersDot.element && cornersDotMaskGroup) {\n cornersDotMaskGroup.appendChild(cornersDot.element);\n }\n } else {\n const dot = new QRDot(options.dotsOptions.type, 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: x + i * dotSize,\n y: y + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean => !!dotMask[i + xOffset]?.[j + yOffset]\n });\n\n if (dot.element && cornersDotMaskGroup) {\n cornersDotMaskGroup.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 let margin = options.imageOptions.margin * dotSize;\n if (options.imageOptions.mode == ImageMode.background) margin = 0;\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.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"xlink: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\", numToAttr(dx));\n image.setAttribute(\"y\", numToAttr(dy));\n image.setAttribute(\"width\", `${numToAttr(dw)}px`);\n image.setAttribute(\"height\", `${numToAttr(dh)}px`);\n\n this._element.appendChild(image);\n }\n\n private 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\", numToAttr(x));\n rect.setAttribute(\"y\", numToAttr(y));\n rect.setAttribute(\"height\", numToAttr(height));\n rect.setAttribute(\"width\", numToAttr(width));\n rect.setAttribute(\"style\", `mask:url(#mask-${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\", numToAttr(x + width / 2));\n gradient.setAttribute(\"fy\", numToAttr(y + height / 2));\n gradient.setAttribute(\"cx\", numToAttr(x + width / 2));\n gradient.setAttribute(\"cy\", numToAttr(y + height / 2));\n gradient.setAttribute(\"r\", numToAttr(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\", numToAttr(x0));\n gradient.setAttribute(\"y1\", numToAttr(y0));\n gradient.setAttribute(\"x2\", numToAttr(x1));\n gradient.setAttribute(\"y2\", numToAttr(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\", `${numToAttr(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 private createMask(id: string) {\n const options = this.options;\n\n const mask = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"mask\");\n mask.setAttribute(\"id\", id);\n mask.setAttribute(\"maskUnits\", \"userSpaceOnUse\");\n mask.setAttribute(\"x\", \"0\");\n mask.setAttribute(\"y\", \"0\");\n mask.setAttribute(\"width\", numToAttr(options.width));\n mask.setAttribute(\"height\", numToAttr(options.height));\n\n const group = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n group.setAttribute(\"fill\", \"#fff\");\n mask.appendChild(group);\n\n return [mask, group];\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 { QRCodeMinimal } from \"@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js\";\nimport { stringToBytes_UTF8 } from \"@liquid-js/qrcode-generator/lib/text/stringToBytes_UTF8.js\";\nimport { RecursivePartial } from \"../types/helper.js\";\nimport { mergeDeep } from \"../utils/merge.js\";\nimport { ImageMode, Options, ShapeType, defaultOptions, sanitizeOptions } from \"../utils/options.js\";\nimport { ErrorCorrectionPercents, getMode } from \"../utils/qrcode.js\";\nimport { QRSVG } from \"./qr-svg.js\";\n\nObject.assign(QRCodeMinimal.stringToBytesFuncs, stringToBytes_UTF8);\n\nexport type ExtensionFunction = (svg: SVGElement, options: RecursivePartial<Options>) => void;\n\nexport class QRCodeStyling {\n private options: Options;\n private container?: HTMLElement;\n private qr?: QRCodeMinimal;\n private extension?: ExtensionFunction;\n private svgDrawingPromise?: Promise<void>;\n private qrSVG?: QRSVG;\n\n get size() {\n if (this.qrSVG)\n return {\n width: this.qrSVG.width,\n height: this.qrSVG.height\n };\n return undefined;\n }\n\n constructor(options?: RecursivePartial<Options>) {\n this.options = options ? sanitizeOptions(mergeDeep(defaultOptions, options) as Options) : defaultOptions;\n this.update();\n }\n\n update(\n /** The same options as for initialization */\n options?: RecursivePartial<Options>\n ): void {\n if (this.container) this.container.innerHTML = \"\";\n\n this.options = options ? sanitizeOptions(mergeDeep(this.options, options) as Options) : this.options;\n\n if (!this.options.data) {\n return;\n }\n\n if (this.options.stringToBytesFuncs) {\n Object.assign(QRCodeMinimal.stringToBytesFuncs, this.options.stringToBytesFuncs);\n delete this.options.stringToBytesFuncs;\n }\n\n this.qr = new QRCodeMinimal(this.options.qrOptions.typeNumber, this.options.qrOptions.errorCorrectionLevel);\n const mode = this.options.qrOptions.mode || getMode(this.options.data);\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 (this.qrSVG?.element) {\n container.appendChild(this.qrSVG.element);\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 if (!this.qrSVG?.element || !this.svgDrawingPromise) {\n this.setupSvg();\n }\n await this.svgDrawingPromise;\n\n if (!this.qrSVG?.element) {\n return;\n }\n\n const serializer = new XMLSerializer();\n let source = serializer.serializeToString(this.qrSVG.element);\n\n source = '<?xml version=\"1.0\" standalone=\"no\"?>\\r\\n' + source;\n return source;\n }\n\n private setupSvg(): void {\n if (!this.qr) {\n return;\n }\n let moduleCount = this.qr.getModuleCount();\n if (this.options.imageOptions.mode == ImageMode.background && this.options.shape != ShapeType.circle)\n moduleCount += 2;\n let count = Math.ceil((this.options.shape == ShapeType.circle ? Math.sqrt(2) : 1) * moduleCount);\n if (count % 2 == 0) count -= 1;\n let margin = (this.options.backgroundOptions && this.options.backgroundOptions.margin) || 0;\n if (this.options.imageOptions.mode == ImageMode.background) margin += this.options.imageOptions.margin || 0;\n const size = Math.ceil(this.options.dotsOptions.size * (count + 2 * margin));\n this.qrSVG = new QRSVG({\n ...this.options,\n width: size,\n height: size,\n errorCorrectionPercent: ErrorCorrectionPercents[this.options.qrOptions.errorCorrectionLevel]\n });\n\n this.svgDrawingPromise = this.qrSVG.drawQR(this.qr).then(() => {\n if (!this.qrSVG?.element) return;\n this.extension?.(this.qrSVG.element, this.options);\n });\n }\n}\n","import { QRCodeStyling } from \"../core/qr-code-styling.js\";\nimport { RecursivePartial } from \"../types/helper.js\";\nimport { CanvasOptions, defaultCanvasOptions, sanitizeCanvasOptions } from \"../utils/canvas-options.js\";\nimport { mergeDeep } from \"../utils/merge.js\";\n\nexport enum FileExtension {\n svg = \"svg\",\n png = \"png\",\n jpeg = \"jpeg\",\n webp = \"webp\"\n}\n\nexport function drawToCanvas(\n qrCode: QRCodeStyling,\n options?: RecursivePartial<CanvasOptions>\n): { canvas: HTMLCanvasElement; canvasDrawingPromise: Promise<void> | undefined } | undefined {\n const { width, height, margin } = options\n ? sanitizeCanvasOptions(mergeDeep(defaultCanvasOptions, options) as CanvasOptions)\n : defaultCanvasOptions;\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = width;\n canvas.height = height;\n\n const size = Math.min(width, height) - 2 * margin;\n\n const canvasDrawingPromise = qrCode.serialize().then((xml) => {\n if (!xml) return;\n const svg64 = btoa(xml);\n const image64 = \"data:image/svg+xml;base64,\" + svg64;\n const image = new Image();\n\n return new Promise<void>((resolve, reject) => {\n image.onload = (): void => {\n // Ensure pixel-perfect rendering of SVG to avoid artefact, then downscale to requested size\n const aaFactor = Math.ceil((2 * size) / Math.min(image.width, image.height));\n let aaCanvas: HTMLCanvasElement | OffscreenCanvas;\n try {\n aaCanvas = new OffscreenCanvas(image.width * aaFactor, image.height * aaFactor);\n } catch (_) {\n // Fallback to regular canvas element\n aaCanvas = document.createElement(\"canvas\");\n aaCanvas.width = image.width * aaFactor;\n aaCanvas.height = image.height * aaFactor;\n }\n aaCanvas.getContext(\"2d\")?.drawImage(image, 0, 0, aaCanvas.width, aaCanvas.height);\n\n canvas?.getContext(\"2d\")?.drawImage(aaCanvas, (width - size) / 2, (height - size) / 2, size, size);\n resolve();\n };\n image.onerror = image.onabort = reject;\n\n image.src = image64;\n });\n });\n\n return { canvas, canvasDrawingPromise };\n}\n\nexport async function download(\n qrCode: QRCodeStyling,\n downloadOptions: `${FileExtension}` | { name?: string; extension: `${FileExtension}` },\n options?: RecursivePartial<CanvasOptions>\n): Promise<void> {\n let extension: `${FileExtension}` = FileExtension.png;\n let name = \"qr\";\n\n //TODO remove deprecated code in the v2\n if (typeof downloadOptions === \"string\") {\n extension = downloadOptions;\n console.warn(\n \"Extension is deprecated as argument for 'download' method, please pass object { name: '...', extension: '...' } as argument\"\n );\n } else if (typeof downloadOptions === \"object\" && downloadOptions !== null) {\n if (downloadOptions.name) {\n name = downloadOptions.name;\n }\n if (downloadOptions.extension) {\n extension = downloadOptions.extension;\n }\n }\n\n if (extension.toLowerCase() === \"svg\") {\n const source = await qrCode.serialize();\n if (!source) return;\n const url = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(source);\n downloadURI(url, `${name}.svg`);\n } else {\n const res = drawToCanvas(qrCode, options);\n if (!res) return;\n const { canvas, canvasDrawingPromise } = res;\n await canvasDrawingPromise;\n const url = canvas.toDataURL(`image/${extension}`);\n downloadURI(url, `${name}.${extension}`);\n }\n}\n\nexport function downloadURI(uri: string, name: string): void {\n const link = document.createElement(\"a\");\n link.download = name;\n link.href = uri;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n}\n","import { DOMImplementation, DOMParser, XMLSerializer } from \"@xmldom/xmldom\";\nimport { fileTypeFromBuffer } from \"file-type\";\nimport sharp from \"sharp\";\nimport { QRCodeStyling as _QRCodeStyling } from \"./core/qr-code-styling.js\";\nimport type * as _browserUtils from \"./tools/browser-utils.js\";\nimport { RecursivePartial } from \"./types/helper.js\";\nimport { Options } from \"./utils/options.js\";\nexport { ErrorCorrectionLevel, Mode, TypeNumber } from \"@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js\";\nexport { type ExtensionFunction } from \"./core/qr-code-styling.js\";\nexport { FileExtension } from \"./tools/browser-utils.js\";\nexport { type RecursivePartial } from \"./types/helper.js\";\nexport { type CanvasOptions } from \"./utils/canvas-options.js\";\nexport { GradientType, type Gradient } from \"./utils/gradient.js\";\nexport { CornerDotType, CornerSquareType, DotType, ImageMode, ShapeType, type Options } from \"./utils/options.js\";\nexport { ErrorCorrectionPercents } from \"./utils/qrcode.js\";\n\nexport const browserUtils: typeof _browserUtils | undefined = undefined;\n\nexport class QRCodeStyling extends _QRCodeStyling {\n constructor(options: RecursivePartial<Options>) {\n const dom = new DOMImplementation().createDocument(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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n global.XMLSerializer = XMLSerializer as any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n global.DOMParser = DOMParser as any;\n\n super({\n ...options,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n document: options.document || (dom as any),\n imageTools: options.imageTools || {\n toDataURL: (url: string | Buffer | Blob): Promise<string> => {\n if (typeof url == \"string\" && url.startsWith(\"data:\")) return Promise.resolve(url);\n return loadImage(url).then(\n ({ contentType, data }) =>\n `data:${contentType?.replace(\"application/xml\", \"image/svg+xml\")};base64,${data.toString(\"base64\")}`\n );\n },\n getSize: async (src: string | Blob | Buffer): Promise<{ width: number; height: number }> => {\n const { data } = Buffer.isBuffer(options.image) ? { data: options.image } : await loadImage(src);\n const meta = await sharp(data).metadata();\n return {\n width: meta.width!,\n\n height: meta.height!\n };\n }\n }\n });\n }\n}\n"],"names":["isObject","obj","isArray","target","sources","length","shift","undefined","source","keys","forEach","key","targetValue","Array","sourceValue","mergeDeep","Object","assign","GradientType","DotType","CornerDotType","CornerSquareType","ShapeType","ImageMode","sanitizeGradient","gradient","colorStops","newGradient","rotation","Number","map","colorStop","offset","radial","linear","dot","randomDot","rounded","extraRounded","verticalLine","horizontalLine","classy","classyRounded","square","smallSquare","tinySquare","diamond","heart","outpoint","inpoint","circle","center","overlay","background","defaultOptions","document","shape","width","height","data","qrOptions","typeNumber","TypeNumber","mode","errorCorrectionLevel","ErrorCorrectionLevel","Q","imageOptions","imageSize","crossOrigin","margin","fill","color","dotsOptions","type","size","sanitizeOptions","options","newOptions","Math","min","round","max","cornersSquareOptions","cornersDotOptions","backgroundOptions","ErrorCorrectionPercents","L","M","H","rx","numToAttr","value","toFixed","replace","strings","values","reduce","t","v","i","p","trim","element","this","_element","constructor","draw","args","drawFunction","drawSquare","drawHeart","drawRounded","drawClassy","drawInpoint","drawOutpoint","drawDot","call","rotateFigure","x","y","setAttribute","PI","cx","cy","basicDot","createElementNS","basicSquare","basicHeart","move","path","toUpperCase","join","basicRounded","basicClassy","dotSize","svgPath","basicInpoint","_fill","drawExtraRounded","basicExtraRounded","drawRandomDot","drawClassyRounded","drawVerticalLine","drawHorizontalLine","drawDiamond","drawSmallSquare","drawTinySquare","basicSideRounded","basicCornerRounded","basicCornerExtraRounded","basicCornersRounded","random","getNeighbor","leftNeighbor","rightNeighbor","topNeighbor","neighborsCount","bottomNeighbor","leftNeighbor_rotation","browserImageTools","toDataURL","url","startsWith","Promise","resolve","reject","xhr","XMLHttpRequest","onload","xhr.onload","reader","FileReader","onloadend","reader.onloadend","result","readAsDataURL","response","onerror","onabort","ontimeout","open","responseType","send","getSize","src","image","Image","then","catch","squareMask","dotMask","defs","appendChild","imageTools","drawQR","qr","getModuleCount","parseInt","count","drawImageSize","hideXDots","hideYDots","errorCorrectionPercent","maxWidth","maxHeight","coverLevel_margin","alignment","QRUtil","getPatternPosition","calculateImageSize","originalHeight","originalWidth","maxHiddenDots","maxHiddenAxisDots","dimMax","dimMin","lower","upper","dotsMax","ceil","dotsMin","abs","hideMax","hideMin","maxW","maxH","floor","coverLevel","drawBackground","drawImage","drawDots","j","drawCorners","createColor","additionalRotation","name","backgroundMask","backgroundMaskGroup","createMask","filter","minSize","QRDot","overlayDot","markerDot","dotsMask","dotsMaskGroup","lightDotsMask","lightDotsMaskGroup","additionalDots","fakeCount","xBeginning","fakeMatrix","ii","jj","isDark","sqrt","iAlign","find","jAlign","center_jAlign","xFakeBeginning","yFakeBeginning","xOffset","yOffset","colorCount","cornersSquareSize","cornersDotSize","column","row","yBeginning","cornersSquareMask","cornersSquareMaskGroup","cornersDotMask","cornersDotMaskGroup","cornersDotMask_cornersSquare_dot","QRCornerSquare","cornersSquare","column_cornersDot","QRCornerDot","cornersDot","dx","dy","imageUrl","setAttributeNS","substring","indexOf","encoding","container_data","atob","Buffer","from","toString","container","parseFromString","DOMParser","rootEl","getElementsByTagName","dw","dh","rect","x0","y0","x1","y1","positiveRotation","tan","stop","id","mask","group","QRCodeMinimal","stringToBytesFuncs","stringToBytes_UTF8","qrSVG","update","innerHTML","getMode","test","Mode","numeric","alphanumeric","unicode","byte","addData","make","setupSvg","append","applyExtension","extension","deleteExtension","serialize","svgDrawingPromise","serializeToString","XMLSerializer","moduleCount","QRSVG","FileExtension","svg","png","jpeg","webp","QRCodeStyling","QRCodeStyling$1","async","loadImage","pr","imageCache","get","fetch","res","arrayBuffer","buff","contentType","headers","fileTypeFromBuffer","r","mime","set","dom","createDocument","DOMImplementation","Map","super","isBuffer","meta","sharp","metadata"],"mappings":"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"}