qreator 9.0.6
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/LICENSE +20 -0
- package/README.md +92 -0
- package/lib/browser/encode.d.ts +2 -0
- package/lib/browser/errorcode.d.ts +1 -0
- package/lib/browser/matrix.d.ts +9 -0
- package/lib/browser/pdf.d.ts +2 -0
- package/lib/browser/pdf.umd.js +26816 -0
- package/lib/browser/pdf.umd.js.map +1 -0
- package/lib/browser/png.d.ts +6 -0
- package/lib/browser/png.umd.js +1540 -0
- package/lib/browser/png.umd.js.map +1 -0
- package/lib/browser/png_browser.d.ts +5 -0
- package/lib/browser/qr-base.d.ts +4 -0
- package/lib/browser/qr.d.ts +2 -0
- package/lib/browser/svg.d.ts +7 -0
- package/lib/browser/svg.umd.js +1536 -0
- package/lib/browser/svg.umd.js.map +1 -0
- package/lib/browser/tests/_common.d.ts +4 -0
- package/lib/browser/tests/browser.test.d.ts +1 -0
- package/lib/browser/tests/test.d.ts +1 -0
- package/lib/browser/typing/types.d.ts +28 -0
- package/lib/browser/utils.d.ts +17 -0
- package/lib/encode.d.ts +2 -0
- package/lib/encode.js +137 -0
- package/lib/encode.js.map +1 -0
- package/lib/errorcode.d.ts +1 -0
- package/lib/errorcode.js +62 -0
- package/lib/errorcode.js.map +1 -0
- package/lib/matrix.d.ts +9 -0
- package/lib/matrix.js +347 -0
- package/lib/matrix.js.map +1 -0
- package/lib/pdf.d.ts +2 -0
- package/lib/pdf.js +64 -0
- package/lib/pdf.js.map +1 -0
- package/lib/png.d.ts +6 -0
- package/lib/png.js +30 -0
- package/lib/png.js.map +1 -0
- package/lib/png_browser.d.ts +5 -0
- package/lib/png_browser.js +53 -0
- package/lib/png_browser.js.map +1 -0
- package/lib/qr-base.d.ts +4 -0
- package/lib/qr-base.js +151 -0
- package/lib/qr-base.js.map +1 -0
- package/lib/qr.d.ts +2 -0
- package/lib/qr.js +2 -0
- package/lib/qr.js.map +1 -0
- package/lib/svg.d.ts +7 -0
- package/lib/svg.js +49 -0
- package/lib/svg.js.map +1 -0
- package/lib/tests/_common.d.ts +4 -0
- package/lib/tests/_common.js +36 -0
- package/lib/tests/_common.js.map +1 -0
- package/lib/tests/browser.test.d.ts +1 -0
- package/lib/tests/browser.test.js +193 -0
- package/lib/tests/browser.test.js.map +1 -0
- package/lib/tests/test.d.ts +1 -0
- package/lib/tests/test.js +238 -0
- package/lib/tests/test.js.map +1 -0
- package/lib/typing/types.d.ts +28 -0
- package/lib/typing/types.js +2 -0
- package/lib/typing/types.js.map +1 -0
- package/lib/utils.d.ts +17 -0
- package/lib/utils.js +68 -0
- package/lib/utils.js.map +1 -0
- package/package.json +105 -0
- package/src/encode.ts +176 -0
- package/src/errorcode.ts +75 -0
- package/src/matrix.ts +393 -0
- package/src/pdf.ts +80 -0
- package/src/png.ts +42 -0
- package/src/png_browser.ts +73 -0
- package/src/qr-base.ts +180 -0
- package/src/qr.ts +2 -0
- package/src/svg.ts +89 -0
- package/src/tests/_common.ts +40 -0
- package/src/tests/browser.test.ts +209 -0
- package/src/tests/test.ts +250 -0
- package/src/typing/index.d.ts +5 -0
- package/src/typing/types.ts +99 -0
- package/src/utils.ts +86 -0
package/lib/qr-base.js
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { encode } from "./encode.js";
|
|
2
|
+
import { calculateEC } from "./errorcode.js";
|
|
3
|
+
import { getMatrix } from "./matrix.js";
|
|
4
|
+
const EC_LEVELS = ["L", "M", "Q", "H"];
|
|
5
|
+
export function getTemplate(message, ec_level) {
|
|
6
|
+
let i = 1;
|
|
7
|
+
let len;
|
|
8
|
+
if (message.data1) {
|
|
9
|
+
len = Math.ceil(message.data1.length / 8);
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
i = 10;
|
|
13
|
+
}
|
|
14
|
+
for (; i < 10; i++) {
|
|
15
|
+
let version = mappedVersions[i][ec_level];
|
|
16
|
+
if (version.data_len >= len) {
|
|
17
|
+
return deepCopy(version);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
if (message.data10) {
|
|
21
|
+
len = Math.ceil(message.data10.length / 8);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
i = 27;
|
|
25
|
+
}
|
|
26
|
+
for (; i < 27; i++) {
|
|
27
|
+
let version = mappedVersions[i][ec_level];
|
|
28
|
+
if (version.data_len >= len) {
|
|
29
|
+
return deepCopy(version);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
len = Math.ceil(message.data27.length / 8);
|
|
33
|
+
for (; i < 41; i++) {
|
|
34
|
+
let version = mappedVersions[i][ec_level];
|
|
35
|
+
if (version.data_len >= len) {
|
|
36
|
+
return deepCopy(version);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
throw new Error("Too much data");
|
|
40
|
+
}
|
|
41
|
+
export function fillTemplate(message, template) {
|
|
42
|
+
const blocks = new Uint8Array(template.data_len);
|
|
43
|
+
let messageUpdated;
|
|
44
|
+
if (template.version < 10) {
|
|
45
|
+
messageUpdated = message.data1;
|
|
46
|
+
}
|
|
47
|
+
else if (template.version < 27) {
|
|
48
|
+
messageUpdated = message.data10;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
messageUpdated = message.data27;
|
|
52
|
+
}
|
|
53
|
+
const len = messageUpdated.length;
|
|
54
|
+
for (let i = 0; i < len; i += 8) {
|
|
55
|
+
let b = 0;
|
|
56
|
+
for (let j = 0; j < 8; j++) {
|
|
57
|
+
b = (b << 1) | (messageUpdated[i + j] ? 1 : 0);
|
|
58
|
+
}
|
|
59
|
+
blocks[i / 8] = b;
|
|
60
|
+
}
|
|
61
|
+
let pad = 236;
|
|
62
|
+
for (let i = Math.ceil((len + 4) / 8); i < blocks.length; i++) {
|
|
63
|
+
blocks[i] = pad;
|
|
64
|
+
pad = pad == 236 ? 17 : 236;
|
|
65
|
+
}
|
|
66
|
+
let offset = 0;
|
|
67
|
+
template.blocks = template.blocks.map((n) => {
|
|
68
|
+
const b = blocks.slice(offset, offset + n);
|
|
69
|
+
offset += n;
|
|
70
|
+
template.ec.push(calculateEC(b, template.ec_len));
|
|
71
|
+
return b;
|
|
72
|
+
});
|
|
73
|
+
return template;
|
|
74
|
+
}
|
|
75
|
+
export function QR(text, ec_level, parse_url) {
|
|
76
|
+
ec_level = EC_LEVELS.includes(ec_level) ? ec_level : "M";
|
|
77
|
+
const message = encode(text, parse_url);
|
|
78
|
+
const data = fillTemplate(message, getTemplate(message, ec_level));
|
|
79
|
+
return getMatrix(data);
|
|
80
|
+
}
|
|
81
|
+
const deepCopy = typeof structuredClone !== "undefined" ? structuredClone : ((obj) => JSON.parse(JSON.stringify(obj)));
|
|
82
|
+
const versions = [
|
|
83
|
+
[],
|
|
84
|
+
[26, 7, 1, 10, 1, 13, 1, 17, 1],
|
|
85
|
+
[44, 10, 1, 16, 1, 22, 1, 28, 1],
|
|
86
|
+
[70, 15, 1, 26, 1, 36, 2, 44, 2],
|
|
87
|
+
[100, 20, 1, 36, 2, 52, 2, 64, 4],
|
|
88
|
+
[134, 26, 1, 48, 2, 72, 4, 88, 4],
|
|
89
|
+
[172, 36, 2, 64, 4, 96, 4, 112, 4],
|
|
90
|
+
[196, 40, 2, 72, 4, 108, 6, 130, 5],
|
|
91
|
+
[242, 48, 2, 88, 4, 132, 6, 156, 6],
|
|
92
|
+
[292, 60, 2, 110, 5, 160, 8, 192, 8],
|
|
93
|
+
[346, 72, 4, 130, 5, 192, 8, 224, 8],
|
|
94
|
+
[404, 80, 4, 150, 5, 224, 8, 264, 11],
|
|
95
|
+
[466, 96, 4, 176, 8, 260, 10, 308, 11],
|
|
96
|
+
[532, 104, 4, 198, 9, 288, 12, 352, 16],
|
|
97
|
+
[581, 120, 4, 216, 9, 320, 16, 384, 16],
|
|
98
|
+
[655, 132, 6, 240, 10, 360, 12, 432, 18],
|
|
99
|
+
[733, 144, 6, 280, 10, 408, 17, 480, 16],
|
|
100
|
+
[815, 168, 6, 308, 11, 448, 16, 532, 19],
|
|
101
|
+
[901, 180, 6, 338, 13, 504, 18, 588, 21],
|
|
102
|
+
[991, 196, 7, 364, 14, 546, 21, 650, 25],
|
|
103
|
+
[1085, 224, 8, 416, 16, 600, 20, 700, 25],
|
|
104
|
+
[1156, 224, 8, 442, 17, 644, 23, 750, 25],
|
|
105
|
+
[1258, 252, 9, 476, 17, 690, 23, 816, 34],
|
|
106
|
+
[1364, 270, 9, 504, 18, 750, 25, 900, 30],
|
|
107
|
+
[1474, 300, 10, 560, 20, 810, 27, 960, 32],
|
|
108
|
+
[1588, 312, 12, 588, 21, 870, 29, 1050, 35],
|
|
109
|
+
[1706, 336, 12, 644, 23, 952, 34, 1110, 37],
|
|
110
|
+
[1828, 360, 12, 700, 25, 1020, 34, 1200, 40],
|
|
111
|
+
[1921, 390, 13, 728, 26, 1050, 35, 1260, 42],
|
|
112
|
+
[2051, 420, 14, 784, 28, 1140, 38, 1350, 45],
|
|
113
|
+
[2185, 450, 15, 812, 29, 1200, 40, 1440, 48],
|
|
114
|
+
[2323, 480, 16, 868, 31, 1290, 43, 1530, 51],
|
|
115
|
+
[2465, 510, 17, 924, 33, 1350, 45, 1620, 54],
|
|
116
|
+
[2611, 540, 18, 980, 35, 1440, 48, 1710, 57],
|
|
117
|
+
[2761, 570, 19, 1036, 37, 1530, 51, 1800, 60],
|
|
118
|
+
[2876, 570, 19, 1064, 38, 1590, 53, 1890, 63],
|
|
119
|
+
[3034, 600, 20, 1120, 40, 1680, 56, 1980, 66],
|
|
120
|
+
[3196, 630, 21, 1204, 43, 1770, 59, 2100, 70],
|
|
121
|
+
[3362, 660, 22, 1260, 45, 1860, 62, 2220, 74],
|
|
122
|
+
[3532, 720, 24, 1316, 47, 1950, 65, 2310, 77],
|
|
123
|
+
[3706, 750, 25, 1372, 49, 2040, 68, 2430, 81],
|
|
124
|
+
];
|
|
125
|
+
const mappedVersions = versions.map((el, index) => {
|
|
126
|
+
if (!index) {
|
|
127
|
+
return Object.create(null);
|
|
128
|
+
}
|
|
129
|
+
const res = Object.create(null);
|
|
130
|
+
for (let i = 1; i < 8; i += 2) {
|
|
131
|
+
const length = el[0] - el[i];
|
|
132
|
+
const num_template = el[i + 1];
|
|
133
|
+
const ec_level = EC_LEVELS[(i / 2) | 0];
|
|
134
|
+
const level = {
|
|
135
|
+
version: index,
|
|
136
|
+
ec_level,
|
|
137
|
+
data_len: length,
|
|
138
|
+
ec_len: el[i] / num_template,
|
|
139
|
+
blocks: [],
|
|
140
|
+
ec: [],
|
|
141
|
+
};
|
|
142
|
+
for (let k = num_template, n = length; k > 0; k--) {
|
|
143
|
+
const block = (n / k) | 0;
|
|
144
|
+
level.blocks.push(block);
|
|
145
|
+
n -= block;
|
|
146
|
+
}
|
|
147
|
+
res[ec_level] = level;
|
|
148
|
+
}
|
|
149
|
+
return res;
|
|
150
|
+
});
|
|
151
|
+
//# sourceMappingURL=qr-base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qr-base.js","sourceRoot":"","sources":["../src/qr-base.ts"],"names":[],"mappings":"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EAAE,CAAC;IACvC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC;IACxC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC;IACxC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC;IACxC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC;IACxC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC;IACxC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC;IACzC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC;IACzC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC;IACzC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC;IACzC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC;IAC1C,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;IAC3C,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;IAC3C,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;IAC5C,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;IAC5C,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;IAC5C,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;IAC5C,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;IAC5C,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;IAC5C,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;IAC5C,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;IAC7C,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;IAC7C,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;IAC7C,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;IAC7C,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;IAC7C,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;IAC7C,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;CAChD,CAAC;AAEF,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAa,EAAE,EAAE;IACtD,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAE7B,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAI,EAAe,CAAC,CAAC,CAAC,GAAI,EAAe,CAAC,CAAC,CAAC,CAAC;QACzD,MAAM,YAAY,GAAI,EAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACxC,MAAM,KAAK,GAAgD;YACvD,OAAO,EAAE,KAAK;YACd,QAAQ;YACR,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAG,EAAe,CAAC,CAAC,CAAC,GAAG,YAAY;YAC1C,MAAM,EAAE,EAAE;YACV,EAAE,EAAE,EAAE;SACT,CAAC;QAEF,KAAK,IAAI,CAAC,GAAG,YAAY,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC1B,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC,IAAI,KAAK,CAAC;QACf,CAAC;QACD,GAAG,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;IAC1B,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC,CAAC,CAAC"}
|
package/lib/qr.d.ts
ADDED
package/lib/qr.js
ADDED
package/lib/qr.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qr.js","sourceRoot":"","sources":["../src/qr.ts"],"names":[],"mappings":""}
|
package/lib/svg.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ImageOptions, Matrix } from "./typing/types";
|
|
2
|
+
export declare function getSVG(text: string, inOptions?: ImageOptions): Promise<Uint8Array>;
|
|
3
|
+
export declare function createSVG({ matrix, margin, size, logo, logoWidth, logoHeight, color, bgColor, imageWidth, imageHeight, borderRadius, }: ImageOptions & {
|
|
4
|
+
matrix: Matrix;
|
|
5
|
+
imageWidth?: number;
|
|
6
|
+
imageHeight?: number;
|
|
7
|
+
}): Promise<Uint8Array>;
|
package/lib/svg.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { QR } from "./qr-base.js";
|
|
2
|
+
import { getOptions, colorToHex, getSVGPath } from "./utils.js";
|
|
3
|
+
import { Base64 } from 'js-base64';
|
|
4
|
+
export async function getSVG(text, inOptions = {}) {
|
|
5
|
+
const options = getOptions({ ...inOptions, type: "svg" });
|
|
6
|
+
const matrix = QR(text, options.ec_level, options.parse_url);
|
|
7
|
+
return createSVG({ matrix, ...options });
|
|
8
|
+
}
|
|
9
|
+
const te = new TextEncoder();
|
|
10
|
+
export async function createSVG({ matrix, margin, size, logo, logoWidth, logoHeight, color, bgColor, imageWidth, imageHeight, borderRadius, }) {
|
|
11
|
+
const actualSize = size || 9;
|
|
12
|
+
const X = matrix.length + 2 * margin;
|
|
13
|
+
const XY = X * (actualSize || 1);
|
|
14
|
+
const imageWidthStr = imageWidth ? ` width="${imageWidth}"` : "";
|
|
15
|
+
const imageHeightStr = imageHeight ? `height="${imageWidth}" ` : "";
|
|
16
|
+
const xmlTag = `<?xml version="1.0" encoding="utf-8"?>`;
|
|
17
|
+
const svgOpeningTag = `<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink"${imageWidthStr} ${imageHeightStr}viewBox="0 0 ${XY} ${XY}">`;
|
|
18
|
+
const svgBody = getSVGBody(matrix, {
|
|
19
|
+
color,
|
|
20
|
+
bgColor,
|
|
21
|
+
size: XY,
|
|
22
|
+
margin,
|
|
23
|
+
blockSize: actualSize,
|
|
24
|
+
borderRadius,
|
|
25
|
+
});
|
|
26
|
+
const svgEndTag = "</svg>";
|
|
27
|
+
const logoImage = logo ? getLogoImage(logo, XY, logoWidth, logoHeight) : "";
|
|
28
|
+
return te.encode(xmlTag + svgOpeningTag + svgBody + logoImage + svgEndTag);
|
|
29
|
+
}
|
|
30
|
+
function getSVGBody(matrix, options) {
|
|
31
|
+
const path = getSVGPath(matrix, options.blockSize, options.margin * options.blockSize, options.borderRadius);
|
|
32
|
+
let svgBody = `<rect width="${options.size}" height="${options.size}" ` +
|
|
33
|
+
`fill="${colorToHex(options.bgColor)}"></rect>`;
|
|
34
|
+
svgBody += '<path shape-rendering="geometricPrecision" d="' + path + '" fill="' + colorToHex(options.color) + '"/>';
|
|
35
|
+
return svgBody;
|
|
36
|
+
}
|
|
37
|
+
function getLogoImage(logo, XY, logoWidth, logoHeight) {
|
|
38
|
+
const imageBase64 = `data:image/png;base64,${typeof Buffer !== "undefined" && Buffer.isBuffer(logo)
|
|
39
|
+
? logo.toString("base64")
|
|
40
|
+
: Base64.fromUint8Array(new Uint8Array(logo))}`;
|
|
41
|
+
return (`<image ` +
|
|
42
|
+
`width="${(logoWidth / 100) * XY}" ` +
|
|
43
|
+
`height="${(logoHeight / 100) * XY}" ` +
|
|
44
|
+
`xlink:href="${imageBase64}" ` +
|
|
45
|
+
`x="${XY / 2 - ((logoWidth / 100) * XY) / 2}" ` +
|
|
46
|
+
`y="${XY / 2 - ((logoHeight / 100) * XY) / 2}">` +
|
|
47
|
+
`</image>`);
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=svg.js.map
|
package/lib/svg.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svg.js","sourceRoot":"","sources":["../src/svg.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import looksSame from "looks-same";
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
import { dirname } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import * as diff from "diff";
|
|
6
|
+
import XMLFormatter from "xml-formatter";
|
|
7
|
+
import chalk from "chalk";
|
|
8
|
+
chalk.level = 3;
|
|
9
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
+
const __dirname = dirname(__filename);
|
|
11
|
+
export const goldenDir = `${__dirname}/../../test_data/golden`;
|
|
12
|
+
export const generatedImageDir = `${__dirname}/../../test_data/generated`;
|
|
13
|
+
export const assertEqual = async (t, filename) => {
|
|
14
|
+
if (filename.endsWith(".png")) {
|
|
15
|
+
const lsRes = await looksSame(`${generatedImageDir}/${filename}`, `${goldenDir}/${filename}`, { strict: true });
|
|
16
|
+
t.assert(lsRes.equal, `Images are different: ${filename}`);
|
|
17
|
+
}
|
|
18
|
+
else if (!filename.endsWith("pdf")) {
|
|
19
|
+
const f1 = (await readFile(`${generatedImageDir}/${filename}`)).toString();
|
|
20
|
+
const f2 = (await readFile(`${goldenDir}/${filename}`)).toString();
|
|
21
|
+
if (f1 !== f2) {
|
|
22
|
+
for (const el of diff.diffLines(XMLFormatter(f1), XMLFormatter(f2), { newlineIsToken: true })) {
|
|
23
|
+
console.log(el.added ? chalk.bold.green(el.value) : chalk.bold.red(el.value));
|
|
24
|
+
}
|
|
25
|
+
;
|
|
26
|
+
t.fail(`Files are different: ${generatedImageDir}/${filename} and ${goldenDir}/${filename}`);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
t.pass();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
t.pass();
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=_common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_common.js","sourceRoot":"","sources":["../../src/tests/_common.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AAEhB,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACjD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AAErC,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,SAAS,yBAAyB,CAAC;AAC/D,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,SAAS,4BAA4B,CAAC;AAE1E,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAE,CAA4B,EAAE,QAAgB,EAAE,EAAE;IAChF,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,MAAM,SAAS,CACzB,GAAG,iBAAiB,IAAI,QAAQ,EAAE,EAClC,GAAG,SAAS,IAAI,QAAQ,EAAE,EAC1B,EAAE,MAAM,EAAE,IAAI,EAAE,CACnB,CAAC;QACF,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,yBAAyB,QAAQ,EAAE,CAAC,CAAC;IAE/D,CAAC;SAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACnC,MAAM,EAAE,GAAG,CAAC,MAAM,QAAQ,CAAC,GAAG,iBAAiB,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC3E,MAAM,EAAE,GAAG,CAAC,MAAM,QAAQ,CAAC,GAAG,SAAS,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACnE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACZ,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC5F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;YAClF,CAAC;YAAA,CAAC;YACF,CAAC,CAAC,IAAI,CAAC,wBAAwB,iBAAiB,IAAI,QAAQ,QAAQ,SAAS,IAAI,QAAQ,EAAE,CAAC,CAAC;QACjG,CAAC;aAAM,CAAC;YACJ,CAAC,CAAC,IAAI,EAAE,CAAC;QACb,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,CAAC,CAAC,IAAI,EAAE,CAAC;IACb,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import test from "ava";
|
|
2
|
+
import { readFileSync } from "fs";
|
|
3
|
+
import { writeFile } from "node:fs/promises";
|
|
4
|
+
import { JSDOM } from 'jsdom';
|
|
5
|
+
import { assertEqual, generatedImageDir, goldenDir } from "./_common.js";
|
|
6
|
+
import { Path2D } from "canvas";
|
|
7
|
+
let functions;
|
|
8
|
+
const { window } = new JSDOM(``, { runScripts: "dangerously", resources: "usable" });
|
|
9
|
+
test.before(async () => {
|
|
10
|
+
window.globalThis.TextEncoder = TextEncoder;
|
|
11
|
+
window.globalThis.TextDecoder = TextDecoder;
|
|
12
|
+
window.globalThis.Path2D = Path2D;
|
|
13
|
+
for (const scriptType of ['png', 'svg', 'pdf']) {
|
|
14
|
+
const scriptEl = window.document.createElement('script');
|
|
15
|
+
scriptEl.textContent = readFileSync(`./lib/browser/${scriptType}.umd.js`).toString();
|
|
16
|
+
scriptEl.type = 'text/javascript';
|
|
17
|
+
window.document.body.appendChild(scriptEl);
|
|
18
|
+
}
|
|
19
|
+
functions = {
|
|
20
|
+
"png": window.globalThis.pngQrCode.getPNG,
|
|
21
|
+
"svg": window.globalThis.svgQrCode.getSVG,
|
|
22
|
+
"pdf": window.globalThis.pdfQrCode.getPDF,
|
|
23
|
+
};
|
|
24
|
+
});
|
|
25
|
+
const text = "I \u2764\uFE0F QR code!";
|
|
26
|
+
const defaultParams = {
|
|
27
|
+
ec_level: "Q",
|
|
28
|
+
margin: 1,
|
|
29
|
+
parse_url: true,
|
|
30
|
+
};
|
|
31
|
+
[
|
|
32
|
+
{
|
|
33
|
+
name: "PNG",
|
|
34
|
+
type: "png",
|
|
35
|
+
filename: "qr.png",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: "PNG with border radius",
|
|
39
|
+
type: "png",
|
|
40
|
+
filename: "qr_with_border_radius.png",
|
|
41
|
+
params: {
|
|
42
|
+
borderRadius: 3,
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: "PNG with colors",
|
|
47
|
+
type: "png",
|
|
48
|
+
filename: "qr_with_colors.png",
|
|
49
|
+
params: {
|
|
50
|
+
color: 0x0000a0ff,
|
|
51
|
+
bgColor: 0xffa0ffff,
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: "PNG with colors (hex)",
|
|
56
|
+
type: "png",
|
|
57
|
+
filename: "qr_with_colors.png",
|
|
58
|
+
params: {
|
|
59
|
+
color: '#0000a0',
|
|
60
|
+
bgColor: '#ffa0ff',
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: "PNG with logo (PNG)",
|
|
65
|
+
type: "png",
|
|
66
|
+
filename: "qr_with_logo.png",
|
|
67
|
+
params: { logo: readFileSync(`${goldenDir}/logo.png`).buffer },
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: "PNG with logo (JPG)",
|
|
71
|
+
type: "png",
|
|
72
|
+
filename: "qr_with_logo_jpg.png",
|
|
73
|
+
params: { logo: readFileSync(`${goldenDir}/logo.jpg`).buffer },
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
name: "PNG with colors (rgba)",
|
|
77
|
+
type: "png",
|
|
78
|
+
filename: "qr_with_colors_rgba.png",
|
|
79
|
+
params: {
|
|
80
|
+
color: 'rgba(255, 0, 0, 0.5)',
|
|
81
|
+
bgColor: 'rgba(255, 255, 255, 0.1)',
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
name: "SVG",
|
|
86
|
+
type: "svg",
|
|
87
|
+
filename: "qr.svg",
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
name: "SVG with border radius",
|
|
91
|
+
type: "svg",
|
|
92
|
+
filename: "qr_with_border_radius.svg",
|
|
93
|
+
params: {
|
|
94
|
+
borderRadius: 2,
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
name: "SVG with EC level",
|
|
99
|
+
type: "svg",
|
|
100
|
+
filename: "qr_with_ec_level.svg",
|
|
101
|
+
params: {
|
|
102
|
+
ec_level: "H",
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
name: "SVG with size",
|
|
107
|
+
type: "svg",
|
|
108
|
+
filename: "qr_with_size.svg",
|
|
109
|
+
params: {
|
|
110
|
+
size: 6,
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
name: "SVG with colors (hex)",
|
|
115
|
+
type: "svg",
|
|
116
|
+
filename: "qr_with_colors_hex.svg",
|
|
117
|
+
params: {
|
|
118
|
+
color: '#ff0000',
|
|
119
|
+
bgColor: '#00ff00',
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
name: "SVG with colors (number)",
|
|
124
|
+
type: "svg",
|
|
125
|
+
filename: "qr_with_colors.svg",
|
|
126
|
+
params: {
|
|
127
|
+
color: 0xff0000ff,
|
|
128
|
+
bgColor: 0x00ff00ff,
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
name: "SVG with logo as arraybuffer (PNG)",
|
|
133
|
+
type: "svg",
|
|
134
|
+
filename: "qr_with_logo_as_arraybuffer.svg",
|
|
135
|
+
params: {
|
|
136
|
+
logo: readFileSync(`${goldenDir}/logo.png`).buffer,
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
name: "SVG with logo as arraybuffer (JPG)",
|
|
141
|
+
type: "svg",
|
|
142
|
+
filename: "qr_with_logo_as_arraybuffer_jpg.svg",
|
|
143
|
+
params: {
|
|
144
|
+
logo: readFileSync(`${goldenDir}/logo.jpg`).buffer,
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
name: "PDF",
|
|
149
|
+
type: "pdf",
|
|
150
|
+
filename: "qr.pdf",
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
name: "PDF with border radius",
|
|
154
|
+
type: "pdf",
|
|
155
|
+
filename: "qr_with_border_radius.pdf",
|
|
156
|
+
params: {
|
|
157
|
+
borderRadius: 2,
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
name: "PDF with colors",
|
|
162
|
+
type: "pdf",
|
|
163
|
+
filename: "qr_with_colors.pdf",
|
|
164
|
+
params: { color: 0xff0000ff, bgColor: 0x00ff00ff },
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
name: "PDF with arraybuffer",
|
|
168
|
+
type: "pdf",
|
|
169
|
+
filename: "qr_logo_arraybuffer.pdf",
|
|
170
|
+
params: {
|
|
171
|
+
logo: new window.Uint8Array(readFileSync(`${goldenDir}/logo.png`).buffer),
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
name: "PDF with arraybuffer (JPG)",
|
|
176
|
+
type: "pdf",
|
|
177
|
+
filename: "qr_logo_arraybuffer.pdf",
|
|
178
|
+
params: {
|
|
179
|
+
logo: new window.Uint8Array(readFileSync(`${goldenDir}/logo.jpg`).buffer),
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
].forEach((testData) => {
|
|
183
|
+
test(`browser > ${testData.name}`, async (t) => {
|
|
184
|
+
const image = await functions[testData.type](text, {
|
|
185
|
+
type: testData.type,
|
|
186
|
+
...defaultParams,
|
|
187
|
+
...testData.params,
|
|
188
|
+
});
|
|
189
|
+
await writeFile(`${generatedImageDir}/browser_${testData.filename}`, new Uint8Array(image));
|
|
190
|
+
await assertEqual(t, 'browser_' + testData.filename);
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
//# sourceMappingURL=browser.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.test.js","sourceRoot":"","sources":["../../src/tests/browser.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,IAAI,SAA6F,CAAC;AAClG,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AAErF,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;IACnB,MAAM,CAAC,UAAU,CAAC,WAAW,GAAG,WAAW,CAAC;IAC5C,MAAM,CAAC,UAAU,CAAC,WAAW,GAAG,WAAW,CAAC;IAC5C,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;IAElC,KAAK,MAAM,UAAU,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;QAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QACxD,QAAQ,CAAC,WAAW,GAAG,YAAY,CAAC,iBAAiB,UAAU,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAA;QACpF,QAAQ,CAAC,IAAI,GAAG,iBAAiB,CAAA;QACjC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IACD,SAAS,GAAG;QACR,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM;QACzC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM;QACzC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM;KAC5C,CAAC;AACN,CAAC,CAAC,CAAA;AAGF,MAAM,IAAI,GAAG,yBAAyB,CAAC;AASvC,MAAM,aAAa,GAAG;IAClB,QAAQ,EAAE,GAAY;IACtB,MAAM,EAAE,CAAC;IACT,SAAS,EAAE,IAAI;CAClB,CAAC;AAED;IACG;QACI,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,QAAQ;KAErB;IACD;QACI,IAAI,EAAE,wBAAwB;QAC9B,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,2BAA2B;QACrC,MAAM,EAAE;YACJ,YAAY,EAAE,CAAC;SAClB;KACJ;IACD;QACI,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,oBAAoB;QAC9B,MAAM,EAAE;YACJ,KAAK,EAAE,UAAU;YACjB,OAAO,EAAE,UAAU;SACtB;KACJ;IACD;QACI,IAAI,EAAE,uBAAuB;QAC7B,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,oBAAoB;QAC9B,MAAM,EAAE;YACJ,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,SAAS;SACrB;KACJ;IACD;QACI,IAAI,EAAE,qBAAqB;QAC3B,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,kBAAkB;QAC5B,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,CAAC,GAAG,SAAS,WAAW,CAAC,CAAC,MAAM,EAAE;KACjE;IACD;QACI,IAAI,EAAE,qBAAqB;QAC3B,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,sBAAsB;QAChC,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,CAAC,GAAG,SAAS,WAAW,CAAC,CAAC,MAAM,EAAE;KACjE;IACD;QACI,IAAI,EAAE,wBAAwB;QAC9B,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,yBAAyB;QACnC,MAAM,EAAE;YACJ,KAAK,EAAE,sBAAsB;YAC7B,OAAO,EAAE,0BAA0B;SACtC;KACJ;IACD;QACI,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,QAAQ;KACrB;IACD;QACI,IAAI,EAAE,wBAAwB;QAC9B,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,2BAA2B;QACrC,MAAM,EAAE;YACJ,YAAY,EAAE,CAAC;SAClB;KACJ;IACD;QACI,IAAI,EAAE,mBAAmB;QACzB,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,sBAAsB;QAChC,MAAM,EAAE;YACJ,QAAQ,EAAE,GAAG;SAChB;KACJ;IACD;QACI,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,kBAAkB;QAC5B,MAAM,EAAE;YACJ,IAAI,EAAE,CAAC;SACV;KACJ;IACD;QACI,IAAI,EAAE,uBAAuB;QAC7B,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,wBAAwB;QAClC,MAAM,EAAE;YACJ,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,SAAS;SACrB;KACJ;IACD;QACI,IAAI,EAAE,0BAA0B;QAChC,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,oBAAoB;QAC9B,MAAM,EAAE;YACJ,KAAK,EAAE,UAAU;YACjB,OAAO,EAAE,UAAU;SACtB;KACJ;IACD;QACI,IAAI,EAAE,oCAAoC;QAC1C,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,iCAAiC;QAC3C,MAAM,EAAE;YACJ,IAAI,EAAE,YAAY,CAAC,GAAG,SAAS,WAAW,CAAC,CAAC,MAAM;SACrD;KACJ;IACD;QACI,IAAI,EAAE,oCAAoC;QAC1C,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,qCAAqC;QAC/C,MAAM,EAAE;YACJ,IAAI,EAAE,YAAY,CAAC,GAAG,SAAS,WAAW,CAAC,CAAC,MAAM;SACrD;KACJ;IACD;QACI,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,QAAQ;KACrB;IACD;QACI,IAAI,EAAE,wBAAwB;QAC9B,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,2BAA2B;QACrC,MAAM,EAAE;YACJ,YAAY,EAAE,CAAC;SAClB;KACJ;IACD;QACI,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,oBAAoB;QAC9B,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE;KACrD;IACD;QACI,IAAI,EAAE,sBAAsB;QAC5B,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,yBAAyB;QACnC,MAAM,EAAE;YACJ,IAAI,EAAE,IAAI,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,SAAS,WAAW,CAAC,CAAC,MAAM,CAAC;SAC5E;KACJ;IACD;QACI,IAAI,EAAE,4BAA4B;QAClC,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,yBAAyB;QACnC,MAAM,EAAE;YACJ,IAAI,EAAE,IAAI,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,SAAS,WAAW,CAAC,CAAC,MAAM,CAAC;SAC5E;KACJ;CACa,CAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;IACrC,IAAI,CAAC,aAAa,QAAQ,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC3C,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;YAC/C,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,GAAG,aAAa;YAChB,GAAG,QAAQ,CAAC,MAAM;SACrB,CAAC,CAAC;QACH,MAAM,SAAS,CAAC,GAAG,iBAAiB,YAAY,QAAQ,CAAC,QAAQ,EAAE,EAAE,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5F,MAAM,WAAW,CAAC,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|