@liquid-js/qr-code-styling 3.0.0-3 → 3.0.0-4

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/qrcode-generator/qrcode.js","../src/types/qrcode.ts","../src/utils/merge.ts","../src/utils/gradient.ts","../src/utils/options.ts","../src/utils/qrcode.ts","../src/figures/corner-dot.ts","../src/figures/corner-square.ts","../src/figures/dot.ts","../src/tools/browser-image-tools.ts","../src/core/qr-svg.ts","../src/utils/image.ts","../src/core/qr-code-styling.ts","../src/utils/canvas-options.ts","../src/tools/browser-utils.ts","../src/index.ts"],"sourcesContent":["//---------------------------------------------------------------------\n//\n// QR Code Generator for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n// The word 'QR Code' is registered trademark of\n// DENSO WAVE INCORPORATED\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n\nvar qrcode = function() {\n\n //---------------------------------------------------------------------\n // qrcode\n //---------------------------------------------------------------------\n\n /**\n * qrcode\n * @param typeNumber 1 to 40\n * @param errorCorrectionLevel 'L','M','Q','H'\n */\n var qrcode = function(typeNumber, errorCorrectionLevel) {\n\n var PAD0 = 0xEC;\n var PAD1 = 0x11;\n\n var _typeNumber = typeNumber;\n var _errorCorrectionLevel = QRErrorCorrectionLevel[errorCorrectionLevel];\n var _modules = null;\n var _moduleCount = 0;\n var _dataCache = null;\n var _dataList = [];\n\n var _this = {};\n\n var makeImpl = function(test, maskPattern) {\n\n _moduleCount = _typeNumber * 4 + 17;\n _modules = function(moduleCount) {\n var modules = new Array(moduleCount);\n for (var row = 0; row < moduleCount; row += 1) {\n modules[row] = new Array(moduleCount);\n for (var col = 0; col < moduleCount; col += 1) {\n modules[row][col] = null;\n }\n }\n return modules;\n }(_moduleCount);\n\n setupPositionProbePattern(0, 0);\n setupPositionProbePattern(_moduleCount - 7, 0);\n setupPositionProbePattern(0, _moduleCount - 7);\n setupPositionAdjustPattern();\n setupTimingPattern();\n setupTypeInfo(test, maskPattern);\n\n if (_typeNumber >= 7) {\n setupTypeNumber(test);\n }\n\n if (_dataCache == null) {\n _dataCache = createData(_typeNumber, _errorCorrectionLevel, _dataList);\n }\n\n mapData(_dataCache, maskPattern);\n };\n\n var setupPositionProbePattern = function(row, col) {\n\n for (var r = -1; r <= 7; r += 1) {\n\n if (row + r <= -1 || _moduleCount <= row + r) continue;\n\n for (var c = -1; c <= 7; c += 1) {\n\n if (col + c <= -1 || _moduleCount <= col + c) 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 _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n };\n\n var getBestMaskPattern = function() {\n\n var minLostPoint = 0;\n var pattern = 0;\n\n for (var i = 0; i < 8; i += 1) {\n\n makeImpl(true, i);\n\n var lostPoint = QRUtil.getLostPoint(_this);\n\n if (i == 0 || minLostPoint > lostPoint) {\n minLostPoint = lostPoint;\n pattern = i;\n }\n }\n\n return pattern;\n };\n\n var setupTimingPattern = function() {\n\n for (var r = 8; r < _moduleCount - 8; r += 1) {\n if (_modules[r][6] != null) {\n continue;\n }\n _modules[r][6] = (r % 2 == 0);\n }\n\n for (var c = 8; c < _moduleCount - 8; c += 1) {\n if (_modules[6][c] != null) {\n continue;\n }\n _modules[6][c] = (c % 2 == 0);\n }\n };\n\n var setupPositionAdjustPattern = function() {\n\n var pos = QRUtil.getPatternPosition(_typeNumber);\n\n for (var i = 0; i < pos.length; i += 1) {\n\n for (var j = 0; j < pos.length; j += 1) {\n\n var row = pos[i];\n var col = pos[j];\n\n if (_modules[row][col] != null) {\n continue;\n }\n\n for (var r = -2; r <= 2; r += 1) {\n\n for (var c = -2; c <= 2; c += 1) {\n\n if (r == -2 || r == 2 || c == -2 || c == 2\n || (r == 0 && c == 0) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n }\n }\n };\n\n var setupTypeNumber = function(test) {\n\n var bits = QRUtil.getBCHTypeNumber(_typeNumber);\n\n for (var i = 0; i < 18; i += 1) {\n var mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod;\n }\n\n for (var i = 0; i < 18; i += 1) {\n var mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod;\n }\n };\n\n var setupTypeInfo = function(test, maskPattern) {\n\n var data = (_errorCorrectionLevel << 3) | maskPattern;\n var bits = QRUtil.getBCHTypeInfo(data);\n\n // vertical\n for (var i = 0; i < 15; i += 1) {\n\n var mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 6) {\n _modules[i][8] = mod;\n } else if (i < 8) {\n _modules[i + 1][8] = mod;\n } else {\n _modules[_moduleCount - 15 + i][8] = mod;\n }\n }\n\n // horizontal\n for (var i = 0; i < 15; i += 1) {\n\n var mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 8) {\n _modules[8][_moduleCount - i - 1] = mod;\n } else if (i < 9) {\n _modules[8][15 - i - 1 + 1] = mod;\n } else {\n _modules[8][15 - i - 1] = mod;\n }\n }\n\n // fixed module\n _modules[_moduleCount - 8][8] = (!test);\n };\n\n var mapData = function(data, maskPattern) {\n\n var inc = -1;\n var row = _moduleCount - 1;\n var bitIndex = 7;\n var byteIndex = 0;\n var maskFunc = QRUtil.getMaskFunction(maskPattern);\n\n for (var col = _moduleCount - 1; col > 0; col -= 2) {\n\n if (col == 6) col -= 1;\n\n while (true) {\n\n for (var c = 0; c < 2; c += 1) {\n\n if (_modules[row][col - c] == null) {\n\n var dark = false;\n\n if (byteIndex < data.length) {\n dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);\n }\n\n var mask = maskFunc(row, col - c);\n\n if (mask) {\n dark = !dark;\n }\n\n _modules[row][col - c] = dark;\n bitIndex -= 1;\n\n if (bitIndex == -1) {\n byteIndex += 1;\n bitIndex = 7;\n }\n }\n }\n\n row += inc;\n\n if (row < 0 || _moduleCount <= row) {\n row -= inc;\n inc = -inc;\n break;\n }\n }\n }\n };\n\n var createBytes = function(buffer, rsBlocks) {\n\n var offset = 0;\n\n var maxDcCount = 0;\n var maxEcCount = 0;\n\n var dcdata = new Array(rsBlocks.length);\n var ecdata = new Array(rsBlocks.length);\n\n for (var r = 0; r < rsBlocks.length; r += 1) {\n\n var dcCount = rsBlocks[r].dataCount;\n var ecCount = rsBlocks[r].totalCount - dcCount;\n\n maxDcCount = Math.max(maxDcCount, dcCount);\n maxEcCount = Math.max(maxEcCount, ecCount);\n\n dcdata[r] = new Array(dcCount);\n\n for (var i = 0; i < dcdata[r].length; i += 1) {\n dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];\n }\n offset += dcCount;\n\n var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n var rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);\n\n var modPoly = rawPoly.mod(rsPoly);\n ecdata[r] = new Array(rsPoly.getLength() - 1);\n for (var i = 0; i < ecdata[r].length; i += 1) {\n var modIndex = i + modPoly.getLength() - ecdata[r].length;\n ecdata[r][i] = (modIndex >= 0)? modPoly.getAt(modIndex) : 0;\n }\n }\n\n var totalCodeCount = 0;\n for (var i = 0; i < rsBlocks.length; i += 1) {\n totalCodeCount += rsBlocks[i].totalCount;\n }\n\n var data = new Array(totalCodeCount);\n var index = 0;\n\n for (var i = 0; i < maxDcCount; i += 1) {\n for (var 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\n for (var i = 0; i < maxEcCount; i += 1) {\n for (var 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\n return data;\n };\n\n var createData = function(typeNumber, errorCorrectionLevel, dataList) {\n\n var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectionLevel);\n\n var buffer = qrBitBuffer();\n\n for (var i = 0; i < dataList.length; i += 1) {\n var data = dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n // calc num max data.\n var totalDataCount = 0;\n for (var i = 0; i < rsBlocks.length; i += 1) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() > totalDataCount * 8) {\n throw 'code length overflow. ('\n + buffer.getLengthInBits()\n + '>'\n + totalDataCount * 8\n + ')';\n }\n\n // end code\n if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n buffer.put(0, 4);\n }\n\n // padding\n while (buffer.getLengthInBits() % 8 != 0) {\n buffer.putBit(false);\n }\n\n // padding\n while (true) {\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD0, 8);\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD1, 8);\n }\n\n return createBytes(buffer, rsBlocks);\n };\n\n _this.addData = function(data, mode) {\n\n mode = mode || 'Byte';\n\n var newData = null;\n\n switch(mode) {\n case 'Numeric' :\n newData = qrNumber(data);\n break;\n case 'Alphanumeric' :\n newData = qrAlphaNum(data);\n break;\n case 'Byte' :\n newData = qr8BitByte(data);\n break;\n case 'Kanji' :\n newData = qrKanji(data);\n break;\n default :\n throw 'mode:' + mode;\n }\n\n _dataList.push(newData);\n _dataCache = null;\n };\n\n _this.isDark = function(row, col) {\n if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) {\n throw row + ',' + col;\n }\n return _modules[row][col];\n };\n\n _this.getModuleCount = function() {\n return _moduleCount;\n };\n\n _this.make = function() {\n if (_typeNumber < 1) {\n var typeNumber = 1;\n\n for (; typeNumber < 40; typeNumber++) {\n var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, _errorCorrectionLevel);\n var buffer = qrBitBuffer();\n\n for (var i = 0; i < _dataList.length; i++) {\n var data = _dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n var totalDataCount = 0;\n for (var i = 0; i < rsBlocks.length; i++) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() <= totalDataCount * 8) {\n break;\n }\n }\n\n _typeNumber = typeNumber;\n }\n\n makeImpl(false, getBestMaskPattern() );\n };\n\n _this.createTableTag = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var qrHtml = '';\n\n qrHtml += '<table style=\"';\n qrHtml += ' border-width: 0px; border-style: none;';\n qrHtml += ' border-collapse: collapse;';\n qrHtml += ' padding: 0px; margin: ' + margin + 'px;';\n qrHtml += '\">';\n qrHtml += '<tbody>';\n\n for (var r = 0; r < _this.getModuleCount(); r += 1) {\n\n qrHtml += '<tr>';\n\n for (var c = 0; c < _this.getModuleCount(); c += 1) {\n qrHtml += '<td style=\"';\n qrHtml += ' border-width: 0px; border-style: none;';\n qrHtml += ' border-collapse: collapse;';\n qrHtml += ' padding: 0px; margin: 0px;';\n qrHtml += ' width: ' + cellSize + 'px;';\n qrHtml += ' height: ' + cellSize + 'px;';\n qrHtml += ' background-color: ';\n qrHtml += _this.isDark(r, c)? '#000000' : '#ffffff';\n qrHtml += ';';\n qrHtml += '\"/>';\n }\n\n qrHtml += '</tr>';\n }\n\n qrHtml += '</tbody>';\n qrHtml += '</table>';\n\n return qrHtml;\n };\n\n _this.createSvgTag = function(cellSize, margin, alt, title) {\n\n var opts = {};\n if (typeof arguments[0] == 'object') {\n // Called by options.\n opts = arguments[0];\n // overwrite cellSize and margin.\n cellSize = opts.cellSize;\n margin = opts.margin;\n alt = opts.alt;\n title = opts.title;\n }\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n // Compose alt property surrogate\n alt = (typeof alt === 'string') ? {text: alt} : alt || {};\n alt.text = alt.text || null;\n alt.id = (alt.text) ? alt.id || 'qrcode-description' : null;\n\n // Compose title property surrogate\n title = (typeof title === 'string') ? {text: title} : title || {};\n title.text = title.text || null;\n title.id = (title.text) ? title.id || 'qrcode-title' : null;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var c, mc, r, mr, qrSvg='', rect;\n\n rect = 'l' + cellSize + ',0 0,' + cellSize +\n ' -' + cellSize + ',0 0,-' + cellSize + 'z ';\n\n qrSvg += '<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"';\n qrSvg += !opts.scalable ? ' width=\"' + size + 'px\" height=\"' + size + 'px\"' : '';\n qrSvg += ' viewBox=\"0 0 ' + size + ' ' + size + '\" ';\n qrSvg += ' preserveAspectRatio=\"xMinYMin meet\"';\n qrSvg += (title.text || alt.text) ? ' role=\"img\" aria-labelledby=\"' +\n escapeXml([title.id, alt.id].join(' ').trim() ) + '\"' : '';\n qrSvg += '>';\n qrSvg += (title.text) ? '<title id=\"' + escapeXml(title.id) + '\">' +\n escapeXml(title.text) + '</title>' : '';\n qrSvg += (alt.text) ? '<description id=\"' + escapeXml(alt.id) + '\">' +\n escapeXml(alt.text) + '</description>' : '';\n qrSvg += '<rect width=\"100%\" height=\"100%\" fill=\"white\" cx=\"0\" cy=\"0\"/>';\n qrSvg += '<path d=\"';\n\n for (r = 0; r < _this.getModuleCount(); r += 1) {\n mr = r * cellSize + margin;\n for (c = 0; c < _this.getModuleCount(); c += 1) {\n if (_this.isDark(r, c) ) {\n mc = c*cellSize+margin;\n qrSvg += 'M' + mc + ',' + mr + rect;\n }\n }\n }\n\n qrSvg += '\" stroke=\"transparent\" fill=\"black\"/>';\n qrSvg += '</svg>';\n\n return qrSvg;\n };\n\n _this.createDataURL = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n return createDataURL(size, size, function(x, y) {\n if (min <= x && x < max && min <= y && y < max) {\n var c = Math.floor( (x - min) / cellSize);\n var r = Math.floor( (y - min) / cellSize);\n return _this.isDark(r, c)? 0 : 1;\n } else {\n return 1;\n }\n } );\n };\n\n _this.createImgTag = function(cellSize, margin, alt) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n\n var img = '';\n img += '<img';\n img += '\\u0020src=\"';\n img += _this.createDataURL(cellSize, margin);\n img += '\"';\n img += '\\u0020width=\"';\n img += size;\n img += '\"';\n img += '\\u0020height=\"';\n img += size;\n img += '\"';\n if (alt) {\n img += '\\u0020alt=\"';\n img += escapeXml(alt);\n img += '\"';\n }\n img += '/>';\n\n return img;\n };\n\n var escapeXml = function(s) {\n var escaped = '';\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charAt(i);\n switch(c) {\n case '<': escaped += '&lt;'; break;\n case '>': escaped += '&gt;'; break;\n case '&': escaped += '&amp;'; break;\n case '\"': escaped += '&quot;'; break;\n default : escaped += c; break;\n }\n }\n return escaped;\n };\n\n var _createHalfASCII = function(margin) {\n var cellSize = 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n var y, x, r1, r2, p;\n\n var blocks = {\n '██': '█',\n '█ ': '▀',\n ' █': '▄',\n ' ': ' '\n };\n\n var blocksLastLineNoMargin = {\n '██': '▀',\n '█ ': '▀',\n ' █': ' ',\n ' ': ' '\n };\n\n var ascii = '';\n for (y = 0; y < size; y += 2) {\n r1 = Math.floor((y - min) / cellSize);\n r2 = Math.floor((y + 1 - min) / cellSize);\n for (x = 0; x < size; x += 1) {\n p = '█';\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r1, Math.floor((x - min) / cellSize))) {\n p = ' ';\n }\n\n if (min <= x && x < max && min <= y+1 && y+1 < max && _this.isDark(r2, Math.floor((x - min) / cellSize))) {\n p += ' ';\n }\n else {\n p += '█';\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n ascii += (margin < 1 && y+1 >= max) ? blocksLastLineNoMargin[p] : blocks[p];\n }\n\n ascii += '\\n';\n }\n\n if (size % 2 && margin > 0) {\n return ascii.substring(0, ascii.length - size - 1) + Array(size+1).join('▀');\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.createASCII = function(cellSize, margin) {\n cellSize = cellSize || 1;\n\n if (cellSize < 2) {\n return _createHalfASCII(margin);\n }\n\n cellSize -= 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n var y, x, r, p;\n\n var white = Array(cellSize+1).join('██');\n var black = Array(cellSize+1).join(' ');\n\n var ascii = '';\n var line = '';\n for (y = 0; y < size; y += 1) {\n r = Math.floor( (y - min) / cellSize);\n line = '';\n for (x = 0; x < size; x += 1) {\n p = 1;\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r, Math.floor((x - min) / cellSize))) {\n p = 0;\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n line += p ? white : black;\n }\n\n for (r = 0; r < cellSize; r += 1) {\n ascii += line + '\\n';\n }\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.renderTo2dContext = function(context, cellSize) {\n cellSize = cellSize || 2;\n var length = _this.getModuleCount();\n for (var row = 0; row < length; row++) {\n for (var col = 0; col < length; col++) {\n context.fillStyle = _this.isDark(row, col) ? 'black' : 'white';\n context.fillRect(row * cellSize, col * cellSize, cellSize, cellSize);\n }\n }\n }\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrcode.stringToBytes\n //---------------------------------------------------------------------\n\n qrcode.stringToBytesFuncs = {\n 'default' : function(s) {\n var bytes = [];\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charCodeAt(i);\n bytes.push(c & 0xff);\n }\n return bytes;\n }\n };\n\n qrcode.stringToBytes = qrcode.stringToBytesFuncs['default'];\n\n //---------------------------------------------------------------------\n // qrcode.createStringToBytes\n //---------------------------------------------------------------------\n\n /**\n * @param unicodeData base64 string of byte array.\n * [16bit Unicode],[16bit Bytes], ...\n * @param numChars\n */\n qrcode.createStringToBytes = function(unicodeData, numChars) {\n\n // create conversion map.\n\n var unicodeMap = function() {\n\n var bin = base64DecodeInputStream(unicodeData);\n var read = function() {\n var b = bin.read();\n if (b == -1) throw 'eof';\n return b;\n };\n\n var count = 0;\n var unicodeMap = {};\n while (true) {\n var b0 = bin.read();\n if (b0 == -1) break;\n var b1 = read();\n var b2 = read();\n var b3 = read();\n var k = String.fromCharCode( (b0 << 8) | b1);\n var v = (b2 << 8) | b3;\n unicodeMap[k] = v;\n count += 1;\n }\n if (count != numChars) {\n throw count + ' != ' + numChars;\n }\n\n return unicodeMap;\n }();\n\n var unknownChar = '?'.charCodeAt(0);\n console.log(JSON.stringify(unicodeMap), unknownChar)\n\n return function(s) {\n var bytes = [];\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charCodeAt(i);\n if (c < 128) {\n bytes.push(c);\n } else {\n var b = unicodeMap[s.charAt(i)];\n if (typeof b == 'number') {\n if ( (b & 0xff) == b) {\n // 1byte\n bytes.push(b);\n } else {\n // 2bytes\n bytes.push(b >>> 8);\n bytes.push(b & 0xff);\n }\n } else {\n bytes.push(unknownChar);\n }\n }\n }\n return bytes;\n };\n };\n\n //---------------------------------------------------------------------\n // QRMode\n //---------------------------------------------------------------------\n\n var QRMode = {\n MODE_NUMBER : 1 << 0,\n MODE_ALPHA_NUM : 1 << 1,\n MODE_8BIT_BYTE : 1 << 2,\n MODE_KANJI : 1 << 3\n };\n\n //---------------------------------------------------------------------\n // QRErrorCorrectionLevel\n //---------------------------------------------------------------------\n\n var QRErrorCorrectionLevel = {\n L : 1,\n M : 0,\n Q : 3,\n H : 2\n };\n\n //---------------------------------------------------------------------\n // QRMaskPattern\n //---------------------------------------------------------------------\n\n var QRMaskPattern = {\n PATTERN000 : 0,\n PATTERN001 : 1,\n PATTERN010 : 2,\n PATTERN011 : 3,\n PATTERN100 : 4,\n PATTERN101 : 5,\n PATTERN110 : 6,\n PATTERN111 : 7\n };\n\n //---------------------------------------------------------------------\n // QRUtil\n //---------------------------------------------------------------------\n\n var QRUtil = function() {\n\n var 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 var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\n var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);\n var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\n\n var _this = {};\n\n var getBCHDigit = function(data) {\n var digit = 0;\n while (data != 0) {\n digit += 1;\n data >>>= 1;\n }\n return digit;\n };\n\n _this.getBCHTypeInfo = function(data) {\n var d = data << 10;\n while (getBCHDigit(d) - getBCHDigit(G15) >= 0) {\n d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15) ) );\n }\n return ( (data << 10) | d) ^ G15_MASK;\n };\n\n _this.getBCHTypeNumber = function(data) {\n var d = data << 12;\n while (getBCHDigit(d) - getBCHDigit(G18) >= 0) {\n d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18) ) );\n }\n return (data << 12) | d;\n };\n\n _this.getPatternPosition = function(typeNumber) {\n return PATTERN_POSITION_TABLE[typeNumber - 1];\n };\n\n _this.getMaskFunction = function(maskPattern) {\n\n switch (maskPattern) {\n\n case QRMaskPattern.PATTERN000 :\n return function(i, j) { return (i + j) % 2 == 0; };\n case QRMaskPattern.PATTERN001 :\n return function(i, j) { return i % 2 == 0; };\n case QRMaskPattern.PATTERN010 :\n return function(i, j) { return j % 3 == 0; };\n case QRMaskPattern.PATTERN011 :\n return function(i, j) { return (i + j) % 3 == 0; };\n case QRMaskPattern.PATTERN100 :\n return function(i, j) { return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0; };\n case QRMaskPattern.PATTERN101 :\n return function(i, j) { return (i * j) % 2 + (i * j) % 3 == 0; };\n case QRMaskPattern.PATTERN110 :\n return function(i, j) { return ( (i * j) % 2 + (i * j) % 3) % 2 == 0; };\n case QRMaskPattern.PATTERN111 :\n return function(i, j) { return ( (i * j) % 3 + (i + j) % 2) % 2 == 0; };\n\n default :\n throw 'bad maskPattern:' + maskPattern;\n }\n };\n\n _this.getErrorCorrectPolynomial = function(errorCorrectLength) {\n var a = qrPolynomial([1], 0);\n for (var i = 0; i < errorCorrectLength; i += 1) {\n a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0) );\n }\n return a;\n };\n\n _this.getLengthInBits = function(mode, type) {\n\n if (1 <= type && type < 10) {\n\n // 1 - 9\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 10;\n case QRMode.MODE_ALPHA_NUM : return 9;\n case QRMode.MODE_8BIT_BYTE : return 8;\n case QRMode.MODE_KANJI : return 8;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 27) {\n\n // 10 - 26\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 12;\n case QRMode.MODE_ALPHA_NUM : return 11;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 10;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 41) {\n\n // 27 - 40\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 14;\n case QRMode.MODE_ALPHA_NUM : return 13;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 12;\n default :\n throw 'mode:' + mode;\n }\n\n } else {\n throw 'type:' + type;\n }\n };\n\n _this.getLostPoint = function(qrcode) {\n\n var moduleCount = qrcode.getModuleCount();\n\n var lostPoint = 0;\n\n // LEVEL1\n\n for (var row = 0; row < moduleCount; row += 1) {\n for (var col = 0; col < moduleCount; col += 1) {\n\n var sameCount = 0;\n var dark = qrcode.isDark(row, col);\n\n for (var r = -1; r <= 1; r += 1) {\n\n if (row + r < 0 || moduleCount <= row + r) {\n continue;\n }\n\n for (var c = -1; c <= 1; c += 1) {\n\n if (col + c < 0 || moduleCount <= col + c) {\n continue;\n }\n\n if (r == 0 && c == 0) {\n continue;\n }\n\n if (dark == qrcode.isDark(row + r, col + c) ) {\n sameCount += 1;\n }\n }\n }\n\n if (sameCount > 5) {\n lostPoint += (3 + sameCount - 5);\n }\n }\n };\n\n // LEVEL2\n\n for (var row = 0; row < moduleCount - 1; row += 1) {\n for (var col = 0; col < moduleCount - 1; col += 1) {\n var count = 0;\n if (qrcode.isDark(row, col) ) count += 1;\n if (qrcode.isDark(row + 1, col) ) count += 1;\n if (qrcode.isDark(row, col + 1) ) count += 1;\n if (qrcode.isDark(row + 1, col + 1) ) count += 1;\n if (count == 0 || count == 4) {\n lostPoint += 3;\n }\n }\n }\n\n // LEVEL3\n\n for (var row = 0; row < moduleCount; row += 1) {\n for (var 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\n for (var col = 0; col < moduleCount; col += 1) {\n for (var 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\n // LEVEL4\n\n var darkCount = 0;\n\n for (var col = 0; col < moduleCount; col += 1) {\n for (var row = 0; row < moduleCount; row += 1) {\n if (qrcode.isDark(row, col) ) {\n darkCount += 1;\n }\n }\n }\n\n var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n lostPoint += ratio * 10;\n\n return lostPoint;\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // QRMath\n //---------------------------------------------------------------------\n\n var QRMath = function() {\n\n var EXP_TABLE = new Array(256);\n var LOG_TABLE = new Array(256);\n\n // initialize tables\n for (var i = 0; i < 8; i += 1) {\n EXP_TABLE[i] = 1 << i;\n }\n for (var i = 8; i < 256; i += 1) {\n EXP_TABLE[i] = EXP_TABLE[i - 4]\n ^ EXP_TABLE[i - 5]\n ^ EXP_TABLE[i - 6]\n ^ EXP_TABLE[i - 8];\n }\n for (var i = 0; i < 255; i += 1) {\n LOG_TABLE[EXP_TABLE[i] ] = i;\n }\n\n var _this = {};\n\n _this.glog = function(n) {\n\n if (n < 1) {\n throw 'glog(' + n + ')';\n }\n\n return LOG_TABLE[n];\n };\n\n _this.gexp = function(n) {\n\n while (n < 0) {\n n += 255;\n }\n\n while (n >= 256) {\n n -= 255;\n }\n\n return EXP_TABLE[n];\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // qrPolynomial\n //---------------------------------------------------------------------\n\n function qrPolynomial(num, shift) {\n\n if (typeof num.length == 'undefined') {\n throw num.length + '/' + shift;\n }\n\n var _num = function() {\n var offset = 0;\n while (offset < num.length && num[offset] == 0) {\n offset += 1;\n }\n var _num = new Array(num.length - offset + shift);\n for (var i = 0; i < num.length - offset; i += 1) {\n _num[i] = num[i + offset];\n }\n return _num;\n }();\n\n var _this = {};\n\n _this.getAt = function(index) {\n return _num[index];\n };\n\n _this.getLength = function() {\n return _num.length;\n };\n\n _this.multiply = function(e) {\n\n var num = new Array(_this.getLength() + e.getLength() - 1);\n\n for (var i = 0; i < _this.getLength(); i += 1) {\n for (var 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\n return qrPolynomial(num, 0);\n };\n\n _this.mod = function(e) {\n\n if (_this.getLength() - e.getLength() < 0) {\n return _this;\n }\n\n var ratio = QRMath.glog(_this.getAt(0) ) - QRMath.glog(e.getAt(0) );\n\n var num = new Array(_this.getLength() );\n for (var i = 0; i < _this.getLength(); i += 1) {\n num[i] = _this.getAt(i);\n }\n\n for (var i = 0; i < e.getLength(); i += 1) {\n num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i) ) + ratio);\n }\n\n // recursive call\n return qrPolynomial(num, 0).mod(e);\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // QRRSBlock\n //---------------------------------------------------------------------\n\n var QRRSBlock = function() {\n\n var RS_BLOCK_TABLE = [\n\n // L\n // M\n // Q\n // H\n\n // 1\n [1, 26, 19],\n [1, 26, 16],\n [1, 26, 13],\n [1, 26, 9],\n\n // 2\n [1, 44, 34],\n [1, 44, 28],\n [1, 44, 22],\n [1, 44, 16],\n\n // 3\n [1, 70, 55],\n [1, 70, 44],\n [2, 35, 17],\n [2, 35, 13],\n\n // 4\n [1, 100, 80],\n [2, 50, 32],\n [2, 50, 24],\n [4, 25, 9],\n\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\n // 6\n [2, 86, 68],\n [4, 43, 27],\n [4, 43, 19],\n [4, 43, 15],\n\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\n var qrRSBlock = function(totalCount, dataCount) {\n var _this = {};\n _this.totalCount = totalCount;\n _this.dataCount = dataCount;\n return _this;\n };\n\n var _this = {};\n\n var getRsBlockTable = function(typeNumber, errorCorrectionLevel) {\n\n switch(errorCorrectionLevel) {\n case QRErrorCorrectionLevel.L :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n case QRErrorCorrectionLevel.M :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n case QRErrorCorrectionLevel.Q :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n case QRErrorCorrectionLevel.H :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n default :\n return undefined;\n }\n };\n\n _this.getRSBlocks = function(typeNumber, errorCorrectionLevel) {\n\n var rsBlock = getRsBlockTable(typeNumber, errorCorrectionLevel);\n\n if (typeof rsBlock == 'undefined') {\n throw 'bad rs block @ typeNumber:' + typeNumber +\n '/errorCorrectionLevel:' + errorCorrectionLevel;\n }\n\n var length = rsBlock.length / 3;\n\n var list = [];\n\n for (var i = 0; i < length; i += 1) {\n\n var count = rsBlock[i * 3 + 0];\n var totalCount = rsBlock[i * 3 + 1];\n var dataCount = rsBlock[i * 3 + 2];\n\n for (var j = 0; j < count; j += 1) {\n list.push(qrRSBlock(totalCount, dataCount) );\n }\n }\n\n return list;\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // qrBitBuffer\n //---------------------------------------------------------------------\n\n var qrBitBuffer = function() {\n\n var _buffer = [];\n var _length = 0;\n\n var _this = {};\n\n _this.getBuffer = function() {\n return _buffer;\n };\n\n _this.getAt = function(index) {\n var bufIndex = Math.floor(index / 8);\n return ( (_buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\n };\n\n _this.put = function(num, length) {\n for (var i = 0; i < length; i += 1) {\n _this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\n }\n };\n\n _this.getLengthInBits = function() {\n return _length;\n };\n\n _this.putBit = function(bit) {\n\n var bufIndex = Math.floor(_length / 8);\n if (_buffer.length <= bufIndex) {\n _buffer.push(0);\n }\n\n if (bit) {\n _buffer[bufIndex] |= (0x80 >>> (_length % 8) );\n }\n\n _length += 1;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrNumber\n //---------------------------------------------------------------------\n\n var qrNumber = function(data) {\n\n var _mode = QRMode.MODE_NUMBER;\n var _data = data;\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n var data = _data;\n\n var i = 0;\n\n while (i + 2 < data.length) {\n buffer.put(strToNum(data.substring(i, i + 3) ), 10);\n i += 3;\n }\n\n if (i < data.length) {\n if (data.length - i == 1) {\n buffer.put(strToNum(data.substring(i, i + 1) ), 4);\n } else if (data.length - i == 2) {\n buffer.put(strToNum(data.substring(i, i + 2) ), 7);\n }\n }\n };\n\n var strToNum = function(s) {\n var num = 0;\n for (var i = 0; i < s.length; i += 1) {\n num = num * 10 + chatToNum(s.charAt(i) );\n }\n return num;\n };\n\n var chatToNum = function(c) {\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n }\n throw 'illegal char :' + c;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrAlphaNum\n //---------------------------------------------------------------------\n\n var qrAlphaNum = function(data) {\n\n var _mode = QRMode.MODE_ALPHA_NUM;\n var _data = data;\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n var s = _data;\n\n var i = 0;\n\n while (i + 1 < s.length) {\n buffer.put(\n getCode(s.charAt(i) ) * 45 +\n getCode(s.charAt(i + 1) ), 11);\n i += 2;\n }\n\n if (i < s.length) {\n buffer.put(getCode(s.charAt(i) ), 6);\n }\n };\n\n var getCode = function(c) {\n\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n } else if ('A' <= c && c <= 'Z') {\n return c.charCodeAt(0) - 'A'.charCodeAt(0) + 10;\n } else {\n switch (c) {\n case ' ' : return 36;\n case '$' : return 37;\n case '%' : return 38;\n case '*' : return 39;\n case '+' : return 40;\n case '-' : return 41;\n case '.' : return 42;\n case '/' : return 43;\n case ':' : return 44;\n default :\n throw 'illegal char :' + c;\n }\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qr8BitByte\n //---------------------------------------------------------------------\n\n var qr8BitByte = function(data) {\n\n var _mode = QRMode.MODE_8BIT_BYTE;\n var _data = data;\n var _bytes = qrcode.stringToBytes(data);\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _bytes.length;\n };\n\n _this.write = function(buffer) {\n for (var i = 0; i < _bytes.length; i += 1) {\n buffer.put(_bytes[i], 8);\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrKanji\n //---------------------------------------------------------------------\n\n var qrKanji = function(data) {\n\n var _mode = QRMode.MODE_KANJI;\n var _data = data;\n\n var stringToBytes = qrcode.stringToBytesFuncs['SJIS'];\n if (!stringToBytes) {\n throw 'sjis not supported.';\n }\n !function(c, code) {\n // self test for sjis support.\n var test = stringToBytes(c);\n if (test.length != 2 || ( (test[0] << 8) | test[1]) != code) {\n throw 'sjis not supported.';\n }\n }('\\u53cb', 0x9746);\n\n var _bytes = stringToBytes(data);\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return ~~(_bytes.length / 2);\n };\n\n _this.write = function(buffer) {\n\n var data = _bytes;\n\n var i = 0;\n\n while (i + 1 < data.length) {\n\n var c = ( (0xff & data[i]) << 8) | (0xff & data[i + 1]);\n\n if (0x8140 <= c && c <= 0x9FFC) {\n c -= 0x8140;\n } else if (0xE040 <= c && c <= 0xEBBF) {\n c -= 0xC140;\n } else {\n throw 'illegal char at ' + (i + 1) + '/' + c;\n }\n\n c = ( (c >>> 8) & 0xff) * 0xC0 + (c & 0xff);\n\n buffer.put(c, 13);\n\n i += 2;\n }\n\n if (i < data.length) {\n throw 'illegal char at ' + (i + 1);\n }\n };\n\n return _this;\n };\n\n //=====================================================================\n // GIF Support etc.\n //\n\n //---------------------------------------------------------------------\n // byteArrayOutputStream\n //---------------------------------------------------------------------\n\n var byteArrayOutputStream = function() {\n\n var _bytes = [];\n\n var _this = {};\n\n _this.writeByte = function(b) {\n _bytes.push(b & 0xff);\n };\n\n _this.writeShort = function(i) {\n _this.writeByte(i);\n _this.writeByte(i >>> 8);\n };\n\n _this.writeBytes = function(b, off, len) {\n off = off || 0;\n len = len || b.length;\n for (var i = 0; i < len; i += 1) {\n _this.writeByte(b[i + off]);\n }\n };\n\n _this.writeString = function(s) {\n for (var i = 0; i < s.length; i += 1) {\n _this.writeByte(s.charCodeAt(i) );\n }\n };\n\n _this.toByteArray = function() {\n return _bytes;\n };\n\n _this.toString = function() {\n var s = '';\n s += '[';\n for (var i = 0; i < _bytes.length; i += 1) {\n if (i > 0) {\n s += ',';\n }\n s += _bytes[i];\n }\n s += ']';\n return s;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // base64EncodeOutputStream\n //---------------------------------------------------------------------\n\n var base64EncodeOutputStream = function() {\n\n var _buffer = 0;\n var _buflen = 0;\n var _length = 0;\n var _base64 = '';\n\n var _this = {};\n\n var writeEncoded = function(b) {\n _base64 += String.fromCharCode(encode(b & 0x3f) );\n };\n\n var encode = function(n) {\n if (n < 0) {\n // error.\n } else if (n < 26) {\n return 0x41 + n;\n } else if (n < 52) {\n return 0x61 + (n - 26);\n } else if (n < 62) {\n return 0x30 + (n - 52);\n } else if (n == 62) {\n return 0x2b;\n } else if (n == 63) {\n return 0x2f;\n }\n throw 'n:' + n;\n };\n\n _this.writeByte = function(n) {\n\n _buffer = (_buffer << 8) | (n & 0xff);\n _buflen += 8;\n _length += 1;\n\n while (_buflen >= 6) {\n writeEncoded(_buffer >>> (_buflen - 6) );\n _buflen -= 6;\n }\n };\n\n _this.flush = function() {\n\n if (_buflen > 0) {\n writeEncoded(_buffer << (6 - _buflen) );\n _buffer = 0;\n _buflen = 0;\n }\n\n if (_length % 3 != 0) {\n // padding\n var padlen = 3 - _length % 3;\n for (var i = 0; i < padlen; i += 1) {\n _base64 += '=';\n }\n }\n };\n\n _this.toString = function() {\n return _base64;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // base64DecodeInputStream\n //---------------------------------------------------------------------\n\n var base64DecodeInputStream = function(str) {\n\n var _str = str;\n var _pos = 0;\n var _buffer = 0;\n var _buflen = 0;\n\n var _this = {};\n\n _this.read = function() {\n\n while (_buflen < 8) {\n\n if (_pos >= _str.length) {\n if (_buflen == 0) {\n return -1;\n }\n throw 'unexpected end of file./' + _buflen;\n }\n\n var c = _str.charAt(_pos);\n _pos += 1;\n\n if (c == '=') {\n _buflen = 0;\n return -1;\n } else if (c.match(/^\\s$/) ) {\n // ignore if whitespace.\n continue;\n }\n\n _buffer = (_buffer << 6) | decode(c.charCodeAt(0) );\n _buflen += 6;\n }\n\n var n = (_buffer >>> (_buflen - 8) ) & 0xff;\n _buflen -= 8;\n return n;\n };\n\n var decode = function(c) {\n if (0x41 <= c && c <= 0x5a) {\n return c - 0x41;\n } else if (0x61 <= c && c <= 0x7a) {\n return c - 0x61 + 26;\n } else if (0x30 <= c && c <= 0x39) {\n return c - 0x30 + 52;\n } else if (c == 0x2b) {\n return 62;\n } else if (c == 0x2f) {\n return 63;\n } else {\n throw 'c:' + c;\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // gifImage (B/W)\n //---------------------------------------------------------------------\n\n var gifImage = function(width, height) {\n\n var _width = width;\n var _height = height;\n var _data = new Array(width * height);\n\n var _this = {};\n\n _this.setPixel = function(x, y, pixel) {\n _data[y * _width + x] = pixel;\n };\n\n _this.write = function(out) {\n\n //---------------------------------\n // GIF Signature\n\n out.writeString('GIF87a');\n\n //---------------------------------\n // Screen Descriptor\n\n out.writeShort(_width);\n out.writeShort(_height);\n\n out.writeByte(0x80); // 2bit\n out.writeByte(0);\n out.writeByte(0);\n\n //---------------------------------\n // Global Color Map\n\n // black\n out.writeByte(0x00);\n out.writeByte(0x00);\n out.writeByte(0x00);\n\n // white\n out.writeByte(0xff);\n out.writeByte(0xff);\n out.writeByte(0xff);\n\n //---------------------------------\n // Image Descriptor\n\n out.writeString(',');\n out.writeShort(0);\n out.writeShort(0);\n out.writeShort(_width);\n out.writeShort(_height);\n out.writeByte(0);\n\n //---------------------------------\n // Local Color Map\n\n //---------------------------------\n // Raster Data\n\n var lzwMinCodeSize = 2;\n var raster = getLZWRaster(lzwMinCodeSize);\n\n out.writeByte(lzwMinCodeSize);\n\n var offset = 0;\n\n while (raster.length - offset > 255) {\n out.writeByte(255);\n out.writeBytes(raster, offset, 255);\n offset += 255;\n }\n\n out.writeByte(raster.length - offset);\n out.writeBytes(raster, offset, raster.length - offset);\n out.writeByte(0x00);\n\n //---------------------------------\n // GIF Terminator\n out.writeString(';');\n };\n\n var bitOutputStream = function(out) {\n\n var _out = out;\n var _bitLength = 0;\n var _bitBuffer = 0;\n\n var _this = {};\n\n _this.write = function(data, length) {\n\n if ( (data >>> length) != 0) {\n throw 'length over';\n }\n\n while (_bitLength + length >= 8) {\n _out.writeByte(0xff & ( (data << _bitLength) | _bitBuffer) );\n length -= (8 - _bitLength);\n data >>>= (8 - _bitLength);\n _bitBuffer = 0;\n _bitLength = 0;\n }\n\n _bitBuffer = (data << _bitLength) | _bitBuffer;\n _bitLength = _bitLength + length;\n };\n\n _this.flush = function() {\n if (_bitLength > 0) {\n _out.writeByte(_bitBuffer);\n }\n };\n\n return _this;\n };\n\n var getLZWRaster = function(lzwMinCodeSize) {\n\n var clearCode = 1 << lzwMinCodeSize;\n var endCode = (1 << lzwMinCodeSize) + 1;\n var bitLength = lzwMinCodeSize + 1;\n\n // Setup LZWTable\n var table = lzwTable();\n\n for (var i = 0; i < clearCode; i += 1) {\n table.add(String.fromCharCode(i) );\n }\n table.add(String.fromCharCode(clearCode) );\n table.add(String.fromCharCode(endCode) );\n\n var byteOut = byteArrayOutputStream();\n var bitOut = bitOutputStream(byteOut);\n\n // clear code\n bitOut.write(clearCode, bitLength);\n\n var dataIndex = 0;\n\n var s = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n while (dataIndex < _data.length) {\n\n var c = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n if (table.contains(s + c) ) {\n\n s = s + c;\n\n } else {\n\n bitOut.write(table.indexOf(s), bitLength);\n\n if (table.size() < 0xfff) {\n\n if (table.size() == (1 << bitLength) ) {\n bitLength += 1;\n }\n\n table.add(s + c);\n }\n\n s = c;\n }\n }\n\n bitOut.write(table.indexOf(s), bitLength);\n\n // end code\n bitOut.write(endCode, bitLength);\n\n bitOut.flush();\n\n return byteOut.toByteArray();\n };\n\n var lzwTable = function() {\n\n var _map = {};\n var _size = 0;\n\n var _this = {};\n\n _this.add = function(key) {\n if (_this.contains(key) ) {\n throw 'dup key:' + key;\n }\n _map[key] = _size;\n _size += 1;\n };\n\n _this.size = function() {\n return _size;\n };\n\n _this.indexOf = function(key) {\n return _map[key];\n };\n\n _this.contains = function(key) {\n return typeof _map[key] != 'undefined';\n };\n\n return _this;\n };\n\n return _this;\n };\n\n var createDataURL = function(width, height, getPixel) {\n var gif = gifImage(width, height);\n for (var y = 0; y < height; y += 1) {\n for (var x = 0; x < width; x += 1) {\n gif.setPixel(x, y, getPixel(x, y) );\n }\n }\n\n var b = byteArrayOutputStream();\n gif.write(b);\n\n var base64 = base64EncodeOutputStream();\n var bytes = b.toByteArray();\n for (var i = 0; i < bytes.length; i += 1) {\n base64.writeByte(bytes[i]);\n }\n base64.flush();\n\n return 'data:image/gif;base64,' + base64;\n };\n\n //---------------------------------------------------------------------\n // returns qrcode function.\n\n return qrcode;\n}();\n\n// multibyte support\n!function() {\n\n qrcode.stringToBytesFuncs['UTF-8'] = function(s) {\n // http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\n function toUTF8Array(str) {\n var utf8 = [];\n for (var i=0; i < str.length; i++) {\n var charcode = str.charCodeAt(i);\n if (charcode < 0x80) utf8.push(charcode);\n else if (charcode < 0x800) {\n utf8.push(0xc0 | (charcode >> 6),\n 0x80 | (charcode & 0x3f));\n }\n else if (charcode < 0xd800 || charcode >= 0xe000) {\n utf8.push(0xe0 | (charcode >> 12),\n 0x80 | ((charcode>>6) & 0x3f),\n 0x80 | (charcode & 0x3f));\n }\n // surrogate pair\n else {\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)\n | (str.charCodeAt(i) & 0x3ff));\n utf8.push(0xf0 | (charcode >>18),\n 0x80 | ((charcode>>12) & 0x3f),\n 0x80 | ((charcode>>6) & 0x3f),\n 0x80 | (charcode & 0x3f));\n }\n }\n return utf8;\n }\n return toUTF8Array(s);\n };\n\n}();\n\n(function (factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n }\n}(function () {\n return qrcode;\n}));\n","type TypeNumber =\n | 0\n | 1\n | 2\n | 3\n | 4\n | 5\n | 6\n | 7\n | 8\n | 9\n | 10\n | 11\n | 12\n | 13\n | 14\n | 15\n | 16\n | 17\n | 18\n | 19\n | 20\n | 21\n | 22\n | 23\n | 24\n | 25\n | 26\n | 27\n | 28\n | 29\n | 30\n | 31\n | 32\n | 33\n | 34\n | 35\n | 36\n | 37\n | 38\n | 39\n | 40;\n\nconst TypeNumber = Array(41)\n .fill(0)\n .map((_, i) => i) as unknown as {\n [P in TypeNumber]: P;\n};\n\nexport { TypeNumber };\n\nexport enum ErrorCorrectionLevel {\n L = \"L\",\n M = \"M\",\n Q = \"Q\",\n H = \"H\"\n}\n\nexport enum Mode {\n numeric = \"Numeric\",\n alphanumeric = \"Alphanumeric\",\n byte = \"Byte\",\n kanji = \"Kanji\",\n unicode = \"Unicode\"\n}\n\nexport interface QRCode {\n addData(data: string, mode?: Mode.alphanumeric | Mode.byte | Mode.kanji | Mode.numeric): void;\n make(): void;\n getModuleCount(): number;\n isDark(row: number, col: number): boolean;\n}\n","const isObject = (obj: Record<string, unknown> | undefined): boolean =>\n !!obj && typeof obj === \"object\" && !Array.isArray(obj);\n\nexport type UnknownObject =\n | {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n }\n | undefined;\n\nexport function mergeDeep(target: UnknownObject, ...sources: UnknownObject[]): UnknownObject {\n if (!sources.length) return target;\n const source = sources.shift();\n if (source === undefined || !isObject(target) || !isObject(source)) return target;\n target = { ...target };\n Object.keys(source).forEach((key: string): void => {\n const targetValue = target[key];\n const sourceValue = source[key];\n\n if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\n target[key] = sourceValue;\n } else if (isObject(targetValue) && isObject(sourceValue)) {\n target[key] = mergeDeep(Object.assign({}, targetValue), sourceValue);\n } else {\n target[key] = sourceValue;\n }\n });\n\n return mergeDeep(target, ...sources);\n}\n","export enum GradientType {\n radial = \"radial\",\n linear = \"linear\"\n}\n\nexport type Gradient = {\n /**\n * Type of gradient spread\n *\n * @default GradientType.linear\n */\n type: `${GradientType}`;\n /**\n * Rotation of gradient (in radians, Math.PI === 180 degrees)\n *\n * @default 0\n */\n rotation?: number;\n /** Gradient colors. */\n colorStops: {\n /** Position of color in gradient range */\n offset: number;\n /** Color of stop in gradient range */\n color: string;\n }[];\n};\n\nexport function sanitizeGradient(gradient: Gradient): Gradient {\n const newGradient = { ...gradient };\n\n if (!newGradient.colorStops || !newGradient.colorStops.length) {\n throw \"Field 'colorStops' is required in gradient\";\n }\n\n if (newGradient.rotation) {\n newGradient.rotation = Number(newGradient.rotation);\n } else {\n newGradient.rotation = 0;\n }\n\n newGradient.colorStops = newGradient.colorStops.map((colorStop: { offset: number; color: string }) => ({\n ...colorStop,\n offset: Number(colorStop.offset)\n }));\n\n return newGradient;\n}\n","import { browserImageTools } from \"../tools/browser-image-tools.js\";\nimport { ErrorCorrectionLevel, TypeNumber } from \"../types/qrcode.js\";\nimport { Gradient, sanitizeGradient } from \"./gradient.js\";\n\nexport enum DotType {\n dot = \"dot\",\n randomDot = \"random-dot\",\n rounded = \"rounded\",\n verticalLine = \"vertical-line\",\n horizontalLine = \"horizontal-line\",\n classy = \"classy\",\n classyRounded = \"classy-rounded\",\n square = \"square\",\n smallSquare = \"small-square\",\n extraRounded = \"extra-rounded\",\n diamond = \"diamond\"\n}\n\nexport enum CornerDotType {\n dot = \"dot\",\n square = \"square\",\n heart = \"heart\",\n extraRounded = \"extra-rounded\",\n classy = \"classy\",\n outpoint = \"outpoint\",\n inpoint = \"inpoint\"\n}\n\nexport enum CornerSquareType {\n dot = \"dot\",\n square = \"square\",\n extraRounded = \"extra-rounded\",\n classy = \"classy\",\n outpoint = \"outpoint\",\n inpoint = \"inpoint\"\n}\n\nexport enum ShapeType {\n square = \"square\",\n circle = \"circle\"\n}\n\nexport interface Options {\n /** Use a custom DOM domplementation */\n document: Document;\n /** Use a custom image fetching & serializaton implementation */\n imageTools?: typeof browserImageTools;\n /** @ignore */\n width: number;\n /** @ignore */\n height: number;\n /** The data will be encoded in the QR code */\n data: string;\n /** The image will be copied to the center of the QR code */\n image?: string | Buffer | Blob;\n /**\n * QR code shape\n *\n * @default ShapeType.square\n */\n shape: `${ShapeType}`;\n /** Options will be passed to `qrcode-generator` lib */\n qrOptions: {\n typeNumber: TypeNumber;\n mode?: `${Mode}`;\n /** @default ErrorCorrectionLevel.Q */\n errorCorrectionLevel: `${ErrorCorrectionLevel}`;\n };\n imageOptions: {\n /**\n * Hide all dots covered by the image\n *\n * @default true\n */\n hideBackgroundDots: boolean;\n /**\n * Coefficient of the image size\n *\n * @default 0.4\n */\n imageSize: number;\n /**\n * Margin of the image (in blocks)\n *\n * @default 0\n */\n margin: number;\n /**\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLImageElement/crossOrigin)\n */\n crossOrigin?: string;\n };\n dotsOptions: {\n /**\n * QR dot size (in pixels)\n *\n * @default 10\n */\n size: number;\n /**\n * Color of QR dots\n *\n * @default \"#000\"\n */\n color: string;\n /** Gradient of QR dots */\n gradient?: Gradient;\n /**\n * Style of QR dots\n *\n * @default DotType.square\n */\n type: `${DotType}`;\n };\n /** Corners Square options, omitted values match dots */\n cornersSquareOptions?: {\n /** Color of Corners Square */\n color?: string;\n /** Gradient of Corners Square */\n gradient?: Gradient;\n /** Style of Corners Square */\n type?: `${CornerSquareType}`;\n };\n /** Corners Dot options, omitted values match squares */\n cornersDotOptions?: {\n /** Color of Corners Dot */\n color?: string;\n /** Gradient of Corners Dot */\n gradient?: Gradient;\n /** Style of Corners Dot */\n type?: `${CornerDotType}`;\n };\n /** QR background styling options, false to disable background */\n backgroundOptions?:\n | {\n /** Background roundnes, from 0 (square) to 1 (circle) */\n round?: number;\n /** Background color */\n color?: string;\n /** Background Gradient */\n gradient?: Gradient;\n /**\n * Margin (in blocks) between background and the QR code\n *\n * @default 0\n */\n margin?: number;\n }\n | false;\n /** `import { stringToBytesFuncs } from \"@liquid-js/qr-code-styling/kanji\";` to add Kanji support */\n stringToBytesFuncs?: { [encoding: string]: (s: string) => number[] };\n}\n\nexport const defaultOptions: Options = {\n document: undefined as never,\n shape: ShapeType.square,\n width: undefined as never,\n height: undefined as never,\n data: \"\",\n qrOptions: {\n typeNumber: TypeNumber[0],\n mode: undefined,\n errorCorrectionLevel: ErrorCorrectionLevel.Q\n },\n imageOptions: {\n hideBackgroundDots: true,\n imageSize: 0.4,\n crossOrigin: undefined,\n margin: 0\n },\n dotsOptions: {\n type: DotType.square,\n color: \"#000\",\n size: 10\n }\n};\n\nexport function sanitizeOptions(options: Options): Options {\n const newOptions = { ...options };\n\n newOptions.imageOptions = {\n ...newOptions.imageOptions,\n hideBackgroundDots: Boolean(newOptions.imageOptions.hideBackgroundDots),\n imageSize: Math.min(1, Number(newOptions.imageOptions.imageSize)) || 1,\n margin: Number(newOptions.imageOptions.margin)\n };\n\n newOptions.dotsOptions = {\n ...newOptions.dotsOptions\n };\n if (newOptions.dotsOptions.gradient) {\n newOptions.dotsOptions.gradient = sanitizeGradient(newOptions.dotsOptions.gradient);\n }\n // Ensure integer dot size\n newOptions.dotsOptions.size = Math.round(Math.max(0, newOptions.dotsOptions.size) || 10);\n\n if (newOptions.cornersSquareOptions) {\n newOptions.cornersSquareOptions = {\n ...newOptions.cornersSquareOptions\n };\n if (newOptions.cornersSquareOptions.gradient) {\n newOptions.cornersSquareOptions.gradient = sanitizeGradient(newOptions.cornersSquareOptions.gradient);\n }\n }\n\n if (newOptions.cornersDotOptions) {\n newOptions.cornersDotOptions = {\n ...newOptions.cornersDotOptions\n };\n if (newOptions.cornersDotOptions.gradient) {\n newOptions.cornersDotOptions.gradient = sanitizeGradient(newOptions.cornersDotOptions.gradient);\n }\n }\n\n if (newOptions.backgroundOptions) {\n newOptions.backgroundOptions = {\n ...newOptions.backgroundOptions\n };\n if (newOptions.backgroundOptions.gradient) {\n newOptions.backgroundOptions.gradient = sanitizeGradient(newOptions.backgroundOptions.gradient);\n }\n }\n\n if (!newOptions.document) newOptions.document = document;\n\n return newOptions;\n}\n","import { ErrorCorrectionLevel, Mode } from \"../types/qrcode.js\";\n\nexport const ErrorCorrectionPercents = {\n [ErrorCorrectionLevel.L]: 0.07,\n [ErrorCorrectionLevel.M]: 0.15,\n [ErrorCorrectionLevel.Q]: 0.25,\n [ErrorCorrectionLevel.H]: 0.3\n};\n\nexport function getMode(data: string): Mode {\n switch (true) {\n case /^[0-9]*$/.test(data):\n return Mode.numeric;\n case /^[0-9A-Z $%*+\\-./:]*$/.test(data):\n return Mode.alphanumeric;\n // eslint-disable-next-line no-control-regex\n case /[^\\u0000-\\u00ff]/.test(data):\n return Mode.unicode;\n default:\n return Mode.byte;\n }\n}\n","import { BasicFigureDrawArgs, DrawArgs, RotateFigureArgs } from \"../types/helper.js\";\nimport { CornerDotType } from \"../utils/options.js\";\n\nexport class QRCornerDot {\n private _element?: SVGElement;\n\n get element() {\n return this._element;\n }\n\n constructor(\n private readonly type: `${CornerDotType}`,\n private readonly document: Document\n ) {}\n\n draw(args: DrawArgs): void {\n const type = this.type;\n let drawFunction;\n\n switch (type) {\n case CornerDotType.square:\n drawFunction = this.drawSquare;\n break;\n case CornerDotType.heart:\n drawFunction = this.drawHeart;\n break;\n case CornerDotType.extraRounded:\n drawFunction = this.drawRounded;\n break;\n case CornerDotType.classy:\n drawFunction = this.drawClassy;\n break;\n case CornerDotType.inpoint:\n drawFunction = this.drawInpoint;\n break;\n case CornerDotType.outpoint:\n drawFunction = this.drawOutpoint;\n break;\n case CornerDotType.dot:\n default:\n drawFunction = this.drawDot;\n }\n\n drawFunction.call(this, args);\n }\n\n private rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\n const cx = x + size / 2;\n const cy = y + size / 2;\n\n draw();\n this._element?.setAttribute(\"transform\", `rotate(${(180 * rotation) / Math.PI},${cx},${cy})`);\n }\n\n private basicDot(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\n this._element.setAttribute(\"cx\", String(x + size / 2));\n this._element.setAttribute(\"cy\", String(y + size / 2));\n this._element.setAttribute(\"r\", String(size / 2));\n }\n });\n }\n\n private basicSquare(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n this._element.setAttribute(\"x\", String(x));\n this._element.setAttribute(\"y\", String(y));\n this._element.setAttribute(\"width\", String(size));\n this._element.setAttribute(\"height\", String(size));\n }\n });\n }\n\n private basicHeart(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n const path = [\n \"M\",\n 0.925,\n 0.3538125,\n \"c\",\n 0,\n 0.0325869,\n -0.0054931,\n 0.0644619,\n -0.0164688,\n 0.095625,\n \"S\",\n 0.87825,\n 0.5147812,\n 0.850625,\n 0.5519688,\n \"C\",\n 0.823,\n 0.5891563,\n 0.7858125,\n 0.631125,\n 0.7390625,\n 0.677875,\n \"S\",\n 0.6331632,\n 0.7802256,\n 0.561625,\n 0.8446875,\n \"L\",\n 0.5,\n 0.8999375,\n \"l\",\n -0.061625,\n -0.05525,\n \"C\",\n 0.3668368,\n 0.7802256,\n 0.3076875,\n 0.724625,\n 0.2609375,\n 0.677875,\n \"S\",\n 0.177,\n 0.5891563,\n 0.149375,\n 0.5519688,\n \"S\",\n 0.1024444,\n 0.4806007,\n 0.0914688,\n 0.4494375,\n \"S\",\n 0.075,\n 0.3863994,\n 0.075,\n 0.3538125,\n \"C\",\n 0.075,\n 0.2872256,\n 0.0973125,\n 0.231625,\n 0.1419375,\n 0.187,\n \"S\",\n 0.2421631,\n 0.1200625,\n 0.30875,\n 0.1200625,\n \"c\",\n 0.0368369,\n 0,\n 0.0718994,\n 0.0077881,\n 0.1051875,\n 0.023375,\n \"S\",\n 0.4759131,\n 0.1809756,\n 0.5,\n 0.2093125,\n \"c\",\n 0.0240868,\n -0.0283369,\n 0.0527744,\n -0.0502881,\n 0.0860625,\n -0.065875,\n \"c\",\n 0.0332882,\n -0.0155869,\n 0.0683507,\n -0.023375,\n 0.1051875,\n -0.023375,\n \"c\",\n 0.0665869,\n 0,\n 0.1221875,\n 0.0223125,\n 0.1668125,\n 0.0669375,\n \"S\",\n 0.925,\n 0.2872256,\n 0.925,\n 0.3538125,\n \"z\"\n ];\n let move = false;\n let i = 0;\n this._element.setAttribute(\n \"d\",\n path\n .map((v) => {\n if (typeof v == \"string\") {\n i = 0;\n move = v.toUpperCase() == v;\n return v;\n }\n i++;\n v = v * size;\n if (move) {\n v += i % 2 == 1 ? x : y;\n }\n return v.toFixed(5);\n })\n .join(\" \")\n );\n }\n\n private basicRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n this._element.setAttribute(\"x\", String(x));\n this._element.setAttribute(\"y\", String(y));\n this._element.setAttribute(\"width\", String(size));\n this._element.setAttribute(\"height\", String(size));\n this._element.setAttribute(\"rx\", String(size / 4));\n this._element.setAttribute(\"ry\", String(size / 4));\n }\n });\n }\n\n private basicClassy(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y + 2.5 * dotSize}` +\n `v ${2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}` +\n `h ${4.5 * dotSize}` +\n `v ${-4.5 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}` +\n `h ${-2 * dotSize}` +\n `H ${x}` +\n `z`\n );\n }\n });\n }\n\n private basicInpoint(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y + dotSize / 2}` +\n `v ${dotSize / 4}` +\n `a ${dotSize / 4}, ${dotSize / 4} 0 0 0 ${dotSize / 4}, ${dotSize / 4}` +\n `h ${(dotSize / 4) * 3}` +\n `v ${(-dotSize / 4) * 3}` +\n `a ${dotSize / 4}, ${dotSize / 4} 0 0 0 ${-dotSize / 4}, ${-dotSize / 4}` +\n `h ${-dotSize / 2}` +\n `a ${dotSize / 4}, ${dotSize / 4} 0 0 0 ${-dotSize / 4}, ${dotSize / 4}` +\n `z`\n );\n }\n });\n }\n\n private drawDot({ x, y, size, rotation }: DrawArgs): void {\n this.basicDot({ x, y, size, rotation });\n }\n\n private drawSquare({ x, y, size, rotation }: DrawArgs): void {\n this.basicSquare({ x, y, size, rotation });\n }\n\n private drawHeart({ x, y, size, rotation }: DrawArgs): void {\n const scaleFactor = 0.2;\n this.basicHeart({\n x: x - (scaleFactor * size) / 2,\n y: y - (scaleFactor * size) / 2,\n size: size * (1 + scaleFactor),\n rotation\n });\n }\n\n private drawRounded({ x, y, size, rotation }: DrawArgs): void {\n this.basicRounded({ x, y, size, rotation });\n }\n\n private drawClassy({ x, y, size, rotation }: DrawArgs): void {\n this.basicClassy({ x, y, size, rotation });\n }\n\n private drawInpoint({ x, y, size, rotation }: DrawArgs): void {\n this.basicInpoint({ x, y, size, rotation });\n }\n\n private drawOutpoint({ x, y, size, rotation }: DrawArgs): void {\n this.basicInpoint({ x, y, size, rotation: (rotation || 0) + Math.PI });\n }\n}\n","import { BasicFigureDrawArgs, DrawArgs, RotateFigureArgs } from \"../types/helper.js\";\nimport { CornerSquareType } from \"../utils/options.js\";\n\nexport class QRCornerSquare {\n private _element?: SVGElement;\n\n get element() {\n return this._element;\n }\n\n constructor(\n private readonly type: `${CornerSquareType}`,\n private readonly document: Document\n ) {}\n\n draw(args: DrawArgs): void {\n const type = this.type;\n let drawFunction;\n\n switch (type) {\n case CornerSquareType.square:\n drawFunction = this.drawSquare;\n break;\n case CornerSquareType.extraRounded:\n drawFunction = this.drawExtraRounded;\n break;\n case CornerSquareType.classy:\n drawFunction = this.drawClassy;\n break;\n case CornerSquareType.outpoint:\n drawFunction = this.drawOutpoint;\n break;\n case CornerSquareType.inpoint:\n drawFunction = this.drawInpoint;\n break;\n case CornerSquareType.dot:\n default:\n drawFunction = this.drawDot;\n }\n\n drawFunction.call(this, args);\n }\n\n private rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\n const cx = x + size / 2;\n const cy = y + size / 2;\n\n draw();\n this._element?.setAttribute(\"transform\", `rotate(${(180 * rotation) / Math.PI},${cx},${cy})`);\n }\n\n private basicDot(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n `M ${x + size / 2} ${y}` + // M cx, y // Move to top of ring\n `a ${size / 2} ${size / 2} 0 1 0 0.1 0` + // a outerRadius, outerRadius, 0, 1, 0, 1, 0 // Draw outer arc, but don't close it\n `z` + // Z // Close the outer shape\n `m 0 ${dotSize}` + // m -1 outerRadius-innerRadius // Move to top point of inner radius\n `a ${size / 2 - dotSize} ${size / 2 - dotSize} 0 1 1 -0.1 0` + // a innerRadius, innerRadius, 0, 1, 1, -1, 0 // Draw inner arc, but don't close it\n `Z` // Z // Close the inner ring. Actually will still work without, but inner ring will have one unit missing in stroke\n );\n }\n });\n }\n\n private basicSquare(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y}` +\n `v ${size}` +\n `h ${size}` +\n `v ${-size}` +\n `z` +\n `M ${x + dotSize} ${y + dotSize}` +\n `h ${size - 2 * dotSize}` +\n `v ${size - 2 * dotSize}` +\n `h ${-size + 2 * dotSize}` +\n `z`\n );\n }\n });\n }\n\n private basicExtraRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y + 2.5 * dotSize}` +\n `v ${2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}` +\n `h ${2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${-dotSize * 2.5}` +\n `v ${-2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}` +\n `h ${-2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${dotSize * 2.5}` +\n `z` +\n `M ${x + 2.5 * dotSize} ${y + dotSize}` +\n `h ${2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}` +\n `v ${2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${dotSize * 1.5}` +\n `h ${-2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}` +\n `v ${-2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${-dotSize * 1.5}` +\n `z`\n );\n }\n });\n }\n\n private basicClassy(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y + 2.5 * dotSize}` +\n `v ${2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}` +\n `h ${4.5 * dotSize}` +\n `v ${-4.5 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}` +\n `h ${-2 * dotSize}` +\n `H ${x}` +\n `z` +\n `M ${x + 2.5 * dotSize} ${y + dotSize}` +\n `h ${2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}` +\n `v ${3.5 * dotSize}` +\n `h ${-3.5 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}` +\n `v ${-3.5 * dotSize}` +\n `z`\n );\n }\n });\n }\n\n private basicInpoint(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y + 2.5 * dotSize}` +\n `v ${2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}` +\n `h ${4.5 * dotSize}` +\n `v ${-4.5 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}` +\n `h ${-2 * dotSize}` +\n `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${dotSize * 2.5}` +\n \"z\" +\n `M ${x + 2.5 * dotSize} ${y + dotSize}` +\n `h ${2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}` +\n `v ${3.5 * dotSize}` +\n `h ${-3.5 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}` +\n `v ${-2 * dotSize}` +\n `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${-dotSize * 1.5}` +\n `z`\n );\n }\n });\n }\n\n private drawDot({ x, y, size, rotation }: DrawArgs): void {\n this.basicDot({ x, y, size, rotation });\n }\n\n private drawSquare({ x, y, size, rotation }: DrawArgs): void {\n this.basicSquare({ x, y, size, rotation });\n }\n\n private drawExtraRounded({ x, y, size, rotation }: DrawArgs): void {\n this.basicExtraRounded({ x, y, size, rotation });\n }\n\n private drawClassy({ x, y, size, rotation }: DrawArgs): void {\n this.basicClassy({ x, y, size, rotation });\n }\n\n private drawInpoint({ x, y, size, rotation }: DrawArgs): void {\n this.basicInpoint({ x, y, size, rotation });\n }\n\n private drawOutpoint({ x, y, size, rotation }: DrawArgs): void {\n this.basicInpoint({ x, y, size, rotation: (rotation || 0) + Math.PI });\n }\n}\n","import { BasicFigureDrawArgs, DrawArgs, RotateFigureArgs } from \"../types/helper.js\";\nimport { DotType } from \"../utils/options.js\";\n\nexport class QRDot {\n private _element?: SVGElement;\n\n get element() {\n return this._element;\n }\n\n constructor(\n private readonly type: `${DotType}`,\n private readonly document: Document\n ) {}\n\n draw(args: DrawArgs): void {\n const type = this.type;\n let drawFunction;\n\n switch (type) {\n case DotType.dot:\n drawFunction = this.drawDot;\n break;\n case DotType.randomDot:\n drawFunction = this.drawRandomDot;\n break;\n case DotType.classy:\n drawFunction = this.drawClassy;\n break;\n case DotType.classyRounded:\n drawFunction = this.drawClassyRounded;\n break;\n case DotType.rounded:\n drawFunction = this.drawRounded;\n break;\n case DotType.verticalLine:\n drawFunction = this.drawVerticalLine;\n break;\n case DotType.horizontalLine:\n drawFunction = this.drawHorizontalLine;\n break;\n case DotType.extraRounded:\n drawFunction = this.drawExtraRounded;\n break;\n case DotType.diamond:\n drawFunction = this.drawDiamond;\n break;\n case DotType.smallSquare:\n drawFunction = this.drawSmallSquare;\n break;\n case DotType.square:\n default:\n drawFunction = this.drawSquare;\n }\n\n drawFunction.call(this, args);\n }\n\n private rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\n const cx = x + size / 2;\n const cy = y + size / 2;\n\n draw();\n this._element?.setAttribute(\"transform\", `rotate(${(180 * rotation) / Math.PI},${cx},${cy})`);\n }\n\n private basicDot(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\n this._element.setAttribute(\"cx\", String(x + size / 2));\n this._element.setAttribute(\"cy\", String(y + size / 2));\n this._element.setAttribute(\"r\", String(size / 2));\n }\n });\n }\n\n private basicSquare(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n this._element.setAttribute(\"x\", String(x));\n this._element.setAttribute(\"y\", String(y));\n this._element.setAttribute(\"width\", String(size));\n this._element.setAttribute(\"height\", String(size));\n }\n });\n }\n\n //if rotation === 0 - right side is rounded\n private basicSideRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y}` + //go to top left position\n `v ${size}` + //draw line to left bottom corner\n `h ${size / 2}` + //draw line to left bottom corner + half of size right\n `a ${size / 2} ${size / 2}, 0, 0, 0, 0 ${-size}` // draw rounded corner\n );\n }\n });\n }\n\n //if rotation === 0 - top right corner is rounded\n private basicCornerRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y}` + //go to top left position\n `v ${size}` + //draw line to left bottom corner\n `h ${size}` + //draw line to right bottom corner\n `v ${-size / 2}` + //draw line to right bottom corner + half of size top\n `a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}` // draw rounded corner\n );\n }\n });\n }\n\n //if rotation === 0 - top right corner is rounded\n private basicCornerExtraRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y}` + //go to top left position\n `v ${size}` + //draw line to left bottom corner\n `h ${size}` + //draw line to right bottom corner\n `a ${size} ${size}, 0, 0, 0, ${-size} ${-size}` // draw rounded top right corner\n );\n }\n });\n }\n\n //if rotation === 0 - left bottom and right top corners are rounded\n private basicCornersRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n `M ${x} ${y}` + //go to left top position\n `v ${size / 2}` + //draw line to left top corner + half of size bottom\n `a ${size / 2} ${size / 2}, 0, 0, 0, ${size / 2} ${size / 2}` + // draw rounded left bottom corner\n `h ${size / 2}` + //draw line to right bottom corner\n `v ${-size / 2}` + //draw line to right bottom corner + half of size top\n `a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}` // draw rounded right top corner\n );\n }\n });\n }\n\n private drawDot({ x, y, size }: DrawArgs): void {\n this.basicDot({ x, y, size, rotation: 0 });\n }\n\n private drawRandomDot({ x, y, size }: DrawArgs): void {\n const randomFactor = Math.random() * (1 - 0.75) + 0.75;\n this.basicDot({ x, y, size: size * randomFactor, rotation: 0 });\n }\n\n private drawSquare({ x, y, size }: DrawArgs): void {\n this.basicSquare({ x, y, size, rotation: 0 });\n }\n\n private drawSmallSquare({ x, y, size }: DrawArgs): void {\n const originalSize = size;\n\n size = originalSize * 0.7;\n x = x + originalSize * 0.15;\n y = y + originalSize * 0.15;\n\n this.basicSquare({ x, y, size, rotation: 0 });\n }\n\n private drawDiamond({ x, y, size }: DrawArgs): void {\n this.basicSquare({ x, y, size, rotation: Math.PI / 4 });\n }\n\n private drawRounded({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this.basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\n this.basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount === 2) {\n let rotation = 0;\n\n if (leftNeighbor && topNeighbor) {\n rotation = Math.PI / 2;\n } else if (topNeighbor && rightNeighbor) {\n rotation = Math.PI;\n } else if (rightNeighbor && bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this.basicCornerRounded({ x, y, size, rotation });\n return;\n }\n\n if (neighborsCount === 1) {\n let rotation = 0;\n\n if (topNeighbor) {\n rotation = Math.PI / 2;\n } else if (rightNeighbor) {\n rotation = Math.PI;\n } else if (bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this.basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n private drawVerticalLine({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (\n neighborsCount === 0 ||\n (leftNeighbor && !(topNeighbor || bottomNeighbor)) ||\n (rightNeighbor && !(topNeighbor || bottomNeighbor))\n ) {\n this.basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (topNeighbor && bottomNeighbor) {\n this.basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (topNeighbor && !bottomNeighbor) {\n const rotation = Math.PI / 2;\n this.basicSideRounded({ x, y, size, rotation });\n return;\n }\n\n if (bottomNeighbor && !topNeighbor) {\n const rotation = -Math.PI / 2;\n this.basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n private drawHorizontalLine({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (\n neighborsCount === 0 ||\n (topNeighbor && !(leftNeighbor || rightNeighbor)) ||\n (bottomNeighbor && !(leftNeighbor || rightNeighbor))\n ) {\n this.basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (leftNeighbor && rightNeighbor) {\n this.basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (leftNeighbor && !rightNeighbor) {\n const rotation = 0;\n this.basicSideRounded({ x, y, size, rotation });\n return;\n }\n\n if (rightNeighbor && !leftNeighbor) {\n const rotation = Math.PI;\n this.basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n private drawExtraRounded({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this.basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\n this.basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount === 2) {\n let rotation = 0;\n\n if (leftNeighbor && topNeighbor) {\n rotation = Math.PI / 2;\n } else if (topNeighbor && rightNeighbor) {\n rotation = Math.PI;\n } else if (rightNeighbor && bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this.basicCornerExtraRounded({ x, y, size, rotation });\n return;\n }\n\n if (neighborsCount === 1) {\n let rotation = 0;\n\n if (topNeighbor) {\n rotation = Math.PI / 2;\n } else if (rightNeighbor) {\n rotation = Math.PI;\n } else if (bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this.basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n private drawClassy({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this.basicCornersRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n if (!leftNeighbor && !topNeighbor) {\n this.basicCornerRounded({ x, y, size, rotation: -Math.PI / 2 });\n return;\n }\n\n if (!rightNeighbor && !bottomNeighbor) {\n this.basicCornerRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n this.basicSquare({ x, y, size, rotation: 0 });\n }\n\n private drawClassyRounded({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this.basicCornersRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n if (!leftNeighbor && !topNeighbor) {\n this.basicCornerExtraRounded({ x, y, size, rotation: -Math.PI / 2 });\n return;\n }\n\n if (!rightNeighbor && !bottomNeighbor) {\n this.basicCornerExtraRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n this.basicSquare({ x, y, size, rotation: 0 });\n }\n}\n","export const browserImageTools = {\n toDataURL(url: string | Buffer | Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n if (typeof url == \"string\") {\n const xhr = new XMLHttpRequest();\n xhr.onload = function () {\n const reader = new FileReader();\n reader.onloadend = function () {\n resolve(reader.result as string);\n };\n reader.readAsDataURL(xhr.response);\n };\n xhr.onerror = xhr.onabort = xhr.ontimeout = reject;\n xhr.open(\"GET\", url);\n xhr.responseType = \"blob\";\n xhr.send();\n } else {\n const reader = new FileReader();\n reader.onloadend = function () {\n resolve(reader.result as string);\n };\n reader.readAsDataURL(url as Blob);\n }\n });\n },\n getSize(src: string | Blob | Buffer, crossOrigin?: string): Promise<{ width: number; height: number }> {\n return new Promise((resolve, reject) => {\n const image = new Image();\n\n if (crossOrigin === \"string\") {\n image.crossOrigin = crossOrigin;\n }\n\n image.onload = (): void => {\n resolve({ width: image.width, height: image.height });\n };\n image.onerror = image.onabort = reject;\n\n if (typeof src == \"string\") image.src = src;\n else\n browserImageTools\n .toDataURL(src)\n .then((url) => (image.src = url))\n .catch(reject);\n });\n }\n};\n","import { QRCornerDot } from \"../figures/corner-dot.js\";\nimport { QRCornerSquare } from \"../figures/corner-square.js\";\nimport { QRDot } from \"../figures/dot.js\";\nimport { browserImageTools } from \"../tools/browser-image-tools.js\";\nimport { Gradient, GradientType } from \"../utils/gradient.js\";\nimport { calculateImageSize } from \"../utils/image.js\";\nimport { Options, ShapeType } from \"../utils/options.js\";\n\nconst squareMask = [\n [1, 1, 1, 1, 1, 1, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 1, 1, 1, 1, 1, 1]\n];\n\nconst dotMask = [\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 1, 1, 1, 0, 0],\n [0, 0, 1, 1, 1, 0, 0],\n [0, 0, 1, 1, 1, 0, 0],\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0, 0, 0]\n];\n\nconst alignmentCount = [\n [35, 49],\n [28, 36],\n [21, 25],\n [14, 16],\n [7, 9],\n [2, 4],\n [1, 1]\n];\n\nexport class QRSVG {\n private _element: SVGElement;\n\n get element() {\n return this._element;\n }\n\n private defs: SVGElement;\n\n private backgroundMask?: SVGElement;\n private backgroundMaskGroup?: SVGElement;\n\n private dotsMask?: SVGElement;\n private dotsMaskGroup?: SVGElement;\n\n private qr?: QRCode;\n private document: Document;\n private imageTools: typeof browserImageTools;\n\n constructor(\n private options: Pick<\n Options,\n | \"width\"\n | \"height\"\n | \"document\"\n | \"imageTools\"\n | \"image\"\n | \"imageOptions\"\n | \"dotsOptions\"\n | \"cornersDotOptions\"\n | \"cornersSquareOptions\"\n | \"backgroundOptions\"\n | \"shape\"\n > & { errorCorrectionPercent: number }\n ) {\n this.document = options.document;\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n this._element.setAttribute(\"width\", String(options.width));\n this._element.setAttribute(\"height\", String(options.height));\n this._element.setAttribute(\"viewBox\", `0 0 ${options.width} ${options.height}`);\n this.defs = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"defs\");\n this._element.appendChild(this.defs);\n this.imageTools = options.imageTools || browserImageTools;\n }\n\n get width(): number {\n return this.options.width;\n }\n\n get height(): number {\n return this.options.height;\n }\n\n async drawQR(qr: QRCode): Promise<void> {\n const count = qr.getModuleCount();\n const typeNumber = parseInt(((count - 17) / 4).toFixed(0), 10);\n const dotSize = this.options.dotsOptions.size;\n let drawImageSize = {\n hideXDots: 0,\n hideYDots: 0,\n width: 0,\n height: 0\n };\n\n this.qr = qr;\n\n if (this.options.image) {\n //We need it to get image size\n const size = await this.imageTools.getSize(this.options.image, this.options.imageOptions.crossOrigin);\n const { imageOptions, errorCorrectionPercent } = this.options;\n const coverLevel = imageOptions.imageSize * errorCorrectionPercent;\n const alignment = alignmentCount.find((v) => v[0] <= typeNumber) || [0, 0];\n const maxHiddenDots = Math.floor(coverLevel * (count * count - 3 * 8 * 8 - 2 * (count - 16) - alignment[1] * 25));\n\n drawImageSize = calculateImageSize({\n originalWidth: size.width,\n originalHeight: size.height,\n maxHiddenDots,\n maxHiddenAxisDots: count - 14,\n dotSize,\n margin: imageOptions.margin\n });\n }\n\n this.drawBackground();\n this.drawDots((i: number, j: number): boolean => {\n if (this.options.imageOptions.hideBackgroundDots) {\n if (\n i >= (count - drawImageSize.hideXDots) / 2 &&\n i < (count + drawImageSize.hideXDots) / 2 &&\n j >= (count - drawImageSize.hideYDots) / 2 &&\n j < (count + drawImageSize.hideYDots) / 2\n ) {\n return false;\n }\n }\n\n if (squareMask[i]?.[j] || squareMask[i - count + 7]?.[j] || squareMask[i]?.[j - count + 7]) {\n return false;\n }\n\n if (dotMask[i]?.[j] || dotMask[i - count + 7]?.[j] || dotMask[i]?.[j - count + 7]) {\n return false;\n }\n\n return true;\n });\n this.drawCorners();\n\n if (this.options.image && drawImageSize.width > 0 && drawImageSize.height > 0) {\n await this.drawImage({ width: drawImageSize.width, height: drawImageSize.height, count, dotSize });\n }\n }\n\n drawBackground(): void {\n const element = this._element;\n const options = this.options;\n\n if (element && options.backgroundOptions) {\n const gradientOptions = options.backgroundOptions.gradient;\n const color = options.backgroundOptions.color;\n\n this.createColor({\n options: gradientOptions,\n color: color,\n additionalRotation: 0,\n x: 0,\n y: 0,\n height: options.height,\n width: options.width,\n name: \"background-color\"\n });\n\n const size = Math.min(options.width, options.height);\n const element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n [this.backgroundMask, this.backgroundMaskGroup] = this.createMask(\"mask-background-color\");\n this.defs.appendChild(this.backgroundMask);\n\n element.setAttribute(\"x\", String((options.width - size) / 2));\n element.setAttribute(\"y\", String((options.height - size) / 2));\n element.setAttribute(\"width\", String(size));\n element.setAttribute(\"height\", String(size));\n element.setAttribute(\"rx\", String((size / 2) * (options.backgroundOptions.round || 0)));\n\n this.backgroundMaskGroup.appendChild(element);\n }\n }\n\n drawDots(filter?: (i: number, j: number) => boolean): void {\n if (!this.qr) {\n throw \"QR code is not defined\";\n }\n\n const options = this.options;\n const count = this.qr.getModuleCount();\n\n if (count > options.width || count > options.height) {\n throw \"The canvas is too small.\";\n }\n\n const minSize = Math.min(options.width, options.height);\n const dotSize = this.options.dotsOptions.size;\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\n const dot = new QRDot(options.dotsOptions.type, this.document);\n\n [this.dotsMask, this.dotsMaskGroup] = this.createMask(\"mask-dot-color\");\n this.defs.appendChild(this.dotsMask);\n\n for (let i = 0; i < count; i++) {\n for (let j = 0; j < count; j++) {\n if (filter && !filter(i, j)) {\n continue;\n }\n if (!this.qr?.isDark(j, i)) {\n continue;\n }\n\n dot.draw({\n x: xBeginning + i * dotSize,\n y: yBeginning + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean => {\n if (i + xOffset < 0 || j + yOffset < 0 || i + xOffset >= count || j + yOffset >= count) return false;\n if (filter && !filter(i + xOffset, j + yOffset)) return false;\n return !!this.qr && this.qr.isDark(j + yOffset, i + xOffset);\n }\n });\n\n if (dot.element && this.dotsMask) {\n this.dotsMaskGroup.appendChild(dot.element);\n }\n }\n }\n\n let colorX = xBeginning;\n let colorY = yBeginning;\n let colorCount = count;\n\n if (options.shape === ShapeType.circle) {\n const margin = (this.options.backgroundOptions && this.options.backgroundOptions.margin) || 0;\n const additionalDots = Math.floor((minSize / dotSize - count - 2 * margin) / 2);\n const fakeCount = count + additionalDots * 2;\n const xFakeBeginning = xBeginning - additionalDots * dotSize;\n const yFakeBeginning = yBeginning - additionalDots * dotSize;\n colorX = xFakeBeginning;\n colorY = yFakeBeginning;\n colorCount = count + additionalDots * 2;\n const fakeMatrix: number[][] = [];\n const center = Math.floor(fakeCount / 2);\n\n for (let i = 0; i < fakeCount; i++) {\n fakeMatrix[i] = [];\n for (let j = 0; j < fakeCount; j++) {\n if (\n i >= additionalDots - 1 &&\n i <= fakeCount - additionalDots &&\n j >= additionalDots - 1 &&\n j <= fakeCount - additionalDots\n ) {\n fakeMatrix[i][j] = 0;\n continue;\n }\n\n if (Math.sqrt((i - center) * (i - center) + (j - center) * (j - center)) > center) {\n fakeMatrix[i][j] = 0;\n continue;\n }\n\n //Get random dots from QR code to show it outside of QR code\n fakeMatrix[i][j] = this.qr.isDark(\n j - 2 * additionalDots < 0 ? j : j >= count ? j - 2 * additionalDots : j - additionalDots,\n i - 2 * additionalDots < 0 ? i : i >= count ? i - 2 * additionalDots : i - additionalDots\n )\n ? 1\n : 0;\n }\n }\n\n for (let i = 0; i < fakeCount; i++) {\n for (let j = 0; j < fakeCount; j++) {\n if (!fakeMatrix[i][j]) continue;\n\n dot.draw({\n x: xFakeBeginning + i * dotSize,\n y: yFakeBeginning + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean => {\n return !!fakeMatrix[i + xOffset]?.[j + yOffset];\n }\n });\n if (dot.element && this.dotsMask) {\n this.dotsMaskGroup.appendChild(dot.element);\n }\n }\n }\n }\n\n this.createColor({\n options: options.dotsOptions?.gradient,\n color: options.dotsOptions.color,\n additionalRotation: 0,\n x: colorX,\n y: colorY,\n height: colorCount * dotSize,\n width: colorCount * dotSize,\n name: \"dot-color\"\n });\n }\n\n drawCorners(): void {\n if (!this.qr) {\n throw \"QR code is not defined\";\n }\n\n const element = this._element;\n const options = this.options;\n\n if (!element) {\n throw \"Element code is not defined\";\n }\n\n const count = this.qr.getModuleCount();\n const dotSize = this.options.dotsOptions.size;\n const cornersSquareSize = dotSize * 7;\n const cornersDotSize = dotSize * 3;\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\n\n [\n [0, 0, 0],\n [1, 0, Math.PI / 2],\n [0, 1, -Math.PI / 2]\n ].forEach(([column, row, rotation]) => {\n const x = xBeginning + column * dotSize * (count - 7);\n const y = yBeginning + row * dotSize * (count - 7);\n let cornersSquareMask = this.dotsMask;\n let cornersSquareMaskGroup = this.dotsMaskGroup;\n let cornersDotMask = this.dotsMask;\n let cornersDotMaskGroup = this.dotsMaskGroup;\n\n if (options.cornersSquareOptions?.gradient || options.cornersSquareOptions?.color) {\n [cornersSquareMask, cornersSquareMaskGroup] = this.createMask(`mask-corners-square-color-${column}-${row}`);\n this.defs.appendChild(cornersSquareMask);\n cornersDotMask = cornersSquareMask;\n cornersDotMaskGroup = cornersSquareMaskGroup;\n\n this.createColor({\n options: options.cornersSquareOptions?.gradient,\n color: options.cornersSquareOptions?.color,\n additionalRotation: rotation,\n x,\n y,\n height: cornersSquareSize,\n width: cornersSquareSize,\n name: `corners-square-color-${column}-${row}`\n });\n }\n\n if (options.cornersSquareOptions?.type) {\n const cornersSquare = new QRCornerSquare(options.cornersSquareOptions.type, this.document);\n\n cornersSquare.draw({\n x,\n y,\n size: cornersSquareSize,\n rotation\n });\n\n if (cornersSquare.element && cornersSquareMaskGroup) {\n cornersSquareMaskGroup.appendChild(cornersSquare.element);\n }\n } else {\n const dot = new QRDot(options.dotsOptions.type, this.document);\n\n for (let i = 0; i < squareMask.length; i++) {\n for (let j = 0; j < squareMask[i].length; j++) {\n if (!squareMask[i]?.[j]) {\n continue;\n }\n\n dot.draw({\n x: x + i * dotSize,\n y: y + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean => !!squareMask[i + xOffset]?.[j + yOffset]\n });\n\n if (dot.element && cornersSquareMaskGroup) {\n cornersSquareMaskGroup.appendChild(dot.element);\n }\n }\n }\n }\n\n if (options.cornersDotOptions?.gradient || options.cornersDotOptions?.color) {\n [cornersDotMask, cornersDotMaskGroup] = this.createMask(`mask-corners-dot-color-${column}-${row}`);\n this.defs.appendChild(cornersDotMask);\n\n this.createColor({\n options: options.cornersDotOptions?.gradient,\n color: options.cornersDotOptions?.color,\n additionalRotation: rotation,\n x: x + dotSize * 2,\n y: y + dotSize * 2,\n height: cornersDotSize,\n width: cornersDotSize,\n name: `corners-dot-color-${column}-${row}`\n });\n }\n\n if (options.cornersDotOptions?.type) {\n const cornersDot = new QRCornerDot(options.cornersDotOptions.type, this.document);\n\n cornersDot.draw({\n x: x + dotSize * 2,\n y: y + dotSize * 2,\n size: cornersDotSize,\n rotation\n });\n\n if (cornersDot.element && cornersDotMaskGroup) {\n cornersDotMaskGroup.appendChild(cornersDot.element);\n }\n } else {\n const dot = new QRDot(options.dotsOptions.type, this.document);\n\n for (let i = 0; i < dotMask.length; i++) {\n for (let j = 0; j < dotMask[i].length; j++) {\n if (!dotMask[i]?.[j]) {\n continue;\n }\n\n dot.draw({\n x: x + i * dotSize,\n y: y + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean => !!dotMask[i + xOffset]?.[j + yOffset]\n });\n\n if (dot.element && cornersDotMaskGroup) {\n cornersDotMaskGroup.appendChild(dot.element);\n }\n }\n }\n }\n });\n }\n\n async drawImage({\n width,\n height,\n count,\n dotSize\n }: {\n width: number;\n height: number;\n count: number;\n dotSize: number;\n }): Promise<void> {\n const options = this.options;\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\n const margin = options.imageOptions.margin * dotSize;\n const dx = xBeginning + margin + (count * dotSize - width) / 2;\n const dy = yBeginning + margin + (count * dotSize - height) / 2;\n const dw = width - margin * 2;\n const dh = height - margin * 2;\n\n const imageUrl = await this.imageTools.toDataURL(options.image || \"\");\n let image: SVGElement = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"image\");\n image.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"xlink:href\", imageUrl || \"\");\n\n if (imageUrl.startsWith(\"data:image/svg+xml;\")) {\n let data = imageUrl.substring(19);\n const i = data.indexOf(\",\");\n const encoding = data.substring(0, i);\n data = data.substring(i + 1);\n\n switch (encoding) {\n case \"base64\":\n data = typeof atob == \"function\" ? atob(data) : Buffer.from(data, \"base64\").toString(\"utf8\");\n break;\n default:\n data = \"\";\n break;\n }\n\n if (data) {\n const container = new DOMParser().parseFromString(data, \"text/xml\");\n const rootEl = Array.from(container.getElementsByTagName(\"svg\"));\n if (rootEl.length) image = rootEl[0];\n }\n }\n\n image.setAttribute(\"x\", String(dx));\n image.setAttribute(\"y\", String(dy));\n image.setAttribute(\"width\", `${dw}px`);\n image.setAttribute(\"height\", `${dh}px`);\n\n this._element.appendChild(image);\n }\n\n private createColor({\n options,\n color,\n additionalRotation,\n x,\n y,\n height,\n width,\n name\n }: {\n options?: Gradient;\n color?: string;\n additionalRotation: number;\n x: number;\n y: number;\n height: number;\n width: number;\n name: string;\n }): void {\n const size = width > height ? width : height;\n const rect = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n rect.setAttribute(\"x\", String(x));\n rect.setAttribute(\"y\", String(y));\n rect.setAttribute(\"height\", String(height));\n rect.setAttribute(\"width\", String(width));\n rect.setAttribute(\"style\", `mask:url(#mask-${name})`);\n\n if (options) {\n let gradient: SVGElement;\n if (options.type === GradientType.radial) {\n gradient = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"radialGradient\");\n gradient.setAttribute(\"id\", name);\n gradient.setAttribute(\"gradientUnits\", \"userSpaceOnUse\");\n gradient.setAttribute(\"fx\", String(x + width / 2));\n gradient.setAttribute(\"fy\", String(y + height / 2));\n gradient.setAttribute(\"cx\", String(x + width / 2));\n gradient.setAttribute(\"cy\", String(y + height / 2));\n gradient.setAttribute(\"r\", String(size / 2));\n } else {\n const rotation = ((options.rotation || 0) + additionalRotation) % (2 * Math.PI);\n const positiveRotation = (rotation + 2 * Math.PI) % (2 * Math.PI);\n let x0 = x + width / 2;\n let y0 = y + height / 2;\n let x1 = x + width / 2;\n let y1 = y + height / 2;\n\n if (\n (positiveRotation >= 0 && positiveRotation <= 0.25 * Math.PI) ||\n (positiveRotation > 1.75 * Math.PI && positiveRotation <= 2 * Math.PI)\n ) {\n x0 = x0 - width / 2;\n y0 = y0 - (height / 2) * Math.tan(rotation);\n x1 = x1 + width / 2;\n y1 = y1 + (height / 2) * Math.tan(rotation);\n } else if (positiveRotation > 0.25 * Math.PI && positiveRotation <= 0.75 * Math.PI) {\n y0 = y0 - height / 2;\n x0 = x0 - width / 2 / Math.tan(rotation);\n y1 = y1 + height / 2;\n x1 = x1 + width / 2 / Math.tan(rotation);\n } else if (positiveRotation > 0.75 * Math.PI && positiveRotation <= 1.25 * Math.PI) {\n x0 = x0 + width / 2;\n y0 = y0 + (height / 2) * Math.tan(rotation);\n x1 = x1 - width / 2;\n y1 = y1 - (height / 2) * Math.tan(rotation);\n } else if (positiveRotation > 1.25 * Math.PI && positiveRotation <= 1.75 * Math.PI) {\n y0 = y0 + height / 2;\n x0 = x0 + width / 2 / Math.tan(rotation);\n y1 = y1 - height / 2;\n x1 = x1 - width / 2 / Math.tan(rotation);\n }\n\n gradient = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"linearGradient\");\n gradient.setAttribute(\"id\", name);\n gradient.setAttribute(\"gradientUnits\", \"userSpaceOnUse\");\n gradient.setAttribute(\"x1\", String(Math.round(x0)));\n gradient.setAttribute(\"y1\", String(Math.round(y0)));\n gradient.setAttribute(\"x2\", String(Math.round(x1)));\n gradient.setAttribute(\"y2\", String(Math.round(y1)));\n }\n\n options.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => {\n const stop = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"stop\");\n stop.setAttribute(\"offset\", `${100 * offset}%`);\n stop.setAttribute(\"stop-color\", color);\n gradient.appendChild(stop);\n });\n\n rect.setAttribute(\"fill\", `url(#${name})`);\n this.defs.appendChild(gradient);\n } else if (color) {\n rect.setAttribute(\"fill\", color);\n }\n\n this._element.appendChild(rect);\n }\n\n private createMask(id: string) {\n const options = this.options;\n\n const mask = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"mask\");\n mask.setAttribute(\"id\", id);\n mask.setAttribute(\"maskUnits\", \"userSpaceOnUse\");\n mask.setAttribute(\"x\", \"0\");\n mask.setAttribute(\"y\", \"0\");\n mask.setAttribute(\"width\", String(options.width));\n mask.setAttribute(\"height\", String(options.height));\n\n const group = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n group.setAttribute(\"fill\", \"#fff\");\n mask.appendChild(group);\n\n return [mask, group];\n }\n}\n","interface ImageSizeOptions {\n originalHeight: number;\n originalWidth: number;\n maxHiddenDots: number;\n maxHiddenAxisDots?: number;\n dotSize: number;\n margin: number;\n}\n\ninterface ImageSizeResult {\n height: number;\n width: number;\n hideYDots: number;\n hideXDots: number;\n}\n\nexport function calculateImageSize({\n originalHeight,\n originalWidth,\n maxHiddenDots,\n maxHiddenAxisDots,\n dotSize,\n margin\n}: ImageSizeOptions): ImageSizeResult {\n const hideDots = { x: 0, y: 0 };\n const imageSize = { x: 0, y: 0 };\n\n if (\n originalHeight <= 0 ||\n originalWidth <= 0 ||\n maxHiddenDots <= 0 ||\n dotSize <= 0 ||\n 4 * margin ** 2 > maxHiddenDots\n ) {\n return {\n height: 0,\n width: 0,\n hideYDots: 0,\n hideXDots: 0\n };\n }\n\n //If set, ensure maxHiddenAxisDots is odd and at least 1\n if (maxHiddenAxisDots && maxHiddenAxisDots % 2 == 0) maxHiddenAxisDots = Math.max(1, maxHiddenAxisDots - 1);\n\n //Determine the bigger and smaller image dimension\n const dimMax = Math.max(originalWidth, originalHeight);\n const dimMin = Math.min(originalWidth, originalHeight);\n\n //Find max image size along the bigger dimension\n let lower = 0,\n upper = (maxHiddenAxisDots || maxHiddenDots) - 2 * margin;\n do {\n const size = lower + (upper - lower) / 2;\n let dotsMax = Math.max(1, Math.ceil(size + 2 * margin));\n if (dotsMax % 2 == 0) dotsMax++;\n let dotsMin = Math.max(1, Math.ceil((size * dimMin) / dimMax + 2 * margin));\n if (dotsMin % 2 == 0) dotsMin++;\n\n if (dotsMax * dotsMin > maxHiddenDots) upper = size;\n else lower = size;\n } while (Math.abs(lower - upper) > 0.001);\n\n //Calculate how many dots the given size corresponds to\n const size = lower;\n let hideMax = Math.max(1, Math.ceil(size + 2 * margin));\n if (hideMax % 2 == 0) hideMax++;\n let hideMin = Math.max(1, Math.ceil((size * dimMin) / dimMax + 2 * margin));\n if (hideMin % 2 == 0) hideMin++;\n\n //Set hidden dots along bigger and smaller dimension to the right axis\n if (originalWidth > originalHeight) {\n hideDots.x = hideMax;\n hideDots.y = hideMin;\n } else {\n hideDots.x = hideMin;\n hideDots.y = hideMax;\n }\n\n //Fit image to the hidden dots\n const maxW = (hideDots.x - 2 * margin) * dotSize;\n const maxH = (hideDots.y - 2 * margin) * dotSize;\n imageSize.x = maxW;\n imageSize.y = (maxW * originalHeight) / originalWidth;\n if (imageSize.y > maxH) {\n imageSize.y = maxH;\n imageSize.x = (maxH * originalWidth) / originalHeight;\n }\n\n return {\n height: Math.round(imageSize.y + 2 * margin * dotSize),\n width: Math.round(imageSize.x + 2 * margin * dotSize),\n hideYDots: hideDots.y,\n hideXDots: hideDots.x\n };\n}\n","import qrcode from \"qrcode-generator\";\nimport { RecursivePartial } from \"../types/helper.js\";\nimport { Mode } from \"../types/qrcode.js\";\nimport { mergeDeep } from \"../utils/merge.js\";\nimport { Options, ShapeType, defaultOptions, sanitizeOptions } from \"../utils/options.js\";\nimport { ErrorCorrectionPercents, getMode } from \"../utils/qrcode.js\";\nimport { QRSVG } from \"./qr-svg.js\";\n\nexport type ExtensionFunction = (svg: SVGElement, options: RecursivePartial<Options>) => void;\n\nexport class QRCodeStyling {\n private options: Options;\n private container?: HTMLElement;\n private qr?: QRCode;\n private extension?: ExtensionFunction;\n private svgDrawingPromise?: Promise<void>;\n private qrSVG?: QRSVG;\n\n get size() {\n if (this.qrSVG)\n return {\n width: this.qrSVG.width,\n height: this.qrSVG.height\n };\n return undefined;\n }\n\n constructor(options?: RecursivePartial<Options>) {\n this.options = options ? sanitizeOptions(mergeDeep(defaultOptions, options) as Options) : defaultOptions;\n this.update();\n }\n\n update(\n /** The same options as for initialization */\n options?: RecursivePartial<Options>\n ): void {\n if (this.container) this.container.innerHTML = \"\";\n\n this.options = options ? sanitizeOptions(mergeDeep(this.options, options) as Options) : this.options;\n\n if (!this.options.data) {\n return;\n }\n\n if (this.options.stringToBytesFuncs) {\n Object.assign(qrcode.stringToBytesFuncs, this.options.stringToBytesFuncs);\n delete this.options.stringToBytesFuncs;\n }\n\n this.qr = qrcode(this.options.qrOptions.typeNumber, this.options.qrOptions.errorCorrectionLevel);\n let mode = this.options.qrOptions.mode || getMode(this.options.data);\n if (mode == Mode.unicode) {\n qrcode.stringToBytes = qrcode.stringToBytesFuncs[\"UTF-8\"];\n mode = Mode.byte;\n } else {\n qrcode.stringToBytes = qrcode.stringToBytesFuncs[\"default\"];\n }\n this.qr.addData(this.options.data, mode);\n this.qr.make();\n\n this.setupSvg();\n\n this.append(this.container);\n }\n\n append(\n /** This container will be used for appending of the QR code */\n container?: HTMLElement\n ): void {\n if (!container) {\n return;\n }\n\n if (this.qrSVG?.element) {\n container.appendChild(this.qrSVG.element);\n }\n\n this.container = container;\n }\n\n /**\n *\n * @example\n *\n * ```js\n * const extension = (svg, options) => {\n * const { width, height } = options;\n * const size = Math.min(width, height);\n * const border = options.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n * const borderAttributes = {\n * fill: \"none\",\n * x: (width - size + 40) / 2,\n * y: (height - size + 40) / 2,\n * width: size - 40,\n * height: size - 40,\n * stroke: \"black\",\n * \"stroke-width\": 40,\n * rx: 100\n * };\n * Object.keys(borderAttributes).forEach((attribute) => {\n * border.setAttribute(attribute, borderAttributes[attribute]);\n * });\n * svg.appendChild(border);\n * };\n * ```\n */\n applyExtension(\n /** Extension is a function that takes svg and previously applied options and modifies an svg */\n extension: ExtensionFunction\n ): void {\n if (!extension) {\n throw \"Extension function should be defined.\";\n }\n\n this.extension = extension;\n this.update();\n }\n\n deleteExtension(): void {\n this.extension = undefined;\n this.update();\n }\n\n async serialize(): Promise<string | undefined> {\n if (!this.qr) throw \"QR code is empty\";\n\n if (!this.qrSVG?.element || !this.svgDrawingPromise) {\n this.setupSvg();\n }\n await this.svgDrawingPromise;\n\n if (!this.qrSVG?.element) {\n return;\n }\n\n const serializer = new XMLSerializer();\n let source = serializer.serializeToString(this.qrSVG.element);\n\n source = '<?xml version=\"1.0\" standalone=\"no\"?>\\r\\n' + source;\n return source;\n }\n\n private setupSvg(): void {\n if (!this.qr) {\n return;\n }\n const count = Math.ceil((this.options.shape == ShapeType.circle ? Math.sqrt(2) : 1) * this.qr.getModuleCount());\n const margin = (this.options.backgroundOptions && this.options.backgroundOptions.margin) || 0;\n const size = Math.ceil(this.options.dotsOptions.size * (count + 2 * margin));\n this.qrSVG = new QRSVG({\n ...this.options,\n width: size,\n height: size,\n errorCorrectionPercent: ErrorCorrectionPercents[this.options.qrOptions.errorCorrectionLevel]\n });\n\n this.svgDrawingPromise = this.qrSVG.drawQR(this.qr).then(() => {\n if (!this.qrSVG?.element) return;\n this.extension?.(this.qrSVG.element, this.options);\n });\n }\n}\n","export interface CanvasOptions {\n width: number;\n height: number;\n margin: number;\n}\n\nexport const defaultCanvasOptions: CanvasOptions = {\n width: 300,\n height: 300,\n margin: 0\n};\n\nexport function sanitizeCanvasOptions(options: CanvasOptions): CanvasOptions {\n const newOptions = { ...options };\n\n newOptions.width = Number(newOptions.width);\n newOptions.height = Number(newOptions.height);\n newOptions.margin = Number(newOptions.margin);\n\n if (newOptions.margin > Math.min(newOptions.width, newOptions.height)) {\n newOptions.margin = Math.min(newOptions.width, newOptions.height);\n }\n\n return newOptions;\n}\n","import { QRCodeStyling } from \"../core/qr-code-styling.js\";\nimport { RecursivePartial } from \"../types/helper.js\";\nimport { CanvasOptions, defaultCanvasOptions, sanitizeCanvasOptions } from \"../utils/canvas-options.js\";\nimport { mergeDeep } from \"../utils/merge.js\";\n\nexport enum FileExtension {\n svg = \"svg\",\n png = \"png\",\n jpeg = \"jpeg\",\n webp = \"webp\"\n}\n\nexport function drawToCanvas(\n qrCode: QRCodeStyling,\n options?: RecursivePartial<CanvasOptions>\n): { canvas: HTMLCanvasElement; canvasDrawingPromise: Promise<void> | undefined } | undefined {\n const { width, height, margin } = options\n ? sanitizeCanvasOptions(mergeDeep(defaultCanvasOptions, options) as CanvasOptions)\n : defaultCanvasOptions;\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = width;\n canvas.height = height;\n\n const size = Math.min(width, height) - 2 * margin;\n\n const canvasDrawingPromise = qrCode.serialize().then((xml) => {\n if (!xml) return;\n const svg64 = btoa(xml);\n const image64 = \"data:image/svg+xml;base64,\" + svg64;\n const image = new Image();\n\n return new Promise<void>((resolve, reject) => {\n image.onload = (): void => {\n // Ensure pixel-perfect rendering of SVG to avoid artefact, then downscale to requested size\n const aaFactor = Math.ceil((2 * size) / Math.min(image.width, image.height));\n let aaCanvas: HTMLCanvasElement | OffscreenCanvas;\n try {\n aaCanvas = new OffscreenCanvas(image.width * aaFactor, image.height * aaFactor);\n } catch (_) {\n // Fallback to regular canvas element\n aaCanvas = document.createElement(\"canvas\");\n aaCanvas.width = image.width * aaFactor;\n aaCanvas.height = image.height * aaFactor;\n }\n aaCanvas.getContext(\"2d\")?.drawImage(image, 0, 0, aaCanvas.width, aaCanvas.height);\n\n canvas?.getContext(\"2d\")?.drawImage(aaCanvas, (width - size) / 2, (height - size) / 2, size, size);\n resolve();\n };\n image.onerror = image.onabort = reject;\n\n image.src = image64;\n });\n });\n\n return { canvas, canvasDrawingPromise };\n}\n\nexport async function download(\n qrCode: QRCodeStyling,\n downloadOptions: `${FileExtension}` | { name?: string; extension: `${FileExtension}` },\n options?: RecursivePartial<CanvasOptions>\n): Promise<void> {\n let extension: `${FileExtension}` = FileExtension.png;\n let name = \"qr\";\n\n //TODO remove deprecated code in the v2\n if (typeof downloadOptions === \"string\") {\n extension = downloadOptions;\n console.warn(\n \"Extension is deprecated as argument for 'download' method, please pass object { name: '...', extension: '...' } as argument\"\n );\n } else if (typeof downloadOptions === \"object\" && downloadOptions !== null) {\n if (downloadOptions.name) {\n name = downloadOptions.name;\n }\n if (downloadOptions.extension) {\n extension = downloadOptions.extension;\n }\n }\n\n if (extension.toLowerCase() === \"svg\") {\n let source = await qrCode.serialize();\n source = '<?xml version=\"1.0\" standalone=\"no\"?>\\r\\n' + source;\n const url = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(source);\n downloadURI(url, `${name}.svg`);\n } else {\n const res = drawToCanvas(qrCode, options);\n if (!res) return;\n const { canvas, canvasDrawingPromise } = res;\n await canvasDrawingPromise;\n const url = canvas.toDataURL(`image/${extension}`);\n downloadURI(url, `${name}.${extension}`);\n }\n}\n\nexport function downloadURI(uri: string, name: string): void {\n const link = document.createElement(\"a\");\n link.download = name;\n link.href = uri;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n}\n","export { type ExtensionFunction, QRCodeStyling } from \"./core/qr-code-styling.js\";\nexport { FileExtension } from \"./tools/browser-utils.js\";\nexport { type RecursivePartial } from \"./types/helper.js\";\nexport { ErrorCorrectionLevel, Mode, TypeNumber } from \"./types/qrcode.js\";\nexport { type CanvasOptions } from \"./utils/canvas-options.js\";\nexport { type Gradient, GradientType } from \"./utils/gradient.js\";\nexport { CornerDotType, CornerSquareType, DotType, type Options, ShapeType } from \"./utils/options.js\";\nexport { ErrorCorrectionPercents } from \"./utils/qrcode.js\";\nimport * as _browserUtils from \"./tools/browser-utils.js\";\n\nexport const browserUtils: typeof _browserUtils | undefined = _browserUtils;\n"],"names":["qrcode","typeNumber","errorCorrectionLevel","_typeNumber","_errorCorrectionLevel","QRErrorCorrectionLevel","_modules","_moduleCount","_dataCache","_dataList","_this","makeImpl","test","maskPattern","moduleCount","modules","Array","row","col","setupPositionProbePattern","setupPositionAdjustPattern","setupTimingPattern","setupTypeInfo","setupTypeNumber","createData","mapData","r","c","pos","QRUtil","getPatternPosition","i","length","j","bits","getBCHTypeNumber","mod","Math","floor","data","getBCHTypeInfo","inc","bitIndex","byteIndex","maskFunc","getMaskFunction","dark","dataList","rsBlocks","QRRSBlock","getRSBlocks","buffer","qrBitBuffer","put","getMode","getLength","getLengthInBits","write","totalDataCount","dataCount","putBit","offset","maxDcCount","maxEcCount","dcdata","ecdata","dcCount","ecCount","totalCount","max","getBuffer","rsPoly","getErrorCorrectPolynomial","modPoly","qrPolynomial","modIndex","getAt","totalCodeCount","index","createBytes","addData","mode","newData","qrNumber","qrAlphaNum","qr8BitByte","qrKanji","push","isDark","getModuleCount","make","minLostPoint","pattern","lostPoint","getLostPoint","getBestMaskPattern","createTableTag","cellSize","margin","qrHtml","createSvgTag","alt","title","opts","arguments","text","id","mr","rect","size","qrSvg","scalable","escapeXml","join","trim","createDataURL","min","x","y","createImgTag","img","s","escaped","charAt","createASCII","r1","r2","p","blocks","blocksLastLineNoMargin","ascii","substring","_createHalfASCII","white","black","line","renderTo2dContext","context","fillStyle","fillRect","stringToBytes","stringToBytesFuncs","default","bytes","charCodeAt","createStringToBytes","unicodeData","numChars","unicodeMap","bin","base64DecodeInputStream","read","b","count","b0","b1","v","String","fromCharCode","unknownChar","console","log","JSON","stringify","PATTERN_POSITION_TABLE","G15","G18","getBCHDigit","QRMode","L","M","Q","H","QRMaskPattern","digit","d","errorCorrectLength","a","multiply","QRMath","gexp","type","sameCount","darkCount","abs","EXP_TABLE","LOG_TABLE","n","num","shift","_num","e","glog","ratio","RS_BLOCK_TABLE","qrRSBlock","rsBlock","getRsBlockTable","list","_buffer","_length","bufIndex","bit","_mode","_data","strToNum","chatToNum","getCode","_bytes","code","byteArrayOutputStream","writeByte","off","len","str","_str","_pos","_buflen","match","decode","width","height","getPixel","gif","_width","_height","pixel","out","writeString","writeShort","raster","getLZWRaster","writeBytes","lzwMinCodeSize","clearCode","endCode","bitLength","table","lzwTable","add","_out","_bitLength","_bitBuffer","byteOut","bitOut","dataIndex","contains","indexOf","flush","toByteArray","_map","_size","key","gifImage","setPixel","base64","_base64","writeEncoded","encode","padlen","toString","base64EncodeOutputStream","utf8","charcode","toUTF8Array","module","exports","TypeNumber","fill","map","_","ErrorCorrectionLevel","Mode","isObject","obj","isArray","mergeDeep","target","sources","source","undefined","Object","keys","forEach","targetValue","sourceValue","assign","GradientType","DotType","CornerDotType","CornerSquareType","ShapeType","sanitizeGradient","gradient","newGradient","colorStops","rotation","Number","colorStop","defaultOptions","document","shape","square","qrOptions","imageOptions","hideBackgroundDots","imageSize","crossOrigin","dotsOptions","color","sanitizeOptions","options","newOptions","Boolean","round","cornersSquareOptions","cornersDotOptions","backgroundOptions","ErrorCorrectionPercents","QRCornerDot","element","this","_element","constructor","draw","args","drawFunction","drawSquare","heart","drawHeart","extraRounded","drawRounded","classy","drawClassy","inpoint","drawInpoint","outpoint","drawOutpoint","dot","drawDot","call","rotateFigure","cx","cy","setAttribute","PI","basicDot","createElementNS","basicSquare","basicHeart","move","toUpperCase","toFixed","basicRounded","basicClassy","dotSize","basicInpoint","QRCornerSquare","drawExtraRounded","basicExtraRounded","QRDot","randomDot","drawRandomDot","classyRounded","drawClassyRounded","rounded","verticalLine","drawVerticalLine","horizontalLine","drawHorizontalLine","diamond","drawDiamond","smallSquare","drawSmallSquare","basicSideRounded","basicCornerRounded","basicCornerExtraRounded","basicCornersRounded","randomFactor","random","originalSize","getNeighbor","leftNeighbor","rightNeighbor","topNeighbor","bottomNeighbor","neighborsCount","browserImageTools","toDataURL","url","Promise","resolve","reject","xhr","XMLHttpRequest","onload","reader","FileReader","onloadend","result","readAsDataURL","response","onerror","onabort","ontimeout","open","responseType","send","getSize","src","image","Image","then","catch","squareMask","dotMask","alignmentCount","QRSVG","defs","appendChild","imageTools","drawQR","qr","parseInt","drawImageSize","hideXDots","hideYDots","errorCorrectionPercent","coverLevel","alignment","find","maxHiddenDots","originalHeight","originalWidth","maxHiddenAxisDots","hideDots","dimMax","dimMin","lower","upper","dotsMax","ceil","dotsMin","hideMax","hideMin","maxW","maxH","calculateImageSize","drawBackground","drawDots","drawCorners","drawImage","gradientOptions","createColor","additionalRotation","name","backgroundMask","backgroundMaskGroup","createMask","filter","minSize","xBeginning","yBeginning","dotsMask","dotsMaskGroup","xOffset","yOffset","colorX","colorY","colorCount","circle","additionalDots","fakeCount","xFakeBeginning","yFakeBeginning","fakeMatrix","center","sqrt","cornersSquareSize","cornersDotSize","column","cornersSquareMask","cornersSquareMaskGroup","cornersDotMask","cornersDotMaskGroup","cornersSquare","cornersDot","dx","dy","dw","dh","imageUrl","setAttributeNS","startsWith","encoding","atob","Buffer","from","container","DOMParser","parseFromString","rootEl","getElementsByTagName","radial","positiveRotation","x0","y0","x1","y1","tan","stop","mask","group","QRCodeStyling","qrSVG","update","innerHTML","numeric","alphanumeric","unicode","byte","setupSvg","append","applyExtension","extension","deleteExtension","serialize","svgDrawingPromise","XMLSerializer","serializeToString","defaultCanvasOptions","FileExtension","drawToCanvas","qrCode","sanitizeCanvasOptions","canvas","createElement","canvasDrawingPromise","xml","image64","btoa","aaFactor","aaCanvas","OffscreenCanvas","getContext","downloadURI","uri","link","download","href","body","click","removeChild","browserUtils","async","downloadOptions","png","warn","toLowerCase","encodeURIComponent","res"],"mappings":"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CrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IAGpB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,KACvB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IAGpB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAA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CC,EAAEA,GAAM+M,EAEvBJ,KAAKoB,aAAa,IACbhB,EACHD,KAAM,KACJH,KAAKC,SAAWD,KAAKrB,SAAS+C,gBAAgB,6BAA8B,QAC5E1B,KAAKC,SAASsB,aAAa,IAAK3L,OAAOxC,IACvC4M,KAAKC,SAASsB,aAAa,IAAK3L,OAAOvC,IACvC2M,KAAKC,SAASsB,aAAa,QAAS3L,OAAOhD,IAC3CoN,KAAKC,SAASsB,aAAa,SAAU3L,OAAOhD,GAAM,GAGvD,CAEO,UAAAgP,CAAWxB,GACjB,MAAMxN,KAAEA,EAAIQ,EAAEA,EAACC,EAAEA,GAAM+M,EAEvBJ,KAAKC,SAAWD,KAAKrB,SAAS+C,gBAAgB,6BAA8B,QA6G5E,IAAIG,GAAO,EACP/T,EAAI,EACRkS,KAAKC,SAASsB,aACZ,IA/GW,CACX,IACA,KACA,SACA,IACA,EACA,UACC,SACD,UACC,SACD,QACA,IACA,OACA,SACA,QACA,SACA,IACA,KACA,SACA,SACA,QACA,SACA,QACA,IACA,SACA,SACA,QACA,SACA,IACA,GACA,SACA,KACC,SACA,OACD,IACA,SACA,SACA,SACA,QACA,SACA,QACA,IACA,KACA,SACA,QACA,SACA,IACA,SACA,SACA,SACA,SACA,IACA,KACA,SACA,KACA,SACA,IACA,KACA,SACA,SACA,QACA,SACA,KACA,IACA,SACA,SACA,OACA,SACA,IACA,SACA,EACA,SACA,SACA,SACA,QACA,IACA,SACA,SACA,GACA,SACA,IACA,UACC,SACD,UACC,SACD,UACC,QACD,IACA,UACC,SACD,UACC,QACD,UACC,QACD,IACA,SACA,EACA,SACA,SACA,SACA,SACA,IACA,KACA,SACA,KACA,SACA,KAOG3E,KAAKjH,GACY,iBAALA,GACT7H,EAAI,EACJ+T,EAAOlM,EAAEmM,eAAiBnM,EACnBA,IAET7H,IACA6H,GAAQ/C,EACJiP,IACFlM,GAAK7H,EAAI,GAAK,EAAIsF,EAAIC,GAEjBsC,EAAEoM,QAAQ,MAElB/O,KAAK,KAEX,CAEO,YAAAgP,CAAa5B,GACnB,MAAMxN,KAAEA,EAAIQ,EA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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"qr-code-styling.js","sources":["../node_modules/qrcode-generator/qrcode.js","../src/types/qrcode.ts","../src/utils/merge.ts","../src/utils/gradient.ts","../src/utils/options.ts","../src/utils/qrcode.ts","../src/utils/svg.ts","../src/figures/corner-dot.ts","../src/figures/corner-square.ts","../src/figures/dot.ts","../src/tools/browser-image-tools.ts","../src/core/qr-svg.ts","../src/utils/image.ts","../src/core/qr-code-styling.ts","../src/utils/canvas-options.ts","../src/tools/browser-utils.ts","../src/index.ts"],"sourcesContent":["//---------------------------------------------------------------------\n//\n// QR Code Generator for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n// The word 'QR Code' is registered trademark of\n// DENSO WAVE INCORPORATED\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n\nvar qrcode = function() {\n\n //---------------------------------------------------------------------\n // qrcode\n //---------------------------------------------------------------------\n\n /**\n * qrcode\n * @param typeNumber 1 to 40\n * @param errorCorrectionLevel 'L','M','Q','H'\n */\n var qrcode = function(typeNumber, errorCorrectionLevel) {\n\n var PAD0 = 0xEC;\n var PAD1 = 0x11;\n\n var _typeNumber = typeNumber;\n var _errorCorrectionLevel = QRErrorCorrectionLevel[errorCorrectionLevel];\n var _modules = null;\n var _moduleCount = 0;\n var _dataCache = null;\n var _dataList = [];\n\n var _this = {};\n\n var makeImpl = function(test, maskPattern) {\n\n _moduleCount = _typeNumber * 4 + 17;\n _modules = function(moduleCount) {\n var modules = new Array(moduleCount);\n for (var row = 0; row < moduleCount; row += 1) {\n modules[row] = new Array(moduleCount);\n for (var col = 0; col < moduleCount; col += 1) {\n modules[row][col] = null;\n }\n }\n return modules;\n }(_moduleCount);\n\n setupPositionProbePattern(0, 0);\n setupPositionProbePattern(_moduleCount - 7, 0);\n setupPositionProbePattern(0, _moduleCount - 7);\n setupPositionAdjustPattern();\n setupTimingPattern();\n setupTypeInfo(test, maskPattern);\n\n if (_typeNumber >= 7) {\n setupTypeNumber(test);\n }\n\n if (_dataCache == null) {\n _dataCache = createData(_typeNumber, _errorCorrectionLevel, _dataList);\n }\n\n mapData(_dataCache, maskPattern);\n };\n\n var setupPositionProbePattern = function(row, col) {\n\n for (var r = -1; r <= 7; r += 1) {\n\n if (row + r <= -1 || _moduleCount <= row + r) continue;\n\n for (var c = -1; c <= 7; c += 1) {\n\n if (col + c <= -1 || _moduleCount <= col + c) 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 _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n };\n\n var getBestMaskPattern = function() {\n\n var minLostPoint = 0;\n var pattern = 0;\n\n for (var i = 0; i < 8; i += 1) {\n\n makeImpl(true, i);\n\n var lostPoint = QRUtil.getLostPoint(_this);\n\n if (i == 0 || minLostPoint > lostPoint) {\n minLostPoint = lostPoint;\n pattern = i;\n }\n }\n\n return pattern;\n };\n\n var setupTimingPattern = function() {\n\n for (var r = 8; r < _moduleCount - 8; r += 1) {\n if (_modules[r][6] != null) {\n continue;\n }\n _modules[r][6] = (r % 2 == 0);\n }\n\n for (var c = 8; c < _moduleCount - 8; c += 1) {\n if (_modules[6][c] != null) {\n continue;\n }\n _modules[6][c] = (c % 2 == 0);\n }\n };\n\n var setupPositionAdjustPattern = function() {\n\n var pos = QRUtil.getPatternPosition(_typeNumber);\n\n for (var i = 0; i < pos.length; i += 1) {\n\n for (var j = 0; j < pos.length; j += 1) {\n\n var row = pos[i];\n var col = pos[j];\n\n if (_modules[row][col] != null) {\n continue;\n }\n\n for (var r = -2; r <= 2; r += 1) {\n\n for (var c = -2; c <= 2; c += 1) {\n\n if (r == -2 || r == 2 || c == -2 || c == 2\n || (r == 0 && c == 0) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n }\n }\n };\n\n var setupTypeNumber = function(test) {\n\n var bits = QRUtil.getBCHTypeNumber(_typeNumber);\n\n for (var i = 0; i < 18; i += 1) {\n var mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod;\n }\n\n for (var i = 0; i < 18; i += 1) {\n var mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod;\n }\n };\n\n var setupTypeInfo = function(test, maskPattern) {\n\n var data = (_errorCorrectionLevel << 3) | maskPattern;\n var bits = QRUtil.getBCHTypeInfo(data);\n\n // vertical\n for (var i = 0; i < 15; i += 1) {\n\n var mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 6) {\n _modules[i][8] = mod;\n } else if (i < 8) {\n _modules[i + 1][8] = mod;\n } else {\n _modules[_moduleCount - 15 + i][8] = mod;\n }\n }\n\n // horizontal\n for (var i = 0; i < 15; i += 1) {\n\n var mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 8) {\n _modules[8][_moduleCount - i - 1] = mod;\n } else if (i < 9) {\n _modules[8][15 - i - 1 + 1] = mod;\n } else {\n _modules[8][15 - i - 1] = mod;\n }\n }\n\n // fixed module\n _modules[_moduleCount - 8][8] = (!test);\n };\n\n var mapData = function(data, maskPattern) {\n\n var inc = -1;\n var row = _moduleCount - 1;\n var bitIndex = 7;\n var byteIndex = 0;\n var maskFunc = QRUtil.getMaskFunction(maskPattern);\n\n for (var col = _moduleCount - 1; col > 0; col -= 2) {\n\n if (col == 6) col -= 1;\n\n while (true) {\n\n for (var c = 0; c < 2; c += 1) {\n\n if (_modules[row][col - c] == null) {\n\n var dark = false;\n\n if (byteIndex < data.length) {\n dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);\n }\n\n var mask = maskFunc(row, col - c);\n\n if (mask) {\n dark = !dark;\n }\n\n _modules[row][col - c] = dark;\n bitIndex -= 1;\n\n if (bitIndex == -1) {\n byteIndex += 1;\n bitIndex = 7;\n }\n }\n }\n\n row += inc;\n\n if (row < 0 || _moduleCount <= row) {\n row -= inc;\n inc = -inc;\n break;\n }\n }\n }\n };\n\n var createBytes = function(buffer, rsBlocks) {\n\n var offset = 0;\n\n var maxDcCount = 0;\n var maxEcCount = 0;\n\n var dcdata = new Array(rsBlocks.length);\n var ecdata = new Array(rsBlocks.length);\n\n for (var r = 0; r < rsBlocks.length; r += 1) {\n\n var dcCount = rsBlocks[r].dataCount;\n var ecCount = rsBlocks[r].totalCount - dcCount;\n\n maxDcCount = Math.max(maxDcCount, dcCount);\n maxEcCount = Math.max(maxEcCount, ecCount);\n\n dcdata[r] = new Array(dcCount);\n\n for (var i = 0; i < dcdata[r].length; i += 1) {\n dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];\n }\n offset += dcCount;\n\n var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n var rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);\n\n var modPoly = rawPoly.mod(rsPoly);\n ecdata[r] = new Array(rsPoly.getLength() - 1);\n for (var i = 0; i < ecdata[r].length; i += 1) {\n var modIndex = i + modPoly.getLength() - ecdata[r].length;\n ecdata[r][i] = (modIndex >= 0)? modPoly.getAt(modIndex) : 0;\n }\n }\n\n var totalCodeCount = 0;\n for (var i = 0; i < rsBlocks.length; i += 1) {\n totalCodeCount += rsBlocks[i].totalCount;\n }\n\n var data = new Array(totalCodeCount);\n var index = 0;\n\n for (var i = 0; i < maxDcCount; i += 1) {\n for (var 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\n for (var i = 0; i < maxEcCount; i += 1) {\n for (var 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\n return data;\n };\n\n var createData = function(typeNumber, errorCorrectionLevel, dataList) {\n\n var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectionLevel);\n\n var buffer = qrBitBuffer();\n\n for (var i = 0; i < dataList.length; i += 1) {\n var data = dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n // calc num max data.\n var totalDataCount = 0;\n for (var i = 0; i < rsBlocks.length; i += 1) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() > totalDataCount * 8) {\n throw 'code length overflow. ('\n + buffer.getLengthInBits()\n + '>'\n + totalDataCount * 8\n + ')';\n }\n\n // end code\n if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n buffer.put(0, 4);\n }\n\n // padding\n while (buffer.getLengthInBits() % 8 != 0) {\n buffer.putBit(false);\n }\n\n // padding\n while (true) {\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD0, 8);\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD1, 8);\n }\n\n return createBytes(buffer, rsBlocks);\n };\n\n _this.addData = function(data, mode) {\n\n mode = mode || 'Byte';\n\n var newData = null;\n\n switch(mode) {\n case 'Numeric' :\n newData = qrNumber(data);\n break;\n case 'Alphanumeric' :\n newData = qrAlphaNum(data);\n break;\n case 'Byte' :\n newData = qr8BitByte(data);\n break;\n case 'Kanji' :\n newData = qrKanji(data);\n break;\n default :\n throw 'mode:' + mode;\n }\n\n _dataList.push(newData);\n _dataCache = null;\n };\n\n _this.isDark = function(row, col) {\n if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) {\n throw row + ',' + col;\n }\n return _modules[row][col];\n };\n\n _this.getModuleCount = function() {\n return _moduleCount;\n };\n\n _this.make = function() {\n if (_typeNumber < 1) {\n var typeNumber = 1;\n\n for (; typeNumber < 40; typeNumber++) {\n var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, _errorCorrectionLevel);\n var buffer = qrBitBuffer();\n\n for (var i = 0; i < _dataList.length; i++) {\n var data = _dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n var totalDataCount = 0;\n for (var i = 0; i < rsBlocks.length; i++) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() <= totalDataCount * 8) {\n break;\n }\n }\n\n _typeNumber = typeNumber;\n }\n\n makeImpl(false, getBestMaskPattern() );\n };\n\n _this.createTableTag = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var qrHtml = '';\n\n qrHtml += '<table style=\"';\n qrHtml += ' border-width: 0px; border-style: none;';\n qrHtml += ' border-collapse: collapse;';\n qrHtml += ' padding: 0px; margin: ' + margin + 'px;';\n qrHtml += '\">';\n qrHtml += '<tbody>';\n\n for (var r = 0; r < _this.getModuleCount(); r += 1) {\n\n qrHtml += '<tr>';\n\n for (var c = 0; c < _this.getModuleCount(); c += 1) {\n qrHtml += '<td style=\"';\n qrHtml += ' border-width: 0px; border-style: none;';\n qrHtml += ' border-collapse: collapse;';\n qrHtml += ' padding: 0px; margin: 0px;';\n qrHtml += ' width: ' + cellSize + 'px;';\n qrHtml += ' height: ' + cellSize + 'px;';\n qrHtml += ' background-color: ';\n qrHtml += _this.isDark(r, c)? '#000000' : '#ffffff';\n qrHtml += ';';\n qrHtml += '\"/>';\n }\n\n qrHtml += '</tr>';\n }\n\n qrHtml += '</tbody>';\n qrHtml += '</table>';\n\n return qrHtml;\n };\n\n _this.createSvgTag = function(cellSize, margin, alt, title) {\n\n var opts = {};\n if (typeof arguments[0] == 'object') {\n // Called by options.\n opts = arguments[0];\n // overwrite cellSize and margin.\n cellSize = opts.cellSize;\n margin = opts.margin;\n alt = opts.alt;\n title = opts.title;\n }\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n // Compose alt property surrogate\n alt = (typeof alt === 'string') ? {text: alt} : alt || {};\n alt.text = alt.text || null;\n alt.id = (alt.text) ? alt.id || 'qrcode-description' : null;\n\n // Compose title property surrogate\n title = (typeof title === 'string') ? {text: title} : title || {};\n title.text = title.text || null;\n title.id = (title.text) ? title.id || 'qrcode-title' : null;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var c, mc, r, mr, qrSvg='', rect;\n\n rect = 'l' + cellSize + ',0 0,' + cellSize +\n ' -' + cellSize + ',0 0,-' + cellSize + 'z ';\n\n qrSvg += '<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"';\n qrSvg += !opts.scalable ? ' width=\"' + size + 'px\" height=\"' + size + 'px\"' : '';\n qrSvg += ' viewBox=\"0 0 ' + size + ' ' + size + '\" ';\n qrSvg += ' preserveAspectRatio=\"xMinYMin meet\"';\n qrSvg += (title.text || alt.text) ? ' role=\"img\" aria-labelledby=\"' +\n escapeXml([title.id, alt.id].join(' ').trim() ) + '\"' : '';\n qrSvg += '>';\n qrSvg += (title.text) ? '<title id=\"' + escapeXml(title.id) + '\">' +\n escapeXml(title.text) + '</title>' : '';\n qrSvg += (alt.text) ? '<description id=\"' + escapeXml(alt.id) + '\">' +\n escapeXml(alt.text) + '</description>' : '';\n qrSvg += '<rect width=\"100%\" height=\"100%\" fill=\"white\" cx=\"0\" cy=\"0\"/>';\n qrSvg += '<path d=\"';\n\n for (r = 0; r < _this.getModuleCount(); r += 1) {\n mr = r * cellSize + margin;\n for (c = 0; c < _this.getModuleCount(); c += 1) {\n if (_this.isDark(r, c) ) {\n mc = c*cellSize+margin;\n qrSvg += 'M' + mc + ',' + mr + rect;\n }\n }\n }\n\n qrSvg += '\" stroke=\"transparent\" fill=\"black\"/>';\n qrSvg += '</svg>';\n\n return qrSvg;\n };\n\n _this.createDataURL = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n return createDataURL(size, size, function(x, y) {\n if (min <= x && x < max && min <= y && y < max) {\n var c = Math.floor( (x - min) / cellSize);\n var r = Math.floor( (y - min) / cellSize);\n return _this.isDark(r, c)? 0 : 1;\n } else {\n return 1;\n }\n } );\n };\n\n _this.createImgTag = function(cellSize, margin, alt) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n\n var img = '';\n img += '<img';\n img += '\\u0020src=\"';\n img += _this.createDataURL(cellSize, margin);\n img += '\"';\n img += '\\u0020width=\"';\n img += size;\n img += '\"';\n img += '\\u0020height=\"';\n img += size;\n img += '\"';\n if (alt) {\n img += '\\u0020alt=\"';\n img += escapeXml(alt);\n img += '\"';\n }\n img += '/>';\n\n return img;\n };\n\n var escapeXml = function(s) {\n var escaped = '';\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charAt(i);\n switch(c) {\n case '<': escaped += '&lt;'; break;\n case '>': escaped += '&gt;'; break;\n case '&': escaped += '&amp;'; break;\n case '\"': escaped += '&quot;'; break;\n default : escaped += c; break;\n }\n }\n return escaped;\n };\n\n var _createHalfASCII = function(margin) {\n var cellSize = 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n var y, x, r1, r2, p;\n\n var blocks = {\n '██': '█',\n '█ ': '▀',\n ' █': '▄',\n ' ': ' '\n };\n\n var blocksLastLineNoMargin = {\n '██': '▀',\n '█ ': '▀',\n ' █': ' ',\n ' ': ' '\n };\n\n var ascii = '';\n for (y = 0; y < size; y += 2) {\n r1 = Math.floor((y - min) / cellSize);\n r2 = Math.floor((y + 1 - min) / cellSize);\n for (x = 0; x < size; x += 1) {\n p = '█';\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r1, Math.floor((x - min) / cellSize))) {\n p = ' ';\n }\n\n if (min <= x && x < max && min <= y+1 && y+1 < max && _this.isDark(r2, Math.floor((x - min) / cellSize))) {\n p += ' ';\n }\n else {\n p += '█';\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n ascii += (margin < 1 && y+1 >= max) ? blocksLastLineNoMargin[p] : blocks[p];\n }\n\n ascii += '\\n';\n }\n\n if (size % 2 && margin > 0) {\n return ascii.substring(0, ascii.length - size - 1) + Array(size+1).join('▀');\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.createASCII = function(cellSize, margin) {\n cellSize = cellSize || 1;\n\n if (cellSize < 2) {\n return _createHalfASCII(margin);\n }\n\n cellSize -= 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n var y, x, r, p;\n\n var white = Array(cellSize+1).join('██');\n var black = Array(cellSize+1).join(' ');\n\n var ascii = '';\n var line = '';\n for (y = 0; y < size; y += 1) {\n r = Math.floor( (y - min) / cellSize);\n line = '';\n for (x = 0; x < size; x += 1) {\n p = 1;\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r, Math.floor((x - min) / cellSize))) {\n p = 0;\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n line += p ? white : black;\n }\n\n for (r = 0; r < cellSize; r += 1) {\n ascii += line + '\\n';\n }\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.renderTo2dContext = function(context, cellSize) {\n cellSize = cellSize || 2;\n var length = _this.getModuleCount();\n for (var row = 0; row < length; row++) {\n for (var col = 0; col < length; col++) {\n context.fillStyle = _this.isDark(row, col) ? 'black' : 'white';\n context.fillRect(row * cellSize, col * cellSize, cellSize, cellSize);\n }\n }\n }\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrcode.stringToBytes\n //---------------------------------------------------------------------\n\n qrcode.stringToBytesFuncs = {\n 'default' : function(s) {\n var bytes = [];\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charCodeAt(i);\n bytes.push(c & 0xff);\n }\n return bytes;\n }\n };\n\n qrcode.stringToBytes = qrcode.stringToBytesFuncs['default'];\n\n //---------------------------------------------------------------------\n // qrcode.createStringToBytes\n //---------------------------------------------------------------------\n\n /**\n * @param unicodeData base64 string of byte array.\n * [16bit Unicode],[16bit Bytes], ...\n * @param numChars\n */\n qrcode.createStringToBytes = function(unicodeData, numChars) {\n\n // create conversion map.\n\n var unicodeMap = function() {\n\n var bin = base64DecodeInputStream(unicodeData);\n var read = function() {\n var b = bin.read();\n if (b == -1) throw 'eof';\n return b;\n };\n\n var count = 0;\n var unicodeMap = {};\n while (true) {\n var b0 = bin.read();\n if (b0 == -1) break;\n var b1 = read();\n var b2 = read();\n var b3 = read();\n var k = String.fromCharCode( (b0 << 8) | b1);\n var v = (b2 << 8) | b3;\n unicodeMap[k] = v;\n count += 1;\n }\n if (count != numChars) {\n throw count + ' != ' + numChars;\n }\n\n return unicodeMap;\n }();\n\n var unknownChar = '?'.charCodeAt(0);\n console.log(JSON.stringify(unicodeMap), unknownChar)\n\n return function(s) {\n var bytes = [];\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charCodeAt(i);\n if (c < 128) {\n bytes.push(c);\n } else {\n var b = unicodeMap[s.charAt(i)];\n if (typeof b == 'number') {\n if ( (b & 0xff) == b) {\n // 1byte\n bytes.push(b);\n } else {\n // 2bytes\n bytes.push(b >>> 8);\n bytes.push(b & 0xff);\n }\n } else {\n bytes.push(unknownChar);\n }\n }\n }\n return bytes;\n };\n };\n\n //---------------------------------------------------------------------\n // QRMode\n //---------------------------------------------------------------------\n\n var QRMode = {\n MODE_NUMBER : 1 << 0,\n MODE_ALPHA_NUM : 1 << 1,\n MODE_8BIT_BYTE : 1 << 2,\n MODE_KANJI : 1 << 3\n };\n\n //---------------------------------------------------------------------\n // QRErrorCorrectionLevel\n //---------------------------------------------------------------------\n\n var QRErrorCorrectionLevel = {\n L : 1,\n M : 0,\n Q : 3,\n H : 2\n };\n\n //---------------------------------------------------------------------\n // QRMaskPattern\n //---------------------------------------------------------------------\n\n var QRMaskPattern = {\n PATTERN000 : 0,\n PATTERN001 : 1,\n PATTERN010 : 2,\n PATTERN011 : 3,\n PATTERN100 : 4,\n PATTERN101 : 5,\n PATTERN110 : 6,\n PATTERN111 : 7\n };\n\n //---------------------------------------------------------------------\n // QRUtil\n //---------------------------------------------------------------------\n\n var QRUtil = function() {\n\n var 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 var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\n var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);\n var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\n\n var _this = {};\n\n var getBCHDigit = function(data) {\n var digit = 0;\n while (data != 0) {\n digit += 1;\n data >>>= 1;\n }\n return digit;\n };\n\n _this.getBCHTypeInfo = function(data) {\n var d = data << 10;\n while (getBCHDigit(d) - getBCHDigit(G15) >= 0) {\n d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15) ) );\n }\n return ( (data << 10) | d) ^ G15_MASK;\n };\n\n _this.getBCHTypeNumber = function(data) {\n var d = data << 12;\n while (getBCHDigit(d) - getBCHDigit(G18) >= 0) {\n d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18) ) );\n }\n return (data << 12) | d;\n };\n\n _this.getPatternPosition = function(typeNumber) {\n return PATTERN_POSITION_TABLE[typeNumber - 1];\n };\n\n _this.getMaskFunction = function(maskPattern) {\n\n switch (maskPattern) {\n\n case QRMaskPattern.PATTERN000 :\n return function(i, j) { return (i + j) % 2 == 0; };\n case QRMaskPattern.PATTERN001 :\n return function(i, j) { return i % 2 == 0; };\n case QRMaskPattern.PATTERN010 :\n return function(i, j) { return j % 3 == 0; };\n case QRMaskPattern.PATTERN011 :\n return function(i, j) { return (i + j) % 3 == 0; };\n case QRMaskPattern.PATTERN100 :\n return function(i, j) { return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0; };\n case QRMaskPattern.PATTERN101 :\n return function(i, j) { return (i * j) % 2 + (i * j) % 3 == 0; };\n case QRMaskPattern.PATTERN110 :\n return function(i, j) { return ( (i * j) % 2 + (i * j) % 3) % 2 == 0; };\n case QRMaskPattern.PATTERN111 :\n return function(i, j) { return ( (i * j) % 3 + (i + j) % 2) % 2 == 0; };\n\n default :\n throw 'bad maskPattern:' + maskPattern;\n }\n };\n\n _this.getErrorCorrectPolynomial = function(errorCorrectLength) {\n var a = qrPolynomial([1], 0);\n for (var i = 0; i < errorCorrectLength; i += 1) {\n a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0) );\n }\n return a;\n };\n\n _this.getLengthInBits = function(mode, type) {\n\n if (1 <= type && type < 10) {\n\n // 1 - 9\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 10;\n case QRMode.MODE_ALPHA_NUM : return 9;\n case QRMode.MODE_8BIT_BYTE : return 8;\n case QRMode.MODE_KANJI : return 8;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 27) {\n\n // 10 - 26\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 12;\n case QRMode.MODE_ALPHA_NUM : return 11;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 10;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 41) {\n\n // 27 - 40\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 14;\n case QRMode.MODE_ALPHA_NUM : return 13;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 12;\n default :\n throw 'mode:' + mode;\n }\n\n } else {\n throw 'type:' + type;\n }\n };\n\n _this.getLostPoint = function(qrcode) {\n\n var moduleCount = qrcode.getModuleCount();\n\n var lostPoint = 0;\n\n // LEVEL1\n\n for (var row = 0; row < moduleCount; row += 1) {\n for (var col = 0; col < moduleCount; col += 1) {\n\n var sameCount = 0;\n var dark = qrcode.isDark(row, col);\n\n for (var r = -1; r <= 1; r += 1) {\n\n if (row + r < 0 || moduleCount <= row + r) {\n continue;\n }\n\n for (var c = -1; c <= 1; c += 1) {\n\n if (col + c < 0 || moduleCount <= col + c) {\n continue;\n }\n\n if (r == 0 && c == 0) {\n continue;\n }\n\n if (dark == qrcode.isDark(row + r, col + c) ) {\n sameCount += 1;\n }\n }\n }\n\n if (sameCount > 5) {\n lostPoint += (3 + sameCount - 5);\n }\n }\n };\n\n // LEVEL2\n\n for (var row = 0; row < moduleCount - 1; row += 1) {\n for (var col = 0; col < moduleCount - 1; col += 1) {\n var count = 0;\n if (qrcode.isDark(row, col) ) count += 1;\n if (qrcode.isDark(row + 1, col) ) count += 1;\n if (qrcode.isDark(row, col + 1) ) count += 1;\n if (qrcode.isDark(row + 1, col + 1) ) count += 1;\n if (count == 0 || count == 4) {\n lostPoint += 3;\n }\n }\n }\n\n // LEVEL3\n\n for (var row = 0; row < moduleCount; row += 1) {\n for (var 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\n for (var col = 0; col < moduleCount; col += 1) {\n for (var 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\n // LEVEL4\n\n var darkCount = 0;\n\n for (var col = 0; col < moduleCount; col += 1) {\n for (var row = 0; row < moduleCount; row += 1) {\n if (qrcode.isDark(row, col) ) {\n darkCount += 1;\n }\n }\n }\n\n var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n lostPoint += ratio * 10;\n\n return lostPoint;\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // QRMath\n //---------------------------------------------------------------------\n\n var QRMath = function() {\n\n var EXP_TABLE = new Array(256);\n var LOG_TABLE = new Array(256);\n\n // initialize tables\n for (var i = 0; i < 8; i += 1) {\n EXP_TABLE[i] = 1 << i;\n }\n for (var i = 8; i < 256; i += 1) {\n EXP_TABLE[i] = EXP_TABLE[i - 4]\n ^ EXP_TABLE[i - 5]\n ^ EXP_TABLE[i - 6]\n ^ EXP_TABLE[i - 8];\n }\n for (var i = 0; i < 255; i += 1) {\n LOG_TABLE[EXP_TABLE[i] ] = i;\n }\n\n var _this = {};\n\n _this.glog = function(n) {\n\n if (n < 1) {\n throw 'glog(' + n + ')';\n }\n\n return LOG_TABLE[n];\n };\n\n _this.gexp = function(n) {\n\n while (n < 0) {\n n += 255;\n }\n\n while (n >= 256) {\n n -= 255;\n }\n\n return EXP_TABLE[n];\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // qrPolynomial\n //---------------------------------------------------------------------\n\n function qrPolynomial(num, shift) {\n\n if (typeof num.length == 'undefined') {\n throw num.length + '/' + shift;\n }\n\n var _num = function() {\n var offset = 0;\n while (offset < num.length && num[offset] == 0) {\n offset += 1;\n }\n var _num = new Array(num.length - offset + shift);\n for (var i = 0; i < num.length - offset; i += 1) {\n _num[i] = num[i + offset];\n }\n return _num;\n }();\n\n var _this = {};\n\n _this.getAt = function(index) {\n return _num[index];\n };\n\n _this.getLength = function() {\n return _num.length;\n };\n\n _this.multiply = function(e) {\n\n var num = new Array(_this.getLength() + e.getLength() - 1);\n\n for (var i = 0; i < _this.getLength(); i += 1) {\n for (var 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\n return qrPolynomial(num, 0);\n };\n\n _this.mod = function(e) {\n\n if (_this.getLength() - e.getLength() < 0) {\n return _this;\n }\n\n var ratio = QRMath.glog(_this.getAt(0) ) - QRMath.glog(e.getAt(0) );\n\n var num = new Array(_this.getLength() );\n for (var i = 0; i < _this.getLength(); i += 1) {\n num[i] = _this.getAt(i);\n }\n\n for (var i = 0; i < e.getLength(); i += 1) {\n num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i) ) + ratio);\n }\n\n // recursive call\n return qrPolynomial(num, 0).mod(e);\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // QRRSBlock\n //---------------------------------------------------------------------\n\n var QRRSBlock = function() {\n\n var RS_BLOCK_TABLE = [\n\n // L\n // M\n // Q\n // H\n\n // 1\n [1, 26, 19],\n [1, 26, 16],\n [1, 26, 13],\n [1, 26, 9],\n\n // 2\n [1, 44, 34],\n [1, 44, 28],\n [1, 44, 22],\n [1, 44, 16],\n\n // 3\n [1, 70, 55],\n [1, 70, 44],\n [2, 35, 17],\n [2, 35, 13],\n\n // 4\n [1, 100, 80],\n [2, 50, 32],\n [2, 50, 24],\n [4, 25, 9],\n\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\n // 6\n [2, 86, 68],\n [4, 43, 27],\n [4, 43, 19],\n [4, 43, 15],\n\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\n var qrRSBlock = function(totalCount, dataCount) {\n var _this = {};\n _this.totalCount = totalCount;\n _this.dataCount = dataCount;\n return _this;\n };\n\n var _this = {};\n\n var getRsBlockTable = function(typeNumber, errorCorrectionLevel) {\n\n switch(errorCorrectionLevel) {\n case QRErrorCorrectionLevel.L :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n case QRErrorCorrectionLevel.M :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n case QRErrorCorrectionLevel.Q :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n case QRErrorCorrectionLevel.H :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n default :\n return undefined;\n }\n };\n\n _this.getRSBlocks = function(typeNumber, errorCorrectionLevel) {\n\n var rsBlock = getRsBlockTable(typeNumber, errorCorrectionLevel);\n\n if (typeof rsBlock == 'undefined') {\n throw 'bad rs block @ typeNumber:' + typeNumber +\n '/errorCorrectionLevel:' + errorCorrectionLevel;\n }\n\n var length = rsBlock.length / 3;\n\n var list = [];\n\n for (var i = 0; i < length; i += 1) {\n\n var count = rsBlock[i * 3 + 0];\n var totalCount = rsBlock[i * 3 + 1];\n var dataCount = rsBlock[i * 3 + 2];\n\n for (var j = 0; j < count; j += 1) {\n list.push(qrRSBlock(totalCount, dataCount) );\n }\n }\n\n return list;\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // qrBitBuffer\n //---------------------------------------------------------------------\n\n var qrBitBuffer = function() {\n\n var _buffer = [];\n var _length = 0;\n\n var _this = {};\n\n _this.getBuffer = function() {\n return _buffer;\n };\n\n _this.getAt = function(index) {\n var bufIndex = Math.floor(index / 8);\n return ( (_buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\n };\n\n _this.put = function(num, length) {\n for (var i = 0; i < length; i += 1) {\n _this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\n }\n };\n\n _this.getLengthInBits = function() {\n return _length;\n };\n\n _this.putBit = function(bit) {\n\n var bufIndex = Math.floor(_length / 8);\n if (_buffer.length <= bufIndex) {\n _buffer.push(0);\n }\n\n if (bit) {\n _buffer[bufIndex] |= (0x80 >>> (_length % 8) );\n }\n\n _length += 1;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrNumber\n //---------------------------------------------------------------------\n\n var qrNumber = function(data) {\n\n var _mode = QRMode.MODE_NUMBER;\n var _data = data;\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n var data = _data;\n\n var i = 0;\n\n while (i + 2 < data.length) {\n buffer.put(strToNum(data.substring(i, i + 3) ), 10);\n i += 3;\n }\n\n if (i < data.length) {\n if (data.length - i == 1) {\n buffer.put(strToNum(data.substring(i, i + 1) ), 4);\n } else if (data.length - i == 2) {\n buffer.put(strToNum(data.substring(i, i + 2) ), 7);\n }\n }\n };\n\n var strToNum = function(s) {\n var num = 0;\n for (var i = 0; i < s.length; i += 1) {\n num = num * 10 + chatToNum(s.charAt(i) );\n }\n return num;\n };\n\n var chatToNum = function(c) {\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n }\n throw 'illegal char :' + c;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrAlphaNum\n //---------------------------------------------------------------------\n\n var qrAlphaNum = function(data) {\n\n var _mode = QRMode.MODE_ALPHA_NUM;\n var _data = data;\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n var s = _data;\n\n var i = 0;\n\n while (i + 1 < s.length) {\n buffer.put(\n getCode(s.charAt(i) ) * 45 +\n getCode(s.charAt(i + 1) ), 11);\n i += 2;\n }\n\n if (i < s.length) {\n buffer.put(getCode(s.charAt(i) ), 6);\n }\n };\n\n var getCode = function(c) {\n\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n } else if ('A' <= c && c <= 'Z') {\n return c.charCodeAt(0) - 'A'.charCodeAt(0) + 10;\n } else {\n switch (c) {\n case ' ' : return 36;\n case '$' : return 37;\n case '%' : return 38;\n case '*' : return 39;\n case '+' : return 40;\n case '-' : return 41;\n case '.' : return 42;\n case '/' : return 43;\n case ':' : return 44;\n default :\n throw 'illegal char :' + c;\n }\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qr8BitByte\n //---------------------------------------------------------------------\n\n var qr8BitByte = function(data) {\n\n var _mode = QRMode.MODE_8BIT_BYTE;\n var _data = data;\n var _bytes = qrcode.stringToBytes(data);\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _bytes.length;\n };\n\n _this.write = function(buffer) {\n for (var i = 0; i < _bytes.length; i += 1) {\n buffer.put(_bytes[i], 8);\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrKanji\n //---------------------------------------------------------------------\n\n var qrKanji = function(data) {\n\n var _mode = QRMode.MODE_KANJI;\n var _data = data;\n\n var stringToBytes = qrcode.stringToBytesFuncs['SJIS'];\n if (!stringToBytes) {\n throw 'sjis not supported.';\n }\n !function(c, code) {\n // self test for sjis support.\n var test = stringToBytes(c);\n if (test.length != 2 || ( (test[0] << 8) | test[1]) != code) {\n throw 'sjis not supported.';\n }\n }('\\u53cb', 0x9746);\n\n var _bytes = stringToBytes(data);\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return ~~(_bytes.length / 2);\n };\n\n _this.write = function(buffer) {\n\n var data = _bytes;\n\n var i = 0;\n\n while (i + 1 < data.length) {\n\n var c = ( (0xff & data[i]) << 8) | (0xff & data[i + 1]);\n\n if (0x8140 <= c && c <= 0x9FFC) {\n c -= 0x8140;\n } else if (0xE040 <= c && c <= 0xEBBF) {\n c -= 0xC140;\n } else {\n throw 'illegal char at ' + (i + 1) + '/' + c;\n }\n\n c = ( (c >>> 8) & 0xff) * 0xC0 + (c & 0xff);\n\n buffer.put(c, 13);\n\n i += 2;\n }\n\n if (i < data.length) {\n throw 'illegal char at ' + (i + 1);\n }\n };\n\n return _this;\n };\n\n //=====================================================================\n // GIF Support etc.\n //\n\n //---------------------------------------------------------------------\n // byteArrayOutputStream\n //---------------------------------------------------------------------\n\n var byteArrayOutputStream = function() {\n\n var _bytes = [];\n\n var _this = {};\n\n _this.writeByte = function(b) {\n _bytes.push(b & 0xff);\n };\n\n _this.writeShort = function(i) {\n _this.writeByte(i);\n _this.writeByte(i >>> 8);\n };\n\n _this.writeBytes = function(b, off, len) {\n off = off || 0;\n len = len || b.length;\n for (var i = 0; i < len; i += 1) {\n _this.writeByte(b[i + off]);\n }\n };\n\n _this.writeString = function(s) {\n for (var i = 0; i < s.length; i += 1) {\n _this.writeByte(s.charCodeAt(i) );\n }\n };\n\n _this.toByteArray = function() {\n return _bytes;\n };\n\n _this.toString = function() {\n var s = '';\n s += '[';\n for (var i = 0; i < _bytes.length; i += 1) {\n if (i > 0) {\n s += ',';\n }\n s += _bytes[i];\n }\n s += ']';\n return s;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // base64EncodeOutputStream\n //---------------------------------------------------------------------\n\n var base64EncodeOutputStream = function() {\n\n var _buffer = 0;\n var _buflen = 0;\n var _length = 0;\n var _base64 = '';\n\n var _this = {};\n\n var writeEncoded = function(b) {\n _base64 += String.fromCharCode(encode(b & 0x3f) );\n };\n\n var encode = function(n) {\n if (n < 0) {\n // error.\n } else if (n < 26) {\n return 0x41 + n;\n } else if (n < 52) {\n return 0x61 + (n - 26);\n } else if (n < 62) {\n return 0x30 + (n - 52);\n } else if (n == 62) {\n return 0x2b;\n } else if (n == 63) {\n return 0x2f;\n }\n throw 'n:' + n;\n };\n\n _this.writeByte = function(n) {\n\n _buffer = (_buffer << 8) | (n & 0xff);\n _buflen += 8;\n _length += 1;\n\n while (_buflen >= 6) {\n writeEncoded(_buffer >>> (_buflen - 6) );\n _buflen -= 6;\n }\n };\n\n _this.flush = function() {\n\n if (_buflen > 0) {\n writeEncoded(_buffer << (6 - _buflen) );\n _buffer = 0;\n _buflen = 0;\n }\n\n if (_length % 3 != 0) {\n // padding\n var padlen = 3 - _length % 3;\n for (var i = 0; i < padlen; i += 1) {\n _base64 += '=';\n }\n }\n };\n\n _this.toString = function() {\n return _base64;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // base64DecodeInputStream\n //---------------------------------------------------------------------\n\n var base64DecodeInputStream = function(str) {\n\n var _str = str;\n var _pos = 0;\n var _buffer = 0;\n var _buflen = 0;\n\n var _this = {};\n\n _this.read = function() {\n\n while (_buflen < 8) {\n\n if (_pos >= _str.length) {\n if (_buflen == 0) {\n return -1;\n }\n throw 'unexpected end of file./' + _buflen;\n }\n\n var c = _str.charAt(_pos);\n _pos += 1;\n\n if (c == '=') {\n _buflen = 0;\n return -1;\n } else if (c.match(/^\\s$/) ) {\n // ignore if whitespace.\n continue;\n }\n\n _buffer = (_buffer << 6) | decode(c.charCodeAt(0) );\n _buflen += 6;\n }\n\n var n = (_buffer >>> (_buflen - 8) ) & 0xff;\n _buflen -= 8;\n return n;\n };\n\n var decode = function(c) {\n if (0x41 <= c && c <= 0x5a) {\n return c - 0x41;\n } else if (0x61 <= c && c <= 0x7a) {\n return c - 0x61 + 26;\n } else if (0x30 <= c && c <= 0x39) {\n return c - 0x30 + 52;\n } else if (c == 0x2b) {\n return 62;\n } else if (c == 0x2f) {\n return 63;\n } else {\n throw 'c:' + c;\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // gifImage (B/W)\n //---------------------------------------------------------------------\n\n var gifImage = function(width, height) {\n\n var _width = width;\n var _height = height;\n var _data = new Array(width * height);\n\n var _this = {};\n\n _this.setPixel = function(x, y, pixel) {\n _data[y * _width + x] = pixel;\n };\n\n _this.write = function(out) {\n\n //---------------------------------\n // GIF Signature\n\n out.writeString('GIF87a');\n\n //---------------------------------\n // Screen Descriptor\n\n out.writeShort(_width);\n out.writeShort(_height);\n\n out.writeByte(0x80); // 2bit\n out.writeByte(0);\n out.writeByte(0);\n\n //---------------------------------\n // Global Color Map\n\n // black\n out.writeByte(0x00);\n out.writeByte(0x00);\n out.writeByte(0x00);\n\n // white\n out.writeByte(0xff);\n out.writeByte(0xff);\n out.writeByte(0xff);\n\n //---------------------------------\n // Image Descriptor\n\n out.writeString(',');\n out.writeShort(0);\n out.writeShort(0);\n out.writeShort(_width);\n out.writeShort(_height);\n out.writeByte(0);\n\n //---------------------------------\n // Local Color Map\n\n //---------------------------------\n // Raster Data\n\n var lzwMinCodeSize = 2;\n var raster = getLZWRaster(lzwMinCodeSize);\n\n out.writeByte(lzwMinCodeSize);\n\n var offset = 0;\n\n while (raster.length - offset > 255) {\n out.writeByte(255);\n out.writeBytes(raster, offset, 255);\n offset += 255;\n }\n\n out.writeByte(raster.length - offset);\n out.writeBytes(raster, offset, raster.length - offset);\n out.writeByte(0x00);\n\n //---------------------------------\n // GIF Terminator\n out.writeString(';');\n };\n\n var bitOutputStream = function(out) {\n\n var _out = out;\n var _bitLength = 0;\n var _bitBuffer = 0;\n\n var _this = {};\n\n _this.write = function(data, length) {\n\n if ( (data >>> length) != 0) {\n throw 'length over';\n }\n\n while (_bitLength + length >= 8) {\n _out.writeByte(0xff & ( (data << _bitLength) | _bitBuffer) );\n length -= (8 - _bitLength);\n data >>>= (8 - _bitLength);\n _bitBuffer = 0;\n _bitLength = 0;\n }\n\n _bitBuffer = (data << _bitLength) | _bitBuffer;\n _bitLength = _bitLength + length;\n };\n\n _this.flush = function() {\n if (_bitLength > 0) {\n _out.writeByte(_bitBuffer);\n }\n };\n\n return _this;\n };\n\n var getLZWRaster = function(lzwMinCodeSize) {\n\n var clearCode = 1 << lzwMinCodeSize;\n var endCode = (1 << lzwMinCodeSize) + 1;\n var bitLength = lzwMinCodeSize + 1;\n\n // Setup LZWTable\n var table = lzwTable();\n\n for (var i = 0; i < clearCode; i += 1) {\n table.add(String.fromCharCode(i) );\n }\n table.add(String.fromCharCode(clearCode) );\n table.add(String.fromCharCode(endCode) );\n\n var byteOut = byteArrayOutputStream();\n var bitOut = bitOutputStream(byteOut);\n\n // clear code\n bitOut.write(clearCode, bitLength);\n\n var dataIndex = 0;\n\n var s = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n while (dataIndex < _data.length) {\n\n var c = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n if (table.contains(s + c) ) {\n\n s = s + c;\n\n } else {\n\n bitOut.write(table.indexOf(s), bitLength);\n\n if (table.size() < 0xfff) {\n\n if (table.size() == (1 << bitLength) ) {\n bitLength += 1;\n }\n\n table.add(s + c);\n }\n\n s = c;\n }\n }\n\n bitOut.write(table.indexOf(s), bitLength);\n\n // end code\n bitOut.write(endCode, bitLength);\n\n bitOut.flush();\n\n return byteOut.toByteArray();\n };\n\n var lzwTable = function() {\n\n var _map = {};\n var _size = 0;\n\n var _this = {};\n\n _this.add = function(key) {\n if (_this.contains(key) ) {\n throw 'dup key:' + key;\n }\n _map[key] = _size;\n _size += 1;\n };\n\n _this.size = function() {\n return _size;\n };\n\n _this.indexOf = function(key) {\n return _map[key];\n };\n\n _this.contains = function(key) {\n return typeof _map[key] != 'undefined';\n };\n\n return _this;\n };\n\n return _this;\n };\n\n var createDataURL = function(width, height, getPixel) {\n var gif = gifImage(width, height);\n for (var y = 0; y < height; y += 1) {\n for (var x = 0; x < width; x += 1) {\n gif.setPixel(x, y, getPixel(x, y) );\n }\n }\n\n var b = byteArrayOutputStream();\n gif.write(b);\n\n var base64 = base64EncodeOutputStream();\n var bytes = b.toByteArray();\n for (var i = 0; i < bytes.length; i += 1) {\n base64.writeByte(bytes[i]);\n }\n base64.flush();\n\n return 'data:image/gif;base64,' + base64;\n };\n\n //---------------------------------------------------------------------\n // returns qrcode function.\n\n return qrcode;\n}();\n\n// multibyte support\n!function() {\n\n qrcode.stringToBytesFuncs['UTF-8'] = function(s) {\n // http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\n function toUTF8Array(str) {\n var utf8 = [];\n for (var i=0; i < str.length; i++) {\n var charcode = str.charCodeAt(i);\n if (charcode < 0x80) utf8.push(charcode);\n else if (charcode < 0x800) {\n utf8.push(0xc0 | (charcode >> 6),\n 0x80 | (charcode & 0x3f));\n }\n else if (charcode < 0xd800 || charcode >= 0xe000) {\n utf8.push(0xe0 | (charcode >> 12),\n 0x80 | ((charcode>>6) & 0x3f),\n 0x80 | (charcode & 0x3f));\n }\n // surrogate pair\n else {\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)\n | (str.charCodeAt(i) & 0x3ff));\n utf8.push(0xf0 | (charcode >>18),\n 0x80 | ((charcode>>12) & 0x3f),\n 0x80 | ((charcode>>6) & 0x3f),\n 0x80 | (charcode & 0x3f));\n }\n }\n return utf8;\n }\n return toUTF8Array(s);\n };\n\n}();\n\n(function (factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n }\n}(function () {\n return qrcode;\n}));\n","type TypeNumber =\n | 0\n | 1\n | 2\n | 3\n | 4\n | 5\n | 6\n | 7\n | 8\n | 9\n | 10\n | 11\n | 12\n | 13\n | 14\n | 15\n | 16\n | 17\n | 18\n | 19\n | 20\n | 21\n | 22\n | 23\n | 24\n | 25\n | 26\n | 27\n | 28\n | 29\n | 30\n | 31\n | 32\n | 33\n | 34\n | 35\n | 36\n | 37\n | 38\n | 39\n | 40;\n\nconst TypeNumber = Array(41)\n .fill(0)\n .map((_, i) => i) as unknown as {\n [P in TypeNumber]: P;\n};\n\nexport { TypeNumber };\n\nexport enum ErrorCorrectionLevel {\n L = \"L\",\n M = \"M\",\n Q = \"Q\",\n H = \"H\"\n}\n\nexport enum Mode {\n numeric = \"Numeric\",\n alphanumeric = \"Alphanumeric\",\n byte = \"Byte\",\n kanji = \"Kanji\",\n unicode = \"Unicode\"\n}\n\nexport interface QRCode {\n addData(data: string, mode?: Mode.alphanumeric | Mode.byte | Mode.kanji | Mode.numeric): void;\n make(): void;\n getModuleCount(): number;\n isDark(row: number, col: number): boolean;\n}\n","const isObject = (obj: Record<string, unknown> | undefined): boolean =>\n !!obj && typeof obj === \"object\" && !Array.isArray(obj);\n\nexport type UnknownObject =\n | {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n }\n | undefined;\n\nexport function mergeDeep(target: UnknownObject, ...sources: UnknownObject[]): UnknownObject {\n if (!sources.length) return target;\n const source = sources.shift();\n if (source === undefined || !isObject(target) || !isObject(source)) return target;\n target = { ...target };\n Object.keys(source).forEach((key: string): void => {\n const targetValue = target[key];\n const sourceValue = source[key];\n\n if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\n target[key] = sourceValue;\n } else if (isObject(targetValue) && isObject(sourceValue)) {\n target[key] = mergeDeep(Object.assign({}, targetValue), sourceValue);\n } else {\n target[key] = sourceValue;\n }\n });\n\n return mergeDeep(target, ...sources);\n}\n","export enum GradientType {\n radial = \"radial\",\n linear = \"linear\"\n}\n\nexport type Gradient = {\n /**\n * Type of gradient spread\n *\n * @default GradientType.linear\n */\n type: `${GradientType}`;\n /**\n * Rotation of gradient (in radians, Math.PI === 180 degrees)\n *\n * @default 0\n */\n rotation?: number;\n /** Gradient colors. */\n colorStops: {\n /** Position of color in gradient range */\n offset: number;\n /** Color of stop in gradient range */\n color: string;\n }[];\n};\n\nexport function sanitizeGradient(gradient: Gradient): Gradient {\n const newGradient = { ...gradient };\n\n if (!newGradient.colorStops || !newGradient.colorStops.length) {\n throw \"Field 'colorStops' is required in gradient\";\n }\n\n if (newGradient.rotation) {\n newGradient.rotation = Number(newGradient.rotation);\n } else {\n newGradient.rotation = 0;\n }\n\n newGradient.colorStops = newGradient.colorStops.map((colorStop: { offset: number; color: string }) => ({\n ...colorStop,\n offset: Number(colorStop.offset)\n }));\n\n return newGradient;\n}\n","import { browserImageTools } from \"../tools/browser-image-tools.js\";\nimport { ErrorCorrectionLevel, TypeNumber } from \"../types/qrcode.js\";\nimport { Gradient, sanitizeGradient } from \"./gradient.js\";\n\nexport enum DotType {\n dot = \"dot\",\n randomDot = \"random-dot\",\n rounded = \"rounded\",\n verticalLine = \"vertical-line\",\n horizontalLine = \"horizontal-line\",\n classy = \"classy\",\n classyRounded = \"classy-rounded\",\n square = \"square\",\n smallSquare = \"small-square\",\n extraRounded = \"extra-rounded\",\n diamond = \"diamond\"\n}\n\nexport enum CornerDotType {\n dot = \"dot\",\n square = \"square\",\n heart = \"heart\",\n extraRounded = \"extra-rounded\",\n classy = \"classy\",\n outpoint = \"outpoint\",\n inpoint = \"inpoint\"\n}\n\nexport enum CornerSquareType {\n dot = \"dot\",\n square = \"square\",\n extraRounded = \"extra-rounded\",\n classy = \"classy\",\n outpoint = \"outpoint\",\n inpoint = \"inpoint\"\n}\n\nexport enum ShapeType {\n square = \"square\",\n circle = \"circle\"\n}\n\nexport interface Options {\n /** Use a custom DOM domplementation */\n document: Document;\n /** Use a custom image fetching & serializaton implementation */\n imageTools?: typeof browserImageTools;\n /** @ignore */\n width: number;\n /** @ignore */\n height: number;\n /** The data will be encoded in the QR code */\n data: string;\n /** The image will be copied to the center of the QR code */\n image?: string | Buffer | Blob;\n /**\n * QR code shape\n *\n * @default ShapeType.square\n */\n shape: `${ShapeType}`;\n /** Options will be passed to `qrcode-generator` lib */\n qrOptions: {\n typeNumber: TypeNumber;\n mode?: `${Mode}`;\n /** @default ErrorCorrectionLevel.Q */\n errorCorrectionLevel: `${ErrorCorrectionLevel}`;\n };\n imageOptions: {\n /**\n * Hide all dots covered by the image\n *\n * @default true\n */\n hideBackgroundDots: boolean;\n /**\n * Coefficient of the image size\n *\n * @default 0.4\n */\n imageSize: number;\n /**\n * Margin of the image (in blocks)\n *\n * @default 0\n */\n margin: number;\n /**\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLImageElement/crossOrigin)\n */\n crossOrigin?: string;\n };\n dotsOptions: {\n /**\n * QR dot size (in pixels)\n *\n * @default 10\n */\n size: number;\n /**\n * Color of QR dots\n *\n * @default \"#000\"\n */\n color: string;\n /** Gradient of QR dots */\n gradient?: Gradient;\n /**\n * Style of QR dots\n *\n * @default DotType.square\n */\n type: `${DotType}`;\n };\n /** Corners Square options, omitted values match dots */\n cornersSquareOptions?: {\n /** Color of Corners Square */\n color?: string;\n /** Gradient of Corners Square */\n gradient?: Gradient;\n /** Style of Corners Square */\n type?: `${CornerSquareType}`;\n };\n /** Corners Dot options, omitted values match squares */\n cornersDotOptions?: {\n /** Color of Corners Dot */\n color?: string;\n /** Gradient of Corners Dot */\n gradient?: Gradient;\n /** Style of Corners Dot */\n type?: `${CornerDotType}`;\n };\n /** QR background styling options, false to disable background */\n backgroundOptions?:\n | {\n /** Background roundnes, from 0 (square) to 1 (circle) */\n round?: number;\n /** Background color */\n color?: string;\n /** Background Gradient */\n gradient?: Gradient;\n /**\n * Margin (in blocks) between background and the QR code\n *\n * @default 0\n */\n margin?: number;\n }\n | false;\n /** `import { stringToBytesFuncs } from \"@liquid-js/qr-code-styling/kanji\";` to add Kanji support */\n stringToBytesFuncs?: { [encoding: string]: (s: string) => number[] };\n}\n\nexport const defaultOptions: Options = {\n document: undefined as never,\n shape: ShapeType.square,\n width: undefined as never,\n height: undefined as never,\n data: \"\",\n qrOptions: {\n typeNumber: TypeNumber[0],\n mode: undefined,\n errorCorrectionLevel: ErrorCorrectionLevel.Q\n },\n imageOptions: {\n hideBackgroundDots: true,\n imageSize: 0.4,\n crossOrigin: undefined,\n margin: 0\n },\n dotsOptions: {\n type: DotType.square,\n color: \"#000\",\n size: 10\n }\n};\n\nexport function sanitizeOptions(options: Options): Options {\n const newOptions = { ...options };\n\n newOptions.imageOptions = {\n ...newOptions.imageOptions,\n hideBackgroundDots: Boolean(newOptions.imageOptions.hideBackgroundDots),\n imageSize: Math.min(1, Number(newOptions.imageOptions.imageSize)) || 1,\n margin: Number(newOptions.imageOptions.margin)\n };\n\n newOptions.dotsOptions = {\n ...newOptions.dotsOptions\n };\n if (newOptions.dotsOptions.gradient) {\n newOptions.dotsOptions.gradient = sanitizeGradient(newOptions.dotsOptions.gradient);\n }\n // Ensure integer dot size\n newOptions.dotsOptions.size = Math.round(Math.max(0, newOptions.dotsOptions.size) || 10);\n\n if (newOptions.cornersSquareOptions) {\n newOptions.cornersSquareOptions = {\n ...newOptions.cornersSquareOptions\n };\n if (newOptions.cornersSquareOptions.gradient) {\n newOptions.cornersSquareOptions.gradient = sanitizeGradient(newOptions.cornersSquareOptions.gradient);\n }\n }\n\n if (newOptions.cornersDotOptions) {\n newOptions.cornersDotOptions = {\n ...newOptions.cornersDotOptions\n };\n if (newOptions.cornersDotOptions.gradient) {\n newOptions.cornersDotOptions.gradient = sanitizeGradient(newOptions.cornersDotOptions.gradient);\n }\n }\n\n if (newOptions.backgroundOptions) {\n newOptions.backgroundOptions = {\n ...newOptions.backgroundOptions\n };\n if (newOptions.backgroundOptions.gradient) {\n newOptions.backgroundOptions.gradient = sanitizeGradient(newOptions.backgroundOptions.gradient);\n }\n }\n\n if (!newOptions.document) newOptions.document = document;\n\n return newOptions;\n}\n","import { ErrorCorrectionLevel, Mode } from \"../types/qrcode.js\";\n\nexport const ErrorCorrectionPercents = {\n [ErrorCorrectionLevel.L]: 0.07,\n [ErrorCorrectionLevel.M]: 0.15,\n [ErrorCorrectionLevel.Q]: 0.25,\n [ErrorCorrectionLevel.H]: 0.3\n};\n\nexport function getMode(data: string): Mode {\n switch (true) {\n case /^[0-9]*$/.test(data):\n return Mode.numeric;\n case /^[0-9A-Z $%*+\\-./:]*$/.test(data):\n return Mode.alphanumeric;\n // eslint-disable-next-line no-control-regex\n case /[^\\u0000-\\u00ff]/.test(data):\n return Mode.unicode;\n default:\n return Mode.byte;\n }\n}\n","const rx = /\\.?0+$/;\n\nexport function numToAttr(value: number) {\n return value.toFixed(7).replace(rx, \"\");\n}\n\nexport function svgPath(strings: TemplateStringsArray, ...values: unknown[]) {\n return strings\n .reduce((t, v, i) => {\n let p: unknown = \"\";\n if (i) p = values[i - 1];\n if (typeof p == \"number\") p = numToAttr(p);\n return `${t}${p}${v}`;\n }, \"\")\n .trim()\n .replace(/[\\s\\n\\r]+/gim, \" \");\n}\n","import { BasicFigureDrawArgs, DrawArgs, RotateFigureArgs } from \"../types/helper.js\";\nimport { CornerDotType } from \"../utils/options.js\";\nimport { numToAttr, svgPath } from \"../utils/svg.js\";\n\nexport class QRCornerDot {\n private _element?: SVGElement;\n\n get element() {\n return this._element;\n }\n\n constructor(\n private readonly type: `${CornerDotType}`,\n private readonly document: Document\n ) {}\n\n draw(args: DrawArgs): void {\n const type = this.type;\n let drawFunction;\n\n switch (type) {\n case CornerDotType.square:\n drawFunction = this.drawSquare;\n break;\n case CornerDotType.heart:\n drawFunction = this.drawHeart;\n break;\n case CornerDotType.extraRounded:\n drawFunction = this.drawRounded;\n break;\n case CornerDotType.classy:\n drawFunction = this.drawClassy;\n break;\n case CornerDotType.inpoint:\n drawFunction = this.drawInpoint;\n break;\n case CornerDotType.outpoint:\n drawFunction = this.drawOutpoint;\n break;\n case CornerDotType.dot:\n default:\n drawFunction = this.drawDot;\n }\n\n drawFunction.call(this, args);\n }\n\n private rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\n const cx = x + size / 2;\n const cy = y + size / 2;\n\n draw();\n this._element?.setAttribute(\"transform\", `rotate(${numToAttr((180 * rotation) / Math.PI)},${cx},${cy})`);\n }\n\n private basicDot(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\n this._element.setAttribute(\"cx\", numToAttr(x + size / 2));\n this._element.setAttribute(\"cy\", numToAttr(y + size / 2));\n this._element.setAttribute(\"r\", numToAttr(size / 2));\n }\n });\n }\n\n private basicSquare(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n this._element.setAttribute(\"x\", numToAttr(x));\n this._element.setAttribute(\"y\", numToAttr(y));\n this._element.setAttribute(\"width\", numToAttr(size));\n this._element.setAttribute(\"height\", numToAttr(size));\n }\n });\n }\n\n private basicHeart(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n const path = [\n \"M\",\n 0.925,\n 0.3538125,\n \"c\",\n 0,\n 0.0325869,\n -0.0054931,\n 0.0644619,\n -0.0164688,\n 0.095625,\n \"S\",\n 0.87825,\n 0.5147812,\n 0.850625,\n 0.5519688,\n \"C\",\n 0.823,\n 0.5891563,\n 0.7858125,\n 0.631125,\n 0.7390625,\n 0.677875,\n \"S\",\n 0.6331632,\n 0.7802256,\n 0.561625,\n 0.8446875,\n \"L\",\n 0.5,\n 0.8999375,\n \"l\",\n -0.061625,\n -0.05525,\n \"C\",\n 0.3668368,\n 0.7802256,\n 0.3076875,\n 0.724625,\n 0.2609375,\n 0.677875,\n \"S\",\n 0.177,\n 0.5891563,\n 0.149375,\n 0.5519688,\n \"S\",\n 0.1024444,\n 0.4806007,\n 0.0914688,\n 0.4494375,\n \"S\",\n 0.075,\n 0.3863994,\n 0.075,\n 0.3538125,\n \"C\",\n 0.075,\n 0.2872256,\n 0.0973125,\n 0.231625,\n 0.1419375,\n 0.187,\n \"S\",\n 0.2421631,\n 0.1200625,\n 0.30875,\n 0.1200625,\n \"c\",\n 0.0368369,\n 0,\n 0.0718994,\n 0.0077881,\n 0.1051875,\n 0.023375,\n \"S\",\n 0.4759131,\n 0.1809756,\n 0.5,\n 0.2093125,\n \"c\",\n 0.0240868,\n -0.0283369,\n 0.0527744,\n -0.0502881,\n 0.0860625,\n -0.065875,\n \"c\",\n 0.0332882,\n -0.0155869,\n 0.0683507,\n -0.023375,\n 0.1051875,\n -0.023375,\n \"c\",\n 0.0665869,\n 0,\n 0.1221875,\n 0.0223125,\n 0.1668125,\n 0.0669375,\n \"S\",\n 0.925,\n 0.2872256,\n 0.925,\n 0.3538125,\n \"z\"\n ];\n let move = false;\n let i = 0;\n this._element.setAttribute(\n \"d\",\n path\n .map((v) => {\n if (typeof v == \"string\") {\n i = 0;\n move = v.toUpperCase() == v;\n return v;\n }\n i++;\n v = v * size;\n if (move) {\n v += i % 2 == 1 ? x : y;\n }\n return numToAttr(v);\n })\n .join(\" \")\n );\n }\n\n private basicRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n this._element.setAttribute(\"x\", numToAttr(x));\n this._element.setAttribute(\"y\", numToAttr(y));\n this._element.setAttribute(\"width\", numToAttr(size));\n this._element.setAttribute(\"height\", numToAttr(size));\n this._element.setAttribute(\"rx\", numToAttr(size / 4));\n this._element.setAttribute(\"ry\", numToAttr(size / 4));\n }\n });\n }\n\n private basicClassy(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y + 2.5 * dotSize}\n v ${2 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}\n h ${4.5 * dotSize}\n v ${-4.5 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}\n h ${-2 * dotSize}\n H ${x}\n z`\n );\n }\n });\n }\n\n private basicInpoint(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y + dotSize / 2}\n v ${dotSize / 4}\n a ${dotSize / 4}, ${dotSize / 4} 0 0 0 ${dotSize / 4}, ${dotSize / 4}\n h ${(dotSize / 4) * 3}\n v ${(-dotSize / 4) * 3}\n a ${dotSize / 4}, ${dotSize / 4} 0 0 0 ${-dotSize / 4}, ${-dotSize / 4}\n h ${-dotSize / 2}\n a ${dotSize / 4}, ${dotSize / 4} 0 0 0 ${-dotSize / 4}, ${dotSize / 4}\n z`\n );\n }\n });\n }\n\n private drawDot({ x, y, size, rotation }: DrawArgs): void {\n this.basicDot({ x, y, size, rotation });\n }\n\n private drawSquare({ x, y, size, rotation }: DrawArgs): void {\n this.basicSquare({ x, y, size, rotation });\n }\n\n private drawHeart({ x, y, size, rotation }: DrawArgs): void {\n const scaleFactor = 0.2;\n this.basicHeart({\n x: x - (scaleFactor * size) / 2,\n y: y - (scaleFactor * size) / 2,\n size: size * (1 + scaleFactor),\n rotation\n });\n }\n\n private drawRounded({ x, y, size, rotation }: DrawArgs): void {\n this.basicRounded({ x, y, size, rotation });\n }\n\n private drawClassy({ x, y, size, rotation }: DrawArgs): void {\n this.basicClassy({ x, y, size, rotation });\n }\n\n private drawInpoint({ x, y, size, rotation }: DrawArgs): void {\n this.basicInpoint({ x, y, size, rotation });\n }\n\n private drawOutpoint({ x, y, size, rotation }: DrawArgs): void {\n this.basicInpoint({ x, y, size, rotation: (rotation || 0) + Math.PI });\n }\n}\n","import { BasicFigureDrawArgs, DrawArgs, RotateFigureArgs } from \"../types/helper.js\";\nimport { CornerSquareType } from \"../utils/options.js\";\nimport { numToAttr, svgPath } from \"../utils/svg.js\";\n\nexport class QRCornerSquare {\n private _element?: SVGElement;\n\n get element() {\n return this._element;\n }\n\n constructor(\n private readonly type: `${CornerSquareType}`,\n private readonly document: Document\n ) {}\n\n draw(args: DrawArgs): void {\n const type = this.type;\n let drawFunction;\n\n switch (type) {\n case CornerSquareType.square:\n drawFunction = this.drawSquare;\n break;\n case CornerSquareType.extraRounded:\n drawFunction = this.drawExtraRounded;\n break;\n case CornerSquareType.classy:\n drawFunction = this.drawClassy;\n break;\n case CornerSquareType.outpoint:\n drawFunction = this.drawOutpoint;\n break;\n case CornerSquareType.inpoint:\n drawFunction = this.drawInpoint;\n break;\n case CornerSquareType.dot:\n default:\n drawFunction = this.drawDot;\n }\n\n drawFunction.call(this, args);\n }\n\n private rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\n const cx = x + size / 2;\n const cy = y + size / 2;\n\n draw();\n this._element?.setAttribute(\"transform\", `rotate(${numToAttr((180 * rotation) / Math.PI)},${cx},${cy})`);\n }\n\n private basicDot(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x + size / 2} ${y}\n a ${size / 2} ${size / 2} 0 1 0 0.1 0\n z\n m 0 ${dotSize}\n a ${size / 2 - dotSize} ${size / 2 - dotSize} 0 1 1 -0.1 0\n Z`\n );\n }\n });\n }\n\n private basicSquare(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y}\n v ${size}\n h ${size}\n v ${-size}\n z\n M ${x + dotSize} ${y + dotSize}\n h ${size - 2 * dotSize}\n v ${size - 2 * dotSize}\n h ${-size + 2 * dotSize}\n z`\n );\n }\n });\n }\n\n private basicExtraRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y + 2.5 * dotSize}\n v ${2 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}\n h ${2 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${-dotSize * 2.5}\n v ${-2 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}\n h ${-2 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${dotSize * 2.5}\n z\n M ${x + 2.5 * dotSize} ${y + dotSize}\n h ${2 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}\n v ${2 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${dotSize * 1.5}\n h ${-2 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}\n v ${-2 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${-dotSize * 1.5}\n z`\n );\n }\n });\n }\n\n private basicClassy(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y + 2.5 * dotSize}\n v ${2 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}\n h ${4.5 * dotSize}\n v ${-4.5 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}\n h ${-2 * dotSize}\n H ${x}\n z\n M ${x + 2.5 * dotSize} ${y + dotSize}\n h ${2 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}\n v ${3.5 * dotSize}\n h ${-3.5 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}\n v ${-3.5 * dotSize}\n z`\n );\n }\n });\n }\n\n private basicInpoint(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y + 2.5 * dotSize}\n v ${2 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}\n h ${4.5 * dotSize}\n v ${-4.5 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}\n h ${-2 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${dotSize * 2.5}\n z\n M ${x + 2.5 * dotSize} ${y + dotSize}\n h ${2 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}\n v ${3.5 * dotSize}\n h ${-3.5 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}\n v ${-2 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${-dotSize * 1.5}\n z`\n );\n }\n });\n }\n\n private drawDot({ x, y, size, rotation }: DrawArgs): void {\n this.basicDot({ x, y, size, rotation });\n }\n\n private drawSquare({ x, y, size, rotation }: DrawArgs): void {\n this.basicSquare({ x, y, size, rotation });\n }\n\n private drawExtraRounded({ x, y, size, rotation }: DrawArgs): void {\n this.basicExtraRounded({ x, y, size, rotation });\n }\n\n private drawClassy({ x, y, size, rotation }: DrawArgs): void {\n this.basicClassy({ x, y, size, rotation });\n }\n\n private drawInpoint({ x, y, size, rotation }: DrawArgs): void {\n this.basicInpoint({ x, y, size, rotation });\n }\n\n private drawOutpoint({ x, y, size, rotation }: DrawArgs): void {\n this.basicInpoint({ x, y, size, rotation: (rotation || 0) + Math.PI });\n }\n}\n","import { BasicFigureDrawArgs, DrawArgs, RotateFigureArgs } from \"../types/helper.js\";\nimport { DotType } from \"../utils/options.js\";\nimport { numToAttr, svgPath } from \"../utils/svg.js\";\n\nexport class QRDot {\n private _element?: SVGElement;\n\n get element() {\n return this._element;\n }\n\n constructor(\n private readonly type: `${DotType}`,\n private readonly document: Document\n ) {}\n\n draw(args: DrawArgs): void {\n const type = this.type;\n let drawFunction;\n\n switch (type) {\n case DotType.dot:\n drawFunction = this.drawDot;\n break;\n case DotType.randomDot:\n drawFunction = this.drawRandomDot;\n break;\n case DotType.classy:\n drawFunction = this.drawClassy;\n break;\n case DotType.classyRounded:\n drawFunction = this.drawClassyRounded;\n break;\n case DotType.rounded:\n drawFunction = this.drawRounded;\n break;\n case DotType.verticalLine:\n drawFunction = this.drawVerticalLine;\n break;\n case DotType.horizontalLine:\n drawFunction = this.drawHorizontalLine;\n break;\n case DotType.extraRounded:\n drawFunction = this.drawExtraRounded;\n break;\n case DotType.diamond:\n drawFunction = this.drawDiamond;\n break;\n case DotType.smallSquare:\n drawFunction = this.drawSmallSquare;\n break;\n case DotType.square:\n default:\n drawFunction = this.drawSquare;\n }\n\n drawFunction.call(this, args);\n }\n\n private rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\n const cx = x + size / 2;\n const cy = y + size / 2;\n\n draw();\n this._element?.setAttribute(\"transform\", `rotate(${numToAttr((180 * rotation) / Math.PI)},${cx},${cy})`);\n }\n\n private basicDot(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\n this._element.setAttribute(\"cx\", numToAttr(x + size / 2));\n this._element.setAttribute(\"cy\", numToAttr(y + size / 2));\n this._element.setAttribute(\"r\", numToAttr(size / 2));\n }\n });\n }\n\n private basicSquare(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n this._element.setAttribute(\"x\", numToAttr(x));\n this._element.setAttribute(\"y\", numToAttr(y));\n this._element.setAttribute(\"width\", numToAttr(size));\n this._element.setAttribute(\"height\", numToAttr(size));\n }\n });\n }\n\n //if rotation === 0 - right side is rounded\n private basicSideRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y}\n v ${size}\n h ${size / 2}\n a ${size / 2} ${size / 2}, 0, 0, 0, 0 ${-size}\n z`\n );\n }\n });\n }\n\n //if rotation === 0 - top right corner is rounded\n private basicCornerRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y}\n v ${size}\n h ${size}\n v ${-size / 2}\n a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}\n z`\n );\n }\n });\n }\n\n //if rotation === 0 - top right corner is rounded\n private basicCornerExtraRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y}\n v ${size}\n h ${size}\n a ${size} ${size}, 0, 0, 0, ${-size} ${-size}\n z`\n );\n }\n });\n }\n\n //if rotation === 0 - left bottom and right top corners are rounded\n private basicCornersRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y}\n v ${size / 2}\n a ${size / 2} ${size / 2}, 0, 0, 0, ${size / 2} ${size / 2}\n h ${size / 2}\n v ${-size / 2}\n a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}\n z`\n );\n }\n });\n }\n\n private drawDot({ x, y, size }: DrawArgs): void {\n this.basicDot({ x, y, size, rotation: 0 });\n }\n\n private drawRandomDot({ x, y, size }: DrawArgs): void {\n const randomFactor = Math.random() * (1 - 0.75) + 0.75;\n this.basicDot({ x, y, size: size * randomFactor, rotation: 0 });\n }\n\n private drawSquare({ x, y, size }: DrawArgs): void {\n this.basicSquare({ x, y, size, rotation: 0 });\n }\n\n private drawSmallSquare({ x, y, size }: DrawArgs): void {\n const originalSize = size;\n\n size = originalSize * 0.7;\n x = x + originalSize * 0.15;\n y = y + originalSize * 0.15;\n\n this.basicSquare({ x, y, size, rotation: 0 });\n }\n\n private drawDiamond({ x, y, size }: DrawArgs): void {\n this.basicSquare({ x, y, size, rotation: Math.PI / 4 });\n }\n\n private drawRounded({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this.basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\n this.basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount === 2) {\n let rotation = 0;\n\n if (leftNeighbor && topNeighbor) {\n rotation = Math.PI / 2;\n } else if (topNeighbor && rightNeighbor) {\n rotation = Math.PI;\n } else if (rightNeighbor && bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this.basicCornerRounded({ x, y, size, rotation });\n return;\n }\n\n if (neighborsCount === 1) {\n let rotation = 0;\n\n if (topNeighbor) {\n rotation = Math.PI / 2;\n } else if (rightNeighbor) {\n rotation = Math.PI;\n } else if (bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this.basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n private drawVerticalLine({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (\n neighborsCount === 0 ||\n (leftNeighbor && !(topNeighbor || bottomNeighbor)) ||\n (rightNeighbor && !(topNeighbor || bottomNeighbor))\n ) {\n this.basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (topNeighbor && bottomNeighbor) {\n this.basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (topNeighbor && !bottomNeighbor) {\n const rotation = Math.PI / 2;\n this.basicSideRounded({ x, y, size, rotation });\n return;\n }\n\n if (bottomNeighbor && !topNeighbor) {\n const rotation = -Math.PI / 2;\n this.basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n private drawHorizontalLine({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (\n neighborsCount === 0 ||\n (topNeighbor && !(leftNeighbor || rightNeighbor)) ||\n (bottomNeighbor && !(leftNeighbor || rightNeighbor))\n ) {\n this.basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (leftNeighbor && rightNeighbor) {\n this.basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (leftNeighbor && !rightNeighbor) {\n const rotation = 0;\n this.basicSideRounded({ x, y, size, rotation });\n return;\n }\n\n if (rightNeighbor && !leftNeighbor) {\n const rotation = Math.PI;\n this.basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n private drawExtraRounded({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this.basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\n this.basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount === 2) {\n let rotation = 0;\n\n if (leftNeighbor && topNeighbor) {\n rotation = Math.PI / 2;\n } else if (topNeighbor && rightNeighbor) {\n rotation = Math.PI;\n } else if (rightNeighbor && bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this.basicCornerExtraRounded({ x, y, size, rotation });\n return;\n }\n\n if (neighborsCount === 1) {\n let rotation = 0;\n\n if (topNeighbor) {\n rotation = Math.PI / 2;\n } else if (rightNeighbor) {\n rotation = Math.PI;\n } else if (bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this.basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n private drawClassy({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this.basicCornersRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n if (!leftNeighbor && !topNeighbor) {\n this.basicCornerRounded({ x, y, size, rotation: -Math.PI / 2 });\n return;\n }\n\n if (!rightNeighbor && !bottomNeighbor) {\n this.basicCornerRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n this.basicSquare({ x, y, size, rotation: 0 });\n }\n\n private drawClassyRounded({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this.basicCornersRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n if (!leftNeighbor && !topNeighbor) {\n this.basicCornerExtraRounded({ x, y, size, rotation: -Math.PI / 2 });\n return;\n }\n\n if (!rightNeighbor && !bottomNeighbor) {\n this.basicCornerExtraRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n this.basicSquare({ x, y, size, rotation: 0 });\n }\n}\n","export const browserImageTools = {\n toDataURL(url: string | Buffer | Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n if (typeof url == \"string\") {\n const xhr = new XMLHttpRequest();\n xhr.onload = function () {\n const reader = new FileReader();\n reader.onloadend = function () {\n resolve(reader.result as string);\n };\n reader.readAsDataURL(xhr.response);\n };\n xhr.onerror = xhr.onabort = xhr.ontimeout = reject;\n xhr.open(\"GET\", url);\n xhr.responseType = \"blob\";\n xhr.send();\n } else {\n const reader = new FileReader();\n reader.onloadend = function () {\n resolve(reader.result as string);\n };\n reader.readAsDataURL(url as Blob);\n }\n });\n },\n getSize(src: string | Blob | Buffer, crossOrigin?: string): Promise<{ width: number; height: number }> {\n return new Promise((resolve, reject) => {\n const image = new Image();\n\n if (crossOrigin === \"string\") {\n image.crossOrigin = crossOrigin;\n }\n\n image.onload = (): void => {\n resolve({ width: image.width, height: image.height });\n };\n image.onerror = image.onabort = reject;\n\n if (typeof src == \"string\") image.src = src;\n else\n browserImageTools\n .toDataURL(src)\n .then((url) => (image.src = url))\n .catch(reject);\n });\n }\n};\n","import { QRCornerDot } from \"../figures/corner-dot.js\";\nimport { QRCornerSquare } from \"../figures/corner-square.js\";\nimport { QRDot } from \"../figures/dot.js\";\nimport { browserImageTools } from \"../tools/browser-image-tools.js\";\nimport { Gradient, GradientType } from \"../utils/gradient.js\";\nimport { calculateImageSize } from \"../utils/image.js\";\nimport { Options, ShapeType } from \"../utils/options.js\";\nimport { numToAttr } from \"../utils/svg.js\";\n\nconst squareMask = [\n [1, 1, 1, 1, 1, 1, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 1, 1, 1, 1, 1, 1]\n];\n\nconst dotMask = [\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 1, 1, 1, 0, 0],\n [0, 0, 1, 1, 1, 0, 0],\n [0, 0, 1, 1, 1, 0, 0],\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0, 0, 0]\n];\n\nconst alignmentCount = [\n [35, 49],\n [28, 36],\n [21, 25],\n [14, 16],\n [7, 9],\n [2, 4],\n [1, 1]\n];\n\nexport class QRSVG {\n private _element: SVGElement;\n\n get element() {\n return this._element;\n }\n\n private defs: SVGElement;\n\n private backgroundMask?: SVGElement;\n private backgroundMaskGroup?: SVGElement;\n\n private dotsMask?: SVGElement;\n private dotsMaskGroup?: SVGElement;\n\n private qr?: QRCode;\n private document: Document;\n private imageTools: typeof browserImageTools;\n\n constructor(\n private options: Pick<\n Options,\n | \"width\"\n | \"height\"\n | \"document\"\n | \"imageTools\"\n | \"image\"\n | \"imageOptions\"\n | \"dotsOptions\"\n | \"cornersDotOptions\"\n | \"cornersSquareOptions\"\n | \"backgroundOptions\"\n | \"shape\"\n > & { errorCorrectionPercent: number }\n ) {\n this.document = options.document;\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n const width = numToAttr(options.width);\n const height = numToAttr(options.height);\n this._element.setAttribute(\"width\", width);\n this._element.setAttribute(\"height\", height);\n this._element.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\n this.defs = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"defs\");\n this._element.appendChild(this.defs);\n this.imageTools = options.imageTools || browserImageTools;\n }\n\n get width(): number {\n return this.options.width;\n }\n\n get height(): number {\n return this.options.height;\n }\n\n async drawQR(qr: QRCode): Promise<void> {\n const count = qr.getModuleCount();\n const typeNumber = parseInt(((count - 17) / 4).toFixed(0), 10);\n const dotSize = this.options.dotsOptions.size;\n let drawImageSize = {\n hideXDots: 0,\n hideYDots: 0,\n width: 0,\n height: 0\n };\n\n this.qr = qr;\n\n if (this.options.image) {\n //We need it to get image size\n const size = await this.imageTools.getSize(this.options.image, this.options.imageOptions.crossOrigin);\n const { imageOptions, errorCorrectionPercent } = this.options;\n const coverLevel = imageOptions.imageSize * errorCorrectionPercent;\n const alignment = alignmentCount.find((v) => v[0] <= typeNumber) || [0, 0];\n const maxHiddenDots = Math.floor(coverLevel * (count * count - 3 * 8 * 8 - 2 * (count - 16) - alignment[1] * 25));\n\n drawImageSize = calculateImageSize({\n originalWidth: size.width,\n originalHeight: size.height,\n maxHiddenDots,\n maxHiddenAxisDots: count - 14,\n dotSize,\n margin: imageOptions.margin\n });\n }\n\n this.drawBackground();\n this.drawDots((i: number, j: number): boolean => {\n if (this.options.imageOptions.hideBackgroundDots) {\n if (\n i >= (count - drawImageSize.hideXDots) / 2 &&\n i < (count + drawImageSize.hideXDots) / 2 &&\n j >= (count - drawImageSize.hideYDots) / 2 &&\n j < (count + drawImageSize.hideYDots) / 2\n ) {\n return false;\n }\n }\n\n if (squareMask[i]?.[j] || squareMask[i - count + 7]?.[j] || squareMask[i]?.[j - count + 7]) {\n return false;\n }\n\n if (dotMask[i]?.[j] || dotMask[i - count + 7]?.[j] || dotMask[i]?.[j - count + 7]) {\n return false;\n }\n\n return true;\n });\n this.drawCorners();\n\n if (this.options.image && drawImageSize.width > 0 && drawImageSize.height > 0) {\n await this.drawImage({ width: drawImageSize.width, height: drawImageSize.height, count, dotSize });\n }\n }\n\n drawBackground(): void {\n const element = this._element;\n const options = this.options;\n\n if (element && options.backgroundOptions) {\n const gradientOptions = options.backgroundOptions.gradient;\n const color = options.backgroundOptions.color;\n\n this.createColor({\n options: gradientOptions,\n color: color,\n additionalRotation: 0,\n x: 0,\n y: 0,\n height: options.height,\n width: options.width,\n name: \"background-color\"\n });\n\n const size = Math.min(options.width, options.height);\n const element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n [this.backgroundMask, this.backgroundMaskGroup] = this.createMask(\"mask-background-color\");\n this.defs.appendChild(this.backgroundMask);\n\n element.setAttribute(\"x\", numToAttr((options.width - size) / 2));\n element.setAttribute(\"y\", numToAttr((options.height - size) / 2));\n element.setAttribute(\"width\", numToAttr(size));\n element.setAttribute(\"height\", numToAttr(size));\n element.setAttribute(\"rx\", numToAttr((size / 2) * (options.backgroundOptions.round || 0)));\n\n this.backgroundMaskGroup.appendChild(element);\n }\n }\n\n drawDots(filter?: (i: number, j: number) => boolean): void {\n if (!this.qr) {\n throw \"QR code is not defined\";\n }\n\n const options = this.options;\n const count = this.qr.getModuleCount();\n\n if (count > options.width || count > options.height) {\n throw \"The canvas is too small.\";\n }\n\n const minSize = Math.min(options.width, options.height);\n const dotSize = this.options.dotsOptions.size;\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\n const dot = new QRDot(options.dotsOptions.type, this.document);\n\n [this.dotsMask, this.dotsMaskGroup] = this.createMask(\"mask-dot-color\");\n this.defs.appendChild(this.dotsMask);\n\n for (let i = 0; i < count; i++) {\n for (let j = 0; j < count; j++) {\n if (filter && !filter(i, j)) {\n continue;\n }\n if (!this.qr?.isDark(j, i)) {\n continue;\n }\n\n dot.draw({\n x: xBeginning + i * dotSize,\n y: yBeginning + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean => {\n if (i + xOffset < 0 || j + yOffset < 0 || i + xOffset >= count || j + yOffset >= count) return false;\n if (filter && !filter(i + xOffset, j + yOffset)) return false;\n return !!this.qr && this.qr.isDark(j + yOffset, i + xOffset);\n }\n });\n\n if (dot.element && this.dotsMask) {\n this.dotsMaskGroup.appendChild(dot.element);\n }\n }\n }\n\n let colorX = xBeginning;\n let colorY = yBeginning;\n let colorCount = count;\n\n if (options.shape === ShapeType.circle) {\n const margin = (this.options.backgroundOptions && this.options.backgroundOptions.margin) || 0;\n const additionalDots = Math.floor((minSize / dotSize - count - 2 * margin) / 2);\n const fakeCount = count + additionalDots * 2;\n const xFakeBeginning = xBeginning - additionalDots * dotSize;\n const yFakeBeginning = yBeginning - additionalDots * dotSize;\n colorX = xFakeBeginning;\n colorY = yFakeBeginning;\n colorCount = count + additionalDots * 2;\n const fakeMatrix: number[][] = [];\n const center = Math.floor(fakeCount / 2);\n\n for (let i = 0; i < fakeCount; i++) {\n fakeMatrix[i] = [];\n for (let j = 0; j < fakeCount; j++) {\n if (\n i >= additionalDots - 1 &&\n i <= fakeCount - additionalDots &&\n j >= additionalDots - 1 &&\n j <= fakeCount - additionalDots\n ) {\n fakeMatrix[i][j] = 0;\n continue;\n }\n\n if (Math.sqrt((i - center) * (i - center) + (j - center) * (j - center)) > center) {\n fakeMatrix[i][j] = 0;\n continue;\n }\n\n //Get random dots from QR code to show it outside of QR code\n fakeMatrix[i][j] = this.qr.isDark(\n j - 2 * additionalDots < 0 ? j : j >= count ? j - 2 * additionalDots : j - additionalDots,\n i - 2 * additionalDots < 0 ? i : i >= count ? i - 2 * additionalDots : i - additionalDots\n )\n ? 1\n : 0;\n }\n }\n\n for (let i = 0; i < fakeCount; i++) {\n for (let j = 0; j < fakeCount; j++) {\n if (!fakeMatrix[i][j]) continue;\n\n dot.draw({\n x: xFakeBeginning + i * dotSize,\n y: yFakeBeginning + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean => {\n return !!fakeMatrix[i + xOffset]?.[j + yOffset];\n }\n });\n if (dot.element && this.dotsMask) {\n this.dotsMaskGroup.appendChild(dot.element);\n }\n }\n }\n }\n\n this.createColor({\n options: options.dotsOptions?.gradient,\n color: options.dotsOptions.color,\n additionalRotation: 0,\n x: colorX,\n y: colorY,\n height: colorCount * dotSize,\n width: colorCount * dotSize,\n name: \"dot-color\"\n });\n }\n\n drawCorners(): void {\n if (!this.qr) {\n throw \"QR code is not defined\";\n }\n\n const element = this._element;\n const options = this.options;\n\n if (!element) {\n throw \"Element code is not defined\";\n }\n\n const count = this.qr.getModuleCount();\n const dotSize = this.options.dotsOptions.size;\n const cornersSquareSize = dotSize * 7;\n const cornersDotSize = dotSize * 3;\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\n\n [\n [0, 0, 0],\n [1, 0, Math.PI / 2],\n [0, 1, -Math.PI / 2]\n ].forEach(([column, row, rotation]) => {\n const x = xBeginning + column * dotSize * (count - 7);\n const y = yBeginning + row * dotSize * (count - 7);\n let cornersSquareMask = this.dotsMask;\n let cornersSquareMaskGroup = this.dotsMaskGroup;\n let cornersDotMask = this.dotsMask;\n let cornersDotMaskGroup = this.dotsMaskGroup;\n\n if (options.cornersSquareOptions?.gradient || options.cornersSquareOptions?.color) {\n [cornersSquareMask, cornersSquareMaskGroup] = this.createMask(`mask-corners-square-color-${column}-${row}`);\n this.defs.appendChild(cornersSquareMask);\n cornersDotMask = cornersSquareMask;\n cornersDotMaskGroup = cornersSquareMaskGroup;\n\n this.createColor({\n options: options.cornersSquareOptions?.gradient,\n color: options.cornersSquareOptions?.color,\n additionalRotation: rotation,\n x,\n y,\n height: cornersSquareSize,\n width: cornersSquareSize,\n name: `corners-square-color-${column}-${row}`\n });\n }\n\n if (options.cornersSquareOptions?.type) {\n const cornersSquare = new QRCornerSquare(options.cornersSquareOptions.type, this.document);\n\n cornersSquare.draw({\n x,\n y,\n size: cornersSquareSize,\n rotation\n });\n\n if (cornersSquare.element && cornersSquareMaskGroup) {\n cornersSquareMaskGroup.appendChild(cornersSquare.element);\n }\n } else {\n const dot = new QRDot(options.dotsOptions.type, this.document);\n\n for (let i = 0; i < squareMask.length; i++) {\n for (let j = 0; j < squareMask[i].length; j++) {\n if (!squareMask[i]?.[j]) {\n continue;\n }\n\n dot.draw({\n x: x + i * dotSize,\n y: y + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean => !!squareMask[i + xOffset]?.[j + yOffset]\n });\n\n if (dot.element && cornersSquareMaskGroup) {\n cornersSquareMaskGroup.appendChild(dot.element);\n }\n }\n }\n }\n\n if (options.cornersDotOptions?.gradient || options.cornersDotOptions?.color) {\n [cornersDotMask, cornersDotMaskGroup] = this.createMask(`mask-corners-dot-color-${column}-${row}`);\n this.defs.appendChild(cornersDotMask);\n\n this.createColor({\n options: options.cornersDotOptions?.gradient,\n color: options.cornersDotOptions?.color,\n additionalRotation: rotation,\n x: x + dotSize * 2,\n y: y + dotSize * 2,\n height: cornersDotSize,\n width: cornersDotSize,\n name: `corners-dot-color-${column}-${row}`\n });\n }\n\n if (options.cornersDotOptions?.type) {\n const cornersDot = new QRCornerDot(options.cornersDotOptions.type, this.document);\n\n cornersDot.draw({\n x: x + dotSize * 2,\n y: y + dotSize * 2,\n size: cornersDotSize,\n rotation\n });\n\n if (cornersDot.element && cornersDotMaskGroup) {\n cornersDotMaskGroup.appendChild(cornersDot.element);\n }\n } else {\n const dot = new QRDot(options.dotsOptions.type, this.document);\n\n for (let i = 0; i < dotMask.length; i++) {\n for (let j = 0; j < dotMask[i].length; j++) {\n if (!dotMask[i]?.[j]) {\n continue;\n }\n\n dot.draw({\n x: x + i * dotSize,\n y: y + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean => !!dotMask[i + xOffset]?.[j + yOffset]\n });\n\n if (dot.element && cornersDotMaskGroup) {\n cornersDotMaskGroup.appendChild(dot.element);\n }\n }\n }\n }\n });\n }\n\n async drawImage({\n width,\n height,\n count,\n dotSize\n }: {\n width: number;\n height: number;\n count: number;\n dotSize: number;\n }): Promise<void> {\n const options = this.options;\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\n const margin = options.imageOptions.margin * dotSize;\n const dx = xBeginning + margin + (count * dotSize - width) / 2;\n const dy = yBeginning + margin + (count * dotSize - height) / 2;\n const dw = width - margin * 2;\n const dh = height - margin * 2;\n\n const imageUrl = await this.imageTools.toDataURL(options.image || \"\");\n let image: SVGElement = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"image\");\n image.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"xlink:href\", imageUrl || \"\");\n\n if (imageUrl.startsWith(\"data:image/svg+xml;\")) {\n let data = imageUrl.substring(19);\n const i = data.indexOf(\",\");\n const encoding = data.substring(0, i);\n data = data.substring(i + 1);\n\n switch (encoding) {\n case \"base64\":\n data = typeof atob == \"function\" ? atob(data) : Buffer.from(data, \"base64\").toString(\"utf8\");\n break;\n default:\n data = \"\";\n break;\n }\n\n if (data) {\n const container = new DOMParser().parseFromString(data, \"text/xml\");\n const rootEl = Array.from(container.getElementsByTagName(\"svg\"));\n if (rootEl.length) image = rootEl[0];\n }\n }\n\n image.setAttribute(\"x\", numToAttr(dx));\n image.setAttribute(\"y\", numToAttr(dy));\n image.setAttribute(\"width\", `${numToAttr(dw)}px`);\n image.setAttribute(\"height\", `${numToAttr(dh)}px`);\n\n this._element.appendChild(image);\n }\n\n private createColor({\n options,\n color,\n additionalRotation,\n x,\n y,\n height,\n width,\n name\n }: {\n options?: Gradient;\n color?: string;\n additionalRotation: number;\n x: number;\n y: number;\n height: number;\n width: number;\n name: string;\n }): void {\n const size = width > height ? width : height;\n const rect = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n rect.setAttribute(\"x\", numToAttr(x));\n rect.setAttribute(\"y\", numToAttr(y));\n rect.setAttribute(\"height\", numToAttr(height));\n rect.setAttribute(\"width\", numToAttr(width));\n rect.setAttribute(\"style\", `mask:url(#mask-${name})`);\n\n if (options) {\n let gradient: SVGElement;\n if (options.type === GradientType.radial) {\n gradient = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"radialGradient\");\n gradient.setAttribute(\"id\", name);\n gradient.setAttribute(\"gradientUnits\", \"userSpaceOnUse\");\n gradient.setAttribute(\"fx\", numToAttr(x + width / 2));\n gradient.setAttribute(\"fy\", numToAttr(y + height / 2));\n gradient.setAttribute(\"cx\", numToAttr(x + width / 2));\n gradient.setAttribute(\"cy\", numToAttr(y + height / 2));\n gradient.setAttribute(\"r\", numToAttr(size / 2));\n } else {\n const rotation = ((options.rotation || 0) + additionalRotation) % (2 * Math.PI);\n const positiveRotation = (rotation + 2 * Math.PI) % (2 * Math.PI);\n let x0 = x + width / 2;\n let y0 = y + height / 2;\n let x1 = x + width / 2;\n let y1 = y + height / 2;\n\n if (\n (positiveRotation >= 0 && positiveRotation <= 0.25 * Math.PI) ||\n (positiveRotation > 1.75 * Math.PI && positiveRotation <= 2 * Math.PI)\n ) {\n x0 = x0 - width / 2;\n y0 = y0 - (height / 2) * Math.tan(rotation);\n x1 = x1 + width / 2;\n y1 = y1 + (height / 2) * Math.tan(rotation);\n } else if (positiveRotation > 0.25 * Math.PI && positiveRotation <= 0.75 * Math.PI) {\n y0 = y0 - height / 2;\n x0 = x0 - width / 2 / Math.tan(rotation);\n y1 = y1 + height / 2;\n x1 = x1 + width / 2 / Math.tan(rotation);\n } else if (positiveRotation > 0.75 * Math.PI && positiveRotation <= 1.25 * Math.PI) {\n x0 = x0 + width / 2;\n y0 = y0 + (height / 2) * Math.tan(rotation);\n x1 = x1 - width / 2;\n y1 = y1 - (height / 2) * Math.tan(rotation);\n } else if (positiveRotation > 1.25 * Math.PI && positiveRotation <= 1.75 * Math.PI) {\n y0 = y0 + height / 2;\n x0 = x0 + width / 2 / Math.tan(rotation);\n y1 = y1 - height / 2;\n x1 = x1 - width / 2 / Math.tan(rotation);\n }\n\n gradient = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"linearGradient\");\n gradient.setAttribute(\"id\", name);\n gradient.setAttribute(\"gradientUnits\", \"userSpaceOnUse\");\n gradient.setAttribute(\"x1\", numToAttr(x0));\n gradient.setAttribute(\"y1\", numToAttr(y0));\n gradient.setAttribute(\"x2\", numToAttr(x1));\n gradient.setAttribute(\"y2\", numToAttr(y1));\n }\n\n options.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => {\n const stop = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"stop\");\n stop.setAttribute(\"offset\", `${numToAttr(100 * offset)}%`);\n stop.setAttribute(\"stop-color\", color);\n gradient.appendChild(stop);\n });\n\n rect.setAttribute(\"fill\", `url(#${name})`);\n this.defs.appendChild(gradient);\n } else if (color) {\n rect.setAttribute(\"fill\", color);\n }\n\n this._element.appendChild(rect);\n }\n\n private createMask(id: string) {\n const options = this.options;\n\n const mask = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"mask\");\n mask.setAttribute(\"id\", id);\n mask.setAttribute(\"maskUnits\", \"userSpaceOnUse\");\n mask.setAttribute(\"x\", \"0\");\n mask.setAttribute(\"y\", \"0\");\n mask.setAttribute(\"width\", numToAttr(options.width));\n mask.setAttribute(\"height\", numToAttr(options.height));\n\n const group = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n group.setAttribute(\"fill\", \"#fff\");\n mask.appendChild(group);\n\n return [mask, group];\n }\n}\n","interface ImageSizeOptions {\n originalHeight: number;\n originalWidth: number;\n maxHiddenDots: number;\n maxHiddenAxisDots?: number;\n dotSize: number;\n margin: number;\n}\n\ninterface ImageSizeResult {\n height: number;\n width: number;\n hideYDots: number;\n hideXDots: number;\n}\n\nexport function calculateImageSize({\n originalHeight,\n originalWidth,\n maxHiddenDots,\n maxHiddenAxisDots,\n dotSize,\n margin\n}: ImageSizeOptions): ImageSizeResult {\n const hideDots = { x: 0, y: 0 };\n const imageSize = { x: 0, y: 0 };\n\n if (\n originalHeight <= 0 ||\n originalWidth <= 0 ||\n maxHiddenDots <= 0 ||\n dotSize <= 0 ||\n 4 * margin ** 2 > maxHiddenDots\n ) {\n return {\n height: 0,\n width: 0,\n hideYDots: 0,\n hideXDots: 0\n };\n }\n\n //If set, ensure maxHiddenAxisDots is odd and at least 1\n if (maxHiddenAxisDots && maxHiddenAxisDots % 2 == 0) maxHiddenAxisDots = Math.max(1, maxHiddenAxisDots - 1);\n\n //Determine the bigger and smaller image dimension\n const dimMax = Math.max(originalWidth, originalHeight);\n const dimMin = Math.min(originalWidth, originalHeight);\n\n //Find max image size along the bigger dimension\n let lower = 0,\n upper = (maxHiddenAxisDots || maxHiddenDots) - 2 * margin;\n do {\n const size = lower + (upper - lower) / 2;\n let dotsMax = Math.max(1, Math.ceil(size + 2 * margin));\n if (dotsMax % 2 == 0) dotsMax++;\n let dotsMin = Math.max(1, Math.ceil((size * dimMin) / dimMax + 2 * margin));\n if (dotsMin % 2 == 0) dotsMin++;\n\n if (dotsMax * dotsMin > maxHiddenDots) upper = size;\n else lower = size;\n } while (Math.abs(lower - upper) > 0.001);\n\n //Calculate how many dots the given size corresponds to\n const size = lower;\n let hideMax = Math.max(1, Math.ceil(size + 2 * margin));\n if (hideMax % 2 == 0) hideMax++;\n let hideMin = Math.max(1, Math.ceil((size * dimMin) / dimMax + 2 * margin));\n if (hideMin % 2 == 0) hideMin++;\n\n //Set hidden dots along bigger and smaller dimension to the right axis\n if (originalWidth > originalHeight) {\n hideDots.x = hideMax;\n hideDots.y = hideMin;\n } else {\n hideDots.x = hideMin;\n hideDots.y = hideMax;\n }\n\n //Fit image to the hidden dots\n const maxW = (hideDots.x - 2 * margin) * dotSize;\n const maxH = (hideDots.y - 2 * margin) * dotSize;\n imageSize.x = maxW;\n imageSize.y = (maxW * originalHeight) / originalWidth;\n if (imageSize.y > maxH) {\n imageSize.y = maxH;\n imageSize.x = (maxH * originalWidth) / originalHeight;\n }\n\n return {\n height: Math.round(imageSize.y + 2 * margin * dotSize),\n width: Math.round(imageSize.x + 2 * margin * dotSize),\n hideYDots: hideDots.y,\n hideXDots: hideDots.x\n };\n}\n","import qrcode from \"qrcode-generator\";\nimport { RecursivePartial } from \"../types/helper.js\";\nimport { Mode } from \"../types/qrcode.js\";\nimport { mergeDeep } from \"../utils/merge.js\";\nimport { Options, ShapeType, defaultOptions, sanitizeOptions } from \"../utils/options.js\";\nimport { ErrorCorrectionPercents, getMode } from \"../utils/qrcode.js\";\nimport { QRSVG } from \"./qr-svg.js\";\n\nexport type ExtensionFunction = (svg: SVGElement, options: RecursivePartial<Options>) => void;\n\nexport class QRCodeStyling {\n private options: Options;\n private container?: HTMLElement;\n private qr?: QRCode;\n private extension?: ExtensionFunction;\n private svgDrawingPromise?: Promise<void>;\n private qrSVG?: QRSVG;\n\n get size() {\n if (this.qrSVG)\n return {\n width: this.qrSVG.width,\n height: this.qrSVG.height\n };\n return undefined;\n }\n\n constructor(options?: RecursivePartial<Options>) {\n this.options = options ? sanitizeOptions(mergeDeep(defaultOptions, options) as Options) : defaultOptions;\n this.update();\n }\n\n update(\n /** The same options as for initialization */\n options?: RecursivePartial<Options>\n ): void {\n if (this.container) this.container.innerHTML = \"\";\n\n this.options = options ? sanitizeOptions(mergeDeep(this.options, options) as Options) : this.options;\n\n if (!this.options.data) {\n return;\n }\n\n if (this.options.stringToBytesFuncs) {\n Object.assign(qrcode.stringToBytesFuncs, this.options.stringToBytesFuncs);\n delete this.options.stringToBytesFuncs;\n }\n\n this.qr = qrcode(this.options.qrOptions.typeNumber, this.options.qrOptions.errorCorrectionLevel);\n let mode = this.options.qrOptions.mode || getMode(this.options.data);\n if (mode == Mode.unicode) {\n qrcode.stringToBytes = qrcode.stringToBytesFuncs[\"UTF-8\"];\n mode = Mode.byte;\n } else {\n qrcode.stringToBytes = qrcode.stringToBytesFuncs[\"default\"];\n }\n this.qr.addData(this.options.data, mode);\n this.qr.make();\n\n this.setupSvg();\n\n this.append(this.container);\n }\n\n append(\n /** This container will be used for appending of the QR code */\n container?: HTMLElement\n ): void {\n if (!container) {\n return;\n }\n\n if (this.qrSVG?.element) {\n container.appendChild(this.qrSVG.element);\n }\n\n this.container = container;\n }\n\n /**\n *\n * @example\n *\n * ```js\n * const extension = (svg, options) => {\n * const { width, height } = options;\n * const size = Math.min(width, height);\n * const border = options.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n * const borderAttributes = {\n * fill: \"none\",\n * x: (width - size + 40) / 2,\n * y: (height - size + 40) / 2,\n * width: size - 40,\n * height: size - 40,\n * stroke: \"black\",\n * \"stroke-width\": 40,\n * rx: 100\n * };\n * Object.keys(borderAttributes).forEach((attribute) => {\n * border.setAttribute(attribute, borderAttributes[attribute]);\n * });\n * svg.appendChild(border);\n * };\n * ```\n */\n applyExtension(\n /** Extension is a function that takes svg and previously applied options and modifies an svg */\n extension: ExtensionFunction\n ): void {\n if (!extension) {\n throw \"Extension function should be defined.\";\n }\n\n this.extension = extension;\n this.update();\n }\n\n deleteExtension(): void {\n this.extension = undefined;\n this.update();\n }\n\n async serialize(): Promise<string | undefined> {\n if (!this.qr) throw \"QR code is empty\";\n\n if (!this.qrSVG?.element || !this.svgDrawingPromise) {\n this.setupSvg();\n }\n await this.svgDrawingPromise;\n\n if (!this.qrSVG?.element) {\n return;\n }\n\n const serializer = new XMLSerializer();\n let source = serializer.serializeToString(this.qrSVG.element);\n\n source = '<?xml version=\"1.0\" standalone=\"no\"?>\\r\\n' + source;\n return source;\n }\n\n private setupSvg(): void {\n if (!this.qr) {\n return;\n }\n const count = Math.ceil((this.options.shape == ShapeType.circle ? Math.sqrt(2) : 1) * this.qr.getModuleCount());\n const margin = (this.options.backgroundOptions && this.options.backgroundOptions.margin) || 0;\n const size = Math.ceil(this.options.dotsOptions.size * (count + 2 * margin));\n this.qrSVG = new QRSVG({\n ...this.options,\n width: size,\n height: size,\n errorCorrectionPercent: ErrorCorrectionPercents[this.options.qrOptions.errorCorrectionLevel]\n });\n\n this.svgDrawingPromise = this.qrSVG.drawQR(this.qr).then(() => {\n if (!this.qrSVG?.element) return;\n this.extension?.(this.qrSVG.element, this.options);\n });\n }\n}\n","export interface CanvasOptions {\n width: number;\n height: number;\n margin: number;\n}\n\nexport const defaultCanvasOptions: CanvasOptions = {\n width: 300,\n height: 300,\n margin: 0\n};\n\nexport function sanitizeCanvasOptions(options: CanvasOptions): CanvasOptions {\n const newOptions = { ...options };\n\n newOptions.width = Number(newOptions.width);\n newOptions.height = Number(newOptions.height);\n newOptions.margin = Number(newOptions.margin);\n\n if (newOptions.margin > Math.min(newOptions.width, newOptions.height)) {\n newOptions.margin = Math.min(newOptions.width, newOptions.height);\n }\n\n return newOptions;\n}\n","import { QRCodeStyling } from \"../core/qr-code-styling.js\";\nimport { RecursivePartial } from \"../types/helper.js\";\nimport { CanvasOptions, defaultCanvasOptions, sanitizeCanvasOptions } from \"../utils/canvas-options.js\";\nimport { mergeDeep } from \"../utils/merge.js\";\n\nexport enum FileExtension {\n svg = \"svg\",\n png = \"png\",\n jpeg = \"jpeg\",\n webp = \"webp\"\n}\n\nexport function drawToCanvas(\n qrCode: QRCodeStyling,\n options?: RecursivePartial<CanvasOptions>\n): { canvas: HTMLCanvasElement; canvasDrawingPromise: Promise<void> | undefined } | undefined {\n const { width, height, margin } = options\n ? sanitizeCanvasOptions(mergeDeep(defaultCanvasOptions, options) as CanvasOptions)\n : defaultCanvasOptions;\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = width;\n canvas.height = height;\n\n const size = Math.min(width, height) - 2 * margin;\n\n const canvasDrawingPromise = qrCode.serialize().then((xml) => {\n if (!xml) return;\n const svg64 = btoa(xml);\n const image64 = \"data:image/svg+xml;base64,\" + svg64;\n const image = new Image();\n\n return new Promise<void>((resolve, reject) => {\n image.onload = (): void => {\n // Ensure pixel-perfect rendering of SVG to avoid artefact, then downscale to requested size\n const aaFactor = Math.ceil((2 * size) / Math.min(image.width, image.height));\n let aaCanvas: HTMLCanvasElement | OffscreenCanvas;\n try {\n aaCanvas = new OffscreenCanvas(image.width * aaFactor, image.height * aaFactor);\n } catch (_) {\n // Fallback to regular canvas element\n aaCanvas = document.createElement(\"canvas\");\n aaCanvas.width = image.width * aaFactor;\n aaCanvas.height = image.height * aaFactor;\n }\n aaCanvas.getContext(\"2d\")?.drawImage(image, 0, 0, aaCanvas.width, aaCanvas.height);\n\n canvas?.getContext(\"2d\")?.drawImage(aaCanvas, (width - size) / 2, (height - size) / 2, size, size);\n resolve();\n };\n image.onerror = image.onabort = reject;\n\n image.src = image64;\n });\n });\n\n return { canvas, canvasDrawingPromise };\n}\n\nexport async function download(\n qrCode: QRCodeStyling,\n downloadOptions: `${FileExtension}` | { name?: string; extension: `${FileExtension}` },\n options?: RecursivePartial<CanvasOptions>\n): Promise<void> {\n let extension: `${FileExtension}` = FileExtension.png;\n let name = \"qr\";\n\n //TODO remove deprecated code in the v2\n if (typeof downloadOptions === \"string\") {\n extension = downloadOptions;\n console.warn(\n \"Extension is deprecated as argument for 'download' method, please pass object { name: '...', extension: '...' } as argument\"\n );\n } else if (typeof downloadOptions === \"object\" && downloadOptions !== null) {\n if (downloadOptions.name) {\n name = downloadOptions.name;\n }\n if (downloadOptions.extension) {\n extension = downloadOptions.extension;\n }\n }\n\n if (extension.toLowerCase() === \"svg\") {\n let source = await qrCode.serialize();\n source = '<?xml version=\"1.0\" standalone=\"no\"?>\\r\\n' + source;\n const url = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(source);\n downloadURI(url, `${name}.svg`);\n } else {\n const res = drawToCanvas(qrCode, options);\n if (!res) return;\n const { canvas, canvasDrawingPromise } = res;\n await canvasDrawingPromise;\n const url = canvas.toDataURL(`image/${extension}`);\n downloadURI(url, `${name}.${extension}`);\n }\n}\n\nexport function downloadURI(uri: string, name: string): void {\n const link = document.createElement(\"a\");\n link.download = name;\n link.href = uri;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n}\n","export { type ExtensionFunction, QRCodeStyling } from \"./core/qr-code-styling.js\";\nexport { FileExtension } from \"./tools/browser-utils.js\";\nexport { type RecursivePartial } from \"./types/helper.js\";\nexport { ErrorCorrectionLevel, Mode, TypeNumber } from \"./types/qrcode.js\";\nexport { type CanvasOptions } from \"./utils/canvas-options.js\";\nexport { type Gradient, GradientType } from \"./utils/gradient.js\";\nexport { CornerDotType, CornerSquareType, DotType, type Options, ShapeType } from \"./utils/options.js\";\nexport { ErrorCorrectionPercents } from \"./utils/qrcode.js\";\nimport * as _browserUtils from \"./tools/browser-utils.js\";\n\nexport const browserUtils: typeof _browserUtils | undefined = _browserUtils;\n"],"names":["qrcode","createDataURL","e","width","height","getPixel","gif","gifImage","lzwTable","r","_map","_size","_this","add","_this.add","key","contains","p","size","_this.size","indexOf","_this.indexOf","_this.contains","bitOutputStream","f","out","_bitLength","_bitBuffer","write","_this.write","data","length","writeByte","flush","_this.flush","_data","Array","setPixel","_this.setPixel","x","y","pixel","writeString","writeShort","bitLength","table","i","clearCode","String","fromCharCode","endCode","bitOut","byteOut","byteArrayOutputStream","dataIndex","s","c","O","toByteArray","lzwMinCodeSize","offset","raster","writeBytes","b","base64","base64EncodeOutputStream","encode","u","n","_buffer","_buflen","_length","_base64","_this.writeByte","padlen","toString","_this.toString","h","g","bytes","v","_bytes","push","_this.writeShort","_this.writeBytes","off","len","_this.writeString","charCodeAt","_this.toByteArray","qrBitBuffer","getBuffer","_this.getBuffer","getAt","_this.getAt","index","Math","floor","put","_this.put","num","putBit","getLengthInBits","_this.getLengthInBits","_this.putBit","bit","bufIndex","typeNumber","errorCorrectionLevel","escapeXml","escaped","charAt","t","setupPositionProbePattern","row","col","_moduleCount","_modules","makeImpl","test","maskPattern","_typeNumber","modules","moduleCount","q","pos","QRUtil","getPatternPosition","j","getBCHTypeInfo","_errorCorrectionLevel","mod","bits","getBCHTypeNumber","_dataCache","rsBlocks","QRRSBlock","getRSBlocks","buffer","_dataList","getMode","getLength","totalDataCount","dataCount","PAD0","PAD1","maxEcCount","maxDcCount","dcdata","ecdata","dcCount","ecCount","totalCount","max","w","R","rsPoly","getErrorCorrectPolynomial","qrPolynomial","N","modIndex","modPoly","totalCodeCount","Q","inc","bitIndex","maskFunc","getMaskFunction","dark","byteIndex","QRErrorCorrectionLevel","addData","_this.addData","mode","newData","qrNumber","strToNum","_this.getMode","_this.getLength","substring","qrAlphaNum","getCode","MODE_ALPHA_NUM","qr8BitByte","stringToBytes","qrKanji","stringToBytesFuncs","SJIS","code","isDark","_this.isDark","getModuleCount","_this.getModuleCount","z","make","_this.make","pattern","minLostPoint","lostPoint","getLostPoint","createTableTag","_this.createTableTag","cellSize","margin","qrHtml","createSvgTag","_this.createSvgTag","alt","title","opts","text","id","rect","qrSvg","scalable","join","trim","mr","mc","_this.createDataURL","min","createImgTag","_this.createImgTag","img","createASCII","_this.createASCII","blocks","blocksLastLineNoMargin","ascii","r1","r2","l","C","white","black","line","renderTo2dContext","_this.renderTo2dContext","context","fillStyle","fillRect","I","shift","_num","multiply","_this.multiply","QRMath","gexp","glog","L","_this.mod","ratio","default","createStringToBytes","qrcode.createStringToBytes","unicodeData","numChars","unicodeMap","read","bin","base64DecodeInputStream","str","decode","_pos","_this.read","match","count","b0","b1","b2","b3","console","log","JSON","stringify","unknownChar","RS_BLOCK_TABLE","M","H","getBCHDigit","digit","PATTERN_POSITION_TABLE","_this.getBCHTypeInfo","d","G15","G15_MASK","_this.getBCHTypeNumber","G18","_this.getPatternPosition","_this.getMaskFunction","PATTERN000","PATTERN001","PATTERN010","PATTERN011","PATTERN100","PATTERN101","PATTERN110","PATTERN111","_this.getErrorCorrectPolynomial","errorCorrectLength","a","type","MODE_NUMBER","MODE_8BIT_BYTE","MODE_KANJI","_this.getLostPoint","sameCount","darkCount","abs","EXP_TABLE","LOG_TABLE","_this.glog","_this.gexp","_this.getRSBlocks","rsBlock","getRsBlockTable","list","call","J","utf8","charcode","module","exports","TypeNumber","fill","map","_","ErrorCorrectionLevel","fa","Mode","ha","numeric","alphanumeric","kanji","unicode","isObject","obj","isArray","mergeDeep","target","sources","undefined","source","Object","keys","forEach","targetValue","sourceValue","assign","GradientType","la","sanitizeGradient","gradient","colorStops","newGradient","rotation","Number","colorStop","radial","linear","DotType","V","dot","randomDot","rounded","verticalLine","horizontalLine","classy","classyRounded","square","smallSquare","extraRounded","diamond","CornerDotType","na","heart","outpoint","inpoint","CornerSquareType","pa","ShapeType","ra","circle","defaultOptions","document","shape","qrOptions","imageOptions","hideBackgroundDots","imageSize","crossOrigin","dotsOptions","color","sanitizeOptions","options","newOptions","round","cornersSquareOptions","cornersDotOptions","backgroundOptions","ErrorCorrectionPercents","rx","numToAttr","X","value","toFixed","replace","Y","strings","values","reduce","element","_element","constructor","this","draw","args","drawFunction","drawSquare","drawHeart","drawRounded","drawClassy","drawInpoint","drawOutpoint","drawDot","rotateFigure","setAttribute","PI","cx","cy","basicDot","createElementNS","basicSquare","basicHeart","move","path","toUpperCase","basicRounded","basicClassy","svgPath","dotSize","basicInpoint","scaleFactor","drawExtraRounded","basicExtraRounded","drawRandomDot","drawClassyRounded","drawVerticalLine","drawHorizontalLine","drawDiamond","drawSmallSquare","basicSideRounded","basicCornerRounded","basicCornerExtraRounded","basicCornersRounded","random","getNeighbor","leftNeighbor","rightNeighbor","topNeighbor","neighborsCount","bottomNeighbor","browserImageTools","toDataURL","url","Promise","resolve","reject","xhr","XMLHttpRequest","onload","xhr.onload","reader","FileReader","onloadend","reader.onloadend","result","readAsDataURL","response","onerror","onabort","ontimeout","open","responseType","send","getSize","src","image","Image","then","catch","squareMask","dotMask","alignmentCount","QRSVG","defs","appendChild","imageTools","drawQR","qr","parseInt","drawImageSize","hideXDots","hideYDots","errorCorrectionPercent","coverLevel","alignment","find","originalHeight","originalWidth","maxHiddenDots","maxHiddenAxisDots","dimMax","dimMin","lower","upper","dotsMax","ceil","dotsMin","K","hideMax","hideMin","maxW","maxH","calculateImageSize","drawBackground","drawDots","drawCorners","drawImage","createColor","additionalRotation","name","backgroundMask","backgroundMaskGroup","createMask","filter","minSize","QRDot","dotsMask","dotsMaskGroup","xBeginning","yBeginning","xOffset","yOffset","colorX","colorY","colorCount","additionalDots","fakeCount","xFakeBeginning","fakeMatrix","center","sqrt","yFakeBeginning","column","cornersSquareMask","cornersSquareMaskGroup","cornersDotMask","cornersDotMaskGroup","cornersSquareSize","QRCornerSquare","cornersSquare","cornersDotSize","QRCornerDot","cornersDot","dx","dy","dh","setAttributeNS","imageUrl","startsWith","encoding","atob","Buffer","from","container","parseFromString","DOMParser","rootEl","getElementsByTagName","dw","x0","y0","y1","positiveRotation","tan","x1","stop","mask","group","qrSVG","update","innerHTML","byte","setupSvg","append","applyExtension","extension","deleteExtension","serialize","svgDrawingPromise","serializeToString","XMLSerializer","defaultCanvasOptions","FileExtension","Ka","La","qrCode","sanitizeCanvasOptions","canvas","createElement","xml","image64","btoa","aaFactor","aaCanvas","OffscreenCanvas","getContext","canvasDrawingPromise","downloadURI","Ma","uri","link","download","href","body","click","removeChild","svg","png","jpeg","webp","browserUtils","downloadOptions","warn","toLowerCase","res","drawToCanvas"],"mappings":"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ACC,SACD,UACC,SACD,QACA,IACA,OACA,SACA,QACA,SACA,IACA,KACA,SACA,SACA,QACA,SACA,QACA,IACA,SACA,SACA,QACA,SACA,IACA,GACA,SACA,KACC,SACA,OACD,IACA,SACA,SACA,SACA,QACA,SACA,QACA,IACA,KACA,SACA,QACA,SACA,IACA,SACA,SACA,SACA,SACA,IACA,KACA,SACA,KACA,SACA,IACA,KACA,SACA,SACA,QACA,SACA,KACA,IACA,SACA,SACA,OACA,SACA,IACA,SACA,EACA,SACA,SACA,SACA,QACA,IACA,SACA,SACA,GACA,SACA,IACA,UACC,SACD,UACC,SACD,UACC,QACD,IACA,UACC,SACD,UACC,QACD,UACC,QACD,IACA,SACA,EACA,SACA,SACA,SACA,SACA,IACA,KACA,SACA,KACA,SACA,KAOG9G,KAAKrP,GACY,sBACV,EACJkW,EAAOlW,EAAEoW,eAAiBpW,EACnBA,IAETlC,IACIkC,GAAI9D,EACJga,IACFlW,GAAc,GAATlC,EAAI,EAASP,EAAIC,KAEPwC,MAElBuI,KAAK,KAlIgC,CAsIpC8N,YAAAA,CAAarB,GACnB,IAAM9Y,KAAAA,EAAMqB,EAAAA,EAAGC,EAAAA,GAAQwX,OAElBS,aAAa,IACbT,EACHD,KAAM,KACJD,KAAKF,SAAWE,KAAK9B,SAAS+C,gBAAgB,6BAA8B,QACvEnB,KAAAA,SAASc,aAAa,IAAKxB,EAAU3W,IAC1CuX,KAAKF,SAASc,aAAa,IAAKxB,EAAU1W,IACrCoX,KAAAA,SAASc,aAAa,QAASxB,EAAUhY,SACzC0Y,SAASc,aAAa,SAAUxB,EAAUhY,IAC1C0Y,KAAAA,SAASc,aAAa,KAAMxB,EAAUhY,EAAO,SAC7C0Y,SAASc,aAAa,KAAMxB,EAAUhY,EAAO,GAAlD,GAZwC,CAiBtCoa,WAAAA,CAAYtB,GAClB,IAAM9Y,KAAAA,EAAMqB,EAAAA,EAAGC,EAAAA,GAAQwX,IACV9Y,EAAO,OACfuZ,aAAa,IACbT,EACHD,KAAM,KACJD,KAAKF,SAAWE,KAAK9B,SAAS+C,gBAAgB,6BAA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","x_google_ignoreList":[0]}