@liquid-js/qr-code-styling 4.0.1 → 4.0.3
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.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 // 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?: { name?: string; extension: `${FileExtension}` },\n options?: RecursivePartial<CanvasOptions>\n): Promise<void> {\n let extension: `${FileExtension}` = FileExtension.png;\n let name = \"qr\";\n\n if (downloadOptions) {\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","$GradientType$jscomp$inline_0$$","sanitizeGradient","gradient","colorStops","newGradient","rotation","Number","map","colorStop","offset","radial","linear","DotType","$DotType$jscomp$inline_2$$","dot","randomDot","rounded","extraRounded","verticalLine","horizontalLine","classy","classyRounded","square","smallSquare","tinySquare","diamond","CornerDotType","$CornerDotType$jscomp$inline_4$$","heart","outpoint","inpoint","CornerSquareType","$CornerSquareType$jscomp$inline_6$$","ShapeType","$ShapeType$jscomp$inline_8$$","circle","ImageMode","$ImageMode$jscomp$inline_10$$","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","$i$jscomp$3$$","$p$$","trim","element","this","_element","constructor","draw","args","drawFunction","$drawFunction$$","drawSquare","drawHeart","drawRounded","drawClassy","drawInpoint","drawOutpoint","drawDot","call","rotateFigure","x","y","setAttribute","PI","cx","cy","basicDot","createElementNS","basicSquare","basicHeart","move","path","$v$jscomp$1$$","toUpperCase","$move$$","join","basicRounded","basicClassy","dotSize","svgPath","basicInpoint","_fill","$drawFunction$jscomp$1$$","drawExtraRounded","basicExtraRounded","$dotSize$jscomp$4$$","$drawFunction$jscomp$2$$","drawRandomDot","drawClassyRounded","drawVerticalLine","drawHorizontalLine","drawDiamond","drawSmallSquare","drawTinySquare","basicSideRounded","basicCornerRounded","basicCornerExtraRounded","basicCornersRounded","random","getNeighbor","leftNeighbor","rightNeighbor","topNeighbor","neighborsCount","bottomNeighbor","$leftNeighbor_rotation$jscomp$20$$","browserImageTools","toDataURL","url","$url$jscomp$22$$","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","$src$jscomp$4$$","then","catch","squareMask","dotMask","defs","appendChild","imageTools","drawQR","qr","getModuleCount","parseInt","count","drawImageSize","hideXDots","hideYDots","errorCorrectionPercent","maxWidth","maxHeight","$coverLevel_margin$jscomp$1_maxHeight$$","alignment","QRUtil","getPatternPosition","calculateImageSize","originalHeight","originalWidth","maxHiddenDots","maxHiddenAxisDots","dimMax","dimMin","lower","upper","dotsMax","ceil","dotsMin","$dotsMax$$","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","$j$jscomp$1$$","iAlign","find","jAlign","$center_jAlign$$","xFakeBeginning","yFakeBeginning","xOffset","yOffset","colorCount","cornersSquareSize","cornersDotSize","column","row","yBeginning","cornersSquareMask","cornersSquareMaskGroup","cornersDotMask","cornersDotMaskGroup","$cornersDotMask_cornersSquare_dot$jscomp$1$$","QRCornerSquare","cornersSquare","$column_cornersDot$$","QRCornerDot","cornersDot","$dotSize$jscomp$11_i$jscomp$11$$","dx","dy","imageUrl","setAttributeNS","substring","indexOf","encoding","$container_data$jscomp$80_imageUrl_margin$jscomp$3_rootEl$$","atob","Buffer","from","toString","container","parseFromString","DOMParser","rootEl","getElementsByTagName","dw","dh","rect","x0","y0","x1","y1","positiveRotation","tan","$gradient$jscomp$1$$","stop","$color$jscomp$3_rotation$jscomp$28$$","id","mask","group","QRCodeMinimal","stringToBytesFuncs","stringToBytes_UTF8","qrSVG","update","innerHTML","getMode","test","Mode","numeric","alphanumeric","unicode","byte","addData","make","setupSvg","append","$container$jscomp$1$$","applyExtension","extension","deleteExtension","serialize","svgDrawingPromise","serializeToString","XMLSerializer","moduleCount","QRSVG","FileExtension","$FileExtension$jscomp$inline_12$$","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","loadImage","isBuffer","meta","sharp","metadata"],"mappings":"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ACA,KACA,IACA,UACA,KACA,UACA,UACA,KACA,UACA,UACA,UACA,UACA,QACA,UACA,KACA,UACA,UACA,UACA,UACA,UACA,UAjDWA,KAmDX,UACA,UACA,UACA,UACA,KACA,GACA,UACA,GACA,UACA,KACA,IACC,UACD,WACC,UACD,SACC,UACD,KACA,WACC,QACD,WACC,QACD,KACA,UACA,GACA,UACA,UACA,QACA,UACA,KACA,UACA,UACA,IACA,UACA,KACA,WACC,UACD,WACC,UACD,WACC,OACD,KACA,WACC,UACD,WACC,UACD,SACC,UACD,KACA,UACA,GACA,UACA,UACA,UACA,QACA,KACA,GACA,UACA,GACA,UACA,MAOGjH,KAAK+E,iBACY,mBAAhBmC,iBACElC,gBAAI;QACJgC,UAAOjC,cAAEoC,iBAAiBpC,eACnBA,kBAETC;QACID,iBAAIxB,mBACR6D,YACErC,iBAAc,KAATC,gBAAI,IAASsB,iBAAIC;QAEjBhC,aAAUQ,kBAElBsC,KAAK;AAtIgC;IA0IxB,YAAAC,CAAC5B;QACnB,KAAMnC,MAAAA,mBAAM+C,GAAAA,gBAAGC,GAAAA,kBAAKb;QAEfW,KAAAA,aAAa;eACbX;YACHD,MAAM;gBACJH,KAAKC,WAAWD,KAAKnD,SAAS0E,gBAAgB,8BAA8B;gBACvEtB,KAAAA,SAASiB,aAAa,KAAKjC,aAAU+B,kBACrCf,KAAAA,SAASiB,aAAa,KAAKjC,aAAUgC;gBACrChB,KAAAA,SAASiB,aAAa,SAASjC,aAAUhB,qBACzCgC,KAAAA,SAASiB,aAAa,UAAUjC,aAAUhB;gBAC/C+B,KAAKC,SAASiB,aAAa,MAAMjC,aAAUhB,oBAAO,KAClD+B,KAAKC,SAASiB,aAAa,MAAMjC,aAAUhB,oBAAO;AAAlD;;AAZwC;IAiB3B,WAAAgE,CAAC7B;QAClB,KAAMnC,MAAAA,mBAAM+C,GAAAA,gBAAGC,GAAAA,kBAAKb,kBACd8B,aAAUjE;QACX8C,KAAAA,aAAa;eACbX;YACHD,MAAM;gBACJH,KAAKC,WAAWD,KAAKnD,SAAS0E,gBAAgB,8BAA8B;gBACvEtB,KAAAA,S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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/utils/color.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 - dotSize} ${y + 2.5 * dotSize}\n v ${2 * dotSize}\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 0, ${dotSize * 3.5} ${dotSize * 3.5}\n h ${2 * dotSize}\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 0, ${dotSize * 3.5} ${-dotSize * 3.5}\n v ${-2 * dotSize}\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 0, ${-dotSize * 3.5} ${-dotSize * 3.5}\n h ${-2 * dotSize}\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 0, ${-dotSize * 3.5} ${dotSize * 3.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","export function parseColor(cstr: string) {\n let m: RegExpExecArray | null,\n parts: string[] | number[] = [],\n alpha = 1;\n\n cstr = cstr.toLowerCase();\n\n if (cstr[0] === \"#\") {\n const base = cstr.slice(1);\n const size = base.length;\n const isShort = size <= 4;\n\n if (isShort) {\n parts = [parseInt(base[0] + base[0], 16), parseInt(base[1] + base[1], 16), parseInt(base[2] + base[2], 16)];\n if (size === 4) {\n alpha = parseInt(base[3] + base[3], 16) / 255;\n }\n } else {\n parts = [parseInt(base[0] + base[1], 16), parseInt(base[2] + base[3], 16), parseInt(base[4] + base[5], 16)];\n if (size === 8) {\n alpha = parseInt(base[6] + base[7], 16) / 255;\n }\n }\n\n if (!parts[0]) parts[0] = 0;\n if (!parts[1]) parts[1] = 0;\n if (!parts[2]) parts[2] = 0;\n } else if ((m = /^((?:rgba?))\\s*\\(([^)]*)\\)/.exec(cstr))) {\n const dims = 3;\n parts = m[2].trim().split(/\\s*[,/]\\s*|\\s+/);\n\n parts = parts.map((x, i) => {\n if (x[x.length - 1] === \"%\") {\n const v = parseFloat(x) / 100;\n if (i === 3) return v;\n return v * 255;\n }\n\n if (x === \"none\") return 0;\n return parseFloat(x);\n });\n\n alpha = parts.length > dims ? parts.pop()! : 1;\n } else {\n return {\n value: cstr,\n alpha\n };\n }\n\n const value = \"#\" + parts.map((v) => Math.max(0, Math.min(255, v)).toString(16).padStart(2, \"0\")).join(\"\");\n return {\n value,\n alpha: Math.max(0, Math.min(1, alpha))\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 { parseColor } from \"../utils/color.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 // 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) {\n image = rootEl[0];\n image.setAttribute(\"overflow\", \"visible\");\n }\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\n const parsed = parseColor(color);\n stop.setAttribute(\"stop-color\", parsed.value);\n if (parsed.alpha < 1) stop.setAttribute(\"stop-opacity\", parsed.alpha.toFixed(7));\n gradient.appendChild(stop);\n });\n\n rect.setAttribute(\"fill\", `url(#${name})`);\n this.defs.appendChild(gradient);\n } else if (color) {\n const parsed = parseColor(color);\n rect.setAttribute(\"fill\", parsed.value);\n if (parsed.alpha < 1) rect.setAttribute(\"opacity\", parsed.alpha.toFixed(7));\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?: { name?: string; extension: `${FileExtension}` },\n options?: RecursivePartial<CanvasOptions>\n): Promise<void> {\n let extension: `${FileExtension}` = FileExtension.png;\n let name = \"qr\";\n\n if (downloadOptions) {\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","$GradientType$jscomp$inline_0$$","sanitizeGradient","gradient","colorStops","newGradient","rotation","Number","map","colorStop","offset","radial","linear","DotType","$DotType$jscomp$inline_2$$","dot","randomDot","rounded","extraRounded","verticalLine","horizontalLine","classy","classyRounded","square","smallSquare","tinySquare","diamond","CornerDotType","$CornerDotType$jscomp$inline_4$$","heart","outpoint","inpoint","CornerSquareType","$CornerSquareType$jscomp$inline_6$$","ShapeType","$ShapeType$jscomp$inline_8$$","circle","ImageMode","$ImageMode$jscomp$inline_10$$","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","$i$jscomp$3$$","$p$$","trim","element","this","_element","constructor","draw","args","drawFunction","$drawFunction$$","drawSquare","drawHeart","drawRounded","drawClassy","drawInpoint","drawOutpoint","drawDot","call","rotateFigure","x","y","setAttribute","PI","cx","cy","basicDot","createElementNS","basicSquare","basicHeart","move","path","$v$jscomp$1$$","toUpperCase","$move$$","join","basicRounded","basicClassy","dotSize","svgPath","basicInpoint","_fill","$drawFunction$jscomp$1$$","drawExtraRounded","basicExtraRounded","$dotSize$jscomp$4$$","$drawFunction$jscomp$2$$","drawRandomDot","drawClassyRounded","drawVerticalLine","drawHorizontalLine","drawDiamond","drawSmallSquare","drawTinySquare","basicSideRounded","basicCornerRounded","basicCornerExtraRounded","basicCornersRounded","random","getNeighbor","leftNeighbor","rightNeighbor","topNeighbor","neighborsCount","bottomNeighbor","$leftNeighbor_rotation$jscomp$20$$","browserImageTools","toDataURL","url","$url$jscomp$22$$","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","$src$jscomp$4$$","then","catch","parseColor","cstr","parts","alpha","toLowerCase","base","slice","parseInt","$m_parts$$","m","exec","dims","split","parseFloat","pop","toString","padStart","squareMask","dotMask","defs","appendChild","imageTools","drawQR","qr","getModuleCount","count","drawImageSize","hideXDots","hideYDots","errorCorrectionPercent","maxWidth","maxHeight","$coverLevel_margin$jscomp$1_maxHeight$$","alignment","QRUtil","getPatternPosition","calculateImageSize","originalHeight","originalWidth","maxHiddenDots","maxHiddenAxisDots","dimMax","dimMin","lower","upper","dotsMax","ceil","dotsMin","$dotsMax$$","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","$j$jscomp$1$$","iAlign","find","jAlign","$center_jAlign$$","xFakeBeginning","yFakeBeginning","xOffset","yOffset","colorCount","cornersSquareSize","cornersDotSize","column","row","yBeginning","cornersSquareMask","cornersSquareMaskGroup","cornersDotMask","cornersDotMaskGroup","$cornersDotMask_cornersSquare_dot$jscomp$1$$","QRCornerSquare","cornersSquare","$column_cornersDot$$","QRCornerDot","cornersDot","$dotSize$jscomp$11_i$jscomp$12$$","dx","dy","imageUrl","setAttributeNS","substring","indexOf","encoding","$container_data$jscomp$80_imageUrl_margin$jscomp$3_rootEl$$","atob","Buffer","from","container","parseFromString","DOMParser","rootEl","getElementsByTagName","dw","dh","rect","x0","y0","x1","y1","positiveRotation","tan","$gradient$jscomp$1$$","stop","parsed","id","mask","group","QRCodeMinimal","stringToBytesFuncs","stringToBytes_UTF8","qrSVG","update","innerHTML","getMode","test","Mode","numeric","alphanumeric","unicode","byte","addData","make","setupSvg","append","$container$jscomp$1$$","applyExtension","extension","deleteExtension","serialize","svgDrawingPromise","serializeToString","XMLSerializer","moduleCount","QRSVG","FileExtension","$FileExtension$jscomp$inline_12$$","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","loadImage","isBuffer","meta","sharp","metadata"],"mappings":"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ACA,KACA,IACA,UACA,KACA,UACA,UACA,KACA,UACA,UACA,UACA,UACA,QACA,UACA,KACA,UACA,UACA,UACA,UACA,UACA,UAjDWA,KAmDX,UACA,UACA,UACA,UACA,KACA,GACA,UACA,GACA,UACA,KACA,IACC,UACD,WACC,UACD,SACC,UACD,KACA,WACC,QACD,WACC,QACD,KACA,UACA,GACA,UACA,UACA,QACA,UACA,KACA,UACA,UACA,IACA,UACA,KACA,WACC,UACD,WACC,UACD,WACC,OACD,KACA,WACC,UACD,WACC,UACD,SACC,UACD,KACA,UACA,GACA,UACA,UACA,UACA,QACA,KACA,GACA,UACA,GACA,UACA,MAOGjH,KAAK+E,iBACY,mBAAhBmC,iBACElC,gBAAI;QACJgC,UAAOjC,cAAEoC,iBAAiBpC,eACnBA,kBAETC;QACID,iBAAIxB,mBACR6D,YACErC,iBAAc,KAATC,gBAAI,IAASsB,iBAAIC;QAEjBhC,aAAUQ,kBAElBsC,KAAK;AAtIgC;IA0IxB,YAAAC,CAAC5B;QACnB,KAAMnC,MAAAA,mBAAM+C,GAAAA,gBAAGC,GAAAA,kBAAKb;QAEfW,KAAAA,aAAa;eACbX;YACHD,MAAM;gBACJH,KAAKC,WAAWD,KAAKnD,SAAS0E,gBAAgB,8BAA8B;gBACvEtB,KAAAA,SAASiB,aAAa,KAAKjC,aAAU+B,kBACrCf,KAAAA,SAASiB,aAAa,KAAKjC,aAAUgC;gBACrChB,KAAAA,SAASiB,aAAa,SAASjC,aAAUhB,qBACzCgC,KAAAA,SAASiB,aAAa,UAAUjC,aAAUhB;gBAC/C+B,KAAKC,SAASiB,aAAa,MAAMjC,aAAUhB,oBAAO,KAClD+B,KAAKC,SAASiB,aAAa,MAAMjC,aAAUhB,oBAAO;AAAlD;;AAZwC;IAiB3B,WAAAgE,CAAC7B;QAClB,KAAMnC,MAAAA,mBAAM+C,GAAAA,gBAAGC,GAAAA,kBAAKb,kBACd8B,aAAUjE;QACX8C,KAAAA,aAAa;eACbX;YACHD,MAAM;gBACJH,KAAKC,WAAWD,KAAKnD,SAAS0E,gBAAgB,8BAA8B;gBACvEtB,KAAAA,S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"}
|