@larscom/ng-qrcode-svg
Version:
Simple QR code generator (SVG only) for Angular
1 lines • 60.3 kB
Source Map (JSON)
{"version":3,"file":"larscom-ng-qrcode-svg.mjs","sources":["../../../projects/ng-qrcode-svg/src/lib/qrcode-generator.ts","../../../projects/ng-qrcode-svg/src/lib/qrcode-svg.component.ts","../../../projects/ng-qrcode-svg/src/larscom-ng-qrcode-svg.ts"],"sourcesContent":["/*\n * QR Code generator library (TypeScript)\n *\n * Copyright (c) Project Nayuki. (MIT License)\n * https://www.nayuki.io/page/qr-code-generator-library\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n * - The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * - The Software is provided \"as is\", without warranty of any kind, express or\n * implied, including but not limited to the warranties of merchantability,\n * fitness for a particular purpose and noninfringement. In no event shall the\n * authors or copyright holders be liable for any claim, damages or other\n * liability, whether in an action of contract, tort or otherwise, arising from,\n * out of or in connection with the Software or the use or other dealings in the\n * Software.\n */\n\ntype bit = number\ntype byte = number\ntype int = number\n\nclass QrCode {\n public static encodeText(text: string, ecl: Ecc): QrCode {\n const segs: Array<QrSegment> = QrSegment.makeSegments(text)\n return QrCode.encodeSegments(segs, ecl)\n }\n\n public static encodeBinary(data: Readonly<Array<byte>>, ecl: Ecc): QrCode {\n const seg: QrSegment = QrSegment.makeBytes(data)\n return QrCode.encodeSegments([seg], ecl)\n }\n\n public static encodeSegments(\n segs: Readonly<Array<QrSegment>>,\n ecl: Ecc,\n minVersion: int = 1,\n maxVersion: int = 40,\n mask: int = -1,\n boostEcl: boolean = true\n ): QrCode {\n if (\n !(QrCode.MIN_VERSION <= minVersion && minVersion <= maxVersion && maxVersion <= QrCode.MAX_VERSION) ||\n mask < -1 ||\n mask > 7\n )\n throw new RangeError('Invalid value')\n\n let version: int\n let dataUsedBits: int\n for (version = minVersion; ; version++) {\n const dataCapacityBits: int = QrCode.getNumDataCodewords(version, ecl) * 8\n const usedBits: number = QrSegment.getTotalBits(segs, version)\n if (usedBits <= dataCapacityBits) {\n dataUsedBits = usedBits\n break\n }\n if (version >= maxVersion) throw new RangeError('Data too long')\n }\n\n for (const newEcl of [Ecc.MEDIUM, Ecc.QUARTILE, Ecc.HIGH]) {\n if (boostEcl && dataUsedBits <= QrCode.getNumDataCodewords(version, newEcl) * 8) ecl = newEcl\n }\n\n let bb: Array<bit> = []\n for (const seg of segs) {\n appendBits(seg.mode.modeBits, 4, bb)\n appendBits(seg.numChars, seg.mode.numCharCountBits(version), bb)\n for (const b of seg.getData()) bb.push(b)\n }\n assert(bb.length == dataUsedBits)\n\n const dataCapacityBits: int = QrCode.getNumDataCodewords(version, ecl) * 8\n assert(bb.length <= dataCapacityBits)\n appendBits(0, Math.min(4, dataCapacityBits - bb.length), bb)\n appendBits(0, (8 - (bb.length % 8)) % 8, bb)\n assert(bb.length % 8 == 0)\n\n for (let padByte = 0xec; bb.length < dataCapacityBits; padByte ^= 0xec ^ 0x11) appendBits(padByte, 8, bb)\n\n let dataCodewords: Array<byte> = []\n while (dataCodewords.length * 8 < bb.length) dataCodewords.push(0)\n bb.forEach((b: bit, i: int) => (dataCodewords[i >>> 3] |= b << (7 - (i & 7))))\n\n return new QrCode(version, ecl, dataCodewords, mask)\n }\n\n public readonly size: int\n public readonly mask: int\n\n private readonly modules: Array<Array<boolean>> = []\n private readonly isFunction: Array<Array<boolean>> = []\n\n public constructor(\n public readonly version: int,\n public readonly errorCorrectionLevel: Ecc,\n dataCodewords: Readonly<Array<byte>>,\n msk: int\n ) {\n if (version < QrCode.MIN_VERSION || version > QrCode.MAX_VERSION) throw new RangeError('Version value out of range')\n if (msk < -1 || msk > 7) throw new RangeError('Mask value out of range')\n this.size = version * 4 + 17\n\n let row: Array<boolean> = []\n for (let i = 0; i < this.size; i++) row.push(false)\n for (let i = 0; i < this.size; i++) {\n this.modules.push(row.slice())\n this.isFunction.push(row.slice())\n }\n\n this.drawFunctionPatterns()\n const allCodewords: Array<byte> = this.addEccAndInterleave(dataCodewords)\n this.drawCodewords(allCodewords)\n\n if (msk == -1) {\n let minPenalty: int = 1000000000\n for (let i = 0; i < 8; i++) {\n this.applyMask(i)\n this.drawFormatBits(i)\n const penalty: int = this.getPenaltyScore()\n if (penalty < minPenalty) {\n msk = i\n minPenalty = penalty\n }\n this.applyMask(i)\n }\n }\n assert(0 <= msk && msk <= 7)\n this.mask = msk\n this.applyMask(msk)\n this.drawFormatBits(msk)\n\n this.isFunction = []\n }\n\n public getModule(x: int, y: int): boolean {\n return 0 <= x && x < this.size && 0 <= y && y < this.size && this.modules[y][x]\n }\n\n private drawFunctionPatterns(): void {\n for (let i = 0; i < this.size; i++) {\n this.setFunctionModule(6, i, i % 2 == 0)\n this.setFunctionModule(i, 6, i % 2 == 0)\n }\n\n this.drawFinderPattern(3, 3)\n this.drawFinderPattern(this.size - 4, 3)\n this.drawFinderPattern(3, this.size - 4)\n\n const alignPatPos: Array<int> = this.getAlignmentPatternPositions()\n const numAlign: int = alignPatPos.length\n for (let i = 0; i < numAlign; i++) {\n for (let j = 0; j < numAlign; j++) {\n if (!((i == 0 && j == 0) || (i == 0 && j == numAlign - 1) || (i == numAlign - 1 && j == 0)))\n this.drawAlignmentPattern(alignPatPos[i], alignPatPos[j])\n }\n }\n\n this.drawFormatBits(0)\n this.drawVersion()\n }\n\n private drawFormatBits(mask: int): void {\n const data: int = (this.errorCorrectionLevel.formatBits << 3) | mask\n let rem: int = data\n for (let i = 0; i < 10; i++) rem = (rem << 1) ^ ((rem >>> 9) * 0x537)\n const bits = ((data << 10) | rem) ^ 0x5412\n assert(bits >>> 15 == 0)\n\n for (let i = 0; i <= 5; i++) this.setFunctionModule(8, i, getBit(bits, i))\n this.setFunctionModule(8, 7, getBit(bits, 6))\n this.setFunctionModule(8, 8, getBit(bits, 7))\n this.setFunctionModule(7, 8, getBit(bits, 8))\n for (let i = 9; i < 15; i++) this.setFunctionModule(14 - i, 8, getBit(bits, i))\n\n for (let i = 0; i < 8; i++) this.setFunctionModule(this.size - 1 - i, 8, getBit(bits, i))\n for (let i = 8; i < 15; i++) this.setFunctionModule(8, this.size - 15 + i, getBit(bits, i))\n this.setFunctionModule(8, this.size - 8, true)\n }\n\n private drawVersion(): void {\n if (this.version < 7) return\n\n let rem: int = this.version\n for (let i = 0; i < 12; i++) rem = (rem << 1) ^ ((rem >>> 11) * 0x1f25)\n const bits: int = (this.version << 12) | rem // uint18\n assert(bits >>> 18 == 0)\n\n for (let i = 0; i < 18; i++) {\n const color: boolean = getBit(bits, i)\n const a: int = this.size - 11 + (i % 3)\n const b: int = Math.floor(i / 3)\n this.setFunctionModule(a, b, color)\n this.setFunctionModule(b, a, color)\n }\n }\n\n private drawFinderPattern(x: int, y: int): void {\n for (let dy = -4; dy <= 4; dy++) {\n for (let dx = -4; dx <= 4; dx++) {\n const dist: int = Math.max(Math.abs(dx), Math.abs(dy))\n const xx: int = x + dx\n const yy: int = y + dy\n if (0 <= xx && xx < this.size && 0 <= yy && yy < this.size)\n this.setFunctionModule(xx, yy, dist != 2 && dist != 4)\n }\n }\n }\n\n private drawAlignmentPattern(x: int, y: int): void {\n for (let dy = -2; dy <= 2; dy++) {\n for (let dx = -2; dx <= 2; dx++) this.setFunctionModule(x + dx, y + dy, Math.max(Math.abs(dx), Math.abs(dy)) != 1)\n }\n }\n\n private setFunctionModule(x: int, y: int, isDark: boolean): void {\n this.modules[y][x] = isDark\n this.isFunction[y][x] = true\n }\n\n private addEccAndInterleave(data: Readonly<Array<byte>>): Array<byte> {\n const ver: int = this.version\n const ecl: Ecc = this.errorCorrectionLevel\n if (data.length != QrCode.getNumDataCodewords(ver, ecl)) throw new RangeError('Invalid argument')\n\n const numBlocks: int = QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver]\n const blockEccLen: int = QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver]\n const rawCodewords: int = Math.floor(QrCode.getNumRawDataModules(ver) / 8)\n const numShortBlocks: int = numBlocks - (rawCodewords % numBlocks)\n const shortBlockLen: int = Math.floor(rawCodewords / numBlocks)\n\n let blocks: Array<Array<byte>> = []\n const rsDiv: Array<byte> = QrCode.reedSolomonComputeDivisor(blockEccLen)\n for (let i = 0, k = 0; i < numBlocks; i++) {\n let dat: Array<byte> = data.slice(k, k + shortBlockLen - blockEccLen + (i < numShortBlocks ? 0 : 1))\n k += dat.length\n const ecc: Array<byte> = QrCode.reedSolomonComputeRemainder(dat, rsDiv)\n if (i < numShortBlocks) dat.push(0)\n blocks.push(dat.concat(ecc))\n }\n\n let result: Array<byte> = []\n for (let i = 0; i < blocks[0].length; i++) {\n blocks.forEach((block, j) => {\n if (i != shortBlockLen - blockEccLen || j >= numShortBlocks) result.push(block[i])\n })\n }\n assert(result.length == rawCodewords)\n return result\n }\n\n private drawCodewords(data: Readonly<Array<byte>>): void {\n if (data.length != Math.floor(QrCode.getNumRawDataModules(this.version) / 8))\n throw new RangeError('Invalid argument')\n let i: int = 0\n for (let right = this.size - 1; right >= 1; right -= 2) {\n if (right == 6) right = 5\n for (let vert = 0; vert < this.size; vert++) {\n for (let j = 0; j < 2; j++) {\n const x: int = right - j\n const upward: boolean = ((right + 1) & 2) == 0\n const y: int = upward ? this.size - 1 - vert : vert\n if (!this.isFunction[y][x] && i < data.length * 8) {\n this.modules[y][x] = getBit(data[i >>> 3], 7 - (i & 7))\n i++\n }\n }\n }\n }\n assert(i == data.length * 8)\n }\n\n private applyMask(mask: int): void {\n if (mask < 0 || mask > 7) throw new RangeError('Mask value out of range')\n for (let y = 0; y < this.size; y++) {\n for (let x = 0; x < this.size; x++) {\n let invert: boolean\n switch (mask) {\n case 0:\n invert = (x + y) % 2 == 0\n break\n case 1:\n invert = y % 2 == 0\n break\n case 2:\n invert = x % 3 == 0\n break\n case 3:\n invert = (x + y) % 3 == 0\n break\n case 4:\n invert = (Math.floor(x / 3) + Math.floor(y / 2)) % 2 == 0\n break\n case 5:\n invert = ((x * y) % 2) + ((x * y) % 3) == 0\n break\n case 6:\n invert = (((x * y) % 2) + ((x * y) % 3)) % 2 == 0\n break\n case 7:\n invert = (((x + y) % 2) + ((x * y) % 3)) % 2 == 0\n break\n default:\n throw new Error('Unreachable')\n }\n if (!this.isFunction[y][x] && invert) this.modules[y][x] = !this.modules[y][x]\n }\n }\n }\n\n private getPenaltyScore(): int {\n let result: int = 0\n\n for (let y = 0; y < this.size; y++) {\n let runColor = false\n let runX = 0\n let runHistory = [0, 0, 0, 0, 0, 0, 0]\n for (let x = 0; x < this.size; x++) {\n if (this.modules[y][x] == runColor) {\n runX++\n if (runX == 5) result += QrCode.PENALTY_N1\n else if (runX > 5) result++\n } else {\n this.finderPenaltyAddHistory(runX, runHistory)\n if (!runColor) result += this.finderPenaltyCountPatterns(runHistory) * QrCode.PENALTY_N3\n runColor = this.modules[y][x]\n runX = 1\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runX, runHistory) * QrCode.PENALTY_N3\n }\n\n for (let x = 0; x < this.size; x++) {\n let runColor = false\n let runY = 0\n let runHistory = [0, 0, 0, 0, 0, 0, 0]\n for (let y = 0; y < this.size; y++) {\n if (this.modules[y][x] == runColor) {\n runY++\n if (runY == 5) result += QrCode.PENALTY_N1\n else if (runY > 5) result++\n } else {\n this.finderPenaltyAddHistory(runY, runHistory)\n if (!runColor) result += this.finderPenaltyCountPatterns(runHistory) * QrCode.PENALTY_N3\n runColor = this.modules[y][x]\n runY = 1\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runY, runHistory) * QrCode.PENALTY_N3\n }\n\n for (let y = 0; y < this.size - 1; y++) {\n for (let x = 0; x < this.size - 1; x++) {\n const color: boolean = this.modules[y][x]\n if (color == this.modules[y][x + 1] && color == this.modules[y + 1][x] && color == this.modules[y + 1][x + 1])\n result += QrCode.PENALTY_N2\n }\n }\n\n let dark: int = 0\n for (const row of this.modules) dark = row.reduce((sum, color) => sum + (color ? 1 : 0), dark)\n const total: int = this.size * this.size\n const k: int = Math.ceil(Math.abs(dark * 20 - total * 10) / total) - 1\n assert(0 <= k && k <= 9)\n result += k * QrCode.PENALTY_N4\n assert(0 <= result && result <= 2568888)\n return result\n }\n\n private getAlignmentPatternPositions(): Array<int> {\n if (this.version == 1) return []\n else {\n const numAlign: int = Math.floor(this.version / 7) + 2\n const step: int = this.version == 32 ? 26 : Math.ceil((this.version * 4 + 4) / (numAlign * 2 - 2)) * 2\n let result: Array<int> = [6]\n for (let pos = this.size - 7; result.length < numAlign; pos -= step) result.splice(1, 0, pos)\n return result\n }\n }\n\n private static getNumRawDataModules(ver: int): int {\n if (ver < QrCode.MIN_VERSION || ver > QrCode.MAX_VERSION) throw new RangeError('Version number out of range')\n let result: int = (16 * ver + 128) * ver + 64\n if (ver >= 2) {\n const numAlign: int = Math.floor(ver / 7) + 2\n result -= (25 * numAlign - 10) * numAlign - 55\n if (ver >= 7) result -= 36\n }\n assert(208 <= result && result <= 29648)\n return result\n }\n\n private static getNumDataCodewords(ver: int, ecl: Ecc): int {\n return (\n Math.floor(QrCode.getNumRawDataModules(ver) / 8) -\n QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver] * QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver]\n )\n }\n\n private static reedSolomonComputeDivisor(degree: int): Array<byte> {\n if (degree < 1 || degree > 255) throw new RangeError('Degree out of range')\n let result: Array<byte> = []\n for (let i = 0; i < degree - 1; i++) result.push(0)\n result.push(1)\n\n let root = 1\n for (let i = 0; i < degree; i++) {\n for (let j = 0; j < result.length; j++) {\n result[j] = QrCode.reedSolomonMultiply(result[j], root)\n if (j + 1 < result.length) result[j] ^= result[j + 1]\n }\n root = QrCode.reedSolomonMultiply(root, 0x02)\n }\n return result\n }\n\n private static reedSolomonComputeRemainder(data: Readonly<Array<byte>>, divisor: Readonly<Array<byte>>): Array<byte> {\n let result: Array<byte> = divisor.map((_) => 0)\n for (const b of data) {\n const factor: byte = b ^ (result.shift() as byte)\n result.push(0)\n divisor.forEach((coef, i) => (result[i] ^= QrCode.reedSolomonMultiply(coef, factor)))\n }\n return result\n }\n\n private static reedSolomonMultiply(x: byte, y: byte): byte {\n if (x >>> 8 != 0 || y >>> 8 != 0) throw new RangeError('Byte out of range')\n let z: int = 0\n for (let i = 7; i >= 0; i--) {\n z = (z << 1) ^ ((z >>> 7) * 0x11d)\n z ^= ((y >>> i) & 1) * x\n }\n assert(z >>> 8 == 0)\n return z as byte\n }\n\n private finderPenaltyCountPatterns(runHistory: Readonly<Array<int>>): int {\n const n: int = runHistory[1]\n assert(n <= this.size * 3)\n const core: boolean =\n n > 0 && runHistory[2] == n && runHistory[3] == n * 3 && runHistory[4] == n && runHistory[5] == n\n return (\n (core && runHistory[0] >= n * 4 && runHistory[6] >= n ? 1 : 0) +\n (core && runHistory[6] >= n * 4 && runHistory[0] >= n ? 1 : 0)\n )\n }\n\n private finderPenaltyTerminateAndCount(currentRunColor: boolean, currentRunLength: int, runHistory: Array<int>): int {\n if (currentRunColor) {\n this.finderPenaltyAddHistory(currentRunLength, runHistory)\n currentRunLength = 0\n }\n currentRunLength += this.size\n this.finderPenaltyAddHistory(currentRunLength, runHistory)\n return this.finderPenaltyCountPatterns(runHistory)\n }\n\n private finderPenaltyAddHistory(currentRunLength: int, runHistory: Array<int>): void {\n if (runHistory[0] == 0) currentRunLength += this.size // Add light border to initial run\n runHistory.pop()\n runHistory.unshift(currentRunLength)\n }\n\n public static readonly MIN_VERSION: int = 1\n public static readonly MAX_VERSION: int = 40\n\n private static readonly PENALTY_N1: int = 3\n private static readonly PENALTY_N2: int = 3\n private static readonly PENALTY_N3: int = 40\n private static readonly PENALTY_N4: int = 10\n\n private static readonly ECC_CODEWORDS_PER_BLOCK: Array<Array<int>> = [\n // Version: (note that index 0 is for padding, and is set to an illegal value)\n //0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level\n [\n -1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30,\n 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30\n ], // Low\n [\n -1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28,\n 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28\n ], // Medium\n [\n -1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30,\n 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30\n ], // Quartile\n [\n -1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30,\n 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30\n ] // High\n ]\n\n private static readonly NUM_ERROR_CORRECTION_BLOCKS: Array<Array<int>> = [\n // Version: (note that index 0 is for padding, and is set to an illegal value)\n //0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level\n [\n -1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18,\n 19, 19, 20, 21, 22, 24, 25\n ], // Low\n [\n -1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31,\n 33, 35, 37, 38, 40, 43, 45, 47, 49\n ], // Medium\n [\n -1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40,\n 43, 45, 48, 51, 53, 56, 59, 62, 65, 68\n ], // Quartile\n [\n -1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48,\n 51, 54, 57, 60, 63, 66, 70, 74, 77, 81\n ] // High\n ]\n}\n\nfunction appendBits(val: int, len: int, bb: Array<bit>): void {\n if (len < 0 || len > 31 || val >>> len != 0) throw new RangeError('Value out of range')\n for (let i = len - 1; i >= 0; i--) bb.push((val >>> i) & 1)\n}\n\nfunction getBit(x: int, i: int): boolean {\n return ((x >>> i) & 1) != 0\n}\n\nfunction assert(cond: boolean): void {\n if (!cond) throw new Error('Assertion error')\n}\n\nclass QrSegment {\n public static makeBytes(data: Readonly<Array<byte>>): QrSegment {\n let bb: Array<bit> = []\n for (const b of data) appendBits(b, 8, bb)\n return new QrSegment(Mode.BYTE, data.length, bb)\n }\n\n public static makeNumeric(digits: string): QrSegment {\n if (!QrSegment.isNumeric(digits)) throw new RangeError('String contains non-numeric characters')\n let bb: Array<bit> = []\n for (let i = 0; i < digits.length; ) {\n const n: int = Math.min(digits.length - i, 3)\n appendBits(parseInt(digits.substring(i, i + n), 10), n * 3 + 1, bb)\n i += n\n }\n return new QrSegment(Mode.NUMERIC, digits.length, bb)\n }\n\n public static makeAlphanumeric(text: string): QrSegment {\n if (!QrSegment.isAlphanumeric(text))\n throw new RangeError('String contains unencodable characters in alphanumeric mode')\n let bb: Array<bit> = []\n let i: int\n for (i = 0; i + 2 <= text.length; i += 2) {\n let temp: int = QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)) * 45\n temp += QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i + 1))\n appendBits(temp, 11, bb)\n }\n if (i < text.length) appendBits(QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)), 6, bb)\n return new QrSegment(Mode.ALPHANUMERIC, text.length, bb)\n }\n\n public static makeSegments(text: string): Array<QrSegment> {\n if (text == '') return []\n else if (QrSegment.isNumeric(text)) return [QrSegment.makeNumeric(text)]\n else if (QrSegment.isAlphanumeric(text)) return [QrSegment.makeAlphanumeric(text)]\n else return [QrSegment.makeBytes(QrSegment.toUtf8ByteArray(text))]\n }\n\n public static makeEci(assignVal: int): QrSegment {\n let bb: Array<bit> = []\n if (assignVal < 0) throw new RangeError('ECI assignment value out of range')\n else if (assignVal < 1 << 7) appendBits(assignVal, 8, bb)\n else if (assignVal < 1 << 14) {\n appendBits(0b10, 2, bb)\n appendBits(assignVal, 14, bb)\n } else if (assignVal < 1000000) {\n appendBits(0b110, 3, bb)\n appendBits(assignVal, 21, bb)\n } else throw new RangeError('ECI assignment value out of range')\n return new QrSegment(Mode.ECI, 0, bb)\n }\n\n public static isNumeric(text: string): boolean {\n return QrSegment.NUMERIC_REGEX.test(text)\n }\n\n public static isAlphanumeric(text: string): boolean {\n return QrSegment.ALPHANUMERIC_REGEX.test(text)\n }\n\n public constructor(public readonly mode: Mode, public readonly numChars: int, private readonly bitData: Array<bit>) {\n if (numChars < 0) throw new RangeError('Invalid argument')\n this.bitData = bitData.slice()\n }\n\n public getData(): Array<bit> {\n return this.bitData.slice()\n }\n\n public static getTotalBits(segs: Readonly<Array<QrSegment>>, version: int): number {\n let result: number = 0\n for (const seg of segs) {\n const ccbits: int = seg.mode.numCharCountBits(version)\n if (seg.numChars >= 1 << ccbits) return Infinity\n result += 4 + ccbits + seg.bitData.length\n }\n return result\n }\n\n private static toUtf8ByteArray(str: string): Array<byte> {\n str = encodeURI(str)\n let result: Array<byte> = []\n for (let i = 0; i < str.length; i++) {\n if (str.charAt(i) != '%') result.push(str.charCodeAt(i))\n else {\n result.push(parseInt(str.substring(i + 1, i + 3), 16))\n i += 2\n }\n }\n return result\n }\n\n private static readonly NUMERIC_REGEX: RegExp = /^[0-9]*$/\n private static readonly ALPHANUMERIC_REGEX: RegExp = /^[A-Z0-9 $%*+.\\/:-]*$/\n private static readonly ALPHANUMERIC_CHARSET: string = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:'\n}\n\nclass Ecc {\n public static readonly LOW = new Ecc(0, 1) // The QR Code can tolerate about 7% erroneous codewords\n public static readonly MEDIUM = new Ecc(1, 0) // The QR Code can tolerate about 15% erroneous codewords\n public static readonly QUARTILE = new Ecc(2, 3) // The QR Code can tolerate about 25% erroneous codewords\n public static readonly HIGH = new Ecc(3, 2) // The QR Code can tolerate about 30% erroneous codewords\n\n public static readonly low = this.LOW\n public static readonly medium = this.MEDIUM\n public static readonly quartile = this.QUARTILE\n public static readonly high = this.HIGH\n\n private constructor(public readonly ordinal: int, public readonly formatBits: int) {}\n}\n\nclass Mode {\n public static readonly NUMERIC = new Mode(0x1, [10, 12, 14])\n public static readonly ALPHANUMERIC = new Mode(0x2, [9, 11, 13])\n public static readonly BYTE = new Mode(0x4, [8, 16, 16])\n public static readonly KANJI = new Mode(0x8, [8, 10, 12])\n public static readonly ECI = new Mode(0x7, [0, 0, 0])\n\n private constructor(public readonly modeBits: int, private readonly numBitsCharCount: [int, int, int]) {}\n\n public numCharCountBits(ver: int): int {\n return this.numBitsCharCount[Math.floor((ver + 7) / 17)]\n }\n}\n\nexport { QrCode, Ecc }\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core'\nimport { Ecc, QrCode } from './qrcode-generator'\n\n@Component({\n selector: 'qrcode-svg',\n standalone: true,\n template: `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n version=\"1.1\"\n stroke=\"none\"\n [attr.alt]=\"alt()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.width]=\"size()\"\n [attr.height]=\"size()\"\n [attr.viewBox]=\"viewBox()\"\n >\n <rect width=\"100%\" height=\"100%\" [attr.fill]=\"backgroundColor()\" />\n <path [attr.d]=\"d()\" [attr.fill]=\"foregroundColor()\" />\n </svg>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class QrcodeSvgComponent {\n value = input.required<string>()\n ecl = input<'low' | 'medium' | 'quartile' | 'high'>('medium')\n borderSize = input<number>(2)\n size = input<string | number>(250)\n\n backgroundColor = input<string>('#FFFFFF')\n foregroundColor = input<string>('#000000')\n\n alt = input<string>()\n ariaLabel = input<string>()\n\n viewBox = computed(() => {\n const s = this.qr().size + this.borderSize() * 2\n return `0 0 ${s} ${s}`\n })\n d = computed(() => {\n return this.createD(this.qr(), this.borderSize())\n })\n\n private qr = computed(() => {\n return QrCode.encodeText(this.value(), Ecc[this.ecl()])\n })\n\n private createD(qr: QrCode, borderSize: number): string {\n const parts: string[] = []\n for (let y = 0; y < qr.size; y++) {\n for (let x = 0; x < qr.size; x++) {\n if (qr.getModule(x, y)) parts.push(`M${x + borderSize},${y + borderSize}h1v1h-1z`)\n }\n }\n return parts.join(' ')\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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