@atooyu/uxto-ui 1.1.33 → 1.1.35

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.
package/dist/index.js CHANGED
@@ -5051,558 +5051,484 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
5051
5051
  if (moduleCount.value === 0) return 0;
5052
5052
  return props.size / moduleCount.value;
5053
5053
  });
5054
- const QRCode = (() => {
5055
- const ECL = { L: 1, M: 0, Q: 3, H: 2 };
5056
- const MAX_LENGTH = [
5057
- [[], [0, 0], [0, 0], [0, 0], [0, 0]],
5058
- [[], [41, 25], [34, 20], [27, 16], [17, 10]],
5059
- [[], [77, 47], [63, 38], [48, 29], [34, 20]],
5060
- [[], [127, 77], [101, 61], [77, 47], [58, 35]],
5061
- [[], [187, 114], [149, 90], [111, 67], [82, 50]],
5062
- [[], [255, 154], [202, 122], [144, 87], [106, 64]],
5063
- [[], [322, 195], [255, 154], [178, 108], [139, 84]],
5064
- [[], [370, 224], [293, 178], [221, 134], [154, 93]],
5065
- [[], [461, 279], [365, 221], [262, 159], [202, 122]],
5066
- [[], [552, 335], [432, 262], [311, 189], [235, 143]],
5067
- [[], [652, 395], [513, 311], [366, 221], [288, 174]],
5068
- [[], [772, 468], [604, 366], [423, 259], [331, 200]],
5069
- [[], [883, 535], [691, 419], [509, 312], [374, 227]],
5070
- [[], [1022, 619], [796, 483], [603, 368], [427, 259]],
5071
- [[], [1101, 667], [871, 528], [651, 395], [462, 283]],
5072
- [[], [1250, 758], [991, 600], [734, 445], [540, 325]],
5073
- [[], [1408, 854], [1082, 656], [816, 488], [606, 374]],
5074
- [[], [1548, 938], [1212, 734], [909, 547], [682, 409]],
5075
- [[], [1725, 1046], [1346, 816], [970, 587], [766, 465]],
5076
- [[], [1903, 1153], [1500, 909], [1085, 660], [832, 514]],
5077
- [[], [2061, 1249], [1600, 970], [1156, 701], [901, 548]],
5078
- [[], [2232, 1352], [1708, 1035], [1258, 754], [965, 600]],
5079
- [[], [2409, 1460], [1872, 1134], [1364, 816], [1049, 644]],
5080
- [[], [2620, 1588], [2059, 1248], [1475, 889], [1117, 678]],
5081
- [[], [2812, 1704], [2188, 1326], [1588, 947], [1193, 729]],
5082
- [[], [3057, 1853], [2395, 1451], [1718, 1027], [1290, 783]],
5083
- [[], [3283, 1990], [2544, 1542], [1804, 1094], [1358, 830]],
5084
- [[], [3517, 2132], [2701, 1637], [1933, 1162], [1448, 887]],
5085
- [[], [3669, 2223], [2857, 1732], [2085, 1258], [1528, 936]],
5086
- [[], [3909, 2369], [3035, 1839], [2181, 1305], [1592, 970]],
5087
- [[], [4158, 2520], [3289, 1994], [2358, 1417], [1692, 1027]],
5088
- [[], [4417, 2677], [3486, 2113], [2473, 1488], [1770, 1074]],
5089
- [[], [4686, 2840], [3693, 2238], [2670, 1600], [1882, 1150]],
5090
- [[], [4965, 3009], [3909, 2369], [2805, 1696], [1963, 1190]],
5091
- [[], [5253, 3183], [4134, 2506], [2949, 1779], [2100, 1263]],
5092
- [[], [5529, 3351], [4343, 2632], [3081, 1861], [2201, 1336]],
5093
- [[], [5836, 3537], [4588, 2780], [3244, 1962], [2341, 1414]],
5094
- [[], [6153, 3729], [4775, 2894], [3417, 2071], [2463, 1489]],
5095
- [[], [6479, 3927], [5039, 3054], [3599, 2180], [2625, 1582]],
5096
- [[], [6743, 4087], [5313, 3220], [3791, 2289], [2735, 1655]],
5097
- [[], [7089, 4296], [5596, 3391], [3993, 2420], [2927, 1772]]
5098
- ];
5099
- const PAD0 = 236;
5100
- const PAD1 = 17;
5101
- const EXP_TABLE = new Array(256);
5102
- const LOG_TABLE = new Array(256);
5103
- for (let i = 0; i < 8; i++) {
5104
- EXP_TABLE[i] = 1 << i;
5105
- }
5106
- for (let i = 8; i < 256; i++) {
5107
- EXP_TABLE[i] = EXP_TABLE[i - 4] ^ EXP_TABLE[i - 5] ^ EXP_TABLE[i - 6] ^ EXP_TABLE[i - 8];
5108
- }
5109
- for (let i = 0; i < 255; i++) {
5110
- LOG_TABLE[EXP_TABLE[i]] = i;
5111
- }
5112
- function gmul(a, b) {
5113
- if (a === 0 || b === 0) return 0;
5114
- return EXP_TABLE[(LOG_TABLE[a] + LOG_TABLE[b]) % 255];
5115
- }
5116
- function getECC(data, eccCount) {
5117
- const gen = getGenerator(eccCount);
5118
- const ecc = new Array(eccCount).fill(0);
5119
- for (const byte of data) {
5120
- const temp = byte ^ ecc[0];
5121
- ecc.shift();
5122
- ecc.push(0);
5123
- for (let i = 0; i < eccCount; i++) {
5124
- ecc[i] ^= gmul(gen[i], temp);
5125
- }
5126
- }
5127
- return ecc;
5054
+ const ECL = { L: 1, M: 0, Q: 3, H: 2 };
5055
+ const ALIGNMENT_PATTERNS = {
5056
+ 1: [],
5057
+ 2: [6, 18],
5058
+ 3: [6, 22],
5059
+ 4: [6, 26],
5060
+ 5: [6, 30],
5061
+ 6: [6, 34],
5062
+ 7: [6, 22, 38],
5063
+ 8: [6, 24, 42],
5064
+ 9: [6, 26, 46],
5065
+ 10: [6, 28, 50],
5066
+ 11: [6, 30, 54],
5067
+ 12: [6, 32, 58],
5068
+ 13: [6, 34, 62],
5069
+ 14: [6, 26, 46, 66],
5070
+ 15: [6, 26, 48, 70],
5071
+ 16: [6, 26, 50, 74],
5072
+ 17: [6, 30, 54, 78],
5073
+ 18: [6, 30, 56, 82],
5074
+ 19: [6, 30, 58, 86],
5075
+ 20: [6, 34, 62, 90]
5076
+ };
5077
+ const RS_BLOCK_TABLE = [
5078
+ // Version 1
5079
+ [1, 26, 19],
5080
+ [1, 26, 16],
5081
+ [1, 26, 13],
5082
+ [1, 26, 9],
5083
+ // Version 2
5084
+ [1, 44, 34],
5085
+ [1, 44, 28],
5086
+ [1, 44, 22],
5087
+ [1, 44, 16],
5088
+ // Version 3
5089
+ [1, 70, 55],
5090
+ [1, 70, 44],
5091
+ [2, 35, 17],
5092
+ [2, 35, 13],
5093
+ // Version 4
5094
+ [1, 100, 80],
5095
+ [2, 50, 32],
5096
+ [2, 50, 24],
5097
+ [4, 25, 9],
5098
+ // Version 5
5099
+ [1, 134, 108],
5100
+ [2, 67, 43],
5101
+ [2, 33, 15, 2, 34, 16],
5102
+ [2, 33, 11, 2, 34, 12],
5103
+ // Version 6
5104
+ [2, 86, 68],
5105
+ [4, 43, 27],
5106
+ [4, 43, 19],
5107
+ [4, 43, 15],
5108
+ // Version 7
5109
+ [2, 98, 78],
5110
+ [4, 49, 31],
5111
+ [2, 32, 14, 4, 33, 15],
5112
+ [4, 39, 13, 1, 40, 14],
5113
+ // Version 8
5114
+ [2, 121, 97],
5115
+ [2, 60, 38, 2, 61, 39],
5116
+ [4, 40, 18, 2, 41, 19],
5117
+ [4, 40, 14, 2, 41, 15],
5118
+ // Version 9
5119
+ [2, 146, 116],
5120
+ [3, 58, 36, 2, 59, 37],
5121
+ [4, 36, 16, 4, 37, 17],
5122
+ [4, 36, 12, 4, 37, 13],
5123
+ // Version 10
5124
+ [2, 86, 68, 2, 87, 69],
5125
+ [4, 69, 43, 1, 70, 44],
5126
+ [6, 43, 19, 2, 44, 20],
5127
+ [6, 43, 15, 2, 44, 16],
5128
+ // Version 11
5129
+ [4, 101, 81],
5130
+ [1, 80, 50, 4, 81, 51],
5131
+ [4, 50, 22, 4, 51, 23],
5132
+ [3, 36, 12, 8, 37, 13],
5133
+ // Version 12
5134
+ [2, 116, 92, 2, 117, 93],
5135
+ [6, 58, 36, 2, 59, 37],
5136
+ [4, 46, 20, 6, 47, 21],
5137
+ [7, 42, 14, 4, 43, 15],
5138
+ // Version 13
5139
+ [4, 133, 107],
5140
+ [8, 59, 37, 1, 60, 38],
5141
+ [8, 44, 20, 4, 45, 21],
5142
+ [12, 33, 11, 4, 34, 12],
5143
+ // Version 14
5144
+ [3, 145, 115, 1, 146, 116],
5145
+ [4, 64, 40, 5, 65, 41],
5146
+ [11, 36, 16, 5, 37, 17],
5147
+ [11, 36, 12, 5, 37, 13],
5148
+ // Version 15
5149
+ [5, 109, 87, 1, 110, 88],
5150
+ [5, 65, 41, 5, 66, 42],
5151
+ [5, 54, 24, 7, 55, 25],
5152
+ [11, 36, 12, 7, 37, 13],
5153
+ // Version 16
5154
+ [5, 122, 98, 1, 123, 99],
5155
+ [7, 73, 45, 3, 74, 46],
5156
+ [15, 43, 19, 2, 44, 20],
5157
+ [3, 45, 15, 13, 46, 16],
5158
+ // Version 17
5159
+ [1, 135, 107, 5, 136, 108],
5160
+ [10, 74, 46, 1, 75, 47],
5161
+ [1, 50, 22, 15, 51, 23],
5162
+ [2, 42, 14, 17, 43, 15],
5163
+ // Version 18
5164
+ [5, 150, 120, 1, 151, 121],
5165
+ [9, 69, 43, 4, 70, 44],
5166
+ [17, 50, 22, 1, 51, 23],
5167
+ [2, 42, 14, 19, 43, 15],
5168
+ // Version 19
5169
+ [3, 141, 113, 4, 142, 114],
5170
+ [3, 70, 44, 11, 71, 45],
5171
+ [17, 47, 21, 4, 48, 22],
5172
+ [9, 39, 13, 16, 40, 14],
5173
+ // Version 20
5174
+ [3, 135, 107, 5, 136, 108],
5175
+ [3, 67, 41, 13, 68, 42],
5176
+ [15, 54, 24, 5, 55, 25],
5177
+ [15, 43, 15, 10, 44, 16]
5178
+ ];
5179
+ const GF_EXP = new Array(512);
5180
+ const GF_LOG = new Array(256);
5181
+ let gfX = 1;
5182
+ for (let gfI = 0; gfI < 255; gfI++) {
5183
+ GF_EXP[gfI] = gfX;
5184
+ GF_LOG[gfX] = gfI;
5185
+ gfX <<= 1;
5186
+ if (gfX & 256) {
5187
+ gfX ^= 285;
5128
5188
  }
5129
- function getGenerator(count) {
5130
- let gen = [1];
5189
+ }
5190
+ for (let gfI = 255; gfI < 512; gfI++) {
5191
+ GF_EXP[gfI] = GF_EXP[gfI - 255];
5192
+ }
5193
+ function gfMul(a, b) {
5194
+ if (a === 0 || b === 0) return 0;
5195
+ return GF_EXP[GF_LOG[a] + GF_LOG[b]];
5196
+ }
5197
+ function getRSBlocks(version, ecl) {
5198
+ const index = (version - 1) * 4 + ecl;
5199
+ const blockData = RS_BLOCK_TABLE[index];
5200
+ const blocks = [];
5201
+ if (blockData.length === 3) {
5202
+ const count = blockData[0];
5203
+ const total = blockData[1];
5204
+ const data = blockData[2];
5131
5205
  for (let i = 0; i < count; i++) {
5132
- const temp = new Array(gen.length + 1).fill(0);
5133
- for (let j = 0; j < gen.length; j++) {
5134
- temp[j] ^= gen[j];
5135
- temp[j + 1] ^= gmul(gen[j], EXP_TABLE[i]);
5136
- }
5137
- gen = temp;
5206
+ blocks.push({ totalCount: total, dataCount: data });
5138
5207
  }
5139
- return gen;
5140
- }
5141
- function getTypeNumber(data, ecl) {
5142
- const eclIdx = ECL[ecl];
5143
- for (let type = 1; type <= 40; type++) {
5144
- const maxLen = MAX_LENGTH[type][eclIdx + 1][2];
5145
- if (data.length <= maxLen) return type;
5208
+ } else if (blockData.length === 6) {
5209
+ const count1 = blockData[0];
5210
+ const total1 = blockData[1];
5211
+ const data1 = blockData[2];
5212
+ for (let i = 0; i < count1; i++) {
5213
+ blocks.push({ totalCount: total1, dataCount: data1 });
5214
+ }
5215
+ const count2 = blockData[3];
5216
+ const total2 = blockData[4];
5217
+ const data2 = blockData[5];
5218
+ for (let i = 0; i < count2; i++) {
5219
+ blocks.push({ totalCount: total2, dataCount: data2 });
5146
5220
  }
5147
- return 40;
5148
5221
  }
5149
- function createMatrix(typeNumber) {
5150
- const size = typeNumber * 4 + 17;
5151
- const matrix = [];
5152
- for (let i = 0; i < size; i++) {
5153
- matrix[i] = new Array(size).fill(null);
5222
+ return blocks;
5223
+ }
5224
+ function getECCodewords(data, ecCount) {
5225
+ let gen = [1];
5226
+ for (let i = 0; i < ecCount; i++) {
5227
+ const temp = new Array(gen.length + 1).fill(0);
5228
+ for (let j = 0; j < gen.length; j++) {
5229
+ temp[j] ^= gen[j];
5230
+ temp[j + 1] ^= gfMul(gen[j], GF_EXP[i]);
5154
5231
  }
5155
- return matrix;
5156
- }
5157
- function setupPositionDetectionPattern(matrix) {
5158
- const size = matrix.length;
5159
- const positions = [
5160
- [0, 0],
5161
- [size - 7, 0],
5162
- [0, size - 7]
5163
- ];
5164
- for (const [row, col] of positions) {
5165
- for (let r = 0; r < 7; r++) {
5166
- for (let c = 0; c < 7; c++) {
5167
- const val = r === 0 || r === 6 || c === 0 || c === 6 || r >= 2 && r <= 4 && c >= 2 && c <= 4 ? 1 : 0;
5168
- matrix[row + r][col + c] = val;
5169
- }
5170
- }
5232
+ gen = temp;
5233
+ }
5234
+ const ecc = new Array(ecCount).fill(0);
5235
+ for (const byte of data) {
5236
+ const factor = byte ^ ecc[0];
5237
+ ecc.shift();
5238
+ ecc.push(0);
5239
+ for (let i = 0; i < ecCount; i++) {
5240
+ ecc[i] ^= gfMul(gen[i + 1], factor);
5171
5241
  }
5172
5242
  }
5173
- function setupTimingPattern(matrix) {
5174
- const size = matrix.length;
5175
- for (let i = 8; i < size - 8; i++) {
5176
- const val = i % 2 === 0 ? 1 : 0;
5177
- if (matrix[6][i] === null) matrix[6][i] = val;
5178
- if (matrix[i][6] === null) matrix[i][6] = val;
5243
+ return ecc;
5244
+ }
5245
+ function createData(text, version, ecl) {
5246
+ const rsBlocks = getRSBlocks(version, ecl);
5247
+ let totalDataCount = 0;
5248
+ for (const block of rsBlocks) {
5249
+ totalDataCount += block.dataCount;
5250
+ }
5251
+ const buffer = [];
5252
+ buffer.push(0, 1, 0, 0);
5253
+ const cciBits = version <= 9 ? 8 : 16;
5254
+ for (let i = cciBits - 1; i >= 0; i--) {
5255
+ buffer.push(text.length >>> i & 1);
5256
+ }
5257
+ for (const char of text) {
5258
+ const code2 = char.charCodeAt(0);
5259
+ for (let i = 7; i >= 0; i--) {
5260
+ buffer.push(code2 >>> i & 1);
5179
5261
  }
5180
5262
  }
5181
- function setupAlignmentPattern(matrix, typeNumber) {
5182
- if (typeNumber < 2) return;
5183
- const positions = getAlignmentPositions(typeNumber);
5184
- for (const row of positions) {
5185
- for (const col of positions) {
5186
- if (matrix[row][col] !== null) continue;
5187
- for (let r = -2; r <= 2; r++) {
5188
- for (let c = -2; c <= 2; c++) {
5189
- const val = Math.abs(r) === 2 || Math.abs(c) === 2 || r === 0 && c === 0 ? 1 : 0;
5190
- matrix[row + r][col + c] = val;
5191
- }
5192
- }
5193
- }
5194
- }
5263
+ const totalBits = totalDataCount * 8;
5264
+ const termLen = Math.min(4, totalBits - buffer.length);
5265
+ for (let i = 0; i < termLen; i++) {
5266
+ buffer.push(0);
5195
5267
  }
5196
- function getAlignmentPositions(typeNumber) {
5197
- if (typeNumber === 1) return [];
5198
- const intervals = Math.floor(typeNumber / 7) + 1;
5199
- const size = typeNumber * 4 + 17;
5200
- const step = Math.ceil((size - 13) / (intervals + 1));
5201
- const positions = [6];
5202
- for (let i = 1; i <= intervals; i++) {
5203
- positions.push(6 + i * step);
5204
- }
5205
- positions[positions.length - 1] = size - 7;
5206
- return [...new Set(positions)].sort((a, b) => a - b);
5207
- }
5208
- function setupVersionInfo(matrix, typeNumber) {
5209
- if (typeNumber < 7) return;
5210
- const size = matrix.length;
5211
- let version = typeNumber;
5212
- for (let i = 0; i < 6; i++) {
5213
- for (let j = 0; j < 3; j++) {
5214
- matrix[size - 11 + j][i] = version & 1;
5215
- matrix[i][size - 11 + j] = version & 1;
5216
- version >>= 1;
5217
- }
5218
- }
5268
+ while (buffer.length % 8 !== 0) {
5269
+ buffer.push(0);
5219
5270
  }
5220
- function setupFormatInfo(matrix, eclIdx, maskPattern) {
5221
- const size = matrix.length;
5222
- const data = eclIdx << 3 | maskPattern;
5223
- let rem = data;
5224
- for (let i = 0; i < 10; i++) {
5225
- rem = rem << 1 ^ (rem >> 9) * 1335;
5226
- }
5227
- const format = (data << 10 | rem & 1023) ^ 21522;
5228
- const bits = [];
5229
- for (let i = 0; i < 15; i++) {
5230
- bits.push(format >> i & 1);
5231
- }
5232
- for (let i = 0; i < 6; i++) {
5233
- matrix[8][i] = bits[14 - i];
5234
- }
5235
- matrix[8][7] = bits[8];
5236
- matrix[8][8] = bits[7];
5237
- matrix[7][8] = bits[6];
5238
- for (let i = 9; i < 15; i++) {
5239
- matrix[14 - i][8] = bits[14 - i];
5271
+ let padIdx = 0;
5272
+ const pads = [236, 17];
5273
+ while (buffer.length < totalBits) {
5274
+ const pad = pads[padIdx];
5275
+ for (let i = 7; i >= 0; i--) {
5276
+ buffer.push(pad >>> i & 1);
5240
5277
  }
5241
- for (let i = 0; i < 8; i++) {
5242
- matrix[8][size - 8 + i] = bits[i];
5243
- }
5244
- for (let i = 8; i < 15; i++) {
5245
- matrix[size - 15 + i][8] = bits[14 - i];
5246
- }
5247
- matrix[size - 8][8] = 1;
5278
+ padIdx = (padIdx + 1) % 2;
5248
5279
  }
5249
- function createData(typeNumber, eclIdx, data) {
5250
- const rsBlocks = getRSBlocks(typeNumber, eclIdx);
5251
- let totalDataCount = 0;
5252
- for (const block of rsBlocks) {
5253
- totalDataCount += block.dataCount;
5280
+ const dataBytes = [];
5281
+ for (let i = 0; i < buffer.length; i += 8) {
5282
+ let byte = 0;
5283
+ for (let j = 0; j < 8; j++) {
5284
+ byte = byte << 1 | (buffer[i + j] || 0);
5254
5285
  }
5255
- const buffer = [];
5256
- buffer.push(4);
5257
- const cciBits = typeNumber < 10 ? 8 : typeNumber < 27 ? 16 : 16;
5258
- for (let i = cciBits - 1; i >= 0; i--) {
5259
- buffer.push(data.length >> i & 1);
5260
- }
5261
- for (const char of data) {
5262
- const code2 = char.charCodeAt(0);
5263
- for (let i = 7; i >= 0; i--) {
5264
- buffer.push(code2 >> i & 1);
5286
+ dataBytes.push(byte);
5287
+ }
5288
+ let dataIndex = 0;
5289
+ const ecData = [];
5290
+ const dcData = [];
5291
+ for (const block of rsBlocks) {
5292
+ const dc = dataBytes.slice(dataIndex, dataIndex + block.dataCount);
5293
+ dataIndex += block.dataCount;
5294
+ dcData.push(dc);
5295
+ const ecCount = block.totalCount - block.dataCount;
5296
+ ecData.push(getECCodewords(dc, ecCount));
5297
+ }
5298
+ const result = [];
5299
+ let maxDcCount = 0;
5300
+ let maxEcCount = 0;
5301
+ for (const block of rsBlocks) {
5302
+ maxDcCount = Math.max(maxDcCount, block.dataCount);
5303
+ maxEcCount = Math.max(maxEcCount, block.totalCount - block.dataCount);
5304
+ }
5305
+ for (let i = 0; i < maxDcCount; i++) {
5306
+ for (let j = 0; j < dcData.length; j++) {
5307
+ if (i < dcData[j].length) {
5308
+ result.push(dcData[j][i]);
5265
5309
  }
5266
5310
  }
5267
- const totalBits = totalDataCount * 8;
5268
- const termLen = Math.min(4, totalBits - buffer.length);
5269
- for (let i = 0; i < termLen; i++) {
5270
- buffer.push(0);
5311
+ }
5312
+ for (let i = 0; i < maxEcCount; i++) {
5313
+ for (let j = 0; j < ecData.length; j++) {
5314
+ if (i < ecData[j].length) {
5315
+ result.push(ecData[j][i]);
5316
+ }
5271
5317
  }
5272
- while (buffer.length % 8 !== 0) {
5273
- buffer.push(0);
5318
+ }
5319
+ return result;
5320
+ }
5321
+ function getMinVersion(text) {
5322
+ const CAPACITIES = [
5323
+ 0,
5324
+ 14,
5325
+ 26,
5326
+ 42,
5327
+ 62,
5328
+ 84,
5329
+ 106,
5330
+ 122,
5331
+ 152,
5332
+ 180,
5333
+ 213,
5334
+ 251,
5335
+ 287,
5336
+ 331,
5337
+ 362,
5338
+ 412,
5339
+ 450,
5340
+ 504,
5341
+ 560,
5342
+ 624,
5343
+ 666
5344
+ ];
5345
+ for (let v = 1; v <= 20; v++) {
5346
+ if (text.length <= CAPACITIES[v]) return v;
5347
+ }
5348
+ return 20;
5349
+ }
5350
+ function createQRCode(text, errorLevel) {
5351
+ const ecl = ECL[errorLevel] ?? 0;
5352
+ const version = getMinVersion(text);
5353
+ const size = version * 4 + 17;
5354
+ const mod = [];
5355
+ for (let i = 0; i < size; i++) {
5356
+ mod[i] = new Array(size).fill(-1);
5357
+ }
5358
+ const setModule = (row, col, value) => {
5359
+ if (row >= 0 && row < size && col >= 0 && col < size) {
5360
+ mod[row][col] = value;
5274
5361
  }
5275
- let padIdx = 0;
5276
- const pads = [PAD0, PAD1];
5277
- while (buffer.length < totalBits) {
5278
- const pad = pads[padIdx];
5279
- for (let i = 7; i >= 0; i--) {
5280
- buffer.push(pad >> i & 1);
5362
+ };
5363
+ const isSet = (row, col) => {
5364
+ return row >= 0 && row < size && col >= 0 && col < size && mod[row][col] !== -1;
5365
+ };
5366
+ const addFinderPattern = (baseRow, baseCol) => {
5367
+ for (let r = -1; r <= 7; r++) {
5368
+ for (let c = -1; c <= 7; c++) {
5369
+ const nr = baseRow + r;
5370
+ const nc = baseCol + c;
5371
+ if (nr < 0 || nr >= size || nc < 0 || nc >= size) continue;
5372
+ if (r >= 0 && r <= 6 && c >= 0 && c <= 6) {
5373
+ if (r === 0 || r === 6 || c === 0 || c === 6 || r >= 2 && r <= 4 && c >= 2 && c <= 4) {
5374
+ setModule(nr, nc, 1);
5375
+ } else {
5376
+ setModule(nr, nc, 0);
5377
+ }
5378
+ } else {
5379
+ setModule(nr, nc, 0);
5380
+ }
5281
5381
  }
5282
- padIdx = (padIdx + 1) % 2;
5283
5382
  }
5284
- const dataBytes = [];
5285
- let byteIdx = 0;
5286
- for (const block of rsBlocks) {
5287
- const blockData = [];
5288
- for (let i = 0; i < block.dataCount; i++) {
5289
- let byte = 0;
5290
- for (let j = 0; j < 8; j++) {
5291
- byte = byte << 1 | buffer[byteIdx++];
5383
+ };
5384
+ addFinderPattern(0, 0);
5385
+ addFinderPattern(size - 7, 0);
5386
+ addFinderPattern(0, size - 7);
5387
+ const addAlignmentPattern = (row, col) => {
5388
+ for (let r = -2; r <= 2; r++) {
5389
+ for (let c = -2; c <= 2; c++) {
5390
+ if (Math.abs(r) === 2 || Math.abs(c) === 2 || r === 0 && c === 0) {
5391
+ setModule(row + r, col + c, 1);
5392
+ } else {
5393
+ setModule(row + r, col + c, 0);
5292
5394
  }
5293
- blockData.push(byte);
5294
5395
  }
5295
- dataBytes.push(blockData);
5296
5396
  }
5297
- const eccBytes = [];
5298
- for (let i = 0; i < rsBlocks.length; i++) {
5299
- const ecc = getECC(dataBytes[i], rsBlocks[i].totalCount - rsBlocks[i].dataCount);
5300
- eccBytes.push(ecc);
5397
+ };
5398
+ const alignPositions = ALIGNMENT_PATTERNS[version] || [];
5399
+ for (const r of alignPositions) {
5400
+ for (const c of alignPositions) {
5401
+ if (isSet(r, c)) continue;
5402
+ addAlignmentPattern(r, c);
5301
5403
  }
5302
- const result = [];
5303
- let maxDataCount = 0;
5304
- for (const block of rsBlocks) {
5305
- maxDataCount = Math.max(maxDataCount, block.dataCount);
5404
+ }
5405
+ for (let i = 8; i < size - 8; i++) {
5406
+ setModule(6, i, i % 2 === 0 ? 1 : 0);
5407
+ setModule(i, 6, i % 2 === 0 ? 1 : 0);
5408
+ }
5409
+ setModule(size - 8, 8, 1);
5410
+ const reserved = [];
5411
+ for (let i = 0; i < size; i++) {
5412
+ reserved[i] = new Array(size).fill(false);
5413
+ }
5414
+ for (let r = 0; r < 9; r++) {
5415
+ for (let c = 0; c < 9; c++) {
5416
+ reserved[r][c] = true;
5306
5417
  }
5307
- for (let i = 0; i < maxDataCount; i++) {
5308
- for (let j = 0; j < rsBlocks.length; j++) {
5309
- if (i < dataBytes[j].length) {
5310
- result.push(dataBytes[j][i]);
5311
- }
5312
- }
5418
+ }
5419
+ for (let r = 0; r < 9; r++) {
5420
+ for (let c = size - 8; c < size; c++) {
5421
+ reserved[r][c] = true;
5313
5422
  }
5314
- let maxEccCount = 0;
5315
- for (const block of rsBlocks) {
5316
- maxEccCount = Math.max(maxEccCount, block.totalCount - block.dataCount);
5423
+ }
5424
+ for (let r = size - 8; r < size; r++) {
5425
+ for (let c = 0; c < 9; c++) {
5426
+ reserved[r][c] = true;
5317
5427
  }
5318
- for (let i = 0; i < maxEccCount; i++) {
5319
- for (let j = 0; j < rsBlocks.length; j++) {
5320
- if (i < eccBytes[j].length) {
5321
- result.push(eccBytes[j][i]);
5428
+ }
5429
+ for (let i = 0; i < size; i++) {
5430
+ reserved[6][i] = true;
5431
+ reserved[i][6] = true;
5432
+ }
5433
+ for (const r of alignPositions) {
5434
+ for (const c of alignPositions) {
5435
+ for (let dr = -2; dr <= 2; dr++) {
5436
+ for (let dc = -2; dc <= 2; dc++) {
5437
+ const nr = r + dr;
5438
+ const nc = c + dc;
5439
+ if (nr >= 0 && nr < size && nc >= 0 && nc < size) {
5440
+ reserved[nr][nc] = true;
5441
+ }
5322
5442
  }
5323
5443
  }
5324
5444
  }
5325
- return result;
5326
- }
5327
- function getRSBlocks(typeNumber, eclIdx) {
5328
- const RS_BLOCK_TABLE = [
5329
- [1, 26, 19],
5330
- [1, 26, 16],
5331
- [1, 26, 13],
5332
- [1, 26, 9],
5333
- [1, 44, 34],
5334
- [1, 44, 28],
5335
- [1, 44, 22],
5336
- [1, 44, 16],
5337
- [1, 70, 55],
5338
- [1, 70, 44],
5339
- [2, 35, 17],
5340
- [2, 35, 13],
5341
- [1, 100, 80],
5342
- [2, 50, 32],
5343
- [2, 50, 24],
5344
- [4, 25, 9],
5345
- [1, 134, 108],
5346
- [2, 67, 43],
5347
- [2, 33, 15, 2, 34, 16],
5348
- [2, 33, 11, 2, 34, 12],
5349
- [2, 86, 68],
5350
- [4, 43, 27],
5351
- [4, 43, 19],
5352
- [4, 43, 15],
5353
- [2, 98, 78],
5354
- [4, 49, 31],
5355
- [2, 32, 14, 4, 33, 15],
5356
- [4, 39, 13, 1, 40, 14],
5357
- [2, 121, 97],
5358
- [2, 60, 38, 2, 61, 39],
5359
- [4, 40, 18, 2, 41, 19],
5360
- [4, 40, 14, 2, 41, 15],
5361
- [2, 146, 116],
5362
- [3, 58, 36, 2, 59, 37],
5363
- [4, 36, 16, 4, 37, 17],
5364
- [4, 36, 12, 4, 37, 13],
5365
- [2, 86, 68, 2, 87, 69],
5366
- [4, 69, 43, 1, 70, 44],
5367
- [6, 43, 19, 2, 44, 20],
5368
- [6, 43, 15, 2, 44, 16],
5369
- [4, 101, 81],
5370
- [1, 80, 50, 4, 81, 51],
5371
- [4, 50, 22, 4, 51, 23],
5372
- [3, 36, 12, 8, 37, 13],
5373
- [2, 116, 92, 2, 117, 93],
5374
- [6, 58, 36, 2, 59, 37],
5375
- [4, 46, 20, 6, 47, 21],
5376
- [7, 42, 14, 4, 43, 15],
5377
- [4, 133, 107],
5378
- [8, 59, 37, 1, 60, 38],
5379
- [8, 44, 20, 4, 45, 21],
5380
- [12, 33, 11, 4, 34, 12],
5381
- [3, 145, 115, 1, 146, 116],
5382
- [4, 64, 40, 5, 65, 41],
5383
- [11, 36, 16, 5, 37, 17],
5384
- [11, 36, 12, 5, 37, 13],
5385
- [5, 109, 87, 1, 110, 88],
5386
- [5, 65, 41, 5, 66, 42],
5387
- [5, 54, 24, 7, 55, 25],
5388
- [11, 36, 12, 7, 37, 13],
5389
- [5, 122, 98, 1, 123, 99],
5390
- [7, 73, 45, 3, 74, 46],
5391
- [15, 43, 19, 2, 44, 20],
5392
- [3, 45, 15, 13, 46, 16],
5393
- [1, 135, 107, 5, 136, 108],
5394
- [10, 74, 46, 1, 75, 47],
5395
- [1, 50, 22, 15, 51, 23],
5396
- [2, 42, 14, 17, 43, 15],
5397
- [5, 150, 120, 1, 151, 121],
5398
- [9, 69, 43, 4, 70, 44],
5399
- [17, 50, 22, 1, 51, 23],
5400
- [2, 42, 14, 19, 43, 15],
5401
- [3, 141, 113, 4, 142, 114],
5402
- [3, 70, 44, 11, 71, 45],
5403
- [17, 47, 21, 4, 48, 22],
5404
- [9, 39, 13, 16, 40, 14],
5405
- [3, 135, 107, 5, 136, 108],
5406
- [3, 67, 41, 13, 68, 42],
5407
- [15, 54, 24, 5, 55, 25],
5408
- [15, 43, 15, 10, 44, 16],
5409
- [4, 144, 116, 4, 145, 117],
5410
- [17, 68, 42],
5411
- [17, 50, 22, 6, 51, 23],
5412
- [19, 46, 16, 6, 47, 17],
5413
- [2, 139, 111, 7, 140, 112],
5414
- [17, 74, 46],
5415
- [7, 54, 24, 16, 55, 25],
5416
- [34, 37, 13],
5417
- [4, 151, 121, 5, 152, 122],
5418
- [4, 75, 47, 14, 76, 48],
5419
- [11, 54, 24, 14, 55, 25],
5420
- [16, 45, 15, 14, 46, 16],
5421
- [6, 147, 117, 4, 148, 118],
5422
- [6, 73, 45, 14, 74, 46],
5423
- [11, 54, 24, 16, 55, 25],
5424
- [30, 46, 16, 2, 47, 17],
5425
- [8, 132, 106, 4, 133, 107],
5426
- [8, 75, 47, 13, 76, 48],
5427
- [7, 54, 24, 22, 55, 25],
5428
- [22, 45, 15, 13, 46, 16],
5429
- [10, 142, 114, 2, 143, 115],
5430
- [19, 74, 46, 4, 75, 47],
5431
- [28, 50, 22, 6, 51, 23],
5432
- [33, 46, 16, 4, 47, 17],
5433
- [8, 152, 122, 4, 153, 123],
5434
- [22, 73, 45, 3, 74, 46],
5435
- [8, 53, 23, 26, 54, 24],
5436
- [12, 45, 15, 28, 46, 16],
5437
- [3, 147, 117, 10, 148, 118],
5438
- [3, 73, 45, 23, 74, 46],
5439
- [4, 54, 24, 31, 55, 25],
5440
- [11, 45, 15, 31, 46, 16],
5441
- [7, 146, 116, 7, 147, 117],
5442
- [21, 73, 45, 7, 74, 46],
5443
- [1, 53, 23, 37, 54, 24],
5444
- [19, 45, 15, 26, 46, 16],
5445
- [5, 145, 115, 10, 146, 116],
5446
- [19, 75, 47, 10, 76, 48],
5447
- [15, 54, 24, 25, 55, 25],
5448
- [23, 45, 15, 25, 46, 16],
5449
- [13, 145, 115, 3, 146, 116],
5450
- [2, 74, 46, 29, 75, 47],
5451
- [42, 54, 24, 1, 55, 25],
5452
- [23, 45, 15, 28, 46, 16],
5453
- [17, 145, 115],
5454
- [10, 74, 46, 23, 75, 47],
5455
- [10, 54, 24, 35, 55, 25],
5456
- [19, 45, 15, 35, 46, 16],
5457
- [17, 145, 115, 1, 146, 116],
5458
- [14, 74, 46, 21, 75, 47],
5459
- [29, 54, 24, 19, 55, 25],
5460
- [11, 45, 15, 46, 46, 16],
5461
- [13, 145, 115, 6, 146, 116],
5462
- [14, 74, 46, 23, 75, 47],
5463
- [44, 54, 24, 7, 55, 25],
5464
- [59, 46, 16, 1, 47, 17],
5465
- [12, 151, 121, 7, 152, 122],
5466
- [12, 75, 47, 26, 76, 48],
5467
- [39, 54, 24, 14, 55, 25],
5468
- [22, 45, 15, 41, 46, 16],
5469
- [6, 151, 121, 14, 152, 122],
5470
- [6, 75, 47, 34, 76, 48],
5471
- [46, 54, 24, 10, 55, 25],
5472
- [2, 45, 15, 64, 46, 16],
5473
- [17, 152, 122, 4, 153, 123],
5474
- [29, 74, 46, 14, 75, 47],
5475
- [49, 54, 24, 10, 55, 25],
5476
- [24, 45, 15, 46, 46, 16],
5477
- [4, 152, 122, 18, 153, 123],
5478
- [13, 74, 46, 32, 75, 47],
5479
- [48, 54, 24, 14, 55, 25],
5480
- [42, 45, 15, 32, 46, 16],
5481
- [20, 147, 117, 4, 148, 118],
5482
- [40, 75, 47, 7, 76, 48],
5483
- [43, 54, 24, 22, 55, 25],
5484
- [10, 45, 15, 67, 46, 16],
5485
- [19, 148, 118, 6, 149, 119],
5486
- [18, 75, 47, 31, 76, 48],
5487
- [34, 54, 24, 34, 55, 25],
5488
- [20, 45, 15, 61, 46, 16]
5489
- ];
5490
- const idx = (typeNumber - 1) * 4 + eclIdx;
5491
- const block = RS_BLOCK_TABLE[idx];
5492
- const blocks = [];
5493
- if (block.length === 3) {
5494
- for (let i = 0; i < block[0]; i++) {
5495
- blocks.push({ totalCount: block[1], dataCount: block[2] });
5496
- }
5497
- } else {
5498
- for (let i = 0; i < block[0]; i++) {
5499
- blocks.push({ totalCount: block[1], dataCount: block[2] });
5500
- }
5501
- for (let i = 0; i < block[3]; i++) {
5502
- blocks.push({ totalCount: block[4], dataCount: block[5] });
5445
+ }
5446
+ reserved[size - 8][8] = true;
5447
+ const dataBytes = createData(text, version, ecl);
5448
+ let bitIndex = 0;
5449
+ let direction = -1;
5450
+ for (let col = size - 1; col >= 0; col -= 2) {
5451
+ if (col === 6) col = 5;
5452
+ for (let row = direction === -1 ? size - 1 : 0; direction === -1 ? row >= 0 : row < size; row += direction) {
5453
+ for (let c = 0; c < 2; c++) {
5454
+ const tc = col - c;
5455
+ if (!reserved[row][tc] && mod[row][tc] === -1) {
5456
+ let dark = false;
5457
+ if (bitIndex < dataBytes.length * 8) {
5458
+ const byteIndex = Math.floor(bitIndex / 8);
5459
+ const bitPos = 7 - bitIndex % 8;
5460
+ dark = (dataBytes[byteIndex] >>> bitPos & 1) === 1;
5461
+ }
5462
+ setModule(row, tc, dark ? 1 : 0);
5463
+ bitIndex++;
5464
+ }
5503
5465
  }
5504
5466
  }
5505
- return blocks;
5506
- }
5507
- function mapData(matrix, data, maskPattern) {
5508
- const size = matrix.length;
5509
- let bitIdx = 0;
5510
- let upward = true;
5511
- for (let col = size - 1; col >= 0; col -= 2) {
5512
- if (col === 6) col = 5;
5513
- for (let row = upward ? size - 1 : 0; upward ? row >= 0 : row < size; upward ? row-- : row++) {
5514
- for (let c = 0; c < 2; c++) {
5515
- const tc = col - c;
5516
- if (matrix[row][tc] === null) {
5517
- let bit = 0;
5518
- if (bitIdx < data.length * 8) {
5519
- bit = data[Math.floor(bitIdx / 8)] >> 7 - bitIdx % 8 & 1;
5520
- }
5521
- if (getMaskBit(maskPattern, row, tc)) {
5522
- bit ^= 1;
5523
- }
5524
- matrix[row][tc] = bit;
5525
- bitIdx++;
5526
- }
5467
+ direction = -direction;
5468
+ }
5469
+ const maskPattern = 0;
5470
+ for (let row = 0; row < size; row++) {
5471
+ for (let col = 0; col < size; col++) {
5472
+ if (!reserved[row][col] && mod[row][col] !== -1) {
5473
+ if ((row + col) % 2 === 0) {
5474
+ mod[row][col] = mod[row][col] === 1 ? 0 : 1;
5527
5475
  }
5528
5476
  }
5529
- upward = !upward;
5530
5477
  }
5531
5478
  }
5532
- function getMaskBit(pattern, row, col) {
5533
- switch (pattern) {
5534
- case 0:
5535
- return (row + col) % 2 === 0;
5536
- case 1:
5537
- return row % 2 === 0;
5538
- case 2:
5539
- return col % 3 === 0;
5540
- case 3:
5541
- return (row + col) % 3 === 0;
5542
- case 4:
5543
- return (Math.floor(row / 2) + Math.floor(col / 3)) % 2 === 0;
5544
- case 5:
5545
- return row * col % 2 + row * col % 3 === 0;
5546
- case 6:
5547
- return (row * col % 2 + row * col % 3) % 2 === 0;
5548
- case 7:
5549
- return ((row + col) % 2 + row * col % 3) % 2 === 0;
5550
- default:
5551
- return false;
5552
- }
5479
+ const formatData = ecl << 3 | maskPattern;
5480
+ let rem = formatData;
5481
+ for (let i = 0; i < 10; i++) {
5482
+ rem = rem << 1 ^ (rem >>> 9) * 1335;
5553
5483
  }
5554
- function generate(data, ecl) {
5555
- const eclIdx = ECL[ecl];
5556
- const typeNumber = getTypeNumber(data, ecl);
5557
- const matrix = createMatrix(typeNumber);
5558
- setupPositionDetectionPattern(matrix);
5559
- setupTimingPattern(matrix);
5560
- setupAlignmentPattern(matrix, typeNumber);
5561
- const size = matrix.length;
5562
- for (let i = 0; i < 9; i++) {
5563
- if (matrix[8][i] === null) matrix[8][i] = 0;
5564
- if (matrix[i][8] === null) matrix[i][8] = 0;
5565
- }
5566
- for (let i = 0; i < 8; i++) {
5567
- if (matrix[8][size - 1 - i] === null) matrix[8][size - 1 - i] = 0;
5568
- if (matrix[size - 1 - i][8] === null) matrix[size - 1 - i][8] = 0;
5569
- }
5570
- setupVersionInfo(matrix, typeNumber);
5571
- const dataBytes = createData(typeNumber, eclIdx, data);
5572
- mapData(matrix, dataBytes, 0);
5573
- setupFormatInfo(matrix, eclIdx, 0);
5574
- const result = [];
5575
- for (let row = 0; row < size; row++) {
5576
- result[row] = [];
5577
- for (let col = 0; col < size; col++) {
5578
- result[row][col] = matrix[row][col] === 1;
5579
- }
5484
+ const format = (formatData << 10 | rem & 1023) ^ 21522;
5485
+ const formatBits = [];
5486
+ for (let i = 14; i >= 0; i--) {
5487
+ formatBits.push(format >>> i & 1);
5488
+ }
5489
+ for (let i = 0; i < 6; i++) {
5490
+ mod[8][i] = formatBits[i];
5491
+ }
5492
+ mod[8][7] = formatBits[6];
5493
+ mod[8][8] = formatBits[7];
5494
+ mod[7][8] = formatBits[8];
5495
+ for (let i = 9; i < 15; i++) {
5496
+ mod[14 - i][8] = formatBits[i];
5497
+ }
5498
+ for (let i = 0; i < 8; i++) {
5499
+ mod[8][size - 1 - i] = formatBits[14 - i];
5500
+ }
5501
+ for (let i = 7; i < 15; i++) {
5502
+ mod[size - 1 - (14 - i)][8] = formatBits[14 - i];
5503
+ }
5504
+ const result = [];
5505
+ for (let r = 0; r < size; r++) {
5506
+ result[r] = [];
5507
+ for (let c = 0; c < size; c++) {
5508
+ result[r][c] = mod[r][c] === 1;
5580
5509
  }
5581
- return { modules: result, moduleCount: size };
5582
5510
  }
5583
- return { generate };
5584
- })();
5585
- const generateQRCode = () => {
5511
+ return { modules: result, moduleCount: size };
5512
+ }
5513
+ const generate = () => {
5586
5514
  if (!props.value) {
5587
5515
  modules.value = [];
5588
5516
  moduleCount.value = 0;
5589
5517
  return;
5590
5518
  }
5591
5519
  try {
5592
- const result = QRCode.generate(props.value, props.errorCorrectLevel);
5593
- modules.value = result.modules;
5594
- moduleCount.value = result.moduleCount;
5520
+ const qr = createQRCode(props.value, props.errorCorrectLevel);
5521
+ modules.value = qr.modules;
5522
+ moduleCount.value = qr.moduleCount;
5595
5523
  } catch (e) {
5596
5524
  console.error("QR Code generation failed:", e);
5597
5525
  modules.value = [];
5598
5526
  moduleCount.value = 0;
5599
5527
  }
5600
5528
  };
5601
- vue.watch(() => props.value, generateQRCode);
5602
- vue.watch(() => props.errorCorrectLevel, generateQRCode);
5603
- vue.onMounted(() => {
5604
- generateQRCode();
5605
- });
5529
+ vue.watch(() => props.value, generate);
5530
+ vue.watch(() => props.errorCorrectLevel, generate);
5531
+ vue.onMounted(generate);
5606
5532
  return (_ctx, _cache) => {
5607
5533
  return vue.openBlock(), vue.createElementBlock("view", {
5608
5534
  class: "u-qrcode",
@@ -5635,7 +5561,7 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
5635
5561
  };
5636
5562
  }
5637
5563
  });
5638
- const uQrcode = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-857cfd4f"]]);
5564
+ const uQrcode = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-97271d75"]]);
5639
5565
  const _hoisted_1 = { class: "u-barcode" };
5640
5566
  const _hoisted_2 = ["canvas-id"];
5641
5567
  const _hoisted_3 = ["src"];