@liquid-js/qr-code-styling 4.0.8 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"qr-code-styling.js","sources":["../node_modules/@liquid-js/qrcode-generator/lib/qrcode/BitBuffer.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/ErrorCorrectLevel.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRMath.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/Polynomial.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/Mode.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRData.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QR8BitByte.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRAlphaNum.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRKanji.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRNumber.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/MaskPattern.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRUtil.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/RSBlock.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js","../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","../node_modules/@liquid-js/qrcode-generator/lib/text/stringToBytes_UTF8.js","../src/utils/canvas-options.ts","../src/tools/browser-utils.ts","../src/index.ts"],"sourcesContent":["export class BitBuffer {\n buffer;\n length;\n constructor() {\n this.buffer = [];\n this.length = 0;\n }\n getBuffer() {\n return this.buffer;\n }\n getLengthInBits() {\n return this.length;\n }\n toString() {\n let buffer = '';\n for (let i = 0; i < this.getLengthInBits(); i += 1) {\n buffer += this.getBit(i) ? '1' : '0';\n }\n return buffer;\n }\n getBit(index) {\n return ((this.buffer[~~(index / 8)] >>> (7 - (index % 8))) & 1) == 1;\n }\n put(num, length) {\n for (let i = 0; i < length; i += 1) {\n this.putBit(((num >>> (length - i - 1)) & 1) == 1);\n }\n }\n putBit(bit) {\n if (this.length == this.buffer.length * 8) {\n this.buffer.push(0);\n }\n if (bit) {\n this.buffer[~~(this.length / 8)] |= 0x80 >>> this.length % 8;\n }\n this.length += 1;\n }\n}\n//# sourceMappingURL=BitBuffer.js.map","/**\n * ErrorCorrectLevel\n *\n * @author Kazuhiko Arase\n */\nexport var ErrorCorrectLevel;\n(function (ErrorCorrectLevel) {\n /**\n * 7%\n */\n ErrorCorrectLevel[ErrorCorrectLevel[\"L\"] = 1] = \"L\";\n /**\n * 15%\n */\n ErrorCorrectLevel[ErrorCorrectLevel[\"M\"] = 0] = \"M\";\n /**\n * 25%\n */\n ErrorCorrectLevel[ErrorCorrectLevel[\"Q\"] = 3] = \"Q\";\n /**\n * 30%\n */\n ErrorCorrectLevel[ErrorCorrectLevel[\"H\"] = 2] = \"H\";\n})(ErrorCorrectLevel || (ErrorCorrectLevel = {}));\n//# sourceMappingURL=ErrorCorrectLevel.js.map","/**\n * QRMath\n *\n * @author Kazuhiko Arase\n */\nexport class QRMath {\n constructor() {\n throw new Error('error');\n }\n static initialize = () => {\n QRMath.EXP_TABLE = [];\n QRMath.LOG_TABLE = [];\n for (let i = 0; i < 256; i += 1) {\n QRMath.EXP_TABLE.push(i < 8\n ? 1 << i\n : QRMath.EXP_TABLE[i - 4] ^ QRMath.EXP_TABLE[i - 5] ^ QRMath.EXP_TABLE[i - 6] ^ QRMath.EXP_TABLE[i - 8]);\n QRMath.LOG_TABLE.push(0);\n }\n for (let i = 0; i < 255; i += 1) {\n QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i;\n }\n };\n static EXP_TABLE;\n static LOG_TABLE;\n static glog(n) {\n if (!QRMath.LOG_TABLE)\n QRMath.initialize();\n if (n < 1) {\n throw new Error('log(' + n + ')');\n }\n return QRMath.LOG_TABLE[n];\n }\n static gexp(n) {\n if (!QRMath.EXP_TABLE)\n QRMath.initialize();\n while (n < 0) {\n n += 255;\n }\n while (n >= 256) {\n n -= 255;\n }\n return QRMath.EXP_TABLE[n];\n }\n}\n//# sourceMappingURL=QRMath.js.map","import { QRMath } from './QRMath.js';\n/**\n * Polynomial\n *\n * @author Kazuhiko Arase\n */\nexport class Polynomial {\n num;\n constructor(num, shift = 0) {\n let offset = 0;\n while (offset < num.length && num[offset] == 0) {\n offset += 1;\n }\n this.num = [];\n const len = num.length - offset;\n for (let i = 0; i < len; i += 1) {\n this.num.push(num[offset + i]);\n }\n for (let i = 0; i < shift; i += 1) {\n this.num.push(0);\n }\n }\n getAt(index) {\n return this.num[index];\n }\n getLength() {\n return this.num.length;\n }\n toString() {\n let buffer = '';\n for (let i = 0; i < this.getLength(); i += 1) {\n if (i > 0) {\n buffer += ',';\n }\n buffer += this.getAt(i);\n }\n return buffer.toString();\n }\n toLogString() {\n let buffer = '';\n for (let i = 0; i < this.getLength(); i += 1) {\n if (i > 0) {\n buffer += ',';\n }\n buffer += QRMath.glog(this.getAt(i));\n }\n return buffer.toString();\n }\n multiply(e) {\n const num = [];\n const len = this.getLength() + e.getLength() - 1;\n for (let i = 0; i < len; i += 1) {\n num.push(0);\n }\n for (let i = 0; i < this.getLength(); i += 1) {\n for (let j = 0; j < e.getLength(); j += 1) {\n num[i + j] ^= QRMath.gexp(QRMath.glog(this.getAt(i)) + QRMath.glog(e.getAt(j)));\n }\n }\n return new Polynomial(num);\n }\n mod(e) {\n if (this.getLength() - e.getLength() < 0) {\n return this;\n }\n const ratio = QRMath.glog(this.getAt(0)) - QRMath.glog(e.getAt(0));\n // create copy\n const num = [];\n for (let i = 0; i < this.getLength(); i += 1) {\n num.push(this.getAt(i));\n }\n // subtract and calc rest.\n for (let i = 0; i < e.getLength(); i += 1) {\n num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i)) + ratio);\n }\n // call recursively\n return new Polynomial(num).mod(e);\n }\n}\n//# sourceMappingURL=Polynomial.js.map","/**\n * Mode\n *\n * @author Kazuhiko Arase\n */\nexport var Mode;\n(function (Mode) {\n /**\n * number\n */\n Mode[Mode[\"MODE_NUMBER\"] = 1] = \"MODE_NUMBER\";\n /**\n * alphabet and number\n */\n Mode[Mode[\"MODE_ALPHA_NUM\"] = 2] = \"MODE_ALPHA_NUM\";\n /**\n * 8bit byte\n */\n Mode[Mode[\"MODE_8BIT_BYTE\"] = 4] = \"MODE_8BIT_BYTE\";\n /**\n * KANJI\n */\n Mode[Mode[\"MODE_KANJI\"] = 8] = \"MODE_KANJI\";\n})(Mode || (Mode = {}));\n//# sourceMappingURL=Mode.js.map","import { Mode } from './Mode.js';\n/**\n * QRData\n *\n * @author Kazuhiko Arase\n */\nexport class QRData {\n mode;\n data;\n constructor(mode, data) {\n this.mode = mode;\n this.data = data;\n }\n getMode() {\n return this.mode;\n }\n getData() {\n return this.data;\n }\n getLengthInBits(typeNumber) {\n if (1 <= typeNumber && typeNumber < 10) {\n // 1 - 9\n switch (this.mode) {\n case Mode.MODE_NUMBER:\n return 10;\n case Mode.MODE_ALPHA_NUM:\n return 9;\n case Mode.MODE_8BIT_BYTE:\n return 8;\n case Mode.MODE_KANJI:\n return 8;\n default:\n throw new Error('mode:' + this.mode);\n }\n }\n else if (typeNumber < 27) {\n // 10 - 26\n switch (this.mode) {\n case Mode.MODE_NUMBER:\n return 12;\n case Mode.MODE_ALPHA_NUM:\n return 11;\n case Mode.MODE_8BIT_BYTE:\n return 16;\n case Mode.MODE_KANJI:\n return 10;\n default:\n throw new Error('mode:' + this.mode);\n }\n }\n else if (typeNumber < 41) {\n // 27 - 40\n switch (this.mode) {\n case Mode.MODE_NUMBER:\n return 14;\n case Mode.MODE_ALPHA_NUM:\n return 13;\n case Mode.MODE_8BIT_BYTE:\n return 16;\n case Mode.MODE_KANJI:\n return 12;\n default:\n throw new Error('mode:' + this.mode);\n }\n }\n else {\n throw new Error('typeNumber:' + typeNumber);\n }\n }\n}\n//# sourceMappingURL=QRData.js.map","import { Mode } from './Mode.js';\nimport { QRData } from './QRData.js';\n/**\n * QR8BitByte\n *\n * @author Kazuhiko Arase\n */\nexport class QR8BitByte extends QRData {\n stringToBytes;\n constructor(data, stringToBytes) {\n super(Mode.MODE_8BIT_BYTE, data);\n this.stringToBytes = stringToBytes;\n }\n write(buffer) {\n const data = this.stringToBytes(this.getData());\n data.forEach(val => buffer.put(val, 8));\n }\n getLength() {\n return this.stringToBytes(this.getData()).length;\n }\n}\n//# sourceMappingURL=QR8BitByte.js.map","import { Mode } from './Mode.js';\nimport { QRData } from './QRData.js';\n/**\n * QRAlphaNum\n *\n * @author Kazuhiko Arase\n */\nexport class QRAlphaNum extends QRData {\n constructor(data) {\n super(Mode.MODE_ALPHA_NUM, data);\n }\n write(buffer) {\n const s = this.getData();\n let i = 0;\n while (i + 1 < s.length) {\n buffer.put(QRAlphaNum.getCode(s.charAt(i)) * 45 + QRAlphaNum.getCode(s.charAt(i + 1)), 11);\n i += 2;\n }\n if (i < s.length) {\n buffer.put(QRAlphaNum.getCode(s.charAt(i)), 6);\n }\n }\n getLength() {\n return this.getData().length;\n }\n static getCode(c) {\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n }\n else if ('A' <= c && c <= 'Z') {\n return c.charCodeAt(0) - 'A'.charCodeAt(0) + 10;\n }\n else {\n switch (c) {\n case ' ':\n return 36;\n case '$':\n return 37;\n case '%':\n return 38;\n case '*':\n return 39;\n case '+':\n return 40;\n case '-':\n return 41;\n case '.':\n return 42;\n case '/':\n return 43;\n case ':':\n return 44;\n default:\n throw new Error('illegal char :' + c);\n }\n }\n }\n}\n//# sourceMappingURL=QRAlphaNum.js.map","import { Mode } from './Mode.js';\nimport { QRData } from './QRData.js';\n/**\n * QRKanji(SJIS only)\n *\n * @author Kazuhiko Arase\n */\nexport class QRKanji extends QRData {\n stringToBytes;\n constructor(data, stringToBytes) {\n super(Mode.MODE_KANJI, data);\n this.stringToBytes = stringToBytes;\n }\n write(buffer) {\n const data = this.stringToBytes(this.getData());\n let i = 0;\n while (i + 1 < data.length) {\n let c = ((0xff & data[i]) << 8) | (0xff & data[i + 1]);\n if (0x8140 <= c && c <= 0x9ffc) {\n c -= 0x8140;\n }\n else if (0xe040 <= c && c <= 0xebbf) {\n c -= 0xc140;\n }\n else {\n throw new Error('illegal char at ' + (i + 1) + '/' + c);\n }\n c = ((c >>> 8) & 0xff) * 0xc0 + (c & 0xff);\n buffer.put(c, 13);\n i += 2;\n }\n if (i < data.length) {\n throw new Error('illegal char at ' + (i + 1));\n }\n }\n getLength() {\n return this.stringToBytes(this.getData()).length / 2;\n }\n}\n//# sourceMappingURL=QRKanji.js.map","import { Mode } from './Mode.js';\nimport { QRData } from './QRData.js';\n/**\n * QRNumber\n *\n * @author Kazuhiko Arase\n */\nexport class QRNumber extends QRData {\n constructor(data) {\n super(Mode.MODE_NUMBER, data);\n }\n write(buffer) {\n const data = this.getData();\n let i = 0;\n while (i + 2 < data.length) {\n buffer.put(QRNumber.strToNum(data.substring(i, i + 3)), 10);\n i += 3;\n }\n if (i < data.length) {\n if (data.length - i == 1) {\n buffer.put(QRNumber.strToNum(data.substring(i, i + 1)), 4);\n }\n else if (data.length - i == 2) {\n buffer.put(QRNumber.strToNum(data.substring(i, i + 2)), 7);\n }\n }\n }\n getLength() {\n return this.getData().length;\n }\n static strToNum(s) {\n let num = 0;\n for (let i = 0; i < s.length; i += 1) {\n num = num * 10 + QRNumber.chatToNum(s.charAt(i));\n }\n return num;\n }\n static chatToNum(c) {\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n }\n throw new Error('illegal char :' + c);\n }\n}\n//# sourceMappingURL=QRNumber.js.map","/**\n * MaskPattern\n *\n * @author Kazuhiko Arase\n */\nexport var MaskPattern;\n(function (MaskPattern) {\n /**\n * mask pattern 000\n */\n MaskPattern[MaskPattern[\"PATTERN000\"] = 0] = \"PATTERN000\";\n /**\n * mask pattern 001\n */\n MaskPattern[MaskPattern[\"PATTERN001\"] = 1] = \"PATTERN001\";\n /**\n * mask pattern 010\n */\n MaskPattern[MaskPattern[\"PATTERN010\"] = 2] = \"PATTERN010\";\n /**\n * mask pattern 011\n */\n MaskPattern[MaskPattern[\"PATTERN011\"] = 3] = \"PATTERN011\";\n /**\n * mask pattern 100\n */\n MaskPattern[MaskPattern[\"PATTERN100\"] = 4] = \"PATTERN100\";\n /**\n * mask pattern 101\n */\n MaskPattern[MaskPattern[\"PATTERN101\"] = 5] = \"PATTERN101\";\n /**\n * mask pattern 110\n */\n MaskPattern[MaskPattern[\"PATTERN110\"] = 6] = \"PATTERN110\";\n /**\n * mask pattern 111\n */\n MaskPattern[MaskPattern[\"PATTERN111\"] = 7] = \"PATTERN111\";\n})(MaskPattern || (MaskPattern = {}));\n//# sourceMappingURL=MaskPattern.js.map","import { ErrorCorrectLevel } from './ErrorCorrectLevel.js';\nimport { MaskPattern } from './MaskPattern.js';\nimport { Mode } from './Mode.js';\nimport { Polynomial } from './Polynomial.js';\nimport { QRMath } from './QRMath.js';\n/**\n * QRUtil\n *\n * @author Kazuhiko Arase\n */\nexport class QRUtil {\n constructor() {\n throw new Error('error');\n }\n static getPatternPosition(typeNumber) {\n return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];\n }\n static PATTERN_POSITION_TABLE = [\n [],\n [6, 18],\n [6, 22],\n [6, 26],\n [6, 30],\n [6, 34],\n [6, 22, 38],\n [6, 24, 42],\n [6, 26, 46],\n [6, 28, 50],\n [6, 30, 54],\n [6, 32, 58],\n [6, 34, 62],\n [6, 26, 46, 66],\n [6, 26, 48, 70],\n [6, 26, 50, 74],\n [6, 30, 54, 78],\n [6, 30, 56, 82],\n [6, 30, 58, 86],\n [6, 34, 62, 90],\n [6, 28, 50, 72, 94],\n [6, 26, 50, 74, 98],\n [6, 30, 54, 78, 102],\n [6, 28, 54, 80, 106],\n [6, 32, 58, 84, 110],\n [6, 30, 58, 86, 114],\n [6, 34, 62, 90, 118],\n [6, 26, 50, 74, 98, 122],\n [6, 30, 54, 78, 102, 126],\n [6, 26, 52, 78, 104, 130],\n [6, 30, 56, 82, 108, 134],\n [6, 34, 60, 86, 112, 138],\n [6, 30, 58, 86, 114, 142],\n [6, 34, 62, 90, 118, 146],\n [6, 30, 54, 78, 102, 126, 150],\n [6, 24, 50, 76, 102, 128, 154],\n [6, 28, 54, 80, 106, 132, 158],\n [6, 32, 58, 84, 110, 136, 162],\n [6, 26, 54, 82, 110, 138, 166],\n [6, 30, 58, 86, 114, 142, 170]\n ];\n static MAX_LENGTH = [\n [\n [41, 25, 17, 10],\n [34, 20, 14, 8],\n [27, 16, 11, 7],\n [17, 10, 7, 4]\n ],\n [\n [77, 47, 32, 20],\n [63, 38, 26, 16],\n [48, 29, 20, 12],\n [34, 20, 14, 8]\n ],\n [\n [127, 77, 53, 32],\n [101, 61, 42, 26],\n [77, 47, 32, 20],\n [58, 35, 24, 15]\n ],\n [\n [187, 114, 78, 48],\n [149, 90, 62, 38],\n [111, 67, 46, 28],\n [82, 50, 34, 21]\n ],\n [\n [255, 154, 106, 65],\n [202, 122, 84, 52],\n [144, 87, 60, 37],\n [106, 64, 44, 27]\n ],\n [\n [322, 195, 134, 82],\n [255, 154, 106, 65],\n [178, 108, 74, 45],\n [139, 84, 58, 36]\n ],\n [\n [370, 224, 154, 95],\n [293, 178, 122, 75],\n [207, 125, 86, 53],\n [154, 93, 64, 39]\n ],\n [\n [461, 279, 192, 118],\n [365, 221, 152, 93],\n [259, 157, 108, 66],\n [202, 122, 84, 52]\n ],\n [\n [552, 335, 230, 141],\n [432, 262, 180, 111],\n [312, 189, 130, 80],\n [235, 143, 98, 60]\n ],\n [\n [652, 395, 271, 167],\n [513, 311, 213, 131],\n [364, 221, 151, 93],\n [288, 174, 119, 74]\n ]\n ];\n static getMaxLength(typeNumber, mode, errorCorrectLevel) {\n const t = typeNumber - 1;\n let e = 0;\n let m = 0;\n switch (errorCorrectLevel) {\n case ErrorCorrectLevel.L:\n e = 0;\n break;\n case ErrorCorrectLevel.M:\n e = 1;\n break;\n case ErrorCorrectLevel.Q:\n e = 2;\n break;\n case ErrorCorrectLevel.H:\n e = 3;\n break;\n default:\n throw new Error('e:' + errorCorrectLevel);\n }\n switch (mode) {\n case Mode.MODE_NUMBER:\n m = 0;\n break;\n case Mode.MODE_ALPHA_NUM:\n m = 1;\n break;\n case Mode.MODE_8BIT_BYTE:\n m = 2;\n break;\n case Mode.MODE_KANJI:\n m = 3;\n break;\n default:\n throw new Error('m:' + mode);\n }\n return QRUtil.MAX_LENGTH[t][e][m];\n }\n static getErrorCorrectPolynomial(errorCorrectLength) {\n let a = new Polynomial([1]);\n for (let i = 0; i < errorCorrectLength; i += 1) {\n a = a.multiply(new Polynomial([1, QRMath.gexp(i)]));\n }\n return a;\n }\n static getMaskFunc(maskPattern) {\n switch (maskPattern) {\n case MaskPattern.PATTERN000:\n return (i, j) => (i + j) % 2 == 0;\n case MaskPattern.PATTERN001:\n return (i, _j) => i % 2 == 0;\n case MaskPattern.PATTERN010:\n return (_i, j) => j % 3 == 0;\n case MaskPattern.PATTERN011:\n return (i, j) => (i + j) % 3 == 0;\n case MaskPattern.PATTERN100:\n return (i, j) => (~~(i / 2) + ~~(j / 3)) % 2 == 0;\n case MaskPattern.PATTERN101:\n return (i, j) => ((i * j) % 2) + ((i * j) % 3) == 0;\n case MaskPattern.PATTERN110:\n return (i, j) => (((i * j) % 2) + ((i * j) % 3)) % 2 == 0;\n case MaskPattern.PATTERN111:\n return (i, j) => (((i * j) % 3) + ((i + j) % 2)) % 2 == 0;\n default:\n throw new Error('mask:' + maskPattern);\n }\n }\n static getLostPoint(qrCode) {\n const moduleCount = qrCode.getModuleCount();\n let lostPoint = 0;\n // LEVEL1\n for (let row = 0; row < moduleCount; row += 1) {\n for (let col = 0; col < moduleCount; col += 1) {\n let sameCount = 0;\n const dark = qrCode.isDark(row, col);\n for (let r = -1; r <= 1; r += 1) {\n if (row + r < 0 || moduleCount <= row + r) {\n continue;\n }\n for (let c = -1; c <= 1; c += 1) {\n if (col + c < 0 || moduleCount <= col + c) {\n continue;\n }\n if (r == 0 && c == 0) {\n continue;\n }\n if (dark == qrCode.isDark(row + r, col + c)) {\n sameCount += 1;\n }\n }\n }\n if (sameCount > 5) {\n lostPoint += 3 + sameCount - 5;\n }\n }\n }\n // LEVEL2\n for (let row = 0; row < moduleCount - 1; row += 1) {\n for (let col = 0; col < moduleCount - 1; col += 1) {\n let count = 0;\n if (qrCode.isDark(row, col))\n count += 1;\n if (qrCode.isDark(row + 1, col))\n count += 1;\n if (qrCode.isDark(row, col + 1))\n count += 1;\n if (qrCode.isDark(row + 1, col + 1))\n count += 1;\n if (count == 0 || count == 4) {\n lostPoint += 3;\n }\n }\n }\n // LEVEL3\n for (let row = 0; row < moduleCount; row += 1) {\n for (let col = 0; col < moduleCount - 6; col += 1) {\n if (qrCode.isDark(row, col) &&\n !qrCode.isDark(row, col + 1) &&\n qrCode.isDark(row, col + 2) &&\n qrCode.isDark(row, col + 3) &&\n qrCode.isDark(row, col + 4) &&\n !qrCode.isDark(row, col + 5) &&\n qrCode.isDark(row, col + 6)) {\n lostPoint += 40;\n }\n }\n }\n for (let col = 0; col < moduleCount; col += 1) {\n for (let row = 0; row < moduleCount - 6; row += 1) {\n if (qrCode.isDark(row, col) &&\n !qrCode.isDark(row + 1, col) &&\n qrCode.isDark(row + 2, col) &&\n qrCode.isDark(row + 3, col) &&\n qrCode.isDark(row + 4, col) &&\n !qrCode.isDark(row + 5, col) &&\n qrCode.isDark(row + 6, col)) {\n lostPoint += 40;\n }\n }\n }\n // LEVEL4\n let darkCount = 0;\n for (let col = 0; col < moduleCount; col += 1) {\n for (let row = 0; row < moduleCount; row += 1) {\n if (qrCode.isDark(row, col)) {\n darkCount += 1;\n }\n }\n }\n const ratio = Math.abs((100 * darkCount) / moduleCount / moduleCount - 50) / 5;\n lostPoint += ratio * 10;\n return lostPoint;\n }\n static getBCHTypeInfo(data) {\n let d = data << 10;\n while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {\n d ^= QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15));\n }\n return ((data << 10) | d) ^ QRUtil.G15_MASK;\n }\n static getBCHTypeNumber(data) {\n let d = data << 12;\n while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {\n d ^= QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18));\n }\n return (data << 12) | d;\n }\n static G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\n static G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);\n static G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\n static getBCHDigit(data) {\n let digit = 0;\n while (data != 0) {\n digit += 1;\n data >>>= 1;\n }\n return digit;\n }\n}\n//# sourceMappingURL=QRUtil.js.map","import { ErrorCorrectLevel } from './ErrorCorrectLevel.js';\n/**\n * RSBlock\n *\n * @author Kazuhiko Arase\n */\nexport class RSBlock {\n totalCount;\n dataCount;\n static RS_BLOCK_TABLE = [\n // L\n // M\n // Q\n // H\n // 1\n [1, 26, 19],\n [1, 26, 16],\n [1, 26, 13],\n [1, 26, 9],\n // 2\n [1, 44, 34],\n [1, 44, 28],\n [1, 44, 22],\n [1, 44, 16],\n // 3\n [1, 70, 55],\n [1, 70, 44],\n [2, 35, 17],\n [2, 35, 13],\n // 4\n [1, 100, 80],\n [2, 50, 32],\n [2, 50, 24],\n [4, 25, 9],\n // 5\n [1, 134, 108],\n [2, 67, 43],\n [2, 33, 15, 2, 34, 16],\n [2, 33, 11, 2, 34, 12],\n // 6\n [2, 86, 68],\n [4, 43, 27],\n [4, 43, 19],\n [4, 43, 15],\n // 7\n [2, 98, 78],\n [4, 49, 31],\n [2, 32, 14, 4, 33, 15],\n [4, 39, 13, 1, 40, 14],\n // 8\n [2, 121, 97],\n [2, 60, 38, 2, 61, 39],\n [4, 40, 18, 2, 41, 19],\n [4, 40, 14, 2, 41, 15],\n // 9\n [2, 146, 116],\n [3, 58, 36, 2, 59, 37],\n [4, 36, 16, 4, 37, 17],\n [4, 36, 12, 4, 37, 13],\n // 10\n [2, 86, 68, 2, 87, 69],\n [4, 69, 43, 1, 70, 44],\n [6, 43, 19, 2, 44, 20],\n [6, 43, 15, 2, 44, 16],\n // 11\n [4, 101, 81],\n [1, 80, 50, 4, 81, 51],\n [4, 50, 22, 4, 51, 23],\n [3, 36, 12, 8, 37, 13],\n // 12\n [2, 116, 92, 2, 117, 93],\n [6, 58, 36, 2, 59, 37],\n [4, 46, 20, 6, 47, 21],\n [7, 42, 14, 4, 43, 15],\n // 13\n [4, 133, 107],\n [8, 59, 37, 1, 60, 38],\n [8, 44, 20, 4, 45, 21],\n [12, 33, 11, 4, 34, 12],\n // 14\n [3, 145, 115, 1, 146, 116],\n [4, 64, 40, 5, 65, 41],\n [11, 36, 16, 5, 37, 17],\n [11, 36, 12, 5, 37, 13],\n // 15\n [5, 109, 87, 1, 110, 88],\n [5, 65, 41, 5, 66, 42],\n [5, 54, 24, 7, 55, 25],\n [11, 36, 12, 7, 37, 13],\n // 16\n [5, 122, 98, 1, 123, 99],\n [7, 73, 45, 3, 74, 46],\n [15, 43, 19, 2, 44, 20],\n [3, 45, 15, 13, 46, 16],\n // 17\n [1, 135, 107, 5, 136, 108],\n [10, 74, 46, 1, 75, 47],\n [1, 50, 22, 15, 51, 23],\n [2, 42, 14, 17, 43, 15],\n // 18\n [5, 150, 120, 1, 151, 121],\n [9, 69, 43, 4, 70, 44],\n [17, 50, 22, 1, 51, 23],\n [2, 42, 14, 19, 43, 15],\n // 19\n [3, 141, 113, 4, 142, 114],\n [3, 70, 44, 11, 71, 45],\n [17, 47, 21, 4, 48, 22],\n [9, 39, 13, 16, 40, 14],\n // 20\n [3, 135, 107, 5, 136, 108],\n [3, 67, 41, 13, 68, 42],\n [15, 54, 24, 5, 55, 25],\n [15, 43, 15, 10, 44, 16],\n // 21\n [4, 144, 116, 4, 145, 117],\n [17, 68, 42],\n [17, 50, 22, 6, 51, 23],\n [19, 46, 16, 6, 47, 17],\n // 22\n [2, 139, 111, 7, 140, 112],\n [17, 74, 46],\n [7, 54, 24, 16, 55, 25],\n [34, 37, 13],\n // 23\n [4, 151, 121, 5, 152, 122],\n [4, 75, 47, 14, 76, 48],\n [11, 54, 24, 14, 55, 25],\n [16, 45, 15, 14, 46, 16],\n // 24\n [6, 147, 117, 4, 148, 118],\n [6, 73, 45, 14, 74, 46],\n [11, 54, 24, 16, 55, 25],\n [30, 46, 16, 2, 47, 17],\n // 25\n [8, 132, 106, 4, 133, 107],\n [8, 75, 47, 13, 76, 48],\n [7, 54, 24, 22, 55, 25],\n [22, 45, 15, 13, 46, 16],\n // 26\n [10, 142, 114, 2, 143, 115],\n [19, 74, 46, 4, 75, 47],\n [28, 50, 22, 6, 51, 23],\n [33, 46, 16, 4, 47, 17],\n // 27\n [8, 152, 122, 4, 153, 123],\n [22, 73, 45, 3, 74, 46],\n [8, 53, 23, 26, 54, 24],\n [12, 45, 15, 28, 46, 16],\n // 28\n [3, 147, 117, 10, 148, 118],\n [3, 73, 45, 23, 74, 46],\n [4, 54, 24, 31, 55, 25],\n [11, 45, 15, 31, 46, 16],\n // 29\n [7, 146, 116, 7, 147, 117],\n [21, 73, 45, 7, 74, 46],\n [1, 53, 23, 37, 54, 24],\n [19, 45, 15, 26, 46, 16],\n // 30\n [5, 145, 115, 10, 146, 116],\n [19, 75, 47, 10, 76, 48],\n [15, 54, 24, 25, 55, 25],\n [23, 45, 15, 25, 46, 16],\n // 31\n [13, 145, 115, 3, 146, 116],\n [2, 74, 46, 29, 75, 47],\n [42, 54, 24, 1, 55, 25],\n [23, 45, 15, 28, 46, 16],\n // 32\n [17, 145, 115],\n [10, 74, 46, 23, 75, 47],\n [10, 54, 24, 35, 55, 25],\n [19, 45, 15, 35, 46, 16],\n // 33\n [17, 145, 115, 1, 146, 116],\n [14, 74, 46, 21, 75, 47],\n [29, 54, 24, 19, 55, 25],\n [11, 45, 15, 46, 46, 16],\n // 34\n [13, 145, 115, 6, 146, 116],\n [14, 74, 46, 23, 75, 47],\n [44, 54, 24, 7, 55, 25],\n [59, 46, 16, 1, 47, 17],\n // 35\n [12, 151, 121, 7, 152, 122],\n [12, 75, 47, 26, 76, 48],\n [39, 54, 24, 14, 55, 25],\n [22, 45, 15, 41, 46, 16],\n // 36\n [6, 151, 121, 14, 152, 122],\n [6, 75, 47, 34, 76, 48],\n [46, 54, 24, 10, 55, 25],\n [2, 45, 15, 64, 46, 16],\n // 37\n [17, 152, 122, 4, 153, 123],\n [29, 74, 46, 14, 75, 47],\n [49, 54, 24, 10, 55, 25],\n [24, 45, 15, 46, 46, 16],\n // 38\n [4, 152, 122, 18, 153, 123],\n [13, 74, 46, 32, 75, 47],\n [48, 54, 24, 14, 55, 25],\n [42, 45, 15, 32, 46, 16],\n // 39\n [20, 147, 117, 4, 148, 118],\n [40, 75, 47, 7, 76, 48],\n [43, 54, 24, 22, 55, 25],\n [10, 45, 15, 67, 46, 16],\n // 40\n [19, 148, 118, 6, 149, 119],\n [18, 75, 47, 31, 76, 48],\n [34, 54, 24, 34, 55, 25],\n [20, 45, 15, 61, 46, 16]\n ];\n constructor(totalCount, dataCount) {\n this.totalCount = totalCount;\n this.dataCount = dataCount;\n }\n getDataCount() {\n return this.dataCount;\n }\n getTotalCount() {\n return this.totalCount;\n }\n static getRSBlocks(typeNumber, errorCorrectLevel) {\n const rsBlock = RSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);\n const length = rsBlock.length / 3;\n const list = [];\n for (let i = 0; i < length; i += 1) {\n const count = rsBlock[i * 3 + 0];\n const totalCount = rsBlock[i * 3 + 1];\n const dataCount = rsBlock[i * 3 + 2];\n for (let j = 0; j < count; j += 1) {\n list.push(new RSBlock(totalCount, dataCount));\n }\n }\n return list;\n }\n static getRsBlockTable(typeNumber, errorCorrectLevel) {\n switch (errorCorrectLevel) {\n case ErrorCorrectLevel.L:\n return RSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n case ErrorCorrectLevel.M:\n return RSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n case ErrorCorrectLevel.Q:\n return RSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n case ErrorCorrectLevel.H:\n return RSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n default:\n break;\n }\n throw new Error('tn:' + typeNumber + '/ecl:' + errorCorrectLevel);\n }\n}\n//# sourceMappingURL=RSBlock.js.map","import { BitBuffer } from './BitBuffer.js';\nimport { ErrorCorrectLevel } from './ErrorCorrectLevel.js';\nimport { Polynomial } from './Polynomial.js';\nimport { QR8BitByte } from './QR8BitByte.js';\nimport { QRAlphaNum } from './QRAlphaNum.js';\nimport { QRData } from './QRData.js';\nimport { QRKanji } from './QRKanji.js';\nimport { QRNumber } from './QRNumber.js';\nimport { QRUtil } from './QRUtil.js';\nimport { RSBlock } from './RSBlock.js';\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nconst TypeNumber = Array(41)\n .fill(0)\n .map((_, i) => i);\nexport { TypeNumber };\nexport var ErrorCorrectionLevel;\n(function (ErrorCorrectionLevel) {\n ErrorCorrectionLevel[\"L\"] = \"L\";\n ErrorCorrectionLevel[\"M\"] = \"M\";\n ErrorCorrectionLevel[\"Q\"] = \"Q\";\n ErrorCorrectionLevel[\"H\"] = \"H\";\n})(ErrorCorrectionLevel || (ErrorCorrectionLevel = {}));\nexport var Mode;\n(function (Mode) {\n Mode[\"numeric\"] = \"numeric\";\n Mode[\"alphanumeric\"] = \"alphanumeric\";\n /**\n * Default\n */\n Mode[\"byte\"] = \"byte\";\n Mode[\"kanji\"] = \"kanji\";\n Mode[\"unicode\"] = \"unicode\";\n})(Mode || (Mode = {}));\n/**\n * QRCode\n *\n * @author Kazuhiko Arase\n */\nexport class QRCodeMinimal {\n static stringToBytesFuncs = {\n default(s) {\n const bytes = [];\n for (let i = 0; i < s.length; i += 1) {\n const c = s.charCodeAt(i);\n bytes.push(c & 0xff);\n }\n return bytes;\n }\n };\n static PAD0 = 0xec;\n static PAD1 = 0x11;\n typeNumber;\n errorCorrectLevel;\n qrDataList;\n modules = [];\n moduleCount = 0;\n constructor(typeNumber = 0, errorCorrectionLevel = ErrorCorrectionLevel.L) {\n this.typeNumber = typeNumber;\n this.errorCorrectLevel = ErrorCorrectLevel[errorCorrectionLevel];\n this.qrDataList = [];\n }\n getTypeNumber() {\n return this.typeNumber;\n }\n setTypeNumber(typeNumber) {\n this.typeNumber = typeNumber;\n }\n getErrorCorrectLevel() {\n return this.errorCorrectLevel;\n }\n setErrorCorrectLevel(errorCorrectLevel) {\n this.errorCorrectLevel = errorCorrectLevel;\n }\n clearData() {\n this.qrDataList = [];\n }\n addData(qrData, mode = Mode.byte) {\n if (qrData instanceof QRData) {\n this.qrDataList.push(qrData);\n }\n else if (typeof qrData === 'string') {\n switch (mode) {\n case Mode.numeric:\n this.qrDataList.push(new QRNumber(qrData));\n break;\n case Mode.alphanumeric:\n this.qrDataList.push(new QRAlphaNum(qrData));\n break;\n case Mode.byte:\n this.qrDataList.push(new QR8BitByte(qrData, QRCodeMinimal.stringToBytesFuncs.default));\n break;\n case Mode.unicode:\n this.qrDataList.push(new QR8BitByte(qrData, QRCodeMinimal.stringToBytesFuncs['UTF8']));\n break;\n case Mode.kanji:\n this.qrDataList.push(new QRKanji(qrData, QRCodeMinimal.stringToBytesFuncs['SJIS']));\n break;\n default:\n throw new Error('mode:' + mode);\n }\n }\n else {\n throw new Error(typeof qrData);\n }\n }\n /*private getDataCount(): number {\n return this.qrDataList.length;\n }\n\n private getData(index: number): QRData {\n return this.qrDataList[index];\n }*/\n isDark(row, col) {\n if (this.modules[row][col] != null) {\n return this.modules[row][col];\n }\n else {\n return false;\n }\n }\n getModuleCount() {\n return this.moduleCount;\n }\n make() {\n if (this.typeNumber < 1) {\n let typeNumber = 1;\n for (; typeNumber < 40; typeNumber++) {\n const rsBlocks = RSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel);\n const buffer = new BitBuffer();\n this.qrDataList.forEach(data => {\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), data.getLengthInBits(typeNumber));\n data.write(buffer);\n });\n const totalDataCount = rsBlocks.reduce((t, v) => t + v.getDataCount(), 0);\n if (buffer.getLengthInBits() <= totalDataCount * 8) {\n break;\n }\n }\n this.typeNumber = typeNumber;\n }\n this.makeImpl(false, this.getBestMaskPattern());\n }\n getBestMaskPattern() {\n let minLostPoint = 0;\n let pattern = 0;\n for (let i = 0; i < 8; i += 1) {\n this.makeImpl(true, i);\n const lostPoint = QRUtil.getLostPoint(this);\n if (i == 0 || minLostPoint > lostPoint) {\n minLostPoint = lostPoint;\n pattern = i;\n }\n }\n return pattern;\n }\n makeImpl(test, maskPattern) {\n // initialize modules\n this.moduleCount = this.typeNumber * 4 + 17;\n this.modules = [];\n for (let i = 0; i < this.moduleCount; i += 1) {\n this.modules.push([]);\n for (let j = 0; j < this.moduleCount; j += 1) {\n this.modules[i].push(null);\n }\n }\n this.setupPositionProbePattern(0, 0);\n this.setupPositionProbePattern(this.moduleCount - 7, 0);\n this.setupPositionProbePattern(0, this.moduleCount - 7);\n this.setupPositionAdjustPattern();\n this.setupTimingPattern();\n this.setupTypeInfo(test, maskPattern);\n if (this.typeNumber >= 7) {\n this.setupTypeNumber(test);\n }\n const data = QRCodeMinimal.createData(this.typeNumber, this.errorCorrectLevel, this.qrDataList);\n this.mapData(data, maskPattern);\n }\n mapData(data, maskPattern) {\n let inc = -1;\n let row = this.moduleCount - 1;\n let bitIndex = 7;\n let byteIndex = 0;\n const maskFunc = QRUtil.getMaskFunc(maskPattern);\n for (let col = this.moduleCount - 1; col > 0; col -= 2) {\n if (col == 6) {\n col -= 1;\n }\n while (true) {\n for (let c = 0; c < 2; c += 1) {\n if (this.modules[row][col - c] == null) {\n let dark = false;\n if (byteIndex < data.length) {\n dark = ((data[byteIndex] >>> bitIndex) & 1) == 1;\n }\n const mask = maskFunc(row, col - c);\n if (mask) {\n dark = !dark;\n }\n this.modules[row][col - c] = dark;\n bitIndex -= 1;\n if (bitIndex == -1) {\n byteIndex += 1;\n bitIndex = 7;\n }\n }\n }\n row += inc;\n if (row < 0 || this.moduleCount <= row) {\n row -= inc;\n inc = -inc;\n break;\n }\n }\n }\n }\n setupPositionAdjustPattern() {\n const pos = QRUtil.getPatternPosition(this.typeNumber);\n pos.forEach(row => {\n pos.forEach(col => {\n if (this.modules[row][col] != null) {\n return;\n }\n for (let r = -2; r <= 2; r += 1) {\n for (let c = -2; c <= 2; c += 1) {\n if (r == -2 || r == 2 || c == -2 || c == 2 || (r == 0 && c == 0)) {\n this.modules[row + r][col + c] = true;\n }\n else {\n this.modules[row + r][col + c] = false;\n }\n }\n }\n });\n });\n }\n setupPositionProbePattern(row, col) {\n for (let r = -1; r <= 7; r += 1) {\n for (let c = -1; c <= 7; c += 1) {\n if (row + r <= -1 || this.moduleCount <= row + r || col + c <= -1 || this.moduleCount <= col + c) {\n continue;\n }\n if ((0 <= r && r <= 6 && (c == 0 || c == 6)) ||\n (0 <= c && c <= 6 && (r == 0 || r == 6)) ||\n (2 <= r && r <= 4 && 2 <= c && c <= 4)) {\n this.modules[row + r][col + c] = true;\n }\n else {\n this.modules[row + r][col + c] = false;\n }\n }\n }\n }\n setupTimingPattern() {\n for (let r = 8; r < this.moduleCount - 8; r += 1) {\n if (this.modules[r][6] != null) {\n continue;\n }\n this.modules[r][6] = r % 2 == 0;\n }\n for (let c = 8; c < this.moduleCount - 8; c += 1) {\n if (this.modules[6][c] != null) {\n continue;\n }\n this.modules[6][c] = c % 2 == 0;\n }\n }\n setupTypeNumber(test) {\n const bits = QRUtil.getBCHTypeNumber(this.typeNumber);\n for (let i = 0; i < 18; i += 1) {\n this.modules[~~(i / 3)][(i % 3) + this.moduleCount - 8 - 3] = !test && ((bits >> i) & 1) == 1;\n }\n for (let i = 0; i < 18; i += 1) {\n this.modules[(i % 3) + this.moduleCount - 8 - 3][~~(i / 3)] = !test && ((bits >> i) & 1) == 1;\n }\n }\n setupTypeInfo(test, maskPattern) {\n const data = (this.errorCorrectLevel << 3) | maskPattern;\n const bits = QRUtil.getBCHTypeInfo(data);\n // vertical\n for (let i = 0; i < 15; i += 1) {\n const mod = !test && ((bits >> i) & 1) == 1;\n if (i < 6) {\n this.modules[i][8] = mod;\n }\n else if (i < 8) {\n this.modules[i + 1][8] = mod;\n }\n else {\n this.modules[this.moduleCount - 15 + i][8] = mod;\n }\n }\n // horizontal\n for (let i = 0; i < 15; i += 1) {\n const mod = !test && ((bits >> i) & 1) == 1;\n if (i < 8) {\n this.modules[8][this.moduleCount - i - 1] = mod;\n }\n else if (i < 9) {\n this.modules[8][15 - i - 1 + 1] = mod;\n }\n else {\n this.modules[8][15 - i - 1] = mod;\n }\n }\n // fixed\n this.modules[this.moduleCount - 8][8] = !test;\n }\n static createData(typeNumber, errorCorrectLevel, dataArray) {\n const rsBlocks = RSBlock.getRSBlocks(typeNumber, errorCorrectLevel);\n const buffer = new BitBuffer();\n dataArray.forEach(data => {\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), data.getLengthInBits(typeNumber));\n data.write(buffer);\n });\n // calc max data count\n const totalDataCount = rsBlocks.reduce((t, v) => t + v.getDataCount(), 0);\n if (buffer.getLengthInBits() > totalDataCount * 8) {\n throw new Error('code length overflow. (' + buffer.getLengthInBits() + '>' + totalDataCount * 8 + ')');\n }\n // end\n if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n buffer.put(0, 4);\n }\n // padding\n while (buffer.getLengthInBits() % 8 != 0) {\n buffer.putBit(false);\n }\n // padding\n while (true) {\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(QRCodeMinimal.PAD0, 8);\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(QRCodeMinimal.PAD1, 8);\n }\n return QRCodeMinimal.createBytes(buffer, rsBlocks);\n }\n static createBytes(buffer, rsBlocks) {\n let offset = 0;\n let maxDcCount = 0;\n let maxEcCount = 0;\n const dcdata = new Array(rsBlocks.length).map(_ => []);\n const ecdata = new Array(rsBlocks.length).map(_ => []);\n function createNumArray(len) {\n const a = [];\n for (let i = 0; i < len; i += 1) {\n a.push(0);\n }\n return a;\n }\n for (let r = 0; r < rsBlocks.length; r += 1) {\n const dcCount = rsBlocks[r].getDataCount();\n const ecCount = rsBlocks[r].getTotalCount() - dcCount;\n maxDcCount = Math.max(maxDcCount, dcCount);\n maxEcCount = Math.max(maxEcCount, ecCount);\n dcdata[r] = createNumArray(dcCount);\n for (let i = 0; i < dcdata[r].length; i += 1) {\n dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];\n }\n offset += dcCount;\n const rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n const rawPoly = new Polynomial(dcdata[r], rsPoly.getLength() - 1);\n const modPoly = rawPoly.mod(rsPoly);\n ecdata[r] = createNumArray(rsPoly.getLength() - 1);\n for (let i = 0; i < ecdata[r].length; i += 1) {\n const modIndex = i + modPoly.getLength() - ecdata[r].length;\n ecdata[r][i] = modIndex >= 0 ? modPoly.getAt(modIndex) : 0;\n }\n }\n const totalCodeCount = rsBlocks.reduce((t, v) => t + v.getTotalCount(), 0);\n const data = createNumArray(totalCodeCount);\n let index = 0;\n for (let i = 0; i < maxDcCount; i += 1) {\n for (let r = 0; r < rsBlocks.length; r += 1) {\n if (i < dcdata[r].length) {\n data[index] = dcdata[r][i];\n index += 1;\n }\n }\n }\n for (let i = 0; i < maxEcCount; i += 1) {\n for (let r = 0; r < rsBlocks.length; r += 1) {\n if (i < ecdata[r].length) {\n data[index] = ecdata[r][i];\n index += 1;\n }\n }\n }\n return data;\n }\n}\n//# sourceMappingURL=QRCodeMinimal.js.map","const isObject = (obj: Record<string, unknown> | undefined): boolean =>\r\n !!obj && typeof obj === 'object' && !Array.isArray(obj)\r\n\r\nexport type UnknownObject =\r\n | {\r\n\r\n [key: string]: any\r\n }\r\n | undefined\r\n\r\nexport function mergeDeep(target: UnknownObject, ...sources: UnknownObject[]): UnknownObject {\r\n if (!sources.length) return target\r\n const source = sources.shift()\r\n if (source === undefined || !isObject(target) || !isObject(source)) return target\r\n target = { ...target }\r\n Object.keys(source).forEach((key: string): void => {\r\n const targetValue = target[key]\r\n const sourceValue = source[key]\r\n\r\n if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\r\n target[key] = sourceValue\r\n } else if (isObject(targetValue) && isObject(sourceValue)) {\r\n target[key] = mergeDeep({ ...targetValue}, sourceValue)\r\n } else {\r\n target[key] = sourceValue\r\n }\r\n })\r\n\r\n return mergeDeep(target, ...sources)\r\n}\r\n","export enum GradientType {\r\n radial = 'radial',\r\n linear = 'linear'\r\n}\r\n\r\nexport interface Gradient {\r\n /**\r\n * Type of gradient spread\r\n *\r\n * @default GradientType.linear\r\n */\r\n type: `${GradientType}`\r\n /**\r\n * Rotation of gradient (in radians, Math.PI === 180 degrees)\r\n *\r\n * @default 0\r\n */\r\n rotation?: number\r\n /** Gradient colors. */\r\n colorStops: Array<{\r\n /** Position of color in gradient range */\r\n offset: number\r\n /** Color of stop in gradient range */\r\n color: string\r\n }>\r\n}\r\n\r\nexport function sanitizeGradient(gradient: Gradient): Gradient {\r\n const newGradient = { ...gradient }\r\n\r\n if (!newGradient.colorStops || !newGradient.colorStops.length) {\r\n throw new Error(\"Field 'colorStops' is required in gradient\")\r\n }\r\n\r\n if (newGradient.rotation) {\r\n newGradient.rotation = Number(newGradient.rotation)\r\n } else {\r\n newGradient.rotation = 0\r\n }\r\n\r\n newGradient.colorStops = newGradient.colorStops.map((colorStop: { offset: number, color: string }) => ({\r\n ...colorStop,\r\n offset: Number(colorStop.offset)\r\n }))\r\n\r\n return newGradient\r\n}\r\n","import { ErrorCorrectionLevel, Mode, TypeNumber } from '@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js'\r\nimport { browserImageTools } from '../tools/browser-image-tools.js'\r\nimport { Gradient, sanitizeGradient } from './gradient.js'\r\n\r\nexport enum DotType {\r\n dot = 'dot',\r\n randomDot = 'random-dot',\r\n rounded = 'rounded',\r\n extraRounded = 'extra-rounded',\r\n verticalLine = 'vertical-line',\r\n horizontalLine = 'horizontal-line',\r\n classy = 'classy',\r\n classyRounded = 'classy-rounded',\r\n square = 'square',\r\n smallSquare = 'small-square',\r\n tinySquare = 'tiny-square',\r\n diamond = 'diamond'\r\n}\r\n\r\nexport enum CornerDotType {\r\n dot = 'dot',\r\n square = 'square',\r\n heart = 'heart',\r\n extraRounded = 'extra-rounded',\r\n classy = 'classy',\r\n outpoint = 'outpoint',\r\n inpoint = 'inpoint'\r\n}\r\n\r\nexport enum CornerSquareType {\r\n dot = 'dot',\r\n square = 'square',\r\n extraRounded = 'extra-rounded',\r\n classy = 'classy',\r\n outpoint = 'outpoint',\r\n inpoint = 'inpoint'\r\n}\r\n\r\nexport enum ShapeType {\r\n square = 'square',\r\n circle = 'circle'\r\n}\r\n\r\nexport enum ImageMode {\r\n /**\r\n * Place image in the center of the code\r\n */\r\n center = 'center',\r\n /**\r\n * Place image over the center of the code\r\n */\r\n overlay = 'overlay',\r\n /**\r\n * Use image as background, draw dots over it\r\n */\r\n background = 'background'\r\n}\r\n\r\nexport interface Options {\r\n /** Use a custom DOM domplementation */\r\n document: Document\r\n /** Use a custom image fetching & serializaton implementation */\r\n imageTools?: typeof browserImageTools\r\n /** @ignore */\r\n width: number\r\n /** @ignore */\r\n height: number\r\n /** The data will be encoded in the QR code */\r\n data: string\r\n /** The image will be copied to the center of the QR code */\r\n image?: string | Buffer | Blob\r\n /**\r\n * QR code shape\r\n *\r\n * @default ShapeType.square\r\n */\r\n shape: `${ShapeType}`\r\n /** Options will be passed to `@liquid-js/qrcode-generator` lib */\r\n qrOptions: {\r\n typeNumber: TypeNumber\r\n mode?: `${Mode}`\r\n /** @default ErrorCorrectionLevel.Q */\r\n errorCorrectionLevel: `${ErrorCorrectionLevel}`\r\n }\r\n imageOptions: {\r\n /**\r\n * Image mode\r\n *\r\n * @default ImageMode.center\r\n */\r\n mode: `${ImageMode}`\r\n /**\r\n * Fill blank areas of the code with selected color\r\n */\r\n fill: {\r\n /**\r\n * Color of QR dots\r\n *\r\n * @default \"rgba(255,255,255,0.75)\"\r\n */\r\n color: string\r\n /** Gradient of Corners Dot */\r\n gradient?: Gradient\r\n }\r\n /**\r\n * Coefficient of the image size\r\n *\r\n * @default 0.4\r\n */\r\n imageSize: number\r\n /**\r\n * Margin of the image (in blocks)\r\n *\r\n * @default 0\r\n */\r\n margin: number\r\n /**\r\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLImageElement/crossOrigin)\r\n */\r\n crossOrigin?: string\r\n }\r\n dotsOptions: {\r\n /**\r\n * QR dot size (in pixels)\r\n *\r\n * @default 10\r\n */\r\n size: number\r\n /**\r\n * Color of QR dots\r\n *\r\n * @default \"#000\"\r\n */\r\n color: string\r\n /** Gradient of QR dots */\r\n gradient?: Gradient\r\n /**\r\n * Style of QR dots\r\n *\r\n * @default DotType.square\r\n */\r\n type: `${DotType}`\r\n }\r\n /** Corners Square options, omitted values match dots */\r\n cornersSquareOptions?: {\r\n /** Color of Corners Square */\r\n color?: string\r\n /** Gradient of Corners Square */\r\n gradient?: Gradient\r\n /** Style of Corners Square */\r\n type?: `${CornerSquareType}`\r\n }\r\n /** Corners Dot options, omitted values match squares */\r\n cornersDotOptions?: {\r\n /** Color of Corners Dot */\r\n color?: string\r\n /** Gradient of Corners Dot */\r\n gradient?: Gradient\r\n /** Style of Corners Dot */\r\n type?: `${CornerDotType}`\r\n }\r\n /** QR background styling options, false to disable background */\r\n backgroundOptions?:\r\n | {\r\n /** Background roundnes, from 0 (square) to 1 (circle) */\r\n round?: number\r\n /** Background color */\r\n color?: string\r\n /** Background Gradient */\r\n gradient?: Gradient\r\n /**\r\n * Margin (in blocks) between background and the QR code\r\n *\r\n * @default 0\r\n */\r\n margin?: number\r\n }\r\n | false\r\n /** `import { stringToBytesFuncs } from \"@liquid-js/qr-code-styling/kanji\";` to add Kanji support */\r\n stringToBytesFuncs?: { [encoding: string]: (s: string) => number[] }\r\n}\r\n\r\nexport const defaultOptions: Options = {\r\n document: undefined as never,\r\n shape: ShapeType.square,\r\n width: undefined as never,\r\n height: undefined as never,\r\n data: '',\r\n qrOptions: {\r\n typeNumber: TypeNumber[0],\r\n mode: undefined,\r\n errorCorrectionLevel: ErrorCorrectionLevel.Q\r\n },\r\n imageOptions: {\r\n mode: ImageMode.center,\r\n imageSize: 0.4,\r\n crossOrigin: undefined,\r\n margin: 0,\r\n fill: {\r\n color: 'rgba(255,255,255,1)'\r\n }\r\n },\r\n dotsOptions: {\r\n type: DotType.square,\r\n color: '#000',\r\n size: 10\r\n }\r\n}\r\n\r\nexport function sanitizeOptions(options: Options): Options {\r\n const newOptions = { ...options }\r\n\r\n newOptions.imageOptions = {\r\n ...newOptions.imageOptions,\r\n imageSize: Math.min(1, Number(newOptions.imageOptions.imageSize)) || 1,\r\n margin: Number(newOptions.imageOptions.margin),\r\n fill: {\r\n ...newOptions.imageOptions.fill\r\n }\r\n }\r\n\r\n if (newOptions.imageOptions.mode == ImageMode.overlay) newOptions.imageOptions.margin = 0\r\n if (newOptions.imageOptions.fill.gradient) {\r\n newOptions.imageOptions.fill.gradient = sanitizeGradient(newOptions.imageOptions.fill.gradient)\r\n }\r\n\r\n newOptions.dotsOptions = {\r\n ...newOptions.dotsOptions\r\n }\r\n if (newOptions.dotsOptions.gradient) {\r\n newOptions.dotsOptions.gradient = sanitizeGradient(newOptions.dotsOptions.gradient)\r\n }\r\n // Ensure integer dot size\r\n newOptions.dotsOptions.size = Math.round(Math.max(0, newOptions.dotsOptions.size) || 10)\r\n\r\n if (newOptions.cornersSquareOptions) {\r\n newOptions.cornersSquareOptions = {\r\n ...newOptions.cornersSquareOptions\r\n }\r\n if (newOptions.cornersSquareOptions.gradient) {\r\n newOptions.cornersSquareOptions.gradient = sanitizeGradient(newOptions.cornersSquareOptions.gradient)\r\n }\r\n }\r\n\r\n if (newOptions.cornersDotOptions) {\r\n newOptions.cornersDotOptions = {\r\n ...newOptions.cornersDotOptions\r\n }\r\n if (newOptions.cornersDotOptions.gradient) {\r\n newOptions.cornersDotOptions.gradient = sanitizeGradient(newOptions.cornersDotOptions.gradient)\r\n }\r\n }\r\n\r\n if (newOptions.backgroundOptions) {\r\n newOptions.backgroundOptions = {\r\n ...newOptions.backgroundOptions\r\n }\r\n if (newOptions.backgroundOptions.gradient) {\r\n newOptions.backgroundOptions.gradient = sanitizeGradient(newOptions.backgroundOptions.gradient)\r\n }\r\n }\r\n\r\n if (!newOptions.document) newOptions.document = document\r\n\r\n return newOptions\r\n}\r\n","import { ErrorCorrectionLevel, Mode } from '@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js'\r\n\r\nexport const ErrorCorrectionPercents = {\r\n [ErrorCorrectionLevel.L]: 0.07,\r\n [ErrorCorrectionLevel.M]: 0.15,\r\n [ErrorCorrectionLevel.Q]: 0.25,\r\n [ErrorCorrectionLevel.H]: 0.3\r\n}\r\n\r\nexport function getMode(data: string): Mode {\r\n switch (true) {\r\n case /^[0-9]*$/.test(data):\r\n return Mode.numeric\r\n case /^[0-9A-Z $%*+\\-./:]*$/.test(data):\r\n return Mode.alphanumeric\r\n\r\n case /[^\\u0000-\\u00ff]/.test(data):\r\n return Mode.unicode\r\n default:\r\n return Mode.byte\r\n }\r\n}\r\n","const rx = /\\.?0+$/\r\n\r\nexport function numToAttr(value: number) {\r\n return value.toFixed(7).replace(rx, '')\r\n}\r\n\r\nexport function svgPath(strings: TemplateStringsArray, ...values: unknown[]) {\r\n return strings\r\n .reduce((t, v, i) => {\r\n let p: unknown = ''\r\n if (i) p = values[i - 1]\r\n if (typeof p == 'number') p = numToAttr(p)\r\n return `${t}${p}${v}`\r\n }, '')\r\n .trim()\r\n .replace(/[\\s\\n\\r]+/gim, ' ')\r\n}\r\n","import { BasicFigureDrawArgs, DrawArgs, RotateFigureArgs } from '../types/helper.js'\r\nimport { CornerDotType } from '../utils/options.js'\r\nimport { numToAttr, svgPath } from '../utils/svg.js'\r\n\r\nexport class QRCornerDot {\r\n private _element?: SVGElement\r\n\r\n get element() {\r\n return this._element\r\n }\r\n\r\n constructor(\r\n private readonly type: `${CornerDotType}`,\r\n private readonly document: Document\r\n ) {}\r\n\r\n draw(args: DrawArgs): void {\r\n const type = this.type\r\n let drawFunction\r\n\r\n switch (type) {\r\n case CornerDotType.square:\r\n drawFunction = this.drawSquare\r\n break\r\n case CornerDotType.heart:\r\n drawFunction = this.drawHeart\r\n break\r\n case CornerDotType.extraRounded:\r\n drawFunction = this.drawRounded\r\n break\r\n case CornerDotType.classy:\r\n drawFunction = this.drawClassy\r\n break\r\n case CornerDotType.inpoint:\r\n drawFunction = this.drawInpoint\r\n break\r\n case CornerDotType.outpoint:\r\n drawFunction = this.drawOutpoint\r\n break\r\n case CornerDotType.dot:\r\n default:\r\n drawFunction = this.drawDot\r\n }\r\n\r\n drawFunction.call(this, args)\r\n }\r\n\r\n private rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\r\n const cx = x + size / 2\r\n const cy = y + size / 2\r\n\r\n draw()\r\n this._element?.setAttribute('transform', `rotate(${numToAttr((180 * rotation) / Math.PI)},${cx},${cy})`)\r\n }\r\n\r\n private basicDot(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'circle')\r\n this._element.setAttribute('cx', numToAttr(x + size / 2))\r\n this._element.setAttribute('cy', numToAttr(y + size / 2))\r\n this._element.setAttribute('r', numToAttr(size / 2))\r\n }\r\n })\r\n }\r\n\r\n private basicSquare(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'rect')\r\n this._element.setAttribute('x', numToAttr(x))\r\n this._element.setAttribute('y', numToAttr(y))\r\n this._element.setAttribute('width', numToAttr(size))\r\n this._element.setAttribute('height', numToAttr(size))\r\n }\r\n })\r\n }\r\n\r\n private basicHeart(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n const path = [\r\n 'M',\r\n 1,\r\n 0.3262506,\r\n 'c',\r\n 0,\r\n 0.0383376,\r\n -0.0064626,\r\n 0.0758377,\r\n -0.0193751,\r\n 0.1125001,\r\n 's',\r\n -0.0356247,\r\n 0.076875,\r\n -0.0681248,\r\n 0.1206252,\r\n 'c',\r\n -0.0325,\r\n 0.0437499,\r\n -0.0762503,\r\n 0.0931247,\r\n -0.1312501,\r\n 0.1481249,\r\n 'C',\r\n 0.7262502,\r\n 0.7625008,\r\n 0.6566626,\r\n 0.8279132,\r\n 0.5724999,\r\n 0.9037505,\r\n 'L',\r\n 0.5,\r\n 0.9687506,\r\n 'L',\r\n 0.4275001,\r\n 0.9037505,\r\n 'C',\r\n 0.3433374,\r\n 0.8279132,\r\n 0.2737499,\r\n 0.7625005,\r\n 0.21875,\r\n 0.7075007,\r\n 'C',\r\n 0.1637501,\r\n 0.6525008,\r\n 0.1199999,\r\n 0.6031258,\r\n 0.0874999,\r\n 0.5593758,\r\n 'S',\r\n 0.0322876,\r\n 0.4754133,\r\n 0.0193751,\r\n 0.4387506,\r\n 'S',\r\n 0,\r\n 0.3645881,\r\n 0,\r\n 0.3262506,\r\n 'c',\r\n 0,\r\n -0.0783374,\r\n 0.0262499,\r\n -0.1437498,\r\n 0.07875,\r\n -0.1962499,\r\n 's',\r\n 0.1179124,\r\n -0.07875,\r\n 0.1962499,\r\n -0.07875,\r\n 'c',\r\n 0.0433376,\r\n 0,\r\n 0.0845875,\r\n 0.0091625,\r\n 0.12375,\r\n 0.0274999,\r\n 'S',\r\n 0.4716623,\r\n 0.1229131,\r\n 0.5,\r\n 0.1562506,\r\n 'c',\r\n 0.0283374,\r\n -0.0333375,\r\n 0.0620874,\r\n -0.0591625,\r\n 0.1012502,\r\n -0.0775,\r\n 'c',\r\n 0.0391627,\r\n -0.0183375,\r\n 0.0804126,\r\n -0.0274999,\r\n 0.12375,\r\n -0.0274999,\r\n 'c',\r\n 0.0783374,\r\n 0,\r\n 0.1437497,\r\n 0.0262499,\r\n 0.1962501,\r\n 0.07875,\r\n 'S',\r\n 1,\r\n 0.2479131,\r\n 1,\r\n 0.3262506,\r\n 'z'\r\n ]\r\n let move = false\r\n let i = 0\r\n this._element.setAttribute(\r\n 'd',\r\n path\r\n .map((v) => {\r\n if (typeof v == 'string') {\r\n i = 0\r\n move = v.toUpperCase() == v\r\n return v\r\n }\r\n i++\r\n v = v * size\r\n if (move) {\r\n v += i % 2 == 1 ? x : y\r\n }\r\n return numToAttr(v)\r\n })\r\n .join(' ')\r\n )\r\n }\r\n\r\n private basicRounded(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'rect')\r\n this._element.setAttribute('x', numToAttr(x))\r\n this._element.setAttribute('y', numToAttr(y))\r\n this._element.setAttribute('width', numToAttr(size))\r\n this._element.setAttribute('height', numToAttr(size))\r\n this._element.setAttribute('rx', numToAttr(size / 4))\r\n this._element.setAttribute('ry', numToAttr(size / 4))\r\n }\r\n })\r\n }\r\n\r\n private basicClassy(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n const dotSize = size / 7\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._element.setAttribute('clip-rule', 'evenodd')\r\n this._element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y + 2.5 * dotSize}\r\n v ${2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}\r\n h ${4.5 * dotSize}\r\n v ${-4.5 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}\r\n h ${-2 * dotSize}\r\n H ${x}\r\n z`\r\n )\r\n }\r\n })\r\n }\r\n\r\n private basicInpoint(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n const dotSize = size\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._element.setAttribute('clip-rule', 'evenodd')\r\n this._element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y + dotSize / 2}\r\n v ${dotSize / 4}\r\n a ${dotSize / 4}, ${dotSize / 4} 0 0 0 ${dotSize / 4}, ${dotSize / 4}\r\n h ${(dotSize / 4) * 3}\r\n v ${(-dotSize / 4) * 3}\r\n a ${dotSize / 4}, ${dotSize / 4} 0 0 0 ${-dotSize / 4}, ${-dotSize / 4}\r\n h ${-dotSize / 2}\r\n a ${dotSize / 4}, ${dotSize / 4} 0 0 0 ${-dotSize / 4}, ${dotSize / 4}\r\n z`\r\n )\r\n }\r\n })\r\n }\r\n\r\n private drawDot({ x, y, size, rotation }: DrawArgs): void {\r\n this.basicDot({ x, y, size, rotation })\r\n }\r\n\r\n private drawSquare({ x, y, size, rotation }: DrawArgs): void {\r\n this.basicSquare({ x, y, size, rotation })\r\n }\r\n\r\n private drawHeart({ x, y, size, rotation }: DrawArgs): void {\r\n this.basicHeart({ x, y, size, rotation })\r\n }\r\n\r\n private drawRounded({ x, y, size, rotation }: DrawArgs): void {\r\n this.basicRounded({ x, y, size, rotation })\r\n }\r\n\r\n private drawClassy({ x, y, size, rotation }: DrawArgs): void {\r\n this.basicClassy({ x, y, size, rotation })\r\n }\r\n\r\n private drawInpoint({ x, y, size, rotation }: DrawArgs): void {\r\n this.basicInpoint({ x, y, size, rotation })\r\n }\r\n\r\n private drawOutpoint({ x, y, size, rotation }: DrawArgs): void {\r\n this.basicInpoint({ x, y, size, rotation: (rotation || 0) + Math.PI })\r\n }\r\n}\r\n","import { BasicFigureDrawArgs, DrawArgs, RotateFigureArgs } from '../types/helper.js'\r\nimport { CornerSquareType } from '../utils/options.js'\r\nimport { numToAttr, svgPath } from '../utils/svg.js'\r\n\r\nexport class QRCornerSquare {\r\n private _element?: SVGElement\r\n private _fill?: SVGElement\r\n\r\n get element() {\r\n return this._element\r\n }\r\n\r\n get fill() {\r\n return this._fill\r\n }\r\n\r\n constructor(\r\n private readonly type: `${CornerSquareType}`,\r\n private readonly document: Document\r\n ) {}\r\n\r\n draw(args: DrawArgs): void {\r\n const type = this.type\r\n let drawFunction\r\n\r\n switch (type) {\r\n case CornerSquareType.square:\r\n drawFunction = this.drawSquare\r\n break\r\n case CornerSquareType.extraRounded:\r\n drawFunction = this.drawExtraRounded\r\n break\r\n case CornerSquareType.classy:\r\n drawFunction = this.drawClassy\r\n break\r\n case CornerSquareType.outpoint:\r\n drawFunction = this.drawOutpoint\r\n break\r\n case CornerSquareType.inpoint:\r\n drawFunction = this.drawInpoint\r\n break\r\n case CornerSquareType.dot:\r\n default:\r\n drawFunction = this.drawDot\r\n }\r\n\r\n drawFunction.call(this, args)\r\n }\r\n\r\n private rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\r\n const cx = x + size / 2\r\n const cy = y + size / 2\r\n\r\n draw()\r\n this._element?.setAttribute('transform', `rotate(${numToAttr((180 * rotation) / Math.PI)},${cx},${cy})`)\r\n this._fill?.setAttribute('transform', `rotate(${numToAttr((180 * rotation) / Math.PI)},${cx},${cy})`)\r\n }\r\n\r\n private basicDot(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n const dotSize = size / 7\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._element.setAttribute('clip-rule', 'evenodd')\r\n this._element.setAttribute(\r\n 'd',\r\n svgPath`M ${x + size / 2} ${y}\r\n a ${size / 2} ${size / 2} 0 1 0 0.1 0\r\n z\r\n m 0 ${dotSize}\r\n a ${size / 2 - dotSize} ${size / 2 - dotSize} 0 1 1 -0.1 0\r\n Z`\r\n )\r\n this._fill = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._fill.setAttribute('clip-rule', 'evenodd')\r\n this._fill.setAttribute(\r\n 'd',\r\n svgPath`M ${x + size / 2} ${y - dotSize}\r\n a ${size / 2 + dotSize} ${size / 2 + dotSize} 0 1 0 0.1 0\r\n z`\r\n )\r\n }\r\n })\r\n }\r\n\r\n private basicSquare(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n const dotSize = size / 7\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._element.setAttribute('clip-rule', 'evenodd')\r\n this._element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y}\r\n v ${size}\r\n h ${size}\r\n v ${-size}\r\n z\r\n M ${x + dotSize} ${y + dotSize}\r\n h ${size - 2 * dotSize}\r\n v ${size - 2 * dotSize}\r\n h ${-size + 2 * dotSize}\r\n z`\r\n )\r\n this._fill = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._fill.setAttribute('clip-rule', 'evenodd')\r\n this._fill.setAttribute(\r\n 'd',\r\n svgPath`\r\n M ${x - dotSize} ${y - dotSize}\r\n h ${size + 2 * dotSize}\r\n v ${size + 2 * dotSize}\r\n h ${-size - 2 * dotSize}\r\n z`\r\n )\r\n }\r\n })\r\n }\r\n\r\n private basicExtraRounded(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n const dotSize = size / 7\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._element.setAttribute('clip-rule', 'evenodd')\r\n this._element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y + 2.5 * dotSize}\r\n v ${2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}\r\n h ${2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${-dotSize * 2.5}\r\n v ${-2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}\r\n h ${-2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${dotSize * 2.5}\r\n z\r\n M ${x + 2.5 * dotSize} ${y + dotSize}\r\n h ${2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}\r\n v ${2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${dotSize * 1.5}\r\n h ${-2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}\r\n v ${-2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${-dotSize * 1.5}\r\n z`\r\n )\r\n this._fill = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._fill.setAttribute('clip-rule', 'evenodd')\r\n this._fill.setAttribute(\r\n 'd',\r\n svgPath`\r\n M ${x - dotSize} ${y + 2.5 * dotSize}\r\n v ${2 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 0, ${dotSize * 3.5} ${dotSize * 3.5}\r\n h ${2 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 0, ${dotSize * 3.5} ${-dotSize * 3.5}\r\n v ${-2 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 0, ${-dotSize * 3.5} ${-dotSize * 3.5}\r\n h ${-2 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 0, ${-dotSize * 3.5} ${dotSize * 3.5}\r\n z`\r\n )\r\n }\r\n })\r\n }\r\n\r\n private basicClassy(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n const dotSize = size / 7\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._element.setAttribute('clip-rule', 'evenodd')\r\n this._element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y + 2.5 * dotSize}\r\n v ${2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}\r\n h ${4.5 * dotSize}\r\n v ${-4.5 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}\r\n h ${-2 * dotSize}\r\n H ${x}\r\n z\r\n M ${x + 2.5 * dotSize} ${y + dotSize}\r\n h ${2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}\r\n v ${3.5 * dotSize}\r\n h ${-3.5 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}\r\n v ${-3.5 * dotSize}\r\n z`\r\n )\r\n this._fill = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._fill.setAttribute('clip-rule', 'evenodd')\r\n this._fill.setAttribute(\r\n 'd',\r\n svgPath`\r\n M ${x + 0.5 * dotSize} ${y - dotSize}\r\n h ${4 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${dotSize * 3.5} ${dotSize * 3.5}\r\n v ${5.5 * dotSize}\r\n h ${-5.5 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${-dotSize * 3.5} ${-dotSize * 3.5}\r\n v ${-5.5 * dotSize}\r\n z`\r\n )\r\n }\r\n })\r\n }\r\n\r\n private basicInpoint(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n const dotSize = size / 7\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._element.setAttribute('clip-rule', 'evenodd')\r\n this._element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y + 2.5 * dotSize}\r\n v ${2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}\r\n h ${4.5 * dotSize}\r\n v ${-4.5 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}\r\n h ${-2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${dotSize * 2.5}\r\n z\r\n M ${x + 2.5 * dotSize} ${y + dotSize}\r\n h ${2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}\r\n v ${3.5 * dotSize}\r\n h ${-3.5 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}\r\n v ${-2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${-dotSize * 1.5}\r\n z`\r\n )\r\n this._fill = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._fill.setAttribute('clip-rule', 'evenodd')\r\n this._fill.setAttribute(\r\n 'd',\r\n svgPath`\r\n M ${x + 0.5 * dotSize} ${y - dotSize}\r\n h ${4 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${dotSize * 3.5} ${dotSize * 3.5}\r\n v ${5.5 * dotSize}\r\n h ${-5.5 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${-dotSize * 3.5} ${-dotSize * 3.5}\r\n v ${-2 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${dotSize * 3.5} ${-dotSize * 3.5}\r\n z`\r\n )\r\n }\r\n })\r\n }\r\n\r\n private drawDot({ x, y, size, rotation }: DrawArgs): void {\r\n this.basicDot({ x, y, size, rotation })\r\n }\r\n\r\n private drawSquare({ x, y, size, rotation }: DrawArgs): void {\r\n this.basicSquare({ x, y, size, rotation })\r\n }\r\n\r\n private drawExtraRounded({ x, y, size, rotation }: DrawArgs): void {\r\n this.basicExtraRounded({ x, y, size, rotation })\r\n }\r\n\r\n private drawClassy({ x, y, size, rotation }: DrawArgs): void {\r\n this.basicClassy({ x, y, size, rotation })\r\n }\r\n\r\n private drawInpoint({ x, y, size, rotation }: DrawArgs): void {\r\n this.basicInpoint({ x, y, size, rotation })\r\n }\r\n\r\n private drawOutpoint({ x, y, size, rotation }: DrawArgs): void {\r\n this.basicInpoint({ x, y, size, rotation: (rotation || 0) + Math.PI })\r\n }\r\n}\r\n","import { BasicFigureDrawArgs, DrawArgs, RotateFigureArgs } from '../types/helper.js'\r\nimport { DotType } from '../utils/options.js'\r\nimport { numToAttr, svgPath } from '../utils/svg.js'\r\n\r\nexport class QRDot {\r\n private _element?: SVGElement\r\n\r\n get element() {\r\n return this._element\r\n }\r\n\r\n constructor(\r\n private readonly type: `${DotType}`,\r\n private readonly document: Document\r\n ) {}\r\n\r\n draw(args: DrawArgs): void {\r\n const type = this.type\r\n let drawFunction\r\n\r\n switch (type) {\r\n case DotType.dot:\r\n drawFunction = this.drawDot\r\n break\r\n case DotType.randomDot:\r\n drawFunction = this.drawRandomDot\r\n break\r\n case DotType.classy:\r\n drawFunction = this.drawClassy\r\n break\r\n case DotType.classyRounded:\r\n drawFunction = this.drawClassyRounded\r\n break\r\n case DotType.rounded:\r\n drawFunction = this.drawRounded\r\n break\r\n case DotType.verticalLine:\r\n drawFunction = this.drawVerticalLine\r\n break\r\n case DotType.horizontalLine:\r\n drawFunction = this.drawHorizontalLine\r\n break\r\n case DotType.extraRounded:\r\n drawFunction = this.drawExtraRounded\r\n break\r\n case DotType.diamond:\r\n drawFunction = this.drawDiamond\r\n break\r\n case DotType.smallSquare:\r\n drawFunction = this.drawSmallSquare\r\n break\r\n case DotType.tinySquare:\r\n drawFunction = this.drawTinySquare\r\n break\r\n case DotType.square:\r\n default:\r\n drawFunction = this.drawSquare\r\n }\r\n\r\n drawFunction.call(this, args)\r\n }\r\n\r\n private rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\r\n const cx = x + size / 2\r\n const cy = y + size / 2\r\n\r\n draw()\r\n this._element?.setAttribute('transform', `rotate(${numToAttr((180 * rotation) / Math.PI)},${cx},${cy})`)\r\n }\r\n\r\n private basicDot(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'circle')\r\n this._element.setAttribute('cx', numToAttr(x + size / 2))\r\n this._element.setAttribute('cy', numToAttr(y + size / 2))\r\n this._element.setAttribute('r', numToAttr(size / 2))\r\n }\r\n })\r\n }\r\n\r\n private basicSquare(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'rect')\r\n this._element.setAttribute('x', numToAttr(x))\r\n this._element.setAttribute('y', numToAttr(y))\r\n this._element.setAttribute('width', numToAttr(size))\r\n this._element.setAttribute('height', numToAttr(size))\r\n }\r\n })\r\n }\r\n\r\n //if rotation === 0 - right side is rounded\r\n private basicSideRounded(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y}\r\n v ${size}\r\n h ${size / 2}\r\n a ${size / 2} ${size / 2}, 0, 0, 0, 0 ${-size}\r\n z`\r\n )\r\n }\r\n })\r\n }\r\n\r\n //if rotation === 0 - top right corner is rounded\r\n private basicCornerRounded(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y}\r\n v ${size}\r\n h ${size}\r\n v ${-size / 2}\r\n a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}\r\n z`\r\n )\r\n }\r\n })\r\n }\r\n\r\n //if rotation === 0 - top right corner is rounded\r\n private basicCornerExtraRounded(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y}\r\n v ${size}\r\n h ${size}\r\n a ${size} ${size}, 0, 0, 0, ${-size} ${-size}\r\n z`\r\n )\r\n }\r\n })\r\n }\r\n\r\n //if rotation === 0 - left bottom and right top corners are rounded\r\n private basicCornersRounded(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y}\r\n v ${size / 2}\r\n a ${size / 2} ${size / 2}, 0, 0, 0, ${size / 2} ${size / 2}\r\n h ${size / 2}\r\n v ${-size / 2}\r\n a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}\r\n z`\r\n )\r\n }\r\n })\r\n }\r\n\r\n private drawDot({ x, y, size }: DrawArgs): void {\r\n this.basicDot({ x, y, size, rotation: 0 })\r\n }\r\n\r\n private drawRandomDot({ x, y, size }: DrawArgs): void {\r\n const randomFactor = Math.random() * (1 - 0.75) + 0.75\r\n this.basicDot({ x, y, size: size * randomFactor, rotation: 0 })\r\n }\r\n\r\n private drawSquare({ x, y, size }: DrawArgs): void {\r\n this.basicSquare({ x, y, size, rotation: 0 })\r\n }\r\n\r\n private drawSmallSquare({ x, y, size }: DrawArgs): void {\r\n const originalSize = size\r\n\r\n size = originalSize * 0.7\r\n x = x + originalSize * 0.15\r\n y = y + originalSize * 0.15\r\n\r\n this.basicSquare({ x, y, size, rotation: 0 })\r\n }\r\n\r\n private drawTinySquare({ x, y, size }: DrawArgs): void {\r\n const originalSize = size\r\n\r\n size = originalSize * 0.3\r\n x = x + originalSize * 0.35\r\n y = y + originalSize * 0.35\r\n\r\n this.basicSquare({ x, y, size, rotation: 0 })\r\n }\r\n\r\n private drawDiamond({ x, y, size }: DrawArgs): void {\r\n this.basicSquare({ x, y, size, rotation: Math.PI / 4 })\r\n }\r\n\r\n private drawRounded({ x, y, size, getNeighbor }: DrawArgs): void {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor\r\n\r\n if (neighborsCount === 0) {\r\n this.basicDot({ x, y, size, rotation: 0 })\r\n return\r\n }\r\n\r\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\r\n this.basicSquare({ x, y, size, rotation: 0 })\r\n return\r\n }\r\n\r\n if (neighborsCount === 2) {\r\n let rotation = 0\r\n\r\n if (leftNeighbor && topNeighbor) {\r\n rotation = Math.PI / 2\r\n } else if (topNeighbor && rightNeighbor) {\r\n rotation = Math.PI\r\n } else if (rightNeighbor && bottomNeighbor) {\r\n rotation = -Math.PI / 2\r\n }\r\n\r\n this.basicCornerRounded({ x, y, size, rotation })\r\n return\r\n }\r\n\r\n if (neighborsCount === 1) {\r\n let rotation = 0\r\n\r\n if (topNeighbor) {\r\n rotation = Math.PI / 2\r\n } else if (rightNeighbor) {\r\n rotation = Math.PI\r\n } else if (bottomNeighbor) {\r\n rotation = -Math.PI / 2\r\n }\r\n\r\n this.basicSideRounded({ x, y, size, rotation })\r\n return\r\n }\r\n }\r\n\r\n private drawVerticalLine({ x, y, size, getNeighbor }: DrawArgs): void {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor\r\n\r\n if (\r\n neighborsCount === 0 ||\r\n (leftNeighbor && !(topNeighbor || bottomNeighbor)) ||\r\n (rightNeighbor && !(topNeighbor || bottomNeighbor))\r\n ) {\r\n this.basicDot({ x, y, size, rotation: 0 })\r\n return\r\n }\r\n\r\n if (topNeighbor && bottomNeighbor) {\r\n this.basicSquare({ x, y, size, rotation: 0 })\r\n return\r\n }\r\n\r\n if (topNeighbor && !bottomNeighbor) {\r\n const rotation = Math.PI / 2\r\n this.basicSideRounded({ x, y, size, rotation })\r\n return\r\n }\r\n\r\n if (bottomNeighbor && !topNeighbor) {\r\n const rotation = -Math.PI / 2\r\n this.basicSideRounded({ x, y, size, rotation })\r\n return\r\n }\r\n }\r\n\r\n private drawHorizontalLine({ x, y, size, getNeighbor }: DrawArgs): void {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor\r\n\r\n if (\r\n neighborsCount === 0 ||\r\n (topNeighbor && !(leftNeighbor || rightNeighbor)) ||\r\n (bottomNeighbor && !(leftNeighbor || rightNeighbor))\r\n ) {\r\n this.basicDot({ x, y, size, rotation: 0 })\r\n return\r\n }\r\n\r\n if (leftNeighbor && rightNeighbor) {\r\n this.basicSquare({ x, y, size, rotation: 0 })\r\n return\r\n }\r\n\r\n if (leftNeighbor && !rightNeighbor) {\r\n const rotation = 0\r\n this.basicSideRounded({ x, y, size, rotation })\r\n return\r\n }\r\n\r\n if (rightNeighbor && !leftNeighbor) {\r\n const rotation = Math.PI\r\n this.basicSideRounded({ x, y, size, rotation })\r\n return\r\n }\r\n }\r\n\r\n private drawExtraRounded({ x, y, size, getNeighbor }: DrawArgs): void {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor\r\n\r\n if (neighborsCount === 0) {\r\n this.basicDot({ x, y, size, rotation: 0 })\r\n return\r\n }\r\n\r\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\r\n this.basicSquare({ x, y, size, rotation: 0 })\r\n return\r\n }\r\n\r\n if (neighborsCount === 2) {\r\n let rotation = 0\r\n\r\n if (leftNeighbor && topNeighbor) {\r\n rotation = Math.PI / 2\r\n } else if (topNeighbor && rightNeighbor) {\r\n rotation = Math.PI\r\n } else if (rightNeighbor && bottomNeighbor) {\r\n rotation = -Math.PI / 2\r\n }\r\n\r\n this.basicCornerExtraRounded({ x, y, size, rotation })\r\n return\r\n }\r\n\r\n if (neighborsCount === 1) {\r\n let rotation = 0\r\n\r\n if (topNeighbor) {\r\n rotation = Math.PI / 2\r\n } else if (rightNeighbor) {\r\n rotation = Math.PI\r\n } else if (bottomNeighbor) {\r\n rotation = -Math.PI / 2\r\n }\r\n\r\n this.basicSideRounded({ x, y, size, rotation })\r\n return\r\n }\r\n }\r\n\r\n private drawClassy({ x, y, size, getNeighbor }: DrawArgs): void {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor\r\n\r\n if (neighborsCount === 0) {\r\n this.basicCornersRounded({ x, y, size, rotation: Math.PI / 2 })\r\n return\r\n }\r\n\r\n if (!leftNeighbor && !topNeighbor) {\r\n this.basicCornerRounded({ x, y, size, rotation: -Math.PI / 2 })\r\n return\r\n }\r\n\r\n if (!rightNeighbor && !bottomNeighbor) {\r\n this.basicCornerRounded({ x, y, size, rotation: Math.PI / 2 })\r\n return\r\n }\r\n\r\n this.basicSquare({ x, y, size, rotation: 0 })\r\n }\r\n\r\n private drawClassyRounded({ x, y, size, getNeighbor }: DrawArgs): void {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor\r\n\r\n if (neighborsCount === 0) {\r\n this.basicCornersRounded({ x, y, size, rotation: Math.PI / 2 })\r\n return\r\n }\r\n\r\n if (!leftNeighbor && !topNeighbor) {\r\n this.basicCornerExtraRounded({ x, y, size, rotation: -Math.PI / 2 })\r\n return\r\n }\r\n\r\n if (!rightNeighbor && !bottomNeighbor) {\r\n this.basicCornerExtraRounded({ x, y, size, rotation: Math.PI / 2 })\r\n return\r\n }\r\n\r\n this.basicSquare({ x, y, size, rotation: 0 })\r\n }\r\n}\r\n","export const browserImageTools = {\r\n toDataURL: (url: string | Buffer | Blob): Promise<string> => {\r\n if (typeof url == 'string' && url.startsWith('data:')) return Promise.resolve(url)\r\n return new Promise((resolve, reject) => {\r\n if (typeof url == 'string') {\r\n const xhr = new XMLHttpRequest()\r\n xhr.onload = () => {\r\n const reader = new FileReader()\r\n reader.onloadend = () => {\r\n resolve(reader.result as string)\r\n }\r\n reader.readAsDataURL(xhr.response)\r\n }\r\n xhr.onerror = xhr.onabort = xhr.ontimeout = reject\r\n xhr.open('GET', url, true)\r\n xhr.responseType = 'blob'\r\n xhr.send()\r\n } else {\r\n const reader = new FileReader()\r\n reader.onloadend = () => {\r\n resolve(reader.result as string)\r\n }\r\n reader.readAsDataURL(url as Blob)\r\n }\r\n })\r\n },\r\n getSize: (src: string | Blob | Buffer, crossOrigin?: string): Promise<{ width: number, height: number }> => new Promise((resolve, reject) => {\r\n const image = new Image()\r\n\r\n if (crossOrigin === 'string') {\r\n image.crossOrigin = crossOrigin\r\n }\r\n\r\n image.onload = (): void => {\r\n resolve({ width: image.width, height: image.height })\r\n }\r\n image.onerror = image.onabort = reject\r\n\r\n if (typeof src == 'string') image.src = src\r\n else\r\n browserImageTools\r\n .toDataURL(src)\r\n .then((url) => (image.src = url))\r\n .catch(reject)\r\n })\r\n}\r\n","export function parseColor(cstr: string) {\r\n let m: RegExpExecArray | null\r\n let parts: string[] | number[] = []\r\n let alpha = 1\r\n\r\n cstr = cstr.toLowerCase()\r\n\r\n if (cstr[0] === '#') {\r\n const base = cstr.slice(1)\r\n const size = base.length\r\n const isShort = size <= 4\r\n\r\n if (isShort) {\r\n parts = [parseInt(base[0] + base[0], 16), parseInt(base[1] + base[1], 16), parseInt(base[2] + base[2], 16)]\r\n if (size === 4) {\r\n alpha = parseInt(base[3] + base[3], 16) / 255\r\n }\r\n } else {\r\n parts = [parseInt(base[0] + base[1], 16), parseInt(base[2] + base[3], 16), parseInt(base[4] + base[5], 16)]\r\n if (size === 8) {\r\n alpha = parseInt(base[6] + base[7], 16) / 255\r\n }\r\n }\r\n\r\n if (!parts[0]) parts[0] = 0\r\n if (!parts[1]) parts[1] = 0\r\n if (!parts[2]) parts[2] = 0\r\n } else if ((m = /^((?:rgba?))\\s*\\(([^)]*)\\)/.exec(cstr))) {\r\n const dims = 3\r\n parts = m[2].trim().split(/\\s*[,/]\\s*|\\s+/)\r\n\r\n parts = parts.map((x, i) => {\r\n if (x[x.length - 1] === '%') {\r\n const v = parseFloat(x) / 100\r\n if (i === 3) return v\r\n return v * 255\r\n }\r\n\r\n if (x === 'none') return 0\r\n return parseFloat(x)\r\n })\r\n\r\n alpha = parts.length > dims ? parts.pop()! : 1\r\n } else {\r\n return {\r\n value: cstr,\r\n alpha\r\n }\r\n }\r\n\r\n const value = '#' + parts.map((v) => Math.max(0, Math.min(255, v)).toString(16).padStart(2, '0')).join('')\r\n return {\r\n value,\r\n alpha: Math.max(0, Math.min(1, alpha))\r\n }\r\n}\r\n","import { QRCodeMinimal } from '@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js'\r\nimport { QRUtil } from '@liquid-js/qrcode-generator/lib/qrcode/QRUtil.js'\r\nimport { QRCornerDot } from '../figures/corner-dot.js'\r\nimport { QRCornerSquare } from '../figures/corner-square.js'\r\nimport { QRDot } from '../figures/dot.js'\r\nimport { browserImageTools } from '../tools/browser-image-tools.js'\r\nimport { parseColor } from '../utils/color.js'\r\nimport { Gradient, GradientType } from '../utils/gradient.js'\r\nimport { calculateImageSize } from '../utils/image.js'\r\nimport { DotType, ImageMode, Options, ShapeType } from '../utils/options.js'\r\nimport { numToAttr } from '../utils/svg.js'\r\n\r\nconst squareMask = [\r\n [1, 1, 1, 1, 1, 1, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 1, 1, 1, 1, 1, 1]\r\n]\r\n\r\nconst dotMask = [\r\n [0, 0, 0, 0, 0, 0, 0],\r\n [0, 0, 0, 0, 0, 0, 0],\r\n [0, 0, 1, 1, 1, 0, 0],\r\n [0, 0, 1, 1, 1, 0, 0],\r\n [0, 0, 1, 1, 1, 0, 0],\r\n [0, 0, 0, 0, 0, 0, 0],\r\n [0, 0, 0, 0, 0, 0, 0]\r\n]\r\n\r\nexport class QRSVG {\r\n private _element: SVGElement\r\n\r\n get element() {\r\n return this._element\r\n }\r\n\r\n private defs: SVGElement\r\n\r\n private backgroundMask?: SVGElement\r\n private backgroundMaskGroup?: SVGElement\r\n\r\n private dotsMask?: SVGElement\r\n private dotsMaskGroup?: SVGElement\r\n\r\n private lightDotsMask?: SVGElement\r\n private lightDotsMaskGroup?: SVGElement\r\n\r\n private qr?: QRCodeMinimal\r\n private document: Document\r\n private imageTools: typeof browserImageTools\r\n\r\n constructor(\r\n private options: Pick<\r\n Options,\r\n | 'width'\r\n | 'height'\r\n | 'document'\r\n | 'imageTools'\r\n | 'image'\r\n | 'imageOptions'\r\n | 'dotsOptions'\r\n | 'cornersDotOptions'\r\n | 'cornersSquareOptions'\r\n | 'backgroundOptions'\r\n | 'shape'\r\n > & { errorCorrectionPercent: number }\r\n ) {\r\n this.document = options.document\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'svg')\r\n const width = numToAttr(options.width)\r\n const height = numToAttr(options.height)\r\n this._element.setAttribute('width', width)\r\n this._element.setAttribute('height', height)\r\n this._element.setAttribute('viewBox', `0 0 ${width} ${height}`)\r\n this.defs = this.document.createElementNS('http://www.w3.org/2000/svg', 'defs')\r\n this._element.appendChild(this.defs)\r\n this.imageTools = options.imageTools || browserImageTools\r\n }\r\n\r\n get width(): number {\r\n return this.options.width\r\n }\r\n\r\n get height(): number {\r\n return this.options.height\r\n }\r\n\r\n async drawQR(qr: QRCodeMinimal): Promise<void> {\r\n const count = qr.getModuleCount()\r\n const typeNumber = parseInt(((count - 17) / 4).toFixed(0), 10)\r\n const dotSize = this.options.dotsOptions.size\r\n let drawImageSize = {\r\n hideXDots: 0,\r\n hideYDots: 0,\r\n width: 0,\r\n height: 0\r\n }\r\n\r\n this.qr = qr\r\n\r\n if (this.options.image) {\r\n //We need it to get image size\r\n const size = await this.imageTools.getSize(this.options.image, this.options.imageOptions.crossOrigin)\r\n const { imageOptions, errorCorrectionPercent } = this.options\r\n\r\n if (imageOptions.mode == ImageMode.background) {\r\n const margin = (this.options.backgroundOptions && this.options.backgroundOptions.margin) || 0\r\n const maxWidth = (this.options.width - 2 * margin * dotSize) * imageOptions.imageSize\r\n const maxHeight = (this.options.height - 2 * margin * dotSize) * imageOptions.imageSize\r\n let { width, height } = size\r\n\r\n height = (height / width) * maxWidth\r\n width = maxWidth\r\n\r\n if (height > maxHeight) {\r\n width = (width / height) * maxHeight\r\n height = maxHeight\r\n }\r\n\r\n drawImageSize = {\r\n hideXDots: 0,\r\n hideYDots: 0,\r\n width,\r\n height\r\n }\r\n } else {\r\n const coverLevel = imageOptions.imageSize * errorCorrectionPercent\r\n const alignment = QRUtil.getPatternPosition(typeNumber)\r\n const maxHiddenDots = Math.floor(\r\n coverLevel * (count * count - 3 * 8 * 8 - 2 * (count - 16) - alignment.length ** 2 * 25)\r\n )\r\n\r\n drawImageSize = calculateImageSize({\r\n originalWidth: size.width,\r\n originalHeight: size.height,\r\n maxHiddenDots,\r\n maxHiddenAxisDots: count - 14,\r\n dotSize,\r\n margin: imageOptions.margin\r\n })\r\n }\r\n }\r\n\r\n this.drawBackground()\r\n\r\n if (\r\n this.options.imageOptions.mode != ImageMode.overlay &&\r\n this.options.image &&\r\n drawImageSize.width > 0 &&\r\n drawImageSize.height > 0\r\n ) {\r\n await this.drawImage({ width: drawImageSize.width, height: drawImageSize.height, count, dotSize })\r\n }\r\n\r\n this.drawDots((i: number, j: number): boolean => {\r\n if (this.options.imageOptions.mode == ImageMode.center) {\r\n if (\r\n i >= (count - drawImageSize.hideXDots) / 2 &&\r\n i < (count + drawImageSize.hideXDots) / 2 &&\r\n j >= (count - drawImageSize.hideYDots) / 2 &&\r\n j < (count + drawImageSize.hideYDots) / 2\r\n ) {\r\n return false\r\n }\r\n }\r\n\r\n if ((i < 8 && j < 8) || (i >= count - 8 && j < 8) || (j >= count - 8 && i < 8)) return false\r\n\r\n return true\r\n })\r\n\r\n if (\r\n this.options.imageOptions.mode == ImageMode.overlay &&\r\n this.options.image &&\r\n drawImageSize.width > 0 &&\r\n drawImageSize.height > 0\r\n ) {\r\n await this.drawImage({ width: drawImageSize.width, height: drawImageSize.height, count, dotSize })\r\n }\r\n\r\n this.drawCorners()\r\n }\r\n\r\n drawBackground(): void {\r\n const options = this.options\r\n\r\n if (this._element && options.backgroundOptions) {\r\n const gradientOptions = options.backgroundOptions.gradient\r\n const color = options.backgroundOptions.color\r\n\r\n this.createColor({\r\n options: gradientOptions,\r\n color,\r\n additionalRotation: 0,\r\n x: 0,\r\n y: 0,\r\n height: options.height,\r\n width: options.width,\r\n name: 'background-color'\r\n })\r\n\r\n const size = Math.min(options.width, options.height)\r\n const element = this.document.createElementNS('http://www.w3.org/2000/svg', 'rect');\r\n [this.backgroundMask, this.backgroundMaskGroup] = this.createMask('mask-background-color')\r\n this.defs.appendChild(this.backgroundMask)\r\n\r\n element.setAttribute('x', numToAttr((options.width - size) / 2))\r\n element.setAttribute('y', numToAttr((options.height - size) / 2))\r\n element.setAttribute('width', numToAttr(size))\r\n element.setAttribute('height', numToAttr(size))\r\n element.setAttribute('rx', numToAttr((size / 2) * (options.backgroundOptions.round || 0)))\r\n\r\n this.backgroundMaskGroup.appendChild(element)\r\n }\r\n }\r\n\r\n drawDots(filter?: (i: number, j: number) => boolean): void {\r\n if (!this.qr) {\r\n throw new Error('QR code is not defined')\r\n }\r\n\r\n const options = this.options\r\n const count = this.qr.getModuleCount()\r\n\r\n if (count > options.width || count > options.height) {\r\n throw new Error('The canvas is too small')\r\n }\r\n\r\n const dotSize = this.options.dotsOptions.size\r\n let minSize = Math.min(options.width, options.height)\r\n if (options.imageOptions.mode == ImageMode.background) minSize -= 2 * dotSize * (options.imageOptions.margin || 0)\r\n const xBeginning = Math.floor((options.width - count * dotSize) / 2)\r\n const yBeginning = Math.floor((options.height - count * dotSize) / 2)\r\n let dot = new QRDot(options.dotsOptions.type, this.document)\r\n const overlayDot = new QRDot(DotType.tinySquare, this.document)\r\n const markerDot = new QRDot(DotType.square, this.document);\r\n\r\n [this.dotsMask, this.dotsMaskGroup] = this.createMask('mask-dot-color')\r\n this.defs.appendChild(this.dotsMask)\r\n\r\n if (options.imageOptions.mode == ImageMode.background) {\r\n [this.lightDotsMask, this.lightDotsMaskGroup] = this.createMask('mask-light-dot-color')\r\n this.defs.appendChild(this.lightDotsMask)\r\n }\r\n\r\n let margin = 0\r\n let additionalDots = 0\r\n let fakeCount = count\r\n\r\n if (options.shape === ShapeType.circle) {\r\n margin = (this.options.backgroundOptions && this.options.backgroundOptions.margin) || 0\r\n additionalDots = Math.floor((minSize / dotSize - count - 2 * margin) / 2)\r\n fakeCount = count + additionalDots * 2\r\n } else if (options.imageOptions.mode == ImageMode.background) {\r\n additionalDots = 1\r\n fakeCount = count + additionalDots * 2\r\n }\r\n\r\n const xFakeBeginning = xBeginning - additionalDots * dotSize\r\n const yFakeBeginning = yBeginning - additionalDots * dotSize\r\n const colorX = xFakeBeginning\r\n const colorY = yFakeBeginning\r\n const colorCount = count + additionalDots * 2\r\n const fakeMatrix: Array<Array<boolean | undefined>> = new Array(fakeCount)\r\n const center = Math.floor(fakeCount / 2)\r\n\r\n for (let i = 0; i < fakeCount; i++) {\r\n fakeMatrix[i] = new Array(fakeCount)\r\n for (let j = 0; j < fakeCount; j++) {\r\n if (\r\n i > additionalDots - 1 &&\r\n i < fakeCount - additionalDots &&\r\n j > additionalDots - 1 &&\r\n j < fakeCount - additionalDots\r\n ) {\r\n const ii = i - additionalDots\r\n const jj = j - additionalDots\r\n if (filter && !filter(ii, jj)) fakeMatrix[i][j] = undefined\r\n else fakeMatrix[i][j] = !!this.qr.isDark(jj, ii)\r\n continue\r\n }\r\n\r\n if (\r\n options.shape === ShapeType.circle &&\r\n Math.sqrt((i - center) * (i - center) + (j - center) * (j - center)) > center\r\n ) {\r\n fakeMatrix[i][j] = undefined\r\n continue\r\n }\r\n\r\n if (\r\n i == additionalDots - 1 ||\r\n i == fakeCount - additionalDots ||\r\n j == additionalDots - 1 ||\r\n j == fakeCount - additionalDots\r\n ) {\r\n if (\r\n (j == additionalDots - 1 && (i < additionalDots + 8 || i > fakeCount - additionalDots - 9)) ||\r\n (j == fakeCount - additionalDots && i < additionalDots + 8) ||\r\n (i == additionalDots - 1 && (j < additionalDots + 8 || j > fakeCount - additionalDots - 9)) ||\r\n (i == fakeCount - additionalDots && j < additionalDots + 8)\r\n )\r\n fakeMatrix[i][j] = undefined\r\n else fakeMatrix[i][j] = false\r\n continue\r\n }\r\n\r\n // Get random dots from QR code to show it outside of QR code\r\n fakeMatrix[i][j] = this.qr.isDark(\r\n j - 2 * additionalDots < 0 ? j : j >= count ? j - 2 * additionalDots : j - additionalDots,\r\n i - 2 * additionalDots < 0 ? i : i >= count ? i - 2 * additionalDots : i - additionalDots\r\n )\r\n }\r\n }\r\n\r\n const typeNr = (count - 17) / 4\r\n const alignment = QRUtil.getPatternPosition(typeNr)\r\n\r\n for (let i = 0; i < fakeCount; i++) {\r\n const iAlign = alignment.find((v) => i - additionalDots > v - 3 && i - additionalDots < v + 3)\r\n for (let j = 0; j < fakeCount; j++) {\r\n const jAlign = alignment.find((v) => j - additionalDots > v - 3 && j - additionalDots < v + 3)\r\n if (fakeMatrix[i][j] == undefined) continue\r\n\r\n if (this.lightDotsMask) {\r\n dot =\r\n iAlign &&\r\n jAlign &&\r\n ((iAlign != alignment[0] && jAlign != alignment[0]) ||\r\n (jAlign != alignment[0] && jAlign != alignment[alignment.length - 1]) ||\r\n (iAlign != alignment[0] && iAlign != alignment[alignment.length - 1]))\r\n ? markerDot\r\n : overlayDot\r\n }\r\n\r\n if (!fakeMatrix[i][j]) {\r\n if (this.lightDotsMask) {\r\n dot.draw({\r\n x: xFakeBeginning + i * dotSize,\r\n y: yFakeBeginning + j * dotSize,\r\n size: dotSize,\r\n getNeighbor: (xOffset: number, yOffset: number): boolean => fakeMatrix[i + xOffset]?.[j + yOffset] === false\r\n })\r\n\r\n if (dot.element && this.lightDotsMaskGroup) {\r\n this.lightDotsMaskGroup.appendChild(dot.element)\r\n }\r\n }\r\n continue\r\n }\r\n\r\n dot.draw({\r\n x: xFakeBeginning + i * dotSize,\r\n y: yFakeBeginning + j * dotSize,\r\n size: dotSize,\r\n getNeighbor: (xOffset: number, yOffset: number): boolean => fakeMatrix[i + xOffset]?.[j + yOffset] === true\r\n })\r\n if (dot.element && this.dotsMaskGroup) {\r\n this.dotsMaskGroup.appendChild(dot.element)\r\n }\r\n }\r\n }\r\n\r\n if (this.lightDotsMask) {\r\n this.createColor({\r\n options: options.imageOptions.fill.gradient,\r\n color: options.imageOptions.fill.color,\r\n additionalRotation: 0,\r\n x: colorX,\r\n y: colorY,\r\n height: colorCount * dotSize,\r\n width: colorCount * dotSize,\r\n name: 'light-dot-color'\r\n })\r\n }\r\n\r\n this.createColor({\r\n options: options.dotsOptions?.gradient,\r\n color: options.dotsOptions.color,\r\n additionalRotation: 0,\r\n x: colorX,\r\n y: colorY,\r\n height: colorCount * dotSize,\r\n width: colorCount * dotSize,\r\n name: 'dot-color'\r\n })\r\n }\r\n\r\n drawCorners(): void {\r\n if (!this.qr) {\r\n throw new Error('QR code is not defined')\r\n }\r\n\r\n const element = this._element\r\n const options = this.options\r\n\r\n if (!element) {\r\n throw new Error('Element code is not defined')\r\n }\r\n\r\n const count = this.qr.getModuleCount()\r\n const dotSize = this.options.dotsOptions.size\r\n const cornersSquareSize = dotSize * 7\r\n const cornersDotSize = dotSize * 3\r\n const xBeginning = Math.floor((options.width - count * dotSize) / 2)\r\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\r\n\r\n [\r\n [0, 0, 0],\r\n [1, 0, Math.PI / 2],\r\n [0, 1, -Math.PI / 2]\r\n ].forEach(([column, row, rotation]) => {\r\n const x = xBeginning + column * dotSize * (count - 7)\r\n const y = yBeginning + row * dotSize * (count - 7)\r\n let cornersSquareMask = this.dotsMask\r\n let cornersSquareMaskGroup = this.dotsMaskGroup\r\n let cornersDotMask = this.dotsMask\r\n let cornersDotMaskGroup = this.dotsMaskGroup\r\n\r\n if (options.cornersSquareOptions?.gradient || options.cornersSquareOptions?.color) {\r\n [cornersSquareMask, cornersSquareMaskGroup] = this.createMask(`mask-corners-square-color-${column}-${row}`)\r\n this.defs.appendChild(cornersSquareMask)\r\n cornersDotMask = cornersSquareMask\r\n cornersDotMaskGroup = cornersSquareMaskGroup\r\n\r\n this.createColor({\r\n options: options.cornersSquareOptions?.gradient,\r\n color: options.cornersSquareOptions?.color,\r\n additionalRotation: rotation,\r\n x,\r\n y,\r\n height: cornersSquareSize,\r\n width: cornersSquareSize,\r\n name: `corners-square-color-${column}-${row}`\r\n })\r\n }\r\n\r\n if (options.cornersSquareOptions?.type) {\r\n const cornersSquare = new QRCornerSquare(options.cornersSquareOptions.type, this.document)\r\n\r\n cornersSquare.draw({\r\n x,\r\n y,\r\n size: cornersSquareSize,\r\n rotation\r\n })\r\n\r\n if (cornersSquare.element && cornersSquareMaskGroup) {\r\n cornersSquareMaskGroup.appendChild(cornersSquare.element)\r\n }\r\n\r\n if (cornersSquare.fill && this.lightDotsMaskGroup) {\r\n this.lightDotsMaskGroup.appendChild(cornersSquare.fill)\r\n }\r\n } else {\r\n const dot = new QRDot(options.dotsOptions.type, this.document)\r\n\r\n for (let i = 0; i < squareMask.length; i++) {\r\n for (let j = 0; j < squareMask[i].length; j++) {\r\n if (!squareMask[i]?.[j]) {\r\n if (this.lightDotsMask && !dotMask[i]?.[j]) {\r\n dot.draw({\r\n x: x + i * dotSize,\r\n y: y + j * dotSize,\r\n size: dotSize,\r\n getNeighbor: (xOffset: number, yOffset: number): boolean =>\r\n !squareMask[i + xOffset]?.[j + yOffset] && !dotMask[i + xOffset]?.[j + yOffset]\r\n })\r\n\r\n if (dot.element && this.lightDotsMaskGroup) {\r\n this.lightDotsMaskGroup.appendChild(dot.element)\r\n }\r\n }\r\n continue\r\n }\r\n\r\n dot.draw({\r\n x: x + i * dotSize,\r\n y: y + j * dotSize,\r\n size: dotSize,\r\n getNeighbor: (xOffset: number, yOffset: number): boolean => !!squareMask[i + xOffset]?.[j + yOffset]\r\n })\r\n\r\n if (dot.element && cornersSquareMaskGroup) {\r\n cornersSquareMaskGroup.appendChild(dot.element)\r\n }\r\n }\r\n }\r\n\r\n if (this.lightDotsMask)\r\n for (let i = -1; i < 8; i++) {\r\n for (let j = -1; j < 8; j++) {\r\n if (i == -1 || i == 7 || j == -1 || j == 7) {\r\n dot.draw({\r\n x: x + i * dotSize,\r\n y: y + j * dotSize,\r\n size: dotSize,\r\n getNeighbor: (xOffset: number, yOffset: number): boolean => {\r\n const ii = i + xOffset\r\n const jj = j + yOffset\r\n return ii >= -1 && ii <= 7 && jj >= -1 && jj <= 7 && (ii == -1 || ii == 7 || jj == -1 || jj == 7)\r\n }\r\n })\r\n\r\n if (dot.element && this.lightDotsMaskGroup) {\r\n this.lightDotsMaskGroup.appendChild(dot.element)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (options.cornersDotOptions?.gradient || options.cornersDotOptions?.color) {\r\n [cornersDotMask, cornersDotMaskGroup] = this.createMask(`mask-corners-dot-color-${column}-${row}`)\r\n this.defs.appendChild(cornersDotMask)\r\n\r\n this.createColor({\r\n options: options.cornersDotOptions?.gradient,\r\n color: options.cornersDotOptions?.color,\r\n additionalRotation: rotation,\r\n x: x + dotSize * 2,\r\n y: y + dotSize * 2,\r\n height: cornersDotSize,\r\n width: cornersDotSize,\r\n name: `corners-dot-color-${column}-${row}`\r\n })\r\n }\r\n\r\n if (options.cornersDotOptions?.type) {\r\n const cornersDot = new QRCornerDot(options.cornersDotOptions.type, this.document)\r\n\r\n cornersDot.draw({\r\n x: x + dotSize * 2,\r\n y: y + dotSize * 2,\r\n size: cornersDotSize,\r\n rotation\r\n })\r\n\r\n if (cornersDot.element && cornersDotMaskGroup) {\r\n cornersDotMaskGroup.appendChild(cornersDot.element)\r\n }\r\n } else {\r\n const dot = new QRDot(options.dotsOptions.type, this.document)\r\n\r\n for (let i = 0; i < dotMask.length; i++) {\r\n for (let j = 0; j < dotMask[i].length; j++) {\r\n if (!dotMask[i]?.[j]) {\r\n continue\r\n }\r\n\r\n dot.draw({\r\n x: x + i * dotSize,\r\n y: y + j * dotSize,\r\n size: dotSize,\r\n getNeighbor: (xOffset: number, yOffset: number): boolean => !!dotMask[i + xOffset]?.[j + yOffset]\r\n })\r\n\r\n if (dot.element && cornersDotMaskGroup) {\r\n cornersDotMaskGroup.appendChild(dot.element)\r\n }\r\n }\r\n }\r\n }\r\n })\r\n }\r\n\r\n async drawImage({\r\n width,\r\n height,\r\n count,\r\n dotSize\r\n }: {\r\n width: number\r\n height: number\r\n count: number\r\n dotSize: number\r\n }): Promise<void> {\r\n const options = this.options\r\n const xBeginning = Math.floor((options.width - count * dotSize) / 2)\r\n const yBeginning = Math.floor((options.height - count * dotSize) / 2)\r\n let margin = options.imageOptions.margin * dotSize\r\n if (options.imageOptions.mode == ImageMode.background) margin = 0\r\n const dx = xBeginning + margin + (count * dotSize - width) / 2\r\n const dy = yBeginning + margin + (count * dotSize - height) / 2\r\n const dw = width - margin * 2\r\n const dh = height - margin * 2\r\n\r\n const imageUrl = await this.imageTools.toDataURL(options.image || '')\r\n let image: SVGElement = this.document.createElementNS('http://www.w3.org/2000/svg', 'image')\r\n image.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', imageUrl || '')\r\n\r\n if (imageUrl.startsWith('data:image/svg+xml;')) {\r\n let data = imageUrl.substring(19)\r\n const i = data.indexOf(',')\r\n const encoding = data.substring(0, i)\r\n data = data.substring(i + 1)\r\n\r\n switch (encoding) {\r\n case 'base64':\r\n data = typeof atob == 'function' ? atob(data) : Buffer.from(data, 'base64').toString('utf8')\r\n break\r\n default:\r\n data = ''\r\n break\r\n }\r\n\r\n if (data) {\r\n const container = new DOMParser().parseFromString(data, 'text/xml')\r\n const rootEl = Array.from(container.getElementsByTagName('svg'))\r\n if (rootEl.length) {\r\n image = rootEl[0]\r\n image.setAttribute('overflow', 'visible')\r\n }\r\n }\r\n }\r\n\r\n image.setAttribute('x', numToAttr(dx))\r\n image.setAttribute('y', numToAttr(dy))\r\n image.setAttribute('width', `${numToAttr(dw)}px`)\r\n image.setAttribute('height', `${numToAttr(dh)}px`)\r\n\r\n this._element.appendChild(image)\r\n }\r\n\r\n private createColor({\r\n options,\r\n color,\r\n additionalRotation,\r\n x,\r\n y,\r\n height,\r\n width,\r\n name\r\n }: {\r\n options?: Gradient\r\n color?: string\r\n additionalRotation: number\r\n x: number\r\n y: number\r\n height: number\r\n width: number\r\n name: string\r\n }): void {\r\n const size = width > height ? width : height\r\n const rect = this.document.createElementNS('http://www.w3.org/2000/svg', 'rect')\r\n rect.setAttribute('x', numToAttr(x))\r\n rect.setAttribute('y', numToAttr(y))\r\n rect.setAttribute('height', numToAttr(height))\r\n rect.setAttribute('width', numToAttr(width))\r\n rect.setAttribute('style', `mask:url(#mask-${name})`)\r\n\r\n if (options) {\r\n let gradient: SVGElement\r\n if (options.type === GradientType.radial) {\r\n gradient = this.document.createElementNS('http://www.w3.org/2000/svg', 'radialGradient')\r\n gradient.setAttribute('id', name)\r\n gradient.setAttribute('gradientUnits', 'userSpaceOnUse')\r\n gradient.setAttribute('fx', numToAttr(x + width / 2))\r\n gradient.setAttribute('fy', numToAttr(y + height / 2))\r\n gradient.setAttribute('cx', numToAttr(x + width / 2))\r\n gradient.setAttribute('cy', numToAttr(y + height / 2))\r\n gradient.setAttribute('r', numToAttr(size / 2))\r\n } else {\r\n const rotation = ((options.rotation || 0) + additionalRotation) % (2 * Math.PI)\r\n const positiveRotation = (rotation + 2 * Math.PI) % (2 * Math.PI)\r\n let x0 = x + width / 2\r\n let y0 = y + height / 2\r\n let x1 = x + width / 2\r\n let y1 = y + height / 2\r\n\r\n if (\r\n (positiveRotation >= 0 && positiveRotation <= 0.25 * Math.PI) ||\r\n (positiveRotation > 1.75 * Math.PI && positiveRotation <= 2 * Math.PI)\r\n ) {\r\n x0 = x0 - width / 2\r\n y0 = y0 - (height / 2) * Math.tan(rotation)\r\n x1 = x1 + width / 2\r\n y1 = y1 + (height / 2) * Math.tan(rotation)\r\n } else if (positiveRotation > 0.25 * Math.PI && positiveRotation <= 0.75 * Math.PI) {\r\n y0 = y0 - height / 2\r\n x0 = x0 - width / 2 / Math.tan(rotation)\r\n y1 = y1 + height / 2\r\n x1 = x1 + width / 2 / Math.tan(rotation)\r\n } else if (positiveRotation > 0.75 * Math.PI && positiveRotation <= 1.25 * Math.PI) {\r\n x0 = x0 + width / 2\r\n y0 = y0 + (height / 2) * Math.tan(rotation)\r\n x1 = x1 - width / 2\r\n y1 = y1 - (height / 2) * Math.tan(rotation)\r\n } else if (positiveRotation > 1.25 * Math.PI && positiveRotation <= 1.75 * Math.PI) {\r\n y0 = y0 + height / 2\r\n x0 = x0 + width / 2 / Math.tan(rotation)\r\n y1 = y1 - height / 2\r\n x1 = x1 - width / 2 / Math.tan(rotation)\r\n }\r\n\r\n gradient = this.document.createElementNS('http://www.w3.org/2000/svg', 'linearGradient')\r\n gradient.setAttribute('id', name)\r\n gradient.setAttribute('gradientUnits', 'userSpaceOnUse')\r\n gradient.setAttribute('x1', numToAttr(x0))\r\n gradient.setAttribute('y1', numToAttr(y0))\r\n gradient.setAttribute('x2', numToAttr(x1))\r\n gradient.setAttribute('y2', numToAttr(y1))\r\n }\r\n\r\n options.colorStops.forEach((stopCfg: { offset: number, color: string }) => {\r\n const stop = this.document.createElementNS('http://www.w3.org/2000/svg', 'stop')\r\n stop.setAttribute('offset', `${numToAttr(100 * stopCfg.offset)}%`)\r\n\r\n const parsed = parseColor(stopCfg.color)\r\n stop.setAttribute('stop-color', parsed.value)\r\n if (parsed.alpha < 1) stop.setAttribute('stop-opacity', parsed.alpha.toFixed(7))\r\n gradient.appendChild(stop)\r\n })\r\n\r\n rect.setAttribute('fill', `url(#${name})`)\r\n this.defs.appendChild(gradient)\r\n } else if (color) {\r\n const parsed = parseColor(color)\r\n rect.setAttribute('fill', parsed.value)\r\n if (parsed.alpha < 1) rect.setAttribute('opacity', parsed.alpha.toFixed(7))\r\n }\r\n\r\n this._element.appendChild(rect)\r\n }\r\n\r\n private createMask(id: string) {\r\n const options = this.options\r\n\r\n const mask = this.document.createElementNS('http://www.w3.org/2000/svg', 'mask')\r\n mask.setAttribute('id', id)\r\n mask.setAttribute('maskUnits', 'userSpaceOnUse')\r\n mask.setAttribute('x', '0')\r\n mask.setAttribute('y', '0')\r\n mask.setAttribute('width', numToAttr(options.width))\r\n mask.setAttribute('height', numToAttr(options.height))\r\n\r\n const group = this.document.createElementNS('http://www.w3.org/2000/svg', 'g')\r\n group.setAttribute('fill', '#fff')\r\n mask.appendChild(group)\r\n\r\n return [mask, group]\r\n }\r\n}\r\n","interface ImageSizeOptions {\r\n originalHeight: number\r\n originalWidth: number\r\n maxHiddenDots: number\r\n maxHiddenAxisDots?: number\r\n dotSize: number\r\n margin: number\r\n}\r\n\r\ninterface ImageSizeResult {\r\n height: number\r\n width: number\r\n hideYDots: number\r\n hideXDots: number\r\n}\r\n\r\nexport function calculateImageSize({\r\n originalHeight,\r\n originalWidth,\r\n maxHiddenDots,\r\n maxHiddenAxisDots,\r\n dotSize,\r\n margin\r\n}: ImageSizeOptions): ImageSizeResult {\r\n const hideDots = { x: 0, y: 0 }\r\n const imageSize = { x: 0, y: 0 }\r\n\r\n if (\r\n originalHeight <= 0 ||\r\n originalWidth <= 0 ||\r\n maxHiddenDots <= 0 ||\r\n dotSize <= 0 ||\r\n 4 * margin ** 2 > maxHiddenDots\r\n ) {\r\n return {\r\n height: 0,\r\n width: 0,\r\n hideYDots: 0,\r\n hideXDots: 0\r\n }\r\n }\r\n\r\n //If set, ensure maxHiddenAxisDots is odd and at least 1\r\n if (maxHiddenAxisDots && maxHiddenAxisDots % 2 == 0) maxHiddenAxisDots = Math.max(1, maxHiddenAxisDots - 1)\r\n\r\n //Determine the bigger and smaller image dimension\r\n const dimMax = Math.max(originalWidth, originalHeight)\r\n const dimMin = Math.min(originalWidth, originalHeight)\r\n\r\n //Find max image size along the bigger dimension\r\n let lower = 0\r\n let upper = (maxHiddenAxisDots || maxHiddenDots) - 2 * margin\r\n do {\r\n const newSize = lower + (upper - lower) / 2\r\n let dotsMax = Math.max(1, Math.ceil(newSize + 2 * margin))\r\n if (dotsMax % 2 == 0) dotsMax++\r\n let dotsMin = Math.max(1, Math.ceil((newSize * dimMin) / dimMax + 2 * margin))\r\n if (dotsMin % 2 == 0) dotsMin++\r\n\r\n if (dotsMax * dotsMin > maxHiddenDots) upper = newSize\r\n else lower = newSize\r\n } while (Math.abs(lower - upper) > 0.001)\r\n\r\n //Calculate how many dots the given size corresponds to\r\n const size = lower\r\n let hideMax = Math.max(1, Math.ceil(size + 2 * margin))\r\n if (hideMax % 2 == 0) hideMax++\r\n let hideMin = Math.max(1, Math.ceil((size * dimMin) / dimMax + 2 * margin))\r\n if (hideMin % 2 == 0) hideMin++\r\n\r\n //Set hidden dots along bigger and smaller dimension to the right axis\r\n if (originalWidth > originalHeight) {\r\n hideDots.x = hideMax\r\n hideDots.y = hideMin\r\n } else {\r\n hideDots.x = hideMin\r\n hideDots.y = hideMax\r\n }\r\n\r\n //Fit image to the hidden dots\r\n const maxW = (hideDots.x - 2 * margin) * dotSize\r\n const maxH = (hideDots.y - 2 * margin) * dotSize\r\n imageSize.x = maxW\r\n imageSize.y = (maxW * originalHeight) / originalWidth\r\n if (imageSize.y > maxH) {\r\n imageSize.y = maxH\r\n imageSize.x = (maxH * originalWidth) / originalHeight\r\n }\r\n\r\n return {\r\n height: Math.round(imageSize.y + 2 * margin * dotSize),\r\n width: Math.round(imageSize.x + 2 * margin * dotSize),\r\n hideYDots: hideDots.y,\r\n hideXDots: hideDots.x\r\n }\r\n}\r\n","import { QRCodeMinimal } from '@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js'\r\nimport { stringToBytes_UTF8 } from '@liquid-js/qrcode-generator/lib/text/stringToBytes_UTF8.js'\r\nimport { RecursivePartial } from '../types/helper.js'\r\nimport { mergeDeep } from '../utils/merge.js'\r\nimport { ImageMode, Options, ShapeType, defaultOptions, sanitizeOptions } from '../utils/options.js'\r\nimport { ErrorCorrectionPercents, getMode } from '../utils/qrcode.js'\r\nimport { QRSVG } from './qr-svg.js'\r\n\r\nObject.assign(QRCodeMinimal.stringToBytesFuncs, stringToBytes_UTF8)\r\n\r\nexport type ExtensionFunction = (svg: SVGElement, options: RecursivePartial<Options>) => void\r\n\r\nexport class QRCodeStyling {\r\n private options: Options\r\n private container?: HTMLElement\r\n private qr?: QRCodeMinimal\r\n private extension?: ExtensionFunction\r\n private svgDrawingPromise?: Promise<void>\r\n private qrSVG?: QRSVG\r\n\r\n get size() {\r\n if (this.qrSVG)\r\n return {\r\n width: this.qrSVG.width,\r\n height: this.qrSVG.height\r\n }\r\n return undefined\r\n }\r\n\r\n constructor(options?: RecursivePartial<Options>) {\r\n this.options = options ? sanitizeOptions(mergeDeep(defaultOptions, options) as Options) : defaultOptions\r\n this.update()\r\n }\r\n\r\n update(\r\n /** The same options as for initialization */\r\n options?: RecursivePartial<Options>\r\n ): void {\r\n if (this.container) this.container.innerHTML = ''\r\n\r\n this.options = options ? sanitizeOptions(mergeDeep(this.options, options) as Options) : this.options\r\n\r\n if (!this.options.data) {\r\n return\r\n }\r\n\r\n if (this.options.stringToBytesFuncs) {\r\n Object.assign(QRCodeMinimal.stringToBytesFuncs, this.options.stringToBytesFuncs)\r\n delete this.options.stringToBytesFuncs\r\n }\r\n\r\n this.qr = new QRCodeMinimal(this.options.qrOptions.typeNumber, this.options.qrOptions.errorCorrectionLevel)\r\n const mode = this.options.qrOptions.mode || getMode(this.options.data)\r\n this.qr.addData(this.options.data, mode)\r\n this.qr.make()\r\n\r\n this.setupSvg()\r\n\r\n this.append(this.container)\r\n }\r\n\r\n append(\r\n /** This container will be used for appending of the QR code */\r\n container?: HTMLElement\r\n ): void {\r\n if (!container) {\r\n return\r\n }\r\n\r\n if (this.qrSVG?.element) {\r\n container.appendChild(this.qrSVG.element)\r\n }\r\n\r\n this.container = container\r\n }\r\n\r\n /**\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * const extension = (svg, options) => {\r\n * const { width, height } = options;\r\n * const size = Math.min(width, height);\r\n * const border = options.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\r\n * const borderAttributes = {\r\n * fill: \"none\",\r\n * x: (width - size + 40) / 2,\r\n * y: (height - size + 40) / 2,\r\n * width: size - 40,\r\n * height: size - 40,\r\n * stroke: \"black\",\r\n * \"stroke-width\": 40,\r\n * rx: 100\r\n * };\r\n * Object.keys(borderAttributes).forEach((attribute) => {\r\n * border.setAttribute(attribute, borderAttributes[attribute]);\r\n * });\r\n * svg.appendChild(border);\r\n * };\r\n * ```\r\n */\r\n applyExtension(\r\n /** Extension is a function that takes svg and previously applied options and modifies an svg */\r\n extension: ExtensionFunction\r\n ): void {\r\n if (!extension) {\r\n throw new Error('Extension function should be defined.')\r\n }\r\n\r\n this.extension = extension\r\n this.update()\r\n }\r\n\r\n deleteExtension(): void {\r\n this.extension = undefined\r\n this.update()\r\n }\r\n\r\n async serialize(): Promise<string | undefined> {\r\n if (!this.qr) throw new Error('QR code is empty')\r\n\r\n if (!this.qrSVG?.element || !this.svgDrawingPromise) {\r\n this.setupSvg()\r\n }\r\n await this.svgDrawingPromise\r\n\r\n if (!this.qrSVG?.element) {\r\n return\r\n }\r\n\r\n const serializer = new XMLSerializer()\r\n let source = serializer.serializeToString(this.qrSVG.element)\r\n\r\n source = '<?xml version=\"1.0\" standalone=\"no\"?>\\r\\n' + source\r\n return source\r\n }\r\n\r\n private setupSvg(): void {\r\n if (!this.qr) {\r\n return\r\n }\r\n let moduleCount = this.qr.getModuleCount()\r\n if (this.options.imageOptions.mode == ImageMode.background && this.options.shape != ShapeType.circle)\r\n moduleCount += 2\r\n let count = Math.ceil((this.options.shape == ShapeType.circle ? Math.sqrt(2) : 1) * moduleCount)\r\n if (count % 2 == 0) count -= 1\r\n let margin = (this.options.backgroundOptions && this.options.backgroundOptions.margin) || 0\r\n if (this.options.imageOptions.mode == ImageMode.background) margin += this.options.imageOptions.margin || 0\r\n const size = Math.ceil(this.options.dotsOptions.size * (count + 2 * margin))\r\n this.qrSVG = new QRSVG({\r\n ...this.options,\r\n width: size,\r\n height: size,\r\n errorCorrectionPercent: ErrorCorrectionPercents[this.options.qrOptions.errorCorrectionLevel]\r\n })\r\n\r\n this.svgDrawingPromise = this.qrSVG.drawQR(this.qr).then(() => {\r\n if (!this.qrSVG?.element) return\r\n this.extension?.(this.qrSVG.element, this.options)\r\n })\r\n }\r\n}\r\n","/**\n * stringToBytes_UTF8\n * contributed by elhigu\n */\nexport const stringToBytes_UTF8 = {\n UTF8: (s) => {\n // http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\n function toUTF8Array(str) {\n const utf8 = [];\n for (let i = 0; i < str.length; i++) {\n let charcode = str.charCodeAt(i);\n if (charcode < 0x80)\n utf8.push(charcode);\n else if (charcode < 0x800) {\n utf8.push(0xc0 | (charcode >> 6), 0x80 | (charcode & 0x3f));\n }\n else if (charcode < 0xd800 || charcode >= 0xe000) {\n utf8.push(0xe0 | (charcode >> 12), 0x80 | ((charcode >> 6) & 0x3f), 0x80 | (charcode & 0x3f));\n }\n else {\n // surrogate pair\n i++;\n // UTF-16 encodes 0x10000-0x10FFFF by\n // subtracting 0x10000 and splitting the\n // 20 bits of 0x0-0xFFFFF into two halves\n charcode = 0x10000 + (((charcode & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));\n utf8.push(0xf0 | (charcode >> 18), 0x80 | ((charcode >> 12) & 0x3f), 0x80 | ((charcode >> 6) & 0x3f), 0x80 | (charcode & 0x3f));\n }\n }\n return utf8;\n }\n return toUTF8Array(s);\n }\n};\n//# sourceMappingURL=stringToBytes_UTF8.js.map","export interface CanvasOptions {\r\n width: number\r\n height: number\r\n margin: number\r\n}\r\n\r\nexport const defaultCanvasOptions: CanvasOptions = {\r\n width: 300,\r\n height: 300,\r\n margin: 0\r\n}\r\n\r\nexport function sanitizeCanvasOptions(options: CanvasOptions): CanvasOptions {\r\n const newOptions = { ...options }\r\n\r\n newOptions.width = Number(newOptions.width)\r\n newOptions.height = Number(newOptions.height)\r\n newOptions.margin = Number(newOptions.margin)\r\n\r\n if (newOptions.margin > Math.min(newOptions.width, newOptions.height)) {\r\n newOptions.margin = Math.min(newOptions.width, newOptions.height)\r\n }\r\n\r\n return newOptions\r\n}\r\n","import { QRCodeStyling } from '../core/qr-code-styling.js'\r\nimport { RecursivePartial } from '../types/helper.js'\r\nimport { CanvasOptions, defaultCanvasOptions, sanitizeCanvasOptions } from '../utils/canvas-options.js'\r\nimport { mergeDeep } from '../utils/merge.js'\r\n\r\nexport enum FileExtension {\r\n svg = 'svg',\r\n png = 'png',\r\n jpeg = 'jpeg',\r\n webp = 'webp'\r\n}\r\n\r\nexport function drawToCanvas(\r\n qrCode: QRCodeStyling,\r\n options?: RecursivePartial<CanvasOptions>\r\n): { canvas: HTMLCanvasElement, canvasDrawingPromise: Promise<void> | undefined } | undefined {\r\n const { width, height, margin } = options\r\n ? sanitizeCanvasOptions(mergeDeep(defaultCanvasOptions, options) as CanvasOptions)\r\n : defaultCanvasOptions\r\n\r\n const canvas = document.createElement('canvas')\r\n canvas.width = width\r\n canvas.height = height\r\n\r\n const size = Math.min(width, height) - 2 * margin\r\n\r\n const canvasDrawingPromise = qrCode.serialize().then((xml) => {\r\n if (!xml) return\r\n const svg64 = btoa(xml)\r\n const image64 = 'data:image/svg+xml;base64,' + svg64\r\n const image = new Image()\r\n\r\n return new Promise<void>((resolve, reject) => {\r\n image.onload = (): void => {\r\n // Ensure pixel-perfect rendering of SVG to avoid artefact, then downscale to requested size\r\n const aaFactor = Math.ceil((2 * size) / Math.min(image.width, image.height))\r\n let aaCanvas: HTMLCanvasElement | OffscreenCanvas\r\n try {\r\n aaCanvas = new OffscreenCanvas(image.width * aaFactor, image.height * aaFactor)\r\n } catch (_) {\r\n // Fallback to regular canvas element\r\n aaCanvas = document.createElement('canvas')\r\n aaCanvas.width = image.width * aaFactor\r\n aaCanvas.height = image.height * aaFactor\r\n }\r\n aaCanvas.getContext('2d')?.drawImage(image, 0, 0, aaCanvas.width, aaCanvas.height)\r\n\r\n canvas?.getContext('2d')?.drawImage(aaCanvas, (width - size) / 2, (height - size) / 2, size, size)\r\n resolve()\r\n }\r\n image.onerror = image.onabort = reject\r\n\r\n image.src = image64\r\n })\r\n })\r\n\r\n return { canvas, canvasDrawingPromise }\r\n}\r\n\r\nexport async function download(\r\n qrCode: QRCodeStyling,\r\n downloadOptions?: { name?: string, extension: `${FileExtension}` },\r\n options?: RecursivePartial<CanvasOptions>\r\n): Promise<void> {\r\n let extension: `${FileExtension}` = FileExtension.png\r\n let name = 'qr'\r\n\r\n if (downloadOptions) {\r\n if (downloadOptions.name) {\r\n name = downloadOptions.name\r\n }\r\n if (downloadOptions.extension) {\r\n extension = downloadOptions.extension\r\n }\r\n }\r\n\r\n if (extension.toLowerCase() === 'svg') {\r\n const source = await qrCode.serialize()\r\n if (!source) return\r\n const url = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(source)\r\n downloadURI(url, `${name}.svg`)\r\n } else {\r\n const res = drawToCanvas(qrCode, options)\r\n if (!res) return\r\n const { canvas, canvasDrawingPromise } = res\r\n await canvasDrawingPromise\r\n const url = canvas.toDataURL(`image/${extension}`)\r\n downloadURI(url, `${name}.${extension}`)\r\n }\r\n}\r\n\r\nexport function downloadURI(uri: string, name: string): void {\r\n const link = document.createElement('a')\r\n link.download = name\r\n link.href = uri\r\n document.body.appendChild(link)\r\n link.click()\r\n document.body.removeChild(link)\r\n}\r\n","export { ErrorCorrectionLevel, Mode, TypeNumber } from '@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js'\r\nexport { QRCodeStyling, type ExtensionFunction } from './core/qr-code-styling.js'\r\nexport { FileExtension } from './tools/browser-utils.js'\r\nexport { type RecursivePartial } from './types/helper.js'\r\nexport { type CanvasOptions } from './utils/canvas-options.js'\r\nexport { GradientType, type Gradient } from './utils/gradient.js'\r\nexport { CornerDotType, CornerSquareType, DotType, ImageMode, ShapeType, type Options } from './utils/options.js'\r\nexport { ErrorCorrectionPercents } from './utils/qrcode.js'\r\nimport * as _browserUtils from './tools/browser-utils.js'\r\n\r\nexport const browserUtils: typeof _browserUtils | undefined = _browserUtils\r\n"],"names":["BitBuffer","buffer","length","constructor","this","getBuffer","getLengthInBits","toString","i","getBit","index","put","num","putBit","bit","push","ErrorCorrectLevel","w","L","M","Q","H","QRMath","Error","static","EXP_TABLE","LOG_TABLE","glog","n","initialize","gexp","Polynomial","shift","offset","len","getAt","getLength","toLogString","multiply","e","j","mod","ratio","Mode","MODE_NUMBER","MODE_ALPHA_NUM","MODE_8BIT_BYTE","MODE_KANJI","QRData","mode","data","getMode","getData","typeNumber","QR8BitByte","stringToBytes","super","write","forEach","val","QRAlphaNum","s","getCode","charAt","c","charCodeAt","QRNumber","strToNum","substring","chatToNum","MaskPattern","G","PATTERN000","PATTERN001","PATTERN010","PATTERN011","PATTERN100","PATTERN101","PATTERN110","PATTERN111","QRUtil","getPatternPosition","PATTERN_POSITION_TABLE","getMaxLength","errorCorrectLevel","m","MAX_LENGTH","getErrorCorrectPolynomial","errorCorrectLength","a","getMaskFunc","maskPattern","_i","getLostPoint","qrCode","getModuleCount","lostPoint","row","moduleCount","col","sameCount","dark","isDark","r","count","darkCount","Math","getBCHTypeInfo","d","getBCHDigit","G15","G15_MASK","getBCHTypeNumber","G18","digit","totalCount","dataCount","getDataCount","getTotalCount","getRSBlocks","rsBlock","RSBlock","getRsBlockTable","list","RS_BLOCK_TABLE","TypeNumber","Array","fill","map","_","ErrorCorrectionLevel","fa","numeric","alphanumeric","kanji","unicode","QRCodeMinimal","default","bytes","qrDataList","modules","errorCorrectionLevel","getTypeNumber","setTypeNumber","getErrorCorrectLevel","setErrorCorrectLevel","clearData","addData","qrData","byte","stringToBytesFuncs","UTF8","QRKanji","SJIS","make","rsBlocks","totalDataCount","reduce","t","v","makeImpl","getBestMaskPattern","minLostPoint","pattern","test","setupPositionProbePattern","setupPositionAdjustPattern","setupTimingPattern","setupTypeInfo","setupTypeNumber","mapData","inc","bitIndex","byteIndex","maskFunc","pos","bits","createData","dataArray","PAD0","PAD1","createBytes","createNumArray","maxDcCount","maxEcCount","dcCount","ecCount","max","dcdata","rsPoly","modPoly","ecdata","modIndex","totalCodeCount","isObject","obj","isArray","mergeDeep","target","sources","undefined","source","keys","key","targetValue","sourceValue","GradientType","ja","sanitizeGradient","gradient","colorStops","newGradient","rotation","Number","colorStop","radial","linear","DotType","dot","randomDot","rounded","extraRounded","verticalLine","horizontalLine","classy","classyRounded","square","smallSquare","tinySquare","diamond","CornerDotType","S","heart","outpoint","inpoint","CornerSquareType","U","ShapeType","ka","circle","ImageMode","la","center","overlay","background","defaultOptions","document","shape","width","height","qrOptions","imageOptions","imageSize","crossOrigin","margin","color","dotsOptions","type","size","sanitizeOptions","options","newOptions","min","round","cornersSquareOptions","cornersDotOptions","backgroundOptions","ErrorCorrectionPercents","rx","numToAttr","value","toFixed","replace","svgPath","strings","values","p","trim","_element","draw","args","drawFunction","drawSquare","drawHeart","drawRounded","drawClassy","drawInpoint","drawOutpoint","drawDot","call","rotateFigure","x","y","setAttribute","PI","cx","cy","basicDot","createElementNS","basicSquare","basicHeart","move","path","toUpperCase","join","basicRounded","basicClassy","dotSize","basicInpoint","_fill","element","drawExtraRounded","basicExtraRounded","QRDot","drawRandomDot","drawClassyRounded","drawVerticalLine","drawHorizontalLine","drawDiamond","drawSmallSquare","drawTinySquare","basicSideRounded","basicCornerRounded","basicCornerExtraRounded","basicCornersRounded","random","originalSize","getNeighbor","leftNeighbor","rightNeighbor","topNeighbor","neighborsCount","bottomNeighbor","browserImageTools","toDataURL","url","startsWith","Promise","resolve","reject","xhr","XMLHttpRequest","onload","reader","FileReader","onloadend","result","readAsDataURL","response","onerror","onabort","ontimeout","open","responseType","send","getSize","src","image","Image","then","catch","parseColor","cstr","parts","alpha","toLowerCase","base","slice","parseInt","exec","split","parseFloat","dims","pop","padStart","squareMask","dotMask","QRSVG","defs","backgroundMask","backgroundMaskGroup","dotsMask","dotsMaskGroup","lightDotsMask","lightDotsMaskGroup","qr","imageTools","appendChild","drawQR","drawImageSize","hideXDots","hideYDots","errorCorrectionPercent","maxWidth","maxHeight","alignment","calculateImageSize","originalHeight","originalWidth","maxHiddenDots","maxHiddenAxisDots","dimMax","dimMin","lower","upper","newSize","dotsMax","ceil","dotsMin","abs","hideMax","hideMin","maxW","maxH","floor","coverLevel","drawBackground","drawImage","drawDots","drawCorners","createColor","additionalRotation","name","createMask","filter","minSize","overlayDot","markerDot","additionalDots","fakeCount","xBeginning","yBeginning","fakeMatrix","ii","jj","sqrt","iAlign","find","jAlign","xFakeBeginning","yFakeBeginning","xOffset","yOffset","colorCount","cornersSquareSize","cornersDotSize","column","cornersSquareMask","cornersSquareMaskGroup","cornersDotMask","cornersDotMaskGroup","cornersSquare","QRCornerSquare","cornersDot","QRCornerDot","dx","setAttributeNS","imageUrl","indexOf","encoding","h","atob","Buffer","from","container","parseFromString","DOMParser","rootEl","getElementsByTagName","dy","dw","dh","rect","x0","y0","positiveRotation","tan","x1","y1","stopCfg","stop","parsed","id","mask","group","Object","assign","stringToBytes_UTF8","utf8","charcode","QRCodeStyling","extension","svgDrawingPromise","qrSVG","update","innerHTML","setupSvg","append","applyExtension","deleteExtension","serialize","serializeToString","XMLSerializer","defaultCanvasOptions","FileExtension","Da","drawToCanvas","sanitizeCanvasOptions","canvas","createElement","xml","image64","btoa","aaFactor","aaCanvas","OffscreenCanvas","getContext","canvasDrawingPromise","downloadURI","uri","link","download","href","body","click","removeChild","svg","png","jpeg","webp","browserUtils","downloadOptions","res"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,27]}
1
+ {"version":3,"file":"qr-code-styling.js","sources":["../node_modules/@liquid-js/qrcode-generator/lib/qrcode/BitBuffer.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/ErrorCorrectLevel.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRMath.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/Polynomial.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/Mode.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRData.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QR8BitByte.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRAlphaNum.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRKanji.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRNumber.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/MaskPattern.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRUtil.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/RSBlock.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js","../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","../node_modules/@liquid-js/qrcode-generator/lib/text/stringToBytes_UTF8.js","../src/utils/canvas-options.ts","../src/tools/browser-utils.ts","../src/index.ts"],"sourcesContent":["export class BitBuffer {\n buffer;\n length;\n constructor() {\n this.buffer = [];\n this.length = 0;\n }\n getBuffer() {\n return this.buffer;\n }\n getLengthInBits() {\n return this.length;\n }\n toString() {\n let buffer = '';\n for (let i = 0; i < this.getLengthInBits(); i += 1) {\n buffer += this.getBit(i) ? '1' : '0';\n }\n return buffer;\n }\n getBit(index) {\n return ((this.buffer[~~(index / 8)] >>> (7 - (index % 8))) & 1) == 1;\n }\n put(num, length) {\n for (let i = 0; i < length; i += 1) {\n this.putBit(((num >>> (length - i - 1)) & 1) == 1);\n }\n }\n putBit(bit) {\n if (this.length == this.buffer.length * 8) {\n this.buffer.push(0);\n }\n if (bit) {\n this.buffer[~~(this.length / 8)] |= 0x80 >>> this.length % 8;\n }\n this.length += 1;\n }\n}\n//# sourceMappingURL=BitBuffer.js.map","/**\n * ErrorCorrectLevel\n *\n * @author Kazuhiko Arase\n */\nexport var ErrorCorrectLevel;\n(function (ErrorCorrectLevel) {\n /**\n * 7%\n */\n ErrorCorrectLevel[ErrorCorrectLevel[\"L\"] = 1] = \"L\";\n /**\n * 15%\n */\n ErrorCorrectLevel[ErrorCorrectLevel[\"M\"] = 0] = \"M\";\n /**\n * 25%\n */\n ErrorCorrectLevel[ErrorCorrectLevel[\"Q\"] = 3] = \"Q\";\n /**\n * 30%\n */\n ErrorCorrectLevel[ErrorCorrectLevel[\"H\"] = 2] = \"H\";\n})(ErrorCorrectLevel || (ErrorCorrectLevel = {}));\n//# sourceMappingURL=ErrorCorrectLevel.js.map","/**\n * QRMath\n *\n * @author Kazuhiko Arase\n */\nexport class QRMath {\n constructor() {\n throw new Error('error');\n }\n static initialize = () => {\n QRMath.EXP_TABLE = [];\n QRMath.LOG_TABLE = [];\n for (let i = 0; i < 256; i += 1) {\n QRMath.EXP_TABLE.push(i < 8\n ? 1 << i\n : QRMath.EXP_TABLE[i - 4] ^ QRMath.EXP_TABLE[i - 5] ^ QRMath.EXP_TABLE[i - 6] ^ QRMath.EXP_TABLE[i - 8]);\n QRMath.LOG_TABLE.push(0);\n }\n for (let i = 0; i < 255; i += 1) {\n QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i;\n }\n };\n static EXP_TABLE;\n static LOG_TABLE;\n static glog(n) {\n if (!QRMath.LOG_TABLE)\n QRMath.initialize();\n if (n < 1) {\n throw new Error('log(' + n + ')');\n }\n return QRMath.LOG_TABLE[n];\n }\n static gexp(n) {\n if (!QRMath.EXP_TABLE)\n QRMath.initialize();\n while (n < 0) {\n n += 255;\n }\n while (n >= 256) {\n n -= 255;\n }\n return QRMath.EXP_TABLE[n];\n }\n}\n//# sourceMappingURL=QRMath.js.map","import { QRMath } from './QRMath.js';\n/**\n * Polynomial\n *\n * @author Kazuhiko Arase\n */\nexport class Polynomial {\n num;\n constructor(num, shift = 0) {\n let offset = 0;\n while (offset < num.length && num[offset] == 0) {\n offset += 1;\n }\n this.num = [];\n const len = num.length - offset;\n for (let i = 0; i < len; i += 1) {\n this.num.push(num[offset + i]);\n }\n for (let i = 0; i < shift; i += 1) {\n this.num.push(0);\n }\n }\n getAt(index) {\n return this.num[index];\n }\n getLength() {\n return this.num.length;\n }\n toString() {\n let buffer = '';\n for (let i = 0; i < this.getLength(); i += 1) {\n if (i > 0) {\n buffer += ',';\n }\n buffer += this.getAt(i);\n }\n return buffer.toString();\n }\n toLogString() {\n let buffer = '';\n for (let i = 0; i < this.getLength(); i += 1) {\n if (i > 0) {\n buffer += ',';\n }\n buffer += QRMath.glog(this.getAt(i));\n }\n return buffer.toString();\n }\n multiply(e) {\n const num = [];\n const len = this.getLength() + e.getLength() - 1;\n for (let i = 0; i < len; i += 1) {\n num.push(0);\n }\n for (let i = 0; i < this.getLength(); i += 1) {\n for (let j = 0; j < e.getLength(); j += 1) {\n num[i + j] ^= QRMath.gexp(QRMath.glog(this.getAt(i)) + QRMath.glog(e.getAt(j)));\n }\n }\n return new Polynomial(num);\n }\n mod(e) {\n if (this.getLength() - e.getLength() < 0) {\n return this;\n }\n const ratio = QRMath.glog(this.getAt(0)) - QRMath.glog(e.getAt(0));\n // create copy\n const num = [];\n for (let i = 0; i < this.getLength(); i += 1) {\n num.push(this.getAt(i));\n }\n // subtract and calc rest.\n for (let i = 0; i < e.getLength(); i += 1) {\n num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i)) + ratio);\n }\n // call recursively\n return new Polynomial(num).mod(e);\n }\n}\n//# sourceMappingURL=Polynomial.js.map","/**\n * Mode\n *\n * @author Kazuhiko Arase\n */\nexport var Mode;\n(function (Mode) {\n /**\n * number\n */\n Mode[Mode[\"MODE_NUMBER\"] = 1] = \"MODE_NUMBER\";\n /**\n * alphabet and number\n */\n Mode[Mode[\"MODE_ALPHA_NUM\"] = 2] = \"MODE_ALPHA_NUM\";\n /**\n * 8bit byte\n */\n Mode[Mode[\"MODE_8BIT_BYTE\"] = 4] = \"MODE_8BIT_BYTE\";\n /**\n * KANJI\n */\n Mode[Mode[\"MODE_KANJI\"] = 8] = \"MODE_KANJI\";\n})(Mode || (Mode = {}));\n//# sourceMappingURL=Mode.js.map","import { Mode } from './Mode.js';\n/**\n * QRData\n *\n * @author Kazuhiko Arase\n */\nexport class QRData {\n mode;\n data;\n constructor(mode, data) {\n this.mode = mode;\n this.data = data;\n }\n getMode() {\n return this.mode;\n }\n getData() {\n return this.data;\n }\n getLengthInBits(typeNumber) {\n if (1 <= typeNumber && typeNumber < 10) {\n // 1 - 9\n switch (this.mode) {\n case Mode.MODE_NUMBER:\n return 10;\n case Mode.MODE_ALPHA_NUM:\n return 9;\n case Mode.MODE_8BIT_BYTE:\n return 8;\n case Mode.MODE_KANJI:\n return 8;\n default:\n throw new Error('mode:' + this.mode);\n }\n }\n else if (typeNumber < 27) {\n // 10 - 26\n switch (this.mode) {\n case Mode.MODE_NUMBER:\n return 12;\n case Mode.MODE_ALPHA_NUM:\n return 11;\n case Mode.MODE_8BIT_BYTE:\n return 16;\n case Mode.MODE_KANJI:\n return 10;\n default:\n throw new Error('mode:' + this.mode);\n }\n }\n else if (typeNumber < 41) {\n // 27 - 40\n switch (this.mode) {\n case Mode.MODE_NUMBER:\n return 14;\n case Mode.MODE_ALPHA_NUM:\n return 13;\n case Mode.MODE_8BIT_BYTE:\n return 16;\n case Mode.MODE_KANJI:\n return 12;\n default:\n throw new Error('mode:' + this.mode);\n }\n }\n else {\n throw new Error('typeNumber:' + typeNumber);\n }\n }\n}\n//# sourceMappingURL=QRData.js.map","import { Mode } from './Mode.js';\nimport { QRData } from './QRData.js';\n/**\n * QR8BitByte\n *\n * @author Kazuhiko Arase\n */\nexport class QR8BitByte extends QRData {\n stringToBytes;\n constructor(data, stringToBytes) {\n super(Mode.MODE_8BIT_BYTE, data);\n this.stringToBytes = stringToBytes;\n }\n write(buffer) {\n const data = this.stringToBytes(this.getData());\n data.forEach(val => buffer.put(val, 8));\n }\n getLength() {\n return this.stringToBytes(this.getData()).length;\n }\n}\n//# sourceMappingURL=QR8BitByte.js.map","import { Mode } from './Mode.js';\nimport { QRData } from './QRData.js';\n/**\n * QRAlphaNum\n *\n * @author Kazuhiko Arase\n */\nexport class QRAlphaNum extends QRData {\n constructor(data) {\n super(Mode.MODE_ALPHA_NUM, data);\n }\n write(buffer) {\n const s = this.getData();\n let i = 0;\n while (i + 1 < s.length) {\n buffer.put(QRAlphaNum.getCode(s.charAt(i)) * 45 + QRAlphaNum.getCode(s.charAt(i + 1)), 11);\n i += 2;\n }\n if (i < s.length) {\n buffer.put(QRAlphaNum.getCode(s.charAt(i)), 6);\n }\n }\n getLength() {\n return this.getData().length;\n }\n static getCode(c) {\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n }\n else if ('A' <= c && c <= 'Z') {\n return c.charCodeAt(0) - 'A'.charCodeAt(0) + 10;\n }\n else {\n switch (c) {\n case ' ':\n return 36;\n case '$':\n return 37;\n case '%':\n return 38;\n case '*':\n return 39;\n case '+':\n return 40;\n case '-':\n return 41;\n case '.':\n return 42;\n case '/':\n return 43;\n case ':':\n return 44;\n default:\n throw new Error('illegal char :' + c);\n }\n }\n }\n}\n//# sourceMappingURL=QRAlphaNum.js.map","import { Mode } from './Mode.js';\nimport { QRData } from './QRData.js';\n/**\n * QRKanji(SJIS only)\n *\n * @author Kazuhiko Arase\n */\nexport class QRKanji extends QRData {\n stringToBytes;\n constructor(data, stringToBytes) {\n super(Mode.MODE_KANJI, data);\n this.stringToBytes = stringToBytes;\n }\n write(buffer) {\n const data = this.stringToBytes(this.getData());\n let i = 0;\n while (i + 1 < data.length) {\n let c = ((0xff & data[i]) << 8) | (0xff & data[i + 1]);\n if (0x8140 <= c && c <= 0x9ffc) {\n c -= 0x8140;\n }\n else if (0xe040 <= c && c <= 0xebbf) {\n c -= 0xc140;\n }\n else {\n throw new Error('illegal char at ' + (i + 1) + '/' + c);\n }\n c = ((c >>> 8) & 0xff) * 0xc0 + (c & 0xff);\n buffer.put(c, 13);\n i += 2;\n }\n if (i < data.length) {\n throw new Error('illegal char at ' + (i + 1));\n }\n }\n getLength() {\n return this.stringToBytes(this.getData()).length / 2;\n }\n}\n//# sourceMappingURL=QRKanji.js.map","import { Mode } from './Mode.js';\nimport { QRData } from './QRData.js';\n/**\n * QRNumber\n *\n * @author Kazuhiko Arase\n */\nexport class QRNumber extends QRData {\n constructor(data) {\n super(Mode.MODE_NUMBER, data);\n }\n write(buffer) {\n const data = this.getData();\n let i = 0;\n while (i + 2 < data.length) {\n buffer.put(QRNumber.strToNum(data.substring(i, i + 3)), 10);\n i += 3;\n }\n if (i < data.length) {\n if (data.length - i == 1) {\n buffer.put(QRNumber.strToNum(data.substring(i, i + 1)), 4);\n }\n else if (data.length - i == 2) {\n buffer.put(QRNumber.strToNum(data.substring(i, i + 2)), 7);\n }\n }\n }\n getLength() {\n return this.getData().length;\n }\n static strToNum(s) {\n let num = 0;\n for (let i = 0; i < s.length; i += 1) {\n num = num * 10 + QRNumber.chatToNum(s.charAt(i));\n }\n return num;\n }\n static chatToNum(c) {\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n }\n throw new Error('illegal char :' + c);\n }\n}\n//# sourceMappingURL=QRNumber.js.map","/**\n * MaskPattern\n *\n * @author Kazuhiko Arase\n */\nexport var MaskPattern;\n(function (MaskPattern) {\n /**\n * mask pattern 000\n */\n MaskPattern[MaskPattern[\"PATTERN000\"] = 0] = \"PATTERN000\";\n /**\n * mask pattern 001\n */\n MaskPattern[MaskPattern[\"PATTERN001\"] = 1] = \"PATTERN001\";\n /**\n * mask pattern 010\n */\n MaskPattern[MaskPattern[\"PATTERN010\"] = 2] = \"PATTERN010\";\n /**\n * mask pattern 011\n */\n MaskPattern[MaskPattern[\"PATTERN011\"] = 3] = \"PATTERN011\";\n /**\n * mask pattern 100\n */\n MaskPattern[MaskPattern[\"PATTERN100\"] = 4] = \"PATTERN100\";\n /**\n * mask pattern 101\n */\n MaskPattern[MaskPattern[\"PATTERN101\"] = 5] = \"PATTERN101\";\n /**\n * mask pattern 110\n */\n MaskPattern[MaskPattern[\"PATTERN110\"] = 6] = \"PATTERN110\";\n /**\n * mask pattern 111\n */\n MaskPattern[MaskPattern[\"PATTERN111\"] = 7] = \"PATTERN111\";\n})(MaskPattern || (MaskPattern = {}));\n//# sourceMappingURL=MaskPattern.js.map","import { ErrorCorrectLevel } from './ErrorCorrectLevel.js';\nimport { MaskPattern } from './MaskPattern.js';\nimport { Mode } from './Mode.js';\nimport { Polynomial } from './Polynomial.js';\nimport { QRMath } from './QRMath.js';\n/**\n * QRUtil\n *\n * @author Kazuhiko Arase\n */\nexport class QRUtil {\n constructor() {\n throw new Error('error');\n }\n static getPatternPosition(typeNumber) {\n return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];\n }\n static PATTERN_POSITION_TABLE = [\n [],\n [6, 18],\n [6, 22],\n [6, 26],\n [6, 30],\n [6, 34],\n [6, 22, 38],\n [6, 24, 42],\n [6, 26, 46],\n [6, 28, 50],\n [6, 30, 54],\n [6, 32, 58],\n [6, 34, 62],\n [6, 26, 46, 66],\n [6, 26, 48, 70],\n [6, 26, 50, 74],\n [6, 30, 54, 78],\n [6, 30, 56, 82],\n [6, 30, 58, 86],\n [6, 34, 62, 90],\n [6, 28, 50, 72, 94],\n [6, 26, 50, 74, 98],\n [6, 30, 54, 78, 102],\n [6, 28, 54, 80, 106],\n [6, 32, 58, 84, 110],\n [6, 30, 58, 86, 114],\n [6, 34, 62, 90, 118],\n [6, 26, 50, 74, 98, 122],\n [6, 30, 54, 78, 102, 126],\n [6, 26, 52, 78, 104, 130],\n [6, 30, 56, 82, 108, 134],\n [6, 34, 60, 86, 112, 138],\n [6, 30, 58, 86, 114, 142],\n [6, 34, 62, 90, 118, 146],\n [6, 30, 54, 78, 102, 126, 150],\n [6, 24, 50, 76, 102, 128, 154],\n [6, 28, 54, 80, 106, 132, 158],\n [6, 32, 58, 84, 110, 136, 162],\n [6, 26, 54, 82, 110, 138, 166],\n [6, 30, 58, 86, 114, 142, 170]\n ];\n static MAX_LENGTH = [\n [\n [41, 25, 17, 10],\n [34, 20, 14, 8],\n [27, 16, 11, 7],\n [17, 10, 7, 4]\n ],\n [\n [77, 47, 32, 20],\n [63, 38, 26, 16],\n [48, 29, 20, 12],\n [34, 20, 14, 8]\n ],\n [\n [127, 77, 53, 32],\n [101, 61, 42, 26],\n [77, 47, 32, 20],\n [58, 35, 24, 15]\n ],\n [\n [187, 114, 78, 48],\n [149, 90, 62, 38],\n [111, 67, 46, 28],\n [82, 50, 34, 21]\n ],\n [\n [255, 154, 106, 65],\n [202, 122, 84, 52],\n [144, 87, 60, 37],\n [106, 64, 44, 27]\n ],\n [\n [322, 195, 134, 82],\n [255, 154, 106, 65],\n [178, 108, 74, 45],\n [139, 84, 58, 36]\n ],\n [\n [370, 224, 154, 95],\n [293, 178, 122, 75],\n [207, 125, 86, 53],\n [154, 93, 64, 39]\n ],\n [\n [461, 279, 192, 118],\n [365, 221, 152, 93],\n [259, 157, 108, 66],\n [202, 122, 84, 52]\n ],\n [\n [552, 335, 230, 141],\n [432, 262, 180, 111],\n [312, 189, 130, 80],\n [235, 143, 98, 60]\n ],\n [\n [652, 395, 271, 167],\n [513, 311, 213, 131],\n [364, 221, 151, 93],\n [288, 174, 119, 74]\n ]\n ];\n static getMaxLength(typeNumber, mode, errorCorrectLevel) {\n const t = typeNumber - 1;\n let e = 0;\n let m = 0;\n switch (errorCorrectLevel) {\n case ErrorCorrectLevel.L:\n e = 0;\n break;\n case ErrorCorrectLevel.M:\n e = 1;\n break;\n case ErrorCorrectLevel.Q:\n e = 2;\n break;\n case ErrorCorrectLevel.H:\n e = 3;\n break;\n default:\n throw new Error('e:' + errorCorrectLevel);\n }\n switch (mode) {\n case Mode.MODE_NUMBER:\n m = 0;\n break;\n case Mode.MODE_ALPHA_NUM:\n m = 1;\n break;\n case Mode.MODE_8BIT_BYTE:\n m = 2;\n break;\n case Mode.MODE_KANJI:\n m = 3;\n break;\n default:\n throw new Error('m:' + mode);\n }\n return QRUtil.MAX_LENGTH[t][e][m];\n }\n static getErrorCorrectPolynomial(errorCorrectLength) {\n let a = new Polynomial([1]);\n for (let i = 0; i < errorCorrectLength; i += 1) {\n a = a.multiply(new Polynomial([1, QRMath.gexp(i)]));\n }\n return a;\n }\n static getMaskFunc(maskPattern) {\n switch (maskPattern) {\n case MaskPattern.PATTERN000:\n return (i, j) => (i + j) % 2 == 0;\n case MaskPattern.PATTERN001:\n return (i, _j) => i % 2 == 0;\n case MaskPattern.PATTERN010:\n return (_i, j) => j % 3 == 0;\n case MaskPattern.PATTERN011:\n return (i, j) => (i + j) % 3 == 0;\n case MaskPattern.PATTERN100:\n return (i, j) => (~~(i / 2) + ~~(j / 3)) % 2 == 0;\n case MaskPattern.PATTERN101:\n return (i, j) => ((i * j) % 2) + ((i * j) % 3) == 0;\n case MaskPattern.PATTERN110:\n return (i, j) => (((i * j) % 2) + ((i * j) % 3)) % 2 == 0;\n case MaskPattern.PATTERN111:\n return (i, j) => (((i * j) % 3) + ((i + j) % 2)) % 2 == 0;\n default:\n throw new Error('mask:' + maskPattern);\n }\n }\n static getLostPoint(qrCode) {\n const moduleCount = qrCode.getModuleCount();\n let lostPoint = 0;\n // LEVEL1\n for (let row = 0; row < moduleCount; row += 1) {\n for (let col = 0; col < moduleCount; col += 1) {\n let sameCount = 0;\n const dark = qrCode.isDark(row, col);\n for (let r = -1; r <= 1; r += 1) {\n if (row + r < 0 || moduleCount <= row + r) {\n continue;\n }\n for (let c = -1; c <= 1; c += 1) {\n if (col + c < 0 || moduleCount <= col + c) {\n continue;\n }\n if (r == 0 && c == 0) {\n continue;\n }\n if (dark == qrCode.isDark(row + r, col + c)) {\n sameCount += 1;\n }\n }\n }\n if (sameCount > 5) {\n lostPoint += 3 + sameCount - 5;\n }\n }\n }\n // LEVEL2\n for (let row = 0; row < moduleCount - 1; row += 1) {\n for (let col = 0; col < moduleCount - 1; col += 1) {\n let count = 0;\n if (qrCode.isDark(row, col))\n count += 1;\n if (qrCode.isDark(row + 1, col))\n count += 1;\n if (qrCode.isDark(row, col + 1))\n count += 1;\n if (qrCode.isDark(row + 1, col + 1))\n count += 1;\n if (count == 0 || count == 4) {\n lostPoint += 3;\n }\n }\n }\n // LEVEL3\n for (let row = 0; row < moduleCount; row += 1) {\n for (let col = 0; col < moduleCount - 6; col += 1) {\n if (qrCode.isDark(row, col) &&\n !qrCode.isDark(row, col + 1) &&\n qrCode.isDark(row, col + 2) &&\n qrCode.isDark(row, col + 3) &&\n qrCode.isDark(row, col + 4) &&\n !qrCode.isDark(row, col + 5) &&\n qrCode.isDark(row, col + 6)) {\n lostPoint += 40;\n }\n }\n }\n for (let col = 0; col < moduleCount; col += 1) {\n for (let row = 0; row < moduleCount - 6; row += 1) {\n if (qrCode.isDark(row, col) &&\n !qrCode.isDark(row + 1, col) &&\n qrCode.isDark(row + 2, col) &&\n qrCode.isDark(row + 3, col) &&\n qrCode.isDark(row + 4, col) &&\n !qrCode.isDark(row + 5, col) &&\n qrCode.isDark(row + 6, col)) {\n lostPoint += 40;\n }\n }\n }\n // LEVEL4\n let darkCount = 0;\n for (let col = 0; col < moduleCount; col += 1) {\n for (let row = 0; row < moduleCount; row += 1) {\n if (qrCode.isDark(row, col)) {\n darkCount += 1;\n }\n }\n }\n const ratio = Math.abs((100 * darkCount) / moduleCount / moduleCount - 50) / 5;\n lostPoint += ratio * 10;\n return lostPoint;\n }\n static getBCHTypeInfo(data) {\n let d = data << 10;\n while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {\n d ^= QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15));\n }\n return ((data << 10) | d) ^ QRUtil.G15_MASK;\n }\n static getBCHTypeNumber(data) {\n let d = data << 12;\n while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {\n d ^= QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18));\n }\n return (data << 12) | d;\n }\n static G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\n static G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);\n static G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\n static getBCHDigit(data) {\n let digit = 0;\n while (data != 0) {\n digit += 1;\n data >>>= 1;\n }\n return digit;\n }\n}\n//# sourceMappingURL=QRUtil.js.map","import { ErrorCorrectLevel } from './ErrorCorrectLevel.js';\n/**\n * RSBlock\n *\n * @author Kazuhiko Arase\n */\nexport class RSBlock {\n totalCount;\n dataCount;\n static RS_BLOCK_TABLE = [\n // L\n // M\n // Q\n // H\n // 1\n [1, 26, 19],\n [1, 26, 16],\n [1, 26, 13],\n [1, 26, 9],\n // 2\n [1, 44, 34],\n [1, 44, 28],\n [1, 44, 22],\n [1, 44, 16],\n // 3\n [1, 70, 55],\n [1, 70, 44],\n [2, 35, 17],\n [2, 35, 13],\n // 4\n [1, 100, 80],\n [2, 50, 32],\n [2, 50, 24],\n [4, 25, 9],\n // 5\n [1, 134, 108],\n [2, 67, 43],\n [2, 33, 15, 2, 34, 16],\n [2, 33, 11, 2, 34, 12],\n // 6\n [2, 86, 68],\n [4, 43, 27],\n [4, 43, 19],\n [4, 43, 15],\n // 7\n [2, 98, 78],\n [4, 49, 31],\n [2, 32, 14, 4, 33, 15],\n [4, 39, 13, 1, 40, 14],\n // 8\n [2, 121, 97],\n [2, 60, 38, 2, 61, 39],\n [4, 40, 18, 2, 41, 19],\n [4, 40, 14, 2, 41, 15],\n // 9\n [2, 146, 116],\n [3, 58, 36, 2, 59, 37],\n [4, 36, 16, 4, 37, 17],\n [4, 36, 12, 4, 37, 13],\n // 10\n [2, 86, 68, 2, 87, 69],\n [4, 69, 43, 1, 70, 44],\n [6, 43, 19, 2, 44, 20],\n [6, 43, 15, 2, 44, 16],\n // 11\n [4, 101, 81],\n [1, 80, 50, 4, 81, 51],\n [4, 50, 22, 4, 51, 23],\n [3, 36, 12, 8, 37, 13],\n // 12\n [2, 116, 92, 2, 117, 93],\n [6, 58, 36, 2, 59, 37],\n [4, 46, 20, 6, 47, 21],\n [7, 42, 14, 4, 43, 15],\n // 13\n [4, 133, 107],\n [8, 59, 37, 1, 60, 38],\n [8, 44, 20, 4, 45, 21],\n [12, 33, 11, 4, 34, 12],\n // 14\n [3, 145, 115, 1, 146, 116],\n [4, 64, 40, 5, 65, 41],\n [11, 36, 16, 5, 37, 17],\n [11, 36, 12, 5, 37, 13],\n // 15\n [5, 109, 87, 1, 110, 88],\n [5, 65, 41, 5, 66, 42],\n [5, 54, 24, 7, 55, 25],\n [11, 36, 12, 7, 37, 13],\n // 16\n [5, 122, 98, 1, 123, 99],\n [7, 73, 45, 3, 74, 46],\n [15, 43, 19, 2, 44, 20],\n [3, 45, 15, 13, 46, 16],\n // 17\n [1, 135, 107, 5, 136, 108],\n [10, 74, 46, 1, 75, 47],\n [1, 50, 22, 15, 51, 23],\n [2, 42, 14, 17, 43, 15],\n // 18\n [5, 150, 120, 1, 151, 121],\n [9, 69, 43, 4, 70, 44],\n [17, 50, 22, 1, 51, 23],\n [2, 42, 14, 19, 43, 15],\n // 19\n [3, 141, 113, 4, 142, 114],\n [3, 70, 44, 11, 71, 45],\n [17, 47, 21, 4, 48, 22],\n [9, 39, 13, 16, 40, 14],\n // 20\n [3, 135, 107, 5, 136, 108],\n [3, 67, 41, 13, 68, 42],\n [15, 54, 24, 5, 55, 25],\n [15, 43, 15, 10, 44, 16],\n // 21\n [4, 144, 116, 4, 145, 117],\n [17, 68, 42],\n [17, 50, 22, 6, 51, 23],\n [19, 46, 16, 6, 47, 17],\n // 22\n [2, 139, 111, 7, 140, 112],\n [17, 74, 46],\n [7, 54, 24, 16, 55, 25],\n [34, 37, 13],\n // 23\n [4, 151, 121, 5, 152, 122],\n [4, 75, 47, 14, 76, 48],\n [11, 54, 24, 14, 55, 25],\n [16, 45, 15, 14, 46, 16],\n // 24\n [6, 147, 117, 4, 148, 118],\n [6, 73, 45, 14, 74, 46],\n [11, 54, 24, 16, 55, 25],\n [30, 46, 16, 2, 47, 17],\n // 25\n [8, 132, 106, 4, 133, 107],\n [8, 75, 47, 13, 76, 48],\n [7, 54, 24, 22, 55, 25],\n [22, 45, 15, 13, 46, 16],\n // 26\n [10, 142, 114, 2, 143, 115],\n [19, 74, 46, 4, 75, 47],\n [28, 50, 22, 6, 51, 23],\n [33, 46, 16, 4, 47, 17],\n // 27\n [8, 152, 122, 4, 153, 123],\n [22, 73, 45, 3, 74, 46],\n [8, 53, 23, 26, 54, 24],\n [12, 45, 15, 28, 46, 16],\n // 28\n [3, 147, 117, 10, 148, 118],\n [3, 73, 45, 23, 74, 46],\n [4, 54, 24, 31, 55, 25],\n [11, 45, 15, 31, 46, 16],\n // 29\n [7, 146, 116, 7, 147, 117],\n [21, 73, 45, 7, 74, 46],\n [1, 53, 23, 37, 54, 24],\n [19, 45, 15, 26, 46, 16],\n // 30\n [5, 145, 115, 10, 146, 116],\n [19, 75, 47, 10, 76, 48],\n [15, 54, 24, 25, 55, 25],\n [23, 45, 15, 25, 46, 16],\n // 31\n [13, 145, 115, 3, 146, 116],\n [2, 74, 46, 29, 75, 47],\n [42, 54, 24, 1, 55, 25],\n [23, 45, 15, 28, 46, 16],\n // 32\n [17, 145, 115],\n [10, 74, 46, 23, 75, 47],\n [10, 54, 24, 35, 55, 25],\n [19, 45, 15, 35, 46, 16],\n // 33\n [17, 145, 115, 1, 146, 116],\n [14, 74, 46, 21, 75, 47],\n [29, 54, 24, 19, 55, 25],\n [11, 45, 15, 46, 46, 16],\n // 34\n [13, 145, 115, 6, 146, 116],\n [14, 74, 46, 23, 75, 47],\n [44, 54, 24, 7, 55, 25],\n [59, 46, 16, 1, 47, 17],\n // 35\n [12, 151, 121, 7, 152, 122],\n [12, 75, 47, 26, 76, 48],\n [39, 54, 24, 14, 55, 25],\n [22, 45, 15, 41, 46, 16],\n // 36\n [6, 151, 121, 14, 152, 122],\n [6, 75, 47, 34, 76, 48],\n [46, 54, 24, 10, 55, 25],\n [2, 45, 15, 64, 46, 16],\n // 37\n [17, 152, 122, 4, 153, 123],\n [29, 74, 46, 14, 75, 47],\n [49, 54, 24, 10, 55, 25],\n [24, 45, 15, 46, 46, 16],\n // 38\n [4, 152, 122, 18, 153, 123],\n [13, 74, 46, 32, 75, 47],\n [48, 54, 24, 14, 55, 25],\n [42, 45, 15, 32, 46, 16],\n // 39\n [20, 147, 117, 4, 148, 118],\n [40, 75, 47, 7, 76, 48],\n [43, 54, 24, 22, 55, 25],\n [10, 45, 15, 67, 46, 16],\n // 40\n [19, 148, 118, 6, 149, 119],\n [18, 75, 47, 31, 76, 48],\n [34, 54, 24, 34, 55, 25],\n [20, 45, 15, 61, 46, 16]\n ];\n constructor(totalCount, dataCount) {\n this.totalCount = totalCount;\n this.dataCount = dataCount;\n }\n getDataCount() {\n return this.dataCount;\n }\n getTotalCount() {\n return this.totalCount;\n }\n static getRSBlocks(typeNumber, errorCorrectLevel) {\n const rsBlock = RSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);\n const length = rsBlock.length / 3;\n const list = [];\n for (let i = 0; i < length; i += 1) {\n const count = rsBlock[i * 3 + 0];\n const totalCount = rsBlock[i * 3 + 1];\n const dataCount = rsBlock[i * 3 + 2];\n for (let j = 0; j < count; j += 1) {\n list.push(new RSBlock(totalCount, dataCount));\n }\n }\n return list;\n }\n static getRsBlockTable(typeNumber, errorCorrectLevel) {\n switch (errorCorrectLevel) {\n case ErrorCorrectLevel.L:\n return RSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n case ErrorCorrectLevel.M:\n return RSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n case ErrorCorrectLevel.Q:\n return RSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n case ErrorCorrectLevel.H:\n return RSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n default:\n break;\n }\n throw new Error('tn:' + typeNumber + '/ecl:' + errorCorrectLevel);\n }\n}\n//# sourceMappingURL=RSBlock.js.map","import { BitBuffer } from './BitBuffer.js';\nimport { ErrorCorrectLevel } from './ErrorCorrectLevel.js';\nimport { Polynomial } from './Polynomial.js';\nimport { QR8BitByte } from './QR8BitByte.js';\nimport { QRAlphaNum } from './QRAlphaNum.js';\nimport { QRData } from './QRData.js';\nimport { QRKanji } from './QRKanji.js';\nimport { QRNumber } from './QRNumber.js';\nimport { QRUtil } from './QRUtil.js';\nimport { RSBlock } from './RSBlock.js';\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nconst TypeNumber = Array(41)\n .fill(0)\n .map((_, i) => i);\nexport { TypeNumber };\nexport var ErrorCorrectionLevel;\n(function (ErrorCorrectionLevel) {\n ErrorCorrectionLevel[\"L\"] = \"L\";\n ErrorCorrectionLevel[\"M\"] = \"M\";\n ErrorCorrectionLevel[\"Q\"] = \"Q\";\n ErrorCorrectionLevel[\"H\"] = \"H\";\n})(ErrorCorrectionLevel || (ErrorCorrectionLevel = {}));\nexport var Mode;\n(function (Mode) {\n Mode[\"numeric\"] = \"numeric\";\n Mode[\"alphanumeric\"] = \"alphanumeric\";\n /**\n * Default\n */\n Mode[\"byte\"] = \"byte\";\n Mode[\"kanji\"] = \"kanji\";\n Mode[\"unicode\"] = \"unicode\";\n})(Mode || (Mode = {}));\n/**\n * QRCode\n *\n * @author Kazuhiko Arase\n */\nexport class QRCodeMinimal {\n static stringToBytesFuncs = {\n default(s) {\n const bytes = [];\n for (let i = 0; i < s.length; i += 1) {\n const c = s.charCodeAt(i);\n bytes.push(c & 0xff);\n }\n return bytes;\n }\n };\n static PAD0 = 0xec;\n static PAD1 = 0x11;\n typeNumber;\n errorCorrectLevel;\n qrDataList;\n modules = [];\n moduleCount = 0;\n constructor(typeNumber = 0, errorCorrectionLevel = ErrorCorrectionLevel.L) {\n this.typeNumber = typeNumber;\n this.errorCorrectLevel = ErrorCorrectLevel[errorCorrectionLevel];\n this.qrDataList = [];\n }\n getTypeNumber() {\n return this.typeNumber;\n }\n setTypeNumber(typeNumber) {\n this.typeNumber = typeNumber;\n }\n getErrorCorrectLevel() {\n return this.errorCorrectLevel;\n }\n setErrorCorrectLevel(errorCorrectLevel) {\n this.errorCorrectLevel = errorCorrectLevel;\n }\n clearData() {\n this.qrDataList = [];\n }\n addData(qrData, mode = Mode.byte) {\n if (qrData instanceof QRData) {\n this.qrDataList.push(qrData);\n }\n else if (typeof qrData === 'string') {\n switch (mode) {\n case Mode.numeric:\n this.qrDataList.push(new QRNumber(qrData));\n break;\n case Mode.alphanumeric:\n this.qrDataList.push(new QRAlphaNum(qrData));\n break;\n case Mode.byte:\n this.qrDataList.push(new QR8BitByte(qrData, QRCodeMinimal.stringToBytesFuncs.default));\n break;\n case Mode.unicode:\n this.qrDataList.push(new QR8BitByte(qrData, QRCodeMinimal.stringToBytesFuncs['UTF8']));\n break;\n case Mode.kanji:\n this.qrDataList.push(new QRKanji(qrData, QRCodeMinimal.stringToBytesFuncs['SJIS']));\n break;\n default:\n throw new Error('mode:' + mode);\n }\n }\n else {\n throw new Error(typeof qrData);\n }\n }\n /*private getDataCount(): number {\n return this.qrDataList.length;\n }\n\n private getData(index: number): QRData {\n return this.qrDataList[index];\n }*/\n isDark(row, col) {\n if (this.modules[row][col] != null) {\n return this.modules[row][col];\n }\n else {\n return false;\n }\n }\n getModuleCount() {\n return this.moduleCount;\n }\n make() {\n if (this.typeNumber < 1) {\n let typeNumber = 1;\n for (; typeNumber < 40; typeNumber++) {\n const rsBlocks = RSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel);\n const buffer = new BitBuffer();\n this.qrDataList.forEach(data => {\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), data.getLengthInBits(typeNumber));\n data.write(buffer);\n });\n const totalDataCount = rsBlocks.reduce((t, v) => t + v.getDataCount(), 0);\n if (buffer.getLengthInBits() <= totalDataCount * 8) {\n break;\n }\n }\n this.typeNumber = typeNumber;\n }\n this.makeImpl(false, this.getBestMaskPattern());\n }\n getBestMaskPattern() {\n let minLostPoint = 0;\n let pattern = 0;\n for (let i = 0; i < 8; i += 1) {\n this.makeImpl(true, i);\n const lostPoint = QRUtil.getLostPoint(this);\n if (i == 0 || minLostPoint > lostPoint) {\n minLostPoint = lostPoint;\n pattern = i;\n }\n }\n return pattern;\n }\n makeImpl(test, maskPattern) {\n // initialize modules\n this.moduleCount = this.typeNumber * 4 + 17;\n this.modules = [];\n for (let i = 0; i < this.moduleCount; i += 1) {\n this.modules.push([]);\n for (let j = 0; j < this.moduleCount; j += 1) {\n this.modules[i].push(null);\n }\n }\n this.setupPositionProbePattern(0, 0);\n this.setupPositionProbePattern(this.moduleCount - 7, 0);\n this.setupPositionProbePattern(0, this.moduleCount - 7);\n this.setupPositionAdjustPattern();\n this.setupTimingPattern();\n this.setupTypeInfo(test, maskPattern);\n if (this.typeNumber >= 7) {\n this.setupTypeNumber(test);\n }\n const data = QRCodeMinimal.createData(this.typeNumber, this.errorCorrectLevel, this.qrDataList);\n this.mapData(data, maskPattern);\n }\n mapData(data, maskPattern) {\n let inc = -1;\n let row = this.moduleCount - 1;\n let bitIndex = 7;\n let byteIndex = 0;\n const maskFunc = QRUtil.getMaskFunc(maskPattern);\n for (let col = this.moduleCount - 1; col > 0; col -= 2) {\n if (col == 6) {\n col -= 1;\n }\n while (true) {\n for (let c = 0; c < 2; c += 1) {\n if (this.modules[row][col - c] == null) {\n let dark = false;\n if (byteIndex < data.length) {\n dark = ((data[byteIndex] >>> bitIndex) & 1) == 1;\n }\n const mask = maskFunc(row, col - c);\n if (mask) {\n dark = !dark;\n }\n this.modules[row][col - c] = dark;\n bitIndex -= 1;\n if (bitIndex == -1) {\n byteIndex += 1;\n bitIndex = 7;\n }\n }\n }\n row += inc;\n if (row < 0 || this.moduleCount <= row) {\n row -= inc;\n inc = -inc;\n break;\n }\n }\n }\n }\n setupPositionAdjustPattern() {\n const pos = QRUtil.getPatternPosition(this.typeNumber);\n pos.forEach(row => {\n pos.forEach(col => {\n if (this.modules[row][col] != null) {\n return;\n }\n for (let r = -2; r <= 2; r += 1) {\n for (let c = -2; c <= 2; c += 1) {\n if (r == -2 || r == 2 || c == -2 || c == 2 || (r == 0 && c == 0)) {\n this.modules[row + r][col + c] = true;\n }\n else {\n this.modules[row + r][col + c] = false;\n }\n }\n }\n });\n });\n }\n setupPositionProbePattern(row, col) {\n for (let r = -1; r <= 7; r += 1) {\n for (let c = -1; c <= 7; c += 1) {\n if (row + r <= -1 || this.moduleCount <= row + r || col + c <= -1 || this.moduleCount <= col + c) {\n continue;\n }\n if ((0 <= r && r <= 6 && (c == 0 || c == 6)) ||\n (0 <= c && c <= 6 && (r == 0 || r == 6)) ||\n (2 <= r && r <= 4 && 2 <= c && c <= 4)) {\n this.modules[row + r][col + c] = true;\n }\n else {\n this.modules[row + r][col + c] = false;\n }\n }\n }\n }\n setupTimingPattern() {\n for (let r = 8; r < this.moduleCount - 8; r += 1) {\n if (this.modules[r][6] != null) {\n continue;\n }\n this.modules[r][6] = r % 2 == 0;\n }\n for (let c = 8; c < this.moduleCount - 8; c += 1) {\n if (this.modules[6][c] != null) {\n continue;\n }\n this.modules[6][c] = c % 2 == 0;\n }\n }\n setupTypeNumber(test) {\n const bits = QRUtil.getBCHTypeNumber(this.typeNumber);\n for (let i = 0; i < 18; i += 1) {\n this.modules[~~(i / 3)][(i % 3) + this.moduleCount - 8 - 3] = !test && ((bits >> i) & 1) == 1;\n }\n for (let i = 0; i < 18; i += 1) {\n this.modules[(i % 3) + this.moduleCount - 8 - 3][~~(i / 3)] = !test && ((bits >> i) & 1) == 1;\n }\n }\n setupTypeInfo(test, maskPattern) {\n const data = (this.errorCorrectLevel << 3) | maskPattern;\n const bits = QRUtil.getBCHTypeInfo(data);\n // vertical\n for (let i = 0; i < 15; i += 1) {\n const mod = !test && ((bits >> i) & 1) == 1;\n if (i < 6) {\n this.modules[i][8] = mod;\n }\n else if (i < 8) {\n this.modules[i + 1][8] = mod;\n }\n else {\n this.modules[this.moduleCount - 15 + i][8] = mod;\n }\n }\n // horizontal\n for (let i = 0; i < 15; i += 1) {\n const mod = !test && ((bits >> i) & 1) == 1;\n if (i < 8) {\n this.modules[8][this.moduleCount - i - 1] = mod;\n }\n else if (i < 9) {\n this.modules[8][15 - i - 1 + 1] = mod;\n }\n else {\n this.modules[8][15 - i - 1] = mod;\n }\n }\n // fixed\n this.modules[this.moduleCount - 8][8] = !test;\n }\n static createData(typeNumber, errorCorrectLevel, dataArray) {\n const rsBlocks = RSBlock.getRSBlocks(typeNumber, errorCorrectLevel);\n const buffer = new BitBuffer();\n dataArray.forEach(data => {\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), data.getLengthInBits(typeNumber));\n data.write(buffer);\n });\n // calc max data count\n const totalDataCount = rsBlocks.reduce((t, v) => t + v.getDataCount(), 0);\n if (buffer.getLengthInBits() > totalDataCount * 8) {\n throw new Error('code length overflow. (' + buffer.getLengthInBits() + '>' + totalDataCount * 8 + ')');\n }\n // end\n if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n buffer.put(0, 4);\n }\n // padding\n while (buffer.getLengthInBits() % 8 != 0) {\n buffer.putBit(false);\n }\n // padding\n while (true) {\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(QRCodeMinimal.PAD0, 8);\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(QRCodeMinimal.PAD1, 8);\n }\n return QRCodeMinimal.createBytes(buffer, rsBlocks);\n }\n static createBytes(buffer, rsBlocks) {\n let offset = 0;\n let maxDcCount = 0;\n let maxEcCount = 0;\n const dcdata = new Array(rsBlocks.length).map(_ => []);\n const ecdata = new Array(rsBlocks.length).map(_ => []);\n function createNumArray(len) {\n const a = [];\n for (let i = 0; i < len; i += 1) {\n a.push(0);\n }\n return a;\n }\n for (let r = 0; r < rsBlocks.length; r += 1) {\n const dcCount = rsBlocks[r].getDataCount();\n const ecCount = rsBlocks[r].getTotalCount() - dcCount;\n maxDcCount = Math.max(maxDcCount, dcCount);\n maxEcCount = Math.max(maxEcCount, ecCount);\n dcdata[r] = createNumArray(dcCount);\n for (let i = 0; i < dcdata[r].length; i += 1) {\n dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];\n }\n offset += dcCount;\n const rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n const rawPoly = new Polynomial(dcdata[r], rsPoly.getLength() - 1);\n const modPoly = rawPoly.mod(rsPoly);\n ecdata[r] = createNumArray(rsPoly.getLength() - 1);\n for (let i = 0; i < ecdata[r].length; i += 1) {\n const modIndex = i + modPoly.getLength() - ecdata[r].length;\n ecdata[r][i] = modIndex >= 0 ? modPoly.getAt(modIndex) : 0;\n }\n }\n const totalCodeCount = rsBlocks.reduce((t, v) => t + v.getTotalCount(), 0);\n const data = createNumArray(totalCodeCount);\n let index = 0;\n for (let i = 0; i < maxDcCount; i += 1) {\n for (let r = 0; r < rsBlocks.length; r += 1) {\n if (i < dcdata[r].length) {\n data[index] = dcdata[r][i];\n index += 1;\n }\n }\n }\n for (let i = 0; i < maxEcCount; i += 1) {\n for (let r = 0; r < rsBlocks.length; r += 1) {\n if (i < ecdata[r].length) {\n data[index] = ecdata[r][i];\n index += 1;\n }\n }\n }\n return data;\n }\n}\n//# sourceMappingURL=QRCodeMinimal.js.map","const isObject = (obj: Record<string, unknown> | undefined): boolean =>\r\n !!obj && typeof obj === 'object' && !Array.isArray(obj)\r\n\r\nexport type UnknownObject = {\r\n [key: string]: any\r\n} | undefined\r\n\r\nexport function mergeDeep(target: UnknownObject, ...sources: UnknownObject[]): UnknownObject {\r\n if (!sources.length) return target\r\n const source = sources.shift()\r\n if (source === undefined || !isObject(target) || !isObject(source)) return target\r\n target = { ...target }\r\n Object.keys(source).forEach((key: string): void => {\r\n const targetValue = target[key]\r\n const sourceValue = source[key]\r\n\r\n if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\r\n target[key] = sourceValue\r\n } else if (isObject(targetValue) && isObject(sourceValue)) {\r\n target[key] = mergeDeep({ ...targetValue }, sourceValue)\r\n } else {\r\n target[key] = sourceValue\r\n }\r\n })\r\n\r\n return mergeDeep(target, ...sources)\r\n}\r\n","export enum GradientType {\r\n radial = 'radial',\r\n linear = 'linear'\r\n}\r\n\r\nexport interface Gradient {\r\n /**\r\n * Type of gradient spread\r\n *\r\n * @default GradientType.linear\r\n */\r\n type: `${GradientType}`\r\n /**\r\n * Rotation of gradient (in radians, Math.PI === 180 degrees)\r\n *\r\n * @default 0\r\n */\r\n rotation?: number\r\n /** Gradient colors. */\r\n colorStops: Array<{\r\n /** Position of color in gradient range */\r\n offset: number\r\n /** Color of stop in gradient range */\r\n color: string\r\n }>\r\n}\r\n\r\nexport function sanitizeGradient(gradient: Gradient): Gradient {\r\n const newGradient = { ...gradient }\r\n\r\n if (!newGradient.colorStops || !newGradient.colorStops.length) {\r\n throw new Error(\"Field 'colorStops' is required in gradient\")\r\n }\r\n\r\n if (newGradient.rotation) {\r\n newGradient.rotation = Number(newGradient.rotation)\r\n } else {\r\n newGradient.rotation = 0\r\n }\r\n\r\n newGradient.colorStops = newGradient.colorStops.map((colorStop: { offset: number, color: string }) => ({\r\n ...colorStop,\r\n offset: Number(colorStop.offset)\r\n }))\r\n\r\n return newGradient\r\n}\r\n","import { ErrorCorrectionLevel, Mode, TypeNumber } from '@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js'\r\nimport { browserImageTools } from '../tools/browser-image-tools.js'\r\nimport { Gradient, sanitizeGradient } from './gradient.js'\r\n\r\nexport enum DotType {\r\n dot = 'dot',\r\n randomDot = 'random-dot',\r\n rounded = 'rounded',\r\n extraRounded = 'extra-rounded',\r\n verticalLine = 'vertical-line',\r\n horizontalLine = 'horizontal-line',\r\n classy = 'classy',\r\n classyRounded = 'classy-rounded',\r\n square = 'square',\r\n smallSquare = 'small-square',\r\n tinySquare = 'tiny-square',\r\n diamond = 'diamond',\r\n wave = 'wave'\r\n}\r\n\r\nexport enum CornerDotType {\r\n dot = 'dot',\r\n square = 'square',\r\n heart = 'heart',\r\n extraRounded = 'extra-rounded',\r\n classy = 'classy',\r\n outpoint = 'outpoint',\r\n inpoint = 'inpoint'\r\n}\r\n\r\nexport enum CornerSquareType {\r\n dot = 'dot',\r\n square = 'square',\r\n extraRounded = 'extra-rounded',\r\n classy = 'classy',\r\n outpoint = 'outpoint',\r\n inpoint = 'inpoint'\r\n}\r\n\r\nexport enum ShapeType {\r\n square = 'square',\r\n circle = 'circle'\r\n}\r\n\r\nexport enum ImageMode {\r\n /**\r\n * Place image in the center of the code\r\n */\r\n center = 'center',\r\n /**\r\n * Place image over the center of the code\r\n */\r\n overlay = 'overlay',\r\n /**\r\n * Use image as background, draw dots over it\r\n */\r\n background = 'background'\r\n}\r\n\r\nexport interface Options {\r\n /** Use a custom DOM domplementation */\r\n document: Document\r\n /** Use a custom image fetching & serializaton implementation */\r\n imageTools?: typeof browserImageTools\r\n /** @ignore */\r\n width: number\r\n /** @ignore */\r\n height: number\r\n /** The data will be encoded in the QR code */\r\n data: string\r\n /** The image will be copied to the center of the QR code */\r\n image?: string | Buffer | Blob\r\n /**\r\n * QR code shape\r\n *\r\n * @default ShapeType.square\r\n */\r\n shape: `${ShapeType}`\r\n /** Options will be passed to `@liquid-js/qrcode-generator` lib */\r\n qrOptions: {\r\n typeNumber: TypeNumber\r\n mode?: `${Mode}`\r\n /** @default ErrorCorrectionLevel.Q */\r\n errorCorrectionLevel: `${ErrorCorrectionLevel}`\r\n }\r\n imageOptions: {\r\n /**\r\n * Image mode\r\n *\r\n * @default ImageMode.center\r\n */\r\n mode: `${ImageMode}`\r\n /**\r\n * Fill blank areas of the code with selected color\r\n */\r\n fill: {\r\n /**\r\n * Color of QR dots\r\n *\r\n * @default \"rgba(255,255,255,0.75)\"\r\n */\r\n color: string\r\n /** Gradient of Corners Dot */\r\n gradient?: Gradient\r\n }\r\n /**\r\n * Coefficient of the image size\r\n *\r\n * @default 0.4\r\n */\r\n imageSize: number\r\n /**\r\n * Margin of the image (in blocks)\r\n *\r\n * @default 0\r\n */\r\n margin: number\r\n /**\r\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLImageElement/crossOrigin)\r\n */\r\n crossOrigin?: string\r\n }\r\n dotsOptions: {\r\n /**\r\n * QR dot size (in pixels)\r\n *\r\n * @default 10\r\n */\r\n size: number\r\n /**\r\n * Color of QR dots\r\n *\r\n * @default \"#000\"\r\n */\r\n color: string\r\n /** Gradient of QR dots */\r\n gradient?: Gradient\r\n /**\r\n * Style of QR dots\r\n *\r\n * @default DotType.square\r\n */\r\n type: `${DotType}`\r\n }\r\n /** Corners Square options, omitted values match dots */\r\n cornersSquareOptions?: {\r\n /** Color of Corners Square */\r\n color?: string\r\n /** Gradient of Corners Square */\r\n gradient?: Gradient\r\n /** Style of Corners Square */\r\n type?: `${CornerSquareType | DotType}`\r\n }\r\n /** Corners Dot options, omitted values match squares */\r\n cornersDotOptions?: {\r\n /** Color of Corners Dot */\r\n color?: string\r\n /** Gradient of Corners Dot */\r\n gradient?: Gradient\r\n /** Style of Corners Dot */\r\n type?: `${CornerDotType | DotType}`\r\n }\r\n /** QR background styling options, false to disable background */\r\n backgroundOptions?: {\r\n /** Background roundnes, from 0 (square) to 1 (circle) */\r\n round?: number\r\n /** Background color */\r\n color?: string\r\n /** Background Gradient */\r\n gradient?: Gradient\r\n /**\r\n * Margin (in blocks) between background and the QR code\r\n *\r\n * @default 0\r\n */\r\n margin?: number\r\n } | false\r\n /** `import { stringToBytesFuncs } from \"@liquid-js/qr-code-styling/kanji\";` to add Kanji support */\r\n stringToBytesFuncs?: { [encoding: string]: (s: string) => number[] }\r\n}\r\n\r\nexport const defaultOptions: Options = {\r\n document: undefined as never,\r\n shape: ShapeType.square,\r\n width: undefined as never,\r\n height: undefined as never,\r\n data: '',\r\n qrOptions: {\r\n typeNumber: TypeNumber[0],\r\n mode: undefined,\r\n errorCorrectionLevel: ErrorCorrectionLevel.Q\r\n },\r\n imageOptions: {\r\n mode: ImageMode.center,\r\n imageSize: 0.4,\r\n crossOrigin: undefined,\r\n margin: 0,\r\n fill: {\r\n color: 'rgba(255,255,255,1)'\r\n }\r\n },\r\n dotsOptions: {\r\n type: DotType.square,\r\n color: '#000',\r\n size: 10\r\n }\r\n}\r\n\r\nexport function sanitizeOptions(options: Options): Options {\r\n const newOptions = { ...options }\r\n\r\n newOptions.imageOptions = {\r\n ...newOptions.imageOptions,\r\n imageSize: Math.min(1, Number(newOptions.imageOptions.imageSize)) || 1,\r\n margin: Number(newOptions.imageOptions.margin),\r\n fill: {\r\n ...newOptions.imageOptions.fill\r\n }\r\n }\r\n\r\n if (newOptions.imageOptions.mode == ImageMode.overlay) newOptions.imageOptions.margin = 0\r\n if (newOptions.imageOptions.fill.gradient) {\r\n newOptions.imageOptions.fill.gradient = sanitizeGradient(newOptions.imageOptions.fill.gradient)\r\n }\r\n\r\n newOptions.dotsOptions = {\r\n ...newOptions.dotsOptions\r\n }\r\n if (newOptions.dotsOptions.gradient) {\r\n newOptions.dotsOptions.gradient = sanitizeGradient(newOptions.dotsOptions.gradient)\r\n }\r\n // Ensure integer dot size\r\n newOptions.dotsOptions.size = Math.round(Math.max(0, newOptions.dotsOptions.size) || 10)\r\n\r\n if (newOptions.cornersSquareOptions) {\r\n newOptions.cornersSquareOptions = {\r\n ...newOptions.cornersSquareOptions\r\n }\r\n if (newOptions.cornersSquareOptions.gradient) {\r\n newOptions.cornersSquareOptions.gradient = sanitizeGradient(newOptions.cornersSquareOptions.gradient)\r\n }\r\n }\r\n\r\n if (newOptions.cornersDotOptions) {\r\n newOptions.cornersDotOptions = {\r\n ...newOptions.cornersDotOptions\r\n }\r\n if (newOptions.cornersDotOptions.gradient) {\r\n newOptions.cornersDotOptions.gradient = sanitizeGradient(newOptions.cornersDotOptions.gradient)\r\n }\r\n }\r\n\r\n if (newOptions.backgroundOptions) {\r\n newOptions.backgroundOptions = {\r\n ...newOptions.backgroundOptions\r\n }\r\n if (newOptions.backgroundOptions.gradient) {\r\n newOptions.backgroundOptions.gradient = sanitizeGradient(newOptions.backgroundOptions.gradient)\r\n }\r\n }\r\n\r\n if (!newOptions.document) newOptions.document = document\r\n\r\n return newOptions\r\n}\r\n","import { ErrorCorrectionLevel, Mode } from '@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js'\r\n\r\nexport const ErrorCorrectionPercents = {\r\n [ErrorCorrectionLevel.L]: 0.07,\r\n [ErrorCorrectionLevel.M]: 0.15,\r\n [ErrorCorrectionLevel.Q]: 0.25,\r\n [ErrorCorrectionLevel.H]: 0.3\r\n}\r\n\r\nexport function getMode(data: string): Mode {\r\n switch (true) {\r\n case /^[0-9]*$/.test(data):\r\n return Mode.numeric\r\n case /^[0-9A-Z $%*+\\-./:]*$/.test(data):\r\n return Mode.alphanumeric\r\n\r\n case /[^\\u0000-\\u00ff]/.test(data):\r\n return Mode.unicode\r\n default:\r\n return Mode.byte\r\n }\r\n}\r\n","const rx = /\\.?0+$/\r\n\r\nexport function numToAttr(value: number) {\r\n return value.toFixed(7).replace(rx, '')\r\n}\r\n\r\nexport function svgPath(strings: TemplateStringsArray, ...values: unknown[]) {\r\n return strings\r\n .reduce((t, v, i) => {\r\n let p: unknown = ''\r\n if (i) p = values[i - 1]\r\n if (typeof p == 'number') p = numToAttr(p)\r\n return `${t}${p}${v}`\r\n }, '')\r\n .trim()\r\n .replace(/[\\s\\n\\r]+/gim, ' ')\r\n}\r\n","import { BasicFigureDrawArgs, DrawArgs, RotateFigureArgs } from '../types/helper.js'\r\nimport { CornerDotType } from '../utils/options.js'\r\nimport { numToAttr, svgPath } from '../utils/svg.js'\r\n\r\nexport class QRCornerDot {\r\n private _element?: SVGElement\r\n\r\n get element() {\r\n return this._element\r\n }\r\n\r\n constructor(\r\n private readonly type: `${CornerDotType}`,\r\n private readonly document: Document\r\n ) { }\r\n\r\n draw(args: DrawArgs): void {\r\n const type = this.type\r\n let drawFunction\r\n\r\n switch (type) {\r\n case CornerDotType.square:\r\n drawFunction = this.drawSquare\r\n break\r\n case CornerDotType.heart:\r\n drawFunction = this.drawHeart\r\n break\r\n case CornerDotType.extraRounded:\r\n drawFunction = this.drawRounded\r\n break\r\n case CornerDotType.classy:\r\n drawFunction = this.drawClassy\r\n break\r\n case CornerDotType.inpoint:\r\n drawFunction = this.drawInpoint\r\n break\r\n case CornerDotType.outpoint:\r\n drawFunction = this.drawOutpoint\r\n break\r\n case CornerDotType.dot:\r\n default:\r\n drawFunction = this.drawDot\r\n }\r\n\r\n drawFunction.call(this, args)\r\n }\r\n\r\n private rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\r\n const cx = x + size / 2\r\n const cy = y + size / 2\r\n\r\n draw()\r\n this._element?.setAttribute('transform', `rotate(${numToAttr((180 * rotation) / Math.PI)},${cx},${cy})`)\r\n }\r\n\r\n private basicDot(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'circle')\r\n this._element.setAttribute('cx', numToAttr(x + size / 2))\r\n this._element.setAttribute('cy', numToAttr(y + size / 2))\r\n this._element.setAttribute('r', numToAttr(size / 2))\r\n }\r\n })\r\n }\r\n\r\n private basicSquare(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'rect')\r\n this._element.setAttribute('x', numToAttr(x))\r\n this._element.setAttribute('y', numToAttr(y))\r\n this._element.setAttribute('width', numToAttr(size))\r\n this._element.setAttribute('height', numToAttr(size))\r\n }\r\n })\r\n }\r\n\r\n private basicHeart(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n const path = [\r\n 'M',\r\n 1,\r\n 0.3262506,\r\n 'c',\r\n 0,\r\n 0.0383376,\r\n -0.0064626,\r\n 0.0758377,\r\n -0.0193751,\r\n 0.1125001,\r\n 's',\r\n -0.0356247,\r\n 0.076875,\r\n -0.0681248,\r\n 0.1206252,\r\n 'c',\r\n -0.0325,\r\n 0.0437499,\r\n -0.0762503,\r\n 0.0931247,\r\n -0.1312501,\r\n 0.1481249,\r\n 'C',\r\n 0.7262502,\r\n 0.7625008,\r\n 0.6566626,\r\n 0.8279132,\r\n 0.5724999,\r\n 0.9037505,\r\n 'L',\r\n 0.5,\r\n 0.9687506,\r\n 'L',\r\n 0.4275001,\r\n 0.9037505,\r\n 'C',\r\n 0.3433374,\r\n 0.8279132,\r\n 0.2737499,\r\n 0.7625005,\r\n 0.21875,\r\n 0.7075007,\r\n 'C',\r\n 0.1637501,\r\n 0.6525008,\r\n 0.1199999,\r\n 0.6031258,\r\n 0.0874999,\r\n 0.5593758,\r\n 'S',\r\n 0.0322876,\r\n 0.4754133,\r\n 0.0193751,\r\n 0.4387506,\r\n 'S',\r\n 0,\r\n 0.3645881,\r\n 0,\r\n 0.3262506,\r\n 'c',\r\n 0,\r\n -0.0783374,\r\n 0.0262499,\r\n -0.1437498,\r\n 0.07875,\r\n -0.1962499,\r\n 's',\r\n 0.1179124,\r\n -0.07875,\r\n 0.1962499,\r\n -0.07875,\r\n 'c',\r\n 0.0433376,\r\n 0,\r\n 0.0845875,\r\n 0.0091625,\r\n 0.12375,\r\n 0.0274999,\r\n 'S',\r\n 0.4716623,\r\n 0.1229131,\r\n 0.5,\r\n 0.1562506,\r\n 'c',\r\n 0.0283374,\r\n -0.0333375,\r\n 0.0620874,\r\n -0.0591625,\r\n 0.1012502,\r\n -0.0775,\r\n 'c',\r\n 0.0391627,\r\n -0.0183375,\r\n 0.0804126,\r\n -0.0274999,\r\n 0.12375,\r\n -0.0274999,\r\n 'c',\r\n 0.0783374,\r\n 0,\r\n 0.1437497,\r\n 0.0262499,\r\n 0.1962501,\r\n 0.07875,\r\n 'S',\r\n 1,\r\n 0.2479131,\r\n 1,\r\n 0.3262506,\r\n 'z'\r\n ]\r\n let move = false\r\n let i = 0\r\n this._element.setAttribute(\r\n 'd',\r\n path\r\n .map((v) => {\r\n if (typeof v == 'string') {\r\n i = 0\r\n move = v.toUpperCase() == v\r\n return v\r\n }\r\n i++\r\n v = v * size\r\n if (move) {\r\n v += i % 2 == 1 ? x : y\r\n }\r\n return numToAttr(v)\r\n })\r\n .join(' ')\r\n )\r\n }\r\n\r\n private basicRounded(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'rect')\r\n this._element.setAttribute('x', numToAttr(x))\r\n this._element.setAttribute('y', numToAttr(y))\r\n this._element.setAttribute('width', numToAttr(size))\r\n this._element.setAttribute('height', numToAttr(size))\r\n this._element.setAttribute('rx', numToAttr(size / 4))\r\n this._element.setAttribute('ry', numToAttr(size / 4))\r\n }\r\n })\r\n }\r\n\r\n private basicClassy(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n const dotSize = size / 7\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._element.setAttribute('clip-rule', 'evenodd')\r\n this._element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y + 2.5 * dotSize}\r\n v ${2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}\r\n h ${4.5 * dotSize}\r\n v ${-4.5 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}\r\n h ${-2 * dotSize}\r\n H ${x}\r\n z`\r\n )\r\n }\r\n })\r\n }\r\n\r\n private basicInpoint(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n const dotSize = size\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._element.setAttribute('clip-rule', 'evenodd')\r\n this._element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y + dotSize / 2}\r\n v ${dotSize / 4}\r\n a ${dotSize / 4}, ${dotSize / 4} 0 0 0 ${dotSize / 4}, ${dotSize / 4}\r\n h ${(dotSize / 4) * 3}\r\n v ${(-dotSize / 4) * 3}\r\n a ${dotSize / 4}, ${dotSize / 4} 0 0 0 ${-dotSize / 4}, ${-dotSize / 4}\r\n h ${-dotSize / 2}\r\n a ${dotSize / 4}, ${dotSize / 4} 0 0 0 ${-dotSize / 4}, ${dotSize / 4}\r\n z`\r\n )\r\n }\r\n })\r\n }\r\n\r\n private drawDot({ x, y, size, rotation }: DrawArgs): void {\r\n this.basicDot({ x, y, size, rotation })\r\n }\r\n\r\n private drawSquare({ x, y, size, rotation }: DrawArgs): void {\r\n this.basicSquare({ x, y, size, rotation })\r\n }\r\n\r\n private drawHeart({ x, y, size, rotation }: DrawArgs): void {\r\n this.basicHeart({ x, y, size, rotation })\r\n }\r\n\r\n private drawRounded({ x, y, size, rotation }: DrawArgs): void {\r\n this.basicRounded({ x, y, size, rotation })\r\n }\r\n\r\n private drawClassy({ x, y, size, rotation }: DrawArgs): void {\r\n this.basicClassy({ x, y, size, rotation })\r\n }\r\n\r\n private drawInpoint({ x, y, size, rotation }: DrawArgs): void {\r\n this.basicInpoint({ x, y, size, rotation })\r\n }\r\n\r\n private drawOutpoint({ x, y, size, rotation }: DrawArgs): void {\r\n this.basicInpoint({ x, y, size, rotation: (rotation || 0) + Math.PI })\r\n }\r\n}\r\n","import { BasicFigureDrawArgs, DrawArgs, RotateFigureArgs } from '../types/helper.js'\r\nimport { CornerSquareType } from '../utils/options.js'\r\nimport { numToAttr, svgPath } from '../utils/svg.js'\r\n\r\nexport class QRCornerSquare {\r\n private _element?: SVGElement\r\n private _fill?: SVGElement\r\n\r\n get element() {\r\n return this._element\r\n }\r\n\r\n get fill() {\r\n return this._fill\r\n }\r\n\r\n constructor(\r\n private readonly type: `${CornerSquareType}`,\r\n private readonly document: Document\r\n ) { }\r\n\r\n draw(args: DrawArgs): void {\r\n const type = this.type\r\n let drawFunction\r\n\r\n switch (type) {\r\n case CornerSquareType.square:\r\n drawFunction = this.drawSquare\r\n break\r\n case CornerSquareType.extraRounded:\r\n drawFunction = this.drawExtraRounded\r\n break\r\n case CornerSquareType.classy:\r\n drawFunction = this.drawClassy\r\n break\r\n case CornerSquareType.outpoint:\r\n drawFunction = this.drawOutpoint\r\n break\r\n case CornerSquareType.inpoint:\r\n drawFunction = this.drawInpoint\r\n break\r\n case CornerSquareType.dot:\r\n default:\r\n drawFunction = this.drawDot\r\n }\r\n\r\n drawFunction.call(this, args)\r\n }\r\n\r\n private rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\r\n const cx = x + size / 2\r\n const cy = y + size / 2\r\n\r\n draw()\r\n this._element?.setAttribute('transform', `rotate(${numToAttr((180 * rotation) / Math.PI)},${cx},${cy})`)\r\n this._fill?.setAttribute('transform', `rotate(${numToAttr((180 * rotation) / Math.PI)},${cx},${cy})`)\r\n }\r\n\r\n private basicDot(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n const dotSize = size / 7\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._element.setAttribute('clip-rule', 'evenodd')\r\n this._element.setAttribute(\r\n 'd',\r\n svgPath`M ${x + size / 2} ${y}\r\n a ${size / 2} ${size / 2} 0 1 0 0.1 0\r\n z\r\n m 0 ${dotSize}\r\n a ${size / 2 - dotSize} ${size / 2 - dotSize} 0 1 1 -0.1 0\r\n Z`\r\n )\r\n this._fill = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._fill.setAttribute('clip-rule', 'evenodd')\r\n this._fill.setAttribute(\r\n 'd',\r\n svgPath`M ${x + size / 2} ${y - dotSize}\r\n a ${size / 2 + dotSize} ${size / 2 + dotSize} 0 1 0 0.1 0\r\n z`\r\n )\r\n }\r\n })\r\n }\r\n\r\n private basicSquare(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n const dotSize = size / 7\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._element.setAttribute('clip-rule', 'evenodd')\r\n this._element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y}\r\n v ${size}\r\n h ${size}\r\n v ${-size}\r\n z\r\n M ${x + dotSize} ${y + dotSize}\r\n h ${size - 2 * dotSize}\r\n v ${size - 2 * dotSize}\r\n h ${-size + 2 * dotSize}\r\n z`\r\n )\r\n this._fill = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._fill.setAttribute('clip-rule', 'evenodd')\r\n this._fill.setAttribute(\r\n 'd',\r\n svgPath`\r\n M ${x - dotSize} ${y - dotSize}\r\n h ${size + 2 * dotSize}\r\n v ${size + 2 * dotSize}\r\n h ${-size - 2 * dotSize}\r\n z`\r\n )\r\n }\r\n })\r\n }\r\n\r\n private basicExtraRounded(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n const dotSize = size / 7\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._element.setAttribute('clip-rule', 'evenodd')\r\n this._element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y + 2.5 * dotSize}\r\n v ${2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}\r\n h ${2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${-dotSize * 2.5}\r\n v ${-2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}\r\n h ${-2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${dotSize * 2.5}\r\n z\r\n M ${x + 2.5 * dotSize} ${y + dotSize}\r\n h ${2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}\r\n v ${2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${dotSize * 1.5}\r\n h ${-2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}\r\n v ${-2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${-dotSize * 1.5}\r\n z`\r\n )\r\n this._fill = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._fill.setAttribute('clip-rule', 'evenodd')\r\n this._fill.setAttribute(\r\n 'd',\r\n svgPath`\r\n M ${x - dotSize} ${y + 2.5 * dotSize}\r\n v ${2 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 0, ${dotSize * 3.5} ${dotSize * 3.5}\r\n h ${2 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 0, ${dotSize * 3.5} ${-dotSize * 3.5}\r\n v ${-2 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 0, ${-dotSize * 3.5} ${-dotSize * 3.5}\r\n h ${-2 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 0, ${-dotSize * 3.5} ${dotSize * 3.5}\r\n z`\r\n )\r\n }\r\n })\r\n }\r\n\r\n private basicClassy(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n const dotSize = size / 7\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._element.setAttribute('clip-rule', 'evenodd')\r\n this._element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y + 2.5 * dotSize}\r\n v ${2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}\r\n h ${4.5 * dotSize}\r\n v ${-4.5 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}\r\n h ${-2 * dotSize}\r\n H ${x}\r\n z\r\n M ${x + 2.5 * dotSize} ${y + dotSize}\r\n h ${2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}\r\n v ${3.5 * dotSize}\r\n h ${-3.5 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}\r\n v ${-3.5 * dotSize}\r\n z`\r\n )\r\n this._fill = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._fill.setAttribute('clip-rule', 'evenodd')\r\n this._fill.setAttribute(\r\n 'd',\r\n svgPath`\r\n M ${x + 0.5 * dotSize} ${y - dotSize}\r\n h ${4 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${dotSize * 3.5} ${dotSize * 3.5}\r\n v ${5.5 * dotSize}\r\n h ${-5.5 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${-dotSize * 3.5} ${-dotSize * 3.5}\r\n v ${-5.5 * dotSize}\r\n z`\r\n )\r\n }\r\n })\r\n }\r\n\r\n private basicInpoint(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n const dotSize = size / 7\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._element.setAttribute('clip-rule', 'evenodd')\r\n this._element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y + 2.5 * dotSize}\r\n v ${2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}\r\n h ${4.5 * dotSize}\r\n v ${-4.5 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}\r\n h ${-2 * dotSize}\r\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${dotSize * 2.5}\r\n z\r\n M ${x + 2.5 * dotSize} ${y + dotSize}\r\n h ${2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}\r\n v ${3.5 * dotSize}\r\n h ${-3.5 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}\r\n v ${-2 * dotSize}\r\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${-dotSize * 1.5}\r\n z`\r\n )\r\n this._fill = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._fill.setAttribute('clip-rule', 'evenodd')\r\n this._fill.setAttribute(\r\n 'd',\r\n svgPath`\r\n M ${x + 0.5 * dotSize} ${y - dotSize}\r\n h ${4 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${dotSize * 3.5} ${dotSize * 3.5}\r\n v ${5.5 * dotSize}\r\n h ${-5.5 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${-dotSize * 3.5} ${-dotSize * 3.5}\r\n v ${-2 * dotSize}\r\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${dotSize * 3.5} ${-dotSize * 3.5}\r\n z`\r\n )\r\n }\r\n })\r\n }\r\n\r\n private drawDot({ x, y, size, rotation }: DrawArgs): void {\r\n this.basicDot({ x, y, size, rotation })\r\n }\r\n\r\n private drawSquare({ x, y, size, rotation }: DrawArgs): void {\r\n this.basicSquare({ x, y, size, rotation })\r\n }\r\n\r\n private drawExtraRounded({ x, y, size, rotation }: DrawArgs): void {\r\n this.basicExtraRounded({ x, y, size, rotation })\r\n }\r\n\r\n private drawClassy({ x, y, size, rotation }: DrawArgs): void {\r\n this.basicClassy({ x, y, size, rotation })\r\n }\r\n\r\n private drawInpoint({ x, y, size, rotation }: DrawArgs): void {\r\n this.basicInpoint({ x, y, size, rotation })\r\n }\r\n\r\n private drawOutpoint({ x, y, size, rotation }: DrawArgs): void {\r\n this.basicInpoint({ x, y, size, rotation: (rotation || 0) + Math.PI })\r\n }\r\n}\r\n","import { BasicFigureDrawArgs, DrawArgs, RotateFigureArgs } from '../types/helper.js'\r\nimport { DotType } from '../utils/options.js'\r\nimport { numToAttr, svgPath } from '../utils/svg.js'\r\n\r\nexport class QRDot {\r\n private _element?: SVGElement\r\n\r\n get element() {\r\n return this._element\r\n }\r\n\r\n constructor(\r\n private readonly type: `${DotType}`,\r\n private readonly document: Document\r\n ) { }\r\n\r\n draw(args: DrawArgs): void {\r\n const type = this.type\r\n let drawFunction\r\n\r\n switch (type) {\r\n case DotType.dot:\r\n drawFunction = this.drawDot\r\n break\r\n case DotType.randomDot:\r\n drawFunction = this.drawRandomDot\r\n break\r\n case DotType.classy:\r\n drawFunction = this.drawClassy\r\n break\r\n case DotType.classyRounded:\r\n drawFunction = this.drawClassyRounded\r\n break\r\n case DotType.rounded:\r\n drawFunction = this.drawRounded\r\n break\r\n case DotType.verticalLine:\r\n drawFunction = this.drawVerticalLine\r\n break\r\n case DotType.horizontalLine:\r\n drawFunction = this.drawHorizontalLine\r\n break\r\n case DotType.extraRounded:\r\n drawFunction = this.drawExtraRounded\r\n break\r\n case DotType.diamond:\r\n drawFunction = this.drawDiamond\r\n break\r\n case DotType.smallSquare:\r\n drawFunction = this.drawSmallSquare\r\n break\r\n case DotType.tinySquare:\r\n drawFunction = this.drawTinySquare\r\n break\r\n case DotType.wave:\r\n drawFunction = this.drawWave\r\n break\r\n case DotType.square:\r\n default:\r\n drawFunction = this.drawSquare\r\n break\r\n }\r\n\r\n drawFunction.call(this, args)\r\n }\r\n\r\n private rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\r\n const cx = x + size / 2\r\n const cy = y + size / 2\r\n\r\n draw()\r\n this._element?.setAttribute('transform', `rotate(${numToAttr((180 * rotation) / Math.PI)},${cx},${cy})`)\r\n }\r\n\r\n private basicDot(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'circle')\r\n this._element.setAttribute('cx', numToAttr(x + size / 2))\r\n this._element.setAttribute('cy', numToAttr(y + size / 2))\r\n this._element.setAttribute('r', numToAttr(size / 2))\r\n }\r\n })\r\n }\r\n\r\n private basicSquare(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'rect')\r\n this._element.setAttribute('x', numToAttr(x))\r\n this._element.setAttribute('y', numToAttr(y))\r\n this._element.setAttribute('width', numToAttr(size))\r\n this._element.setAttribute('height', numToAttr(size))\r\n }\r\n })\r\n }\r\n\r\n //if rotation === 0 - right side is rounded\r\n private basicSideRounded(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y}\r\n v ${size}\r\n h ${size / 2}\r\n a ${size / 2} ${size / 2}, 0, 0, 0, 0 ${-size}\r\n z`\r\n )\r\n }\r\n })\r\n }\r\n\r\n //if rotation === 0 - top right corner is rounded\r\n private basicCornerRounded(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y}\r\n v ${size}\r\n h ${size}\r\n v ${-size / 2}\r\n a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}\r\n z`\r\n )\r\n }\r\n })\r\n }\r\n\r\n //if rotation === 0 - top right corner is rounded\r\n private basicCornerExtraRounded(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y}\r\n v ${size}\r\n h ${size}\r\n a ${size} ${size}, 0, 0, 0, ${-size} ${-size}\r\n z`\r\n )\r\n }\r\n })\r\n }\r\n\r\n //if rotation === 0 - left bottom and right top corners are rounded\r\n private basicCornersRounded(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y}\r\n v ${size / 2}\r\n a ${size / 2} ${size / 2}, 0, 0, 0, ${size / 2} ${size / 2}\r\n h ${size / 2}\r\n v ${-size / 2}\r\n a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}\r\n z`\r\n )\r\n }\r\n })\r\n }\r\n\r\n private basicWave(args: BasicFigureDrawArgs): void {\r\n const { size, x, y } = args\r\n\r\n const a1 = 5 * Math.PI / 180\r\n const a2 = 65 * Math.PI / 180\r\n const s1 = 0.95\r\n const s2 = 0.65\r\n\r\n const c23x = size * (s1 - s2 * Math.cos(a1))\r\n const c23y = size * (1 - s2 * Math.sin(a1))\r\n\r\n const c31x = -size * Math.cos(a2) / 2\r\n const c31y = -size * Math.sin(a2) / 2\r\n\r\n this.rotateFigure({\r\n ...args,\r\n draw: () => {\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'path')\r\n this._element.setAttribute(\r\n 'd',\r\n svgPath`M ${x} ${y}\r\n c 0 ${size * s2} ${c23x} ${c23y} ${size * s1} ${size}\r\n c ${c31x} ${c31y} ${size * (1 - s1)} ${-size / 2} ${size * (1 - s1)} ${-size}\r\n z`\r\n )\r\n }\r\n })\r\n }\r\n\r\n private drawDot({ x, y, size }: DrawArgs): void {\r\n this.basicDot({ x, y, size, rotation: 0 })\r\n }\r\n\r\n private drawRandomDot({ x, y, size }: DrawArgs): void {\r\n const randomFactor = Math.random() * (1 - 0.75) + 0.75\r\n this.basicDot({ x, y, size: size * randomFactor, rotation: 0 })\r\n }\r\n\r\n private drawSquare({ x, y, size }: DrawArgs): void {\r\n this.basicSquare({ x, y, size, rotation: 0 })\r\n }\r\n\r\n private drawSmallSquare({ x, y, size }: DrawArgs): void {\r\n const originalSize = size\r\n\r\n size = originalSize * 0.7\r\n x = x + originalSize * 0.15\r\n y = y + originalSize * 0.15\r\n\r\n this.basicSquare({ x, y, size, rotation: 0 })\r\n }\r\n\r\n private drawTinySquare({ x, y, size }: DrawArgs): void {\r\n const originalSize = size\r\n\r\n size = originalSize * 0.3\r\n x = x + originalSize * 0.35\r\n y = y + originalSize * 0.35\r\n\r\n this.basicSquare({ x, y, size, rotation: 0 })\r\n }\r\n\r\n private drawDiamond({ x, y, size }: DrawArgs): void {\r\n this.basicSquare({ x, y, size, rotation: Math.PI / 4 })\r\n }\r\n\r\n private drawRounded({ x, y, size, getNeighbor }: DrawArgs): void {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor\r\n\r\n if (neighborsCount === 0) {\r\n this.basicDot({ x, y, size, rotation: 0 })\r\n return\r\n }\r\n\r\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\r\n this.basicSquare({ x, y, size, rotation: 0 })\r\n return\r\n }\r\n\r\n if (neighborsCount === 2) {\r\n let rotation = 0\r\n\r\n if (leftNeighbor && topNeighbor) {\r\n rotation = Math.PI / 2\r\n } else if (topNeighbor && rightNeighbor) {\r\n rotation = Math.PI\r\n } else if (rightNeighbor && bottomNeighbor) {\r\n rotation = -Math.PI / 2\r\n }\r\n\r\n this.basicCornerRounded({ x, y, size, rotation })\r\n return\r\n }\r\n\r\n if (neighborsCount === 1) {\r\n let rotation = 0\r\n\r\n if (topNeighbor) {\r\n rotation = Math.PI / 2\r\n } else if (rightNeighbor) {\r\n rotation = Math.PI\r\n } else if (bottomNeighbor) {\r\n rotation = -Math.PI / 2\r\n }\r\n\r\n this.basicSideRounded({ x, y, size, rotation })\r\n return\r\n }\r\n }\r\n\r\n private drawVerticalLine({ x, y, size, getNeighbor }: DrawArgs): void {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor\r\n\r\n if (\r\n neighborsCount === 0 ||\r\n (leftNeighbor && !(topNeighbor || bottomNeighbor)) ||\r\n (rightNeighbor && !(topNeighbor || bottomNeighbor))\r\n ) {\r\n this.basicDot({ x, y, size, rotation: 0 })\r\n return\r\n }\r\n\r\n if (topNeighbor && bottomNeighbor) {\r\n this.basicSquare({ x, y, size, rotation: 0 })\r\n return\r\n }\r\n\r\n if (topNeighbor && !bottomNeighbor) {\r\n const rotation = Math.PI / 2\r\n this.basicSideRounded({ x, y, size, rotation })\r\n return\r\n }\r\n\r\n if (bottomNeighbor && !topNeighbor) {\r\n const rotation = -Math.PI / 2\r\n this.basicSideRounded({ x, y, size, rotation })\r\n return\r\n }\r\n }\r\n\r\n private drawHorizontalLine({ x, y, size, getNeighbor }: DrawArgs): void {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor\r\n\r\n if (\r\n neighborsCount === 0 ||\r\n (topNeighbor && !(leftNeighbor || rightNeighbor)) ||\r\n (bottomNeighbor && !(leftNeighbor || rightNeighbor))\r\n ) {\r\n this.basicDot({ x, y, size, rotation: 0 })\r\n return\r\n }\r\n\r\n if (leftNeighbor && rightNeighbor) {\r\n this.basicSquare({ x, y, size, rotation: 0 })\r\n return\r\n }\r\n\r\n if (leftNeighbor && !rightNeighbor) {\r\n const rotation = 0\r\n this.basicSideRounded({ x, y, size, rotation })\r\n return\r\n }\r\n\r\n if (rightNeighbor && !leftNeighbor) {\r\n const rotation = Math.PI\r\n this.basicSideRounded({ x, y, size, rotation })\r\n return\r\n }\r\n }\r\n\r\n private drawExtraRounded({ x, y, size, getNeighbor }: DrawArgs): void {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor\r\n\r\n if (neighborsCount === 0) {\r\n this.basicDot({ x, y, size, rotation: 0 })\r\n return\r\n }\r\n\r\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\r\n this.basicSquare({ x, y, size, rotation: 0 })\r\n return\r\n }\r\n\r\n if (neighborsCount === 2) {\r\n let rotation = 0\r\n\r\n if (leftNeighbor && topNeighbor) {\r\n rotation = Math.PI / 2\r\n } else if (topNeighbor && rightNeighbor) {\r\n rotation = Math.PI\r\n } else if (rightNeighbor && bottomNeighbor) {\r\n rotation = -Math.PI / 2\r\n }\r\n\r\n this.basicCornerExtraRounded({ x, y, size, rotation })\r\n return\r\n }\r\n\r\n if (neighborsCount === 1) {\r\n let rotation = 0\r\n\r\n if (topNeighbor) {\r\n rotation = Math.PI / 2\r\n } else if (rightNeighbor) {\r\n rotation = Math.PI\r\n } else if (bottomNeighbor) {\r\n rotation = -Math.PI / 2\r\n }\r\n\r\n this.basicSideRounded({ x, y, size, rotation })\r\n return\r\n }\r\n }\r\n\r\n private drawClassy({ x, y, size, getNeighbor }: DrawArgs): void {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor\r\n\r\n if (neighborsCount === 0) {\r\n this.basicCornersRounded({ x, y, size, rotation: Math.PI / 2 })\r\n return\r\n }\r\n\r\n if (!leftNeighbor && !topNeighbor) {\r\n this.basicCornerRounded({ x, y, size, rotation: -Math.PI / 2 })\r\n return\r\n }\r\n\r\n if (!rightNeighbor && !bottomNeighbor) {\r\n this.basicCornerRounded({ x, y, size, rotation: Math.PI / 2 })\r\n return\r\n }\r\n\r\n this.basicSquare({ x, y, size, rotation: 0 })\r\n }\r\n\r\n private drawClassyRounded({ x, y, size, getNeighbor }: DrawArgs): void {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor\r\n\r\n if (neighborsCount === 0) {\r\n this.basicCornersRounded({ x, y, size, rotation: Math.PI / 2 })\r\n return\r\n }\r\n\r\n if (!leftNeighbor && !topNeighbor) {\r\n this.basicCornerExtraRounded({ x, y, size, rotation: -Math.PI / 2 })\r\n return\r\n }\r\n\r\n if (!rightNeighbor && !bottomNeighbor) {\r\n this.basicCornerExtraRounded({ x, y, size, rotation: Math.PI / 2 })\r\n return\r\n }\r\n\r\n this.basicSquare({ x, y, size, rotation: 0 })\r\n }\r\n\r\n private drawWave({ x, y, size, getNeighbor }: DrawArgs): void {\r\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0\r\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0\r\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0\r\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0\r\n\r\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor\r\n\r\n if (neighborsCount === 0) {\r\n this.basicDot({ x, y, size, rotation: 0 })\r\n return\r\n }\r\n\r\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\r\n this.basicSquare({ x, y, size, rotation: 0 })\r\n return\r\n }\r\n\r\n if (neighborsCount === 2) {\r\n let rotation = 0\r\n\r\n if (leftNeighbor && topNeighbor) {\r\n rotation = Math.PI / 2\r\n } else if (topNeighbor && rightNeighbor) {\r\n rotation = Math.PI\r\n } else if (rightNeighbor && bottomNeighbor) {\r\n rotation = -Math.PI / 2\r\n }\r\n\r\n this.basicCornerExtraRounded({ x, y, size, rotation })\r\n return\r\n }\r\n\r\n if (neighborsCount === 1) {\r\n let rotation = 0\r\n\r\n if (rightNeighbor) {\r\n rotation = Math.PI / 2\r\n } else if (bottomNeighbor) {\r\n rotation = Math.PI\r\n } else if (leftNeighbor) {\r\n rotation = -Math.PI / 2\r\n }\r\n\r\n this.basicWave({ x, y, size, rotation })\r\n return\r\n }\r\n }\r\n}\r\n","export const browserImageTools = {\r\n toDataURL: (url: string | Buffer | Blob): Promise<string> => {\r\n if (typeof url == 'string' && url.startsWith('data:')) return Promise.resolve(url)\r\n return new Promise((resolve, reject) => {\r\n if (typeof url == 'string') {\r\n const xhr = new XMLHttpRequest()\r\n xhr.onload = () => {\r\n const reader = new FileReader()\r\n reader.onloadend = () => {\r\n resolve(reader.result as string)\r\n }\r\n reader.readAsDataURL(xhr.response)\r\n }\r\n xhr.onerror = xhr.onabort = xhr.ontimeout = reject\r\n xhr.open('GET', url, true)\r\n xhr.responseType = 'blob'\r\n xhr.send()\r\n } else {\r\n const reader = new FileReader()\r\n reader.onloadend = () => {\r\n resolve(reader.result as string)\r\n }\r\n reader.readAsDataURL(url as Blob)\r\n }\r\n })\r\n },\r\n getSize: (src: string | Blob | Buffer, crossOrigin?: string): Promise<{ width: number, height: number }> => new Promise((resolve, reject) => {\r\n const image = new Image()\r\n\r\n if (crossOrigin === 'string') {\r\n image.crossOrigin = crossOrigin\r\n }\r\n\r\n image.onload = (): void => {\r\n resolve({ width: image.width, height: image.height })\r\n }\r\n image.onerror = image.onabort = reject\r\n\r\n if (typeof src == 'string') image.src = src\r\n else\r\n browserImageTools\r\n .toDataURL(src)\r\n .then((url) => (image.src = url))\r\n .catch(reject)\r\n })\r\n}\r\n","export function parseColor(cstr: string) {\r\n let m: RegExpExecArray | null\r\n let parts: string[] | number[] = []\r\n let alpha = 1\r\n\r\n cstr = cstr.toLowerCase()\r\n\r\n if (cstr[0] === '#') {\r\n const base = cstr.slice(1)\r\n const size = base.length\r\n const isShort = size <= 4\r\n\r\n if (isShort) {\r\n parts = [parseInt(base[0] + base[0], 16), parseInt(base[1] + base[1], 16), parseInt(base[2] + base[2], 16)]\r\n if (size === 4) {\r\n alpha = parseInt(base[3] + base[3], 16) / 255\r\n }\r\n } else {\r\n parts = [parseInt(base[0] + base[1], 16), parseInt(base[2] + base[3], 16), parseInt(base[4] + base[5], 16)]\r\n if (size === 8) {\r\n alpha = parseInt(base[6] + base[7], 16) / 255\r\n }\r\n }\r\n\r\n if (!parts[0]) parts[0] = 0\r\n if (!parts[1]) parts[1] = 0\r\n if (!parts[2]) parts[2] = 0\r\n } else if ((m = /^((?:rgba?))\\s*\\(([^)]*)\\)/.exec(cstr))) {\r\n const dims = 3\r\n parts = m[2].trim().split(/\\s*[,/]\\s*|\\s+/)\r\n\r\n parts = parts.map((x, i) => {\r\n if (x[x.length - 1] === '%') {\r\n const v = parseFloat(x) / 100\r\n if (i === 3) return v\r\n return v * 255\r\n }\r\n\r\n if (x === 'none') return 0\r\n return parseFloat(x)\r\n })\r\n\r\n alpha = parts.length > dims ? parts.pop()! : 1\r\n } else {\r\n return {\r\n value: cstr,\r\n alpha\r\n }\r\n }\r\n\r\n const value = '#' + parts.map((v) => Math.max(0, Math.min(255, v)).toString(16).padStart(2, '0')).join('')\r\n return {\r\n value,\r\n alpha: Math.max(0, Math.min(1, alpha))\r\n }\r\n}\r\n","import { QRCodeMinimal } from '@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js'\r\nimport { QRUtil } from '@liquid-js/qrcode-generator/lib/qrcode/QRUtil.js'\r\nimport { QRCornerDot } from '../figures/corner-dot.js'\r\nimport { QRCornerSquare } from '../figures/corner-square.js'\r\nimport { QRDot } from '../figures/dot.js'\r\nimport { browserImageTools } from '../tools/browser-image-tools.js'\r\nimport { parseColor } from '../utils/color.js'\r\nimport { Gradient, GradientType } from '../utils/gradient.js'\r\nimport { calculateImageSize } from '../utils/image.js'\r\nimport { CornerDotType, CornerSquareType, DotType, ImageMode, Options, ShapeType } from '../utils/options.js'\r\nimport { numToAttr } from '../utils/svg.js'\r\n\r\nconst squareMask = [\r\n [1, 1, 1, 1, 1, 1, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 0, 0, 0, 0, 0, 1],\r\n [1, 1, 1, 1, 1, 1, 1]\r\n]\r\n\r\nconst cornerSquareTypes = new Set<string>(Object.values(CornerSquareType))\r\nfunction isCornerSquareType(val?: string): val is `${CornerSquareType}` {\r\n return !!(val && cornerSquareTypes.has(val))\r\n}\r\n\r\nconst dotMask = [\r\n [0, 0, 0, 0, 0, 0, 0],\r\n [0, 0, 0, 0, 0, 0, 0],\r\n [0, 0, 1, 1, 1, 0, 0],\r\n [0, 0, 1, 1, 1, 0, 0],\r\n [0, 0, 1, 1, 1, 0, 0],\r\n [0, 0, 0, 0, 0, 0, 0],\r\n [0, 0, 0, 0, 0, 0, 0]\r\n]\r\n\r\nconst cornerDotTypes = new Set<string>(Object.values(CornerDotType))\r\nfunction isCornerDotType(val?: string): val is `${CornerDotType}` {\r\n return !!(val && cornerDotTypes.has(val))\r\n}\r\n\r\nexport class QRSVG {\r\n private _element: SVGElement\r\n\r\n get element() {\r\n return this._element\r\n }\r\n\r\n private defs: SVGElement\r\n\r\n private backgroundMask?: SVGElement\r\n private backgroundMaskGroup?: SVGElement\r\n\r\n private dotsMask?: SVGElement\r\n private dotsMaskGroup?: SVGElement\r\n\r\n private lightDotsMask?: SVGElement\r\n private lightDotsMaskGroup?: SVGElement\r\n\r\n private qr?: QRCodeMinimal\r\n private document: Document\r\n private imageTools: typeof browserImageTools\r\n\r\n constructor(\r\n private options: Pick<\r\n Options,\r\n | 'width'\r\n | 'height'\r\n | 'document'\r\n | 'imageTools'\r\n | 'image'\r\n | 'imageOptions'\r\n | 'dotsOptions'\r\n | 'cornersDotOptions'\r\n | 'cornersSquareOptions'\r\n | 'backgroundOptions'\r\n | 'shape'\r\n > & { errorCorrectionPercent: number }\r\n ) {\r\n this.document = options.document\r\n this._element = this.document.createElementNS('http://www.w3.org/2000/svg', 'svg')\r\n const width = numToAttr(options.width)\r\n const height = numToAttr(options.height)\r\n this._element.setAttribute('width', width)\r\n this._element.setAttribute('height', height)\r\n this._element.setAttribute('viewBox', `0 0 ${width} ${height}`)\r\n this.defs = this.document.createElementNS('http://www.w3.org/2000/svg', 'defs')\r\n this._element.appendChild(this.defs)\r\n this.imageTools = options.imageTools || browserImageTools\r\n }\r\n\r\n get width(): number {\r\n return this.options.width\r\n }\r\n\r\n get height(): number {\r\n return this.options.height\r\n }\r\n\r\n async drawQR(qr: QRCodeMinimal): Promise<void> {\r\n const count = qr.getModuleCount()\r\n const typeNumber = parseInt(((count - 17) / 4).toFixed(0), 10)\r\n const dotSize = this.options.dotsOptions.size\r\n let drawImageSize = {\r\n hideXDots: 0,\r\n hideYDots: 0,\r\n width: 0,\r\n height: 0\r\n }\r\n\r\n this.qr = qr\r\n\r\n if (this.options.image) {\r\n //We need it to get image size\r\n const size = await this.imageTools.getSize(this.options.image, this.options.imageOptions.crossOrigin)\r\n const { imageOptions, errorCorrectionPercent } = this.options\r\n\r\n if (imageOptions.mode == ImageMode.background) {\r\n const margin = (this.options.backgroundOptions && this.options.backgroundOptions.margin) || 0\r\n const maxWidth = (this.options.width - 2 * margin * dotSize) * imageOptions.imageSize\r\n const maxHeight = (this.options.height - 2 * margin * dotSize) * imageOptions.imageSize\r\n let { width, height } = size\r\n\r\n height = (height / width) * maxWidth\r\n width = maxWidth\r\n\r\n if (height > maxHeight) {\r\n width = (width / height) * maxHeight\r\n height = maxHeight\r\n }\r\n\r\n drawImageSize = {\r\n hideXDots: 0,\r\n hideYDots: 0,\r\n width,\r\n height\r\n }\r\n } else {\r\n const coverLevel = imageOptions.imageSize * errorCorrectionPercent\r\n const alignment = QRUtil.getPatternPosition(typeNumber)\r\n const maxHiddenDots = Math.floor(\r\n coverLevel * (count * count - 3 * 8 * 8 - 2 * (count - 16) - alignment.length ** 2 * 25)\r\n )\r\n\r\n drawImageSize = calculateImageSize({\r\n originalWidth: size.width,\r\n originalHeight: size.height,\r\n maxHiddenDots,\r\n maxHiddenAxisDots: count - 14,\r\n dotSize,\r\n margin: imageOptions.margin\r\n })\r\n }\r\n }\r\n\r\n this.drawBackground()\r\n\r\n if (\r\n this.options.imageOptions.mode != ImageMode.overlay &&\r\n this.options.image &&\r\n drawImageSize.width > 0 &&\r\n drawImageSize.height > 0\r\n ) {\r\n await this.drawImage({ width: drawImageSize.width, height: drawImageSize.height, count, dotSize })\r\n }\r\n\r\n this.drawDots((i: number, j: number): boolean => {\r\n if (this.options.imageOptions.mode == ImageMode.center) {\r\n if (\r\n i >= (count - drawImageSize.hideXDots) / 2 &&\r\n i < (count + drawImageSize.hideXDots) / 2 &&\r\n j >= (count - drawImageSize.hideYDots) / 2 &&\r\n j < (count + drawImageSize.hideYDots) / 2\r\n ) {\r\n return false\r\n }\r\n }\r\n\r\n if ((i < 8 && j < 8) || (i >= count - 8 && j < 8) || (j >= count - 8 && i < 8)) return false\r\n\r\n return true\r\n })\r\n\r\n if (\r\n this.options.imageOptions.mode == ImageMode.overlay &&\r\n this.options.image &&\r\n drawImageSize.width > 0 &&\r\n drawImageSize.height > 0\r\n ) {\r\n await this.drawImage({ width: drawImageSize.width, height: drawImageSize.height, count, dotSize })\r\n }\r\n\r\n this.drawCorners()\r\n }\r\n\r\n drawBackground(): void {\r\n const options = this.options\r\n\r\n if (this._element && options.backgroundOptions) {\r\n const gradientOptions = options.backgroundOptions.gradient\r\n const color = options.backgroundOptions.color\r\n\r\n this.createColor({\r\n options: gradientOptions,\r\n color,\r\n additionalRotation: 0,\r\n x: 0,\r\n y: 0,\r\n height: options.height,\r\n width: options.width,\r\n name: 'background-color'\r\n })\r\n\r\n const size = Math.min(options.width, options.height)\r\n const element = this.document.createElementNS('http://www.w3.org/2000/svg', 'rect');\r\n [this.backgroundMask, this.backgroundMaskGroup] = this.createMask('mask-background-color')\r\n this.defs.appendChild(this.backgroundMask)\r\n\r\n element.setAttribute('x', numToAttr((options.width - size) / 2))\r\n element.setAttribute('y', numToAttr((options.height - size) / 2))\r\n element.setAttribute('width', numToAttr(size))\r\n element.setAttribute('height', numToAttr(size))\r\n element.setAttribute('rx', numToAttr((size / 2) * (options.backgroundOptions.round || 0)))\r\n\r\n this.backgroundMaskGroup.appendChild(element)\r\n }\r\n }\r\n\r\n drawDots(filter?: (i: number, j: number) => boolean): void {\r\n if (!this.qr) {\r\n throw new Error('QR code is not defined')\r\n }\r\n\r\n const options = this.options\r\n const count = this.qr.getModuleCount()\r\n\r\n if (count > options.width || count > options.height) {\r\n throw new Error('The canvas is too small')\r\n }\r\n\r\n const dotSize = this.options.dotsOptions.size\r\n let minSize = Math.min(options.width, options.height)\r\n if (options.imageOptions.mode == ImageMode.background) minSize -= 2 * dotSize * (options.imageOptions.margin || 0)\r\n const xBeginning = Math.floor((options.width - count * dotSize) / 2)\r\n const yBeginning = Math.floor((options.height - count * dotSize) / 2)\r\n let dot = new QRDot(options.dotsOptions.type, this.document)\r\n const overlayDot = new QRDot(DotType.tinySquare, this.document)\r\n const markerDot = new QRDot(DotType.square, this.document);\r\n\r\n [this.dotsMask, this.dotsMaskGroup] = this.createMask('mask-dot-color')\r\n this.defs.appendChild(this.dotsMask)\r\n\r\n if (options.imageOptions.mode == ImageMode.background) {\r\n [this.lightDotsMask, this.lightDotsMaskGroup] = this.createMask('mask-light-dot-color')\r\n this.defs.appendChild(this.lightDotsMask)\r\n }\r\n\r\n let margin = 0\r\n let additionalDots = 0\r\n let fakeCount = count\r\n\r\n if (options.shape === ShapeType.circle) {\r\n margin = (this.options.backgroundOptions && this.options.backgroundOptions.margin) || 0\r\n additionalDots = Math.floor((minSize / dotSize - count - 2 * margin) / 2)\r\n fakeCount = count + additionalDots * 2\r\n } else if (options.imageOptions.mode == ImageMode.background) {\r\n additionalDots = 1\r\n fakeCount = count + additionalDots * 2\r\n }\r\n\r\n const xFakeBeginning = xBeginning - additionalDots * dotSize\r\n const yFakeBeginning = yBeginning - additionalDots * dotSize\r\n const colorX = xFakeBeginning\r\n const colorY = yFakeBeginning\r\n const colorCount = count + additionalDots * 2\r\n const fakeMatrix: Array<Array<boolean | undefined>> = new Array(fakeCount)\r\n const center = Math.floor(fakeCount / 2)\r\n\r\n for (let i = 0; i < fakeCount; i++) {\r\n fakeMatrix[i] = new Array(fakeCount)\r\n for (let j = 0; j < fakeCount; j++) {\r\n if (\r\n i > additionalDots - 1 &&\r\n i < fakeCount - additionalDots &&\r\n j > additionalDots - 1 &&\r\n j < fakeCount - additionalDots\r\n ) {\r\n const ii = i - additionalDots\r\n const jj = j - additionalDots\r\n if (filter && !filter(ii, jj)) fakeMatrix[i][j] = undefined\r\n else fakeMatrix[i][j] = !!this.qr.isDark(jj, ii)\r\n continue\r\n }\r\n\r\n if (\r\n options.shape === ShapeType.circle &&\r\n Math.sqrt((i - center) * (i - center) + (j - center) * (j - center)) > center\r\n ) {\r\n fakeMatrix[i][j] = undefined\r\n continue\r\n }\r\n\r\n if (\r\n i == additionalDots - 1 ||\r\n i == fakeCount - additionalDots ||\r\n j == additionalDots - 1 ||\r\n j == fakeCount - additionalDots\r\n ) {\r\n if (\r\n (j == additionalDots - 1 && (i < additionalDots + 8 || i > fakeCount - additionalDots - 9)) ||\r\n (j == fakeCount - additionalDots && i < additionalDots + 8) ||\r\n (i == additionalDots - 1 && (j < additionalDots + 8 || j > fakeCount - additionalDots - 9)) ||\r\n (i == fakeCount - additionalDots && j < additionalDots + 8)\r\n )\r\n fakeMatrix[i][j] = undefined\r\n else fakeMatrix[i][j] = false\r\n continue\r\n }\r\n\r\n // Get random dots from QR code to show it outside of QR code\r\n fakeMatrix[i][j] = this.qr.isDark(\r\n j - 2 * additionalDots < 0 ? j : j >= count ? j - 2 * additionalDots : j - additionalDots,\r\n i - 2 * additionalDots < 0 ? i : i >= count ? i - 2 * additionalDots : i - additionalDots\r\n )\r\n }\r\n }\r\n\r\n const typeNr = (count - 17) / 4\r\n const alignment = QRUtil.getPatternPosition(typeNr)\r\n\r\n for (let i = 0; i < fakeCount; i++) {\r\n const iAlign = alignment.find((v) => i - additionalDots > v - 3 && i - additionalDots < v + 3)\r\n for (let j = 0; j < fakeCount; j++) {\r\n const jAlign = alignment.find((v) => j - additionalDots > v - 3 && j - additionalDots < v + 3)\r\n if (fakeMatrix[i][j] == undefined) continue\r\n\r\n if (this.lightDotsMask) {\r\n dot =\r\n iAlign &&\r\n jAlign &&\r\n ((iAlign != alignment[0] && jAlign != alignment[0]) ||\r\n (jAlign != alignment[0] && jAlign != alignment[alignment.length - 1]) ||\r\n (iAlign != alignment[0] && iAlign != alignment[alignment.length - 1]))\r\n ? markerDot\r\n : overlayDot\r\n }\r\n\r\n if (!fakeMatrix[i][j]) {\r\n if (this.lightDotsMask) {\r\n dot.draw({\r\n x: xFakeBeginning + i * dotSize,\r\n y: yFakeBeginning + j * dotSize,\r\n size: dotSize,\r\n getNeighbor: (xOffset: number, yOffset: number): boolean => fakeMatrix[i + xOffset]?.[j + yOffset] === false\r\n })\r\n\r\n if (dot.element && this.lightDotsMaskGroup) {\r\n this.lightDotsMaskGroup.appendChild(dot.element)\r\n }\r\n }\r\n continue\r\n }\r\n\r\n dot.draw({\r\n x: xFakeBeginning + i * dotSize,\r\n y: yFakeBeginning + j * dotSize,\r\n size: dotSize,\r\n getNeighbor: (xOffset: number, yOffset: number): boolean => fakeMatrix[i + xOffset]?.[j + yOffset] === true\r\n })\r\n if (dot.element && this.dotsMaskGroup) {\r\n this.dotsMaskGroup.appendChild(dot.element)\r\n }\r\n }\r\n }\r\n\r\n if (this.lightDotsMask) {\r\n this.createColor({\r\n options: options.imageOptions.fill.gradient,\r\n color: options.imageOptions.fill.color,\r\n additionalRotation: 0,\r\n x: colorX,\r\n y: colorY,\r\n height: colorCount * dotSize,\r\n width: colorCount * dotSize,\r\n name: 'light-dot-color'\r\n })\r\n }\r\n\r\n this.createColor({\r\n options: options.dotsOptions?.gradient,\r\n color: options.dotsOptions.color,\r\n additionalRotation: 0,\r\n x: colorX,\r\n y: colorY,\r\n height: colorCount * dotSize,\r\n width: colorCount * dotSize,\r\n name: 'dot-color'\r\n })\r\n }\r\n\r\n drawCorners(): void {\r\n if (!this.qr) {\r\n throw new Error('QR code is not defined')\r\n }\r\n\r\n const element = this._element\r\n const options = this.options\r\n\r\n if (!element) {\r\n throw new Error('Element code is not defined')\r\n }\r\n\r\n const count = this.qr.getModuleCount()\r\n const dotSize = this.options.dotsOptions.size\r\n const cornersSquareSize = dotSize * 7\r\n const cornersDotSize = dotSize * 3\r\n const xBeginning = Math.floor((options.width - count * dotSize) / 2)\r\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\r\n\r\n [\r\n [0, 0, 0],\r\n [1, 0, Math.PI / 2],\r\n [0, 1, -Math.PI / 2]\r\n ].forEach(([column, row, rotation]) => {\r\n const x = xBeginning + column * dotSize * (count - 7)\r\n const y = yBeginning + row * dotSize * (count - 7)\r\n let cornersSquareMask = this.dotsMask\r\n let cornersSquareMaskGroup = this.dotsMaskGroup\r\n let cornersDotMask = this.dotsMask\r\n let cornersDotMaskGroup = this.dotsMaskGroup\r\n\r\n if (options.cornersSquareOptions?.gradient || options.cornersSquareOptions?.color) {\r\n [cornersSquareMask, cornersSquareMaskGroup] = this.createMask(`mask-corners-square-color-${column}-${row}`)\r\n this.defs.appendChild(cornersSquareMask)\r\n cornersDotMask = cornersSquareMask\r\n cornersDotMaskGroup = cornersSquareMaskGroup\r\n\r\n this.createColor({\r\n options: options.cornersSquareOptions?.gradient,\r\n color: options.cornersSquareOptions?.color,\r\n additionalRotation: rotation,\r\n x,\r\n y,\r\n height: cornersSquareSize,\r\n width: cornersSquareSize,\r\n name: `corners-square-color-${column}-${row}`\r\n })\r\n }\r\n\r\n if (isCornerSquareType(options.cornersSquareOptions?.type)) {\r\n const cornersSquare = new QRCornerSquare(options.cornersSquareOptions.type, this.document)\r\n\r\n cornersSquare.draw({\r\n x,\r\n y,\r\n size: cornersSquareSize,\r\n rotation\r\n })\r\n\r\n if (cornersSquare.element && cornersSquareMaskGroup) {\r\n cornersSquareMaskGroup.appendChild(cornersSquare.element)\r\n }\r\n\r\n if (cornersSquare.fill && this.lightDotsMaskGroup) {\r\n this.lightDotsMaskGroup.appendChild(cornersSquare.fill)\r\n }\r\n } else {\r\n const dot = new QRDot(options.cornersSquareOptions?.type || options.dotsOptions.type, this.document)\r\n\r\n for (let i = 0; i < squareMask.length; i++) {\r\n for (let j = 0; j < squareMask[i].length; j++) {\r\n if (!squareMask[i]?.[j]) {\r\n if (this.lightDotsMask && !dotMask[i]?.[j]) {\r\n dot.draw({\r\n x: x + i * dotSize,\r\n y: y + j * dotSize,\r\n size: dotSize,\r\n getNeighbor: (xOffset: number, yOffset: number): boolean =>\r\n !squareMask[i + xOffset]?.[j + yOffset] && !dotMask[i + xOffset]?.[j + yOffset]\r\n })\r\n\r\n if (dot.element && this.lightDotsMaskGroup) {\r\n this.lightDotsMaskGroup.appendChild(dot.element)\r\n }\r\n }\r\n continue\r\n }\r\n\r\n dot.draw({\r\n x: x + i * dotSize,\r\n y: y + j * dotSize,\r\n size: dotSize,\r\n getNeighbor: (xOffset: number, yOffset: number): boolean => !!squareMask[i + xOffset]?.[j + yOffset]\r\n })\r\n\r\n if (dot.element && cornersSquareMaskGroup) {\r\n cornersSquareMaskGroup.appendChild(dot.element)\r\n }\r\n }\r\n }\r\n\r\n if (this.lightDotsMask)\r\n for (let i = -1; i < 8; i++) {\r\n for (let j = -1; j < 8; j++) {\r\n if (i == -1 || i == 7 || j == -1 || j == 7) {\r\n dot.draw({\r\n x: x + i * dotSize,\r\n y: y + j * dotSize,\r\n size: dotSize,\r\n getNeighbor: (xOffset: number, yOffset: number): boolean => {\r\n const ii = i + xOffset\r\n const jj = j + yOffset\r\n return ii >= -1 && ii <= 7 && jj >= -1 && jj <= 7 && (ii == -1 || ii == 7 || jj == -1 || jj == 7)\r\n }\r\n })\r\n\r\n if (dot.element && this.lightDotsMaskGroup) {\r\n this.lightDotsMaskGroup.appendChild(dot.element)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (options.cornersDotOptions?.gradient || options.cornersDotOptions?.color) {\r\n [cornersDotMask, cornersDotMaskGroup] = this.createMask(`mask-corners-dot-color-${column}-${row}`)\r\n this.defs.appendChild(cornersDotMask)\r\n\r\n this.createColor({\r\n options: options.cornersDotOptions?.gradient,\r\n color: options.cornersDotOptions?.color,\r\n additionalRotation: rotation,\r\n x: x + dotSize * 2,\r\n y: y + dotSize * 2,\r\n height: cornersDotSize,\r\n width: cornersDotSize,\r\n name: `corners-dot-color-${column}-${row}`\r\n })\r\n }\r\n\r\n if (isCornerDotType(options.cornersDotOptions?.type)) {\r\n const cornersDot = new QRCornerDot(options.cornersDotOptions.type, this.document)\r\n\r\n cornersDot.draw({\r\n x: x + dotSize * 2,\r\n y: y + dotSize * 2,\r\n size: cornersDotSize,\r\n rotation\r\n })\r\n\r\n if (cornersDot.element && cornersDotMaskGroup) {\r\n cornersDotMaskGroup.appendChild(cornersDot.element)\r\n }\r\n } else {\r\n const dot = new QRDot(options.cornersDotOptions?.type || options.dotsOptions.type, this.document)\r\n\r\n for (let i = 0; i < dotMask.length; i++) {\r\n for (let j = 0; j < dotMask[i].length; j++) {\r\n if (!dotMask[i]?.[j]) {\r\n continue\r\n }\r\n\r\n dot.draw({\r\n x: x + i * dotSize,\r\n y: y + j * dotSize,\r\n size: dotSize,\r\n getNeighbor: (xOffset: number, yOffset: number): boolean => !!dotMask[i + xOffset]?.[j + yOffset]\r\n })\r\n\r\n if (dot.element && cornersDotMaskGroup) {\r\n cornersDotMaskGroup.appendChild(dot.element)\r\n }\r\n }\r\n }\r\n }\r\n })\r\n }\r\n\r\n async drawImage({\r\n width,\r\n height,\r\n count,\r\n dotSize\r\n }: {\r\n width: number\r\n height: number\r\n count: number\r\n dotSize: number\r\n }): Promise<void> {\r\n const options = this.options\r\n const xBeginning = Math.floor((options.width - count * dotSize) / 2)\r\n const yBeginning = Math.floor((options.height - count * dotSize) / 2)\r\n let margin = options.imageOptions.margin * dotSize\r\n if (options.imageOptions.mode == ImageMode.background) margin = 0\r\n const dx = xBeginning + margin + (count * dotSize - width) / 2\r\n const dy = yBeginning + margin + (count * dotSize - height) / 2\r\n const dw = width - margin * 2\r\n const dh = height - margin * 2\r\n\r\n const imageUrl = await this.imageTools.toDataURL(options.image || '')\r\n let image: SVGElement = this.document.createElementNS('http://www.w3.org/2000/svg', 'image')\r\n image.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', imageUrl || '')\r\n\r\n if (imageUrl.startsWith('data:image/svg+xml;')) {\r\n let data = imageUrl.substring(19)\r\n const i = data.indexOf(',')\r\n const encoding = data.substring(0, i)\r\n data = data.substring(i + 1)\r\n\r\n switch (encoding) {\r\n case 'base64':\r\n data = typeof atob == 'function' ? atob(data) : Buffer.from(data, 'base64').toString('utf8')\r\n break\r\n default:\r\n data = ''\r\n break\r\n }\r\n\r\n if (data) {\r\n const container = new DOMParser().parseFromString(data, 'text/xml')\r\n const rootEl = Array.from(container.getElementsByTagName('svg'))\r\n if (rootEl.length) {\r\n image = rootEl[0]\r\n image.setAttribute('overflow', 'visible')\r\n }\r\n }\r\n }\r\n\r\n image.setAttribute('x', numToAttr(dx))\r\n image.setAttribute('y', numToAttr(dy))\r\n image.setAttribute('width', `${numToAttr(dw)}px`)\r\n image.setAttribute('height', `${numToAttr(dh)}px`)\r\n\r\n this._element.appendChild(image)\r\n }\r\n\r\n private createColor({\r\n options,\r\n color,\r\n additionalRotation,\r\n x,\r\n y,\r\n height,\r\n width,\r\n name\r\n }: {\r\n options?: Gradient\r\n color?: string\r\n additionalRotation: number\r\n x: number\r\n y: number\r\n height: number\r\n width: number\r\n name: string\r\n }): void {\r\n const size = width > height ? width : height\r\n const rect = this.document.createElementNS('http://www.w3.org/2000/svg', 'rect')\r\n rect.setAttribute('x', numToAttr(x))\r\n rect.setAttribute('y', numToAttr(y))\r\n rect.setAttribute('height', numToAttr(height))\r\n rect.setAttribute('width', numToAttr(width))\r\n rect.setAttribute('style', `mask:url(#mask-${name})`)\r\n\r\n if (options) {\r\n let gradient: SVGElement\r\n if (options.type === GradientType.radial) {\r\n gradient = this.document.createElementNS('http://www.w3.org/2000/svg', 'radialGradient')\r\n gradient.setAttribute('id', name)\r\n gradient.setAttribute('gradientUnits', 'userSpaceOnUse')\r\n gradient.setAttribute('fx', numToAttr(x + width / 2))\r\n gradient.setAttribute('fy', numToAttr(y + height / 2))\r\n gradient.setAttribute('cx', numToAttr(x + width / 2))\r\n gradient.setAttribute('cy', numToAttr(y + height / 2))\r\n gradient.setAttribute('r', numToAttr(size / 2))\r\n } else {\r\n const rotation = ((options.rotation || 0) + additionalRotation) % (2 * Math.PI)\r\n const positiveRotation = (rotation + 2 * Math.PI) % (2 * Math.PI)\r\n let x0 = x + width / 2\r\n let y0 = y + height / 2\r\n let x1 = x + width / 2\r\n let y1 = y + height / 2\r\n\r\n if (\r\n (positiveRotation >= 0 && positiveRotation <= 0.25 * Math.PI) ||\r\n (positiveRotation > 1.75 * Math.PI && positiveRotation <= 2 * Math.PI)\r\n ) {\r\n x0 = x0 - width / 2\r\n y0 = y0 - (height / 2) * Math.tan(rotation)\r\n x1 = x1 + width / 2\r\n y1 = y1 + (height / 2) * Math.tan(rotation)\r\n } else if (positiveRotation > 0.25 * Math.PI && positiveRotation <= 0.75 * Math.PI) {\r\n y0 = y0 - height / 2\r\n x0 = x0 - width / 2 / Math.tan(rotation)\r\n y1 = y1 + height / 2\r\n x1 = x1 + width / 2 / Math.tan(rotation)\r\n } else if (positiveRotation > 0.75 * Math.PI && positiveRotation <= 1.25 * Math.PI) {\r\n x0 = x0 + width / 2\r\n y0 = y0 + (height / 2) * Math.tan(rotation)\r\n x1 = x1 - width / 2\r\n y1 = y1 - (height / 2) * Math.tan(rotation)\r\n } else if (positiveRotation > 1.25 * Math.PI && positiveRotation <= 1.75 * Math.PI) {\r\n y0 = y0 + height / 2\r\n x0 = x0 + width / 2 / Math.tan(rotation)\r\n y1 = y1 - height / 2\r\n x1 = x1 - width / 2 / Math.tan(rotation)\r\n }\r\n\r\n gradient = this.document.createElementNS('http://www.w3.org/2000/svg', 'linearGradient')\r\n gradient.setAttribute('id', name)\r\n gradient.setAttribute('gradientUnits', 'userSpaceOnUse')\r\n gradient.setAttribute('x1', numToAttr(x0))\r\n gradient.setAttribute('y1', numToAttr(y0))\r\n gradient.setAttribute('x2', numToAttr(x1))\r\n gradient.setAttribute('y2', numToAttr(y1))\r\n }\r\n\r\n options.colorStops.forEach((stopCfg: { offset: number, color: string }) => {\r\n const stop = this.document.createElementNS('http://www.w3.org/2000/svg', 'stop')\r\n stop.setAttribute('offset', `${numToAttr(100 * stopCfg.offset)}%`)\r\n\r\n const parsed = parseColor(stopCfg.color)\r\n stop.setAttribute('stop-color', parsed.value)\r\n if (parsed.alpha < 1) stop.setAttribute('stop-opacity', parsed.alpha.toFixed(7))\r\n gradient.appendChild(stop)\r\n })\r\n\r\n rect.setAttribute('fill', `url(#${name})`)\r\n this.defs.appendChild(gradient)\r\n } else if (color) {\r\n const parsed = parseColor(color)\r\n rect.setAttribute('fill', parsed.value)\r\n if (parsed.alpha < 1) rect.setAttribute('opacity', parsed.alpha.toFixed(7))\r\n }\r\n\r\n this._element.appendChild(rect)\r\n }\r\n\r\n private createMask(id: string) {\r\n const options = this.options\r\n\r\n const mask = this.document.createElementNS('http://www.w3.org/2000/svg', 'mask')\r\n mask.setAttribute('id', id)\r\n mask.setAttribute('maskUnits', 'userSpaceOnUse')\r\n mask.setAttribute('x', '0')\r\n mask.setAttribute('y', '0')\r\n mask.setAttribute('width', numToAttr(options.width))\r\n mask.setAttribute('height', numToAttr(options.height))\r\n\r\n const group = this.document.createElementNS('http://www.w3.org/2000/svg', 'g')\r\n group.setAttribute('fill', '#fff')\r\n mask.appendChild(group)\r\n\r\n return [mask, group]\r\n }\r\n}\r\n","interface ImageSizeOptions {\r\n originalHeight: number\r\n originalWidth: number\r\n maxHiddenDots: number\r\n maxHiddenAxisDots?: number\r\n dotSize: number\r\n margin: number\r\n}\r\n\r\ninterface ImageSizeResult {\r\n height: number\r\n width: number\r\n hideYDots: number\r\n hideXDots: number\r\n}\r\n\r\nexport function calculateImageSize({\r\n originalHeight,\r\n originalWidth,\r\n maxHiddenDots,\r\n maxHiddenAxisDots,\r\n dotSize,\r\n margin\r\n}: ImageSizeOptions): ImageSizeResult {\r\n const hideDots = { x: 0, y: 0 }\r\n const imageSize = { x: 0, y: 0 }\r\n\r\n if (\r\n originalHeight <= 0 ||\r\n originalWidth <= 0 ||\r\n maxHiddenDots <= 0 ||\r\n dotSize <= 0 ||\r\n 4 * margin ** 2 > maxHiddenDots\r\n ) {\r\n return {\r\n height: 0,\r\n width: 0,\r\n hideYDots: 0,\r\n hideXDots: 0\r\n }\r\n }\r\n\r\n //If set, ensure maxHiddenAxisDots is odd and at least 1\r\n if (maxHiddenAxisDots && maxHiddenAxisDots % 2 == 0) maxHiddenAxisDots = Math.max(1, maxHiddenAxisDots - 1)\r\n\r\n //Determine the bigger and smaller image dimension\r\n const dimMax = Math.max(originalWidth, originalHeight)\r\n const dimMin = Math.min(originalWidth, originalHeight)\r\n\r\n //Find max image size along the bigger dimension\r\n let lower = 0\r\n let upper = (maxHiddenAxisDots || maxHiddenDots) - 2 * margin\r\n do {\r\n const newSize = lower + (upper - lower) / 2\r\n let dotsMax = Math.max(1, Math.ceil(newSize + 2 * margin))\r\n if (dotsMax % 2 == 0) dotsMax++\r\n let dotsMin = Math.max(1, Math.ceil((newSize * dimMin) / dimMax + 2 * margin))\r\n if (dotsMin % 2 == 0) dotsMin++\r\n\r\n if (dotsMax * dotsMin > maxHiddenDots) upper = newSize\r\n else lower = newSize\r\n } while (Math.abs(lower - upper) > 0.001)\r\n\r\n //Calculate how many dots the given size corresponds to\r\n const size = lower\r\n let hideMax = Math.max(1, Math.ceil(size + 2 * margin))\r\n if (hideMax % 2 == 0) hideMax++\r\n let hideMin = Math.max(1, Math.ceil((size * dimMin) / dimMax + 2 * margin))\r\n if (hideMin % 2 == 0) hideMin++\r\n\r\n //Set hidden dots along bigger and smaller dimension to the right axis\r\n if (originalWidth > originalHeight) {\r\n hideDots.x = hideMax\r\n hideDots.y = hideMin\r\n } else {\r\n hideDots.x = hideMin\r\n hideDots.y = hideMax\r\n }\r\n\r\n //Fit image to the hidden dots\r\n const maxW = (hideDots.x - 2 * margin) * dotSize\r\n const maxH = (hideDots.y - 2 * margin) * dotSize\r\n imageSize.x = maxW\r\n imageSize.y = (maxW * originalHeight) / originalWidth\r\n if (imageSize.y > maxH) {\r\n imageSize.y = maxH\r\n imageSize.x = (maxH * originalWidth) / originalHeight\r\n }\r\n\r\n return {\r\n height: Math.round(imageSize.y + 2 * margin * dotSize),\r\n width: Math.round(imageSize.x + 2 * margin * dotSize),\r\n hideYDots: hideDots.y,\r\n hideXDots: hideDots.x\r\n }\r\n}\r\n","import { QRCodeMinimal } from '@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js'\r\nimport { stringToBytes_UTF8 } from '@liquid-js/qrcode-generator/lib/text/stringToBytes_UTF8.js'\r\nimport { RecursivePartial } from '../types/helper.js'\r\nimport { mergeDeep } from '../utils/merge.js'\r\nimport { ImageMode, Options, ShapeType, defaultOptions, sanitizeOptions } from '../utils/options.js'\r\nimport { ErrorCorrectionPercents, getMode } from '../utils/qrcode.js'\r\nimport { QRSVG } from './qr-svg.js'\r\n\r\nObject.assign(QRCodeMinimal.stringToBytesFuncs, stringToBytes_UTF8)\r\n\r\nexport type ExtensionFunction = (svg: SVGElement, options: RecursivePartial<Options>) => void\r\n\r\nexport class QRCodeStyling {\r\n private options: Options\r\n private container?: HTMLElement\r\n private qr?: QRCodeMinimal\r\n private extension?: ExtensionFunction\r\n private svgDrawingPromise?: Promise<void>\r\n private qrSVG?: QRSVG\r\n\r\n get size() {\r\n if (this.qrSVG)\r\n return {\r\n width: this.qrSVG.width,\r\n height: this.qrSVG.height\r\n }\r\n return undefined\r\n }\r\n\r\n constructor(options?: RecursivePartial<Options>) {\r\n this.options = options ? sanitizeOptions(mergeDeep(defaultOptions, options) as Options) : defaultOptions\r\n this.update()\r\n }\r\n\r\n update(\r\n /** The same options as for initialization */\r\n options?: RecursivePartial<Options>\r\n ): void {\r\n if (this.container) this.container.innerHTML = ''\r\n\r\n this.options = options ? sanitizeOptions(mergeDeep(this.options, options) as Options) : this.options\r\n\r\n if (!this.options.data) {\r\n return\r\n }\r\n\r\n if (this.options.stringToBytesFuncs) {\r\n Object.assign(QRCodeMinimal.stringToBytesFuncs, this.options.stringToBytesFuncs)\r\n delete this.options.stringToBytesFuncs\r\n }\r\n\r\n this.qr = new QRCodeMinimal(this.options.qrOptions.typeNumber, this.options.qrOptions.errorCorrectionLevel)\r\n const mode = this.options.qrOptions.mode || getMode(this.options.data)\r\n this.qr.addData(this.options.data, mode)\r\n this.qr.make()\r\n\r\n this.setupSvg()\r\n\r\n this.append(this.container)\r\n }\r\n\r\n append(\r\n /** This container will be used for appending of the QR code */\r\n container?: HTMLElement\r\n ): void {\r\n if (!container) {\r\n return\r\n }\r\n\r\n if (this.qrSVG?.element) {\r\n container.appendChild(this.qrSVG.element)\r\n }\r\n\r\n this.container = container\r\n }\r\n\r\n /**\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * const extension = (svg, options) => {\r\n * const { width, height } = options;\r\n * const size = Math.min(width, height);\r\n * const border = options.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\r\n * const borderAttributes = {\r\n * fill: \"none\",\r\n * x: (width - size + 40) / 2,\r\n * y: (height - size + 40) / 2,\r\n * width: size - 40,\r\n * height: size - 40,\r\n * stroke: \"black\",\r\n * \"stroke-width\": 40,\r\n * rx: 100\r\n * };\r\n * Object.keys(borderAttributes).forEach((attribute) => {\r\n * border.setAttribute(attribute, borderAttributes[attribute]);\r\n * });\r\n * svg.appendChild(border);\r\n * };\r\n * ```\r\n */\r\n applyExtension(\r\n /** Extension is a function that takes svg and previously applied options and modifies an svg */\r\n extension: ExtensionFunction\r\n ): void {\r\n if (!extension) {\r\n throw new Error('Extension function should be defined.')\r\n }\r\n\r\n this.extension = extension\r\n this.update()\r\n }\r\n\r\n deleteExtension(): void {\r\n this.extension = undefined\r\n this.update()\r\n }\r\n\r\n async serialize(): Promise<string | undefined> {\r\n if (!this.qr) throw new Error('QR code is empty')\r\n\r\n if (!this.qrSVG?.element || !this.svgDrawingPromise) {\r\n this.setupSvg()\r\n }\r\n await this.svgDrawingPromise\r\n\r\n if (!this.qrSVG?.element) {\r\n return\r\n }\r\n\r\n const serializer = new XMLSerializer()\r\n let source = serializer.serializeToString(this.qrSVG.element)\r\n\r\n source = '<?xml version=\"1.0\" standalone=\"no\"?>\\r\\n' + source\r\n return source\r\n }\r\n\r\n private setupSvg(): void {\r\n if (!this.qr) {\r\n return\r\n }\r\n let moduleCount = this.qr.getModuleCount()\r\n if (this.options.imageOptions.mode == ImageMode.background && this.options.shape != ShapeType.circle)\r\n moduleCount += 2\r\n let count = Math.ceil((this.options.shape == ShapeType.circle ? Math.sqrt(2) : 1) * moduleCount)\r\n if (count % 2 == 0) count -= 1\r\n let margin = (this.options.backgroundOptions && this.options.backgroundOptions.margin) || 0\r\n if (this.options.imageOptions.mode == ImageMode.background) margin += this.options.imageOptions.margin || 0\r\n const size = Math.ceil(this.options.dotsOptions.size * (count + 2 * margin))\r\n this.qrSVG = new QRSVG({\r\n ...this.options,\r\n width: size,\r\n height: size,\r\n errorCorrectionPercent: ErrorCorrectionPercents[this.options.qrOptions.errorCorrectionLevel]\r\n })\r\n\r\n this.svgDrawingPromise = this.qrSVG.drawQR(this.qr).then(() => {\r\n if (!this.qrSVG?.element) return\r\n this.extension?.(this.qrSVG.element, this.options)\r\n })\r\n }\r\n}\r\n","/**\n * stringToBytes_UTF8\n * contributed by elhigu\n */\nexport const stringToBytes_UTF8 = {\n UTF8: (s) => {\n // http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\n function toUTF8Array(str) {\n const utf8 = [];\n for (let i = 0; i < str.length; i++) {\n let charcode = str.charCodeAt(i);\n if (charcode < 0x80)\n utf8.push(charcode);\n else if (charcode < 0x800) {\n utf8.push(0xc0 | (charcode >> 6), 0x80 | (charcode & 0x3f));\n }\n else if (charcode < 0xd800 || charcode >= 0xe000) {\n utf8.push(0xe0 | (charcode >> 12), 0x80 | ((charcode >> 6) & 0x3f), 0x80 | (charcode & 0x3f));\n }\n else {\n // surrogate pair\n i++;\n // UTF-16 encodes 0x10000-0x10FFFF by\n // subtracting 0x10000 and splitting the\n // 20 bits of 0x0-0xFFFFF into two halves\n charcode = 0x10000 + (((charcode & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));\n utf8.push(0xf0 | (charcode >> 18), 0x80 | ((charcode >> 12) & 0x3f), 0x80 | ((charcode >> 6) & 0x3f), 0x80 | (charcode & 0x3f));\n }\n }\n return utf8;\n }\n return toUTF8Array(s);\n }\n};\n//# sourceMappingURL=stringToBytes_UTF8.js.map","export interface CanvasOptions {\r\n width: number\r\n height: number\r\n margin: number\r\n}\r\n\r\nexport const defaultCanvasOptions: CanvasOptions = {\r\n width: 300,\r\n height: 300,\r\n margin: 0\r\n}\r\n\r\nexport function sanitizeCanvasOptions(options: CanvasOptions): CanvasOptions {\r\n const newOptions = { ...options }\r\n\r\n newOptions.width = Number(newOptions.width)\r\n newOptions.height = Number(newOptions.height)\r\n newOptions.margin = Number(newOptions.margin)\r\n\r\n if (newOptions.margin > Math.min(newOptions.width, newOptions.height)) {\r\n newOptions.margin = Math.min(newOptions.width, newOptions.height)\r\n }\r\n\r\n return newOptions\r\n}\r\n","import { QRCodeStyling } from '../core/qr-code-styling.js'\r\nimport { RecursivePartial } from '../types/helper.js'\r\nimport { CanvasOptions, defaultCanvasOptions, sanitizeCanvasOptions } from '../utils/canvas-options.js'\r\nimport { mergeDeep } from '../utils/merge.js'\r\n\r\nexport enum FileExtension {\r\n svg = 'svg',\r\n png = 'png',\r\n jpeg = 'jpeg',\r\n webp = 'webp'\r\n}\r\n\r\nexport function drawToCanvas(\r\n qrCode: QRCodeStyling,\r\n options?: RecursivePartial<CanvasOptions>\r\n): { canvas: HTMLCanvasElement, canvasDrawingPromise: Promise<void> | undefined } | undefined {\r\n const { width, height, margin } = options\r\n ? sanitizeCanvasOptions(mergeDeep(defaultCanvasOptions, options) as CanvasOptions)\r\n : defaultCanvasOptions\r\n\r\n const canvas = document.createElement('canvas')\r\n canvas.width = width\r\n canvas.height = height\r\n\r\n const size = Math.min(width, height) - 2 * margin\r\n\r\n const canvasDrawingPromise = qrCode.serialize().then((xml) => {\r\n if (!xml) return\r\n const svg64 = btoa(xml)\r\n const image64 = 'data:image/svg+xml;base64,' + svg64\r\n const image = new Image()\r\n\r\n return new Promise<void>((resolve, reject) => {\r\n image.onload = (): void => {\r\n // Ensure pixel-perfect rendering of SVG to avoid artefact, then downscale to requested size\r\n const aaFactor = Math.ceil((2 * size) / Math.min(image.width, image.height))\r\n let aaCanvas: HTMLCanvasElement | OffscreenCanvas\r\n try {\r\n aaCanvas = new OffscreenCanvas(image.width * aaFactor, image.height * aaFactor)\r\n } catch (_) {\r\n // Fallback to regular canvas element\r\n aaCanvas = document.createElement('canvas')\r\n aaCanvas.width = image.width * aaFactor\r\n aaCanvas.height = image.height * aaFactor\r\n }\r\n aaCanvas.getContext('2d')?.drawImage(image, 0, 0, aaCanvas.width, aaCanvas.height)\r\n\r\n canvas?.getContext('2d')?.drawImage(aaCanvas, (width - size) / 2, (height - size) / 2, size, size)\r\n resolve()\r\n }\r\n image.onerror = image.onabort = reject\r\n\r\n image.src = image64\r\n })\r\n })\r\n\r\n return { canvas, canvasDrawingPromise }\r\n}\r\n\r\nexport async function download(\r\n qrCode: QRCodeStyling,\r\n downloadOptions?: { name?: string, extension: `${FileExtension}` },\r\n options?: RecursivePartial<CanvasOptions>\r\n): Promise<void> {\r\n let extension: `${FileExtension}` = FileExtension.png\r\n let name = 'qr'\r\n\r\n if (downloadOptions) {\r\n if (downloadOptions.name) {\r\n name = downloadOptions.name\r\n }\r\n if (downloadOptions.extension) {\r\n extension = downloadOptions.extension\r\n }\r\n }\r\n\r\n if (extension.toLowerCase() === 'svg') {\r\n const source = await qrCode.serialize()\r\n if (!source) return\r\n const url = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(source)\r\n downloadURI(url, `${name}.svg`)\r\n } else {\r\n const res = drawToCanvas(qrCode, options)\r\n if (!res) return\r\n const { canvas, canvasDrawingPromise } = res\r\n await canvasDrawingPromise\r\n const url = canvas.toDataURL(`image/${extension}`)\r\n downloadURI(url, `${name}.${extension}`)\r\n }\r\n}\r\n\r\nexport function downloadURI(uri: string, name: string): void {\r\n const link = document.createElement('a')\r\n link.download = name\r\n link.href = uri\r\n document.body.appendChild(link)\r\n link.click()\r\n document.body.removeChild(link)\r\n}\r\n","export { ErrorCorrectionLevel, Mode, TypeNumber } from '@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js'\r\nexport { QRCodeStyling, type ExtensionFunction } from './core/qr-code-styling.js'\r\nexport { FileExtension } from './tools/browser-utils.js'\r\nexport { type RecursivePartial } from './types/helper.js'\r\nexport { type CanvasOptions } from './utils/canvas-options.js'\r\nexport { GradientType, type Gradient } from './utils/gradient.js'\r\nexport { CornerDotType, CornerSquareType, DotType, ImageMode, ShapeType, type Options } from './utils/options.js'\r\nexport { ErrorCorrectionPercents } from './utils/qrcode.js'\r\nimport * as _browserUtils from './tools/browser-utils.js'\r\n\r\nexport const browserUtils: typeof _browserUtils | undefined = _browserUtils\r\n"],"names":["BitBuffer","buffer","length","constructor","this","getBuffer","getLengthInBits","toString","i","getBit","index","put","num","putBit","bit","push","ErrorCorrectLevel","w","L","M","Q","H","QRMath","Error","static","EXP_TABLE","LOG_TABLE","glog","n","initialize","gexp","Polynomial","shift","offset","len","getAt","getLength","toLogString","multiply","e","j","mod","ratio","Mode","MODE_NUMBER","MODE_ALPHA_NUM","MODE_8BIT_BYTE","MODE_KANJI","QRData","mode","data","getMode","getData","typeNumber","QR8BitByte","stringToBytes","super","write","forEach","val","QRAlphaNum","s","getCode","charAt","c","charCodeAt","QRNumber","strToNum","substring","chatToNum","MaskPattern","G","PATTERN000","PATTERN001","PATTERN010","PATTERN011","PATTERN100","PATTERN101","PATTERN110","PATTERN111","QRUtil","getPatternPosition","PATTERN_POSITION_TABLE","getMaxLength","errorCorrectLevel","m","MAX_LENGTH","getErrorCorrectPolynomial","errorCorrectLength","a","getMaskFunc","maskPattern","_i","getLostPoint","qrCode","getModuleCount","lostPoint","row","moduleCount","col","sameCount","dark","isDark","r","count","darkCount","Math","getBCHTypeInfo","d","getBCHDigit","G15","G15_MASK","getBCHTypeNumber","G18","digit","totalCount","dataCount","getDataCount","getTotalCount","getRSBlocks","rsBlock","RSBlock","getRsBlockTable","list","RS_BLOCK_TABLE","TypeNumber","Array","fill","map","_","ErrorCorrectionLevel","fa","numeric","alphanumeric","kanji","unicode","QRCodeMinimal","default","bytes","qrDataList","modules","errorCorrectionLevel","getTypeNumber","setTypeNumber","getErrorCorrectLevel","setErrorCorrectLevel","clearData","addData","qrData","byte","stringToBytesFuncs","UTF8","QRKanji","SJIS","make","rsBlocks","totalDataCount","reduce","t","v","makeImpl","getBestMaskPattern","minLostPoint","pattern","test","setupPositionProbePattern","setupPositionAdjustPattern","setupTimingPattern","setupTypeInfo","setupTypeNumber","mapData","inc","bitIndex","byteIndex","maskFunc","pos","bits","createData","dataArray","PAD0","PAD1","createBytes","createNumArray","maxDcCount","maxEcCount","dcCount","ecCount","max","dcdata","rsPoly","modPoly","ecdata","modIndex","totalCodeCount","isObject","obj","isArray","mergeDeep","target","sources","undefined","source","keys","key","targetValue","sourceValue","GradientType","ja","sanitizeGradient","gradient","colorStops","newGradient","rotation","Number","colorStop","radial","linear","DotType","dot","randomDot","rounded","extraRounded","verticalLine","horizontalLine","classy","classyRounded","square","smallSquare","tinySquare","diamond","wave","CornerDotType","S","heart","outpoint","inpoint","CornerSquareType","U","ShapeType","ka","circle","ImageMode","la","center","overlay","background","defaultOptions","document","shape","width","height","qrOptions","imageOptions","imageSize","crossOrigin","margin","color","dotsOptions","type","size","sanitizeOptions","options","newOptions","min","round","cornersSquareOptions","cornersDotOptions","backgroundOptions","ErrorCorrectionPercents","rx","numToAttr","value","toFixed","replace","svgPath","strings","values","p","trim","_element","draw","args","drawFunction","drawSquare","drawHeart","drawRounded","drawClassy","drawInpoint","drawOutpoint","drawDot","call","rotateFigure","x","y","setAttribute","PI","cx","cy","basicDot","createElementNS","basicSquare","basicHeart","move","path","toUpperCase","join","basicRounded","basicClassy","dotSize","basicInpoint","_fill","element","drawExtraRounded","basicExtraRounded","QRDot","drawRandomDot","drawClassyRounded","drawVerticalLine","drawHorizontalLine","drawDiamond","drawSmallSquare","drawTinySquare","drawWave","basicSideRounded","basicCornerRounded","basicCornerExtraRounded","basicCornersRounded","basicWave","a1","a2","c23x","s1","s2","c23y","c31x","cos","c31y","sin","random","originalSize","getNeighbor","leftNeighbor","rightNeighbor","topNeighbor","neighborsCount","bottomNeighbor","browserImageTools","toDataURL","url","startsWith","Promise","resolve","reject","xhr","XMLHttpRequest","onload","reader","FileReader","onloadend","result","readAsDataURL","response","onerror","onabort","ontimeout","open","responseType","send","getSize","src","image","Image","then","catch","parseColor","cstr","parts","alpha","toLowerCase","base","slice","parseInt","exec","split","parseFloat","dims","pop","padStart","squareMask","cornerSquareTypes","Set","Object","dotMask","cornerDotTypes","QRSVG","defs","backgroundMask","backgroundMaskGroup","dotsMask","dotsMaskGroup","lightDotsMask","lightDotsMaskGroup","qr","imageTools","appendChild","drawQR","drawImageSize","hideXDots","hideYDots","errorCorrectionPercent","maxWidth","maxHeight","alignment","calculateImageSize","originalHeight","originalWidth","maxHiddenDots","maxHiddenAxisDots","dimMax","dimMin","lower","upper","newSize","dotsMax","ceil","dotsMin","abs","hideMax","hideMin","maxW","maxH","floor","coverLevel","drawBackground","drawImage","drawDots","drawCorners","createColor","additionalRotation","name","createMask","filter","minSize","overlayDot","markerDot","additionalDots","fakeCount","xBeginning","yBeginning","fakeMatrix","ii","jj","sqrt","iAlign","find","jAlign","xFakeBeginning","yFakeBeginning","xOffset","yOffset","colorCount","cornersSquareSize","cornersDotSize","column","cornersSquareMask","cornersSquareMaskGroup","cornersDotMask","cornersDotMaskGroup","isCornerSquareType","has","cornersSquare","QRCornerSquare","isCornerDotType","cornersDot","QRCornerDot","dx","dy","imageUrl","setAttributeNS","indexOf","encoding","atob","Buffer","from","container","parseFromString","DOMParser","rootEl","getElementsByTagName","dw","dh","rect","y0","positiveRotation","x0","tan","x1","y1","stopCfg","stop","parsed","id","mask","group","assign","stringToBytes_UTF8","utf8","charcode","QRCodeStyling","extension","svgDrawingPromise","qrSVG","update","innerHTML","setupSvg","append","applyExtension","deleteExtension","serialize","serializeToString","XMLSerializer","defaultCanvasOptions","FileExtension","Ha","drawToCanvas","sanitizeCanvasOptions","canvas","createElement","xml","image64","btoa","aaFactor","aaCanvas","OffscreenCanvas","getContext","canvasDrawingPromise","downloadURI","uri","link","download","href","body","click","removeChild","svg","png","jpeg","webp","browserUtils","downloadOptions","res"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,27]}