@particle-academy/react-fancy 5.36.0 → 5.36.2
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/CHANGELOG.md +55 -0
- package/dist/{chunk-6KFCJLJN.cjs → chunk-FBXYZC4Z.cjs} +37 -3
- package/dist/chunk-FBXYZC4Z.cjs.map +1 -0
- package/dist/{chunk-PK2FHI5R.js → chunk-ZDDWAVVZ.js} +37 -3
- package/dist/chunk-ZDDWAVVZ.js.map +1 -0
- package/dist/index.cjs +4 -4
- package/dist/index.js +1 -1
- package/dist/qr-code.cjs +4 -4
- package/dist/qr-code.d.cts +1 -1
- package/dist/qr-code.d.ts +1 -1
- package/dist/qr-code.js +1 -1
- package/docs/QrCode.md +1 -1
- package/package.json +1 -1
- package/dist/chunk-6KFCJLJN.cjs.map +0 -1
- package/dist/chunk-PK2FHI5R.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -11,6 +11,61 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
11
11
|
|
|
12
12
|
## [Unreleased]
|
|
13
13
|
|
|
14
|
+
## [5.36.2] - 2026-10-11
|
|
15
|
+
|
|
16
|
+
### Security
|
|
17
|
+
|
|
18
|
+
- **The `<QrCode>` example value was changed to an RFC 2606 reserved host.**
|
|
19
|
+
5.36.0 and 5.36.1 shipped a JSDoc `@example` — and therefore a string inside
|
|
20
|
+
`dist/qr-code.d.ts` — using a host of the form
|
|
21
|
+
`<name>.<tailnet>.ts.net:<port>/pair#<pin>`. That reads as a machine on a
|
|
22
|
+
private Tailscale network, and it arrived as an illustrative value in a
|
|
23
|
+
feature request rather than from anything in this repository.
|
|
24
|
+
|
|
25
|
+
It is now `https://device.example.com/pair#482913`. `example.com` is reserved
|
|
26
|
+
by RFC 2606 and can never resolve, so an example that is scanned or pasted
|
|
27
|
+
reaches nothing.
|
|
28
|
+
|
|
29
|
+
**Nothing to do** — no API changed, and the value only ever appeared in
|
|
30
|
+
documentation and examples, never in code that runs.
|
|
31
|
+
|
|
32
|
+
Why this is filed under Security rather than Docs: an example host in a
|
|
33
|
+
published package is copied, rendered on public pages, and in this case
|
|
34
|
+
**encoded into a scannable QR code**, which turns a documentation string into
|
|
35
|
+
a pointer anyone can follow with a phone. An example value is part of a
|
|
36
|
+
package's attack surface, and a reserved domain is the only kind that cannot
|
|
37
|
+
become one.
|
|
38
|
+
|
|
39
|
+
## [5.36.1] - 2026-10-11
|
|
40
|
+
|
|
41
|
+
### Security
|
|
42
|
+
|
|
43
|
+
- **`encodeQr` spent linear time on a value it was always going to refuse.**
|
|
44
|
+
`<QrCode>` renders a `value` the component did not author, and version
|
|
45
|
+
selection walked versions 1–40 re-encoding the payload at each one — so a
|
|
46
|
+
value too long to fit was encoded **forty times** before being rejected.
|
|
47
|
+
Measured on the built bundle: **342 ms for 100 kB, 2.0 s for 500 kB**,
|
|
48
|
+
linear, which is tens of seconds of blocked main thread for a few megabytes
|
|
49
|
+
through `<QrCode value={userInput} />`.
|
|
50
|
+
|
|
51
|
+
The refusal was always correct; the *cost* of the refusal was the defect. An
|
|
52
|
+
impossible value is now rejected from `value.length` alone — a character
|
|
53
|
+
count can never exceed a byte count, so a string longer than the largest
|
|
54
|
+
capacity any mode offers cannot fit in any of them. **500 kB now refuses in
|
|
55
|
+
0.0 ms**, and the legitimate path got faster too (the payload's bit length
|
|
56
|
+
depends on the version only through the character-count indicator, which has
|
|
57
|
+
three tiers, so it is computed at most three times rather than forty).
|
|
58
|
+
|
|
59
|
+
**Nothing to do** — the API, the thrown `RangeError` and every value that
|
|
60
|
+
previously encoded are unchanged, boundary cases included (2,953 bytes still
|
|
61
|
+
encodes; 2,954 still throws).
|
|
62
|
+
|
|
63
|
+
Worth stating why this was treated as a security fix rather than a
|
|
64
|
+
performance note: this encoder reaches consumers **as vendored source** via
|
|
65
|
+
`npx fancy-cli add qr-code`, not only as a package. Vendored source carries
|
|
66
|
+
no manifest, so no advisory, Dependabot alert or audit row would ever have
|
|
67
|
+
named it — the only time to fix it is before anyone copies it in.
|
|
68
|
+
|
|
14
69
|
## [5.36.0] - 2026-10-11
|
|
15
70
|
|
|
16
71
|
### Added
|
|
@@ -256,9 +256,33 @@ function encodePayload(value, mode, version) {
|
|
|
256
256
|
function payloadBits(value, mode, version) {
|
|
257
257
|
return encodePayload(value, mode, version).bits.length;
|
|
258
258
|
}
|
|
259
|
+
function maxCharacters(mode) {
|
|
260
|
+
const bits = blockLayout(MAX_VERSION, "L").dataCodewords * 8 - 4 - countBits(mode, MAX_VERSION);
|
|
261
|
+
if (mode === "numeric") {
|
|
262
|
+
return Math.floor(bits * 3 / 10);
|
|
263
|
+
}
|
|
264
|
+
if (mode === "alphanumeric") {
|
|
265
|
+
return Math.floor(bits * 2 / 11);
|
|
266
|
+
}
|
|
267
|
+
return Math.floor(bits / 8);
|
|
268
|
+
}
|
|
269
|
+
var ABSOLUTE_MAX_CHARACTERS = maxCharacters("numeric");
|
|
270
|
+
function tooLongToFit(value, mode) {
|
|
271
|
+
if (value.length > ABSOLUTE_MAX_CHARACTERS) {
|
|
272
|
+
return true;
|
|
273
|
+
}
|
|
274
|
+
return mode !== null && value.length > maxCharacters(mode);
|
|
275
|
+
}
|
|
259
276
|
function selectVersion(value, mode, ec, minVersion) {
|
|
277
|
+
const bitsForTier = /* @__PURE__ */ new Map();
|
|
260
278
|
for (let version = Math.max(minVersion, MIN_VERSION); version <= MAX_VERSION; version += 1) {
|
|
261
|
-
|
|
279
|
+
const width = countBits(mode, version);
|
|
280
|
+
let bits = bitsForTier.get(width);
|
|
281
|
+
if (bits === void 0) {
|
|
282
|
+
bits = payloadBits(value, mode, version);
|
|
283
|
+
bitsForTier.set(width, bits);
|
|
284
|
+
}
|
|
285
|
+
if (bits <= blockLayout(version, ec).dataCodewords * 8) {
|
|
262
286
|
return version;
|
|
263
287
|
}
|
|
264
288
|
}
|
|
@@ -510,7 +534,17 @@ function applyFormat(modules, ec, mask) {
|
|
|
510
534
|
}
|
|
511
535
|
function encodeQr(value, options = {}) {
|
|
512
536
|
const ec = options.errorCorrection ?? "M";
|
|
537
|
+
if (tooLongToFit(value, options.mode ?? null)) {
|
|
538
|
+
throw new RangeError(
|
|
539
|
+
`Value is too long for a QR code (${value.length} characters; the maximum any mode can carry is ${ABSOLUTE_MAX_CHARACTERS})`
|
|
540
|
+
);
|
|
541
|
+
}
|
|
513
542
|
const mode = options.mode ?? selectMode(value);
|
|
543
|
+
if (tooLongToFit(value, mode)) {
|
|
544
|
+
throw new RangeError(
|
|
545
|
+
`Value is too long for a QR code in ${mode} mode (${value.length} characters; the maximum is ${maxCharacters(mode)})`
|
|
546
|
+
);
|
|
547
|
+
}
|
|
514
548
|
if (mode === "numeric" && !/^[0-9]*$/.test(value)) {
|
|
515
549
|
throw new RangeError("Numeric mode accepts digits only");
|
|
516
550
|
}
|
|
@@ -626,5 +660,5 @@ QrCode.displayName = "QrCode";
|
|
|
626
660
|
exports.QrCode = QrCode;
|
|
627
661
|
exports.encodeQr = encodeQr;
|
|
628
662
|
exports.selectMode = selectMode;
|
|
629
|
-
//# sourceMappingURL=chunk-
|
|
630
|
-
//# sourceMappingURL=chunk-
|
|
663
|
+
//# sourceMappingURL=chunk-FBXYZC4Z.cjs.map
|
|
664
|
+
//# sourceMappingURL=chunk-FBXYZC4Z.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/QrCode/qr-tables.ts","../src/components/QrCode/qr-encode.ts","../src/components/QrCode/QrCode.tsx"],"names":["dataCodewords","forwardRef","useMemo","jsxs","cn","jsx"],"mappings":"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","file":"chunk-FBXYZC4Z.cjs","sourcesContent":["/**\n * ISO/IEC 18004 table data for the QR encoder. **Data, not logic** — kept in\n * its own module so the algorithm beside it can be read without scrolling past\n * 160 rows, and so a correction here is a diff that cannot touch behaviour.\n *\n * There is no formula for these: the block structure per version and error\n * correction level is a table in the standard. They were taken from the\n * published error-correction table at\n * <https://www.thonky.com/qr-code-tutorial/error-correction-table> rather than\n * recalled, and every row is checked by `qr-code.test.tsx` against three\n * equations that must all hold simultaneously:\n *\n * 1. `dataCodewords === g1Blocks * g1Size + g2Blocks * g2Size`\n * 2. `totalCodewords === dataCodewords + ecPerBlock * (g1Blocks + g2Blocks)`\n * 3. `totalCodewords === rawDataModules(version) / 8`, where\n * `rawDataModules` is counted from the matrix THIS code builds.\n *\n * The third is the one worth having: it ties a transcribed table to an\n * independently constructed matrix, so a mistyped row, a wrong alignment\n * pattern position and a wrong function-pattern layout cannot all agree.\n */\n\n/** Error correction level. Higher levels survive more damage and hold less. */\nexport type QrErrorCorrection = 'L' | 'M' | 'Q' | 'H';\n\nexport const EC_LEVELS: readonly QrErrorCorrection[] = ['L', 'M', 'Q', 'H'];\n\n/** The 2-bit indicator each level carries in the format information. */\nexport const EC_FORMAT_BITS: Record<QrErrorCorrection, number> = {\n L: 0b01,\n M: 0b00,\n Q: 0b11,\n H: 0b10,\n};\n\nexport interface BlockLayout {\n /** Data codewords in the whole symbol. */\n dataCodewords: number;\n /** Error correction codewords per block — the same for every block. */\n ecPerBlock: number;\n /** Blocks in group 1, and how many data codewords each holds. */\n g1Blocks: number;\n g1Size: number;\n /** Blocks in group 2 (always `g1Size + 1` each when present). */\n g2Blocks: number;\n g2Size: number;\n}\n\n/**\n * `[dataCodewords, ecPerBlock, g1Blocks, g1Size, g2Blocks, g2Size]` indexed by\n * `[version - 1]` then by EC level, in `L, M, Q, H` order.\n */\nconst BLOCK_TABLE: readonly (readonly [number, number, number, number, number, number])[][] = [\n // v1\n [[19, 7, 1, 19, 0, 0], [16, 10, 1, 16, 0, 0], [13, 13, 1, 13, 0, 0], [9, 17, 1, 9, 0, 0]],\n [[34, 10, 1, 34, 0, 0], [28, 16, 1, 28, 0, 0], [22, 22, 1, 22, 0, 0], [16, 28, 1, 16, 0, 0]],\n [[55, 15, 1, 55, 0, 0], [44, 26, 1, 44, 0, 0], [34, 18, 2, 17, 0, 0], [26, 22, 2, 13, 0, 0]],\n [[80, 20, 1, 80, 0, 0], [64, 18, 2, 32, 0, 0], [48, 26, 2, 24, 0, 0], [36, 16, 4, 9, 0, 0]],\n [[108, 26, 1, 108, 0, 0], [86, 24, 2, 43, 0, 0], [62, 18, 2, 15, 2, 16], [46, 22, 2, 11, 2, 12]],\n [[136, 18, 2, 68, 0, 0], [108, 16, 4, 27, 0, 0], [76, 24, 4, 19, 0, 0], [60, 28, 4, 15, 0, 0]],\n [[156, 20, 2, 78, 0, 0], [124, 18, 4, 31, 0, 0], [88, 18, 2, 14, 4, 15], [66, 26, 4, 13, 1, 14]],\n [[194, 24, 2, 97, 0, 0], [154, 22, 2, 38, 2, 39], [110, 22, 4, 18, 2, 19], [86, 26, 4, 14, 2, 15]],\n [[232, 30, 2, 116, 0, 0], [182, 22, 3, 36, 2, 37], [132, 20, 4, 16, 4, 17], [100, 24, 4, 12, 4, 13]],\n // v10\n [[274, 18, 2, 68, 2, 69], [216, 26, 4, 43, 1, 44], [154, 24, 6, 19, 2, 20], [122, 28, 6, 15, 2, 16]],\n [[324, 20, 4, 81, 0, 0], [254, 30, 1, 50, 4, 51], [180, 28, 4, 22, 4, 23], [140, 24, 3, 12, 8, 13]],\n [[370, 24, 2, 92, 2, 93], [290, 22, 6, 36, 2, 37], [206, 26, 4, 20, 6, 21], [158, 28, 7, 14, 4, 15]],\n [[428, 26, 4, 107, 0, 0], [334, 22, 8, 37, 1, 38], [244, 24, 8, 20, 4, 21], [180, 22, 12, 11, 4, 12]],\n [[461, 30, 3, 115, 1, 116], [365, 24, 4, 40, 5, 41], [261, 20, 11, 16, 5, 17], [197, 24, 11, 12, 5, 13]],\n [[523, 22, 5, 87, 1, 88], [415, 24, 5, 41, 5, 42], [295, 30, 5, 24, 7, 25], [223, 24, 11, 12, 7, 13]],\n [[589, 24, 5, 98, 1, 99], [453, 28, 7, 45, 3, 46], [325, 24, 15, 19, 2, 20], [253, 30, 3, 15, 13, 16]],\n [[647, 28, 1, 107, 5, 108], [507, 28, 10, 46, 1, 47], [367, 28, 1, 22, 15, 23], [283, 28, 2, 14, 17, 15]],\n [[721, 30, 5, 120, 1, 121], [563, 26, 9, 43, 4, 44], [397, 28, 17, 22, 1, 23], [313, 28, 2, 14, 19, 15]],\n [[795, 28, 3, 113, 4, 114], [627, 26, 3, 44, 11, 45], [445, 26, 17, 21, 4, 22], [341, 26, 9, 13, 16, 14]],\n // v20\n [[861, 28, 3, 107, 5, 108], [669, 26, 3, 41, 13, 42], [485, 30, 15, 24, 5, 25], [385, 28, 15, 15, 10, 16]],\n [[932, 28, 4, 116, 4, 117], [714, 26, 17, 42, 0, 0], [512, 28, 17, 22, 6, 23], [406, 30, 19, 16, 6, 17]],\n [[1006, 28, 2, 111, 7, 112], [782, 28, 17, 46, 0, 0], [568, 30, 7, 24, 16, 25], [442, 24, 34, 13, 0, 0]],\n [[1094, 30, 4, 121, 5, 122], [860, 28, 4, 47, 14, 48], [614, 30, 11, 24, 14, 25], [464, 30, 16, 15, 14, 16]],\n [[1174, 30, 6, 117, 4, 118], [914, 28, 6, 45, 14, 46], [664, 30, 11, 24, 16, 25], [514, 30, 30, 16, 2, 17]],\n [[1276, 26, 8, 106, 4, 107], [1000, 28, 8, 47, 13, 48], [718, 30, 7, 24, 22, 25], [538, 30, 22, 15, 13, 16]],\n [[1370, 28, 10, 114, 2, 115], [1062, 28, 19, 46, 4, 47], [754, 28, 28, 22, 6, 23], [596, 30, 33, 16, 4, 17]],\n [[1468, 30, 8, 122, 4, 123], [1128, 28, 22, 45, 3, 46], [808, 30, 8, 23, 26, 24], [628, 30, 12, 15, 28, 16]],\n [[1531, 30, 3, 117, 10, 118], [1193, 28, 3, 45, 23, 46], [871, 30, 4, 24, 31, 25], [661, 30, 11, 15, 31, 16]],\n [[1631, 30, 7, 116, 7, 117], [1267, 28, 21, 45, 7, 46], [911, 30, 1, 23, 37, 24], [701, 30, 19, 15, 26, 16]],\n // v30\n [[1735, 30, 5, 115, 10, 116], [1373, 28, 19, 47, 10, 48], [985, 30, 15, 24, 25, 25], [745, 30, 23, 15, 25, 16]],\n [[1843, 30, 13, 115, 3, 116], [1455, 28, 2, 46, 29, 47], [1033, 30, 42, 24, 1, 25], [793, 30, 23, 15, 28, 16]],\n [[1955, 30, 17, 115, 0, 0], [1541, 28, 10, 46, 23, 47], [1115, 30, 10, 24, 35, 25], [845, 30, 19, 15, 35, 16]],\n [[2071, 30, 17, 115, 1, 116], [1631, 28, 14, 46, 21, 47], [1171, 30, 29, 24, 19, 25], [901, 30, 11, 15, 46, 16]],\n [[2191, 30, 13, 115, 6, 116], [1725, 28, 14, 46, 23, 47], [1231, 30, 44, 24, 7, 25], [961, 30, 59, 16, 1, 17]],\n [[2306, 30, 12, 121, 7, 122], [1812, 28, 12, 47, 26, 48], [1286, 30, 39, 24, 14, 25], [986, 30, 22, 15, 41, 16]],\n [[2434, 30, 6, 121, 14, 122], [1914, 28, 6, 47, 34, 48], [1354, 30, 46, 24, 10, 25], [1054, 30, 2, 15, 64, 16]],\n [[2566, 30, 17, 122, 4, 123], [1992, 28, 29, 46, 14, 47], [1426, 30, 49, 24, 10, 25], [1096, 30, 24, 15, 46, 16]],\n [[2702, 30, 4, 122, 18, 123], [2102, 28, 13, 46, 32, 47], [1502, 30, 48, 24, 14, 25], [1142, 30, 42, 15, 32, 16]],\n [[2812, 30, 20, 117, 4, 118], [2216, 28, 40, 47, 7, 48], [1582, 30, 43, 24, 22, 25], [1222, 30, 10, 15, 67, 16]],\n // v40\n [[2956, 30, 19, 118, 6, 119], [2334, 28, 18, 47, 31, 48], [1666, 30, 34, 24, 34, 25], [1276, 30, 20, 15, 61, 16]],\n];\n\nexport const MIN_VERSION = 1;\nexport const MAX_VERSION = 40;\n\n/** Block structure for a version and error correction level. */\nexport function blockLayout(version: number, ec: QrErrorCorrection): BlockLayout {\n const row = BLOCK_TABLE[version - 1]?.[EC_LEVELS.indexOf(ec)];\n if (!row) {\n throw new RangeError(`No block layout for version ${version} level ${ec}`);\n }\n const [dataCodewords, ecPerBlock, g1Blocks, g1Size, g2Blocks, g2Size] = row;\n return { dataCodewords, ecPerBlock, g1Blocks, g1Size, g2Blocks, g2Size };\n}\n\n/**\n * The 15-bit format information for a level and mask, as published.\n *\n * These are a BCH(15,5) code XOR'd with a fixed mask, so they could be\n * computed — and the first draft did compute them. They are listed instead\n * because the computation and its verification would then share one\n * implementation: a wrong generator polynomial would produce a wrong table and\n * a test that agreed with it. A transcribed table cannot agree with a bug.\n *\n * Source: <https://www.thonky.com/qr-code-tutorial/format-version-tables>.\n * Indexed `[level][mask]`.\n */\nexport const FORMAT_BITS: Record<QrErrorCorrection, readonly number[]> = {\n L: [\n 0b111011111000100, 0b111001011110011, 0b111110110101010, 0b111100010011101,\n 0b110011000101111, 0b110001100011000, 0b110110001000001, 0b110100101110110,\n ],\n M: [\n 0b101010000010010, 0b101000100100101, 0b101111001111100, 0b101101101001011,\n 0b100010111111001, 0b100000011001110, 0b100111110010111, 0b100101010100000,\n ],\n Q: [\n 0b011010101011111, 0b011000001101000, 0b011111100110001, 0b011101000000110,\n 0b010010010110100, 0b010000110000011, 0b010111011011010, 0b010101111101101,\n ],\n H: [\n 0b001011010001001, 0b001001110111110, 0b001110011100111, 0b001100111010000,\n 0b000011101100010, 0b000001001010101, 0b000110100001100, 0b000100000111011,\n ],\n};\n\n/**\n * The 18-bit version information, present only for versions 7 and up.\n *\n * A BCH(18,6) code. Computed rather than tabled — 34 rows of 18 bits is more\n * transcription risk than the arithmetic is, and unlike the format bits there\n * are published values for versions 7, 8, 9, 10 and 40 to check it against,\n * which the test does.\n */\nexport function versionBits(version: number): number {\n let remainder = version;\n for (let i = 0; i < 12; i += 1) {\n remainder = (remainder << 1) ^ ((remainder >>> 11) * 0b1111100100101);\n }\n return ((version << 12) | remainder) >>> 0;\n}\n\n/**\n * Centre coordinates of the alignment patterns for a version.\n *\n * Derived rather than tabled, and the derivation is checked by the codeword\n * count equation in the test: a wrong position changes how many modules are\n * free for data, so the count would not match the block table.\n *\n * Version 32 is a genuine special case in the standard — its spacing does not\n * follow the rule the other versions do.\n */\nexport function alignmentPositions(version: number): number[] {\n if (version === 1) {\n return [];\n }\n const count = Math.floor(version / 7) + 2;\n const size = version * 4 + 17;\n const step = version === 32 ? 26 : Math.ceil((size - 13) / (count * 2 - 2)) * 2;\n\n const positions = [6];\n for (let pos = size - 7; positions.length < count; pos -= step) {\n positions.unshift(pos);\n }\n return positions.sort((a, b) => a - b);\n}\n","/**\n * A QR encoder, dependency-free.\n *\n * ISO/IEC 18004, versions 1–40, error correction L/M/Q/H, with numeric,\n * alphanumeric and byte modes and automatic selection between them. No\n * Kanji mode and no structured append — neither has a caller here, and an\n * untested branch in an encoder is worse than an absent one because the\n * failure is a code a phone silently refuses to read.\n *\n * Table data and its provenance live in `./qr-tables`.\n */\nimport {\n EC_FORMAT_BITS,\n FORMAT_BITS,\n MAX_VERSION,\n MIN_VERSION,\n alignmentPositions,\n blockLayout,\n versionBits,\n type QrErrorCorrection,\n} from './qr-tables';\n\nexport type { QrErrorCorrection };\n\n/** Which encoding mode a value is carried in. */\nexport type QrMode = 'numeric' | 'alphanumeric' | 'byte';\n\nconst MODE_INDICATOR: Record<QrMode, number> = { numeric: 0b0001, alphanumeric: 0b0010, byte: 0b0100 };\n\n/** The character set alphanumeric mode can carry, in its own index order. */\nconst ALPHANUMERIC = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:';\n\nexport interface QrSymbol {\n /** `size * size` modules, row-major. `true` is dark. */\n modules: boolean[][];\n /** Modules per side, `version * 4 + 17`. */\n size: number;\n version: number;\n errorCorrection: QrErrorCorrection;\n mode: QrMode;\n /** The mask pattern chosen by penalty scoring, 0–7. */\n mask: number;\n}\n\n// --- Galois field GF(256) --------------------------------------------------\n// Reed-Solomon over the field the standard specifies: primitive polynomial\n// x^8 + x^4 + x^3 + x^2 + 1 (0x11d), generator 2.\n\nconst EXP = new Uint8Array(256);\nconst LOG = new Uint8Array(256);\n{\n let x = 1;\n for (let i = 0; i < 255; i += 1) {\n EXP[i] = x;\n LOG[x] = i;\n x <<= 1;\n if (x & 0x100) {\n x ^= 0x11d;\n }\n }\n EXP[255] = EXP[0] as number;\n}\n\nfunction gfMul(a: number, b: number): number {\n if (a === 0 || b === 0) {\n return 0;\n }\n return EXP[((LOG[a] as number) + (LOG[b] as number)) % 255] as number;\n}\n\n/** The generator polynomial for `degree` error correction codewords. */\nfunction generatorPoly(degree: number): number[] {\n let poly = [1];\n for (let i = 0; i < degree; i += 1) {\n const next = new Array<number>(poly.length + 1).fill(0);\n for (let j = 0; j < poly.length; j += 1) {\n next[j] = (next[j] as number) ^ (poly[j] as number);\n next[j + 1] = (next[j + 1] as number) ^ gfMul(poly[j] as number, EXP[i] as number);\n }\n poly = next;\n }\n return poly;\n}\n\n/** Reed-Solomon remainder — the error correction codewords for one block. */\nfunction reedSolomon(data: readonly number[], degree: number): number[] {\n const generator = generatorPoly(degree);\n const remainder = new Array<number>(degree).fill(0);\n for (const byte of data) {\n const factor = byte ^ (remainder.shift() as number);\n remainder.push(0);\n for (let i = 0; i < degree; i += 1) {\n remainder[i] = (remainder[i] as number) ^ gfMul(generator[i + 1] as number, factor);\n }\n }\n return remainder;\n}\n\n// --- Mode selection and bit encoding ---------------------------------------\n\n/**\n * The narrowest mode that can carry `value`.\n *\n * Narrower is denser: numeric packs 3 digits into 10 bits where byte mode\n * would spend 24. A six-digit pairing PIN is a third of the size as numeric,\n * which is the difference between a code a phone reads across a desk and one\n * it does not.\n */\nexport function selectMode(value: string): QrMode {\n if (/^[0-9]*$/.test(value)) {\n return 'numeric';\n }\n if ([...value].every((char) => ALPHANUMERIC.includes(char))) {\n return 'alphanumeric';\n }\n return 'byte';\n}\n\n/** Bits in the character count indicator — it widens with version. */\nfunction countBits(mode: QrMode, version: number): number {\n const tier = version <= 9 ? 0 : version <= 26 ? 1 : 2;\n if (mode === 'numeric') {\n return [10, 12, 14][tier] as number;\n }\n if (mode === 'alphanumeric') {\n return [9, 11, 13][tier] as number;\n }\n return [8, 16, 16][tier] as number;\n}\n\nclass BitBuffer {\n readonly bits: number[] = [];\n\n push(value: number, length: number): void {\n for (let i = length - 1; i >= 0; i -= 1) {\n this.bits.push((value >>> i) & 1);\n }\n }\n}\n\n/** UTF-8 bytes for a string, without TextEncoder — jsdom and SSR both agree. */\nfunction utf8Bytes(value: string): number[] {\n const out: number[] = [];\n for (const char of value) {\n const code = char.codePointAt(0) as number;\n if (code < 0x80) {\n out.push(code);\n } else if (code < 0x800) {\n out.push(0xc0 | (code >> 6), 0x80 | (code & 0x3f));\n } else if (code < 0x10000) {\n out.push(0xe0 | (code >> 12), 0x80 | ((code >> 6) & 0x3f), 0x80 | (code & 0x3f));\n } else {\n out.push(\n 0xf0 | (code >> 18),\n 0x80 | ((code >> 12) & 0x3f),\n 0x80 | ((code >> 6) & 0x3f),\n 0x80 | (code & 0x3f),\n );\n }\n }\n return out;\n}\n\n/** The payload's own bits, before terminator and padding. */\nfunction encodePayload(value: string, mode: QrMode, version: number): BitBuffer {\n const buffer = new BitBuffer();\n buffer.push(MODE_INDICATOR[mode], 4);\n\n if (mode === 'numeric') {\n buffer.push(value.length, countBits(mode, version));\n for (let i = 0; i < value.length; i += 3) {\n const group = value.slice(i, i + 3);\n buffer.push(Number.parseInt(group, 10), group.length * 3 + 1);\n }\n return buffer;\n }\n\n if (mode === 'alphanumeric') {\n buffer.push(value.length, countBits(mode, version));\n for (let i = 0; i < value.length; i += 2) {\n const first = ALPHANUMERIC.indexOf(value[i] as string);\n if (i + 1 < value.length) {\n buffer.push(first * 45 + ALPHANUMERIC.indexOf(value[i + 1] as string), 11);\n } else {\n buffer.push(first, 6);\n }\n }\n return buffer;\n }\n\n const bytes = utf8Bytes(value);\n buffer.push(bytes.length, countBits(mode, version));\n for (const byte of bytes) {\n buffer.push(byte, 8);\n }\n return buffer;\n}\n\n/** How many bits the payload needs at a given version, mode included. */\nfunction payloadBits(value: string, mode: QrMode, version: number): number {\n return encodePayload(value, mode, version).bits.length;\n}\n\n/**\n * The most characters any mode can carry, at version 40 level L.\n *\n * DERIVED from the block table rather than transcribed, so it cannot disagree\n * with the capacities the encoder actually enforces. (The published figures\n * are 7089 / 4296 / 2953, and the test asserts these match them.)\n */\nexport function maxCharacters(mode: QrMode): number {\n const bits = blockLayout(MAX_VERSION, 'L').dataCodewords * 8 - 4 - countBits(mode, MAX_VERSION);\n if (mode === 'numeric') {\n return Math.floor((bits * 3) / 10);\n }\n if (mode === 'alphanumeric') {\n return Math.floor((bits * 2) / 11);\n }\n return Math.floor(bits / 8);\n}\n\n/** The largest capacity of any mode — the cheapest possible rejection. */\nconst ABSOLUTE_MAX_CHARACTERS = maxCharacters('numeric');\n\n/**\n * Reject an impossible value in O(1), before anything walks it.\n *\n * `value` is text this code did not author, and it reaches consumers two ways:\n * the package, and as VENDORED SOURCE via `fancy-cli add qr-code` — which\n * carries no manifest, so nothing watches it. So the question is what a hostile\n * caller gets out of it, and the answer used to be: a lot of work for free.\n *\n * `selectVersion` walks versions 1-40 and re-encoded the payload at each one,\n * so a value too long to fit was encoded FORTY times before being refused.\n * Measured on the built bundle: 342 ms for 100 kB, 2.0 s for 500 kB, linear —\n * so a few megabytes through `<QrCode value={userInput} />` blocks the main\n * thread for tens of seconds. The refusal was always correct; it was the COST\n * of the refusal that was the defect.\n *\n * A character count can only ever be <= the byte count, so a string longer than\n * the largest capacity cannot fit in any mode and is refused from `.length`\n * alone, touching none of it.\n */\nfunction tooLongToFit(value: string, mode: QrMode | null): boolean {\n if (value.length > ABSOLUTE_MAX_CHARACTERS) {\n return true;\n }\n return mode !== null && value.length > maxCharacters(mode);\n}\n\n/** The smallest version that fits, or `null` when nothing does. */\nfunction selectVersion(\n value: string,\n mode: QrMode,\n ec: QrErrorCorrection,\n minVersion: number,\n): number | null {\n // The payload's bit length depends on the version ONLY through the width of\n // the character-count indicator, which has three tiers. So it is computed at\n // most three times rather than once per version — which also makes the\n // legitimate path cheaper for a large value, not just the hostile one.\n const bitsForTier = new Map<number, number>();\n for (let version = Math.max(minVersion, MIN_VERSION); version <= MAX_VERSION; version += 1) {\n const width = countBits(mode, version);\n let bits = bitsForTier.get(width);\n if (bits === undefined) {\n bits = payloadBits(value, mode, version);\n bitsForTier.set(width, bits);\n }\n if (bits <= blockLayout(version, ec).dataCodewords * 8) {\n return version;\n }\n }\n return null;\n}\n\n/**\n * Data codewords: payload, terminator, pad to a byte, then alternating pad\n * bytes. Exported for the golden-vector test, which asserts these against the\n * standard's published worked example.\n */\nexport function dataCodewords(value: string, mode: QrMode, version: number, ec: QrErrorCorrection): number[] {\n const capacity = blockLayout(version, ec).dataCodewords * 8;\n const buffer = encodePayload(value, mode, version);\n\n // Terminator: up to four zero bits, truncated if capacity runs out.\n buffer.push(0, Math.min(4, capacity - buffer.bits.length));\n // Then to a byte boundary.\n buffer.push(0, (8 - (buffer.bits.length % 8)) % 8);\n\n const codewords: number[] = [];\n for (let i = 0; i < buffer.bits.length; i += 8) {\n let byte = 0;\n for (let bit = 0; bit < 8; bit += 1) {\n byte = (byte << 1) | (buffer.bits[i + bit] as number);\n }\n codewords.push(byte);\n }\n\n // Pad bytes 0b11101100 / 0b00010001, alternating, as the standard specifies.\n const target = capacity / 8;\n for (let i = 0; codewords.length < target; i += 1) {\n codewords.push(i % 2 === 0 ? 0xec : 0x11);\n }\n return codewords;\n}\n\n/**\n * Split into blocks, compute error correction, and interleave.\n *\n * Interleaving is what makes the error correction work as advertised: a blot\n * on the printed symbol damages a contiguous run of modules, and interleaving\n * spreads that run across every block so no single block exceeds its own\n * correction budget. Concatenating instead would produce a scannable code that\n * fails far sooner than its level claims — passing a round-trip test and\n * failing on paper.\n */\nexport function interleave(codewords: readonly number[], version: number, ec: QrErrorCorrection): number[] {\n const { ecPerBlock, g1Blocks, g1Size, g2Blocks, g2Size } = blockLayout(version, ec);\n\n const dataBlocks: number[][] = [];\n let offset = 0;\n for (let i = 0; i < g1Blocks; i += 1) {\n dataBlocks.push(codewords.slice(offset, offset + g1Size));\n offset += g1Size;\n }\n for (let i = 0; i < g2Blocks; i += 1) {\n dataBlocks.push(codewords.slice(offset, offset + g2Size));\n offset += g2Size;\n }\n\n const ecBlocks = dataBlocks.map((block) => reedSolomon(block, ecPerBlock));\n\n const result: number[] = [];\n const widest = Math.max(g1Size, g2Blocks > 0 ? g2Size : 0);\n for (let i = 0; i < widest; i += 1) {\n for (const block of dataBlocks) {\n if (i < block.length) {\n result.push(block[i] as number);\n }\n }\n }\n for (let i = 0; i < ecPerBlock; i += 1) {\n for (const block of ecBlocks) {\n result.push(block[i] as number);\n }\n }\n return result;\n}\n\n// --- Matrix construction ---------------------------------------------------\n\nexport type Grid = (boolean | null)[][];\n\n/**\n * A grid with every function pattern placed and data positions left `null`.\n *\n * Exported for verification. The round-trip decoder in the test needs to know\n * which modules carry data, and reconstructing that knowledge separately would\n * duplicate the layout and share its bugs. Using the same template is safe\n * here because the table-consistency check anchors it to an independent fact:\n * the number of free modules must equal the codeword count in the transcribed\n * block table, so a wrong finder, timing or alignment layout fails there.\n */\nexport function reservedModules(version: number): Grid {\n const size = version * 4 + 17;\n const grid: Grid = Array.from({ length: size }, () => new Array<boolean | null>(size).fill(null));\n\n const set = (row: number, col: number, dark: boolean): void => {\n (grid[row] as (boolean | null)[])[col] = dark;\n };\n\n // Three finder patterns with their separators.\n for (const [baseRow, baseCol] of [\n [0, 0],\n [0, size - 7],\n [size - 7, 0],\n ] as const) {\n for (let row = -1; row <= 7; row += 1) {\n for (let col = -1; col <= 7; col += 1) {\n const r = baseRow + row;\n const c = baseCol + col;\n if (r < 0 || r >= size || c < 0 || c >= size) {\n continue;\n }\n const ring = Math.max(Math.abs(row - 3), Math.abs(col - 3));\n set(r, c, ring !== 2 && ring <= 3);\n }\n }\n }\n\n // Timing patterns, row and column 6.\n for (let i = 0; i < size; i += 1) {\n if ((grid[6] as (boolean | null)[])[i] === null) {\n set(6, i, i % 2 === 0);\n }\n if ((grid[i] as (boolean | null)[])[6] === null) {\n set(i, 6, i % 2 === 0);\n }\n }\n\n // Alignment patterns, except where a finder already sits.\n const positions = alignmentPositions(version);\n for (const row of positions) {\n for (const col of positions) {\n const nearFinder =\n (row <= 8 && col <= 8) || (row <= 8 && col >= size - 9) || (row >= size - 9 && col <= 8);\n if (nearFinder) {\n continue;\n }\n for (let dr = -2; dr <= 2; dr += 1) {\n for (let dc = -2; dc <= 2; dc += 1) {\n const ring = Math.max(Math.abs(dr), Math.abs(dc));\n set(row + dr, col + dc, ring !== 1);\n }\n }\n }\n }\n\n // Format information areas, reserved now and written after masking. The\n // module at (size - 8, 8) is always dark.\n for (let i = 0; i < 9; i += 1) {\n if ((grid[8] as (boolean | null)[])[i] === null) {\n set(8, i, false);\n }\n if ((grid[i] as (boolean | null)[])[8] === null) {\n set(i, 8, false);\n }\n }\n for (let i = 0; i < 8; i += 1) {\n set(8, size - 1 - i, false);\n set(size - 1 - i, 8, false);\n }\n set(size - 8, 8, true);\n\n // Version information, versions 7 and up.\n if (version >= 7) {\n const bits = versionBits(version);\n for (let i = 0; i < 18; i += 1) {\n const bit = ((bits >>> i) & 1) === 1;\n set(Math.floor(i / 3), size - 11 + (i % 3), bit);\n set(size - 11 + (i % 3), Math.floor(i / 3), bit);\n }\n }\n\n return grid;\n}\n\n/** How many modules a version leaves free for data, counted from the grid. */\nexport function rawDataModules(version: number): number {\n const grid = reservedModules(version);\n let free = 0;\n for (const row of grid) {\n for (const cell of row) {\n if (cell === null) {\n free += 1;\n }\n }\n }\n return free;\n}\n\n/** Place the interleaved codewords in the standard's zigzag order. */\nfunction placeData(grid: Grid, codewords: readonly number[]): void {\n const size = grid.length;\n let bitIndex = 0;\n const nextBit = (): boolean => {\n const byte = codewords[bitIndex >>> 3];\n // Past the end is a remainder bit: light, per the standard.\n const bit = byte === undefined ? 0 : (byte >>> (7 - (bitIndex & 7))) & 1;\n bitIndex += 1;\n return bit === 1;\n };\n\n let upward = true;\n for (let right = size - 1; right >= 1; right -= 2) {\n // Column 6 is the vertical timing pattern; the pair of columns skips it.\n const pair = right === 6 ? [5, 4] : [right, right - 1];\n for (let step = 0; step < size; step += 1) {\n const row = upward ? size - 1 - step : step;\n for (const col of pair) {\n if ((grid[row] as (boolean | null)[])[col] === null) {\n (grid[row] as (boolean | null)[])[col] = nextBit();\n }\n }\n }\n if (right === 6) {\n right -= 1;\n }\n upward = !upward;\n }\n}\n\n/** The eight mask conditions. `true` means invert this module. */\nfunction maskCondition(mask: number, row: number, col: number): boolean {\n switch (mask) {\n case 0:\n return (row + col) % 2 === 0;\n case 1:\n return row % 2 === 0;\n case 2:\n return col % 3 === 0;\n case 3:\n return (row + col) % 3 === 0;\n case 4:\n return (Math.floor(row / 2) + Math.floor(col / 3)) % 2 === 0;\n case 5:\n return ((row * col) % 2) + ((row * col) % 3) === 0;\n case 6:\n return (((row * col) % 2) + ((row * col) % 3)) % 2 === 0;\n default:\n return (((row + col) % 2) + ((row * col) % 3)) % 2 === 0;\n }\n}\n\n/**\n * The four penalty rules, scored on a finished candidate.\n *\n * This is the step that is easy to skip and expensive to skip: the rules exist\n * because some masks leave large light or dark areas, or patterns that look\n * like a finder, and a decoder locks onto the wrong feature. A symbol with a\n * badly chosen mask still decodes in software and fails under a phone camera —\n * which is the worst possible place for it to fail, because every test here\n * would pass.\n */\nexport function penalty(modules: readonly boolean[][]): number {\n const size = modules.length;\n let score = 0;\n\n // Rule 1: runs of five or more same-coloured modules in a line.\n const scoreLine = (run: number): number => (run >= 5 ? run - 2 : 0);\n for (let i = 0; i < size; i += 1) {\n for (const horizontal of [true, false]) {\n let run = 1;\n for (let j = 1; j < size; j += 1) {\n const prev = horizontal\n ? (modules[i] as boolean[])[j - 1]\n : (modules[j - 1] as boolean[])[i];\n const cur = horizontal ? (modules[i] as boolean[])[j] : (modules[j] as boolean[])[i];\n if (cur === prev) {\n run += 1;\n } else {\n score += scoreLine(run);\n run = 1;\n }\n }\n score += scoreLine(run);\n }\n }\n\n // Rule 2: every 2x2 block of one colour.\n for (let row = 0; row < size - 1; row += 1) {\n for (let col = 0; col < size - 1; col += 1) {\n const a = (modules[row] as boolean[])[col];\n if (\n a === (modules[row] as boolean[])[col + 1] &&\n a === (modules[row + 1] as boolean[])[col] &&\n a === (modules[row + 1] as boolean[])[col + 1]\n ) {\n score += 3;\n }\n }\n }\n\n // Rule 3: the finder-like 1:1:3:1:1 pattern with four light modules either\n // side. This is the rule that protects a decoder's pattern detection.\n const finderish = [true, false, true, true, true, false, true];\n const light4 = [false, false, false, false];\n const matches = (line: readonly boolean[], at: number, pattern: readonly boolean[]): boolean =>\n pattern.every((want, i) => line[at + i] === want);\n for (let i = 0; i < size; i += 1) {\n const row = modules[i] as boolean[];\n const col = modules.map((r) => (r as boolean[])[i] as boolean);\n for (const line of [row, col]) {\n for (let j = 0; j + 7 <= size; j += 1) {\n if (!matches(line, j, finderish)) {\n continue;\n }\n // Each ELEVEN-module window counts separately, so a pattern with four\n // light modules on BOTH sides scores 80 rather than 40.\n //\n // The prose rule (\"add 40 each time the pattern appears with four\n // light modules on either side\") is ambiguous about that case, and it\n // matters: this score is what picks the mask, and the wrong mask\n // produces a symbol that decodes perfectly in software and reads badly\n // under a camera. No test here can catch that -- so the convention is\n // pinned by a test instead, and this follows the one the reference\n // implementations use rather than the reading that happened to come\n // first.\n if (j >= 4 && matches(line, j - 4, light4)) {\n score += 40;\n }\n if (j + 11 <= size && matches(line, j + 7, light4)) {\n score += 40;\n }\n }\n }\n }\n\n // Rule 4: deviation of the dark-module proportion from 50%.\n let dark = 0;\n for (const row of modules) {\n for (const cell of row) {\n if (cell) {\n dark += 1;\n }\n }\n }\n const percent = (dark * 100) / (size * size);\n score += Math.floor(Math.abs(percent - 50) / 5) * 10;\n\n return score;\n}\n\n/** Write the 15 format bits into both of their locations. */\nfunction applyFormat(modules: boolean[][], ec: QrErrorCorrection, mask: number): void {\n const size = modules.length;\n const bits = (FORMAT_BITS[ec][mask] as number) >>> 0;\n const bit = (i: number): boolean => ((bits >>> i) & 1) === 1;\n\n // Bits 0-5 up the left column, bit 6 at (8,7)... the split placement is the\n // standard's, not a simplification of it.\n for (let i = 0; i <= 5; i += 1) {\n (modules[8] as boolean[])[i] = bit(14 - i);\n }\n (modules[8] as boolean[])[7] = bit(8);\n (modules[8] as boolean[])[8] = bit(7);\n (modules[7] as boolean[])[8] = bit(6);\n for (let i = 9; i <= 14; i += 1) {\n (modules[14 - i] as boolean[])[8] = bit(14 - i);\n }\n\n // The second copy, split across the other two corners: SEVEN modules up the\n // column beside the bottom-left finder, then EIGHT along the row beside the\n // top-right one.\n //\n // The 7/8 split is not arbitrary and getting it wrong is quiet. An 8/7 split\n // puts bit 7 at (size - 8, 8) -- which is the dark module, overwritten on\n // the next line -- so the symbol still decodes from the FIRST copy and\n // carries a corrupt second one. A reader that happens to use the second copy\n // refuses the symbol, and nothing in a round-trip test notices, because a\n // decoder reading the first copy never looks.\n for (let i = 0; i <= 6; i += 1) {\n (modules[size - 1 - i] as boolean[])[8] = bit(i);\n }\n for (let i = 7; i <= 14; i += 1) {\n (modules[8] as boolean[])[size - 15 + i] = bit(i);\n }\n (modules[size - 8] as boolean[])[8] = true;\n}\n\nexport interface EncodeOptions {\n errorCorrection?: QrErrorCorrection;\n /** Force a mode instead of selecting the narrowest that fits. */\n mode?: QrMode;\n /** Force a version. Throws if the value does not fit. */\n version?: number;\n /** Force a mask instead of scoring all eight. For tests and golden vectors. */\n mask?: number;\n}\n\n/**\n * Encode a string into a QR symbol.\n *\n * @throws RangeError when the value cannot fit, or when a forced version is\n * too small for it. **Throwing is deliberate**: the alternative is returning\n * a truncated symbol, which scans cleanly and yields the wrong string — a\n * silent corruption on the one surface whose entire job is to carry a value\n * accurately.\n */\nexport function encodeQr(value: string, options: EncodeOptions = {}): QrSymbol {\n const ec = options.errorCorrection ?? 'M';\n\n // Before `selectMode`, which walks the whole string. See `tooLongToFit`:\n // this is the difference between refusing a 5 MB value instantly and\n // spending tens of seconds on the main thread to reach the same answer.\n if (tooLongToFit(value, options.mode ?? null)) {\n throw new RangeError(\n `Value is too long for a QR code (${value.length} characters; the maximum any mode can carry is ${ABSOLUTE_MAX_CHARACTERS})`,\n );\n }\n\n const mode = options.mode ?? selectMode(value);\n if (tooLongToFit(value, mode)) {\n throw new RangeError(\n `Value is too long for a QR code in ${mode} mode (${value.length} characters; the maximum is ${maxCharacters(mode)})`,\n );\n }\n\n if (mode === 'numeric' && !/^[0-9]*$/.test(value)) {\n throw new RangeError('Numeric mode accepts digits only');\n }\n if (mode === 'alphanumeric' && ![...value].every((char) => ALPHANUMERIC.includes(char))) {\n throw new RangeError('Alphanumeric mode accepts 0-9 A-Z space and $%*+-./: only');\n }\n\n let version: number;\n if (options.version !== undefined) {\n if (options.version < MIN_VERSION || options.version > MAX_VERSION) {\n throw new RangeError(`Version must be ${MIN_VERSION}-${MAX_VERSION}`);\n }\n version = options.version;\n if (payloadBits(value, mode, version) > blockLayout(version, ec).dataCodewords * 8) {\n throw new RangeError(`Value does not fit in version ${version} at level ${ec}`);\n }\n } else {\n const chosen = selectVersion(value, mode, ec, MIN_VERSION);\n if (chosen === null) {\n throw new RangeError(\n `Value is too long for a QR code at level ${ec} (${value.length} characters)`,\n );\n }\n version = chosen;\n }\n\n const codewords = interleave(dataCodewords(value, mode, version, ec), version, ec);\n const template = reservedModules(version);\n\n const candidates: { mask: number; modules: boolean[][] }[] = [];\n const masksToTry = options.mask === undefined ? [0, 1, 2, 3, 4, 5, 6, 7] : [options.mask];\n for (const mask of masksToTry) {\n const grid = template.map((row) => [...row]);\n placeData(grid, codewords);\n const modules = grid.map((row, rowIndex) =>\n row.map((cell, colIndex) => {\n const value_ = cell as boolean;\n // Only data modules are masked; function patterns never are, which is\n // why the mask is applied against the TEMPLATE's null positions rather\n // than against the finished grid.\n const isData = (template[rowIndex] as (boolean | null)[])[colIndex] === null;\n return isData && maskCondition(mask, rowIndex, colIndex) ? !value_ : value_;\n }),\n );\n applyFormat(modules, ec, mask);\n candidates.push({ mask, modules });\n }\n\n const best = candidates.reduce((a, b) => (penalty(a.modules) <= penalty(b.modules) ? a : b));\n\n return {\n modules: best.modules,\n size: version * 4 + 17,\n version,\n errorCorrection: ec,\n mode,\n mask: best.mask,\n };\n}\n","import { forwardRef, useMemo } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { encodeQr } from \"./qr-encode\";\nimport type { QrCodeProps } from \"./QrCode.types\";\n\n/**\n * A QR code, as an SVG, with no dependencies.\n *\n * ## Why SVG and one path\n *\n * The symbol is drawn as a **single `<path>`** of one-unit squares on a\n * `viewBox` sized in modules, not as a grid of `<rect>` elements. A version 10\n * symbol is 57x57 — over three thousand modules — and a rect each would be\n * three thousand DOM nodes for something that never changes. One path is one\n * node, and because the viewBox is in module units the symbol is resolution\n * independent: `size` scales it with no resampling, so it stays crisp at any\n * size and prints at the printer's resolution rather than the screen's.\n *\n * This matters more than it sounds for scanning. A raster QR code scaled to a\n * non-integer multiple of its module size gets blurred module edges, and a\n * scanner reading a blurred edge guesses. Vector output cannot have that\n * problem.\n *\n * ## It is an image of a value, not the value\n *\n * A QR code is unreadable to anyone without a second device pointed at the\n * screen — which includes every screen-reader user and anyone whose phone is\n * the device showing it. So `label` is required, and the value should ALSO be\n * reachable as text or a link beside it. A pairing panel that shows only a\n * code is a panel some people cannot use at all.\n *\n * @example\n * ```tsx\n * <QrCode\n * value=\"https://device.example.com/pair#482913\"\n * size={192}\n * label=\"Pair this device\"\n * />\n *\n * // On a dark surface, set both colours: a transparent background renders\n * // dark-on-dark and will not scan.\n * <QrCode value={url} label=\"Pair\" foreground=\"#0b0b0c\" background=\"#ffffff\" />\n * ```\n */\nexport const QrCode = forwardRef<SVGSVGElement, QrCodeProps>(\n (\n {\n value,\n size = 192,\n errorCorrection = \"M\",\n label,\n quietZone = 4,\n foreground = \"currentColor\",\n background = \"transparent\",\n mode,\n version,\n className,\n ...props\n },\n ref,\n ) => {\n // Encoding a version 40 symbol is real work (Reed-Solomon over 2,956\n // codewords, then eight masks scored). Nothing about it depends on `size`\n // or the colours, so it is memoised on the inputs that actually change it\n // — otherwise a parent re-render on hover re-encodes the whole symbol.\n const symbol = useMemo(\n () => encodeQr(value, { errorCorrection, mode, version }),\n [value, errorCorrection, mode, version],\n );\n\n const extent = symbol.size + quietZone * 2;\n\n const path = useMemo(() => {\n const parts: string[] = [];\n for (let row = 0; row < symbol.size; row += 1) {\n const line = symbol.modules[row] as boolean[];\n let col = 0;\n while (col < symbol.size) {\n if (!line[col]) {\n col += 1;\n continue;\n }\n // Run-length the dark modules along the row: a horizontal run\n // becomes one rectangle rather than one per module, which roughly\n // halves the path for a typical symbol and costs nothing to read.\n let run = 1;\n while (col + run < symbol.size && line[col + run]) {\n run += 1;\n }\n parts.push(`M${col + quietZone} ${row + quietZone}h${run}v1h-${run}z`);\n col += run;\n }\n }\n return parts.join(\"\");\n }, [symbol, quietZone]);\n\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox={`0 0 ${extent} ${extent}`}\n role=\"img\"\n aria-label={label}\n // Nearest-neighbour rather than smoothing, for the rasterisers that\n // apply it anyway: a blurred module edge is a module a scanner has to\n // guess at.\n shapeRendering=\"crispEdges\"\n className={cn(\"fa-qr-code\", className)}\n {...props}\n >\n {background !== \"transparent\" && (\n <rect width={extent} height={extent} fill={background} />\n )}\n <path d={path} fill={foreground} />\n </svg>\n );\n },\n);\n\nQrCode.displayName = \"QrCode\";\n"]}
|
|
@@ -254,9 +254,33 @@ function encodePayload(value, mode, version) {
|
|
|
254
254
|
function payloadBits(value, mode, version) {
|
|
255
255
|
return encodePayload(value, mode, version).bits.length;
|
|
256
256
|
}
|
|
257
|
+
function maxCharacters(mode) {
|
|
258
|
+
const bits = blockLayout(MAX_VERSION, "L").dataCodewords * 8 - 4 - countBits(mode, MAX_VERSION);
|
|
259
|
+
if (mode === "numeric") {
|
|
260
|
+
return Math.floor(bits * 3 / 10);
|
|
261
|
+
}
|
|
262
|
+
if (mode === "alphanumeric") {
|
|
263
|
+
return Math.floor(bits * 2 / 11);
|
|
264
|
+
}
|
|
265
|
+
return Math.floor(bits / 8);
|
|
266
|
+
}
|
|
267
|
+
var ABSOLUTE_MAX_CHARACTERS = maxCharacters("numeric");
|
|
268
|
+
function tooLongToFit(value, mode) {
|
|
269
|
+
if (value.length > ABSOLUTE_MAX_CHARACTERS) {
|
|
270
|
+
return true;
|
|
271
|
+
}
|
|
272
|
+
return mode !== null && value.length > maxCharacters(mode);
|
|
273
|
+
}
|
|
257
274
|
function selectVersion(value, mode, ec, minVersion) {
|
|
275
|
+
const bitsForTier = /* @__PURE__ */ new Map();
|
|
258
276
|
for (let version = Math.max(minVersion, MIN_VERSION); version <= MAX_VERSION; version += 1) {
|
|
259
|
-
|
|
277
|
+
const width = countBits(mode, version);
|
|
278
|
+
let bits = bitsForTier.get(width);
|
|
279
|
+
if (bits === void 0) {
|
|
280
|
+
bits = payloadBits(value, mode, version);
|
|
281
|
+
bitsForTier.set(width, bits);
|
|
282
|
+
}
|
|
283
|
+
if (bits <= blockLayout(version, ec).dataCodewords * 8) {
|
|
260
284
|
return version;
|
|
261
285
|
}
|
|
262
286
|
}
|
|
@@ -508,7 +532,17 @@ function applyFormat(modules, ec, mask) {
|
|
|
508
532
|
}
|
|
509
533
|
function encodeQr(value, options = {}) {
|
|
510
534
|
const ec = options.errorCorrection ?? "M";
|
|
535
|
+
if (tooLongToFit(value, options.mode ?? null)) {
|
|
536
|
+
throw new RangeError(
|
|
537
|
+
`Value is too long for a QR code (${value.length} characters; the maximum any mode can carry is ${ABSOLUTE_MAX_CHARACTERS})`
|
|
538
|
+
);
|
|
539
|
+
}
|
|
511
540
|
const mode = options.mode ?? selectMode(value);
|
|
541
|
+
if (tooLongToFit(value, mode)) {
|
|
542
|
+
throw new RangeError(
|
|
543
|
+
`Value is too long for a QR code in ${mode} mode (${value.length} characters; the maximum is ${maxCharacters(mode)})`
|
|
544
|
+
);
|
|
545
|
+
}
|
|
512
546
|
if (mode === "numeric" && !/^[0-9]*$/.test(value)) {
|
|
513
547
|
throw new RangeError("Numeric mode accepts digits only");
|
|
514
548
|
}
|
|
@@ -622,5 +656,5 @@ var QrCode = forwardRef(
|
|
|
622
656
|
QrCode.displayName = "QrCode";
|
|
623
657
|
|
|
624
658
|
export { QrCode, encodeQr, selectMode };
|
|
625
|
-
//# sourceMappingURL=chunk-
|
|
626
|
-
//# sourceMappingURL=chunk-
|
|
659
|
+
//# sourceMappingURL=chunk-ZDDWAVVZ.js.map
|
|
660
|
+
//# sourceMappingURL=chunk-ZDDWAVVZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/QrCode/qr-tables.ts","../src/components/QrCode/qr-encode.ts","../src/components/QrCode/QrCode.tsx"],"names":["dataCodewords"],"mappings":"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","file":"chunk-ZDDWAVVZ.js","sourcesContent":["/**\n * ISO/IEC 18004 table data for the QR encoder. **Data, not logic** — kept in\n * its own module so the algorithm beside it can be read without scrolling past\n * 160 rows, and so a correction here is a diff that cannot touch behaviour.\n *\n * There is no formula for these: the block structure per version and error\n * correction level is a table in the standard. They were taken from the\n * published error-correction table at\n * <https://www.thonky.com/qr-code-tutorial/error-correction-table> rather than\n * recalled, and every row is checked by `qr-code.test.tsx` against three\n * equations that must all hold simultaneously:\n *\n * 1. `dataCodewords === g1Blocks * g1Size + g2Blocks * g2Size`\n * 2. `totalCodewords === dataCodewords + ecPerBlock * (g1Blocks + g2Blocks)`\n * 3. `totalCodewords === rawDataModules(version) / 8`, where\n * `rawDataModules` is counted from the matrix THIS code builds.\n *\n * The third is the one worth having: it ties a transcribed table to an\n * independently constructed matrix, so a mistyped row, a wrong alignment\n * pattern position and a wrong function-pattern layout cannot all agree.\n */\n\n/** Error correction level. Higher levels survive more damage and hold less. */\nexport type QrErrorCorrection = 'L' | 'M' | 'Q' | 'H';\n\nexport const EC_LEVELS: readonly QrErrorCorrection[] = ['L', 'M', 'Q', 'H'];\n\n/** The 2-bit indicator each level carries in the format information. */\nexport const EC_FORMAT_BITS: Record<QrErrorCorrection, number> = {\n L: 0b01,\n M: 0b00,\n Q: 0b11,\n H: 0b10,\n};\n\nexport interface BlockLayout {\n /** Data codewords in the whole symbol. */\n dataCodewords: number;\n /** Error correction codewords per block — the same for every block. */\n ecPerBlock: number;\n /** Blocks in group 1, and how many data codewords each holds. */\n g1Blocks: number;\n g1Size: number;\n /** Blocks in group 2 (always `g1Size + 1` each when present). */\n g2Blocks: number;\n g2Size: number;\n}\n\n/**\n * `[dataCodewords, ecPerBlock, g1Blocks, g1Size, g2Blocks, g2Size]` indexed by\n * `[version - 1]` then by EC level, in `L, M, Q, H` order.\n */\nconst BLOCK_TABLE: readonly (readonly [number, number, number, number, number, number])[][] = [\n // v1\n [[19, 7, 1, 19, 0, 0], [16, 10, 1, 16, 0, 0], [13, 13, 1, 13, 0, 0], [9, 17, 1, 9, 0, 0]],\n [[34, 10, 1, 34, 0, 0], [28, 16, 1, 28, 0, 0], [22, 22, 1, 22, 0, 0], [16, 28, 1, 16, 0, 0]],\n [[55, 15, 1, 55, 0, 0], [44, 26, 1, 44, 0, 0], [34, 18, 2, 17, 0, 0], [26, 22, 2, 13, 0, 0]],\n [[80, 20, 1, 80, 0, 0], [64, 18, 2, 32, 0, 0], [48, 26, 2, 24, 0, 0], [36, 16, 4, 9, 0, 0]],\n [[108, 26, 1, 108, 0, 0], [86, 24, 2, 43, 0, 0], [62, 18, 2, 15, 2, 16], [46, 22, 2, 11, 2, 12]],\n [[136, 18, 2, 68, 0, 0], [108, 16, 4, 27, 0, 0], [76, 24, 4, 19, 0, 0], [60, 28, 4, 15, 0, 0]],\n [[156, 20, 2, 78, 0, 0], [124, 18, 4, 31, 0, 0], [88, 18, 2, 14, 4, 15], [66, 26, 4, 13, 1, 14]],\n [[194, 24, 2, 97, 0, 0], [154, 22, 2, 38, 2, 39], [110, 22, 4, 18, 2, 19], [86, 26, 4, 14, 2, 15]],\n [[232, 30, 2, 116, 0, 0], [182, 22, 3, 36, 2, 37], [132, 20, 4, 16, 4, 17], [100, 24, 4, 12, 4, 13]],\n // v10\n [[274, 18, 2, 68, 2, 69], [216, 26, 4, 43, 1, 44], [154, 24, 6, 19, 2, 20], [122, 28, 6, 15, 2, 16]],\n [[324, 20, 4, 81, 0, 0], [254, 30, 1, 50, 4, 51], [180, 28, 4, 22, 4, 23], [140, 24, 3, 12, 8, 13]],\n [[370, 24, 2, 92, 2, 93], [290, 22, 6, 36, 2, 37], [206, 26, 4, 20, 6, 21], [158, 28, 7, 14, 4, 15]],\n [[428, 26, 4, 107, 0, 0], [334, 22, 8, 37, 1, 38], [244, 24, 8, 20, 4, 21], [180, 22, 12, 11, 4, 12]],\n [[461, 30, 3, 115, 1, 116], [365, 24, 4, 40, 5, 41], [261, 20, 11, 16, 5, 17], [197, 24, 11, 12, 5, 13]],\n [[523, 22, 5, 87, 1, 88], [415, 24, 5, 41, 5, 42], [295, 30, 5, 24, 7, 25], [223, 24, 11, 12, 7, 13]],\n [[589, 24, 5, 98, 1, 99], [453, 28, 7, 45, 3, 46], [325, 24, 15, 19, 2, 20], [253, 30, 3, 15, 13, 16]],\n [[647, 28, 1, 107, 5, 108], [507, 28, 10, 46, 1, 47], [367, 28, 1, 22, 15, 23], [283, 28, 2, 14, 17, 15]],\n [[721, 30, 5, 120, 1, 121], [563, 26, 9, 43, 4, 44], [397, 28, 17, 22, 1, 23], [313, 28, 2, 14, 19, 15]],\n [[795, 28, 3, 113, 4, 114], [627, 26, 3, 44, 11, 45], [445, 26, 17, 21, 4, 22], [341, 26, 9, 13, 16, 14]],\n // v20\n [[861, 28, 3, 107, 5, 108], [669, 26, 3, 41, 13, 42], [485, 30, 15, 24, 5, 25], [385, 28, 15, 15, 10, 16]],\n [[932, 28, 4, 116, 4, 117], [714, 26, 17, 42, 0, 0], [512, 28, 17, 22, 6, 23], [406, 30, 19, 16, 6, 17]],\n [[1006, 28, 2, 111, 7, 112], [782, 28, 17, 46, 0, 0], [568, 30, 7, 24, 16, 25], [442, 24, 34, 13, 0, 0]],\n [[1094, 30, 4, 121, 5, 122], [860, 28, 4, 47, 14, 48], [614, 30, 11, 24, 14, 25], [464, 30, 16, 15, 14, 16]],\n [[1174, 30, 6, 117, 4, 118], [914, 28, 6, 45, 14, 46], [664, 30, 11, 24, 16, 25], [514, 30, 30, 16, 2, 17]],\n [[1276, 26, 8, 106, 4, 107], [1000, 28, 8, 47, 13, 48], [718, 30, 7, 24, 22, 25], [538, 30, 22, 15, 13, 16]],\n [[1370, 28, 10, 114, 2, 115], [1062, 28, 19, 46, 4, 47], [754, 28, 28, 22, 6, 23], [596, 30, 33, 16, 4, 17]],\n [[1468, 30, 8, 122, 4, 123], [1128, 28, 22, 45, 3, 46], [808, 30, 8, 23, 26, 24], [628, 30, 12, 15, 28, 16]],\n [[1531, 30, 3, 117, 10, 118], [1193, 28, 3, 45, 23, 46], [871, 30, 4, 24, 31, 25], [661, 30, 11, 15, 31, 16]],\n [[1631, 30, 7, 116, 7, 117], [1267, 28, 21, 45, 7, 46], [911, 30, 1, 23, 37, 24], [701, 30, 19, 15, 26, 16]],\n // v30\n [[1735, 30, 5, 115, 10, 116], [1373, 28, 19, 47, 10, 48], [985, 30, 15, 24, 25, 25], [745, 30, 23, 15, 25, 16]],\n [[1843, 30, 13, 115, 3, 116], [1455, 28, 2, 46, 29, 47], [1033, 30, 42, 24, 1, 25], [793, 30, 23, 15, 28, 16]],\n [[1955, 30, 17, 115, 0, 0], [1541, 28, 10, 46, 23, 47], [1115, 30, 10, 24, 35, 25], [845, 30, 19, 15, 35, 16]],\n [[2071, 30, 17, 115, 1, 116], [1631, 28, 14, 46, 21, 47], [1171, 30, 29, 24, 19, 25], [901, 30, 11, 15, 46, 16]],\n [[2191, 30, 13, 115, 6, 116], [1725, 28, 14, 46, 23, 47], [1231, 30, 44, 24, 7, 25], [961, 30, 59, 16, 1, 17]],\n [[2306, 30, 12, 121, 7, 122], [1812, 28, 12, 47, 26, 48], [1286, 30, 39, 24, 14, 25], [986, 30, 22, 15, 41, 16]],\n [[2434, 30, 6, 121, 14, 122], [1914, 28, 6, 47, 34, 48], [1354, 30, 46, 24, 10, 25], [1054, 30, 2, 15, 64, 16]],\n [[2566, 30, 17, 122, 4, 123], [1992, 28, 29, 46, 14, 47], [1426, 30, 49, 24, 10, 25], [1096, 30, 24, 15, 46, 16]],\n [[2702, 30, 4, 122, 18, 123], [2102, 28, 13, 46, 32, 47], [1502, 30, 48, 24, 14, 25], [1142, 30, 42, 15, 32, 16]],\n [[2812, 30, 20, 117, 4, 118], [2216, 28, 40, 47, 7, 48], [1582, 30, 43, 24, 22, 25], [1222, 30, 10, 15, 67, 16]],\n // v40\n [[2956, 30, 19, 118, 6, 119], [2334, 28, 18, 47, 31, 48], [1666, 30, 34, 24, 34, 25], [1276, 30, 20, 15, 61, 16]],\n];\n\nexport const MIN_VERSION = 1;\nexport const MAX_VERSION = 40;\n\n/** Block structure for a version and error correction level. */\nexport function blockLayout(version: number, ec: QrErrorCorrection): BlockLayout {\n const row = BLOCK_TABLE[version - 1]?.[EC_LEVELS.indexOf(ec)];\n if (!row) {\n throw new RangeError(`No block layout for version ${version} level ${ec}`);\n }\n const [dataCodewords, ecPerBlock, g1Blocks, g1Size, g2Blocks, g2Size] = row;\n return { dataCodewords, ecPerBlock, g1Blocks, g1Size, g2Blocks, g2Size };\n}\n\n/**\n * The 15-bit format information for a level and mask, as published.\n *\n * These are a BCH(15,5) code XOR'd with a fixed mask, so they could be\n * computed — and the first draft did compute them. They are listed instead\n * because the computation and its verification would then share one\n * implementation: a wrong generator polynomial would produce a wrong table and\n * a test that agreed with it. A transcribed table cannot agree with a bug.\n *\n * Source: <https://www.thonky.com/qr-code-tutorial/format-version-tables>.\n * Indexed `[level][mask]`.\n */\nexport const FORMAT_BITS: Record<QrErrorCorrection, readonly number[]> = {\n L: [\n 0b111011111000100, 0b111001011110011, 0b111110110101010, 0b111100010011101,\n 0b110011000101111, 0b110001100011000, 0b110110001000001, 0b110100101110110,\n ],\n M: [\n 0b101010000010010, 0b101000100100101, 0b101111001111100, 0b101101101001011,\n 0b100010111111001, 0b100000011001110, 0b100111110010111, 0b100101010100000,\n ],\n Q: [\n 0b011010101011111, 0b011000001101000, 0b011111100110001, 0b011101000000110,\n 0b010010010110100, 0b010000110000011, 0b010111011011010, 0b010101111101101,\n ],\n H: [\n 0b001011010001001, 0b001001110111110, 0b001110011100111, 0b001100111010000,\n 0b000011101100010, 0b000001001010101, 0b000110100001100, 0b000100000111011,\n ],\n};\n\n/**\n * The 18-bit version information, present only for versions 7 and up.\n *\n * A BCH(18,6) code. Computed rather than tabled — 34 rows of 18 bits is more\n * transcription risk than the arithmetic is, and unlike the format bits there\n * are published values for versions 7, 8, 9, 10 and 40 to check it against,\n * which the test does.\n */\nexport function versionBits(version: number): number {\n let remainder = version;\n for (let i = 0; i < 12; i += 1) {\n remainder = (remainder << 1) ^ ((remainder >>> 11) * 0b1111100100101);\n }\n return ((version << 12) | remainder) >>> 0;\n}\n\n/**\n * Centre coordinates of the alignment patterns for a version.\n *\n * Derived rather than tabled, and the derivation is checked by the codeword\n * count equation in the test: a wrong position changes how many modules are\n * free for data, so the count would not match the block table.\n *\n * Version 32 is a genuine special case in the standard — its spacing does not\n * follow the rule the other versions do.\n */\nexport function alignmentPositions(version: number): number[] {\n if (version === 1) {\n return [];\n }\n const count = Math.floor(version / 7) + 2;\n const size = version * 4 + 17;\n const step = version === 32 ? 26 : Math.ceil((size - 13) / (count * 2 - 2)) * 2;\n\n const positions = [6];\n for (let pos = size - 7; positions.length < count; pos -= step) {\n positions.unshift(pos);\n }\n return positions.sort((a, b) => a - b);\n}\n","/**\n * A QR encoder, dependency-free.\n *\n * ISO/IEC 18004, versions 1–40, error correction L/M/Q/H, with numeric,\n * alphanumeric and byte modes and automatic selection between them. No\n * Kanji mode and no structured append — neither has a caller here, and an\n * untested branch in an encoder is worse than an absent one because the\n * failure is a code a phone silently refuses to read.\n *\n * Table data and its provenance live in `./qr-tables`.\n */\nimport {\n EC_FORMAT_BITS,\n FORMAT_BITS,\n MAX_VERSION,\n MIN_VERSION,\n alignmentPositions,\n blockLayout,\n versionBits,\n type QrErrorCorrection,\n} from './qr-tables';\n\nexport type { QrErrorCorrection };\n\n/** Which encoding mode a value is carried in. */\nexport type QrMode = 'numeric' | 'alphanumeric' | 'byte';\n\nconst MODE_INDICATOR: Record<QrMode, number> = { numeric: 0b0001, alphanumeric: 0b0010, byte: 0b0100 };\n\n/** The character set alphanumeric mode can carry, in its own index order. */\nconst ALPHANUMERIC = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:';\n\nexport interface QrSymbol {\n /** `size * size` modules, row-major. `true` is dark. */\n modules: boolean[][];\n /** Modules per side, `version * 4 + 17`. */\n size: number;\n version: number;\n errorCorrection: QrErrorCorrection;\n mode: QrMode;\n /** The mask pattern chosen by penalty scoring, 0–7. */\n mask: number;\n}\n\n// --- Galois field GF(256) --------------------------------------------------\n// Reed-Solomon over the field the standard specifies: primitive polynomial\n// x^8 + x^4 + x^3 + x^2 + 1 (0x11d), generator 2.\n\nconst EXP = new Uint8Array(256);\nconst LOG = new Uint8Array(256);\n{\n let x = 1;\n for (let i = 0; i < 255; i += 1) {\n EXP[i] = x;\n LOG[x] = i;\n x <<= 1;\n if (x & 0x100) {\n x ^= 0x11d;\n }\n }\n EXP[255] = EXP[0] as number;\n}\n\nfunction gfMul(a: number, b: number): number {\n if (a === 0 || b === 0) {\n return 0;\n }\n return EXP[((LOG[a] as number) + (LOG[b] as number)) % 255] as number;\n}\n\n/** The generator polynomial for `degree` error correction codewords. */\nfunction generatorPoly(degree: number): number[] {\n let poly = [1];\n for (let i = 0; i < degree; i += 1) {\n const next = new Array<number>(poly.length + 1).fill(0);\n for (let j = 0; j < poly.length; j += 1) {\n next[j] = (next[j] as number) ^ (poly[j] as number);\n next[j + 1] = (next[j + 1] as number) ^ gfMul(poly[j] as number, EXP[i] as number);\n }\n poly = next;\n }\n return poly;\n}\n\n/** Reed-Solomon remainder — the error correction codewords for one block. */\nfunction reedSolomon(data: readonly number[], degree: number): number[] {\n const generator = generatorPoly(degree);\n const remainder = new Array<number>(degree).fill(0);\n for (const byte of data) {\n const factor = byte ^ (remainder.shift() as number);\n remainder.push(0);\n for (let i = 0; i < degree; i += 1) {\n remainder[i] = (remainder[i] as number) ^ gfMul(generator[i + 1] as number, factor);\n }\n }\n return remainder;\n}\n\n// --- Mode selection and bit encoding ---------------------------------------\n\n/**\n * The narrowest mode that can carry `value`.\n *\n * Narrower is denser: numeric packs 3 digits into 10 bits where byte mode\n * would spend 24. A six-digit pairing PIN is a third of the size as numeric,\n * which is the difference between a code a phone reads across a desk and one\n * it does not.\n */\nexport function selectMode(value: string): QrMode {\n if (/^[0-9]*$/.test(value)) {\n return 'numeric';\n }\n if ([...value].every((char) => ALPHANUMERIC.includes(char))) {\n return 'alphanumeric';\n }\n return 'byte';\n}\n\n/** Bits in the character count indicator — it widens with version. */\nfunction countBits(mode: QrMode, version: number): number {\n const tier = version <= 9 ? 0 : version <= 26 ? 1 : 2;\n if (mode === 'numeric') {\n return [10, 12, 14][tier] as number;\n }\n if (mode === 'alphanumeric') {\n return [9, 11, 13][tier] as number;\n }\n return [8, 16, 16][tier] as number;\n}\n\nclass BitBuffer {\n readonly bits: number[] = [];\n\n push(value: number, length: number): void {\n for (let i = length - 1; i >= 0; i -= 1) {\n this.bits.push((value >>> i) & 1);\n }\n }\n}\n\n/** UTF-8 bytes for a string, without TextEncoder — jsdom and SSR both agree. */\nfunction utf8Bytes(value: string): number[] {\n const out: number[] = [];\n for (const char of value) {\n const code = char.codePointAt(0) as number;\n if (code < 0x80) {\n out.push(code);\n } else if (code < 0x800) {\n out.push(0xc0 | (code >> 6), 0x80 | (code & 0x3f));\n } else if (code < 0x10000) {\n out.push(0xe0 | (code >> 12), 0x80 | ((code >> 6) & 0x3f), 0x80 | (code & 0x3f));\n } else {\n out.push(\n 0xf0 | (code >> 18),\n 0x80 | ((code >> 12) & 0x3f),\n 0x80 | ((code >> 6) & 0x3f),\n 0x80 | (code & 0x3f),\n );\n }\n }\n return out;\n}\n\n/** The payload's own bits, before terminator and padding. */\nfunction encodePayload(value: string, mode: QrMode, version: number): BitBuffer {\n const buffer = new BitBuffer();\n buffer.push(MODE_INDICATOR[mode], 4);\n\n if (mode === 'numeric') {\n buffer.push(value.length, countBits(mode, version));\n for (let i = 0; i < value.length; i += 3) {\n const group = value.slice(i, i + 3);\n buffer.push(Number.parseInt(group, 10), group.length * 3 + 1);\n }\n return buffer;\n }\n\n if (mode === 'alphanumeric') {\n buffer.push(value.length, countBits(mode, version));\n for (let i = 0; i < value.length; i += 2) {\n const first = ALPHANUMERIC.indexOf(value[i] as string);\n if (i + 1 < value.length) {\n buffer.push(first * 45 + ALPHANUMERIC.indexOf(value[i + 1] as string), 11);\n } else {\n buffer.push(first, 6);\n }\n }\n return buffer;\n }\n\n const bytes = utf8Bytes(value);\n buffer.push(bytes.length, countBits(mode, version));\n for (const byte of bytes) {\n buffer.push(byte, 8);\n }\n return buffer;\n}\n\n/** How many bits the payload needs at a given version, mode included. */\nfunction payloadBits(value: string, mode: QrMode, version: number): number {\n return encodePayload(value, mode, version).bits.length;\n}\n\n/**\n * The most characters any mode can carry, at version 40 level L.\n *\n * DERIVED from the block table rather than transcribed, so it cannot disagree\n * with the capacities the encoder actually enforces. (The published figures\n * are 7089 / 4296 / 2953, and the test asserts these match them.)\n */\nexport function maxCharacters(mode: QrMode): number {\n const bits = blockLayout(MAX_VERSION, 'L').dataCodewords * 8 - 4 - countBits(mode, MAX_VERSION);\n if (mode === 'numeric') {\n return Math.floor((bits * 3) / 10);\n }\n if (mode === 'alphanumeric') {\n return Math.floor((bits * 2) / 11);\n }\n return Math.floor(bits / 8);\n}\n\n/** The largest capacity of any mode — the cheapest possible rejection. */\nconst ABSOLUTE_MAX_CHARACTERS = maxCharacters('numeric');\n\n/**\n * Reject an impossible value in O(1), before anything walks it.\n *\n * `value` is text this code did not author, and it reaches consumers two ways:\n * the package, and as VENDORED SOURCE via `fancy-cli add qr-code` — which\n * carries no manifest, so nothing watches it. So the question is what a hostile\n * caller gets out of it, and the answer used to be: a lot of work for free.\n *\n * `selectVersion` walks versions 1-40 and re-encoded the payload at each one,\n * so a value too long to fit was encoded FORTY times before being refused.\n * Measured on the built bundle: 342 ms for 100 kB, 2.0 s for 500 kB, linear —\n * so a few megabytes through `<QrCode value={userInput} />` blocks the main\n * thread for tens of seconds. The refusal was always correct; it was the COST\n * of the refusal that was the defect.\n *\n * A character count can only ever be <= the byte count, so a string longer than\n * the largest capacity cannot fit in any mode and is refused from `.length`\n * alone, touching none of it.\n */\nfunction tooLongToFit(value: string, mode: QrMode | null): boolean {\n if (value.length > ABSOLUTE_MAX_CHARACTERS) {\n return true;\n }\n return mode !== null && value.length > maxCharacters(mode);\n}\n\n/** The smallest version that fits, or `null` when nothing does. */\nfunction selectVersion(\n value: string,\n mode: QrMode,\n ec: QrErrorCorrection,\n minVersion: number,\n): number | null {\n // The payload's bit length depends on the version ONLY through the width of\n // the character-count indicator, which has three tiers. So it is computed at\n // most three times rather than once per version — which also makes the\n // legitimate path cheaper for a large value, not just the hostile one.\n const bitsForTier = new Map<number, number>();\n for (let version = Math.max(minVersion, MIN_VERSION); version <= MAX_VERSION; version += 1) {\n const width = countBits(mode, version);\n let bits = bitsForTier.get(width);\n if (bits === undefined) {\n bits = payloadBits(value, mode, version);\n bitsForTier.set(width, bits);\n }\n if (bits <= blockLayout(version, ec).dataCodewords * 8) {\n return version;\n }\n }\n return null;\n}\n\n/**\n * Data codewords: payload, terminator, pad to a byte, then alternating pad\n * bytes. Exported for the golden-vector test, which asserts these against the\n * standard's published worked example.\n */\nexport function dataCodewords(value: string, mode: QrMode, version: number, ec: QrErrorCorrection): number[] {\n const capacity = blockLayout(version, ec).dataCodewords * 8;\n const buffer = encodePayload(value, mode, version);\n\n // Terminator: up to four zero bits, truncated if capacity runs out.\n buffer.push(0, Math.min(4, capacity - buffer.bits.length));\n // Then to a byte boundary.\n buffer.push(0, (8 - (buffer.bits.length % 8)) % 8);\n\n const codewords: number[] = [];\n for (let i = 0; i < buffer.bits.length; i += 8) {\n let byte = 0;\n for (let bit = 0; bit < 8; bit += 1) {\n byte = (byte << 1) | (buffer.bits[i + bit] as number);\n }\n codewords.push(byte);\n }\n\n // Pad bytes 0b11101100 / 0b00010001, alternating, as the standard specifies.\n const target = capacity / 8;\n for (let i = 0; codewords.length < target; i += 1) {\n codewords.push(i % 2 === 0 ? 0xec : 0x11);\n }\n return codewords;\n}\n\n/**\n * Split into blocks, compute error correction, and interleave.\n *\n * Interleaving is what makes the error correction work as advertised: a blot\n * on the printed symbol damages a contiguous run of modules, and interleaving\n * spreads that run across every block so no single block exceeds its own\n * correction budget. Concatenating instead would produce a scannable code that\n * fails far sooner than its level claims — passing a round-trip test and\n * failing on paper.\n */\nexport function interleave(codewords: readonly number[], version: number, ec: QrErrorCorrection): number[] {\n const { ecPerBlock, g1Blocks, g1Size, g2Blocks, g2Size } = blockLayout(version, ec);\n\n const dataBlocks: number[][] = [];\n let offset = 0;\n for (let i = 0; i < g1Blocks; i += 1) {\n dataBlocks.push(codewords.slice(offset, offset + g1Size));\n offset += g1Size;\n }\n for (let i = 0; i < g2Blocks; i += 1) {\n dataBlocks.push(codewords.slice(offset, offset + g2Size));\n offset += g2Size;\n }\n\n const ecBlocks = dataBlocks.map((block) => reedSolomon(block, ecPerBlock));\n\n const result: number[] = [];\n const widest = Math.max(g1Size, g2Blocks > 0 ? g2Size : 0);\n for (let i = 0; i < widest; i += 1) {\n for (const block of dataBlocks) {\n if (i < block.length) {\n result.push(block[i] as number);\n }\n }\n }\n for (let i = 0; i < ecPerBlock; i += 1) {\n for (const block of ecBlocks) {\n result.push(block[i] as number);\n }\n }\n return result;\n}\n\n// --- Matrix construction ---------------------------------------------------\n\nexport type Grid = (boolean | null)[][];\n\n/**\n * A grid with every function pattern placed and data positions left `null`.\n *\n * Exported for verification. The round-trip decoder in the test needs to know\n * which modules carry data, and reconstructing that knowledge separately would\n * duplicate the layout and share its bugs. Using the same template is safe\n * here because the table-consistency check anchors it to an independent fact:\n * the number of free modules must equal the codeword count in the transcribed\n * block table, so a wrong finder, timing or alignment layout fails there.\n */\nexport function reservedModules(version: number): Grid {\n const size = version * 4 + 17;\n const grid: Grid = Array.from({ length: size }, () => new Array<boolean | null>(size).fill(null));\n\n const set = (row: number, col: number, dark: boolean): void => {\n (grid[row] as (boolean | null)[])[col] = dark;\n };\n\n // Three finder patterns with their separators.\n for (const [baseRow, baseCol] of [\n [0, 0],\n [0, size - 7],\n [size - 7, 0],\n ] as const) {\n for (let row = -1; row <= 7; row += 1) {\n for (let col = -1; col <= 7; col += 1) {\n const r = baseRow + row;\n const c = baseCol + col;\n if (r < 0 || r >= size || c < 0 || c >= size) {\n continue;\n }\n const ring = Math.max(Math.abs(row - 3), Math.abs(col - 3));\n set(r, c, ring !== 2 && ring <= 3);\n }\n }\n }\n\n // Timing patterns, row and column 6.\n for (let i = 0; i < size; i += 1) {\n if ((grid[6] as (boolean | null)[])[i] === null) {\n set(6, i, i % 2 === 0);\n }\n if ((grid[i] as (boolean | null)[])[6] === null) {\n set(i, 6, i % 2 === 0);\n }\n }\n\n // Alignment patterns, except where a finder already sits.\n const positions = alignmentPositions(version);\n for (const row of positions) {\n for (const col of positions) {\n const nearFinder =\n (row <= 8 && col <= 8) || (row <= 8 && col >= size - 9) || (row >= size - 9 && col <= 8);\n if (nearFinder) {\n continue;\n }\n for (let dr = -2; dr <= 2; dr += 1) {\n for (let dc = -2; dc <= 2; dc += 1) {\n const ring = Math.max(Math.abs(dr), Math.abs(dc));\n set(row + dr, col + dc, ring !== 1);\n }\n }\n }\n }\n\n // Format information areas, reserved now and written after masking. The\n // module at (size - 8, 8) is always dark.\n for (let i = 0; i < 9; i += 1) {\n if ((grid[8] as (boolean | null)[])[i] === null) {\n set(8, i, false);\n }\n if ((grid[i] as (boolean | null)[])[8] === null) {\n set(i, 8, false);\n }\n }\n for (let i = 0; i < 8; i += 1) {\n set(8, size - 1 - i, false);\n set(size - 1 - i, 8, false);\n }\n set(size - 8, 8, true);\n\n // Version information, versions 7 and up.\n if (version >= 7) {\n const bits = versionBits(version);\n for (let i = 0; i < 18; i += 1) {\n const bit = ((bits >>> i) & 1) === 1;\n set(Math.floor(i / 3), size - 11 + (i % 3), bit);\n set(size - 11 + (i % 3), Math.floor(i / 3), bit);\n }\n }\n\n return grid;\n}\n\n/** How many modules a version leaves free for data, counted from the grid. */\nexport function rawDataModules(version: number): number {\n const grid = reservedModules(version);\n let free = 0;\n for (const row of grid) {\n for (const cell of row) {\n if (cell === null) {\n free += 1;\n }\n }\n }\n return free;\n}\n\n/** Place the interleaved codewords in the standard's zigzag order. */\nfunction placeData(grid: Grid, codewords: readonly number[]): void {\n const size = grid.length;\n let bitIndex = 0;\n const nextBit = (): boolean => {\n const byte = codewords[bitIndex >>> 3];\n // Past the end is a remainder bit: light, per the standard.\n const bit = byte === undefined ? 0 : (byte >>> (7 - (bitIndex & 7))) & 1;\n bitIndex += 1;\n return bit === 1;\n };\n\n let upward = true;\n for (let right = size - 1; right >= 1; right -= 2) {\n // Column 6 is the vertical timing pattern; the pair of columns skips it.\n const pair = right === 6 ? [5, 4] : [right, right - 1];\n for (let step = 0; step < size; step += 1) {\n const row = upward ? size - 1 - step : step;\n for (const col of pair) {\n if ((grid[row] as (boolean | null)[])[col] === null) {\n (grid[row] as (boolean | null)[])[col] = nextBit();\n }\n }\n }\n if (right === 6) {\n right -= 1;\n }\n upward = !upward;\n }\n}\n\n/** The eight mask conditions. `true` means invert this module. */\nfunction maskCondition(mask: number, row: number, col: number): boolean {\n switch (mask) {\n case 0:\n return (row + col) % 2 === 0;\n case 1:\n return row % 2 === 0;\n case 2:\n return col % 3 === 0;\n case 3:\n return (row + col) % 3 === 0;\n case 4:\n return (Math.floor(row / 2) + Math.floor(col / 3)) % 2 === 0;\n case 5:\n return ((row * col) % 2) + ((row * col) % 3) === 0;\n case 6:\n return (((row * col) % 2) + ((row * col) % 3)) % 2 === 0;\n default:\n return (((row + col) % 2) + ((row * col) % 3)) % 2 === 0;\n }\n}\n\n/**\n * The four penalty rules, scored on a finished candidate.\n *\n * This is the step that is easy to skip and expensive to skip: the rules exist\n * because some masks leave large light or dark areas, or patterns that look\n * like a finder, and a decoder locks onto the wrong feature. A symbol with a\n * badly chosen mask still decodes in software and fails under a phone camera —\n * which is the worst possible place for it to fail, because every test here\n * would pass.\n */\nexport function penalty(modules: readonly boolean[][]): number {\n const size = modules.length;\n let score = 0;\n\n // Rule 1: runs of five or more same-coloured modules in a line.\n const scoreLine = (run: number): number => (run >= 5 ? run - 2 : 0);\n for (let i = 0; i < size; i += 1) {\n for (const horizontal of [true, false]) {\n let run = 1;\n for (let j = 1; j < size; j += 1) {\n const prev = horizontal\n ? (modules[i] as boolean[])[j - 1]\n : (modules[j - 1] as boolean[])[i];\n const cur = horizontal ? (modules[i] as boolean[])[j] : (modules[j] as boolean[])[i];\n if (cur === prev) {\n run += 1;\n } else {\n score += scoreLine(run);\n run = 1;\n }\n }\n score += scoreLine(run);\n }\n }\n\n // Rule 2: every 2x2 block of one colour.\n for (let row = 0; row < size - 1; row += 1) {\n for (let col = 0; col < size - 1; col += 1) {\n const a = (modules[row] as boolean[])[col];\n if (\n a === (modules[row] as boolean[])[col + 1] &&\n a === (modules[row + 1] as boolean[])[col] &&\n a === (modules[row + 1] as boolean[])[col + 1]\n ) {\n score += 3;\n }\n }\n }\n\n // Rule 3: the finder-like 1:1:3:1:1 pattern with four light modules either\n // side. This is the rule that protects a decoder's pattern detection.\n const finderish = [true, false, true, true, true, false, true];\n const light4 = [false, false, false, false];\n const matches = (line: readonly boolean[], at: number, pattern: readonly boolean[]): boolean =>\n pattern.every((want, i) => line[at + i] === want);\n for (let i = 0; i < size; i += 1) {\n const row = modules[i] as boolean[];\n const col = modules.map((r) => (r as boolean[])[i] as boolean);\n for (const line of [row, col]) {\n for (let j = 0; j + 7 <= size; j += 1) {\n if (!matches(line, j, finderish)) {\n continue;\n }\n // Each ELEVEN-module window counts separately, so a pattern with four\n // light modules on BOTH sides scores 80 rather than 40.\n //\n // The prose rule (\"add 40 each time the pattern appears with four\n // light modules on either side\") is ambiguous about that case, and it\n // matters: this score is what picks the mask, and the wrong mask\n // produces a symbol that decodes perfectly in software and reads badly\n // under a camera. No test here can catch that -- so the convention is\n // pinned by a test instead, and this follows the one the reference\n // implementations use rather than the reading that happened to come\n // first.\n if (j >= 4 && matches(line, j - 4, light4)) {\n score += 40;\n }\n if (j + 11 <= size && matches(line, j + 7, light4)) {\n score += 40;\n }\n }\n }\n }\n\n // Rule 4: deviation of the dark-module proportion from 50%.\n let dark = 0;\n for (const row of modules) {\n for (const cell of row) {\n if (cell) {\n dark += 1;\n }\n }\n }\n const percent = (dark * 100) / (size * size);\n score += Math.floor(Math.abs(percent - 50) / 5) * 10;\n\n return score;\n}\n\n/** Write the 15 format bits into both of their locations. */\nfunction applyFormat(modules: boolean[][], ec: QrErrorCorrection, mask: number): void {\n const size = modules.length;\n const bits = (FORMAT_BITS[ec][mask] as number) >>> 0;\n const bit = (i: number): boolean => ((bits >>> i) & 1) === 1;\n\n // Bits 0-5 up the left column, bit 6 at (8,7)... the split placement is the\n // standard's, not a simplification of it.\n for (let i = 0; i <= 5; i += 1) {\n (modules[8] as boolean[])[i] = bit(14 - i);\n }\n (modules[8] as boolean[])[7] = bit(8);\n (modules[8] as boolean[])[8] = bit(7);\n (modules[7] as boolean[])[8] = bit(6);\n for (let i = 9; i <= 14; i += 1) {\n (modules[14 - i] as boolean[])[8] = bit(14 - i);\n }\n\n // The second copy, split across the other two corners: SEVEN modules up the\n // column beside the bottom-left finder, then EIGHT along the row beside the\n // top-right one.\n //\n // The 7/8 split is not arbitrary and getting it wrong is quiet. An 8/7 split\n // puts bit 7 at (size - 8, 8) -- which is the dark module, overwritten on\n // the next line -- so the symbol still decodes from the FIRST copy and\n // carries a corrupt second one. A reader that happens to use the second copy\n // refuses the symbol, and nothing in a round-trip test notices, because a\n // decoder reading the first copy never looks.\n for (let i = 0; i <= 6; i += 1) {\n (modules[size - 1 - i] as boolean[])[8] = bit(i);\n }\n for (let i = 7; i <= 14; i += 1) {\n (modules[8] as boolean[])[size - 15 + i] = bit(i);\n }\n (modules[size - 8] as boolean[])[8] = true;\n}\n\nexport interface EncodeOptions {\n errorCorrection?: QrErrorCorrection;\n /** Force a mode instead of selecting the narrowest that fits. */\n mode?: QrMode;\n /** Force a version. Throws if the value does not fit. */\n version?: number;\n /** Force a mask instead of scoring all eight. For tests and golden vectors. */\n mask?: number;\n}\n\n/**\n * Encode a string into a QR symbol.\n *\n * @throws RangeError when the value cannot fit, or when a forced version is\n * too small for it. **Throwing is deliberate**: the alternative is returning\n * a truncated symbol, which scans cleanly and yields the wrong string — a\n * silent corruption on the one surface whose entire job is to carry a value\n * accurately.\n */\nexport function encodeQr(value: string, options: EncodeOptions = {}): QrSymbol {\n const ec = options.errorCorrection ?? 'M';\n\n // Before `selectMode`, which walks the whole string. See `tooLongToFit`:\n // this is the difference between refusing a 5 MB value instantly and\n // spending tens of seconds on the main thread to reach the same answer.\n if (tooLongToFit(value, options.mode ?? null)) {\n throw new RangeError(\n `Value is too long for a QR code (${value.length} characters; the maximum any mode can carry is ${ABSOLUTE_MAX_CHARACTERS})`,\n );\n }\n\n const mode = options.mode ?? selectMode(value);\n if (tooLongToFit(value, mode)) {\n throw new RangeError(\n `Value is too long for a QR code in ${mode} mode (${value.length} characters; the maximum is ${maxCharacters(mode)})`,\n );\n }\n\n if (mode === 'numeric' && !/^[0-9]*$/.test(value)) {\n throw new RangeError('Numeric mode accepts digits only');\n }\n if (mode === 'alphanumeric' && ![...value].every((char) => ALPHANUMERIC.includes(char))) {\n throw new RangeError('Alphanumeric mode accepts 0-9 A-Z space and $%*+-./: only');\n }\n\n let version: number;\n if (options.version !== undefined) {\n if (options.version < MIN_VERSION || options.version > MAX_VERSION) {\n throw new RangeError(`Version must be ${MIN_VERSION}-${MAX_VERSION}`);\n }\n version = options.version;\n if (payloadBits(value, mode, version) > blockLayout(version, ec).dataCodewords * 8) {\n throw new RangeError(`Value does not fit in version ${version} at level ${ec}`);\n }\n } else {\n const chosen = selectVersion(value, mode, ec, MIN_VERSION);\n if (chosen === null) {\n throw new RangeError(\n `Value is too long for a QR code at level ${ec} (${value.length} characters)`,\n );\n }\n version = chosen;\n }\n\n const codewords = interleave(dataCodewords(value, mode, version, ec), version, ec);\n const template = reservedModules(version);\n\n const candidates: { mask: number; modules: boolean[][] }[] = [];\n const masksToTry = options.mask === undefined ? [0, 1, 2, 3, 4, 5, 6, 7] : [options.mask];\n for (const mask of masksToTry) {\n const grid = template.map((row) => [...row]);\n placeData(grid, codewords);\n const modules = grid.map((row, rowIndex) =>\n row.map((cell, colIndex) => {\n const value_ = cell as boolean;\n // Only data modules are masked; function patterns never are, which is\n // why the mask is applied against the TEMPLATE's null positions rather\n // than against the finished grid.\n const isData = (template[rowIndex] as (boolean | null)[])[colIndex] === null;\n return isData && maskCondition(mask, rowIndex, colIndex) ? !value_ : value_;\n }),\n );\n applyFormat(modules, ec, mask);\n candidates.push({ mask, modules });\n }\n\n const best = candidates.reduce((a, b) => (penalty(a.modules) <= penalty(b.modules) ? a : b));\n\n return {\n modules: best.modules,\n size: version * 4 + 17,\n version,\n errorCorrection: ec,\n mode,\n mask: best.mask,\n };\n}\n","import { forwardRef, useMemo } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { encodeQr } from \"./qr-encode\";\nimport type { QrCodeProps } from \"./QrCode.types\";\n\n/**\n * A QR code, as an SVG, with no dependencies.\n *\n * ## Why SVG and one path\n *\n * The symbol is drawn as a **single `<path>`** of one-unit squares on a\n * `viewBox` sized in modules, not as a grid of `<rect>` elements. A version 10\n * symbol is 57x57 — over three thousand modules — and a rect each would be\n * three thousand DOM nodes for something that never changes. One path is one\n * node, and because the viewBox is in module units the symbol is resolution\n * independent: `size` scales it with no resampling, so it stays crisp at any\n * size and prints at the printer's resolution rather than the screen's.\n *\n * This matters more than it sounds for scanning. A raster QR code scaled to a\n * non-integer multiple of its module size gets blurred module edges, and a\n * scanner reading a blurred edge guesses. Vector output cannot have that\n * problem.\n *\n * ## It is an image of a value, not the value\n *\n * A QR code is unreadable to anyone without a second device pointed at the\n * screen — which includes every screen-reader user and anyone whose phone is\n * the device showing it. So `label` is required, and the value should ALSO be\n * reachable as text or a link beside it. A pairing panel that shows only a\n * code is a panel some people cannot use at all.\n *\n * @example\n * ```tsx\n * <QrCode\n * value=\"https://device.example.com/pair#482913\"\n * size={192}\n * label=\"Pair this device\"\n * />\n *\n * // On a dark surface, set both colours: a transparent background renders\n * // dark-on-dark and will not scan.\n * <QrCode value={url} label=\"Pair\" foreground=\"#0b0b0c\" background=\"#ffffff\" />\n * ```\n */\nexport const QrCode = forwardRef<SVGSVGElement, QrCodeProps>(\n (\n {\n value,\n size = 192,\n errorCorrection = \"M\",\n label,\n quietZone = 4,\n foreground = \"currentColor\",\n background = \"transparent\",\n mode,\n version,\n className,\n ...props\n },\n ref,\n ) => {\n // Encoding a version 40 symbol is real work (Reed-Solomon over 2,956\n // codewords, then eight masks scored). Nothing about it depends on `size`\n // or the colours, so it is memoised on the inputs that actually change it\n // — otherwise a parent re-render on hover re-encodes the whole symbol.\n const symbol = useMemo(\n () => encodeQr(value, { errorCorrection, mode, version }),\n [value, errorCorrection, mode, version],\n );\n\n const extent = symbol.size + quietZone * 2;\n\n const path = useMemo(() => {\n const parts: string[] = [];\n for (let row = 0; row < symbol.size; row += 1) {\n const line = symbol.modules[row] as boolean[];\n let col = 0;\n while (col < symbol.size) {\n if (!line[col]) {\n col += 1;\n continue;\n }\n // Run-length the dark modules along the row: a horizontal run\n // becomes one rectangle rather than one per module, which roughly\n // halves the path for a typical symbol and costs nothing to read.\n let run = 1;\n while (col + run < symbol.size && line[col + run]) {\n run += 1;\n }\n parts.push(`M${col + quietZone} ${row + quietZone}h${run}v1h-${run}z`);\n col += run;\n }\n }\n return parts.join(\"\");\n }, [symbol, quietZone]);\n\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox={`0 0 ${extent} ${extent}`}\n role=\"img\"\n aria-label={label}\n // Nearest-neighbour rather than smoothing, for the rasterisers that\n // apply it anyway: a blurred module edge is a module a scanner has to\n // guess at.\n shapeRendering=\"crispEdges\"\n className={cn(\"fa-qr-code\", className)}\n {...props}\n >\n {background !== \"transparent\" && (\n <rect width={extent} height={extent} fill={background} />\n )}\n <path d={path} fill={foreground} />\n </svg>\n );\n },\n);\n\nQrCode.displayName = \"QrCode\";\n"]}
|
package/dist/index.cjs
CHANGED
|
@@ -33,7 +33,7 @@ var chunkRWOH2ADL_cjs = require('./chunk-RWOH2ADL.cjs');
|
|
|
33
33
|
var chunkDNV7MUEE_cjs = require('./chunk-DNV7MUEE.cjs');
|
|
34
34
|
var chunkISPCXIJZ_cjs = require('./chunk-ISPCXIJZ.cjs');
|
|
35
35
|
var chunkWKAEAGMT_cjs = require('./chunk-WKAEAGMT.cjs');
|
|
36
|
-
var
|
|
36
|
+
var chunkFBXYZC4Z_cjs = require('./chunk-FBXYZC4Z.cjs');
|
|
37
37
|
var chunkMTUH2X3W_cjs = require('./chunk-MTUH2X3W.cjs');
|
|
38
38
|
var chunkWKNVZUWZ_cjs = require('./chunk-WKNVZUWZ.cjs');
|
|
39
39
|
var chunkGBGJWAXZ_cjs = require('./chunk-GBGJWAXZ.cjs');
|
|
@@ -266,15 +266,15 @@ Object.defineProperty(exports, "PullQuote", {
|
|
|
266
266
|
});
|
|
267
267
|
Object.defineProperty(exports, "QrCode", {
|
|
268
268
|
enumerable: true,
|
|
269
|
-
get: function () { return
|
|
269
|
+
get: function () { return chunkFBXYZC4Z_cjs.QrCode; }
|
|
270
270
|
});
|
|
271
271
|
Object.defineProperty(exports, "encodeQr", {
|
|
272
272
|
enumerable: true,
|
|
273
|
-
get: function () { return
|
|
273
|
+
get: function () { return chunkFBXYZC4Z_cjs.encodeQr; }
|
|
274
274
|
});
|
|
275
275
|
Object.defineProperty(exports, "selectMode", {
|
|
276
276
|
enumerable: true,
|
|
277
|
-
get: function () { return
|
|
277
|
+
get: function () { return chunkFBXYZC4Z_cjs.selectMode; }
|
|
278
278
|
});
|
|
279
279
|
Object.defineProperty(exports, "ReasonTag", {
|
|
280
280
|
enumerable: true,
|
package/dist/index.js
CHANGED
|
@@ -31,7 +31,7 @@ export { Progress } from './chunk-P7PKK5BO.js';
|
|
|
31
31
|
export { PromptInput, browserPlatformHints, detectPlatform, modifierKeyLabel } from './chunk-O3WEV562.js';
|
|
32
32
|
export { Tooltip } from './chunk-35EN5AYE.js';
|
|
33
33
|
export { PullQuote } from './chunk-NDUEPDNS.js';
|
|
34
|
-
export { QrCode, encodeQr, selectMode } from './chunk-
|
|
34
|
+
export { QrCode, encodeQr, selectMode } from './chunk-ZDDWAVVZ.js';
|
|
35
35
|
export { ReasonTag } from './chunk-DCDW3LW6.js';
|
|
36
36
|
export { Popover, usePopover } from './chunk-6KXAFP2T.js';
|
|
37
37
|
export { MobileMenu, useMobileMenu } from './chunk-P7F32HIH.js';
|
package/dist/qr-code.cjs
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkFBXYZC4Z_cjs = require('./chunk-FBXYZC4Z.cjs');
|
|
4
4
|
require('./chunk-ZU5Q77OT.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
Object.defineProperty(exports, "QrCode", {
|
|
9
9
|
enumerable: true,
|
|
10
|
-
get: function () { return
|
|
10
|
+
get: function () { return chunkFBXYZC4Z_cjs.QrCode; }
|
|
11
11
|
});
|
|
12
12
|
Object.defineProperty(exports, "encodeQr", {
|
|
13
13
|
enumerable: true,
|
|
14
|
-
get: function () { return
|
|
14
|
+
get: function () { return chunkFBXYZC4Z_cjs.encodeQr; }
|
|
15
15
|
});
|
|
16
16
|
Object.defineProperty(exports, "selectMode", {
|
|
17
17
|
enumerable: true,
|
|
18
|
-
get: function () { return
|
|
18
|
+
get: function () { return chunkFBXYZC4Z_cjs.selectMode; }
|
|
19
19
|
});
|
|
20
20
|
//# sourceMappingURL=qr-code.cjs.map
|
|
21
21
|
//# sourceMappingURL=qr-code.cjs.map
|
package/dist/qr-code.d.cts
CHANGED
|
@@ -186,7 +186,7 @@ interface QrCodeProps extends Omit<SVGAttributes<SVGSVGElement>, "children" | "v
|
|
|
186
186
|
* @example
|
|
187
187
|
* ```tsx
|
|
188
188
|
* <QrCode
|
|
189
|
-
* value="https://
|
|
189
|
+
* value="https://device.example.com/pair#482913"
|
|
190
190
|
* size={192}
|
|
191
191
|
* label="Pair this device"
|
|
192
192
|
* />
|
package/dist/qr-code.d.ts
CHANGED
|
@@ -186,7 +186,7 @@ interface QrCodeProps extends Omit<SVGAttributes<SVGSVGElement>, "children" | "v
|
|
|
186
186
|
* @example
|
|
187
187
|
* ```tsx
|
|
188
188
|
* <QrCode
|
|
189
|
-
* value="https://
|
|
189
|
+
* value="https://device.example.com/pair#482913"
|
|
190
190
|
* size={192}
|
|
191
191
|
* label="Pair this device"
|
|
192
192
|
* />
|
package/dist/qr-code.js
CHANGED
package/docs/QrCode.md
CHANGED
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/QrCode/qr-tables.ts","../src/components/QrCode/qr-encode.ts","../src/components/QrCode/QrCode.tsx"],"names":["dataCodewords","forwardRef","useMemo","jsxs","cn","jsx"],"mappings":"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","file":"chunk-6KFCJLJN.cjs","sourcesContent":["/**\n * ISO/IEC 18004 table data for the QR encoder. **Data, not logic** — kept in\n * its own module so the algorithm beside it can be read without scrolling past\n * 160 rows, and so a correction here is a diff that cannot touch behaviour.\n *\n * There is no formula for these: the block structure per version and error\n * correction level is a table in the standard. They were taken from the\n * published error-correction table at\n * <https://www.thonky.com/qr-code-tutorial/error-correction-table> rather than\n * recalled, and every row is checked by `qr-code.test.tsx` against three\n * equations that must all hold simultaneously:\n *\n * 1. `dataCodewords === g1Blocks * g1Size + g2Blocks * g2Size`\n * 2. `totalCodewords === dataCodewords + ecPerBlock * (g1Blocks + g2Blocks)`\n * 3. `totalCodewords === rawDataModules(version) / 8`, where\n * `rawDataModules` is counted from the matrix THIS code builds.\n *\n * The third is the one worth having: it ties a transcribed table to an\n * independently constructed matrix, so a mistyped row, a wrong alignment\n * pattern position and a wrong function-pattern layout cannot all agree.\n */\n\n/** Error correction level. Higher levels survive more damage and hold less. */\nexport type QrErrorCorrection = 'L' | 'M' | 'Q' | 'H';\n\nexport const EC_LEVELS: readonly QrErrorCorrection[] = ['L', 'M', 'Q', 'H'];\n\n/** The 2-bit indicator each level carries in the format information. */\nexport const EC_FORMAT_BITS: Record<QrErrorCorrection, number> = {\n L: 0b01,\n M: 0b00,\n Q: 0b11,\n H: 0b10,\n};\n\nexport interface BlockLayout {\n /** Data codewords in the whole symbol. */\n dataCodewords: number;\n /** Error correction codewords per block — the same for every block. */\n ecPerBlock: number;\n /** Blocks in group 1, and how many data codewords each holds. */\n g1Blocks: number;\n g1Size: number;\n /** Blocks in group 2 (always `g1Size + 1` each when present). */\n g2Blocks: number;\n g2Size: number;\n}\n\n/**\n * `[dataCodewords, ecPerBlock, g1Blocks, g1Size, g2Blocks, g2Size]` indexed by\n * `[version - 1]` then by EC level, in `L, M, Q, H` order.\n */\nconst BLOCK_TABLE: readonly (readonly [number, number, number, number, number, number])[][] = [\n // v1\n [[19, 7, 1, 19, 0, 0], [16, 10, 1, 16, 0, 0], [13, 13, 1, 13, 0, 0], [9, 17, 1, 9, 0, 0]],\n [[34, 10, 1, 34, 0, 0], [28, 16, 1, 28, 0, 0], [22, 22, 1, 22, 0, 0], [16, 28, 1, 16, 0, 0]],\n [[55, 15, 1, 55, 0, 0], [44, 26, 1, 44, 0, 0], [34, 18, 2, 17, 0, 0], [26, 22, 2, 13, 0, 0]],\n [[80, 20, 1, 80, 0, 0], [64, 18, 2, 32, 0, 0], [48, 26, 2, 24, 0, 0], [36, 16, 4, 9, 0, 0]],\n [[108, 26, 1, 108, 0, 0], [86, 24, 2, 43, 0, 0], [62, 18, 2, 15, 2, 16], [46, 22, 2, 11, 2, 12]],\n [[136, 18, 2, 68, 0, 0], [108, 16, 4, 27, 0, 0], [76, 24, 4, 19, 0, 0], [60, 28, 4, 15, 0, 0]],\n [[156, 20, 2, 78, 0, 0], [124, 18, 4, 31, 0, 0], [88, 18, 2, 14, 4, 15], [66, 26, 4, 13, 1, 14]],\n [[194, 24, 2, 97, 0, 0], [154, 22, 2, 38, 2, 39], [110, 22, 4, 18, 2, 19], [86, 26, 4, 14, 2, 15]],\n [[232, 30, 2, 116, 0, 0], [182, 22, 3, 36, 2, 37], [132, 20, 4, 16, 4, 17], [100, 24, 4, 12, 4, 13]],\n // v10\n [[274, 18, 2, 68, 2, 69], [216, 26, 4, 43, 1, 44], [154, 24, 6, 19, 2, 20], [122, 28, 6, 15, 2, 16]],\n [[324, 20, 4, 81, 0, 0], [254, 30, 1, 50, 4, 51], [180, 28, 4, 22, 4, 23], [140, 24, 3, 12, 8, 13]],\n [[370, 24, 2, 92, 2, 93], [290, 22, 6, 36, 2, 37], [206, 26, 4, 20, 6, 21], [158, 28, 7, 14, 4, 15]],\n [[428, 26, 4, 107, 0, 0], [334, 22, 8, 37, 1, 38], [244, 24, 8, 20, 4, 21], [180, 22, 12, 11, 4, 12]],\n [[461, 30, 3, 115, 1, 116], [365, 24, 4, 40, 5, 41], [261, 20, 11, 16, 5, 17], [197, 24, 11, 12, 5, 13]],\n [[523, 22, 5, 87, 1, 88], [415, 24, 5, 41, 5, 42], [295, 30, 5, 24, 7, 25], [223, 24, 11, 12, 7, 13]],\n [[589, 24, 5, 98, 1, 99], [453, 28, 7, 45, 3, 46], [325, 24, 15, 19, 2, 20], [253, 30, 3, 15, 13, 16]],\n [[647, 28, 1, 107, 5, 108], [507, 28, 10, 46, 1, 47], [367, 28, 1, 22, 15, 23], [283, 28, 2, 14, 17, 15]],\n [[721, 30, 5, 120, 1, 121], [563, 26, 9, 43, 4, 44], [397, 28, 17, 22, 1, 23], [313, 28, 2, 14, 19, 15]],\n [[795, 28, 3, 113, 4, 114], [627, 26, 3, 44, 11, 45], [445, 26, 17, 21, 4, 22], [341, 26, 9, 13, 16, 14]],\n // v20\n [[861, 28, 3, 107, 5, 108], [669, 26, 3, 41, 13, 42], [485, 30, 15, 24, 5, 25], [385, 28, 15, 15, 10, 16]],\n [[932, 28, 4, 116, 4, 117], [714, 26, 17, 42, 0, 0], [512, 28, 17, 22, 6, 23], [406, 30, 19, 16, 6, 17]],\n [[1006, 28, 2, 111, 7, 112], [782, 28, 17, 46, 0, 0], [568, 30, 7, 24, 16, 25], [442, 24, 34, 13, 0, 0]],\n [[1094, 30, 4, 121, 5, 122], [860, 28, 4, 47, 14, 48], [614, 30, 11, 24, 14, 25], [464, 30, 16, 15, 14, 16]],\n [[1174, 30, 6, 117, 4, 118], [914, 28, 6, 45, 14, 46], [664, 30, 11, 24, 16, 25], [514, 30, 30, 16, 2, 17]],\n [[1276, 26, 8, 106, 4, 107], [1000, 28, 8, 47, 13, 48], [718, 30, 7, 24, 22, 25], [538, 30, 22, 15, 13, 16]],\n [[1370, 28, 10, 114, 2, 115], [1062, 28, 19, 46, 4, 47], [754, 28, 28, 22, 6, 23], [596, 30, 33, 16, 4, 17]],\n [[1468, 30, 8, 122, 4, 123], [1128, 28, 22, 45, 3, 46], [808, 30, 8, 23, 26, 24], [628, 30, 12, 15, 28, 16]],\n [[1531, 30, 3, 117, 10, 118], [1193, 28, 3, 45, 23, 46], [871, 30, 4, 24, 31, 25], [661, 30, 11, 15, 31, 16]],\n [[1631, 30, 7, 116, 7, 117], [1267, 28, 21, 45, 7, 46], [911, 30, 1, 23, 37, 24], [701, 30, 19, 15, 26, 16]],\n // v30\n [[1735, 30, 5, 115, 10, 116], [1373, 28, 19, 47, 10, 48], [985, 30, 15, 24, 25, 25], [745, 30, 23, 15, 25, 16]],\n [[1843, 30, 13, 115, 3, 116], [1455, 28, 2, 46, 29, 47], [1033, 30, 42, 24, 1, 25], [793, 30, 23, 15, 28, 16]],\n [[1955, 30, 17, 115, 0, 0], [1541, 28, 10, 46, 23, 47], [1115, 30, 10, 24, 35, 25], [845, 30, 19, 15, 35, 16]],\n [[2071, 30, 17, 115, 1, 116], [1631, 28, 14, 46, 21, 47], [1171, 30, 29, 24, 19, 25], [901, 30, 11, 15, 46, 16]],\n [[2191, 30, 13, 115, 6, 116], [1725, 28, 14, 46, 23, 47], [1231, 30, 44, 24, 7, 25], [961, 30, 59, 16, 1, 17]],\n [[2306, 30, 12, 121, 7, 122], [1812, 28, 12, 47, 26, 48], [1286, 30, 39, 24, 14, 25], [986, 30, 22, 15, 41, 16]],\n [[2434, 30, 6, 121, 14, 122], [1914, 28, 6, 47, 34, 48], [1354, 30, 46, 24, 10, 25], [1054, 30, 2, 15, 64, 16]],\n [[2566, 30, 17, 122, 4, 123], [1992, 28, 29, 46, 14, 47], [1426, 30, 49, 24, 10, 25], [1096, 30, 24, 15, 46, 16]],\n [[2702, 30, 4, 122, 18, 123], [2102, 28, 13, 46, 32, 47], [1502, 30, 48, 24, 14, 25], [1142, 30, 42, 15, 32, 16]],\n [[2812, 30, 20, 117, 4, 118], [2216, 28, 40, 47, 7, 48], [1582, 30, 43, 24, 22, 25], [1222, 30, 10, 15, 67, 16]],\n // v40\n [[2956, 30, 19, 118, 6, 119], [2334, 28, 18, 47, 31, 48], [1666, 30, 34, 24, 34, 25], [1276, 30, 20, 15, 61, 16]],\n];\n\nexport const MIN_VERSION = 1;\nexport const MAX_VERSION = 40;\n\n/** Block structure for a version and error correction level. */\nexport function blockLayout(version: number, ec: QrErrorCorrection): BlockLayout {\n const row = BLOCK_TABLE[version - 1]?.[EC_LEVELS.indexOf(ec)];\n if (!row) {\n throw new RangeError(`No block layout for version ${version} level ${ec}`);\n }\n const [dataCodewords, ecPerBlock, g1Blocks, g1Size, g2Blocks, g2Size] = row;\n return { dataCodewords, ecPerBlock, g1Blocks, g1Size, g2Blocks, g2Size };\n}\n\n/**\n * The 15-bit format information for a level and mask, as published.\n *\n * These are a BCH(15,5) code XOR'd with a fixed mask, so they could be\n * computed — and the first draft did compute them. They are listed instead\n * because the computation and its verification would then share one\n * implementation: a wrong generator polynomial would produce a wrong table and\n * a test that agreed with it. A transcribed table cannot agree with a bug.\n *\n * Source: <https://www.thonky.com/qr-code-tutorial/format-version-tables>.\n * Indexed `[level][mask]`.\n */\nexport const FORMAT_BITS: Record<QrErrorCorrection, readonly number[]> = {\n L: [\n 0b111011111000100, 0b111001011110011, 0b111110110101010, 0b111100010011101,\n 0b110011000101111, 0b110001100011000, 0b110110001000001, 0b110100101110110,\n ],\n M: [\n 0b101010000010010, 0b101000100100101, 0b101111001111100, 0b101101101001011,\n 0b100010111111001, 0b100000011001110, 0b100111110010111, 0b100101010100000,\n ],\n Q: [\n 0b011010101011111, 0b011000001101000, 0b011111100110001, 0b011101000000110,\n 0b010010010110100, 0b010000110000011, 0b010111011011010, 0b010101111101101,\n ],\n H: [\n 0b001011010001001, 0b001001110111110, 0b001110011100111, 0b001100111010000,\n 0b000011101100010, 0b000001001010101, 0b000110100001100, 0b000100000111011,\n ],\n};\n\n/**\n * The 18-bit version information, present only for versions 7 and up.\n *\n * A BCH(18,6) code. Computed rather than tabled — 34 rows of 18 bits is more\n * transcription risk than the arithmetic is, and unlike the format bits there\n * are published values for versions 7, 8, 9, 10 and 40 to check it against,\n * which the test does.\n */\nexport function versionBits(version: number): number {\n let remainder = version;\n for (let i = 0; i < 12; i += 1) {\n remainder = (remainder << 1) ^ ((remainder >>> 11) * 0b1111100100101);\n }\n return ((version << 12) | remainder) >>> 0;\n}\n\n/**\n * Centre coordinates of the alignment patterns for a version.\n *\n * Derived rather than tabled, and the derivation is checked by the codeword\n * count equation in the test: a wrong position changes how many modules are\n * free for data, so the count would not match the block table.\n *\n * Version 32 is a genuine special case in the standard — its spacing does not\n * follow the rule the other versions do.\n */\nexport function alignmentPositions(version: number): number[] {\n if (version === 1) {\n return [];\n }\n const count = Math.floor(version / 7) + 2;\n const size = version * 4 + 17;\n const step = version === 32 ? 26 : Math.ceil((size - 13) / (count * 2 - 2)) * 2;\n\n const positions = [6];\n for (let pos = size - 7; positions.length < count; pos -= step) {\n positions.unshift(pos);\n }\n return positions.sort((a, b) => a - b);\n}\n","/**\n * A QR encoder, dependency-free.\n *\n * ISO/IEC 18004, versions 1–40, error correction L/M/Q/H, with numeric,\n * alphanumeric and byte modes and automatic selection between them. No\n * Kanji mode and no structured append — neither has a caller here, and an\n * untested branch in an encoder is worse than an absent one because the\n * failure is a code a phone silently refuses to read.\n *\n * Table data and its provenance live in `./qr-tables`.\n */\nimport {\n EC_FORMAT_BITS,\n FORMAT_BITS,\n MAX_VERSION,\n MIN_VERSION,\n alignmentPositions,\n blockLayout,\n versionBits,\n type QrErrorCorrection,\n} from './qr-tables';\n\nexport type { QrErrorCorrection };\n\n/** Which encoding mode a value is carried in. */\nexport type QrMode = 'numeric' | 'alphanumeric' | 'byte';\n\nconst MODE_INDICATOR: Record<QrMode, number> = { numeric: 0b0001, alphanumeric: 0b0010, byte: 0b0100 };\n\n/** The character set alphanumeric mode can carry, in its own index order. */\nconst ALPHANUMERIC = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:';\n\nexport interface QrSymbol {\n /** `size * size` modules, row-major. `true` is dark. */\n modules: boolean[][];\n /** Modules per side, `version * 4 + 17`. */\n size: number;\n version: number;\n errorCorrection: QrErrorCorrection;\n mode: QrMode;\n /** The mask pattern chosen by penalty scoring, 0–7. */\n mask: number;\n}\n\n// --- Galois field GF(256) --------------------------------------------------\n// Reed-Solomon over the field the standard specifies: primitive polynomial\n// x^8 + x^4 + x^3 + x^2 + 1 (0x11d), generator 2.\n\nconst EXP = new Uint8Array(256);\nconst LOG = new Uint8Array(256);\n{\n let x = 1;\n for (let i = 0; i < 255; i += 1) {\n EXP[i] = x;\n LOG[x] = i;\n x <<= 1;\n if (x & 0x100) {\n x ^= 0x11d;\n }\n }\n EXP[255] = EXP[0] as number;\n}\n\nfunction gfMul(a: number, b: number): number {\n if (a === 0 || b === 0) {\n return 0;\n }\n return EXP[((LOG[a] as number) + (LOG[b] as number)) % 255] as number;\n}\n\n/** The generator polynomial for `degree` error correction codewords. */\nfunction generatorPoly(degree: number): number[] {\n let poly = [1];\n for (let i = 0; i < degree; i += 1) {\n const next = new Array<number>(poly.length + 1).fill(0);\n for (let j = 0; j < poly.length; j += 1) {\n next[j] = (next[j] as number) ^ (poly[j] as number);\n next[j + 1] = (next[j + 1] as number) ^ gfMul(poly[j] as number, EXP[i] as number);\n }\n poly = next;\n }\n return poly;\n}\n\n/** Reed-Solomon remainder — the error correction codewords for one block. */\nfunction reedSolomon(data: readonly number[], degree: number): number[] {\n const generator = generatorPoly(degree);\n const remainder = new Array<number>(degree).fill(0);\n for (const byte of data) {\n const factor = byte ^ (remainder.shift() as number);\n remainder.push(0);\n for (let i = 0; i < degree; i += 1) {\n remainder[i] = (remainder[i] as number) ^ gfMul(generator[i + 1] as number, factor);\n }\n }\n return remainder;\n}\n\n// --- Mode selection and bit encoding ---------------------------------------\n\n/**\n * The narrowest mode that can carry `value`.\n *\n * Narrower is denser: numeric packs 3 digits into 10 bits where byte mode\n * would spend 24. A six-digit pairing PIN is a third of the size as numeric,\n * which is the difference between a code a phone reads across a desk and one\n * it does not.\n */\nexport function selectMode(value: string): QrMode {\n if (/^[0-9]*$/.test(value)) {\n return 'numeric';\n }\n if ([...value].every((char) => ALPHANUMERIC.includes(char))) {\n return 'alphanumeric';\n }\n return 'byte';\n}\n\n/** Bits in the character count indicator — it widens with version. */\nfunction countBits(mode: QrMode, version: number): number {\n const tier = version <= 9 ? 0 : version <= 26 ? 1 : 2;\n if (mode === 'numeric') {\n return [10, 12, 14][tier] as number;\n }\n if (mode === 'alphanumeric') {\n return [9, 11, 13][tier] as number;\n }\n return [8, 16, 16][tier] as number;\n}\n\nclass BitBuffer {\n readonly bits: number[] = [];\n\n push(value: number, length: number): void {\n for (let i = length - 1; i >= 0; i -= 1) {\n this.bits.push((value >>> i) & 1);\n }\n }\n}\n\n/** UTF-8 bytes for a string, without TextEncoder — jsdom and SSR both agree. */\nfunction utf8Bytes(value: string): number[] {\n const out: number[] = [];\n for (const char of value) {\n const code = char.codePointAt(0) as number;\n if (code < 0x80) {\n out.push(code);\n } else if (code < 0x800) {\n out.push(0xc0 | (code >> 6), 0x80 | (code & 0x3f));\n } else if (code < 0x10000) {\n out.push(0xe0 | (code >> 12), 0x80 | ((code >> 6) & 0x3f), 0x80 | (code & 0x3f));\n } else {\n out.push(\n 0xf0 | (code >> 18),\n 0x80 | ((code >> 12) & 0x3f),\n 0x80 | ((code >> 6) & 0x3f),\n 0x80 | (code & 0x3f),\n );\n }\n }\n return out;\n}\n\n/** The payload's own bits, before terminator and padding. */\nfunction encodePayload(value: string, mode: QrMode, version: number): BitBuffer {\n const buffer = new BitBuffer();\n buffer.push(MODE_INDICATOR[mode], 4);\n\n if (mode === 'numeric') {\n buffer.push(value.length, countBits(mode, version));\n for (let i = 0; i < value.length; i += 3) {\n const group = value.slice(i, i + 3);\n buffer.push(Number.parseInt(group, 10), group.length * 3 + 1);\n }\n return buffer;\n }\n\n if (mode === 'alphanumeric') {\n buffer.push(value.length, countBits(mode, version));\n for (let i = 0; i < value.length; i += 2) {\n const first = ALPHANUMERIC.indexOf(value[i] as string);\n if (i + 1 < value.length) {\n buffer.push(first * 45 + ALPHANUMERIC.indexOf(value[i + 1] as string), 11);\n } else {\n buffer.push(first, 6);\n }\n }\n return buffer;\n }\n\n const bytes = utf8Bytes(value);\n buffer.push(bytes.length, countBits(mode, version));\n for (const byte of bytes) {\n buffer.push(byte, 8);\n }\n return buffer;\n}\n\n/** How many bits the payload needs at a given version, mode included. */\nfunction payloadBits(value: string, mode: QrMode, version: number): number {\n return encodePayload(value, mode, version).bits.length;\n}\n\n/** The smallest version that fits, or `null` when nothing does. */\nfunction selectVersion(\n value: string,\n mode: QrMode,\n ec: QrErrorCorrection,\n minVersion: number,\n): number | null {\n for (let version = Math.max(minVersion, MIN_VERSION); version <= MAX_VERSION; version += 1) {\n if (payloadBits(value, mode, version) <= blockLayout(version, ec).dataCodewords * 8) {\n return version;\n }\n }\n return null;\n}\n\n/**\n * Data codewords: payload, terminator, pad to a byte, then alternating pad\n * bytes. Exported for the golden-vector test, which asserts these against the\n * standard's published worked example.\n */\nexport function dataCodewords(value: string, mode: QrMode, version: number, ec: QrErrorCorrection): number[] {\n const capacity = blockLayout(version, ec).dataCodewords * 8;\n const buffer = encodePayload(value, mode, version);\n\n // Terminator: up to four zero bits, truncated if capacity runs out.\n buffer.push(0, Math.min(4, capacity - buffer.bits.length));\n // Then to a byte boundary.\n buffer.push(0, (8 - (buffer.bits.length % 8)) % 8);\n\n const codewords: number[] = [];\n for (let i = 0; i < buffer.bits.length; i += 8) {\n let byte = 0;\n for (let bit = 0; bit < 8; bit += 1) {\n byte = (byte << 1) | (buffer.bits[i + bit] as number);\n }\n codewords.push(byte);\n }\n\n // Pad bytes 0b11101100 / 0b00010001, alternating, as the standard specifies.\n const target = capacity / 8;\n for (let i = 0; codewords.length < target; i += 1) {\n codewords.push(i % 2 === 0 ? 0xec : 0x11);\n }\n return codewords;\n}\n\n/**\n * Split into blocks, compute error correction, and interleave.\n *\n * Interleaving is what makes the error correction work as advertised: a blot\n * on the printed symbol damages a contiguous run of modules, and interleaving\n * spreads that run across every block so no single block exceeds its own\n * correction budget. Concatenating instead would produce a scannable code that\n * fails far sooner than its level claims — passing a round-trip test and\n * failing on paper.\n */\nexport function interleave(codewords: readonly number[], version: number, ec: QrErrorCorrection): number[] {\n const { ecPerBlock, g1Blocks, g1Size, g2Blocks, g2Size } = blockLayout(version, ec);\n\n const dataBlocks: number[][] = [];\n let offset = 0;\n for (let i = 0; i < g1Blocks; i += 1) {\n dataBlocks.push(codewords.slice(offset, offset + g1Size));\n offset += g1Size;\n }\n for (let i = 0; i < g2Blocks; i += 1) {\n dataBlocks.push(codewords.slice(offset, offset + g2Size));\n offset += g2Size;\n }\n\n const ecBlocks = dataBlocks.map((block) => reedSolomon(block, ecPerBlock));\n\n const result: number[] = [];\n const widest = Math.max(g1Size, g2Blocks > 0 ? g2Size : 0);\n for (let i = 0; i < widest; i += 1) {\n for (const block of dataBlocks) {\n if (i < block.length) {\n result.push(block[i] as number);\n }\n }\n }\n for (let i = 0; i < ecPerBlock; i += 1) {\n for (const block of ecBlocks) {\n result.push(block[i] as number);\n }\n }\n return result;\n}\n\n// --- Matrix construction ---------------------------------------------------\n\nexport type Grid = (boolean | null)[][];\n\n/**\n * A grid with every function pattern placed and data positions left `null`.\n *\n * Exported for verification. The round-trip decoder in the test needs to know\n * which modules carry data, and reconstructing that knowledge separately would\n * duplicate the layout and share its bugs. Using the same template is safe\n * here because the table-consistency check anchors it to an independent fact:\n * the number of free modules must equal the codeword count in the transcribed\n * block table, so a wrong finder, timing or alignment layout fails there.\n */\nexport function reservedModules(version: number): Grid {\n const size = version * 4 + 17;\n const grid: Grid = Array.from({ length: size }, () => new Array<boolean | null>(size).fill(null));\n\n const set = (row: number, col: number, dark: boolean): void => {\n (grid[row] as (boolean | null)[])[col] = dark;\n };\n\n // Three finder patterns with their separators.\n for (const [baseRow, baseCol] of [\n [0, 0],\n [0, size - 7],\n [size - 7, 0],\n ] as const) {\n for (let row = -1; row <= 7; row += 1) {\n for (let col = -1; col <= 7; col += 1) {\n const r = baseRow + row;\n const c = baseCol + col;\n if (r < 0 || r >= size || c < 0 || c >= size) {\n continue;\n }\n const ring = Math.max(Math.abs(row - 3), Math.abs(col - 3));\n set(r, c, ring !== 2 && ring <= 3);\n }\n }\n }\n\n // Timing patterns, row and column 6.\n for (let i = 0; i < size; i += 1) {\n if ((grid[6] as (boolean | null)[])[i] === null) {\n set(6, i, i % 2 === 0);\n }\n if ((grid[i] as (boolean | null)[])[6] === null) {\n set(i, 6, i % 2 === 0);\n }\n }\n\n // Alignment patterns, except where a finder already sits.\n const positions = alignmentPositions(version);\n for (const row of positions) {\n for (const col of positions) {\n const nearFinder =\n (row <= 8 && col <= 8) || (row <= 8 && col >= size - 9) || (row >= size - 9 && col <= 8);\n if (nearFinder) {\n continue;\n }\n for (let dr = -2; dr <= 2; dr += 1) {\n for (let dc = -2; dc <= 2; dc += 1) {\n const ring = Math.max(Math.abs(dr), Math.abs(dc));\n set(row + dr, col + dc, ring !== 1);\n }\n }\n }\n }\n\n // Format information areas, reserved now and written after masking. The\n // module at (size - 8, 8) is always dark.\n for (let i = 0; i < 9; i += 1) {\n if ((grid[8] as (boolean | null)[])[i] === null) {\n set(8, i, false);\n }\n if ((grid[i] as (boolean | null)[])[8] === null) {\n set(i, 8, false);\n }\n }\n for (let i = 0; i < 8; i += 1) {\n set(8, size - 1 - i, false);\n set(size - 1 - i, 8, false);\n }\n set(size - 8, 8, true);\n\n // Version information, versions 7 and up.\n if (version >= 7) {\n const bits = versionBits(version);\n for (let i = 0; i < 18; i += 1) {\n const bit = ((bits >>> i) & 1) === 1;\n set(Math.floor(i / 3), size - 11 + (i % 3), bit);\n set(size - 11 + (i % 3), Math.floor(i / 3), bit);\n }\n }\n\n return grid;\n}\n\n/** How many modules a version leaves free for data, counted from the grid. */\nexport function rawDataModules(version: number): number {\n const grid = reservedModules(version);\n let free = 0;\n for (const row of grid) {\n for (const cell of row) {\n if (cell === null) {\n free += 1;\n }\n }\n }\n return free;\n}\n\n/** Place the interleaved codewords in the standard's zigzag order. */\nfunction placeData(grid: Grid, codewords: readonly number[]): void {\n const size = grid.length;\n let bitIndex = 0;\n const nextBit = (): boolean => {\n const byte = codewords[bitIndex >>> 3];\n // Past the end is a remainder bit: light, per the standard.\n const bit = byte === undefined ? 0 : (byte >>> (7 - (bitIndex & 7))) & 1;\n bitIndex += 1;\n return bit === 1;\n };\n\n let upward = true;\n for (let right = size - 1; right >= 1; right -= 2) {\n // Column 6 is the vertical timing pattern; the pair of columns skips it.\n const pair = right === 6 ? [5, 4] : [right, right - 1];\n for (let step = 0; step < size; step += 1) {\n const row = upward ? size - 1 - step : step;\n for (const col of pair) {\n if ((grid[row] as (boolean | null)[])[col] === null) {\n (grid[row] as (boolean | null)[])[col] = nextBit();\n }\n }\n }\n if (right === 6) {\n right -= 1;\n }\n upward = !upward;\n }\n}\n\n/** The eight mask conditions. `true` means invert this module. */\nfunction maskCondition(mask: number, row: number, col: number): boolean {\n switch (mask) {\n case 0:\n return (row + col) % 2 === 0;\n case 1:\n return row % 2 === 0;\n case 2:\n return col % 3 === 0;\n case 3:\n return (row + col) % 3 === 0;\n case 4:\n return (Math.floor(row / 2) + Math.floor(col / 3)) % 2 === 0;\n case 5:\n return ((row * col) % 2) + ((row * col) % 3) === 0;\n case 6:\n return (((row * col) % 2) + ((row * col) % 3)) % 2 === 0;\n default:\n return (((row + col) % 2) + ((row * col) % 3)) % 2 === 0;\n }\n}\n\n/**\n * The four penalty rules, scored on a finished candidate.\n *\n * This is the step that is easy to skip and expensive to skip: the rules exist\n * because some masks leave large light or dark areas, or patterns that look\n * like a finder, and a decoder locks onto the wrong feature. A symbol with a\n * badly chosen mask still decodes in software and fails under a phone camera —\n * which is the worst possible place for it to fail, because every test here\n * would pass.\n */\nexport function penalty(modules: readonly boolean[][]): number {\n const size = modules.length;\n let score = 0;\n\n // Rule 1: runs of five or more same-coloured modules in a line.\n const scoreLine = (run: number): number => (run >= 5 ? run - 2 : 0);\n for (let i = 0; i < size; i += 1) {\n for (const horizontal of [true, false]) {\n let run = 1;\n for (let j = 1; j < size; j += 1) {\n const prev = horizontal\n ? (modules[i] as boolean[])[j - 1]\n : (modules[j - 1] as boolean[])[i];\n const cur = horizontal ? (modules[i] as boolean[])[j] : (modules[j] as boolean[])[i];\n if (cur === prev) {\n run += 1;\n } else {\n score += scoreLine(run);\n run = 1;\n }\n }\n score += scoreLine(run);\n }\n }\n\n // Rule 2: every 2x2 block of one colour.\n for (let row = 0; row < size - 1; row += 1) {\n for (let col = 0; col < size - 1; col += 1) {\n const a = (modules[row] as boolean[])[col];\n if (\n a === (modules[row] as boolean[])[col + 1] &&\n a === (modules[row + 1] as boolean[])[col] &&\n a === (modules[row + 1] as boolean[])[col + 1]\n ) {\n score += 3;\n }\n }\n }\n\n // Rule 3: the finder-like 1:1:3:1:1 pattern with four light modules either\n // side. This is the rule that protects a decoder's pattern detection.\n const finderish = [true, false, true, true, true, false, true];\n const light4 = [false, false, false, false];\n const matches = (line: readonly boolean[], at: number, pattern: readonly boolean[]): boolean =>\n pattern.every((want, i) => line[at + i] === want);\n for (let i = 0; i < size; i += 1) {\n const row = modules[i] as boolean[];\n const col = modules.map((r) => (r as boolean[])[i] as boolean);\n for (const line of [row, col]) {\n for (let j = 0; j + 7 <= size; j += 1) {\n if (!matches(line, j, finderish)) {\n continue;\n }\n // Each ELEVEN-module window counts separately, so a pattern with four\n // light modules on BOTH sides scores 80 rather than 40.\n //\n // The prose rule (\"add 40 each time the pattern appears with four\n // light modules on either side\") is ambiguous about that case, and it\n // matters: this score is what picks the mask, and the wrong mask\n // produces a symbol that decodes perfectly in software and reads badly\n // under a camera. No test here can catch that -- so the convention is\n // pinned by a test instead, and this follows the one the reference\n // implementations use rather than the reading that happened to come\n // first.\n if (j >= 4 && matches(line, j - 4, light4)) {\n score += 40;\n }\n if (j + 11 <= size && matches(line, j + 7, light4)) {\n score += 40;\n }\n }\n }\n }\n\n // Rule 4: deviation of the dark-module proportion from 50%.\n let dark = 0;\n for (const row of modules) {\n for (const cell of row) {\n if (cell) {\n dark += 1;\n }\n }\n }\n const percent = (dark * 100) / (size * size);\n score += Math.floor(Math.abs(percent - 50) / 5) * 10;\n\n return score;\n}\n\n/** Write the 15 format bits into both of their locations. */\nfunction applyFormat(modules: boolean[][], ec: QrErrorCorrection, mask: number): void {\n const size = modules.length;\n const bits = (FORMAT_BITS[ec][mask] as number) >>> 0;\n const bit = (i: number): boolean => ((bits >>> i) & 1) === 1;\n\n // Bits 0-5 up the left column, bit 6 at (8,7)... the split placement is the\n // standard's, not a simplification of it.\n for (let i = 0; i <= 5; i += 1) {\n (modules[8] as boolean[])[i] = bit(14 - i);\n }\n (modules[8] as boolean[])[7] = bit(8);\n (modules[8] as boolean[])[8] = bit(7);\n (modules[7] as boolean[])[8] = bit(6);\n for (let i = 9; i <= 14; i += 1) {\n (modules[14 - i] as boolean[])[8] = bit(14 - i);\n }\n\n // The second copy, split across the other two corners: SEVEN modules up the\n // column beside the bottom-left finder, then EIGHT along the row beside the\n // top-right one.\n //\n // The 7/8 split is not arbitrary and getting it wrong is quiet. An 8/7 split\n // puts bit 7 at (size - 8, 8) -- which is the dark module, overwritten on\n // the next line -- so the symbol still decodes from the FIRST copy and\n // carries a corrupt second one. A reader that happens to use the second copy\n // refuses the symbol, and nothing in a round-trip test notices, because a\n // decoder reading the first copy never looks.\n for (let i = 0; i <= 6; i += 1) {\n (modules[size - 1 - i] as boolean[])[8] = bit(i);\n }\n for (let i = 7; i <= 14; i += 1) {\n (modules[8] as boolean[])[size - 15 + i] = bit(i);\n }\n (modules[size - 8] as boolean[])[8] = true;\n}\n\nexport interface EncodeOptions {\n errorCorrection?: QrErrorCorrection;\n /** Force a mode instead of selecting the narrowest that fits. */\n mode?: QrMode;\n /** Force a version. Throws if the value does not fit. */\n version?: number;\n /** Force a mask instead of scoring all eight. For tests and golden vectors. */\n mask?: number;\n}\n\n/**\n * Encode a string into a QR symbol.\n *\n * @throws RangeError when the value cannot fit, or when a forced version is\n * too small for it. **Throwing is deliberate**: the alternative is returning\n * a truncated symbol, which scans cleanly and yields the wrong string — a\n * silent corruption on the one surface whose entire job is to carry a value\n * accurately.\n */\nexport function encodeQr(value: string, options: EncodeOptions = {}): QrSymbol {\n const ec = options.errorCorrection ?? 'M';\n const mode = options.mode ?? selectMode(value);\n\n if (mode === 'numeric' && !/^[0-9]*$/.test(value)) {\n throw new RangeError('Numeric mode accepts digits only');\n }\n if (mode === 'alphanumeric' && ![...value].every((char) => ALPHANUMERIC.includes(char))) {\n throw new RangeError('Alphanumeric mode accepts 0-9 A-Z space and $%*+-./: only');\n }\n\n let version: number;\n if (options.version !== undefined) {\n if (options.version < MIN_VERSION || options.version > MAX_VERSION) {\n throw new RangeError(`Version must be ${MIN_VERSION}-${MAX_VERSION}`);\n }\n version = options.version;\n if (payloadBits(value, mode, version) > blockLayout(version, ec).dataCodewords * 8) {\n throw new RangeError(`Value does not fit in version ${version} at level ${ec}`);\n }\n } else {\n const chosen = selectVersion(value, mode, ec, MIN_VERSION);\n if (chosen === null) {\n throw new RangeError(\n `Value is too long for a QR code at level ${ec} (${value.length} characters)`,\n );\n }\n version = chosen;\n }\n\n const codewords = interleave(dataCodewords(value, mode, version, ec), version, ec);\n const template = reservedModules(version);\n\n const candidates: { mask: number; modules: boolean[][] }[] = [];\n const masksToTry = options.mask === undefined ? [0, 1, 2, 3, 4, 5, 6, 7] : [options.mask];\n for (const mask of masksToTry) {\n const grid = template.map((row) => [...row]);\n placeData(grid, codewords);\n const modules = grid.map((row, rowIndex) =>\n row.map((cell, colIndex) => {\n const value_ = cell as boolean;\n // Only data modules are masked; function patterns never are, which is\n // why the mask is applied against the TEMPLATE's null positions rather\n // than against the finished grid.\n const isData = (template[rowIndex] as (boolean | null)[])[colIndex] === null;\n return isData && maskCondition(mask, rowIndex, colIndex) ? !value_ : value_;\n }),\n );\n applyFormat(modules, ec, mask);\n candidates.push({ mask, modules });\n }\n\n const best = candidates.reduce((a, b) => (penalty(a.modules) <= penalty(b.modules) ? a : b));\n\n return {\n modules: best.modules,\n size: version * 4 + 17,\n version,\n errorCorrection: ec,\n mode,\n mask: best.mask,\n };\n}\n","import { forwardRef, useMemo } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { encodeQr } from \"./qr-encode\";\nimport type { QrCodeProps } from \"./QrCode.types\";\n\n/**\n * A QR code, as an SVG, with no dependencies.\n *\n * ## Why SVG and one path\n *\n * The symbol is drawn as a **single `<path>`** of one-unit squares on a\n * `viewBox` sized in modules, not as a grid of `<rect>` elements. A version 10\n * symbol is 57x57 — over three thousand modules — and a rect each would be\n * three thousand DOM nodes for something that never changes. One path is one\n * node, and because the viewBox is in module units the symbol is resolution\n * independent: `size` scales it with no resampling, so it stays crisp at any\n * size and prints at the printer's resolution rather than the screen's.\n *\n * This matters more than it sounds for scanning. A raster QR code scaled to a\n * non-integer multiple of its module size gets blurred module edges, and a\n * scanner reading a blurred edge guesses. Vector output cannot have that\n * problem.\n *\n * ## It is an image of a value, not the value\n *\n * A QR code is unreadable to anyone without a second device pointed at the\n * screen — which includes every screen-reader user and anyone whose phone is\n * the device showing it. So `label` is required, and the value should ALSO be\n * reachable as text or a link beside it. A pairing panel that shows only a\n * code is a panel some people cannot use at all.\n *\n * @example\n * ```tsx\n * <QrCode\n * value=\"https://alphar.tail1234.ts.net:7421/pair#482913\"\n * size={192}\n * label=\"Pair this device\"\n * />\n *\n * // On a dark surface, set both colours: a transparent background renders\n * // dark-on-dark and will not scan.\n * <QrCode value={url} label=\"Pair\" foreground=\"#0b0b0c\" background=\"#ffffff\" />\n * ```\n */\nexport const QrCode = forwardRef<SVGSVGElement, QrCodeProps>(\n (\n {\n value,\n size = 192,\n errorCorrection = \"M\",\n label,\n quietZone = 4,\n foreground = \"currentColor\",\n background = \"transparent\",\n mode,\n version,\n className,\n ...props\n },\n ref,\n ) => {\n // Encoding a version 40 symbol is real work (Reed-Solomon over 2,956\n // codewords, then eight masks scored). Nothing about it depends on `size`\n // or the colours, so it is memoised on the inputs that actually change it\n // — otherwise a parent re-render on hover re-encodes the whole symbol.\n const symbol = useMemo(\n () => encodeQr(value, { errorCorrection, mode, version }),\n [value, errorCorrection, mode, version],\n );\n\n const extent = symbol.size + quietZone * 2;\n\n const path = useMemo(() => {\n const parts: string[] = [];\n for (let row = 0; row < symbol.size; row += 1) {\n const line = symbol.modules[row] as boolean[];\n let col = 0;\n while (col < symbol.size) {\n if (!line[col]) {\n col += 1;\n continue;\n }\n // Run-length the dark modules along the row: a horizontal run\n // becomes one rectangle rather than one per module, which roughly\n // halves the path for a typical symbol and costs nothing to read.\n let run = 1;\n while (col + run < symbol.size && line[col + run]) {\n run += 1;\n }\n parts.push(`M${col + quietZone} ${row + quietZone}h${run}v1h-${run}z`);\n col += run;\n }\n }\n return parts.join(\"\");\n }, [symbol, quietZone]);\n\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox={`0 0 ${extent} ${extent}`}\n role=\"img\"\n aria-label={label}\n // Nearest-neighbour rather than smoothing, for the rasterisers that\n // apply it anyway: a blurred module edge is a module a scanner has to\n // guess at.\n shapeRendering=\"crispEdges\"\n className={cn(\"fa-qr-code\", className)}\n {...props}\n >\n {background !== \"transparent\" && (\n <rect width={extent} height={extent} fill={background} />\n )}\n <path d={path} fill={foreground} />\n </svg>\n );\n },\n);\n\nQrCode.displayName = \"QrCode\";\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/QrCode/qr-tables.ts","../src/components/QrCode/qr-encode.ts","../src/components/QrCode/QrCode.tsx"],"names":["dataCodewords"],"mappings":"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","file":"chunk-PK2FHI5R.js","sourcesContent":["/**\n * ISO/IEC 18004 table data for the QR encoder. **Data, not logic** — kept in\n * its own module so the algorithm beside it can be read without scrolling past\n * 160 rows, and so a correction here is a diff that cannot touch behaviour.\n *\n * There is no formula for these: the block structure per version and error\n * correction level is a table in the standard. They were taken from the\n * published error-correction table at\n * <https://www.thonky.com/qr-code-tutorial/error-correction-table> rather than\n * recalled, and every row is checked by `qr-code.test.tsx` against three\n * equations that must all hold simultaneously:\n *\n * 1. `dataCodewords === g1Blocks * g1Size + g2Blocks * g2Size`\n * 2. `totalCodewords === dataCodewords + ecPerBlock * (g1Blocks + g2Blocks)`\n * 3. `totalCodewords === rawDataModules(version) / 8`, where\n * `rawDataModules` is counted from the matrix THIS code builds.\n *\n * The third is the one worth having: it ties a transcribed table to an\n * independently constructed matrix, so a mistyped row, a wrong alignment\n * pattern position and a wrong function-pattern layout cannot all agree.\n */\n\n/** Error correction level. Higher levels survive more damage and hold less. */\nexport type QrErrorCorrection = 'L' | 'M' | 'Q' | 'H';\n\nexport const EC_LEVELS: readonly QrErrorCorrection[] = ['L', 'M', 'Q', 'H'];\n\n/** The 2-bit indicator each level carries in the format information. */\nexport const EC_FORMAT_BITS: Record<QrErrorCorrection, number> = {\n L: 0b01,\n M: 0b00,\n Q: 0b11,\n H: 0b10,\n};\n\nexport interface BlockLayout {\n /** Data codewords in the whole symbol. */\n dataCodewords: number;\n /** Error correction codewords per block — the same for every block. */\n ecPerBlock: number;\n /** Blocks in group 1, and how many data codewords each holds. */\n g1Blocks: number;\n g1Size: number;\n /** Blocks in group 2 (always `g1Size + 1` each when present). */\n g2Blocks: number;\n g2Size: number;\n}\n\n/**\n * `[dataCodewords, ecPerBlock, g1Blocks, g1Size, g2Blocks, g2Size]` indexed by\n * `[version - 1]` then by EC level, in `L, M, Q, H` order.\n */\nconst BLOCK_TABLE: readonly (readonly [number, number, number, number, number, number])[][] = [\n // v1\n [[19, 7, 1, 19, 0, 0], [16, 10, 1, 16, 0, 0], [13, 13, 1, 13, 0, 0], [9, 17, 1, 9, 0, 0]],\n [[34, 10, 1, 34, 0, 0], [28, 16, 1, 28, 0, 0], [22, 22, 1, 22, 0, 0], [16, 28, 1, 16, 0, 0]],\n [[55, 15, 1, 55, 0, 0], [44, 26, 1, 44, 0, 0], [34, 18, 2, 17, 0, 0], [26, 22, 2, 13, 0, 0]],\n [[80, 20, 1, 80, 0, 0], [64, 18, 2, 32, 0, 0], [48, 26, 2, 24, 0, 0], [36, 16, 4, 9, 0, 0]],\n [[108, 26, 1, 108, 0, 0], [86, 24, 2, 43, 0, 0], [62, 18, 2, 15, 2, 16], [46, 22, 2, 11, 2, 12]],\n [[136, 18, 2, 68, 0, 0], [108, 16, 4, 27, 0, 0], [76, 24, 4, 19, 0, 0], [60, 28, 4, 15, 0, 0]],\n [[156, 20, 2, 78, 0, 0], [124, 18, 4, 31, 0, 0], [88, 18, 2, 14, 4, 15], [66, 26, 4, 13, 1, 14]],\n [[194, 24, 2, 97, 0, 0], [154, 22, 2, 38, 2, 39], [110, 22, 4, 18, 2, 19], [86, 26, 4, 14, 2, 15]],\n [[232, 30, 2, 116, 0, 0], [182, 22, 3, 36, 2, 37], [132, 20, 4, 16, 4, 17], [100, 24, 4, 12, 4, 13]],\n // v10\n [[274, 18, 2, 68, 2, 69], [216, 26, 4, 43, 1, 44], [154, 24, 6, 19, 2, 20], [122, 28, 6, 15, 2, 16]],\n [[324, 20, 4, 81, 0, 0], [254, 30, 1, 50, 4, 51], [180, 28, 4, 22, 4, 23], [140, 24, 3, 12, 8, 13]],\n [[370, 24, 2, 92, 2, 93], [290, 22, 6, 36, 2, 37], [206, 26, 4, 20, 6, 21], [158, 28, 7, 14, 4, 15]],\n [[428, 26, 4, 107, 0, 0], [334, 22, 8, 37, 1, 38], [244, 24, 8, 20, 4, 21], [180, 22, 12, 11, 4, 12]],\n [[461, 30, 3, 115, 1, 116], [365, 24, 4, 40, 5, 41], [261, 20, 11, 16, 5, 17], [197, 24, 11, 12, 5, 13]],\n [[523, 22, 5, 87, 1, 88], [415, 24, 5, 41, 5, 42], [295, 30, 5, 24, 7, 25], [223, 24, 11, 12, 7, 13]],\n [[589, 24, 5, 98, 1, 99], [453, 28, 7, 45, 3, 46], [325, 24, 15, 19, 2, 20], [253, 30, 3, 15, 13, 16]],\n [[647, 28, 1, 107, 5, 108], [507, 28, 10, 46, 1, 47], [367, 28, 1, 22, 15, 23], [283, 28, 2, 14, 17, 15]],\n [[721, 30, 5, 120, 1, 121], [563, 26, 9, 43, 4, 44], [397, 28, 17, 22, 1, 23], [313, 28, 2, 14, 19, 15]],\n [[795, 28, 3, 113, 4, 114], [627, 26, 3, 44, 11, 45], [445, 26, 17, 21, 4, 22], [341, 26, 9, 13, 16, 14]],\n // v20\n [[861, 28, 3, 107, 5, 108], [669, 26, 3, 41, 13, 42], [485, 30, 15, 24, 5, 25], [385, 28, 15, 15, 10, 16]],\n [[932, 28, 4, 116, 4, 117], [714, 26, 17, 42, 0, 0], [512, 28, 17, 22, 6, 23], [406, 30, 19, 16, 6, 17]],\n [[1006, 28, 2, 111, 7, 112], [782, 28, 17, 46, 0, 0], [568, 30, 7, 24, 16, 25], [442, 24, 34, 13, 0, 0]],\n [[1094, 30, 4, 121, 5, 122], [860, 28, 4, 47, 14, 48], [614, 30, 11, 24, 14, 25], [464, 30, 16, 15, 14, 16]],\n [[1174, 30, 6, 117, 4, 118], [914, 28, 6, 45, 14, 46], [664, 30, 11, 24, 16, 25], [514, 30, 30, 16, 2, 17]],\n [[1276, 26, 8, 106, 4, 107], [1000, 28, 8, 47, 13, 48], [718, 30, 7, 24, 22, 25], [538, 30, 22, 15, 13, 16]],\n [[1370, 28, 10, 114, 2, 115], [1062, 28, 19, 46, 4, 47], [754, 28, 28, 22, 6, 23], [596, 30, 33, 16, 4, 17]],\n [[1468, 30, 8, 122, 4, 123], [1128, 28, 22, 45, 3, 46], [808, 30, 8, 23, 26, 24], [628, 30, 12, 15, 28, 16]],\n [[1531, 30, 3, 117, 10, 118], [1193, 28, 3, 45, 23, 46], [871, 30, 4, 24, 31, 25], [661, 30, 11, 15, 31, 16]],\n [[1631, 30, 7, 116, 7, 117], [1267, 28, 21, 45, 7, 46], [911, 30, 1, 23, 37, 24], [701, 30, 19, 15, 26, 16]],\n // v30\n [[1735, 30, 5, 115, 10, 116], [1373, 28, 19, 47, 10, 48], [985, 30, 15, 24, 25, 25], [745, 30, 23, 15, 25, 16]],\n [[1843, 30, 13, 115, 3, 116], [1455, 28, 2, 46, 29, 47], [1033, 30, 42, 24, 1, 25], [793, 30, 23, 15, 28, 16]],\n [[1955, 30, 17, 115, 0, 0], [1541, 28, 10, 46, 23, 47], [1115, 30, 10, 24, 35, 25], [845, 30, 19, 15, 35, 16]],\n [[2071, 30, 17, 115, 1, 116], [1631, 28, 14, 46, 21, 47], [1171, 30, 29, 24, 19, 25], [901, 30, 11, 15, 46, 16]],\n [[2191, 30, 13, 115, 6, 116], [1725, 28, 14, 46, 23, 47], [1231, 30, 44, 24, 7, 25], [961, 30, 59, 16, 1, 17]],\n [[2306, 30, 12, 121, 7, 122], [1812, 28, 12, 47, 26, 48], [1286, 30, 39, 24, 14, 25], [986, 30, 22, 15, 41, 16]],\n [[2434, 30, 6, 121, 14, 122], [1914, 28, 6, 47, 34, 48], [1354, 30, 46, 24, 10, 25], [1054, 30, 2, 15, 64, 16]],\n [[2566, 30, 17, 122, 4, 123], [1992, 28, 29, 46, 14, 47], [1426, 30, 49, 24, 10, 25], [1096, 30, 24, 15, 46, 16]],\n [[2702, 30, 4, 122, 18, 123], [2102, 28, 13, 46, 32, 47], [1502, 30, 48, 24, 14, 25], [1142, 30, 42, 15, 32, 16]],\n [[2812, 30, 20, 117, 4, 118], [2216, 28, 40, 47, 7, 48], [1582, 30, 43, 24, 22, 25], [1222, 30, 10, 15, 67, 16]],\n // v40\n [[2956, 30, 19, 118, 6, 119], [2334, 28, 18, 47, 31, 48], [1666, 30, 34, 24, 34, 25], [1276, 30, 20, 15, 61, 16]],\n];\n\nexport const MIN_VERSION = 1;\nexport const MAX_VERSION = 40;\n\n/** Block structure for a version and error correction level. */\nexport function blockLayout(version: number, ec: QrErrorCorrection): BlockLayout {\n const row = BLOCK_TABLE[version - 1]?.[EC_LEVELS.indexOf(ec)];\n if (!row) {\n throw new RangeError(`No block layout for version ${version} level ${ec}`);\n }\n const [dataCodewords, ecPerBlock, g1Blocks, g1Size, g2Blocks, g2Size] = row;\n return { dataCodewords, ecPerBlock, g1Blocks, g1Size, g2Blocks, g2Size };\n}\n\n/**\n * The 15-bit format information for a level and mask, as published.\n *\n * These are a BCH(15,5) code XOR'd with a fixed mask, so they could be\n * computed — and the first draft did compute them. They are listed instead\n * because the computation and its verification would then share one\n * implementation: a wrong generator polynomial would produce a wrong table and\n * a test that agreed with it. A transcribed table cannot agree with a bug.\n *\n * Source: <https://www.thonky.com/qr-code-tutorial/format-version-tables>.\n * Indexed `[level][mask]`.\n */\nexport const FORMAT_BITS: Record<QrErrorCorrection, readonly number[]> = {\n L: [\n 0b111011111000100, 0b111001011110011, 0b111110110101010, 0b111100010011101,\n 0b110011000101111, 0b110001100011000, 0b110110001000001, 0b110100101110110,\n ],\n M: [\n 0b101010000010010, 0b101000100100101, 0b101111001111100, 0b101101101001011,\n 0b100010111111001, 0b100000011001110, 0b100111110010111, 0b100101010100000,\n ],\n Q: [\n 0b011010101011111, 0b011000001101000, 0b011111100110001, 0b011101000000110,\n 0b010010010110100, 0b010000110000011, 0b010111011011010, 0b010101111101101,\n ],\n H: [\n 0b001011010001001, 0b001001110111110, 0b001110011100111, 0b001100111010000,\n 0b000011101100010, 0b000001001010101, 0b000110100001100, 0b000100000111011,\n ],\n};\n\n/**\n * The 18-bit version information, present only for versions 7 and up.\n *\n * A BCH(18,6) code. Computed rather than tabled — 34 rows of 18 bits is more\n * transcription risk than the arithmetic is, and unlike the format bits there\n * are published values for versions 7, 8, 9, 10 and 40 to check it against,\n * which the test does.\n */\nexport function versionBits(version: number): number {\n let remainder = version;\n for (let i = 0; i < 12; i += 1) {\n remainder = (remainder << 1) ^ ((remainder >>> 11) * 0b1111100100101);\n }\n return ((version << 12) | remainder) >>> 0;\n}\n\n/**\n * Centre coordinates of the alignment patterns for a version.\n *\n * Derived rather than tabled, and the derivation is checked by the codeword\n * count equation in the test: a wrong position changes how many modules are\n * free for data, so the count would not match the block table.\n *\n * Version 32 is a genuine special case in the standard — its spacing does not\n * follow the rule the other versions do.\n */\nexport function alignmentPositions(version: number): number[] {\n if (version === 1) {\n return [];\n }\n const count = Math.floor(version / 7) + 2;\n const size = version * 4 + 17;\n const step = version === 32 ? 26 : Math.ceil((size - 13) / (count * 2 - 2)) * 2;\n\n const positions = [6];\n for (let pos = size - 7; positions.length < count; pos -= step) {\n positions.unshift(pos);\n }\n return positions.sort((a, b) => a - b);\n}\n","/**\n * A QR encoder, dependency-free.\n *\n * ISO/IEC 18004, versions 1–40, error correction L/M/Q/H, with numeric,\n * alphanumeric and byte modes and automatic selection between them. No\n * Kanji mode and no structured append — neither has a caller here, and an\n * untested branch in an encoder is worse than an absent one because the\n * failure is a code a phone silently refuses to read.\n *\n * Table data and its provenance live in `./qr-tables`.\n */\nimport {\n EC_FORMAT_BITS,\n FORMAT_BITS,\n MAX_VERSION,\n MIN_VERSION,\n alignmentPositions,\n blockLayout,\n versionBits,\n type QrErrorCorrection,\n} from './qr-tables';\n\nexport type { QrErrorCorrection };\n\n/** Which encoding mode a value is carried in. */\nexport type QrMode = 'numeric' | 'alphanumeric' | 'byte';\n\nconst MODE_INDICATOR: Record<QrMode, number> = { numeric: 0b0001, alphanumeric: 0b0010, byte: 0b0100 };\n\n/** The character set alphanumeric mode can carry, in its own index order. */\nconst ALPHANUMERIC = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:';\n\nexport interface QrSymbol {\n /** `size * size` modules, row-major. `true` is dark. */\n modules: boolean[][];\n /** Modules per side, `version * 4 + 17`. */\n size: number;\n version: number;\n errorCorrection: QrErrorCorrection;\n mode: QrMode;\n /** The mask pattern chosen by penalty scoring, 0–7. */\n mask: number;\n}\n\n// --- Galois field GF(256) --------------------------------------------------\n// Reed-Solomon over the field the standard specifies: primitive polynomial\n// x^8 + x^4 + x^3 + x^2 + 1 (0x11d), generator 2.\n\nconst EXP = new Uint8Array(256);\nconst LOG = new Uint8Array(256);\n{\n let x = 1;\n for (let i = 0; i < 255; i += 1) {\n EXP[i] = x;\n LOG[x] = i;\n x <<= 1;\n if (x & 0x100) {\n x ^= 0x11d;\n }\n }\n EXP[255] = EXP[0] as number;\n}\n\nfunction gfMul(a: number, b: number): number {\n if (a === 0 || b === 0) {\n return 0;\n }\n return EXP[((LOG[a] as number) + (LOG[b] as number)) % 255] as number;\n}\n\n/** The generator polynomial for `degree` error correction codewords. */\nfunction generatorPoly(degree: number): number[] {\n let poly = [1];\n for (let i = 0; i < degree; i += 1) {\n const next = new Array<number>(poly.length + 1).fill(0);\n for (let j = 0; j < poly.length; j += 1) {\n next[j] = (next[j] as number) ^ (poly[j] as number);\n next[j + 1] = (next[j + 1] as number) ^ gfMul(poly[j] as number, EXP[i] as number);\n }\n poly = next;\n }\n return poly;\n}\n\n/** Reed-Solomon remainder — the error correction codewords for one block. */\nfunction reedSolomon(data: readonly number[], degree: number): number[] {\n const generator = generatorPoly(degree);\n const remainder = new Array<number>(degree).fill(0);\n for (const byte of data) {\n const factor = byte ^ (remainder.shift() as number);\n remainder.push(0);\n for (let i = 0; i < degree; i += 1) {\n remainder[i] = (remainder[i] as number) ^ gfMul(generator[i + 1] as number, factor);\n }\n }\n return remainder;\n}\n\n// --- Mode selection and bit encoding ---------------------------------------\n\n/**\n * The narrowest mode that can carry `value`.\n *\n * Narrower is denser: numeric packs 3 digits into 10 bits where byte mode\n * would spend 24. A six-digit pairing PIN is a third of the size as numeric,\n * which is the difference between a code a phone reads across a desk and one\n * it does not.\n */\nexport function selectMode(value: string): QrMode {\n if (/^[0-9]*$/.test(value)) {\n return 'numeric';\n }\n if ([...value].every((char) => ALPHANUMERIC.includes(char))) {\n return 'alphanumeric';\n }\n return 'byte';\n}\n\n/** Bits in the character count indicator — it widens with version. */\nfunction countBits(mode: QrMode, version: number): number {\n const tier = version <= 9 ? 0 : version <= 26 ? 1 : 2;\n if (mode === 'numeric') {\n return [10, 12, 14][tier] as number;\n }\n if (mode === 'alphanumeric') {\n return [9, 11, 13][tier] as number;\n }\n return [8, 16, 16][tier] as number;\n}\n\nclass BitBuffer {\n readonly bits: number[] = [];\n\n push(value: number, length: number): void {\n for (let i = length - 1; i >= 0; i -= 1) {\n this.bits.push((value >>> i) & 1);\n }\n }\n}\n\n/** UTF-8 bytes for a string, without TextEncoder — jsdom and SSR both agree. */\nfunction utf8Bytes(value: string): number[] {\n const out: number[] = [];\n for (const char of value) {\n const code = char.codePointAt(0) as number;\n if (code < 0x80) {\n out.push(code);\n } else if (code < 0x800) {\n out.push(0xc0 | (code >> 6), 0x80 | (code & 0x3f));\n } else if (code < 0x10000) {\n out.push(0xe0 | (code >> 12), 0x80 | ((code >> 6) & 0x3f), 0x80 | (code & 0x3f));\n } else {\n out.push(\n 0xf0 | (code >> 18),\n 0x80 | ((code >> 12) & 0x3f),\n 0x80 | ((code >> 6) & 0x3f),\n 0x80 | (code & 0x3f),\n );\n }\n }\n return out;\n}\n\n/** The payload's own bits, before terminator and padding. */\nfunction encodePayload(value: string, mode: QrMode, version: number): BitBuffer {\n const buffer = new BitBuffer();\n buffer.push(MODE_INDICATOR[mode], 4);\n\n if (mode === 'numeric') {\n buffer.push(value.length, countBits(mode, version));\n for (let i = 0; i < value.length; i += 3) {\n const group = value.slice(i, i + 3);\n buffer.push(Number.parseInt(group, 10), group.length * 3 + 1);\n }\n return buffer;\n }\n\n if (mode === 'alphanumeric') {\n buffer.push(value.length, countBits(mode, version));\n for (let i = 0; i < value.length; i += 2) {\n const first = ALPHANUMERIC.indexOf(value[i] as string);\n if (i + 1 < value.length) {\n buffer.push(first * 45 + ALPHANUMERIC.indexOf(value[i + 1] as string), 11);\n } else {\n buffer.push(first, 6);\n }\n }\n return buffer;\n }\n\n const bytes = utf8Bytes(value);\n buffer.push(bytes.length, countBits(mode, version));\n for (const byte of bytes) {\n buffer.push(byte, 8);\n }\n return buffer;\n}\n\n/** How many bits the payload needs at a given version, mode included. */\nfunction payloadBits(value: string, mode: QrMode, version: number): number {\n return encodePayload(value, mode, version).bits.length;\n}\n\n/** The smallest version that fits, or `null` when nothing does. */\nfunction selectVersion(\n value: string,\n mode: QrMode,\n ec: QrErrorCorrection,\n minVersion: number,\n): number | null {\n for (let version = Math.max(minVersion, MIN_VERSION); version <= MAX_VERSION; version += 1) {\n if (payloadBits(value, mode, version) <= blockLayout(version, ec).dataCodewords * 8) {\n return version;\n }\n }\n return null;\n}\n\n/**\n * Data codewords: payload, terminator, pad to a byte, then alternating pad\n * bytes. Exported for the golden-vector test, which asserts these against the\n * standard's published worked example.\n */\nexport function dataCodewords(value: string, mode: QrMode, version: number, ec: QrErrorCorrection): number[] {\n const capacity = blockLayout(version, ec).dataCodewords * 8;\n const buffer = encodePayload(value, mode, version);\n\n // Terminator: up to four zero bits, truncated if capacity runs out.\n buffer.push(0, Math.min(4, capacity - buffer.bits.length));\n // Then to a byte boundary.\n buffer.push(0, (8 - (buffer.bits.length % 8)) % 8);\n\n const codewords: number[] = [];\n for (let i = 0; i < buffer.bits.length; i += 8) {\n let byte = 0;\n for (let bit = 0; bit < 8; bit += 1) {\n byte = (byte << 1) | (buffer.bits[i + bit] as number);\n }\n codewords.push(byte);\n }\n\n // Pad bytes 0b11101100 / 0b00010001, alternating, as the standard specifies.\n const target = capacity / 8;\n for (let i = 0; codewords.length < target; i += 1) {\n codewords.push(i % 2 === 0 ? 0xec : 0x11);\n }\n return codewords;\n}\n\n/**\n * Split into blocks, compute error correction, and interleave.\n *\n * Interleaving is what makes the error correction work as advertised: a blot\n * on the printed symbol damages a contiguous run of modules, and interleaving\n * spreads that run across every block so no single block exceeds its own\n * correction budget. Concatenating instead would produce a scannable code that\n * fails far sooner than its level claims — passing a round-trip test and\n * failing on paper.\n */\nexport function interleave(codewords: readonly number[], version: number, ec: QrErrorCorrection): number[] {\n const { ecPerBlock, g1Blocks, g1Size, g2Blocks, g2Size } = blockLayout(version, ec);\n\n const dataBlocks: number[][] = [];\n let offset = 0;\n for (let i = 0; i < g1Blocks; i += 1) {\n dataBlocks.push(codewords.slice(offset, offset + g1Size));\n offset += g1Size;\n }\n for (let i = 0; i < g2Blocks; i += 1) {\n dataBlocks.push(codewords.slice(offset, offset + g2Size));\n offset += g2Size;\n }\n\n const ecBlocks = dataBlocks.map((block) => reedSolomon(block, ecPerBlock));\n\n const result: number[] = [];\n const widest = Math.max(g1Size, g2Blocks > 0 ? g2Size : 0);\n for (let i = 0; i < widest; i += 1) {\n for (const block of dataBlocks) {\n if (i < block.length) {\n result.push(block[i] as number);\n }\n }\n }\n for (let i = 0; i < ecPerBlock; i += 1) {\n for (const block of ecBlocks) {\n result.push(block[i] as number);\n }\n }\n return result;\n}\n\n// --- Matrix construction ---------------------------------------------------\n\nexport type Grid = (boolean | null)[][];\n\n/**\n * A grid with every function pattern placed and data positions left `null`.\n *\n * Exported for verification. The round-trip decoder in the test needs to know\n * which modules carry data, and reconstructing that knowledge separately would\n * duplicate the layout and share its bugs. Using the same template is safe\n * here because the table-consistency check anchors it to an independent fact:\n * the number of free modules must equal the codeword count in the transcribed\n * block table, so a wrong finder, timing or alignment layout fails there.\n */\nexport function reservedModules(version: number): Grid {\n const size = version * 4 + 17;\n const grid: Grid = Array.from({ length: size }, () => new Array<boolean | null>(size).fill(null));\n\n const set = (row: number, col: number, dark: boolean): void => {\n (grid[row] as (boolean | null)[])[col] = dark;\n };\n\n // Three finder patterns with their separators.\n for (const [baseRow, baseCol] of [\n [0, 0],\n [0, size - 7],\n [size - 7, 0],\n ] as const) {\n for (let row = -1; row <= 7; row += 1) {\n for (let col = -1; col <= 7; col += 1) {\n const r = baseRow + row;\n const c = baseCol + col;\n if (r < 0 || r >= size || c < 0 || c >= size) {\n continue;\n }\n const ring = Math.max(Math.abs(row - 3), Math.abs(col - 3));\n set(r, c, ring !== 2 && ring <= 3);\n }\n }\n }\n\n // Timing patterns, row and column 6.\n for (let i = 0; i < size; i += 1) {\n if ((grid[6] as (boolean | null)[])[i] === null) {\n set(6, i, i % 2 === 0);\n }\n if ((grid[i] as (boolean | null)[])[6] === null) {\n set(i, 6, i % 2 === 0);\n }\n }\n\n // Alignment patterns, except where a finder already sits.\n const positions = alignmentPositions(version);\n for (const row of positions) {\n for (const col of positions) {\n const nearFinder =\n (row <= 8 && col <= 8) || (row <= 8 && col >= size - 9) || (row >= size - 9 && col <= 8);\n if (nearFinder) {\n continue;\n }\n for (let dr = -2; dr <= 2; dr += 1) {\n for (let dc = -2; dc <= 2; dc += 1) {\n const ring = Math.max(Math.abs(dr), Math.abs(dc));\n set(row + dr, col + dc, ring !== 1);\n }\n }\n }\n }\n\n // Format information areas, reserved now and written after masking. The\n // module at (size - 8, 8) is always dark.\n for (let i = 0; i < 9; i += 1) {\n if ((grid[8] as (boolean | null)[])[i] === null) {\n set(8, i, false);\n }\n if ((grid[i] as (boolean | null)[])[8] === null) {\n set(i, 8, false);\n }\n }\n for (let i = 0; i < 8; i += 1) {\n set(8, size - 1 - i, false);\n set(size - 1 - i, 8, false);\n }\n set(size - 8, 8, true);\n\n // Version information, versions 7 and up.\n if (version >= 7) {\n const bits = versionBits(version);\n for (let i = 0; i < 18; i += 1) {\n const bit = ((bits >>> i) & 1) === 1;\n set(Math.floor(i / 3), size - 11 + (i % 3), bit);\n set(size - 11 + (i % 3), Math.floor(i / 3), bit);\n }\n }\n\n return grid;\n}\n\n/** How many modules a version leaves free for data, counted from the grid. */\nexport function rawDataModules(version: number): number {\n const grid = reservedModules(version);\n let free = 0;\n for (const row of grid) {\n for (const cell of row) {\n if (cell === null) {\n free += 1;\n }\n }\n }\n return free;\n}\n\n/** Place the interleaved codewords in the standard's zigzag order. */\nfunction placeData(grid: Grid, codewords: readonly number[]): void {\n const size = grid.length;\n let bitIndex = 0;\n const nextBit = (): boolean => {\n const byte = codewords[bitIndex >>> 3];\n // Past the end is a remainder bit: light, per the standard.\n const bit = byte === undefined ? 0 : (byte >>> (7 - (bitIndex & 7))) & 1;\n bitIndex += 1;\n return bit === 1;\n };\n\n let upward = true;\n for (let right = size - 1; right >= 1; right -= 2) {\n // Column 6 is the vertical timing pattern; the pair of columns skips it.\n const pair = right === 6 ? [5, 4] : [right, right - 1];\n for (let step = 0; step < size; step += 1) {\n const row = upward ? size - 1 - step : step;\n for (const col of pair) {\n if ((grid[row] as (boolean | null)[])[col] === null) {\n (grid[row] as (boolean | null)[])[col] = nextBit();\n }\n }\n }\n if (right === 6) {\n right -= 1;\n }\n upward = !upward;\n }\n}\n\n/** The eight mask conditions. `true` means invert this module. */\nfunction maskCondition(mask: number, row: number, col: number): boolean {\n switch (mask) {\n case 0:\n return (row + col) % 2 === 0;\n case 1:\n return row % 2 === 0;\n case 2:\n return col % 3 === 0;\n case 3:\n return (row + col) % 3 === 0;\n case 4:\n return (Math.floor(row / 2) + Math.floor(col / 3)) % 2 === 0;\n case 5:\n return ((row * col) % 2) + ((row * col) % 3) === 0;\n case 6:\n return (((row * col) % 2) + ((row * col) % 3)) % 2 === 0;\n default:\n return (((row + col) % 2) + ((row * col) % 3)) % 2 === 0;\n }\n}\n\n/**\n * The four penalty rules, scored on a finished candidate.\n *\n * This is the step that is easy to skip and expensive to skip: the rules exist\n * because some masks leave large light or dark areas, or patterns that look\n * like a finder, and a decoder locks onto the wrong feature. A symbol with a\n * badly chosen mask still decodes in software and fails under a phone camera —\n * which is the worst possible place for it to fail, because every test here\n * would pass.\n */\nexport function penalty(modules: readonly boolean[][]): number {\n const size = modules.length;\n let score = 0;\n\n // Rule 1: runs of five or more same-coloured modules in a line.\n const scoreLine = (run: number): number => (run >= 5 ? run - 2 : 0);\n for (let i = 0; i < size; i += 1) {\n for (const horizontal of [true, false]) {\n let run = 1;\n for (let j = 1; j < size; j += 1) {\n const prev = horizontal\n ? (modules[i] as boolean[])[j - 1]\n : (modules[j - 1] as boolean[])[i];\n const cur = horizontal ? (modules[i] as boolean[])[j] : (modules[j] as boolean[])[i];\n if (cur === prev) {\n run += 1;\n } else {\n score += scoreLine(run);\n run = 1;\n }\n }\n score += scoreLine(run);\n }\n }\n\n // Rule 2: every 2x2 block of one colour.\n for (let row = 0; row < size - 1; row += 1) {\n for (let col = 0; col < size - 1; col += 1) {\n const a = (modules[row] as boolean[])[col];\n if (\n a === (modules[row] as boolean[])[col + 1] &&\n a === (modules[row + 1] as boolean[])[col] &&\n a === (modules[row + 1] as boolean[])[col + 1]\n ) {\n score += 3;\n }\n }\n }\n\n // Rule 3: the finder-like 1:1:3:1:1 pattern with four light modules either\n // side. This is the rule that protects a decoder's pattern detection.\n const finderish = [true, false, true, true, true, false, true];\n const light4 = [false, false, false, false];\n const matches = (line: readonly boolean[], at: number, pattern: readonly boolean[]): boolean =>\n pattern.every((want, i) => line[at + i] === want);\n for (let i = 0; i < size; i += 1) {\n const row = modules[i] as boolean[];\n const col = modules.map((r) => (r as boolean[])[i] as boolean);\n for (const line of [row, col]) {\n for (let j = 0; j + 7 <= size; j += 1) {\n if (!matches(line, j, finderish)) {\n continue;\n }\n // Each ELEVEN-module window counts separately, so a pattern with four\n // light modules on BOTH sides scores 80 rather than 40.\n //\n // The prose rule (\"add 40 each time the pattern appears with four\n // light modules on either side\") is ambiguous about that case, and it\n // matters: this score is what picks the mask, and the wrong mask\n // produces a symbol that decodes perfectly in software and reads badly\n // under a camera. No test here can catch that -- so the convention is\n // pinned by a test instead, and this follows the one the reference\n // implementations use rather than the reading that happened to come\n // first.\n if (j >= 4 && matches(line, j - 4, light4)) {\n score += 40;\n }\n if (j + 11 <= size && matches(line, j + 7, light4)) {\n score += 40;\n }\n }\n }\n }\n\n // Rule 4: deviation of the dark-module proportion from 50%.\n let dark = 0;\n for (const row of modules) {\n for (const cell of row) {\n if (cell) {\n dark += 1;\n }\n }\n }\n const percent = (dark * 100) / (size * size);\n score += Math.floor(Math.abs(percent - 50) / 5) * 10;\n\n return score;\n}\n\n/** Write the 15 format bits into both of their locations. */\nfunction applyFormat(modules: boolean[][], ec: QrErrorCorrection, mask: number): void {\n const size = modules.length;\n const bits = (FORMAT_BITS[ec][mask] as number) >>> 0;\n const bit = (i: number): boolean => ((bits >>> i) & 1) === 1;\n\n // Bits 0-5 up the left column, bit 6 at (8,7)... the split placement is the\n // standard's, not a simplification of it.\n for (let i = 0; i <= 5; i += 1) {\n (modules[8] as boolean[])[i] = bit(14 - i);\n }\n (modules[8] as boolean[])[7] = bit(8);\n (modules[8] as boolean[])[8] = bit(7);\n (modules[7] as boolean[])[8] = bit(6);\n for (let i = 9; i <= 14; i += 1) {\n (modules[14 - i] as boolean[])[8] = bit(14 - i);\n }\n\n // The second copy, split across the other two corners: SEVEN modules up the\n // column beside the bottom-left finder, then EIGHT along the row beside the\n // top-right one.\n //\n // The 7/8 split is not arbitrary and getting it wrong is quiet. An 8/7 split\n // puts bit 7 at (size - 8, 8) -- which is the dark module, overwritten on\n // the next line -- so the symbol still decodes from the FIRST copy and\n // carries a corrupt second one. A reader that happens to use the second copy\n // refuses the symbol, and nothing in a round-trip test notices, because a\n // decoder reading the first copy never looks.\n for (let i = 0; i <= 6; i += 1) {\n (modules[size - 1 - i] as boolean[])[8] = bit(i);\n }\n for (let i = 7; i <= 14; i += 1) {\n (modules[8] as boolean[])[size - 15 + i] = bit(i);\n }\n (modules[size - 8] as boolean[])[8] = true;\n}\n\nexport interface EncodeOptions {\n errorCorrection?: QrErrorCorrection;\n /** Force a mode instead of selecting the narrowest that fits. */\n mode?: QrMode;\n /** Force a version. Throws if the value does not fit. */\n version?: number;\n /** Force a mask instead of scoring all eight. For tests and golden vectors. */\n mask?: number;\n}\n\n/**\n * Encode a string into a QR symbol.\n *\n * @throws RangeError when the value cannot fit, or when a forced version is\n * too small for it. **Throwing is deliberate**: the alternative is returning\n * a truncated symbol, which scans cleanly and yields the wrong string — a\n * silent corruption on the one surface whose entire job is to carry a value\n * accurately.\n */\nexport function encodeQr(value: string, options: EncodeOptions = {}): QrSymbol {\n const ec = options.errorCorrection ?? 'M';\n const mode = options.mode ?? selectMode(value);\n\n if (mode === 'numeric' && !/^[0-9]*$/.test(value)) {\n throw new RangeError('Numeric mode accepts digits only');\n }\n if (mode === 'alphanumeric' && ![...value].every((char) => ALPHANUMERIC.includes(char))) {\n throw new RangeError('Alphanumeric mode accepts 0-9 A-Z space and $%*+-./: only');\n }\n\n let version: number;\n if (options.version !== undefined) {\n if (options.version < MIN_VERSION || options.version > MAX_VERSION) {\n throw new RangeError(`Version must be ${MIN_VERSION}-${MAX_VERSION}`);\n }\n version = options.version;\n if (payloadBits(value, mode, version) > blockLayout(version, ec).dataCodewords * 8) {\n throw new RangeError(`Value does not fit in version ${version} at level ${ec}`);\n }\n } else {\n const chosen = selectVersion(value, mode, ec, MIN_VERSION);\n if (chosen === null) {\n throw new RangeError(\n `Value is too long for a QR code at level ${ec} (${value.length} characters)`,\n );\n }\n version = chosen;\n }\n\n const codewords = interleave(dataCodewords(value, mode, version, ec), version, ec);\n const template = reservedModules(version);\n\n const candidates: { mask: number; modules: boolean[][] }[] = [];\n const masksToTry = options.mask === undefined ? [0, 1, 2, 3, 4, 5, 6, 7] : [options.mask];\n for (const mask of masksToTry) {\n const grid = template.map((row) => [...row]);\n placeData(grid, codewords);\n const modules = grid.map((row, rowIndex) =>\n row.map((cell, colIndex) => {\n const value_ = cell as boolean;\n // Only data modules are masked; function patterns never are, which is\n // why the mask is applied against the TEMPLATE's null positions rather\n // than against the finished grid.\n const isData = (template[rowIndex] as (boolean | null)[])[colIndex] === null;\n return isData && maskCondition(mask, rowIndex, colIndex) ? !value_ : value_;\n }),\n );\n applyFormat(modules, ec, mask);\n candidates.push({ mask, modules });\n }\n\n const best = candidates.reduce((a, b) => (penalty(a.modules) <= penalty(b.modules) ? a : b));\n\n return {\n modules: best.modules,\n size: version * 4 + 17,\n version,\n errorCorrection: ec,\n mode,\n mask: best.mask,\n };\n}\n","import { forwardRef, useMemo } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { encodeQr } from \"./qr-encode\";\nimport type { QrCodeProps } from \"./QrCode.types\";\n\n/**\n * A QR code, as an SVG, with no dependencies.\n *\n * ## Why SVG and one path\n *\n * The symbol is drawn as a **single `<path>`** of one-unit squares on a\n * `viewBox` sized in modules, not as a grid of `<rect>` elements. A version 10\n * symbol is 57x57 — over three thousand modules — and a rect each would be\n * three thousand DOM nodes for something that never changes. One path is one\n * node, and because the viewBox is in module units the symbol is resolution\n * independent: `size` scales it with no resampling, so it stays crisp at any\n * size and prints at the printer's resolution rather than the screen's.\n *\n * This matters more than it sounds for scanning. A raster QR code scaled to a\n * non-integer multiple of its module size gets blurred module edges, and a\n * scanner reading a blurred edge guesses. Vector output cannot have that\n * problem.\n *\n * ## It is an image of a value, not the value\n *\n * A QR code is unreadable to anyone without a second device pointed at the\n * screen — which includes every screen-reader user and anyone whose phone is\n * the device showing it. So `label` is required, and the value should ALSO be\n * reachable as text or a link beside it. A pairing panel that shows only a\n * code is a panel some people cannot use at all.\n *\n * @example\n * ```tsx\n * <QrCode\n * value=\"https://alphar.tail1234.ts.net:7421/pair#482913\"\n * size={192}\n * label=\"Pair this device\"\n * />\n *\n * // On a dark surface, set both colours: a transparent background renders\n * // dark-on-dark and will not scan.\n * <QrCode value={url} label=\"Pair\" foreground=\"#0b0b0c\" background=\"#ffffff\" />\n * ```\n */\nexport const QrCode = forwardRef<SVGSVGElement, QrCodeProps>(\n (\n {\n value,\n size = 192,\n errorCorrection = \"M\",\n label,\n quietZone = 4,\n foreground = \"currentColor\",\n background = \"transparent\",\n mode,\n version,\n className,\n ...props\n },\n ref,\n ) => {\n // Encoding a version 40 symbol is real work (Reed-Solomon over 2,956\n // codewords, then eight masks scored). Nothing about it depends on `size`\n // or the colours, so it is memoised on the inputs that actually change it\n // — otherwise a parent re-render on hover re-encodes the whole symbol.\n const symbol = useMemo(\n () => encodeQr(value, { errorCorrection, mode, version }),\n [value, errorCorrection, mode, version],\n );\n\n const extent = symbol.size + quietZone * 2;\n\n const path = useMemo(() => {\n const parts: string[] = [];\n for (let row = 0; row < symbol.size; row += 1) {\n const line = symbol.modules[row] as boolean[];\n let col = 0;\n while (col < symbol.size) {\n if (!line[col]) {\n col += 1;\n continue;\n }\n // Run-length the dark modules along the row: a horizontal run\n // becomes one rectangle rather than one per module, which roughly\n // halves the path for a typical symbol and costs nothing to read.\n let run = 1;\n while (col + run < symbol.size && line[col + run]) {\n run += 1;\n }\n parts.push(`M${col + quietZone} ${row + quietZone}h${run}v1h-${run}z`);\n col += run;\n }\n }\n return parts.join(\"\");\n }, [symbol, quietZone]);\n\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox={`0 0 ${extent} ${extent}`}\n role=\"img\"\n aria-label={label}\n // Nearest-neighbour rather than smoothing, for the rasterisers that\n // apply it anyway: a blurred module edge is a module a scanner has to\n // guess at.\n shapeRendering=\"crispEdges\"\n className={cn(\"fa-qr-code\", className)}\n {...props}\n >\n {background !== \"transparent\" && (\n <rect width={extent} height={extent} fill={background} />\n )}\n <path d={path} fill={foreground} />\n </svg>\n );\n },\n);\n\nQrCode.displayName = \"QrCode\";\n"]}
|