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

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