@atooyu/uxto-ui 1.1.32 → 1.1.33

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
@@ -5046,305 +5046,562 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
5046
5046
  setup(__props) {
5047
5047
  const props = __props;
5048
5048
  const modules = vue.ref([]);
5049
+ const moduleCount = vue.ref(0);
5049
5050
  const cellSize = vue.computed(() => {
5050
- if (modules.value.length === 0) return 0;
5051
- return props.size / modules.value.length;
5051
+ if (moduleCount.value === 0) return 0;
5052
+ return props.size / moduleCount.value;
5052
5053
  });
5053
- const ECL_MAP = { L: 0, M: 1, Q: 2, H: 3 };
5054
- const DATA_CAPACITY = [
5055
- [17, 14, 11, 7],
5056
- [32, 26, 20, 14],
5057
- [53, 42, 32, 24],
5058
- [78, 62, 46, 34],
5059
- [106, 84, 60, 44],
5060
- [134, 106, 74, 58],
5061
- [154, 122, 86, 64],
5062
- [192, 152, 108, 84],
5063
- [230, 180, 130, 98],
5064
- [271, 213, 151, 119],
5065
- [321, 251, 177, 137],
5066
- [367, 287, 203, 155],
5067
- [425, 331, 241, 177],
5068
- [458, 362, 258, 194],
5069
- [520, 412, 292, 220],
5070
- [586, 450, 322, 250],
5071
- [644, 504, 364, 280],
5072
- [718, 560, 394, 310],
5073
- [792, 624, 442, 338],
5074
- [858, 666, 482, 382],
5075
- [929, 711, 509, 403],
5076
- [1003, 779, 565, 439],
5077
- [1091, 857, 611, 461],
5078
- [1171, 911, 661, 511],
5079
- [1273, 997, 715, 535],
5080
- [1367, 1059, 751, 593],
5081
- [1465, 1125, 805, 625],
5082
- [1528, 1190, 868, 658],
5083
- [1628, 1264, 908, 698],
5084
- [1732, 1370, 982, 742],
5085
- [1840, 1452, 1030, 790],
5086
- [1952, 1538, 1112, 842],
5087
- [2068, 1628, 1168, 898],
5088
- [2188, 1722, 1228, 958],
5089
- [2303, 1809, 1283, 983],
5090
- [2431, 1911, 1351, 1051],
5091
- [2563, 1989, 1423, 1093],
5092
- [2699, 2099, 1499, 1139],
5093
- [2809, 2213, 1579, 1219],
5094
- [2953, 2331, 1663, 1273]
5095
- ];
5096
- const ECC_CODEWORDS = [
5097
- [7, 10, 13, 17],
5098
- [10, 16, 22, 28],
5099
- [15, 26, 36, 44],
5100
- [20, 36, 52, 64],
5101
- [26, 48, 72, 88],
5102
- [36, 64, 96, 112],
5103
- [40, 72, 108, 130],
5104
- [48, 88, 132, 156],
5105
- [60, 110, 160, 192],
5106
- [72, 130, 192, 224],
5107
- [80, 150, 224, 264],
5108
- [96, 176, 260, 308],
5109
- [104, 198, 288, 352],
5110
- [120, 216, 320, 384],
5111
- [132, 240, 360, 432],
5112
- [144, 280, 408, 480],
5113
- [168, 308, 448, 532],
5114
- [180, 338, 504, 588],
5115
- [196, 364, 546, 650],
5116
- [224, 416, 600, 700],
5117
- [224, 442, 644, 750],
5118
- [252, 476, 690, 816],
5119
- [270, 504, 750, 900],
5120
- [300, 560, 810, 960],
5121
- [312, 588, 870, 1050],
5122
- [336, 644, 952, 1110],
5123
- [360, 700, 1020, 1200],
5124
- [390, 728, 1050, 1260],
5125
- [420, 784, 1140, 1350],
5126
- [450, 812, 1200, 1440],
5127
- [480, 868, 1290, 1530],
5128
- [510, 924, 1350, 1620],
5129
- [540, 980, 1440, 1710],
5130
- [570, 1036, 1530, 1800],
5131
- [570, 1064, 1590, 1890],
5132
- [600, 1120, 1680, 1980],
5133
- [630, 1204, 1770, 2100],
5134
- [660, 1260, 1860, 2220],
5135
- [720, 1316, 1950, 2310],
5136
- [750, 1372, 2040, 2430]
5137
- ];
5138
- const GF_EXP = [];
5139
- const GF_LOG = [];
5140
- (function initGF() {
5141
- let x = 1;
5142
- for (let i = 0; i < 255; i++) {
5143
- GF_EXP[i] = x;
5144
- GF_LOG[x] = i;
5145
- x = x * 2;
5146
- if (x >= 256) x ^= 285;
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;
5147
5105
  }
5148
- for (let i = 255; i < 512; i++) {
5149
- GF_EXP[i] = GF_EXP[i - 255];
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];
5150
5108
  }
5151
- })();
5152
- function gfMul(a, b) {
5153
- if (a === 0 || b === 0) return 0;
5154
- return GF_EXP[GF_LOG[a] + GF_LOG[b]];
5155
- }
5156
- function rsEncode(data, eccCount) {
5157
- let gen = [1];
5158
- for (let i = 0; i < eccCount; i++) {
5159
- const temp = new Array(gen.length + 1).fill(0);
5160
- for (let j = 0; j < gen.length; j++) {
5161
- temp[j] ^= gen[j];
5162
- temp[j + 1] ^= gfMul(gen[j], GF_EXP[i]);
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
+ }
5163
5126
  }
5164
- gen = temp;
5165
- }
5166
- const ecc = new Array(eccCount).fill(0);
5167
- for (const byte of data) {
5168
- const factor = byte ^ ecc[0];
5169
- ecc.shift();
5170
- ecc.push(0);
5171
- for (let i = 0; i < eccCount; i++) {
5172
- ecc[i] ^= gfMul(gen[i], factor);
5127
+ return ecc;
5128
+ }
5129
+ function getGenerator(count) {
5130
+ let gen = [1];
5131
+ 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;
5173
5138
  }
5139
+ return gen;
5174
5140
  }
5175
- return ecc;
5176
- }
5177
- function getVersion(dataLength, ecl) {
5178
- const eclIdx = ECL_MAP[ecl] ?? 1;
5179
- for (let v = 0; v < 40; v++) {
5180
- if (DATA_CAPACITY[v][eclIdx] >= dataLength) return v + 1;
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;
5146
+ }
5147
+ return 40;
5181
5148
  }
5182
- return 40;
5183
- }
5184
- function generateQRCode(data, ecl) {
5185
- const eclIdx = ECL_MAP[ecl] ?? 1;
5186
- const version = getVersion(data.length, ecl);
5187
- const size = version * 4 + 17;
5188
- const matrix = [];
5189
- for (let i = 0; i < size; i++) {
5190
- matrix[i] = new Array(size).fill(-1);
5191
- }
5192
- function addFinder(row, col) {
5193
- for (let r = -1; r <= 7; r++) {
5194
- for (let c = -1; c <= 7; c++) {
5195
- const tr = row + r, tc = col + c;
5196
- if (tr >= 0 && tr < size && tc >= 0 && tc < size) {
5197
- if (r === -1 || r === 7 || c === -1 || c === 7) {
5198
- matrix[tr][tc] = 0;
5199
- } else if (r === 0 || r === 6 || c === 0 || c === 6 || r >= 2 && r <= 4 && c >= 2 && c <= 4) {
5200
- matrix[tr][tc] = 1;
5201
- } else {
5202
- matrix[tr][tc] = 0;
5203
- }
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);
5154
+ }
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;
5204
5169
  }
5205
5170
  }
5206
5171
  }
5207
5172
  }
5208
- addFinder(0, 0);
5209
- addFinder(size - 7, 0);
5210
- addFinder(0, size - 7);
5211
- for (let i = 8; i < size - 8; i++) {
5212
- matrix[6][i] = i % 2 === 0 ? 1 : 0;
5213
- matrix[i][6] = i % 2 === 0 ? 1 : 0;
5214
- }
5215
- if (version >= 2) {
5216
- const positions = [6];
5217
- const step = Math.ceil((size - 13) / (Math.floor(version / 7) + 1));
5218
- let pos = size - 7;
5219
- while (pos > 6) {
5220
- positions.unshift(pos);
5221
- pos -= step;
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;
5222
5179
  }
5180
+ }
5181
+ function setupAlignmentPattern(matrix, typeNumber) {
5182
+ if (typeNumber < 2) return;
5183
+ const positions = getAlignmentPositions(typeNumber);
5223
5184
  for (const row of positions) {
5224
5185
  for (const col of positions) {
5225
- if (matrix[row][col] !== -1) continue;
5186
+ if (matrix[row][col] !== null) continue;
5226
5187
  for (let r = -2; r <= 2; r++) {
5227
5188
  for (let c = -2; c <= 2; c++) {
5228
- const tr = row + r, tc = col + c;
5229
- if (tr >= 0 && tr < size && tc >= 0 && tc < size && matrix[tr][tc] === -1) {
5230
- matrix[tr][tc] = Math.abs(r) === 2 || Math.abs(c) === 2 || r === 0 && c === 0 ? 1 : 0;
5231
- }
5189
+ const val = Math.abs(r) === 2 || Math.abs(c) === 2 || r === 0 && c === 0 ? 1 : 0;
5190
+ matrix[row + r][col + c] = val;
5232
5191
  }
5233
5192
  }
5234
5193
  }
5235
5194
  }
5236
5195
  }
5237
- matrix[size - 8][8] = 1;
5238
- for (let i = 0; i < 9; i++) {
5239
- if (matrix[8][i] === -1) matrix[8][i] = 0;
5240
- if (matrix[i][8] === -1) matrix[i][8] = 0;
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
+ }
5241
5219
  }
5242
- for (let i = 0; i < 8; i++) {
5243
- if (matrix[8][size - 1 - i] === -1) matrix[8][size - 1 - i] = 0;
5244
- if (matrix[size - 1 - i][8] === -1) matrix[size - 1 - i][8] = 0;
5245
- }
5246
- const eccCount = ECC_CODEWORDS[version - 1][eclIdx];
5247
- const dataCapacity = DATA_CAPACITY[version - 1][eclIdx];
5248
- const bits = [];
5249
- bits.push(0, 1, 0, 0);
5250
- const cciBits = version <= 9 ? 8 : 16;
5251
- for (let i = cciBits - 1; i >= 0; i--) {
5252
- bits.push(data.length >> i & 1);
5253
- }
5254
- for (const char of data) {
5255
- const code2 = char.charCodeAt(0);
5256
- for (let i = 7; i >= 0; i--) {
5257
- bits.push(code2 >> i & 1);
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];
5258
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];
5240
+ }
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;
5259
5248
  }
5260
- const termLen = Math.min(4, dataCapacity * 8 - bits.length);
5261
- for (let i = 0; i < termLen; i++) bits.push(0);
5262
- while (bits.length % 8 !== 0) bits.push(0);
5263
- const padBytes = [236, 17];
5264
- let padIdx = 0;
5265
- while (bits.length < dataCapacity * 8) {
5266
- for (let i = 7; i >= 0; i--) {
5267
- bits.push(padBytes[padIdx] >> i & 1);
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;
5254
+ }
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);
5265
+ }
5266
+ }
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);
5268
5271
  }
5269
- padIdx = (padIdx + 1) % 2;
5270
- }
5271
- const dataBytes = [];
5272
- for (let i = 0; i < bits.length; i += 8) {
5273
- let b = 0;
5274
- for (let j = 0; j < 8; j++) b = b << 1 | (bits[i + j] || 0);
5275
- dataBytes.push(b);
5276
- }
5277
- const eccBytes = rsEncode(dataBytes, eccCount);
5278
- const codewords = [...dataBytes, ...eccBytes];
5279
- let bitIdx = 0;
5280
- let upward = true;
5281
- for (let col = size - 1; col >= 0; col -= 2) {
5282
- if (col === 6) col = 5;
5283
- for (let row = upward ? size - 1 : 0; upward ? row >= 0 : row < size; upward ? row-- : row++) {
5284
- for (let c = 0; c < 2; c++) {
5285
- const tc = col - c;
5286
- if (tc >= 0 && matrix[row][tc] === -1) {
5287
- let bit = 0;
5288
- if (bitIdx < codewords.length * 8) {
5289
- bit = codewords[Math.floor(bitIdx / 8)] >> 7 - bitIdx % 8 & 1;
5272
+ while (buffer.length % 8 !== 0) {
5273
+ buffer.push(0);
5274
+ }
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);
5281
+ }
5282
+ padIdx = (padIdx + 1) % 2;
5283
+ }
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++];
5292
+ }
5293
+ blockData.push(byte);
5294
+ }
5295
+ dataBytes.push(blockData);
5296
+ }
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);
5301
+ }
5302
+ const result = [];
5303
+ let maxDataCount = 0;
5304
+ for (const block of rsBlocks) {
5305
+ maxDataCount = Math.max(maxDataCount, block.dataCount);
5306
+ }
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
+ }
5313
+ }
5314
+ let maxEccCount = 0;
5315
+ for (const block of rsBlocks) {
5316
+ maxEccCount = Math.max(maxEccCount, block.totalCount - block.dataCount);
5317
+ }
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]);
5322
+ }
5323
+ }
5324
+ }
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] });
5503
+ }
5504
+ }
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++;
5290
5526
  }
5291
- matrix[row][tc] = bit;
5292
- bitIdx++;
5293
5527
  }
5294
5528
  }
5529
+ upward = !upward;
5295
5530
  }
5296
- upward = !upward;
5297
5531
  }
5298
- for (let row = 0; row < size; row++) {
5299
- for (let col = 0; col < size; col++) {
5300
- if (matrix[row][col] >= 0 && (row + col) % 2 === 0) {
5301
- matrix[row][col] = matrix[row][col] === 1 ? 0 : 1;
5302
- }
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;
5303
5552
  }
5304
5553
  }
5305
- const eclBits = { L: 1, M: 0, Q: 3, H: 2 }[ecl] ?? 0;
5306
- let formatData = eclBits << 3 | 0;
5307
- let rem = formatData;
5308
- for (let i = 0; i < 10; i++) {
5309
- rem = rem << 1 ^ (rem >> 9) * 1335;
5310
- }
5311
- const formatBits = (formatData << 10 | rem & 1023) ^ 21522;
5312
- const fb = [];
5313
- for (let i = 14; i >= 0; i--) {
5314
- fb.push(formatBits >> i & 1);
5315
- }
5316
- for (let i = 0; i < 6; i++) matrix[8][i] = fb[i];
5317
- matrix[8][7] = fb[6];
5318
- matrix[8][8] = fb[7];
5319
- matrix[7][8] = fb[8];
5320
- for (let i = 9; i < 15; i++) matrix[14 - i][8] = fb[i];
5321
- for (let i = 0; i < 8; i++) matrix[8][size - 8 + i] = fb[14 - i];
5322
- for (let i = 8; i < 15; i++) matrix[size - 15 + i][8] = fb[14 - i];
5323
- const result = [];
5324
- for (let row = 0; row < size; row++) {
5325
- result[row] = [];
5326
- for (let col = 0; col < size; col++) {
5327
- result[row][col] = matrix[row][col] === 1;
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
+ }
5328
5580
  }
5581
+ return { modules: result, moduleCount: size };
5329
5582
  }
5330
- return result;
5331
- }
5332
- const generate = () => {
5583
+ return { generate };
5584
+ })();
5585
+ const generateQRCode = () => {
5333
5586
  if (!props.value) {
5334
5587
  modules.value = [];
5588
+ moduleCount.value = 0;
5335
5589
  return;
5336
5590
  }
5337
5591
  try {
5338
- modules.value = generateQRCode(props.value, props.errorCorrectLevel);
5592
+ const result = QRCode.generate(props.value, props.errorCorrectLevel);
5593
+ modules.value = result.modules;
5594
+ moduleCount.value = result.moduleCount;
5339
5595
  } catch (e) {
5340
5596
  console.error("QR Code generation failed:", e);
5341
5597
  modules.value = [];
5598
+ moduleCount.value = 0;
5342
5599
  }
5343
5600
  };
5344
- vue.watch(() => props.value, generate);
5345
- vue.watch(() => props.errorCorrectLevel, generate);
5601
+ vue.watch(() => props.value, generateQRCode);
5602
+ vue.watch(() => props.errorCorrectLevel, generateQRCode);
5346
5603
  vue.onMounted(() => {
5347
- generate();
5604
+ generateQRCode();
5348
5605
  });
5349
5606
  return (_ctx, _cache) => {
5350
5607
  return vue.openBlock(), vue.createElementBlock("view", {
@@ -5378,7 +5635,7 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
5378
5635
  };
5379
5636
  }
5380
5637
  });
5381
- const uQrcode = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-eebb43a8"]]);
5638
+ const uQrcode = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-857cfd4f"]]);
5382
5639
  const _hoisted_1 = { class: "u-barcode" };
5383
5640
  const _hoisted_2 = ["canvas-id"];
5384
5641
  const _hoisted_3 = ["src"];