@chialab/pdfjs-lib 1.0.0-alpha.2 → 1.0.0-alpha.21

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.
Files changed (65) hide show
  1. package/README.md +15 -7
  2. package/dist/browser/NodeUtilsStabs-MUAXKISB.js +19 -0
  3. package/dist/browser/chunk-3ZTAZS2X.js +25 -0
  4. package/dist/browser/{chunk-DYHYQ33L.js → chunk-W3YEFTNG.js} +289 -75
  5. package/dist/browser/index.js +2788 -2149
  6. package/dist/browser/openjpeg-K2XBCFFN.js +9 -0
  7. package/dist/browser/qcms_bg-Q7BRLLZG.js +9 -0
  8. package/dist/browser/worker.js +7298 -6450
  9. package/dist/index.d.ts +3 -0
  10. package/dist/lib/AnnotationData.d.ts +8 -8
  11. package/dist/lib/AnnotationOperatorsList.d.ts +21 -0
  12. package/dist/lib/CanvasGraphics.d.ts +1 -0
  13. package/dist/lib/NodeCanvasFactory.d.ts +9 -0
  14. package/dist/lib/NodeFilterFactory.d.ts +10 -0
  15. package/dist/lib/NodeUtils.d.ts +24 -0
  16. package/dist/lib/Path2D.d.ts +1 -1
  17. package/dist/lib/StandardFontDataFactory.d.ts +2 -2
  18. package/dist/lib/Svg.d.ts +143 -0
  19. package/dist/lib/SvgCanvasContext.d.ts +31 -22
  20. package/dist/lib/TextLayer.d.ts +12 -5
  21. package/dist/lib/WasmFactory.d.ts +5 -0
  22. package/dist/lib/utils.d.ts +29 -3
  23. package/dist/node/NodeUtils-EDBNTTIR.js +20 -0
  24. package/dist/node/chunk-K6VD27AD.js +1640 -0
  25. package/dist/node/chunk-XMKSLA4K.js +1207 -0
  26. package/dist/node/chunk-ZKUTXCS2.js +801 -0
  27. package/dist/node/index.js +2586 -3213
  28. package/dist/node/openjpeg-B2WN24QZ.js +9 -0
  29. package/dist/node/qcms_bg-T4RSHPOQ.js +9 -0
  30. package/dist/node/worker.js +7307 -6457
  31. package/dist/pdf.js/src/display/annotation_layer.d.ts +1 -2
  32. package/dist/pdf.js/src/display/annotation_storage.d.ts +1 -8
  33. package/dist/pdf.js/src/display/api.d.ts +37 -71
  34. package/dist/pdf.js/src/display/api_utils.d.ts +13 -0
  35. package/dist/pdf.js/src/display/canvas.d.ts +21 -29
  36. package/dist/pdf.js/src/display/display_utils.d.ts +12 -1
  37. package/dist/pdf.js/src/display/draw_layer.d.ts +2 -2
  38. package/dist/pdf.js/src/display/editor/alt_text.d.ts +1 -1
  39. package/dist/pdf.js/src/display/editor/annotation_editor_layer.d.ts +5 -5
  40. package/dist/pdf.js/src/display/editor/color_picker.d.ts +1 -1
  41. package/dist/pdf.js/src/display/editor/draw.d.ts +7 -7
  42. package/dist/pdf.js/src/display/editor/drawers/freedraw.d.ts +3 -3
  43. package/dist/pdf.js/src/display/editor/drawers/signaturedraw.d.ts +13 -13
  44. package/dist/pdf.js/src/display/editor/editor.d.ts +30 -6
  45. package/dist/pdf.js/src/display/editor/freetext.d.ts +4 -7
  46. package/dist/pdf.js/src/display/editor/highlight.d.ts +6 -3
  47. package/dist/pdf.js/src/display/editor/ink.d.ts +1 -0
  48. package/dist/pdf.js/src/display/editor/signature.d.ts +3 -0
  49. package/dist/pdf.js/src/display/editor/stamp.d.ts +4 -3
  50. package/dist/pdf.js/src/display/editor/toolbar.d.ts +4 -2
  51. package/dist/pdf.js/src/display/editor/tools.d.ts +7 -9
  52. package/dist/pdf.js/src/display/metadata.d.ts +1 -2
  53. package/dist/pdf.js/src/display/optional_content_config.d.ts +1 -1
  54. package/dist/pdf.js/src/display/pattern_helper.d.ts +4 -2
  55. package/dist/pdf.js/src/display/pdf_objects.d.ts +40 -0
  56. package/dist/pdf.js/src/display/text_layer.d.ts +9 -9
  57. package/dist/pdf.js/src/display/touch_manager.d.ts +5 -1
  58. package/dist/pdf.js/src/display/worker_options.d.ts +2 -2
  59. package/dist/pdf.js/src/pdf.d.ts +4 -1
  60. package/dist/pdf.js/src/shared/scripting_utils.d.ts +2 -0
  61. package/dist/pdf.js/src/shared/util.d.ts +123 -100
  62. package/dist/pdf.js/web/text_accessibility.d.ts +1 -1
  63. package/package.json +7 -4
  64. package/dist/node/chunk-KTTVPO2G.js +0 -1775
  65. package/dist/pdf.js/src/display/node_utils.d.ts +0 -32
@@ -0,0 +1,1640 @@
1
+ import {
2
+ BaseException,
3
+ FeatureTest,
4
+ Util,
5
+ shadow,
6
+ stringToBytes,
7
+ unreachable,
8
+ updateUrlHash,
9
+ warn
10
+ } from "./chunk-XMKSLA4K.js";
11
+ import {
12
+ __privateAdd,
13
+ __privateGet,
14
+ __privateMethod,
15
+ __privateSet,
16
+ __privateWrapper,
17
+ __publicField
18
+ } from "./chunk-7MW5RQZ5.js";
19
+
20
+ // src/lib/NodeUtils.ts
21
+ import {
22
+ DOMMatrix as NodeDOMMatrix,
23
+ DOMPoint as NodeDOMPoint,
24
+ ImageData as NodeImageData,
25
+ Path2D as NodePath2D
26
+ } from "skia-canvas";
27
+
28
+ // src/pdf.js/src/display/display_utils.js
29
+ var SVG_NS = "http://www.w3.org/2000/svg";
30
+ var _PixelsPerInch = class _PixelsPerInch {
31
+ };
32
+ __publicField(_PixelsPerInch, "CSS", 96);
33
+ __publicField(_PixelsPerInch, "PDF", 72);
34
+ __publicField(_PixelsPerInch, "PDF_TO_CSS_UNITS", _PixelsPerInch.CSS / _PixelsPerInch.PDF);
35
+ var PixelsPerInch = _PixelsPerInch;
36
+ async function fetchData(url, type = "text") {
37
+ if (isValidFetchUrl(url, document.baseURI)) {
38
+ const response = await fetch(url);
39
+ if (!response.ok) {
40
+ throw new Error(response.statusText);
41
+ }
42
+ switch (type) {
43
+ case "arraybuffer":
44
+ return response.arrayBuffer();
45
+ case "blob":
46
+ return response.blob();
47
+ case "json":
48
+ return response.json();
49
+ }
50
+ return response.text();
51
+ }
52
+ return new Promise((resolve, reject) => {
53
+ const request = new XMLHttpRequest();
54
+ request.open(
55
+ "GET",
56
+ url,
57
+ /* async = */
58
+ true
59
+ );
60
+ request.responseType = type;
61
+ request.onreadystatechange = () => {
62
+ if (request.readyState !== XMLHttpRequest.DONE) {
63
+ return;
64
+ }
65
+ if (request.status === 200 || request.status === 0) {
66
+ switch (type) {
67
+ case "arraybuffer":
68
+ case "blob":
69
+ case "json":
70
+ resolve(request.response);
71
+ return;
72
+ }
73
+ resolve(request.responseText);
74
+ return;
75
+ }
76
+ reject(new Error(request.statusText));
77
+ };
78
+ request.send(null);
79
+ });
80
+ }
81
+ var PageViewport = class _PageViewport {
82
+ /**
83
+ * @param {PageViewportParameters}
84
+ */
85
+ constructor({
86
+ viewBox,
87
+ userUnit,
88
+ scale,
89
+ rotation,
90
+ offsetX = 0,
91
+ offsetY = 0,
92
+ dontFlip = false
93
+ }) {
94
+ this.viewBox = viewBox;
95
+ this.userUnit = userUnit;
96
+ this.scale = scale;
97
+ this.rotation = rotation;
98
+ this.offsetX = offsetX;
99
+ this.offsetY = offsetY;
100
+ scale *= userUnit;
101
+ const centerX = (viewBox[2] + viewBox[0]) / 2;
102
+ const centerY = (viewBox[3] + viewBox[1]) / 2;
103
+ let rotateA, rotateB, rotateC, rotateD;
104
+ rotation %= 360;
105
+ if (rotation < 0) {
106
+ rotation += 360;
107
+ }
108
+ switch (rotation) {
109
+ case 180:
110
+ rotateA = -1;
111
+ rotateB = 0;
112
+ rotateC = 0;
113
+ rotateD = 1;
114
+ break;
115
+ case 90:
116
+ rotateA = 0;
117
+ rotateB = 1;
118
+ rotateC = 1;
119
+ rotateD = 0;
120
+ break;
121
+ case 270:
122
+ rotateA = 0;
123
+ rotateB = -1;
124
+ rotateC = -1;
125
+ rotateD = 0;
126
+ break;
127
+ case 0:
128
+ rotateA = 1;
129
+ rotateB = 0;
130
+ rotateC = 0;
131
+ rotateD = -1;
132
+ break;
133
+ default:
134
+ throw new Error(
135
+ "PageViewport: Invalid rotation, must be a multiple of 90 degrees."
136
+ );
137
+ }
138
+ if (dontFlip) {
139
+ rotateC = -rotateC;
140
+ rotateD = -rotateD;
141
+ }
142
+ let offsetCanvasX, offsetCanvasY;
143
+ let width, height;
144
+ if (rotateA === 0) {
145
+ offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;
146
+ offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;
147
+ width = (viewBox[3] - viewBox[1]) * scale;
148
+ height = (viewBox[2] - viewBox[0]) * scale;
149
+ } else {
150
+ offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;
151
+ offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;
152
+ width = (viewBox[2] - viewBox[0]) * scale;
153
+ height = (viewBox[3] - viewBox[1]) * scale;
154
+ }
155
+ this.transform = [
156
+ rotateA * scale,
157
+ rotateB * scale,
158
+ rotateC * scale,
159
+ rotateD * scale,
160
+ offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY,
161
+ offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY
162
+ ];
163
+ this.width = width;
164
+ this.height = height;
165
+ }
166
+ /**
167
+ * The original, un-scaled, viewport dimensions.
168
+ * @type {Object}
169
+ */
170
+ get rawDims() {
171
+ const dims = this.viewBox;
172
+ return shadow(this, "rawDims", {
173
+ pageWidth: dims[2] - dims[0],
174
+ pageHeight: dims[3] - dims[1],
175
+ pageX: dims[0],
176
+ pageY: dims[1]
177
+ });
178
+ }
179
+ /**
180
+ * Clones viewport, with optional additional properties.
181
+ * @param {PageViewportCloneParameters} [params]
182
+ * @returns {PageViewport} Cloned viewport.
183
+ */
184
+ clone({
185
+ scale = this.scale,
186
+ rotation = this.rotation,
187
+ offsetX = this.offsetX,
188
+ offsetY = this.offsetY,
189
+ dontFlip = false
190
+ } = {}) {
191
+ return new _PageViewport({
192
+ viewBox: this.viewBox.slice(),
193
+ userUnit: this.userUnit,
194
+ scale,
195
+ rotation,
196
+ offsetX,
197
+ offsetY,
198
+ dontFlip
199
+ });
200
+ }
201
+ /**
202
+ * Converts PDF point to the viewport coordinates. For examples, useful for
203
+ * converting PDF location into canvas pixel coordinates.
204
+ * @param {number} x - The x-coordinate.
205
+ * @param {number} y - The y-coordinate.
206
+ * @returns {Array} Array containing `x`- and `y`-coordinates of the
207
+ * point in the viewport coordinate space.
208
+ * @see {@link convertToPdfPoint}
209
+ * @see {@link convertToViewportRectangle}
210
+ */
211
+ convertToViewportPoint(x, y) {
212
+ const p = [x, y];
213
+ Util.applyTransform(p, this.transform);
214
+ return p;
215
+ }
216
+ /**
217
+ * Converts PDF rectangle to the viewport coordinates.
218
+ * @param {Array} rect - The xMin, yMin, xMax and yMax coordinates.
219
+ * @returns {Array} Array containing corresponding coordinates of the
220
+ * rectangle in the viewport coordinate space.
221
+ * @see {@link convertToViewportPoint}
222
+ */
223
+ convertToViewportRectangle(rect) {
224
+ const topLeft = [rect[0], rect[1]];
225
+ Util.applyTransform(topLeft, this.transform);
226
+ const bottomRight = [rect[2], rect[3]];
227
+ Util.applyTransform(bottomRight, this.transform);
228
+ return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]];
229
+ }
230
+ /**
231
+ * Converts viewport coordinates to the PDF location. For examples, useful
232
+ * for converting canvas pixel location into PDF one.
233
+ * @param {number} x - The x-coordinate.
234
+ * @param {number} y - The y-coordinate.
235
+ * @returns {Array} Array containing `x`- and `y`-coordinates of the
236
+ * point in the PDF coordinate space.
237
+ * @see {@link convertToViewportPoint}
238
+ */
239
+ convertToPdfPoint(x, y) {
240
+ const p = [x, y];
241
+ Util.applyInverseTransform(p, this.transform);
242
+ return p;
243
+ }
244
+ };
245
+ var RenderingCancelledException = class extends BaseException {
246
+ constructor(msg, extraDelay = 0) {
247
+ super(msg, "RenderingCancelledException");
248
+ this.extraDelay = extraDelay;
249
+ }
250
+ };
251
+ function isDataScheme(url) {
252
+ const ii = url.length;
253
+ let i = 0;
254
+ while (i < ii && url[i].trim() === "") {
255
+ i++;
256
+ }
257
+ return url.substring(i, i + 5).toLowerCase() === "data:";
258
+ }
259
+ function isPdfFile(filename) {
260
+ return typeof filename === "string" && /\.pdf$/i.test(filename);
261
+ }
262
+ function getFilenameFromUrl(url) {
263
+ [url] = url.split(/[#?]/, 1);
264
+ return url.substring(url.lastIndexOf("/") + 1);
265
+ }
266
+ function getPdfFilenameFromUrl(url, defaultFilename = "document.pdf") {
267
+ if (typeof url !== "string") {
268
+ return defaultFilename;
269
+ }
270
+ if (isDataScheme(url)) {
271
+ warn('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.');
272
+ return defaultFilename;
273
+ }
274
+ const getURL = (urlString) => {
275
+ try {
276
+ return new URL(urlString);
277
+ } catch {
278
+ try {
279
+ return new URL(decodeURIComponent(urlString));
280
+ } catch {
281
+ try {
282
+ return new URL(urlString, "https://foo.bar");
283
+ } catch {
284
+ try {
285
+ return new URL(decodeURIComponent(urlString), "https://foo.bar");
286
+ } catch {
287
+ return null;
288
+ }
289
+ }
290
+ }
291
+ }
292
+ };
293
+ const newURL = getURL(url);
294
+ if (!newURL) {
295
+ return defaultFilename;
296
+ }
297
+ const decode = (name) => {
298
+ try {
299
+ let decoded = decodeURIComponent(name);
300
+ if (decoded.includes("/")) {
301
+ decoded = decoded.split("/").at(-1);
302
+ if (decoded.test(/^\.pdf$/i)) {
303
+ return decoded;
304
+ }
305
+ return name;
306
+ }
307
+ return decoded;
308
+ } catch {
309
+ return name;
310
+ }
311
+ };
312
+ const pdfRegex = /\.pdf$/i;
313
+ const filename = newURL.pathname.split("/").at(-1);
314
+ if (pdfRegex.test(filename)) {
315
+ return decode(filename);
316
+ }
317
+ if (newURL.searchParams.size > 0) {
318
+ const values = Array.from(newURL.searchParams.values()).reverse();
319
+ for (const value of values) {
320
+ if (pdfRegex.test(value)) {
321
+ return decode(value);
322
+ }
323
+ }
324
+ const keys = Array.from(newURL.searchParams.keys()).reverse();
325
+ for (const key of keys) {
326
+ if (pdfRegex.test(key)) {
327
+ return decode(key);
328
+ }
329
+ }
330
+ }
331
+ if (newURL.hash) {
332
+ const reFilename = /[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i;
333
+ const hashFilename = reFilename.exec(newURL.hash);
334
+ if (hashFilename) {
335
+ return decode(hashFilename[0]);
336
+ }
337
+ }
338
+ return defaultFilename;
339
+ }
340
+ var StatTimer = class {
341
+ constructor() {
342
+ __publicField(this, "started", /* @__PURE__ */ Object.create(null));
343
+ __publicField(this, "times", []);
344
+ }
345
+ time(name) {
346
+ if (name in this.started) {
347
+ warn(`Timer is already running for ${name}`);
348
+ }
349
+ this.started[name] = Date.now();
350
+ }
351
+ timeEnd(name) {
352
+ if (!(name in this.started)) {
353
+ warn(`Timer has not been started for ${name}`);
354
+ }
355
+ this.times.push({
356
+ name,
357
+ start: this.started[name],
358
+ end: Date.now()
359
+ });
360
+ delete this.started[name];
361
+ }
362
+ toString() {
363
+ const outBuf = [];
364
+ let longest = 0;
365
+ for (const { name } of this.times) {
366
+ longest = Math.max(name.length, longest);
367
+ }
368
+ for (const { name, start, end } of this.times) {
369
+ outBuf.push(`${name.padEnd(longest)} ${end - start}ms
370
+ `);
371
+ }
372
+ return outBuf.join("");
373
+ }
374
+ };
375
+ function isValidFetchUrl(url, baseUrl) {
376
+ if (false) {
377
+ throw new Error("Not implemented: isValidFetchUrl");
378
+ }
379
+ const res = baseUrl ? URL.parse(url, baseUrl) : URL.parse(url);
380
+ return res?.protocol === "http:" || res?.protocol === "https:";
381
+ }
382
+ function noContextMenu(e) {
383
+ e.preventDefault();
384
+ }
385
+ function stopEvent(e) {
386
+ e.preventDefault();
387
+ e.stopPropagation();
388
+ }
389
+ function deprecated(details) {
390
+ console.log("Deprecated API usage: " + details);
391
+ }
392
+ var _regex;
393
+ var PDFDateString = class {
394
+ /**
395
+ * Convert a PDF date string to a JavaScript `Date` object.
396
+ *
397
+ * The PDF date string format is described in section 7.9.4 of the official
398
+ * PDF 32000-1:2008 specification. However, in the PDF 1.7 reference (sixth
399
+ * edition) Adobe describes the same format including a trailing apostrophe.
400
+ * This syntax in incorrect, but Adobe Acrobat creates PDF files that contain
401
+ * them. We ignore all apostrophes as they are not necessary for date parsing.
402
+ *
403
+ * Moreover, Adobe Acrobat doesn't handle changing the date to universal time
404
+ * and doesn't use the user's time zone (effectively ignoring the HH' and mm'
405
+ * parts of the date string).
406
+ *
407
+ * @param {string} input
408
+ * @returns {Date|null}
409
+ */
410
+ static toDateObject(input) {
411
+ if (!input || typeof input !== "string") {
412
+ return null;
413
+ }
414
+ __privateGet(this, _regex) || __privateSet(this, _regex, new RegExp(
415
+ "^D:(\\d{4})(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?([Z|+|-])?(\\d{2})?'?(\\d{2})?'?"
416
+ // Trailing apostrophe (optional)
417
+ ));
418
+ const matches = __privateGet(this, _regex).exec(input);
419
+ if (!matches) {
420
+ return null;
421
+ }
422
+ const year = parseInt(matches[1], 10);
423
+ let month = parseInt(matches[2], 10);
424
+ month = month >= 1 && month <= 12 ? month - 1 : 0;
425
+ let day = parseInt(matches[3], 10);
426
+ day = day >= 1 && day <= 31 ? day : 1;
427
+ let hour = parseInt(matches[4], 10);
428
+ hour = hour >= 0 && hour <= 23 ? hour : 0;
429
+ let minute = parseInt(matches[5], 10);
430
+ minute = minute >= 0 && minute <= 59 ? minute : 0;
431
+ let second = parseInt(matches[6], 10);
432
+ second = second >= 0 && second <= 59 ? second : 0;
433
+ const universalTimeRelation = matches[7] || "Z";
434
+ let offsetHour = parseInt(matches[8], 10);
435
+ offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0;
436
+ let offsetMinute = parseInt(matches[9], 10) || 0;
437
+ offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0;
438
+ if (universalTimeRelation === "-") {
439
+ hour += offsetHour;
440
+ minute += offsetMinute;
441
+ } else if (universalTimeRelation === "+") {
442
+ hour -= offsetHour;
443
+ minute -= offsetMinute;
444
+ }
445
+ return new Date(Date.UTC(year, month, day, hour, minute, second));
446
+ }
447
+ };
448
+ _regex = new WeakMap();
449
+ __privateAdd(PDFDateString, _regex);
450
+ function getXfaPageViewport(xfaPage, { scale = 1, rotation = 0 }) {
451
+ const { width, height } = xfaPage.attributes.style;
452
+ const viewBox = [0, 0, parseInt(width), parseInt(height)];
453
+ return new PageViewport({
454
+ viewBox,
455
+ userUnit: 1,
456
+ scale,
457
+ rotation
458
+ });
459
+ }
460
+ function getRGB(color) {
461
+ if (color.startsWith("#")) {
462
+ const colorRGB = parseInt(color.slice(1), 16);
463
+ return [
464
+ (colorRGB & 16711680) >> 16,
465
+ (colorRGB & 65280) >> 8,
466
+ colorRGB & 255
467
+ ];
468
+ }
469
+ if (color.startsWith("rgb(")) {
470
+ return color.slice(
471
+ /* "rgb(".length */
472
+ 4,
473
+ -1
474
+ ).split(",").map((x) => parseInt(x));
475
+ }
476
+ if (color.startsWith("rgba(")) {
477
+ return color.slice(
478
+ /* "rgba(".length */
479
+ 5,
480
+ -1
481
+ ).split(",").map((x) => parseInt(x)).slice(0, 3);
482
+ }
483
+ warn(`Not a valid color format: "${color}"`);
484
+ return [0, 0, 0];
485
+ }
486
+ function getColorValues(colors) {
487
+ const span = document.createElement("span");
488
+ span.style.visibility = "hidden";
489
+ span.style.colorScheme = "only light";
490
+ document.body.append(span);
491
+ for (const name of colors.keys()) {
492
+ span.style.color = name;
493
+ const computedColor = window.getComputedStyle(span).color;
494
+ colors.set(name, getRGB(computedColor));
495
+ }
496
+ span.remove();
497
+ }
498
+ function getCurrentTransform(ctx) {
499
+ const { a, b, c, d, e, f } = ctx.getTransform();
500
+ return [a, b, c, d, e, f];
501
+ }
502
+ function getCurrentTransformInverse(ctx) {
503
+ const { a, b, c, d, e, f } = ctx.getTransform().invertSelf();
504
+ return [a, b, c, d, e, f];
505
+ }
506
+ function setLayerDimensions(div, viewport, mustFlip = false, mustRotate = true) {
507
+ if (viewport instanceof PageViewport) {
508
+ const { pageWidth, pageHeight } = viewport.rawDims;
509
+ const { style } = div;
510
+ const useRound = FeatureTest.isCSSRoundSupported;
511
+ const w = `var(--total-scale-factor) * ${pageWidth}px`, h = `var(--total-scale-factor) * ${pageHeight}px`;
512
+ const widthStr = useRound ? `round(down, ${w}, var(--scale-round-x))` : `calc(${w})`, heightStr = useRound ? `round(down, ${h}, var(--scale-round-y))` : `calc(${h})`;
513
+ if (!mustFlip || viewport.rotation % 180 === 0) {
514
+ style.width = widthStr;
515
+ style.height = heightStr;
516
+ } else {
517
+ style.width = heightStr;
518
+ style.height = widthStr;
519
+ }
520
+ }
521
+ if (mustRotate) {
522
+ div.setAttribute("data-main-rotation", viewport.rotation);
523
+ }
524
+ }
525
+ var OutputScale = class _OutputScale {
526
+ constructor() {
527
+ const { pixelRatio } = _OutputScale;
528
+ this.sx = pixelRatio;
529
+ this.sy = pixelRatio;
530
+ }
531
+ /**
532
+ * @type {boolean} Returns `true` when scaling is required, `false` otherwise.
533
+ */
534
+ get scaled() {
535
+ return this.sx !== 1 || this.sy !== 1;
536
+ }
537
+ /**
538
+ * @type {boolean} Returns `true` when scaling is symmetric,
539
+ * `false` otherwise.
540
+ */
541
+ get symmetric() {
542
+ return this.sx === this.sy;
543
+ }
544
+ /**
545
+ * @returns {boolean} Returns `true` if scaling was limited,
546
+ * `false` otherwise.
547
+ */
548
+ limitCanvas(width, height, maxPixels, maxDim, capAreaFactor = -1) {
549
+ let maxAreaScale = Infinity, maxWidthScale = Infinity, maxHeightScale = Infinity;
550
+ maxPixels = _OutputScale.capPixels(maxPixels, capAreaFactor);
551
+ if (maxPixels > 0) {
552
+ maxAreaScale = Math.sqrt(maxPixels / (width * height));
553
+ }
554
+ if (maxDim !== -1) {
555
+ maxWidthScale = maxDim / width;
556
+ maxHeightScale = maxDim / height;
557
+ }
558
+ const maxScale = Math.min(maxAreaScale, maxWidthScale, maxHeightScale);
559
+ if (this.sx > maxScale || this.sy > maxScale) {
560
+ this.sx = maxScale;
561
+ this.sy = maxScale;
562
+ return true;
563
+ }
564
+ return false;
565
+ }
566
+ static get pixelRatio() {
567
+ return globalThis.devicePixelRatio || 1;
568
+ }
569
+ static capPixels(maxPixels, capAreaFactor) {
570
+ if (capAreaFactor >= 0) {
571
+ const winPixels = Math.ceil(
572
+ (false ? window.innerWidth * window.innerHeight : window.screen.availWidth * window.screen.availHeight) * this.pixelRatio ** 2 * (1 + capAreaFactor / 100)
573
+ );
574
+ return maxPixels > 0 ? Math.min(maxPixels, winPixels) : winPixels;
575
+ }
576
+ return maxPixels;
577
+ }
578
+ };
579
+ var SupportedImageMimeTypes = [
580
+ "image/apng",
581
+ "image/avif",
582
+ "image/bmp",
583
+ "image/gif",
584
+ "image/jpeg",
585
+ "image/png",
586
+ "image/svg+xml",
587
+ "image/webp",
588
+ "image/x-icon"
589
+ ];
590
+
591
+ // src/pdf.js/src/display/cmap_reader_factory.js
592
+ var BaseCMapReaderFactory = class {
593
+ constructor({ baseUrl = null, isCompressed = true }) {
594
+ if (false) {
595
+ unreachable("Cannot initialize BaseCMapReaderFactory.");
596
+ }
597
+ this.baseUrl = baseUrl;
598
+ this.isCompressed = isCompressed;
599
+ }
600
+ async fetch({ name }) {
601
+ if (!this.baseUrl) {
602
+ throw new Error(
603
+ "Ensure that the `cMapUrl` and `cMapPacked` API parameters are provided."
604
+ );
605
+ }
606
+ if (!name) {
607
+ throw new Error("CMap name must be specified.");
608
+ }
609
+ const url = this.baseUrl + name + (this.isCompressed ? ".bcmap" : "");
610
+ return this._fetch(url).then((cMapData) => ({ cMapData, isCompressed: this.isCompressed })).catch((reason) => {
611
+ throw new Error(
612
+ `Unable to load ${this.isCompressed ? "binary " : ""}CMap at: ${url}`
613
+ );
614
+ });
615
+ }
616
+ /**
617
+ * @ignore
618
+ * @returns {Promise<Uint8Array>}
619
+ */
620
+ async _fetch(url) {
621
+ unreachable("Abstract method `_fetch` called.");
622
+ }
623
+ };
624
+ var DOMCMapReaderFactory = class extends BaseCMapReaderFactory {
625
+ /**
626
+ * @ignore
627
+ */
628
+ async _fetch(url) {
629
+ const data = await fetchData(
630
+ url,
631
+ /* type = */
632
+ this.isCompressed ? "arraybuffer" : "text"
633
+ );
634
+ return data instanceof ArrayBuffer ? new Uint8Array(data) : stringToBytes(data);
635
+ }
636
+ };
637
+
638
+ // src/pdf.js/src/display/standard_fontdata_factory.js
639
+ var BaseStandardFontDataFactory = class {
640
+ constructor({ baseUrl = null }) {
641
+ if (false) {
642
+ unreachable("Cannot initialize BaseStandardFontDataFactory.");
643
+ }
644
+ this.baseUrl = baseUrl;
645
+ }
646
+ async fetch({ filename }) {
647
+ if (!this.baseUrl) {
648
+ throw new Error(
649
+ "Ensure that the `standardFontDataUrl` API parameter is provided."
650
+ );
651
+ }
652
+ if (!filename) {
653
+ throw new Error("Font filename must be specified.");
654
+ }
655
+ const url = `${this.baseUrl}${filename}`;
656
+ return this._fetch(url).catch((reason) => {
657
+ throw new Error(`Unable to load font data at: ${url}`);
658
+ });
659
+ }
660
+ /**
661
+ * @ignore
662
+ * @returns {Promise<Uint8Array>}
663
+ */
664
+ async _fetch(url) {
665
+ unreachable("Abstract method `_fetch` called.");
666
+ }
667
+ };
668
+ var DOMStandardFontDataFactory = class extends BaseStandardFontDataFactory {
669
+ /**
670
+ * @ignore
671
+ */
672
+ async _fetch(url) {
673
+ const data = await fetchData(
674
+ url,
675
+ /* type = */
676
+ "arraybuffer"
677
+ );
678
+ return new Uint8Array(data);
679
+ }
680
+ };
681
+
682
+ // src/pdf.js/src/display/wasm_factory.js
683
+ var BaseWasmFactory = class {
684
+ constructor({ baseUrl = null }) {
685
+ if (false) {
686
+ unreachable("Cannot initialize BaseWasmFactory.");
687
+ }
688
+ this.baseUrl = baseUrl;
689
+ }
690
+ async fetch({ filename }) {
691
+ if (!this.baseUrl) {
692
+ throw new Error("Ensure that the `wasmUrl` API parameter is provided.");
693
+ }
694
+ if (!filename) {
695
+ throw new Error("Wasm filename must be specified.");
696
+ }
697
+ const url = `${this.baseUrl}${filename}`;
698
+ return this._fetch(url).catch((reason) => {
699
+ throw new Error(`Unable to load wasm data at: ${url}`);
700
+ });
701
+ }
702
+ /**
703
+ * @ignore
704
+ * @returns {Promise<Uint8Array>}
705
+ */
706
+ async _fetch(url) {
707
+ unreachable("Abstract method `_fetch` called.");
708
+ }
709
+ };
710
+ var DOMWasmFactory = class extends BaseWasmFactory {
711
+ /**
712
+ * @ignore
713
+ */
714
+ async _fetch(url) {
715
+ const data = await fetchData(
716
+ url,
717
+ /* type = */
718
+ "arraybuffer"
719
+ );
720
+ return new Uint8Array(data);
721
+ }
722
+ };
723
+
724
+ // src/lib/NodeCanvasFactory.ts
725
+ import { Canvas } from "skia-canvas";
726
+
727
+ // src/pdf.js/src/display/canvas_factory.js
728
+ var _enableHWA;
729
+ var BaseCanvasFactory = class {
730
+ constructor({ enableHWA = false }) {
731
+ __privateAdd(this, _enableHWA, false);
732
+ if (false) {
733
+ unreachable("Cannot initialize BaseCanvasFactory.");
734
+ }
735
+ __privateSet(this, _enableHWA, enableHWA);
736
+ }
737
+ create(width, height) {
738
+ if (width <= 0 || height <= 0) {
739
+ throw new Error("Invalid canvas size");
740
+ }
741
+ const canvas = this._createCanvas(width, height);
742
+ return {
743
+ canvas,
744
+ context: canvas.getContext("2d", {
745
+ willReadFrequently: !__privateGet(this, _enableHWA)
746
+ })
747
+ };
748
+ }
749
+ reset(canvasAndContext, width, height) {
750
+ if (!canvasAndContext.canvas) {
751
+ throw new Error("Canvas is not specified");
752
+ }
753
+ if (width <= 0 || height <= 0) {
754
+ throw new Error("Invalid canvas size");
755
+ }
756
+ canvasAndContext.canvas.width = width;
757
+ canvasAndContext.canvas.height = height;
758
+ }
759
+ destroy(canvasAndContext) {
760
+ if (!canvasAndContext.canvas) {
761
+ throw new Error("Canvas is not specified");
762
+ }
763
+ canvasAndContext.canvas.width = 0;
764
+ canvasAndContext.canvas.height = 0;
765
+ canvasAndContext.canvas = null;
766
+ canvasAndContext.context = null;
767
+ }
768
+ /**
769
+ * @ignore
770
+ */
771
+ _createCanvas(width, height) {
772
+ unreachable("Abstract method `_createCanvas` called.");
773
+ }
774
+ };
775
+ _enableHWA = new WeakMap();
776
+ var DOMCanvasFactory = class extends BaseCanvasFactory {
777
+ constructor({ ownerDocument = globalThis.document, enableHWA = false }) {
778
+ super({ enableHWA });
779
+ this._document = ownerDocument;
780
+ }
781
+ /**
782
+ * @ignore
783
+ */
784
+ _createCanvas(width, height) {
785
+ const canvas = this._document.createElement("canvas");
786
+ canvas.width = width;
787
+ canvas.height = height;
788
+ return canvas;
789
+ }
790
+ };
791
+
792
+ // src/pdf.js/src/display/filter_factory.js
793
+ var BaseFilterFactory = class {
794
+ constructor() {
795
+ if (false) {
796
+ unreachable("Cannot initialize BaseFilterFactory.");
797
+ }
798
+ }
799
+ addFilter(maps) {
800
+ return "none";
801
+ }
802
+ addHCMFilter(fgColor, bgColor) {
803
+ return "none";
804
+ }
805
+ addAlphaFilter(map) {
806
+ return "none";
807
+ }
808
+ addLuminosityFilter(map) {
809
+ return "none";
810
+ }
811
+ addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) {
812
+ return "none";
813
+ }
814
+ destroy(keepHCM = false) {
815
+ }
816
+ };
817
+ var _baseUrl, __cache, __defs, _docId, _document, __hcmCache, _id, _DOMFilterFactory_instances, cache_get, hcmCache_get, defs_get, createTables_fn, createUrl_fn, addLuminosityConversion_fn, addGrayConversion_fn, createFilter_fn, appendFeFunc_fn, addTransferMapConversion_fn, addTransferMapAlphaConversion_fn, getRGB_fn;
818
+ var DOMFilterFactory = class extends BaseFilterFactory {
819
+ constructor({ docId, ownerDocument = globalThis.document }) {
820
+ super();
821
+ __privateAdd(this, _DOMFilterFactory_instances);
822
+ __privateAdd(this, _baseUrl);
823
+ __privateAdd(this, __cache);
824
+ __privateAdd(this, __defs);
825
+ __privateAdd(this, _docId);
826
+ __privateAdd(this, _document);
827
+ __privateAdd(this, __hcmCache);
828
+ __privateAdd(this, _id, 0);
829
+ __privateSet(this, _docId, docId);
830
+ __privateSet(this, _document, ownerDocument);
831
+ }
832
+ addFilter(maps) {
833
+ if (!maps) {
834
+ return "none";
835
+ }
836
+ let value = __privateGet(this, _DOMFilterFactory_instances, cache_get).get(maps);
837
+ if (value) {
838
+ return value;
839
+ }
840
+ const [tableR, tableG, tableB] = __privateMethod(this, _DOMFilterFactory_instances, createTables_fn).call(this, maps);
841
+ const key = maps.length === 1 ? tableR : `${tableR}${tableG}${tableB}`;
842
+ value = __privateGet(this, _DOMFilterFactory_instances, cache_get).get(key);
843
+ if (value) {
844
+ __privateGet(this, _DOMFilterFactory_instances, cache_get).set(maps, value);
845
+ return value;
846
+ }
847
+ const id = `g_${__privateGet(this, _docId)}_transfer_map_${__privateWrapper(this, _id)._++}`;
848
+ const url = __privateMethod(this, _DOMFilterFactory_instances, createUrl_fn).call(this, id);
849
+ __privateGet(this, _DOMFilterFactory_instances, cache_get).set(maps, url);
850
+ __privateGet(this, _DOMFilterFactory_instances, cache_get).set(key, url);
851
+ const filter = __privateMethod(this, _DOMFilterFactory_instances, createFilter_fn).call(this, id);
852
+ __privateMethod(this, _DOMFilterFactory_instances, addTransferMapConversion_fn).call(this, tableR, tableG, tableB, filter);
853
+ return url;
854
+ }
855
+ addHCMFilter(fgColor, bgColor) {
856
+ const key = `${fgColor}-${bgColor}`;
857
+ const filterName = "base";
858
+ let info = __privateGet(this, _DOMFilterFactory_instances, hcmCache_get).get(filterName);
859
+ if (info?.key === key) {
860
+ return info.url;
861
+ }
862
+ if (info) {
863
+ info.filter?.remove();
864
+ info.key = key;
865
+ info.url = "none";
866
+ info.filter = null;
867
+ } else {
868
+ info = {
869
+ key,
870
+ url: "none",
871
+ filter: null
872
+ };
873
+ __privateGet(this, _DOMFilterFactory_instances, hcmCache_get).set(filterName, info);
874
+ }
875
+ if (!fgColor || !bgColor) {
876
+ return info.url;
877
+ }
878
+ const fgRGB = __privateMethod(this, _DOMFilterFactory_instances, getRGB_fn).call(this, fgColor);
879
+ fgColor = Util.makeHexColor(...fgRGB);
880
+ const bgRGB = __privateMethod(this, _DOMFilterFactory_instances, getRGB_fn).call(this, bgColor);
881
+ bgColor = Util.makeHexColor(...bgRGB);
882
+ __privateGet(this, _DOMFilterFactory_instances, defs_get).style.color = "";
883
+ if (fgColor === "#000000" && bgColor === "#ffffff" || fgColor === bgColor) {
884
+ return info.url;
885
+ }
886
+ const map = new Array(256);
887
+ for (let i = 0; i <= 255; i++) {
888
+ const x = i / 255;
889
+ map[i] = x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4;
890
+ }
891
+ const table = map.join(",");
892
+ const id = `g_${__privateGet(this, _docId)}_hcm_filter`;
893
+ const filter = info.filter = __privateMethod(this, _DOMFilterFactory_instances, createFilter_fn).call(this, id);
894
+ __privateMethod(this, _DOMFilterFactory_instances, addTransferMapConversion_fn).call(this, table, table, table, filter);
895
+ __privateMethod(this, _DOMFilterFactory_instances, addGrayConversion_fn).call(this, filter);
896
+ const getSteps = (c, n) => {
897
+ const start = fgRGB[c] / 255;
898
+ const end = bgRGB[c] / 255;
899
+ const arr = new Array(n + 1);
900
+ for (let i = 0; i <= n; i++) {
901
+ arr[i] = start + i / n * (end - start);
902
+ }
903
+ return arr.join(",");
904
+ };
905
+ __privateMethod(this, _DOMFilterFactory_instances, addTransferMapConversion_fn).call(this, getSteps(0, 5), getSteps(1, 5), getSteps(2, 5), filter);
906
+ info.url = __privateMethod(this, _DOMFilterFactory_instances, createUrl_fn).call(this, id);
907
+ return info.url;
908
+ }
909
+ addAlphaFilter(map) {
910
+ let value = __privateGet(this, _DOMFilterFactory_instances, cache_get).get(map);
911
+ if (value) {
912
+ return value;
913
+ }
914
+ const [tableA] = __privateMethod(this, _DOMFilterFactory_instances, createTables_fn).call(this, [map]);
915
+ const key = `alpha_${tableA}`;
916
+ value = __privateGet(this, _DOMFilterFactory_instances, cache_get).get(key);
917
+ if (value) {
918
+ __privateGet(this, _DOMFilterFactory_instances, cache_get).set(map, value);
919
+ return value;
920
+ }
921
+ const id = `g_${__privateGet(this, _docId)}_alpha_map_${__privateWrapper(this, _id)._++}`;
922
+ const url = __privateMethod(this, _DOMFilterFactory_instances, createUrl_fn).call(this, id);
923
+ __privateGet(this, _DOMFilterFactory_instances, cache_get).set(map, url);
924
+ __privateGet(this, _DOMFilterFactory_instances, cache_get).set(key, url);
925
+ const filter = __privateMethod(this, _DOMFilterFactory_instances, createFilter_fn).call(this, id);
926
+ __privateMethod(this, _DOMFilterFactory_instances, addTransferMapAlphaConversion_fn).call(this, tableA, filter);
927
+ return url;
928
+ }
929
+ addLuminosityFilter(map) {
930
+ let value = __privateGet(this, _DOMFilterFactory_instances, cache_get).get(map || "luminosity");
931
+ if (value) {
932
+ return value;
933
+ }
934
+ let tableA, key;
935
+ if (map) {
936
+ [tableA] = __privateMethod(this, _DOMFilterFactory_instances, createTables_fn).call(this, [map]);
937
+ key = `luminosity_${tableA}`;
938
+ } else {
939
+ key = "luminosity";
940
+ }
941
+ value = __privateGet(this, _DOMFilterFactory_instances, cache_get).get(key);
942
+ if (value) {
943
+ __privateGet(this, _DOMFilterFactory_instances, cache_get).set(map, value);
944
+ return value;
945
+ }
946
+ const id = `g_${__privateGet(this, _docId)}_luminosity_map_${__privateWrapper(this, _id)._++}`;
947
+ const url = __privateMethod(this, _DOMFilterFactory_instances, createUrl_fn).call(this, id);
948
+ __privateGet(this, _DOMFilterFactory_instances, cache_get).set(map, url);
949
+ __privateGet(this, _DOMFilterFactory_instances, cache_get).set(key, url);
950
+ const filter = __privateMethod(this, _DOMFilterFactory_instances, createFilter_fn).call(this, id);
951
+ __privateMethod(this, _DOMFilterFactory_instances, addLuminosityConversion_fn).call(this, filter);
952
+ if (map) {
953
+ __privateMethod(this, _DOMFilterFactory_instances, addTransferMapAlphaConversion_fn).call(this, tableA, filter);
954
+ }
955
+ return url;
956
+ }
957
+ addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) {
958
+ const key = `${fgColor}-${bgColor}-${newFgColor}-${newBgColor}`;
959
+ let info = __privateGet(this, _DOMFilterFactory_instances, hcmCache_get).get(filterName);
960
+ if (info?.key === key) {
961
+ return info.url;
962
+ }
963
+ if (info) {
964
+ info.filter?.remove();
965
+ info.key = key;
966
+ info.url = "none";
967
+ info.filter = null;
968
+ } else {
969
+ info = {
970
+ key,
971
+ url: "none",
972
+ filter: null
973
+ };
974
+ __privateGet(this, _DOMFilterFactory_instances, hcmCache_get).set(filterName, info);
975
+ }
976
+ if (!fgColor || !bgColor) {
977
+ return info.url;
978
+ }
979
+ const [fgRGB, bgRGB] = [fgColor, bgColor].map(__privateMethod(this, _DOMFilterFactory_instances, getRGB_fn).bind(this));
980
+ let fgGray = Math.round(
981
+ 0.2126 * fgRGB[0] + 0.7152 * fgRGB[1] + 0.0722 * fgRGB[2]
982
+ );
983
+ let bgGray = Math.round(
984
+ 0.2126 * bgRGB[0] + 0.7152 * bgRGB[1] + 0.0722 * bgRGB[2]
985
+ );
986
+ let [newFgRGB, newBgRGB] = [newFgColor, newBgColor].map(
987
+ __privateMethod(this, _DOMFilterFactory_instances, getRGB_fn).bind(this)
988
+ );
989
+ if (bgGray < fgGray) {
990
+ [fgGray, bgGray, newFgRGB, newBgRGB] = [
991
+ bgGray,
992
+ fgGray,
993
+ newBgRGB,
994
+ newFgRGB
995
+ ];
996
+ }
997
+ __privateGet(this, _DOMFilterFactory_instances, defs_get).style.color = "";
998
+ const getSteps = (fg, bg, n) => {
999
+ const arr = new Array(256);
1000
+ const step = (bgGray - fgGray) / n;
1001
+ const newStart = fg / 255;
1002
+ const newStep = (bg - fg) / (255 * n);
1003
+ let prev = 0;
1004
+ for (let i = 0; i <= n; i++) {
1005
+ const k = Math.round(fgGray + i * step);
1006
+ const value = newStart + i * newStep;
1007
+ for (let j = prev; j <= k; j++) {
1008
+ arr[j] = value;
1009
+ }
1010
+ prev = k + 1;
1011
+ }
1012
+ for (let i = prev; i < 256; i++) {
1013
+ arr[i] = arr[prev - 1];
1014
+ }
1015
+ return arr.join(",");
1016
+ };
1017
+ const id = `g_${__privateGet(this, _docId)}_hcm_${filterName}_filter`;
1018
+ const filter = info.filter = __privateMethod(this, _DOMFilterFactory_instances, createFilter_fn).call(this, id);
1019
+ __privateMethod(this, _DOMFilterFactory_instances, addGrayConversion_fn).call(this, filter);
1020
+ __privateMethod(this, _DOMFilterFactory_instances, addTransferMapConversion_fn).call(this, getSteps(newFgRGB[0], newBgRGB[0], 5), getSteps(newFgRGB[1], newBgRGB[1], 5), getSteps(newFgRGB[2], newBgRGB[2], 5), filter);
1021
+ info.url = __privateMethod(this, _DOMFilterFactory_instances, createUrl_fn).call(this, id);
1022
+ return info.url;
1023
+ }
1024
+ destroy(keepHCM = false) {
1025
+ if (keepHCM && __privateGet(this, __hcmCache)?.size) {
1026
+ return;
1027
+ }
1028
+ __privateGet(this, __defs)?.parentNode.parentNode.remove();
1029
+ __privateSet(this, __defs, null);
1030
+ __privateGet(this, __cache)?.clear();
1031
+ __privateSet(this, __cache, null);
1032
+ __privateGet(this, __hcmCache)?.clear();
1033
+ __privateSet(this, __hcmCache, null);
1034
+ __privateSet(this, _id, 0);
1035
+ }
1036
+ };
1037
+ _baseUrl = new WeakMap();
1038
+ __cache = new WeakMap();
1039
+ __defs = new WeakMap();
1040
+ _docId = new WeakMap();
1041
+ _document = new WeakMap();
1042
+ __hcmCache = new WeakMap();
1043
+ _id = new WeakMap();
1044
+ _DOMFilterFactory_instances = new WeakSet();
1045
+ cache_get = function() {
1046
+ return __privateGet(this, __cache) || __privateSet(this, __cache, /* @__PURE__ */ new Map());
1047
+ };
1048
+ hcmCache_get = function() {
1049
+ return __privateGet(this, __hcmCache) || __privateSet(this, __hcmCache, /* @__PURE__ */ new Map());
1050
+ };
1051
+ defs_get = function() {
1052
+ if (!__privateGet(this, __defs)) {
1053
+ const div = __privateGet(this, _document).createElement("div");
1054
+ const { style } = div;
1055
+ style.visibility = "hidden";
1056
+ style.contain = "strict";
1057
+ style.width = style.height = 0;
1058
+ style.position = "absolute";
1059
+ style.top = style.left = 0;
1060
+ style.zIndex = -1;
1061
+ const svg = __privateGet(this, _document).createElementNS(SVG_NS, "svg");
1062
+ svg.setAttribute("width", 0);
1063
+ svg.setAttribute("height", 0);
1064
+ __privateSet(this, __defs, __privateGet(this, _document).createElementNS(SVG_NS, "defs"));
1065
+ div.append(svg);
1066
+ svg.append(__privateGet(this, __defs));
1067
+ __privateGet(this, _document).body.append(div);
1068
+ }
1069
+ return __privateGet(this, __defs);
1070
+ };
1071
+ createTables_fn = function(maps) {
1072
+ if (maps.length === 1) {
1073
+ const mapR2 = maps[0];
1074
+ const buffer = new Array(256);
1075
+ for (let i = 0; i < 256; i++) {
1076
+ buffer[i] = mapR2[i] / 255;
1077
+ }
1078
+ const table = buffer.join(",");
1079
+ return [table, table, table];
1080
+ }
1081
+ const [mapR, mapG, mapB] = maps;
1082
+ const bufferR = new Array(256);
1083
+ const bufferG = new Array(256);
1084
+ const bufferB = new Array(256);
1085
+ for (let i = 0; i < 256; i++) {
1086
+ bufferR[i] = mapR[i] / 255;
1087
+ bufferG[i] = mapG[i] / 255;
1088
+ bufferB[i] = mapB[i] / 255;
1089
+ }
1090
+ return [bufferR.join(","), bufferG.join(","), bufferB.join(",")];
1091
+ };
1092
+ createUrl_fn = function(id) {
1093
+ if (__privateGet(this, _baseUrl) === void 0) {
1094
+ __privateSet(this, _baseUrl, "");
1095
+ const url = __privateGet(this, _document).URL;
1096
+ if (url !== __privateGet(this, _document).baseURI) {
1097
+ if (isDataScheme(url)) {
1098
+ warn('#createUrl: ignore "data:"-URL for performance reasons.');
1099
+ } else {
1100
+ __privateSet(this, _baseUrl, updateUrlHash(url, ""));
1101
+ }
1102
+ }
1103
+ }
1104
+ return `url(${__privateGet(this, _baseUrl)}#${id})`;
1105
+ };
1106
+ addLuminosityConversion_fn = function(filter) {
1107
+ const feColorMatrix = __privateGet(this, _document).createElementNS(
1108
+ SVG_NS,
1109
+ "feColorMatrix"
1110
+ );
1111
+ feColorMatrix.setAttribute("type", "matrix");
1112
+ feColorMatrix.setAttribute(
1113
+ "values",
1114
+ "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.59 0.11 0 0"
1115
+ );
1116
+ filter.append(feColorMatrix);
1117
+ };
1118
+ addGrayConversion_fn = function(filter) {
1119
+ const feColorMatrix = __privateGet(this, _document).createElementNS(
1120
+ SVG_NS,
1121
+ "feColorMatrix"
1122
+ );
1123
+ feColorMatrix.setAttribute("type", "matrix");
1124
+ feColorMatrix.setAttribute(
1125
+ "values",
1126
+ "0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0"
1127
+ );
1128
+ filter.append(feColorMatrix);
1129
+ };
1130
+ createFilter_fn = function(id) {
1131
+ const filter = __privateGet(this, _document).createElementNS(SVG_NS, "filter");
1132
+ filter.setAttribute("color-interpolation-filters", "sRGB");
1133
+ filter.setAttribute("id", id);
1134
+ __privateGet(this, _DOMFilterFactory_instances, defs_get).append(filter);
1135
+ return filter;
1136
+ };
1137
+ appendFeFunc_fn = function(feComponentTransfer, func, table) {
1138
+ const feFunc = __privateGet(this, _document).createElementNS(SVG_NS, func);
1139
+ feFunc.setAttribute("type", "discrete");
1140
+ feFunc.setAttribute("tableValues", table);
1141
+ feComponentTransfer.append(feFunc);
1142
+ };
1143
+ addTransferMapConversion_fn = function(rTable, gTable, bTable, filter) {
1144
+ const feComponentTransfer = __privateGet(this, _document).createElementNS(
1145
+ SVG_NS,
1146
+ "feComponentTransfer"
1147
+ );
1148
+ filter.append(feComponentTransfer);
1149
+ __privateMethod(this, _DOMFilterFactory_instances, appendFeFunc_fn).call(this, feComponentTransfer, "feFuncR", rTable);
1150
+ __privateMethod(this, _DOMFilterFactory_instances, appendFeFunc_fn).call(this, feComponentTransfer, "feFuncG", gTable);
1151
+ __privateMethod(this, _DOMFilterFactory_instances, appendFeFunc_fn).call(this, feComponentTransfer, "feFuncB", bTable);
1152
+ };
1153
+ addTransferMapAlphaConversion_fn = function(aTable, filter) {
1154
+ const feComponentTransfer = __privateGet(this, _document).createElementNS(
1155
+ SVG_NS,
1156
+ "feComponentTransfer"
1157
+ );
1158
+ filter.append(feComponentTransfer);
1159
+ __privateMethod(this, _DOMFilterFactory_instances, appendFeFunc_fn).call(this, feComponentTransfer, "feFuncA", aTable);
1160
+ };
1161
+ getRGB_fn = function(color) {
1162
+ __privateGet(this, _DOMFilterFactory_instances, defs_get).style.color = color;
1163
+ return getRGB(getComputedStyle(__privateGet(this, _DOMFilterFactory_instances, defs_get)).getPropertyValue("color"));
1164
+ };
1165
+
1166
+ // src/lib/utils.ts
1167
+ async function canvasToData(canvas) {
1168
+ if ("toBlob" in canvas) {
1169
+ const blob = await new Promise(
1170
+ (resolve) => canvas.toBlob((data) => resolve(data))
1171
+ );
1172
+ if (!blob) {
1173
+ throw new Error("Failed to generate graphics");
1174
+ }
1175
+ return new Uint8Array(await blob.arrayBuffer());
1176
+ }
1177
+ const buffer = await canvas.toBuffer("png");
1178
+ return new Uint8Array(buffer);
1179
+ }
1180
+ async function toDataUrl(data, type = "image/png") {
1181
+ if (typeof FileReader !== "undefined") {
1182
+ return new Promise((resolve) => {
1183
+ const reader = new FileReader();
1184
+ reader.onload = () => {
1185
+ resolve(reader.result);
1186
+ };
1187
+ reader.readAsDataURL(new Blob([data], { type }));
1188
+ });
1189
+ }
1190
+ return `data:${type};base64,${Buffer.from(data).toString("base64")}`;
1191
+ }
1192
+ function makeSerializable(object) {
1193
+ if (typeof object !== "object" || object === null) {
1194
+ return object;
1195
+ }
1196
+ if (object instanceof Int8Array || object instanceof Uint8Array || object instanceof Uint8ClampedArray || object instanceof Int16Array || object instanceof Uint16Array || object instanceof Int32Array || object instanceof Uint32Array || object instanceof Float32Array || object instanceof Float64Array) {
1197
+ return makeSerializable(Array.from(object));
1198
+ }
1199
+ if (object instanceof BigInt64Array || object instanceof BigUint64Array) {
1200
+ return makeSerializable(Array.from(object));
1201
+ }
1202
+ if (Array.isArray(object)) {
1203
+ return object.map(makeSerializable);
1204
+ }
1205
+ return Object.fromEntries(
1206
+ Object.entries(object).map(([key, value]) => [
1207
+ key,
1208
+ makeSerializable(value)
1209
+ ])
1210
+ );
1211
+ }
1212
+ function colorToRgb(color) {
1213
+ if (color.startsWith("#")) {
1214
+ const hex = color.slice(1);
1215
+ if (hex.length === 3) {
1216
+ return [
1217
+ Number.parseInt(hex[0] + hex[0], 16),
1218
+ Number.parseInt(hex[1] + hex[1], 16),
1219
+ Number.parseInt(hex[2] + hex[2], 16)
1220
+ ];
1221
+ }
1222
+ if (hex.length === 6) {
1223
+ return [
1224
+ Number.parseInt(hex.slice(0, 2), 16),
1225
+ Number.parseInt(hex.slice(2, 4), 16),
1226
+ Number.parseInt(hex.slice(4, 6), 16)
1227
+ ];
1228
+ }
1229
+ }
1230
+ throw new Error(`Invalid color format: ${color}`);
1231
+ }
1232
+ function rgbToHex(r, g, b) {
1233
+ const toHex = (value) => value.toString(16).padStart(2, "0");
1234
+ if (Array.isArray(r)) {
1235
+ return `#${toHex(r[0])}${toHex(r[1])}${toHex(r[2])}`;
1236
+ }
1237
+ return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
1238
+ }
1239
+ function parseRgbaColor(color) {
1240
+ const match = color.match(
1241
+ /^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\)$/
1242
+ );
1243
+ if (!match) {
1244
+ return { r: 0, g: 0, b: 0, a: 1 };
1245
+ }
1246
+ return {
1247
+ r: Number.parseInt(match[1], 10),
1248
+ g: Number.parseInt(match[2], 10),
1249
+ b: Number.parseInt(match[3], 10),
1250
+ a: match[4] ? Number.parseFloat(match[4]) : 1
1251
+ };
1252
+ }
1253
+
1254
+ // src/lib/NodeFilterFactory.ts
1255
+ var filtersRegistry = /* @__PURE__ */ new Map();
1256
+ function createTables(maps) {
1257
+ if (maps.length === 1) {
1258
+ const mapR2 = maps[0];
1259
+ const buffer = new Array(256);
1260
+ for (let i = 0; i < 256; i++) {
1261
+ buffer[i] = mapR2[i] / 255;
1262
+ }
1263
+ return [buffer, buffer, buffer];
1264
+ }
1265
+ const [mapR, mapG, mapB] = maps;
1266
+ const bufferR = new Array(256);
1267
+ const bufferG = new Array(256);
1268
+ const bufferB = new Array(256);
1269
+ for (let i = 0; i < 256; i++) {
1270
+ bufferR[i] = mapR[i] / 255;
1271
+ bufferG[i] = mapG[i] / 255;
1272
+ bufferB[i] = mapB[i] / 255;
1273
+ }
1274
+ return [bufferR, bufferG, bufferB];
1275
+ }
1276
+ function createTransferMapAlphaConversion(aTable) {
1277
+ return (ctx) => {
1278
+ const imageData = ctx.getImageData(
1279
+ 0,
1280
+ 0,
1281
+ ctx.canvas.width,
1282
+ ctx.canvas.height
1283
+ );
1284
+ const data = imageData.data;
1285
+ const tableSize = aTable.length;
1286
+ for (let i = 0; i < data.length; i += 4) {
1287
+ const alpha = data[i + 3] / 255;
1288
+ const index = alpha * (tableSize - 1);
1289
+ const lower = Math.floor(index);
1290
+ const upper = Math.min(lower + 1, tableSize - 1);
1291
+ const t = index - lower;
1292
+ const newAlpha = (1 - t) * aTable[lower] + t * aTable[upper];
1293
+ data[i + 3] = newAlpha * 255;
1294
+ }
1295
+ ctx.putImageData(imageData, 0, 0);
1296
+ };
1297
+ }
1298
+ function createTransferMapConversion(rTable, gTable, bTable) {
1299
+ return (ctx) => {
1300
+ const imageData = ctx.getImageData(
1301
+ 0,
1302
+ 0,
1303
+ ctx.canvas.width,
1304
+ ctx.canvas.height
1305
+ );
1306
+ const data = imageData.data;
1307
+ const rSize = rTable.length;
1308
+ const gSize = gTable.length;
1309
+ const bSize = bTable.length;
1310
+ for (let i = 0; i < data.length; i += 4) {
1311
+ const r = data[i] / 255;
1312
+ const g = data[i + 1] / 255;
1313
+ const b = data[i + 2] / 255;
1314
+ const rIndex = r * (rSize - 1);
1315
+ const rLower = Math.floor(rIndex);
1316
+ const rUpper = Math.min(rLower + 1, rSize - 1);
1317
+ const rT = rIndex - rLower;
1318
+ const newR = (1 - rT) * rTable[rLower] + rT * rTable[rUpper];
1319
+ const gIndex = g * (gSize - 1);
1320
+ const gLower = Math.floor(gIndex);
1321
+ const gUpper = Math.min(gLower + 1, gSize - 1);
1322
+ const gT = gIndex - gLower;
1323
+ const newG = (1 - gT) * gTable[gLower] + gT * gTable[gUpper];
1324
+ const bIndex = b * (bSize - 1);
1325
+ const bLower = Math.floor(bIndex);
1326
+ const bUpper = Math.min(bLower + 1, bSize - 1);
1327
+ const bT = bIndex - bLower;
1328
+ const newB = (1 - bT) * bTable[bLower] + bT * bTable[bUpper];
1329
+ data[i] = newR * 255;
1330
+ data[i + 1] = newG * 255;
1331
+ data[i + 2] = newB * 255;
1332
+ }
1333
+ ctx.putImageData(imageData, 0, 0);
1334
+ };
1335
+ }
1336
+ function createLuminosityConversion() {
1337
+ return (ctx) => {
1338
+ const imageData = ctx.getImageData(
1339
+ 0,
1340
+ 0,
1341
+ ctx.canvas.width,
1342
+ ctx.canvas.height
1343
+ );
1344
+ const data = imageData.data;
1345
+ for (let i = 0; i < data.length; i += 4) {
1346
+ const r = data[i];
1347
+ const g = data[i + 1];
1348
+ const b = data[i + 2];
1349
+ data[i] = data[i + 1] = data[i + 2] = 0;
1350
+ data[i + 3] = r * 0.3 + g * 0.59 + b * 0.11;
1351
+ }
1352
+ ctx.putImageData(imageData, 0, 0);
1353
+ };
1354
+ }
1355
+ function createGrayConversion() {
1356
+ return (ctx) => {
1357
+ const imageData = ctx.getImageData(
1358
+ 0,
1359
+ 0,
1360
+ ctx.canvas.width,
1361
+ ctx.canvas.height
1362
+ );
1363
+ const data = imageData.data;
1364
+ for (let i = 0; i < data.length; i += 4) {
1365
+ const r = data[i];
1366
+ const g = data[i + 1];
1367
+ const b = data[i + 2];
1368
+ const gray = r * 0.2126 + g * 0.7152 + b * 0.0722;
1369
+ data[i] = data[i + 1] = data[i + 2] = gray;
1370
+ }
1371
+ ctx.putImageData(imageData, 0, 0);
1372
+ };
1373
+ }
1374
+ var NodeFilterFactory = class extends BaseFilterFactory {
1375
+ addFilter(maps) {
1376
+ if (!maps) {
1377
+ return "none";
1378
+ }
1379
+ const [rTable, gTable, bTable] = createTables(maps);
1380
+ const url = `url(#filter_${maps.length === 1 ? rTable.join("_") : `${rTable.join("_")}_${gTable.join("_")}_${bTable.join("_")}`})`;
1381
+ if (!filtersRegistry.has(url)) {
1382
+ filtersRegistry.set(
1383
+ url,
1384
+ createTransferMapConversion(rTable, gTable, bTable)
1385
+ );
1386
+ }
1387
+ return url;
1388
+ }
1389
+ addHCMFilter(fgColor, bgColor) {
1390
+ const fgRGB = colorToRgb(fgColor);
1391
+ const bgRGB = colorToRgb(bgColor);
1392
+ const url = `url(#hcm_${rgbToHex(fgRGB)}_${rgbToHex(bgRGB)})`;
1393
+ if (!filtersRegistry.has(url)) {
1394
+ const table = new Array(256);
1395
+ for (let i = 0; i <= 255; i++) {
1396
+ const x = i / 255;
1397
+ table[i] = x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4;
1398
+ }
1399
+ const transferMapFilter = createTransferMapConversion(
1400
+ table,
1401
+ table,
1402
+ table
1403
+ );
1404
+ const grayFilter = createGrayConversion();
1405
+ const getSteps = (c, n) => {
1406
+ const start = fgRGB[c] / 255;
1407
+ const end = bgRGB[c] / 255;
1408
+ const arr = new Array(n + 1);
1409
+ for (let i = 0; i <= n; i++) {
1410
+ arr[i] = start + i / n * (end - start);
1411
+ }
1412
+ return arr;
1413
+ };
1414
+ const finalTransferMap = createTransferMapConversion(
1415
+ getSteps(0, 5),
1416
+ getSteps(1, 5),
1417
+ getSteps(2, 5)
1418
+ );
1419
+ filtersRegistry.set(url, (ctx) => {
1420
+ transferMapFilter(ctx);
1421
+ grayFilter(ctx);
1422
+ finalTransferMap(ctx);
1423
+ });
1424
+ }
1425
+ return url;
1426
+ }
1427
+ addAlphaFilter(map) {
1428
+ const [tableA] = createTables([map]);
1429
+ const url = `url(#alpha_${tableA.join("_")})`;
1430
+ if (!filtersRegistry.has(url)) {
1431
+ filtersRegistry.set(url, createTransferMapAlphaConversion(map));
1432
+ }
1433
+ return url;
1434
+ }
1435
+ addLuminosityFilter(map) {
1436
+ const url = `url(#luminosity${map ? `_${map.join("_")}` : ""})`;
1437
+ if (!filtersRegistry.has(url)) {
1438
+ const tables = map ? createTables([map]) : null;
1439
+ const alphaFilter = tables ? createTransferMapAlphaConversion(tables[0]) : null;
1440
+ const luminosityFilter = createLuminosityConversion();
1441
+ filtersRegistry.set(url, (ctx) => {
1442
+ luminosityFilter(ctx);
1443
+ alphaFilter?.(ctx);
1444
+ });
1445
+ }
1446
+ return url;
1447
+ }
1448
+ addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) {
1449
+ const fgRGB = colorToRgb(fgColor);
1450
+ const bgRGB = colorToRgb(bgColor);
1451
+ let newFgRGB = colorToRgb(newFgColor);
1452
+ let newBgRGB = colorToRgb(newBgColor);
1453
+ const url = `url(#highlight_hcm_${filterName}_${rgbToHex(fgRGB)}_${rgbToHex(bgRGB)}_${rgbToHex(newFgRGB)}_${rgbToHex(newBgRGB)})`;
1454
+ if (!filtersRegistry.has(url)) {
1455
+ let fgGray = Math.round(
1456
+ 0.2126 * fgRGB[0] + 0.7152 * fgRGB[1] + 0.0722 * fgRGB[2]
1457
+ );
1458
+ let bgGray = Math.round(
1459
+ 0.2126 * bgRGB[0] + 0.7152 * bgRGB[1] + 0.0722 * bgRGB[2]
1460
+ );
1461
+ if (bgGray < fgGray) {
1462
+ [fgGray, bgGray, newFgRGB, newBgRGB] = [
1463
+ bgGray,
1464
+ fgGray,
1465
+ newBgRGB,
1466
+ newFgRGB
1467
+ ];
1468
+ }
1469
+ const grayFilter = createGrayConversion();
1470
+ const getSteps = (fg, bg, n) => {
1471
+ const arr = new Array(256);
1472
+ const step = (bgGray - fgGray) / n;
1473
+ const newStart = fg / 255;
1474
+ const newStep = (bg - fg) / (255 * n);
1475
+ let prev = 0;
1476
+ for (let i = 0; i <= n; i++) {
1477
+ const k = Math.round(fgGray + i * step);
1478
+ const value = newStart + i * newStep;
1479
+ for (let j = prev; j <= k; j++) {
1480
+ arr[j] = value;
1481
+ }
1482
+ prev = k + 1;
1483
+ }
1484
+ for (let i = prev; i < 256; i++) {
1485
+ arr[i] = arr[prev - 1];
1486
+ }
1487
+ return arr;
1488
+ };
1489
+ const transferMapFilter = createTransferMapConversion(
1490
+ getSteps(newFgRGB[0], newBgRGB[0], 5),
1491
+ getSteps(newFgRGB[1], newBgRGB[1], 5),
1492
+ getSteps(newFgRGB[2], newBgRGB[2], 5)
1493
+ );
1494
+ filtersRegistry.set(url, (ctx) => {
1495
+ grayFilter(ctx);
1496
+ transferMapFilter(ctx);
1497
+ });
1498
+ }
1499
+ return url;
1500
+ }
1501
+ };
1502
+
1503
+ // src/lib/NodeCanvasFactory.ts
1504
+ var NodeCanvasFactory = class extends BaseCanvasFactory {
1505
+ _createCanvas(width, height) {
1506
+ return new Canvas(width, height);
1507
+ }
1508
+ create(width, height) {
1509
+ const factory = this;
1510
+ const { canvas, context } = super.create(width, height);
1511
+ const drawImage = context.drawImage;
1512
+ let currentFilter = "none";
1513
+ Object.defineProperty(context, "filter", {
1514
+ get() {
1515
+ if (currentFilter.startsWith("url(")) {
1516
+ return "none";
1517
+ }
1518
+ return currentFilter;
1519
+ },
1520
+ set(value) {
1521
+ currentFilter = value;
1522
+ },
1523
+ configurable: true
1524
+ });
1525
+ context.drawImage = function(src, ...args) {
1526
+ const filter = filtersRegistry.get(currentFilter);
1527
+ if (!filter) {
1528
+ drawImage.call(this, src, ...args);
1529
+ return;
1530
+ }
1531
+ const { canvas: canvas2, context: context2 } = factory.create(src.width, src.height);
1532
+ context2.drawImage(src, 0, 0, src.width, src.height);
1533
+ filter(context2);
1534
+ drawImage.call(this, canvas2, ...args);
1535
+ factory.destroy({
1536
+ canvas: canvas2,
1537
+ context: context2
1538
+ });
1539
+ };
1540
+ return {
1541
+ canvas,
1542
+ context
1543
+ };
1544
+ }
1545
+ };
1546
+
1547
+ // src/lib/NodeUtils.ts
1548
+ if (!globalThis.DOMMatrix) {
1549
+ globalThis.DOMMatrix = NodeDOMMatrix;
1550
+ }
1551
+ if (!globalThis.DOMPoint) {
1552
+ globalThis.DOMPoint = NodeDOMPoint;
1553
+ }
1554
+ if (!globalThis.ImageData) {
1555
+ globalThis.ImageData = NodeImageData;
1556
+ }
1557
+ if (!globalThis.Path2D) {
1558
+ globalThis.Path2D = NodePath2D;
1559
+ }
1560
+ if (!globalThis.navigator?.language) {
1561
+ globalThis.navigator = {
1562
+ language: "en-US",
1563
+ platform: "",
1564
+ userAgent: ""
1565
+ };
1566
+ }
1567
+ async function fetchData2(url) {
1568
+ const { readFile } = await import("node:fs/promises");
1569
+ const data = await readFile(url);
1570
+ return new Uint8Array(data);
1571
+ }
1572
+ var NodeCMapReaderFactory = class extends BaseCMapReaderFactory {
1573
+ /**
1574
+ * @ignore
1575
+ */
1576
+ async _fetch(url) {
1577
+ return fetchData2(url);
1578
+ }
1579
+ };
1580
+ var NodeStandardFontDataFactory = class extends BaseStandardFontDataFactory {
1581
+ /**
1582
+ * @ignore
1583
+ */
1584
+ async _fetch(url) {
1585
+ return fetchData2(url);
1586
+ }
1587
+ };
1588
+ var NodeWasmFactory = class extends BaseWasmFactory {
1589
+ /**
1590
+ * @ignore
1591
+ */
1592
+ async _fetch(url) {
1593
+ return fetchData2(url);
1594
+ }
1595
+ };
1596
+
1597
+ export {
1598
+ SVG_NS,
1599
+ PixelsPerInch,
1600
+ fetchData,
1601
+ PageViewport,
1602
+ RenderingCancelledException,
1603
+ isDataScheme,
1604
+ isPdfFile,
1605
+ getFilenameFromUrl,
1606
+ getPdfFilenameFromUrl,
1607
+ StatTimer,
1608
+ isValidFetchUrl,
1609
+ noContextMenu,
1610
+ stopEvent,
1611
+ deprecated,
1612
+ PDFDateString,
1613
+ getXfaPageViewport,
1614
+ getRGB,
1615
+ getColorValues,
1616
+ getCurrentTransform,
1617
+ getCurrentTransformInverse,
1618
+ setLayerDimensions,
1619
+ OutputScale,
1620
+ SupportedImageMimeTypes,
1621
+ DOMCMapReaderFactory,
1622
+ BaseStandardFontDataFactory,
1623
+ DOMStandardFontDataFactory,
1624
+ DOMWasmFactory,
1625
+ DOMCanvasFactory,
1626
+ DOMFilterFactory,
1627
+ canvasToData,
1628
+ toDataUrl,
1629
+ makeSerializable,
1630
+ colorToRgb,
1631
+ rgbToHex,
1632
+ parseRgbaColor,
1633
+ filtersRegistry,
1634
+ NodeFilterFactory,
1635
+ NodeCanvasFactory,
1636
+ fetchData2,
1637
+ NodeCMapReaderFactory,
1638
+ NodeStandardFontDataFactory,
1639
+ NodeWasmFactory
1640
+ };