@ingcreators/annot-annotator 0.5.0 → 0.7.0
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 +305 -0
- package/dist/annotator.d.ts +16 -8
- package/dist/diff-aggregate.d.ts +6 -0
- package/dist/diff.d.ts +30 -0
- package/dist/dsl/schema.d.ts +68 -0
- package/dist/dsl/types.d.ts +41 -1
- package/dist/flatten-editable-png.d.ts +37 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.js +412 -157
- package/dist/redact-burn.d.ts +63 -0
- package/package.json +11 -6
package/dist/index.js
CHANGED
|
@@ -6,23 +6,26 @@ import { DOMParser as i, XMLSerializer as a } from "@xmldom/xmldom";
|
|
|
6
6
|
var o = "data-annot-version", s = "annot", c = "https://ingcreators.com/annot/ns/1.0/";
|
|
7
7
|
new TextEncoder().encode("http://ns.adobe.com/xap/1.0/\0"), new TextEncoder().encode("annot:OriginalImage\0");
|
|
8
8
|
var l = new TextEncoder().encode("XML:com.adobe.xmp");
|
|
9
|
-
function u(e
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
function u(e) {
|
|
10
|
+
return e.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
11
|
+
}
|
|
12
|
+
function d(e) {
|
|
13
|
+
let t = [], n = (e, n) => t.push(`\n <${s}:${e}>${n}</${s}:${e}>`), r = e.tags && Object.keys(e.tags).length > 0 ? JSON.stringify(e.tags) : "";
|
|
14
|
+
return r && n("tags", u(r)), e.sourceUrl && n("sourceUrl", u(e.sourceUrl)), e.createdAt && n("createdAt", u(e.createdAt)), e.producer && n("producer", u(e.producer)), e.dpr && e.dpr > 0 && n("dpr", String(e.dpr)), `<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
|
|
12
15
|
<x:xmpmeta xmlns:x="adobe:ns:meta/">
|
|
13
16
|
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
|
14
17
|
<rdf:Description rdf:about=""
|
|
15
18
|
xmlns:${s}="${c}">
|
|
16
|
-
<${s}:annotations><![CDATA[${e}]]></${s}:annotations>
|
|
17
|
-
<${s}:width>${
|
|
18
|
-
<${s}:height>${
|
|
19
|
-
<${s}:version>
|
|
19
|
+
<${s}:annotations><![CDATA[${e.annotationsSvg}]]></${s}:annotations>
|
|
20
|
+
<${s}:width>${e.width}</${s}:width>
|
|
21
|
+
<${s}:height>${e.height}</${s}:height>
|
|
22
|
+
<${s}:version>2.0</${s}:version>${t.join("")}
|
|
20
23
|
</rdf:Description>
|
|
21
24
|
</rdf:RDF>
|
|
22
25
|
</x:xmpmeta>
|
|
23
26
|
<?xpacket end="w"?>`;
|
|
24
27
|
}
|
|
25
|
-
function
|
|
28
|
+
function f(e) {
|
|
26
29
|
return new Uint8Array([
|
|
27
30
|
e >> 24 & 255,
|
|
28
31
|
e >> 16 & 255,
|
|
@@ -30,28 +33,28 @@ function d(e) {
|
|
|
30
33
|
e & 255
|
|
31
34
|
]);
|
|
32
35
|
}
|
|
33
|
-
function
|
|
36
|
+
function p(e, t) {
|
|
34
37
|
return (e[t] << 24 | e[t + 1] << 16 | e[t + 2] << 8 | e[t + 3]) >>> 0;
|
|
35
38
|
}
|
|
36
|
-
function
|
|
39
|
+
function m(...e) {
|
|
37
40
|
let t = 0;
|
|
38
41
|
for (let n of e) t += n.length;
|
|
39
42
|
let n = new Uint8Array(t), r = 0;
|
|
40
43
|
for (let t of e) n.set(t, r), r += t.length;
|
|
41
44
|
return n;
|
|
42
45
|
}
|
|
43
|
-
function
|
|
46
|
+
function h(e, t, n) {
|
|
44
47
|
if (t + n.length > e.length) return !1;
|
|
45
48
|
for (let r = 0; r < n.length; r++) if (e[t + r] !== n[r]) return !1;
|
|
46
49
|
return !0;
|
|
47
50
|
}
|
|
48
|
-
function
|
|
51
|
+
function g(e) {
|
|
49
52
|
let t = e.split(",")[1] || "", n = atob(t), r = new Uint8Array(n.length);
|
|
50
53
|
for (let e = 0; e < n.length; e++) r[e] = n.charCodeAt(e);
|
|
51
54
|
return r;
|
|
52
55
|
}
|
|
53
|
-
var
|
|
54
|
-
let e = new Uint32Array(256);
|
|
56
|
+
var _ = (() => {
|
|
57
|
+
let e = /* @__PURE__ */ new Uint32Array(256);
|
|
55
58
|
for (let t = 0; t < 256; t++) {
|
|
56
59
|
let n = t;
|
|
57
60
|
for (let e = 0; e < 8; e++) n & 1 ? n = 3988292384 ^ n >>> 1 : n >>>= 1;
|
|
@@ -59,56 +62,56 @@ var g = (() => {
|
|
|
59
62
|
}
|
|
60
63
|
return e;
|
|
61
64
|
})();
|
|
62
|
-
function
|
|
65
|
+
function v(e) {
|
|
63
66
|
let t = 4294967295;
|
|
64
|
-
for (let n = 0; n < e.length; n++) t =
|
|
67
|
+
for (let n = 0; n < e.length; n++) t = _[(t ^ e[n]) & 255] ^ t >>> 8;
|
|
65
68
|
return (t ^ 4294967295) >>> 0;
|
|
66
69
|
}
|
|
67
|
-
function
|
|
68
|
-
let n =
|
|
69
|
-
return
|
|
70
|
+
function y(e, t) {
|
|
71
|
+
let n = m(e, t), r = v(n);
|
|
72
|
+
return m(f(t.length), n, f(r));
|
|
70
73
|
}
|
|
71
|
-
function
|
|
72
|
-
let t =
|
|
74
|
+
function b(e) {
|
|
75
|
+
let t = m(l, new Uint8Array([
|
|
73
76
|
0,
|
|
74
77
|
0,
|
|
75
78
|
0,
|
|
76
79
|
0,
|
|
77
80
|
0
|
|
78
81
|
]), e);
|
|
79
|
-
return
|
|
82
|
+
return y(new TextEncoder().encode("iTXt"), t);
|
|
80
83
|
}
|
|
81
|
-
function
|
|
84
|
+
function x(e) {
|
|
82
85
|
let t = [e.slice(0, 8)], n = 8;
|
|
83
86
|
for (; n + 12 <= e.length;) {
|
|
84
|
-
let r =
|
|
87
|
+
let r = p(e, n), i = e.slice(n + 4, n + 8), a = n + 8, o = a + r + 4;
|
|
85
88
|
if (o > e.length) break;
|
|
86
89
|
let s = String.fromCharCode(...i);
|
|
87
|
-
!(s === "iTXt" &&
|
|
90
|
+
!(s === "iTXt" && h(e, a, l)) && s !== "svGo" && t.push(e.slice(n, o)), n = o;
|
|
88
91
|
}
|
|
89
|
-
return
|
|
92
|
+
return m(...t);
|
|
90
93
|
}
|
|
91
|
-
function
|
|
92
|
-
let r =
|
|
93
|
-
return
|
|
94
|
+
function S(e, t, n) {
|
|
95
|
+
let r = b(t), i = y(new TextEncoder().encode("svGo"), n), a = x(e), o = a.length - 12;
|
|
96
|
+
return m(a.slice(0, o), r, i, a.slice(o));
|
|
94
97
|
}
|
|
95
|
-
function
|
|
96
|
-
let t =
|
|
97
|
-
return
|
|
98
|
+
function C(e) {
|
|
99
|
+
let t = d(e), n = new TextEncoder().encode(t), r = typeof e.originalImage == "string" ? g(e.originalImage) : e.originalImage;
|
|
100
|
+
return S(e.renderedPng, n, r);
|
|
98
101
|
}
|
|
99
102
|
//#endregion
|
|
100
103
|
//#region ../core/src/encode/options.ts
|
|
101
|
-
var
|
|
104
|
+
var w = {
|
|
102
105
|
light: 1280,
|
|
103
106
|
standard: 1920,
|
|
104
107
|
highQuality: 2560,
|
|
105
108
|
original: null
|
|
106
|
-
},
|
|
109
|
+
}, T = {
|
|
107
110
|
light: "Light (1280px)",
|
|
108
111
|
standard: "Standard (1920px)",
|
|
109
112
|
highQuality: "High Quality (2560px)",
|
|
110
113
|
original: "Original"
|
|
111
|
-
},
|
|
114
|
+
}, E = {
|
|
112
115
|
format: "smart",
|
|
113
116
|
smartFallback: "png",
|
|
114
117
|
smartColorThreshold: 15e3,
|
|
@@ -116,8 +119,8 @@ var C = {
|
|
|
116
119
|
saveSizePreset: "standard",
|
|
117
120
|
quantizer: "median-cut"
|
|
118
121
|
};
|
|
119
|
-
function
|
|
120
|
-
let r =
|
|
122
|
+
function D(e, t, n) {
|
|
123
|
+
let r = w[n];
|
|
121
124
|
if (r === null || e <= r) return {
|
|
122
125
|
width: e,
|
|
123
126
|
height: t,
|
|
@@ -132,7 +135,7 @@ function E(e, t, n) {
|
|
|
132
135
|
}
|
|
133
136
|
//#endregion
|
|
134
137
|
//#region ../core/src/encode/png8.ts
|
|
135
|
-
var
|
|
138
|
+
var O = new Uint8Array([
|
|
136
139
|
137,
|
|
137
140
|
80,
|
|
138
141
|
78,
|
|
@@ -141,8 +144,8 @@ var D = new Uint8Array([
|
|
|
141
144
|
10,
|
|
142
145
|
26,
|
|
143
146
|
10
|
|
144
|
-
]),
|
|
145
|
-
let e = new Uint32Array(256);
|
|
147
|
+
]), k = (() => {
|
|
148
|
+
let e = /* @__PURE__ */ new Uint32Array(256);
|
|
146
149
|
for (let t = 0; t < 256; t++) {
|
|
147
150
|
let n = t;
|
|
148
151
|
for (let e = 0; e < 8; e++) n = n & 1 ? 3988292384 ^ n >>> 1 : n >>> 1;
|
|
@@ -150,26 +153,26 @@ var D = new Uint8Array([
|
|
|
150
153
|
}
|
|
151
154
|
return e;
|
|
152
155
|
})();
|
|
153
|
-
function
|
|
156
|
+
function A(e) {
|
|
154
157
|
let t = 4294967295;
|
|
155
|
-
for (let n = 0; n < e.length; n++) t =
|
|
158
|
+
for (let n = 0; n < e.length; n++) t = k[(t ^ e[n]) & 255] ^ t >>> 8;
|
|
156
159
|
return (t ^ 4294967295) >>> 0;
|
|
157
160
|
}
|
|
158
|
-
function
|
|
161
|
+
function j(e, t) {
|
|
159
162
|
let n = new Uint8Array(12 + t.length), r = new DataView(n.buffer);
|
|
160
163
|
r.setUint32(0, t.length, !1);
|
|
161
164
|
for (let t = 0; t < 4; t++) n[4 + t] = e.charCodeAt(t);
|
|
162
165
|
n.set(t, 8);
|
|
163
166
|
let i = n.subarray(4, 8 + t.length);
|
|
164
|
-
return r.setUint32(8 + t.length,
|
|
167
|
+
return r.setUint32(8 + t.length, A(i), !1), n;
|
|
165
168
|
}
|
|
166
|
-
function
|
|
169
|
+
function ee(e, t, n, i, a = 9) {
|
|
167
170
|
if (n <= 0 || i <= 0) throw Error("encodePng8: invalid dimensions");
|
|
168
171
|
if (e.length % 4 != 0) throw Error("encodePng8: palette must be RGBA bytes (multiple of 4)");
|
|
169
172
|
let o = e.length >>> 2;
|
|
170
173
|
if (o < 1 || o > 256) throw Error(`encodePng8: palette must have 1–256 colors, got ${o}`);
|
|
171
174
|
if (t.length !== n * i) throw Error(`encodePng8: indices length ${t.length} != width*height ${n * i}`);
|
|
172
|
-
let s = new Uint8Array(13), c = new DataView(s.buffer);
|
|
175
|
+
let s = /* @__PURE__ */ new Uint8Array(13), c = new DataView(s.buffer);
|
|
173
176
|
c.setUint32(0, n, !1), c.setUint32(4, i, !1), s[8] = 8, s[9] = 3, s[10] = 0, s[11] = 0, s[12] = 0;
|
|
174
177
|
let l = new Uint8Array(o * 3), u = !1, d = -1;
|
|
175
178
|
for (let t = 0; t < o; t++) l[t * 3] = e[t * 4], l[t * 3 + 1] = e[t * 4 + 1], l[t * 3 + 2] = e[t * 4 + 2], e[t * 4 + 3] < 255 && (u = !0, d = t);
|
|
@@ -188,11 +191,11 @@ function j(e, t, n, i, a = 9) {
|
|
|
188
191
|
memLevel: 9,
|
|
189
192
|
windowBits: 15
|
|
190
193
|
}), g = [
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
+
O,
|
|
195
|
+
j("IHDR", s),
|
|
196
|
+
j("PLTE", l)
|
|
194
197
|
];
|
|
195
|
-
f && g.push(
|
|
198
|
+
f && g.push(j("tRNS", f)), g.push(j("IDAT", h)), g.push(j("IEND", /* @__PURE__ */ new Uint8Array()));
|
|
196
199
|
let _ = 0;
|
|
197
200
|
for (let e of g) _ += e.length;
|
|
198
201
|
let v = new Uint8Array(_), y = 0;
|
|
@@ -201,12 +204,12 @@ function j(e, t, n, i, a = 9) {
|
|
|
201
204
|
}
|
|
202
205
|
//#endregion
|
|
203
206
|
//#region ../core/src/encode/quantize-median-cut.ts
|
|
204
|
-
function
|
|
207
|
+
function te(e, t, n, r) {
|
|
205
208
|
if (!Number.isInteger(t) || t <= 0) throw Error(`quantizeMedianCut: invalid width ${t}`);
|
|
206
209
|
if (!Number.isInteger(n) || n <= 0) throw Error(`quantizeMedianCut: invalid height ${n}`);
|
|
207
210
|
let i = t * n * 4;
|
|
208
211
|
if (e.length !== i) throw Error(`quantizeMedianCut: rgba length ${e.length} != width*height*4 = ${i}`);
|
|
209
|
-
let a = Math.max(1, Math.min(256, Math.floor(r))), { opaqueSamples: o, hasTransparent: s, transparentCount: c } =
|
|
212
|
+
let a = Math.max(1, Math.min(256, Math.floor(r))), { opaqueSamples: o, hasTransparent: s, transparentCount: c } = ne(e), l = re(o, s ? Math.max(1, a - 1) : a), u = l.length, d = u + +!!s, f = new Uint8Array(d * 4), p = 0;
|
|
210
213
|
s && (f[0] = 0, f[1] = 0, f[2] = 0, f[3] = 0, p = 1);
|
|
211
214
|
let m = p * 4;
|
|
212
215
|
for (let e = 0; e < u; e++) {
|
|
@@ -215,14 +218,14 @@ function M(e, t, n, r) {
|
|
|
215
218
|
}
|
|
216
219
|
return {
|
|
217
220
|
palette: f,
|
|
218
|
-
indices:
|
|
221
|
+
indices: ae(e, t, n, f, m, s, c > 0)
|
|
219
222
|
};
|
|
220
223
|
}
|
|
221
|
-
var
|
|
222
|
-
function
|
|
224
|
+
var M = 16;
|
|
225
|
+
function ne(e) {
|
|
223
226
|
let t = /* @__PURE__ */ new Map(), n = 0, r = e.length;
|
|
224
227
|
for (let i = 0; i < r; i += 4) {
|
|
225
|
-
if (e[i + 3] <
|
|
228
|
+
if (e[i + 3] < M) {
|
|
226
229
|
n++;
|
|
227
230
|
continue;
|
|
228
231
|
}
|
|
@@ -242,10 +245,10 @@ function P(e) {
|
|
|
242
245
|
transparentCount: n
|
|
243
246
|
};
|
|
244
247
|
}
|
|
245
|
-
function
|
|
248
|
+
function re(e, t) {
|
|
246
249
|
if (e.length === 0) return [];
|
|
247
|
-
if (t <= 1) return [
|
|
248
|
-
let n = [
|
|
250
|
+
if (t <= 1) return [N(e, 0, e.length, 0)];
|
|
251
|
+
let n = [N(e, 0, e.length, 0)], r = 1;
|
|
249
252
|
for (; n.length < t;) {
|
|
250
253
|
let t = -1, i = -1, a = Infinity;
|
|
251
254
|
for (let e = 0; e < n.length; e++) {
|
|
@@ -254,19 +257,19 @@ function F(e, t) {
|
|
|
254
257
|
}
|
|
255
258
|
if (t < 0) break;
|
|
256
259
|
let o = n[t], s = o.rMax - o.rMin, c = o.gMax - o.gMin, l = o.bMax - o.bMin, u;
|
|
257
|
-
u = s >= c && s >= l ? 0 : c >= l ? 1 : 2,
|
|
260
|
+
u = s >= c && s >= l ? 0 : c >= l ? 1 : 2, ie(e, o.start, o.end, u);
|
|
258
261
|
let d = o.population >>> 1, f = 0, p = o.start + 1;
|
|
259
262
|
for (let t = o.start; t < o.end; t++) if (f += e[t].count, f >= d) {
|
|
260
263
|
p = t + 1;
|
|
261
264
|
break;
|
|
262
265
|
}
|
|
263
266
|
p <= o.start && (p = o.start + 1), p >= o.end && (p = o.end - 1);
|
|
264
|
-
let m =
|
|
267
|
+
let m = N(e, o.start, p, r++), h = N(e, p, o.end, r++);
|
|
265
268
|
n[t] = m, n.push(h);
|
|
266
269
|
}
|
|
267
270
|
return n;
|
|
268
271
|
}
|
|
269
|
-
function
|
|
272
|
+
function N(e, t, n, r) {
|
|
270
273
|
let i = 255, a = 0, o = 255, s = 0, c = 255, l = 0, u = 0, d = 0, f = 0, p = 0;
|
|
271
274
|
for (let r = t; r < n; r++) {
|
|
272
275
|
let t = e[r];
|
|
@@ -290,12 +293,12 @@ function I(e, t, n, r) {
|
|
|
290
293
|
insertOrder: r
|
|
291
294
|
};
|
|
292
295
|
}
|
|
293
|
-
function
|
|
296
|
+
function ie(e, t, n, r) {
|
|
294
297
|
let i = e.slice(t, n);
|
|
295
298
|
r === 0 ? i.sort((e, t) => e.r - t.r) : r === 1 ? i.sort((e, t) => e.g - t.g) : i.sort((e, t) => e.b - t.b);
|
|
296
299
|
for (let n = 0; n < i.length; n++) e[t + n] = i[n];
|
|
297
300
|
}
|
|
298
|
-
function
|
|
301
|
+
function ae(e, t, n, r, i, a, o) {
|
|
299
302
|
let s = t * n, c = new Uint8Array(s), l = new Float32Array(t), u = new Float32Array(t), d = new Float32Array(t), f = new Float32Array(t), p = new Float32Array(t), m = new Float32Array(t), h = r.length - i >>> 2, g = new Int32Array(h), _ = new Int32Array(h), v = new Int32Array(h);
|
|
300
303
|
for (let e = 0; e < h; e++) {
|
|
301
304
|
let t = i + e * 4;
|
|
@@ -306,7 +309,7 @@ function te(e, t, n, r, i, a, o) {
|
|
|
306
309
|
f.fill(0), p.fill(0), m.fill(0);
|
|
307
310
|
for (let n = 0; n < t; n++) {
|
|
308
311
|
let i = r * t + n, o = i * 4, s = e[o + 3];
|
|
309
|
-
if (a && s <
|
|
312
|
+
if (a && s < M) {
|
|
310
313
|
c[i] = 0;
|
|
311
314
|
continue;
|
|
312
315
|
}
|
|
@@ -330,11 +333,11 @@ function te(e, t, n, r, i, a, o) {
|
|
|
330
333
|
}
|
|
331
334
|
//#endregion
|
|
332
335
|
//#region src/encode/quantize.ts
|
|
333
|
-
function
|
|
334
|
-
let { palette: r, indices: i } =
|
|
335
|
-
return
|
|
336
|
+
function oe(e, t, n) {
|
|
337
|
+
let { palette: r, indices: i } = te(e, t, n, 256);
|
|
338
|
+
return ee(r, i, t, n, 9);
|
|
336
339
|
}
|
|
337
|
-
function
|
|
340
|
+
function P(e, t) {
|
|
338
341
|
let n = new Uint32Array(e.buffer, e.byteOffset, e.byteLength >>> 2), r = n.length;
|
|
339
342
|
if (r === 0) return !1;
|
|
340
343
|
let i = Math.max(1, Math.floor(r / 5e4)), a = /* @__PURE__ */ new Set();
|
|
@@ -343,64 +346,64 @@ function L(e, t) {
|
|
|
343
346
|
}
|
|
344
347
|
//#endregion
|
|
345
348
|
//#region src/encode/encode.ts
|
|
346
|
-
var
|
|
347
|
-
async function
|
|
348
|
-
let i =
|
|
349
|
+
var se = 1e7;
|
|
350
|
+
async function F(e, t, n, r = E) {
|
|
351
|
+
let i = D(t, n, r.saveSizePreset ?? "original"), a = i.scaled ? le(e, t, n, i.width, i.height) : e, o = i.width, s = i.height;
|
|
349
352
|
return r.format === "png" ? {
|
|
350
|
-
bytes:
|
|
353
|
+
bytes: I(a, o, s),
|
|
351
354
|
chosen: "png",
|
|
352
355
|
width: o,
|
|
353
356
|
height: s
|
|
354
357
|
} : r.format === "jpeg" ? {
|
|
355
|
-
bytes:
|
|
358
|
+
bytes: L(a, o, s, r.jpegPercent / 100),
|
|
356
359
|
chosen: "jpeg",
|
|
357
360
|
width: o,
|
|
358
361
|
height: s
|
|
359
|
-
} : o * s >
|
|
360
|
-
bytes:
|
|
362
|
+
} : o * s > se ? {
|
|
363
|
+
bytes: I(a, o, s),
|
|
361
364
|
chosen: "png",
|
|
362
365
|
reason: "too-large-for-png8",
|
|
363
366
|
width: o,
|
|
364
367
|
height: s
|
|
365
|
-
} :
|
|
366
|
-
bytes:
|
|
368
|
+
} : P(a, r.smartColorThreshold) ? r.smartFallback === "jpeg" ? {
|
|
369
|
+
bytes: L(a, o, s, r.jpegPercent / 100),
|
|
367
370
|
chosen: "jpeg",
|
|
368
371
|
reason: "photo-fallback-jpeg",
|
|
369
372
|
width: o,
|
|
370
373
|
height: s
|
|
371
374
|
} : {
|
|
372
|
-
bytes:
|
|
375
|
+
bytes: I(a, o, s),
|
|
373
376
|
chosen: "png",
|
|
374
377
|
reason: "photo-fallback-png",
|
|
375
378
|
width: o,
|
|
376
379
|
height: s
|
|
377
380
|
} : {
|
|
378
|
-
bytes:
|
|
381
|
+
bytes: oe(a, o, s),
|
|
379
382
|
chosen: "png",
|
|
380
383
|
reason: "png-8",
|
|
381
384
|
width: o,
|
|
382
385
|
height: s
|
|
383
386
|
};
|
|
384
387
|
}
|
|
385
|
-
async function
|
|
388
|
+
async function ce(e, r = E) {
|
|
386
389
|
let i = await n(Buffer.from(e)), a = t(i.width, i.height).getContext("2d");
|
|
387
390
|
a.drawImage(i, 0, 0);
|
|
388
391
|
let o = a.getImageData(0, 0, i.width, i.height).data;
|
|
389
|
-
return
|
|
392
|
+
return F(new Uint8Array(o.buffer, o.byteOffset, o.byteLength), i.width, i.height, r);
|
|
390
393
|
}
|
|
391
|
-
function
|
|
394
|
+
function I(e, n, r) {
|
|
392
395
|
let i = t(n, r), a = i.getContext("2d"), o = a.createImageData(n, r);
|
|
393
396
|
o.data.set(e), a.putImageData(o, 0, 0);
|
|
394
397
|
let s = i.toBuffer("image/png");
|
|
395
398
|
return new Uint8Array(s.buffer, s.byteOffset, s.byteLength);
|
|
396
399
|
}
|
|
397
|
-
function
|
|
400
|
+
function L(e, n, r, i) {
|
|
398
401
|
let a = t(n, r), o = a.getContext("2d"), s = o.createImageData(n, r);
|
|
399
402
|
s.data.set(e), o.putImageData(s, 0, 0);
|
|
400
403
|
let c = a.toBuffer("image/jpeg", i);
|
|
401
404
|
return new Uint8Array(c.buffer, c.byteOffset, c.byteLength);
|
|
402
405
|
}
|
|
403
|
-
function
|
|
406
|
+
function le(e, n, r, i, a) {
|
|
404
407
|
let o = t(n, r), s = o.getContext("2d"), c = s.createImageData(n, r);
|
|
405
408
|
c.data.set(e), s.putImageData(c, 0, 0);
|
|
406
409
|
let l = t(i, a).getContext("2d");
|
|
@@ -410,7 +413,7 @@ function ae(e, n, r, i, a) {
|
|
|
410
413
|
}
|
|
411
414
|
//#endregion
|
|
412
415
|
//#region src/sanitise-svg.ts
|
|
413
|
-
function
|
|
416
|
+
function ue(e) {
|
|
414
417
|
if (!e || e.trim().length === 0) return "";
|
|
415
418
|
let t = new i(), n;
|
|
416
419
|
try {
|
|
@@ -426,7 +429,7 @@ function oe(e) {
|
|
|
426
429
|
if (!t || t.nodeType !== 1) continue;
|
|
427
430
|
let n = t, i = n.localName ?? n.tagName ?? "";
|
|
428
431
|
if (i === "defs") {
|
|
429
|
-
let e =
|
|
432
|
+
let e = de(n);
|
|
430
433
|
e !== null && (s += o.serializeToString(e));
|
|
431
434
|
continue;
|
|
432
435
|
}
|
|
@@ -443,7 +446,7 @@ function oe(e) {
|
|
|
443
446
|
}
|
|
444
447
|
return s;
|
|
445
448
|
}
|
|
446
|
-
function
|
|
449
|
+
function de(e) {
|
|
447
450
|
let t = e.cloneNode(!0);
|
|
448
451
|
for (let e = t.childNodes.length - 1; e >= 0; e--) {
|
|
449
452
|
let n = t.childNodes.item(e);
|
|
@@ -455,7 +458,7 @@ function se(e) {
|
|
|
455
458
|
}
|
|
456
459
|
//#endregion
|
|
457
460
|
//#region src/annotator.ts
|
|
458
|
-
function
|
|
461
|
+
function fe(t = {}) {
|
|
459
462
|
let n = {
|
|
460
463
|
loadSystemFonts: t.loadSystemFonts ?? !1,
|
|
461
464
|
...t.fontFiles ? { fontFiles: t.fontFiles } : {},
|
|
@@ -463,7 +466,7 @@ function V(t = {}) {
|
|
|
463
466
|
...t.defaultFontFamily ? { defaultFontFamily: t.defaultFontFamily } : {}
|
|
464
467
|
};
|
|
465
468
|
function r(t) {
|
|
466
|
-
let r = new e(
|
|
469
|
+
let r = new e(R(t), {
|
|
467
470
|
fitTo: {
|
|
468
471
|
mode: "width",
|
|
469
472
|
value: t.width
|
|
@@ -479,10 +482,10 @@ function V(t = {}) {
|
|
|
479
482
|
}
|
|
480
483
|
return {
|
|
481
484
|
toSvg(e) {
|
|
482
|
-
return
|
|
485
|
+
return R(e);
|
|
483
486
|
},
|
|
484
487
|
toPng(t) {
|
|
485
|
-
return new e(
|
|
488
|
+
return new e(R(t), {
|
|
486
489
|
fitTo: {
|
|
487
490
|
mode: "width",
|
|
488
491
|
value: t.width
|
|
@@ -492,8 +495,8 @@ function V(t = {}) {
|
|
|
492
495
|
}).render().asPng();
|
|
493
496
|
},
|
|
494
497
|
toEditablePng(t) {
|
|
495
|
-
return
|
|
496
|
-
renderedPng: new e(
|
|
498
|
+
return C({
|
|
499
|
+
renderedPng: new e(R(t), {
|
|
497
500
|
fitTo: {
|
|
498
501
|
mode: "width",
|
|
499
502
|
value: t.width
|
|
@@ -505,22 +508,212 @@ function V(t = {}) {
|
|
|
505
508
|
annotationsSvg: t.annotationsSvg,
|
|
506
509
|
width: t.width,
|
|
507
510
|
height: t.height,
|
|
508
|
-
tags: t.tags
|
|
511
|
+
tags: t.tags,
|
|
512
|
+
sourceUrl: t.sourceUrl,
|
|
513
|
+
createdAt: t.createdAt,
|
|
514
|
+
producer: t.producer || "annotator",
|
|
515
|
+
dpr: t.dpr
|
|
509
516
|
});
|
|
510
517
|
},
|
|
511
518
|
async toEncoded(e, t) {
|
|
512
519
|
let { pixels: n, width: i, height: a } = r(e);
|
|
513
|
-
return
|
|
520
|
+
return F(n, i, a, t);
|
|
514
521
|
}
|
|
515
522
|
};
|
|
516
523
|
}
|
|
517
|
-
function
|
|
518
|
-
let t =
|
|
524
|
+
function R(e) {
|
|
525
|
+
let t = ue(e.annotationsSvg);
|
|
519
526
|
return `<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" ${o}="1" width="${e.width}" height="${e.height}" viewBox="0 0 ${e.width} ${e.height}"><image href="${e.originalDataUrl}" width="${e.width}" height="${e.height}"/>` + t + "</svg>";
|
|
520
527
|
}
|
|
521
528
|
//#endregion
|
|
529
|
+
//#region src/redact-burn.ts
|
|
530
|
+
var pe = "solid", me = "#000000", z = 16, he = 12;
|
|
531
|
+
async function B(e, r) {
|
|
532
|
+
if (r.length === 0) return e;
|
|
533
|
+
let i = await n(Buffer.from(e)), a = t(i.width, i.height), o = a.getContext("2d");
|
|
534
|
+
o.drawImage(i, 0, 0);
|
|
535
|
+
for (let e of r) if (!(e.bbox.width <= 0 || e.bbox.height <= 0)) switch (e.style ?? pe) {
|
|
536
|
+
case "solid":
|
|
537
|
+
ge(o, e.bbox, e.color ?? me);
|
|
538
|
+
break;
|
|
539
|
+
case "mosaic":
|
|
540
|
+
_e(o, i, e.bbox);
|
|
541
|
+
break;
|
|
542
|
+
case "blur":
|
|
543
|
+
ve(o, i, e.bbox);
|
|
544
|
+
break;
|
|
545
|
+
}
|
|
546
|
+
let s = a.toBuffer("image/png");
|
|
547
|
+
return new Uint8Array(s.buffer, s.byteOffset, s.byteLength);
|
|
548
|
+
}
|
|
549
|
+
function ge(e, t, n) {
|
|
550
|
+
e.save(), e.fillStyle = n, e.fillRect(t.x, t.y, t.width, t.height), e.restore();
|
|
551
|
+
}
|
|
552
|
+
function _e(e, n, r) {
|
|
553
|
+
let i = Math.max(1, Math.round(r.width / z)), a = Math.max(1, Math.round(r.height / z)), o = t(i, a), s = o.getContext("2d");
|
|
554
|
+
s.imageSmoothingEnabled = !1, s.drawImage(n, r.x, r.y, r.width, r.height, 0, 0, i, a), e.save(), e.imageSmoothingEnabled = !1, e.drawImage(o, 0, 0, i, a, r.x, r.y, r.width, r.height), e.restore();
|
|
555
|
+
}
|
|
556
|
+
function ve(e, t, n) {
|
|
557
|
+
e.save(), e.beginPath(), e.rect(n.x, n.y, n.width, n.height), e.clip(), e.filter = `blur(${he}px)`, e.drawImage(t, 0, 0), e.restore();
|
|
558
|
+
}
|
|
559
|
+
var ye = B;
|
|
560
|
+
//#endregion
|
|
561
|
+
//#region ../../node_modules/.pnpm/pixelmatch@7.2.0/node_modules/pixelmatch/index.js
|
|
562
|
+
function be(e, t, n, r, i, a = {}) {
|
|
563
|
+
let { threshold: o = .1, alpha: s = .1, aaColor: c = [
|
|
564
|
+
255,
|
|
565
|
+
255,
|
|
566
|
+
0
|
|
567
|
+
], diffColor: l = [
|
|
568
|
+
255,
|
|
569
|
+
0,
|
|
570
|
+
0
|
|
571
|
+
], checkerboard: u = !0, includeAA: d, diffColorAlt: f, diffMask: p } = a;
|
|
572
|
+
if (!V(e) || !V(t) || n && !V(n)) throw Error("Image data: Uint8Array, Uint8ClampedArray or Buffer expected.");
|
|
573
|
+
if (e.length !== t.length || n && n.length !== e.length) throw Error(`Image sizes do not match. Image 1 size: ${e.length}, image 2 size: ${t.length}`);
|
|
574
|
+
if (e.length !== r * i * 4) throw Error(`Image data size does not match width/height. Expecting ${r * i * 4}. Got ${e.length}`);
|
|
575
|
+
let m = r * i, h = new Uint32Array(e.buffer, e.byteOffset, m), g = new Uint32Array(t.buffer, t.byteOffset, m), _ = !0;
|
|
576
|
+
for (let e = 0; e < m; e++) if (h[e] !== g[e]) {
|
|
577
|
+
_ = !1;
|
|
578
|
+
break;
|
|
579
|
+
}
|
|
580
|
+
if (_) {
|
|
581
|
+
if (n && !p) for (let t = 0, r = 0; t < m; t++, r += 4) G(e, r, s, n);
|
|
582
|
+
return 0;
|
|
583
|
+
}
|
|
584
|
+
let v = 35215 * o * o, [y, b, x] = c, [S, C, w] = l, [T, E, D] = f || l, O = 0;
|
|
585
|
+
for (let a = 0, o = 0; a < m; a++, o += 4) {
|
|
586
|
+
let c = h[a] === g[a] ? 0 : xe(e, t, o, o, u);
|
|
587
|
+
if (Math.abs(c) > v) {
|
|
588
|
+
let s = a % r, l = a / r | 0;
|
|
589
|
+
!d && (H(e, s, l, r, i, h, g, u) || H(t, s, l, r, i, g, h, u)) ? n && !p && W(n, o, y, b, x) : (n && (c < 0 ? W(n, o, T, E, D) : W(n, o, S, C, w)), O++);
|
|
590
|
+
} else n && !p && G(e, o, s, n);
|
|
591
|
+
}
|
|
592
|
+
return O;
|
|
593
|
+
}
|
|
594
|
+
function V(e) {
|
|
595
|
+
return ArrayBuffer.isView(e) && e.BYTES_PER_ELEMENT === 1;
|
|
596
|
+
}
|
|
597
|
+
function H(e, t, n, r, i, a, o, s) {
|
|
598
|
+
let c = Math.max(t - 1, 0), l = Math.max(n - 1, 0), u = Math.min(t + 1, r - 1), d = Math.min(n + 1, i - 1), f = (n * r + t) * 4, p = e[f], m = e[f + 1], h = e[f + 2], g = e[f + 3], _ = +(t === c || t === u || n === l || n === d), v = 0, y = 0, b = 0, x = 0, S = 0, C = 0;
|
|
599
|
+
for (let i = c; i <= u; i++) for (let a = l; a <= d; a++) {
|
|
600
|
+
if (i === t && a === n) continue;
|
|
601
|
+
let o = Se(e, f, (a * r + i) * 4, p, m, h, g, s);
|
|
602
|
+
if (o === 0) {
|
|
603
|
+
if (_++, _ > 2) return !1;
|
|
604
|
+
} else o < v ? (v = o, b = i, x = a) : o > y && (y = o, S = i, C = a);
|
|
605
|
+
}
|
|
606
|
+
return v === 0 || y === 0 ? !1 : U(a, b, x, r, i) && U(o, b, x, r, i) || U(a, S, C, r, i) && U(o, S, C, r, i);
|
|
607
|
+
}
|
|
608
|
+
function U(e, t, n, r, i) {
|
|
609
|
+
let a = Math.max(t - 1, 0), o = Math.max(n - 1, 0), s = Math.min(t + 1, r - 1), c = Math.min(n + 1, i - 1), l = e[n * r + t], u = +(t === a || t === s || n === o || n === c);
|
|
610
|
+
for (let i = a; i <= s; i++) for (let a = o; a <= c; a++) if (!(i === t && a === n) && (u += +(l === e[a * r + i]), u > 2)) return !0;
|
|
611
|
+
return !1;
|
|
612
|
+
}
|
|
613
|
+
function xe(e, t, n, r, i) {
|
|
614
|
+
let a = e[n], o = e[n + 1], s = e[n + 2], c = e[n + 3], l = t[r], u = t[r + 1], d = t[r + 2], f = t[r + 3], p = a - l, m = o - u, h = s - d, g = c - f;
|
|
615
|
+
if (c < 255 || f < 255) {
|
|
616
|
+
let e = 255, t = 255, r = 255;
|
|
617
|
+
i && (e = 48 + n % 2 * 159, t = 48 + 159 * ((n / 1.618033988749895 | 0) % 2), r = 48 + 159 * ((n / 2.618033988749895 | 0) % 2)), p = (a * c - l * f - e * g) / 255, m = (o * c - u * f - t * g) / 255, h = (s * c - d * f - r * g) / 255;
|
|
618
|
+
}
|
|
619
|
+
let _ = p * .29889531 + m * .58662247 + h * .11448223, v = p * .59597799 - m * .2741761 - h * .32180189, y = p * .21147017 - m * .52261711 + h * .31114694, b = .5053 * _ * _ + .299 * v * v + .1957 * y * y;
|
|
620
|
+
return _ > 0 ? -b : b;
|
|
621
|
+
}
|
|
622
|
+
function Se(e, t, n, r, i, a, o, s) {
|
|
623
|
+
let c = e[n], l = e[n + 1], u = e[n + 2], d = e[n + 3], f = r - c, p = i - l, m = a - u, h = o - d;
|
|
624
|
+
if (!f && !p && !m && !h) return 0;
|
|
625
|
+
if (o < 255 || d < 255) {
|
|
626
|
+
let e = 255, n = 255, g = 255;
|
|
627
|
+
s && (e = 48 + t % 2 * 159, n = 48 + 159 * ((t / 1.618033988749895 | 0) % 2), g = 48 + 159 * ((t / 2.618033988749895 | 0) % 2)), f = (r * o - c * d - e * h) / 255, p = (i * o - l * d - n * h) / 255, m = (a * o - u * d - g * h) / 255;
|
|
628
|
+
}
|
|
629
|
+
return f * .29889531 + p * .58662247 + m * .11448223;
|
|
630
|
+
}
|
|
631
|
+
function W(e, t, n, r, i) {
|
|
632
|
+
e[t] = n, e[t + 1] = r, e[t + 2] = i, e[t + 3] = 255;
|
|
633
|
+
}
|
|
634
|
+
function G(e, t, n, r) {
|
|
635
|
+
let i = 255 + (e[t] * .29889531 + e[t + 1] * .58662247 + e[t + 2] * .11448223 - 255) * n * e[t + 3] / 255;
|
|
636
|
+
W(r, t, i, i, i);
|
|
637
|
+
}
|
|
638
|
+
//#endregion
|
|
639
|
+
//#region src/diff-aggregate.ts
|
|
640
|
+
var Ce = 4;
|
|
641
|
+
function K(e, t, n) {
|
|
642
|
+
let r = new Uint8Array(t * n), i = [];
|
|
643
|
+
for (let a = 0; a < n; a++) for (let o = 0; o < t; o++) {
|
|
644
|
+
let s = a * t + o;
|
|
645
|
+
if (r[s] || !we(e, s)) continue;
|
|
646
|
+
let c = Te(e, r, o, a, t, n);
|
|
647
|
+
c.count >= Ce && i.push({
|
|
648
|
+
x: c.minX,
|
|
649
|
+
y: c.minY,
|
|
650
|
+
width: c.maxX - c.minX + 1,
|
|
651
|
+
height: c.maxY - c.minY + 1
|
|
652
|
+
});
|
|
653
|
+
}
|
|
654
|
+
return i;
|
|
655
|
+
}
|
|
656
|
+
function we(e, t) {
|
|
657
|
+
return e[t * 4 + 3] > 0;
|
|
658
|
+
}
|
|
659
|
+
function Te(e, t, n, r, i, a) {
|
|
660
|
+
let o = {
|
|
661
|
+
count: 0,
|
|
662
|
+
minX: n,
|
|
663
|
+
minY: r,
|
|
664
|
+
maxX: n,
|
|
665
|
+
maxY: r
|
|
666
|
+
}, s = [n, r];
|
|
667
|
+
for (; s.length > 0;) {
|
|
668
|
+
let n = s.pop(), r = s.pop();
|
|
669
|
+
if (r < 0 || r >= i || n < 0 || n >= a) continue;
|
|
670
|
+
let c = n * i + r;
|
|
671
|
+
t[c] || we(e, c) && (t[c] = 1, o.count += 1, r < o.minX && (o.minX = r), n < o.minY && (o.minY = n), r > o.maxX && (o.maxX = r), n > o.maxY && (o.maxY = n), s.push(r + 1, n), s.push(r - 1, n), s.push(r, n + 1), s.push(r, n - 1));
|
|
672
|
+
}
|
|
673
|
+
return o;
|
|
674
|
+
}
|
|
675
|
+
//#endregion
|
|
676
|
+
//#region src/diff.ts
|
|
677
|
+
var Ee = class extends Error {
|
|
678
|
+
constructor(e, t) {
|
|
679
|
+
super(`Cannot compare screenshots of different dimensions: before is ${e.width}×${e.height}, after is ${t.width}×${t.height}.`), this.name = "DimensionMismatchError";
|
|
680
|
+
}
|
|
681
|
+
};
|
|
682
|
+
async function De(e, t, r = {}) {
|
|
683
|
+
let [i, a] = await Promise.all([n(Buffer.from(e)), n(Buffer.from(t))]);
|
|
684
|
+
if (i.width !== a.width || i.height !== a.height) throw new Ee({
|
|
685
|
+
width: i.width,
|
|
686
|
+
height: i.height
|
|
687
|
+
}, {
|
|
688
|
+
width: a.width,
|
|
689
|
+
height: a.height
|
|
690
|
+
});
|
|
691
|
+
let { width: o, height: s } = i, c = Oe(i, o, s), l = Oe(a, o, s), u = new Uint8Array(o * s * 4);
|
|
692
|
+
return {
|
|
693
|
+
mismatchedPixels: be(c, l, u, o, s, {
|
|
694
|
+
threshold: r.threshold ?? .1,
|
|
695
|
+
includeAA: !1,
|
|
696
|
+
diffMask: !0
|
|
697
|
+
}),
|
|
698
|
+
regions: K(u, o, s),
|
|
699
|
+
width: o,
|
|
700
|
+
height: s
|
|
701
|
+
};
|
|
702
|
+
}
|
|
703
|
+
function Oe(e, n, r) {
|
|
704
|
+
let i = t(n, r).getContext("2d");
|
|
705
|
+
i.drawImage(e, 0, 0);
|
|
706
|
+
let a = i.getImageData(0, 0, n, r).data;
|
|
707
|
+
return new Uint8Array(a.buffer, a.byteOffset, a.byteLength);
|
|
708
|
+
}
|
|
709
|
+
//#endregion
|
|
710
|
+
//#region src/flatten-editable-png.ts
|
|
711
|
+
function ke(e) {
|
|
712
|
+
return x(e);
|
|
713
|
+
}
|
|
714
|
+
//#endregion
|
|
522
715
|
//#region src/dsl/schema.ts
|
|
523
|
-
var
|
|
716
|
+
var Ae = {
|
|
524
717
|
BBox: {
|
|
525
718
|
type: "object",
|
|
526
719
|
required: [
|
|
@@ -576,7 +769,7 @@ var U = {
|
|
|
576
769
|
color: { type: "string" }
|
|
577
770
|
}
|
|
578
771
|
}
|
|
579
|
-
},
|
|
772
|
+
}, je = { oneOf: [
|
|
580
773
|
{
|
|
581
774
|
type: "object",
|
|
582
775
|
required: ["type", "bbox"],
|
|
@@ -731,6 +924,57 @@ var U = {
|
|
|
731
924
|
color: { type: "string" }
|
|
732
925
|
}
|
|
733
926
|
},
|
|
927
|
+
{
|
|
928
|
+
type: "object",
|
|
929
|
+
required: ["type", "path"],
|
|
930
|
+
additionalProperties: !1,
|
|
931
|
+
properties: {
|
|
932
|
+
type: { const: "freehand" },
|
|
933
|
+
path: {
|
|
934
|
+
type: "string",
|
|
935
|
+
minLength: 1
|
|
936
|
+
},
|
|
937
|
+
intent: { $ref: "#/$defs/Intent" },
|
|
938
|
+
stroke: { type: "string" },
|
|
939
|
+
strokeWidth: {
|
|
940
|
+
type: "number",
|
|
941
|
+
minimum: 0
|
|
942
|
+
},
|
|
943
|
+
fill: { type: "string" },
|
|
944
|
+
color: { type: "string" }
|
|
945
|
+
}
|
|
946
|
+
},
|
|
947
|
+
{
|
|
948
|
+
type: "object",
|
|
949
|
+
required: [
|
|
950
|
+
"type",
|
|
951
|
+
"cutout",
|
|
952
|
+
"imageWidth",
|
|
953
|
+
"imageHeight"
|
|
954
|
+
],
|
|
955
|
+
additionalProperties: !1,
|
|
956
|
+
properties: {
|
|
957
|
+
type: { const: "focusMask" },
|
|
958
|
+
cutout: { $ref: "#/$defs/BBox" },
|
|
959
|
+
imageWidth: {
|
|
960
|
+
type: "number",
|
|
961
|
+
minimum: 0
|
|
962
|
+
},
|
|
963
|
+
imageHeight: {
|
|
964
|
+
type: "number",
|
|
965
|
+
minimum: 0
|
|
966
|
+
},
|
|
967
|
+
dimColor: { type: "string" },
|
|
968
|
+
intent: { $ref: "#/$defs/Intent" },
|
|
969
|
+
stroke: { type: "string" },
|
|
970
|
+
strokeWidth: {
|
|
971
|
+
type: "number",
|
|
972
|
+
minimum: 0
|
|
973
|
+
},
|
|
974
|
+
fill: { type: "string" },
|
|
975
|
+
color: { type: "string" }
|
|
976
|
+
}
|
|
977
|
+
},
|
|
734
978
|
{
|
|
735
979
|
type: "object",
|
|
736
980
|
required: ["type", "svgFragment"],
|
|
@@ -740,7 +984,7 @@ var U = {
|
|
|
740
984
|
svgFragment: { type: "string" }
|
|
741
985
|
}
|
|
742
986
|
}
|
|
743
|
-
] },
|
|
987
|
+
] }, Me = {
|
|
744
988
|
type: "object",
|
|
745
989
|
required: ["bbox"],
|
|
746
990
|
additionalProperties: !1,
|
|
@@ -759,31 +1003,31 @@ var U = {
|
|
|
759
1003
|
};
|
|
760
1004
|
//#endregion
|
|
761
1005
|
//#region src/dsl/svg-primitives.ts
|
|
762
|
-
function
|
|
1006
|
+
function q(e, t = {}) {
|
|
763
1007
|
let n = t.stroke ?? "red", r = t.strokeWidth ?? 2, i = t.fill ?? "none";
|
|
764
|
-
return `<rect x="${e.x}" y="${e.y}" width="${e.width}" height="${e.height}" fill="${
|
|
765
|
-
}
|
|
766
|
-
function q(e, t, n = {}) {
|
|
767
|
-
let r = n.color ?? "red", i = n.strokeWidth ?? 2, a = `annot-arrow-${ce()}`;
|
|
768
|
-
return `<defs><marker id="${a}" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto" markerUnits="strokeWidth"><path d="M 0 0 L 10 5 L 0 10 z" fill="${X(r)}"/></marker></defs><line x1="${e.x}" y1="${e.y}" x2="${t.x}" y2="${t.y}" stroke="${X(r)}" stroke-width="${i}" marker-end="url(#${a})"/>`;
|
|
1008
|
+
return `<rect x="${e.x}" y="${e.y}" width="${e.width}" height="${e.height}" fill="${Z(i)}" stroke="${Z(n)}" stroke-width="${r}"/>`;
|
|
769
1009
|
}
|
|
770
1010
|
function J(e, t, n = {}) {
|
|
1011
|
+
let r = n.color ?? "red", i = n.strokeWidth ?? 2, a = `annot-arrow-${Ne()}`;
|
|
1012
|
+
return `<defs><marker id="${a}" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto" markerUnits="strokeWidth"><path d="M 0 0 L 10 5 L 0 10 z" fill="${Z(r)}"/></marker></defs><line x1="${e.x}" y1="${e.y}" x2="${t.x}" y2="${t.y}" stroke="${Z(r)}" stroke-width="${i}" marker-end="url(#${a})"/>`;
|
|
1013
|
+
}
|
|
1014
|
+
function Y(e, t, n = {}) {
|
|
771
1015
|
let r = n.color ?? "red", i = n.fontSize ?? 14, a = n.anchor ?? "start";
|
|
772
|
-
return `<text x="${e.x}" y="${e.y}" fill="${
|
|
1016
|
+
return `<text x="${e.x}" y="${e.y}" fill="${Z(r)}" font-size="${i}" text-anchor="${a}">` + Pe(t) + "</text>";
|
|
773
1017
|
}
|
|
774
|
-
var
|
|
775
|
-
function
|
|
776
|
-
return
|
|
1018
|
+
var X = 0;
|
|
1019
|
+
function Ne() {
|
|
1020
|
+
return X = X + 1 | 0, X;
|
|
777
1021
|
}
|
|
778
|
-
function
|
|
1022
|
+
function Z(e) {
|
|
779
1023
|
return e.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
780
1024
|
}
|
|
781
|
-
function
|
|
1025
|
+
function Pe(e) {
|
|
782
1026
|
return e.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
783
1027
|
}
|
|
784
1028
|
//#endregion
|
|
785
1029
|
//#region src/dsl/to-svg.ts
|
|
786
|
-
var
|
|
1030
|
+
var Fe = {
|
|
787
1031
|
info: {
|
|
788
1032
|
stroke: "#3b82f6",
|
|
789
1033
|
fill: "rgba(59, 130, 246, 0.12)",
|
|
@@ -809,84 +1053,95 @@ var ue = {
|
|
|
809
1053
|
fill: "rgba(107, 114, 128, 0.12)",
|
|
810
1054
|
text: "#374151"
|
|
811
1055
|
}
|
|
812
|
-
},
|
|
813
|
-
function
|
|
814
|
-
let t =
|
|
1056
|
+
}, Ie = "error";
|
|
1057
|
+
function Q(e) {
|
|
1058
|
+
let t = Fe[e.intent ?? Ie];
|
|
815
1059
|
return {
|
|
816
1060
|
stroke: e.stroke ?? t.stroke,
|
|
817
1061
|
fill: e.fill ?? "none",
|
|
818
1062
|
text: e.color ?? t.text
|
|
819
1063
|
};
|
|
820
1064
|
}
|
|
821
|
-
function
|
|
822
|
-
return e.map(
|
|
1065
|
+
function Le(e) {
|
|
1066
|
+
return e.map(Re).join("");
|
|
823
1067
|
}
|
|
824
|
-
function
|
|
1068
|
+
function Re(e) {
|
|
825
1069
|
switch (e.type) {
|
|
826
|
-
case "rect": return
|
|
827
|
-
case "circle": return
|
|
828
|
-
case "arrow": return
|
|
829
|
-
case "text": return
|
|
830
|
-
case "callout": return
|
|
831
|
-
case "numberedBadge": return
|
|
832
|
-
case "
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
1070
|
+
case "rect": return ze(e);
|
|
1071
|
+
case "circle": return Be(e);
|
|
1072
|
+
case "arrow": return Ve(e);
|
|
1073
|
+
case "text": return He(e);
|
|
1074
|
+
case "callout": return Ue(e);
|
|
1075
|
+
case "numberedBadge": return Ye(e);
|
|
1076
|
+
case "freehand": return Ge(e);
|
|
1077
|
+
case "focusMask": return qe(e);
|
|
1078
|
+
case "raw": return We(e);
|
|
1079
|
+
}
|
|
1080
|
+
}
|
|
1081
|
+
function ze(e) {
|
|
1082
|
+
let t = Q(e);
|
|
1083
|
+
return q(e.bbox, {
|
|
838
1084
|
stroke: t.stroke,
|
|
839
1085
|
strokeWidth: e.strokeWidth ?? 2,
|
|
840
1086
|
fill: t.fill
|
|
841
1087
|
});
|
|
842
1088
|
}
|
|
843
|
-
function
|
|
844
|
-
let t =
|
|
1089
|
+
function Be(e) {
|
|
1090
|
+
let t = Q(e), n = e.strokeWidth ?? 2;
|
|
845
1091
|
return `<circle cx="${e.center.x}" cy="${e.center.y}" r="${e.radius}" fill="${$(t.fill)}" stroke="${$(t.stroke)}" stroke-width="${n}"/>`;
|
|
846
1092
|
}
|
|
847
|
-
function
|
|
848
|
-
let t =
|
|
849
|
-
return
|
|
1093
|
+
function Ve(e) {
|
|
1094
|
+
let t = Q(e);
|
|
1095
|
+
return J(e.from, e.to, {
|
|
850
1096
|
color: t.stroke,
|
|
851
1097
|
strokeWidth: e.strokeWidth ?? 2
|
|
852
1098
|
});
|
|
853
1099
|
}
|
|
854
|
-
function
|
|
855
|
-
let t =
|
|
856
|
-
return
|
|
1100
|
+
function He(e) {
|
|
1101
|
+
let t = Q(e);
|
|
1102
|
+
return Y(e.at, e.content, {
|
|
857
1103
|
color: t.text,
|
|
858
1104
|
fontSize: e.fontSize ?? 14,
|
|
859
1105
|
anchor: e.anchor ?? "start"
|
|
860
1106
|
});
|
|
861
1107
|
}
|
|
862
|
-
function
|
|
863
|
-
let t =
|
|
864
|
-
return
|
|
1108
|
+
function Ue(e) {
|
|
1109
|
+
let t = Q(e), n = e.targetBbox, r = Qe(n, e.at);
|
|
1110
|
+
return q(n, {
|
|
865
1111
|
stroke: t.stroke,
|
|
866
1112
|
strokeWidth: e.strokeWidth ?? 2,
|
|
867
1113
|
fill: t.fill
|
|
868
|
-
}) +
|
|
1114
|
+
}) + J(e.at, r, {
|
|
869
1115
|
color: t.stroke,
|
|
870
1116
|
strokeWidth: 2
|
|
871
|
-
}) +
|
|
1117
|
+
}) + Y(e.at, e.content, {
|
|
872
1118
|
color: t.text,
|
|
873
1119
|
fontSize: 14,
|
|
874
1120
|
anchor: "start"
|
|
875
1121
|
});
|
|
876
1122
|
}
|
|
877
|
-
function
|
|
1123
|
+
function We(e) {
|
|
878
1124
|
return e.svgFragment;
|
|
879
1125
|
}
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
1126
|
+
function Ge(e) {
|
|
1127
|
+
let t = Q(e), n = e.fill ?? "none", r = e.strokeWidth ?? 2;
|
|
1128
|
+
return `<path d="${$(e.path)}" fill="${$(n)}" stroke="${$(t.stroke)}" stroke-width="${r}" stroke-linecap="round" stroke-linejoin="round"/>`;
|
|
1129
|
+
}
|
|
1130
|
+
var Ke = "rgba(0,0,0,0.5)";
|
|
1131
|
+
function qe(e) {
|
|
1132
|
+
let { cutout: t, imageWidth: n, imageHeight: r } = e, i = e.dimColor ?? Ke;
|
|
1133
|
+
return `<path d="${$(`M0,0 H${n} V${r} H0 Z M${t.x},${t.y} H${t.x + t.width} V${t.y + t.height} H${t.x} Z`)}" fill="${$(i)}" fill-rule="evenodd" stroke="none"/>`;
|
|
1134
|
+
}
|
|
1135
|
+
var Je = 40;
|
|
1136
|
+
function Ye(e) {
|
|
1137
|
+
let t = Q(e), n = e.badgeSize ?? Je, r = Xe(e, n), i = q(e.bbox, {
|
|
883
1138
|
stroke: t.stroke,
|
|
884
1139
|
strokeWidth: e.strokeWidth ?? 3,
|
|
885
1140
|
fill: e.fill ?? "none"
|
|
886
|
-
}), a =
|
|
1141
|
+
}), a = Ze(e.bbox, r), o = n / 2, s = `<circle cx="${a.x}" cy="${a.y}" r="${o}" fill="${t.stroke}" stroke="#ffffff" stroke-width="${Math.max(2, o * .12)}" />`, c = Math.round(o * 1.1), l = `<text x="${a.x}" y="${a.y}" font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif" font-size="${c}" font-weight="700" fill="#ffffff" text-anchor="middle" dominant-baseline="central">${$(String(e.number))}</text>`;
|
|
887
1142
|
return i + s + l;
|
|
888
1143
|
}
|
|
889
|
-
function
|
|
1144
|
+
function Xe(e, t) {
|
|
890
1145
|
if (e.placement && e.placement !== "auto") return e.placement;
|
|
891
1146
|
if (e.imageWidth === void 0 || e.imageHeight === void 0) return "topRight";
|
|
892
1147
|
let n = t / 2, r = [
|
|
@@ -917,7 +1172,7 @@ function Se(e, t) {
|
|
|
917
1172
|
}
|
|
918
1173
|
return i.kind;
|
|
919
1174
|
}
|
|
920
|
-
function
|
|
1175
|
+
function Ze(e, t) {
|
|
921
1176
|
switch (t) {
|
|
922
1177
|
case "topLeft": return {
|
|
923
1178
|
x: e.x,
|
|
@@ -937,17 +1192,17 @@ function Ce(e, t) {
|
|
|
937
1192
|
};
|
|
938
1193
|
}
|
|
939
1194
|
}
|
|
940
|
-
function
|
|
1195
|
+
function Qe(e, t) {
|
|
941
1196
|
return {
|
|
942
|
-
x:
|
|
943
|
-
y:
|
|
1197
|
+
x: $e(t.x, e.x, e.x + e.width),
|
|
1198
|
+
y: $e(t.y, e.y, e.y + e.height)
|
|
944
1199
|
};
|
|
945
1200
|
}
|
|
946
|
-
function
|
|
1201
|
+
function $e(e, t, n) {
|
|
947
1202
|
return Math.min(Math.max(e, t), n);
|
|
948
1203
|
}
|
|
949
1204
|
function $(e) {
|
|
950
1205
|
return e.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
951
1206
|
}
|
|
952
1207
|
//#endregion
|
|
953
|
-
export {
|
|
1208
|
+
export { je as BBOX_ANNOTATION_SCHEMA, Me as BBOX_REDACT_REGION_SCHEMA, E as DEFAULT_ENCODE_OPTIONS, Ee as DimensionMismatchError, T as SAVE_SIZE_LABEL, w as SAVE_SIZE_MAX_WIDTH, Ae as SHARED_DEFS, K as aggregateDiffRegions, J as arrowBetween, Le as bboxAnnotationsToSvg, B as burnRedactions, ye as burnRegions, D as computeResizeTarget, fe as createAnnotator, ce as decodeAndEncodeImage, De as diffScreenshots, F as encodeRgba, ke as flattenEditablePng, P as isPhotoHeavy, q as rectForBoundingBox, Y as textAt };
|