@reportwright/viewer 0.12.0 → 0.12.1

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 (83) hide show
  1. package/CHANGELOG.md +55 -1
  2. package/README.md +27 -5
  3. package/dist/{chunk-KJTRZJHN.js → chunk-2BPBQMH2.js} +4 -3
  4. package/dist/chunk-2BPBQMH2.js.map +6 -0
  5. package/dist/{chunk-ODREGGKA.js → chunk-3D2KFKG2.js} +5 -4
  6. package/dist/chunk-3D2KFKG2.js.map +6 -0
  7. package/dist/chunk-6TPZ7G74.js +494 -0
  8. package/dist/chunk-6TPZ7G74.js.map +6 -0
  9. package/dist/chunk-BRB34AJ2.js +16 -0
  10. package/dist/{chunk-APRPSQOD.js → chunk-DPVJEFKP.js} +28 -9
  11. package/dist/chunk-DPVJEFKP.js.map +6 -0
  12. package/dist/{chunk-RYHJUQSV.js → chunk-DXHLIJEY.js} +2 -2
  13. package/dist/{chunk-SR2TQ2ZK.js → chunk-F6RMRXIN.js} +2 -2
  14. package/dist/chunk-F6RMRXIN.js.map +6 -0
  15. package/dist/{chunk-3D43XGIN.js → chunk-M6AYND5G.js} +8 -638
  16. package/dist/chunk-M6AYND5G.js.map +6 -0
  17. package/dist/{chunk-EOVGKHAS.js → chunk-NR2G4TMG.js} +59 -51
  18. package/dist/chunk-NR2G4TMG.js.map +6 -0
  19. package/dist/{chunk-5N6OFCHJ.js → chunk-PGP3QA6L.js} +22 -10
  20. package/dist/chunk-PGP3QA6L.js.map +6 -0
  21. package/dist/{chunk-FARG6X2U.js → chunk-Q6MMPKQA.js} +14 -9
  22. package/dist/chunk-Q6MMPKQA.js.map +6 -0
  23. package/dist/{chunk-SBD55ZES.js → chunk-S2IUUI6N.js} +76 -32
  24. package/dist/chunk-S2IUUI6N.js.map +6 -0
  25. package/dist/chunk-ULKEEARQ.js +553 -0
  26. package/dist/chunk-ULKEEARQ.js.map +6 -0
  27. package/dist/{chunk-M6GENFAH.js → chunk-VNOWPSE6.js} +527 -1461
  28. package/dist/chunk-VNOWPSE6.js.map +6 -0
  29. package/dist/chunk-Z7MKH66Z.js +642 -0
  30. package/dist/chunk-Z7MKH66Z.js.map +6 -0
  31. package/dist/designer.d.ts +10 -3
  32. package/dist/designer.js +41 -31
  33. package/dist/designer.js.map +2 -2
  34. package/dist/engine.worker.js +71 -0
  35. package/dist/engine.worker.js.map +6 -0
  36. package/dist/peer/chunk-2FZTYEDE.js +15 -0
  37. package/dist/peer/{chunk-NPYKZINU.js → chunk-6I2EAAVN.js} +39 -31
  38. package/dist/peer/chunk-6I2EAAVN.js.map +6 -0
  39. package/dist/peer/{chunk-IPU2YRL2.js → chunk-BMAXIBP2.js} +28 -9
  40. package/dist/peer/chunk-BMAXIBP2.js.map +6 -0
  41. package/dist/peer/chunk-BQFI3DHK.js +494 -0
  42. package/dist/peer/chunk-BQFI3DHK.js.map +6 -0
  43. package/dist/peer/{chunk-76ZABVTI.js → chunk-R4VX5UC7.js} +4 -3
  44. package/dist/peer/{chunk-KBT6ZGGO.js → chunk-TSC4RAH3.js} +22 -10
  45. package/dist/peer/chunk-TSC4RAH3.js.map +6 -0
  46. package/dist/peer/{chunk-M4AGFUWE.js → chunk-V42KN7HD.js} +2 -2
  47. package/dist/peer/{chunk-Y5CAHLXS.js → chunk-WQGENQZO.js} +5 -4
  48. package/dist/peer/{chunk-MCJPN2KL.js → chunk-WSNRD2AQ.js} +14 -9
  49. package/dist/peer/chunk-WSNRD2AQ.js.map +6 -0
  50. package/dist/peer/designer.js +41 -31
  51. package/dist/peer/designer.js.map +2 -2
  52. package/dist/peer/engine.worker.js +70 -0
  53. package/dist/peer/engine.worker.js.map +6 -0
  54. package/dist/peer/viewer.js +12 -5
  55. package/dist/peer/viewer.js.map +1 -1
  56. package/dist/viewer.d.ts +9 -1
  57. package/dist/viewer.js +12 -5
  58. package/dist/viewer.js.map +1 -1
  59. package/package.json +1 -1
  60. package/dist/chunk-3D43XGIN.js.map +0 -6
  61. package/dist/chunk-5N6OFCHJ.js.map +0 -6
  62. package/dist/chunk-AH47FS6Y.js +0 -13
  63. package/dist/chunk-APRPSQOD.js.map +0 -6
  64. package/dist/chunk-EOVGKHAS.js.map +0 -6
  65. package/dist/chunk-FARG6X2U.js.map +0 -6
  66. package/dist/chunk-M6GENFAH.js.map +0 -6
  67. package/dist/chunk-SBD55ZES.js.map +0 -6
  68. package/dist/chunk-SR2TQ2ZK.js.map +0 -6
  69. package/dist/peer/chunk-76ZABVTI.js.map +0 -6
  70. package/dist/peer/chunk-GBITRNHE.js +0 -14806
  71. package/dist/peer/chunk-GBITRNHE.js.map +0 -6
  72. package/dist/peer/chunk-IMQRHDR4.js +0 -12
  73. package/dist/peer/chunk-IPU2YRL2.js.map +0 -6
  74. package/dist/peer/chunk-KBT6ZGGO.js.map +0 -6
  75. package/dist/peer/chunk-MCJPN2KL.js.map +0 -6
  76. package/dist/peer/chunk-NPYKZINU.js.map +0 -6
  77. package/dist/peer/chunk-Y5CAHLXS.js.map +0 -6
  78. /package/dist/{chunk-AH47FS6Y.js.map → chunk-BRB34AJ2.js.map} +0 -0
  79. /package/dist/{chunk-RYHJUQSV.js.map → chunk-DXHLIJEY.js.map} +0 -0
  80. /package/dist/peer/{chunk-IMQRHDR4.js.map → chunk-2FZTYEDE.js.map} +0 -0
  81. /package/dist/{chunk-KJTRZJHN.js.map → peer/chunk-R4VX5UC7.js.map} +0 -0
  82. /package/dist/peer/{chunk-M4AGFUWE.js.map → chunk-V42KN7HD.js.map} +0 -0
  83. /package/dist/{chunk-ODREGGKA.js.map → peer/chunk-WQGENQZO.js.map} +0 -0
@@ -0,0 +1,642 @@
1
+ // src/engine/text/fonts.js
2
+ import fontkitModule from "@pdf-lib/fontkit";
3
+
4
+ // src/engine/text/shaper.js
5
+ var LTR = 4;
6
+ var RTL = 5;
7
+ var PLAIN = ["-kern", "-liga", "-clig", "-calt", "-dlig"];
8
+ async function createShaper(wasm) {
9
+ let memory;
10
+ const { instance } = await WebAssembly.instantiate(wasm, {
11
+ env: {
12
+ _emscripten_runtime_keepalive_clear() {
13
+ },
14
+ _abort_js() {
15
+ throw new Error("HarfBuzz stopped");
16
+ },
17
+ _setitimer_js() {
18
+ return 0;
19
+ },
20
+ emscripten_resize_heap(size) {
21
+ const need = (size >>> 0) - memory.buffer.byteLength;
22
+ try {
23
+ memory.grow(Math.ceil(need / 65536));
24
+ return 1;
25
+ } catch {
26
+ return 0;
27
+ }
28
+ }
29
+ },
30
+ wasi_snapshot_preview1: { proc_exit(code) {
31
+ throw new Error(`HarfBuzz exited (${code})`);
32
+ } }
33
+ });
34
+ const x = (
35
+ /** @type {any} */
36
+ instance.exports
37
+ );
38
+ memory = x.memory;
39
+ x.__wasm_call_ctors();
40
+ const featPtr = x.malloc(16 * PLAIN.length);
41
+ PLAIN.forEach((f, i) => {
42
+ const s = x.malloc(f.length + 1);
43
+ new Uint8Array(memory.buffer).set([...f].map((c) => c.charCodeAt(0)).concat(0), s);
44
+ x.hb_feature_from_string(s, -1, featPtr + 16 * i);
45
+ x.free(s);
46
+ });
47
+ return {
48
+ /**
49
+ * A HarfBuzz font for these bytes. It lives as long as the shaper: fonts are few and reused.
50
+ * @param {Uint8Array} bytes @returns {{ ptr: number, upem: number }}
51
+ */
52
+ font(bytes) {
53
+ const buf = x.malloc(bytes.byteLength);
54
+ new Uint8Array(memory.buffer).set(bytes, buf);
55
+ const blob = x.hb_blob_create(buf, bytes.byteLength, 1, 0, 0);
56
+ const face = x.hb_face_create(blob, 0);
57
+ const ptr = x.hb_font_create(face);
58
+ const upem = x.hb_face_get_upem(face);
59
+ x.hb_face_destroy(face);
60
+ x.hb_blob_destroy(blob);
61
+ return { ptr, upem };
62
+ },
63
+ /**
64
+ * Shape one run (one font, one script, one direction).
65
+ * @param {{ ptr: number }} font @param {string} text @param {boolean} rtl
66
+ * @param {boolean} [plain] kerning and ligatures off (a simple-script run in a right-to-left context)
67
+ * @returns {number[]} [glyph id, x advance, x offset, y offset, cluster (UTF-16 index)] per glyph, in visual order
68
+ */
69
+ shape(font, text, rtl, plain = false) {
70
+ const n = text.length;
71
+ const p = x.malloc(n * 2 + 2);
72
+ const u16 = new Uint16Array(memory.buffer, p, n);
73
+ for (let i = 0; i < n; i++) u16[i] = text.charCodeAt(i);
74
+ const b = x.hb_buffer_create();
75
+ x.hb_buffer_add_utf16(b, p, n, 0, n);
76
+ x.hb_buffer_set_direction(b, rtl ? RTL : LTR);
77
+ x.hb_buffer_guess_segment_properties(b);
78
+ x.hb_shape(font.ptr, b, plain ? featPtr : 0, plain ? PLAIN.length : 0);
79
+ const len = x.hb_buffer_get_length(b);
80
+ const info = new Uint32Array(memory.buffer, x.hb_buffer_get_glyph_infos(b, 0), len * 5);
81
+ const pos = new Int32Array(memory.buffer, x.hb_buffer_get_glyph_positions(b, 0), len * 5);
82
+ const out = new Array(len * 5);
83
+ for (let i = 0; i < len; i++) {
84
+ out[i * 5] = info[i * 5];
85
+ out[i * 5 + 1] = pos[i * 5];
86
+ out[i * 5 + 2] = pos[i * 5 + 2];
87
+ out[i * 5 + 3] = pos[i * 5 + 3];
88
+ out[i * 5 + 4] = info[i * 5 + 2];
89
+ }
90
+ x.hb_buffer_destroy(b);
91
+ x.free(p);
92
+ return out;
93
+ }
94
+ };
95
+ }
96
+
97
+ // src/engine/text/fonts.js
98
+ var fontkit = (
99
+ /** @type {any} */
100
+ fontkitModule.default || fontkitModule
101
+ );
102
+ var BUNDLED = [
103
+ ["Inter", "Inter-Regular", 400],
104
+ ["Inter", "Inter-Italic", 400, "italic"],
105
+ ["Inter", "Inter-SemiBold", 600],
106
+ ["Inter", "Inter-Bold", 700],
107
+ ["Inter", "Inter-BoldItalic", 700, "italic"],
108
+ ["JetBrains Mono", "JetBrainsMono-Regular", 400],
109
+ ["JetBrains Mono", "JetBrainsMono-Bold", 700],
110
+ ["Noto Sans Devanagari", "NotoSansDevanagari-Regular", 400],
111
+ ["Noto Sans Devanagari", "NotoSansDevanagari-Bold", 700],
112
+ ["Noto Sans Arabic", "NotoSansArabic-Regular", 400],
113
+ ["Noto Sans Arabic", "NotoSansArabic-Bold", 700],
114
+ ["Noto Sans Hebrew", "NotoSansHebrew-Regular", 400],
115
+ ["Noto Sans Hebrew", "NotoSansHebrew-Bold", 700],
116
+ // fallbacks loaded only when text uses the script (docs/TEXT.md has the sizes)
117
+ ...["Thai", "Lao", "Khmer", "Myanmar", "Tamil", "Bengali", "Telugu", "Kannada", "Gujarati"].flatMap((s) => [
118
+ [`Noto Sans ${s}`, `NotoSans${s}-Regular`, 400],
119
+ [`Noto Sans ${s}`, `NotoSans${s}-Bold`, 700]
120
+ ]),
121
+ // optional, about 40 MB (npm run fonts:cjk fetches them into /fonts/cjk): variable fonts drawn at their default
122
+ // (regular) weight. Without them the text shows as boxes, and the warning says how to add them.
123
+ ["Noto Sans JP", "NotoSansJP", 400, "normal", "cjk/NotoSansJP.ttf"],
124
+ ["Noto Sans KR", "NotoSansKR", 400, "normal", "cjk/NotoSansKR.ttf"],
125
+ ["Noto Sans SC", "NotoSansSC", 400, "normal", "cjk/NotoSansSC.ttf"],
126
+ ["Noto Emoji", "NotoEmoji", 400, "normal", "cjk/NotoEmoji.ttf"]
127
+ ];
128
+ var OPTIONAL_KEYS = ["NotoSansJP", "NotoSansKR", "NotoSansSC", "NotoEmoji"];
129
+ var FONT_FAMILIES = {};
130
+ var FACES = /* @__PURE__ */ new Map();
131
+ var addFace = (f) => {
132
+ var _a;
133
+ (FONT_FAMILIES[_a = f.family] || (FONT_FAMILIES[_a] = [])).push(f);
134
+ FACES.set(f.key, f);
135
+ };
136
+ for (const [family, key, weight, style = "normal", file] of BUNDLED) {
137
+ addFace({ family: String(family), key: String(key), weight: Number(weight), style: style === "italic" ? "italic" : "normal", file: String(file || `${key}.ttf`) });
138
+ }
139
+ var BUNDLED_FAMILIES = Object.keys(FONT_FAMILIES);
140
+ var DEFAULT_FAMILY = "Inter";
141
+ var ALL_FONT_KEYS = [...FONT_FAMILIES.Inter, ...FONT_FAMILIES["JetBrains Mono"]].map((f) => f.key);
142
+ var CORE_FONT_KEY = "Inter-Regular";
143
+ var PRELOAD_KEYS = [...ALL_FONT_KEYS];
144
+ var SHAPER = "harfbuzz";
145
+ function fontFile(key) {
146
+ if (key === SHAPER) return "harfbuzz.wasm";
147
+ return FACES.get(key)?.file || `${key}.ttf`;
148
+ }
149
+ function setCustomFonts(list) {
150
+ for (const [k, f] of FACES) if (k.startsWith("u-")) {
151
+ FACES.delete(k);
152
+ const left = FONT_FAMILIES[f.family].filter((x) => x.key !== k);
153
+ if (left.length) FONT_FAMILIES[f.family] = left;
154
+ else delete FONT_FAMILIES[f.family];
155
+ }
156
+ for (const f of list || []) {
157
+ if (BUNDLED_FAMILIES.includes(f.family) || !/^[a-f0-9]{8,64}$/.test(String(f.id))) continue;
158
+ addFace({ key: `u-${f.id}`, family: String(f.family), weight: Number(f.weight) || 400, style: f.style === "italic" ? "italic" : "normal", file: `custom/${f.id}` });
159
+ }
160
+ }
161
+ function resolveFontKey(family, weight, style) {
162
+ const faces = FONT_FAMILIES[family || DEFAULT_FAMILY] || FONT_FAMILIES[DEFAULT_FAMILY];
163
+ const w = weight === "bold" ? 700 : weight === "normal" || weight == null ? 400 : Number(weight) || 400;
164
+ const italic = faces.filter((f) => f.style === "italic");
165
+ const list = style === "italic" && italic.length ? italic : faces.filter((f) => f.style !== "italic").length ? faces.filter((f) => f.style !== "italic") : faces;
166
+ const rank = (f) => {
167
+ const fw = f.weight;
168
+ if (w >= 400 && w <= 500) return fw >= w && fw <= 500 ? fw - w : fw < w ? 1e3 + w - fw : 2e3 + fw - w;
169
+ if (w < 400) return fw <= w ? w - fw : 1e3 + fw - w;
170
+ return fw >= w ? fw - w : 1e3 + w - fw;
171
+ };
172
+ return list.reduce((best, f) => rank(f) < rank(best) ? f : best).key;
173
+ }
174
+ function fontCss(key) {
175
+ const f = FACES.get(key);
176
+ return f ? { family: f.family, weight: f.weight, style: f.style } : { family: DEFAULT_FAMILY, weight: 400, style: "normal" };
177
+ }
178
+ var FALLBACK = [
179
+ [1424, 1535, "Noto Sans Hebrew"],
180
+ [64285, 64335, "Noto Sans Hebrew"],
181
+ [1536, 2303, "Noto Sans Arabic"],
182
+ [64336, 65023, "Noto Sans Arabic"],
183
+ [65136, 65278, "Noto Sans Arabic"],
184
+ [2304, 2431, "Noto Sans Devanagari"],
185
+ [43232, 43263, "Noto Sans Devanagari"],
186
+ [7376, 7423, "Noto Sans Devanagari"],
187
+ [2432, 2559, "Noto Sans Bengali"],
188
+ [2688, 2815, "Noto Sans Gujarati"],
189
+ [2944, 3071, "Noto Sans Tamil"],
190
+ [73664, 73727, "Noto Sans Tamil"],
191
+ [3072, 3199, "Noto Sans Telugu"],
192
+ [3200, 3327, "Noto Sans Kannada"],
193
+ [3584, 3711, "Noto Sans Thai"],
194
+ [3712, 3839, "Noto Sans Lao"],
195
+ [4096, 4255, "Noto Sans Myanmar"],
196
+ [43488, 43519, "Noto Sans Myanmar"],
197
+ [43616, 43647, "Noto Sans Myanmar"],
198
+ [6016, 6143, "Noto Sans Khmer"],
199
+ [6624, 6655, "Noto Sans Khmer"],
200
+ // CJK (optional fonts): kana and Han in the Japanese face (Han shapes differ a little from Chinese; a report can
201
+ // set fontFamily "Noto Sans SC"), Hangul in the Korean one; emoji in Noto Emoji (monochrome)
202
+ [12352, 12543, "Noto Sans JP"],
203
+ [12784, 12799, "Noto Sans JP"],
204
+ [12288, 12351, "Noto Sans JP"],
205
+ [13312, 19903, "Noto Sans JP"],
206
+ [19968, 40959, "Noto Sans JP"],
207
+ [63744, 64255, "Noto Sans JP"],
208
+ [65280, 65519, "Noto Sans JP"],
209
+ [4352, 4607, "Noto Sans KR"],
210
+ [12592, 12687, "Noto Sans KR"],
211
+ [44032, 55215, "Noto Sans KR"],
212
+ [126976, 129791, "Noto Emoji"],
213
+ [9728, 10175, "Noto Emoji"],
214
+ [11008, 11263, "Noto Emoji"]
215
+ ];
216
+ var allFontKeys = () => [...FACES.keys()];
217
+ function fallbackKeys(key) {
218
+ const c = fontCss(key);
219
+ return [...new Set(FALLBACK.map((f) => String(f[2])))].map((family) => resolveFontKey(family, c.weight, c.style));
220
+ }
221
+ function unicodeRange(key) {
222
+ const family = FACES.get(key)?.family;
223
+ const r = FALLBACK.filter((f) => f[2] === family).map(([a, b]) => `U+${Number(a).toString(16)}-${Number(b).toString(16)}`);
224
+ return r.length ? [...r, "U+300-36F", "U+2000-206F", "U+25CC", "U+FE00-FE0F"].join(",") : null;
225
+ }
226
+ function fallbackKey(cp, key) {
227
+ for (const [a, b, family] of FALLBACK) {
228
+ if (cp >= /** @type {number} */
229
+ a && cp <= /** @type {number} */
230
+ b) {
231
+ const c = fontCss(key);
232
+ return resolveFontKey(String(family), c.weight, c.style);
233
+ }
234
+ }
235
+ return null;
236
+ }
237
+ var SIMPLE_FALLBACK = /* @__PURE__ */ new Set(["Noto Sans JP", "Noto Sans KR", "Noto Emoji"]);
238
+ var BEYOND_LATIN = /[^\u0000-\u024f\u1e00-\u1eff\u2000-\u20cf\u2100-\u218f]/;
239
+ function fontsForDef(def) {
240
+ const keys = /* @__PURE__ */ new Set();
241
+ const seen = /* @__PURE__ */ new Set();
242
+ const walk = (o) => {
243
+ if (!o || typeof o !== "object" || seen.has(o)) return;
244
+ seen.add(o);
245
+ if (Array.isArray(o)) {
246
+ for (const x of o) walk(x);
247
+ return;
248
+ }
249
+ if (o.fontFamily != null || o.fontWeight != null || o.fontStyle != null) keys.add(resolveFontKey(o.fontFamily, o.fontWeight, o.fontStyle));
250
+ if (o.type === "chart") keys.add(resolveFontKey(o.fontFamily, "bold", "normal"));
251
+ for (const [k, v] of Object.entries(o)) if (v && typeof v === "object" && k !== "dataSources" && k !== "data") walk(v);
252
+ };
253
+ walk(def);
254
+ return [...keys];
255
+ }
256
+ function fontsFor(texts) {
257
+ const keys = /* @__PURE__ */ new Set(), seen = /* @__PURE__ */ new Set();
258
+ let shaper = false;
259
+ for (const t of texts) {
260
+ if (typeof t !== "string" || !BEYOND_LATIN.test(t)) continue;
261
+ for (const ch of t) {
262
+ const cp = (
263
+ /** @type {number} */
264
+ ch.codePointAt(0)
265
+ );
266
+ if (cp < 592 || seen.has(cp)) continue;
267
+ seen.add(cp);
268
+ for (const [a, b, family] of FALLBACK) {
269
+ if (cp < /** @type {number} */
270
+ a || cp > /** @type {number} */
271
+ b) continue;
272
+ keys.add(resolveFontKey(String(family), 400, "normal")).add(resolveFontKey(String(family), 700, "normal"));
273
+ if (!SIMPLE_FALLBACK.has(String(family))) shaper = true;
274
+ break;
275
+ }
276
+ }
277
+ }
278
+ if (shaper) keys.add(SHAPER);
279
+ return [...keys];
280
+ }
281
+ var FontStore = class {
282
+ /** @param {(key: string) => Promise<ArrayBuffer|Uint8Array>} loader */
283
+ constructor(loader) {
284
+ this.loader = loader;
285
+ this.fonts = /* @__PURE__ */ new Map();
286
+ this.bytes = /* @__PURE__ */ new Map();
287
+ this.pending = /* @__PURE__ */ new Map();
288
+ this.failed = /* @__PURE__ */ new Set();
289
+ this.shaper = null;
290
+ this.hb = /* @__PURE__ */ new Map();
291
+ }
292
+ /** @param {string[]} keys */
293
+ async load(keys = ALL_FONT_KEYS) {
294
+ await Promise.all(keys.map((k) => {
295
+ if (this.fonts.has(k) || this.failed.has(k) || k === SHAPER && this.shaper) return null;
296
+ if (!this.pending.has(k)) {
297
+ this.pending.set(k, (async () => {
298
+ try {
299
+ const b = await this.loader(k);
300
+ const u8 = b instanceof Uint8Array ? b : new Uint8Array(b);
301
+ if (k === SHAPER) {
302
+ this.shaper = await createShaper(u8);
303
+ return;
304
+ }
305
+ this.fonts.set(k, fontkit.create(u8));
306
+ this.bytes.set(k, u8);
307
+ } catch (e) {
308
+ this.pending.delete(k);
309
+ if (k === CORE_FONT_KEY) throw e;
310
+ this.failed.add(k);
311
+ }
312
+ })());
313
+ }
314
+ return this.pending.get(k);
315
+ }));
316
+ }
317
+ /** @param {string} key */
318
+ has(key) {
319
+ return this.fonts.has(key);
320
+ }
321
+ /** The HarfBuzz font for a loaded key (the shaper must be loaded). @param {string} key */
322
+ hbFont(key) {
323
+ let f = this.hb.get(key);
324
+ if (!f) {
325
+ f = this.shaper.font(this.bytes.get(key));
326
+ this.hb.set(key, f);
327
+ }
328
+ return f;
329
+ }
330
+ /** @param {string} key */
331
+ get(key) {
332
+ const f = this.fonts.get(key);
333
+ if (!f) throw new Error(`Font "${key}" is not loaded`);
334
+ return f;
335
+ }
336
+ };
337
+
338
+ // src/engine/image.js
339
+ var IMAGE_LIMITS = {
340
+ bytes: 10 * 1024 * 1024,
341
+ // one image
342
+ total: 50 * 1024 * 1024,
343
+ // all images of one render (each distinct image counted once)
344
+ pixels: 4e7,
345
+ // a PNG larger than this is not decoded (a small file can inflate to gigabytes)
346
+ svgBytes: 2 * 1024 * 1024,
347
+ // an SVG drawn as vector paths in the PDF
348
+ svgShapes: 1e4
349
+ };
350
+ var PX = 0.75;
351
+ var MIME = { png: "image/png", jpeg: "image/jpeg", gif: "image/gif", webp: "image/webp", svg: "image/svg+xml" };
352
+ function sniff(b) {
353
+ if (b.length >= 8 && b[0] === 137 && b[1] === 80 && b[2] === 78 && b[3] === 71) return "png";
354
+ if (b.length >= 3 && b[0] === 255 && b[1] === 216 && b[2] === 255) return "jpeg";
355
+ if (b.length >= 6 && b[0] === 71 && b[1] === 73 && b[2] === 70 && b[3] === 56) return "gif";
356
+ if (b.length >= 12 && b[0] === 82 && b[1] === 73 && b[2] === 70 && b[3] === 70 && b[8] === 87 && b[9] === 69 && b[10] === 66 && b[11] === 80) return "webp";
357
+ const head = String.fromCharCode(...b.subarray(0, 512)).replace(/^|^\xEF\xBB\xBF/, "").trimStart();
358
+ if (/^<(\?xml|svg|!--|!DOCTYPE svg)/i.test(head) && /<svg[\s>]/i.test(head + (b.length > 512 ? "<svg " : ""))) return "svg";
359
+ return null;
360
+ }
361
+ function toBase64(b) {
362
+ let s = "";
363
+ for (let i = 0; i < b.length; i += 32768) s += String.fromCharCode(...b.subarray(i, i + 32768));
364
+ return btoa(s);
365
+ }
366
+ function fromBase64(s) {
367
+ const bin = atob(s);
368
+ const out = new Uint8Array(bin.length);
369
+ for (let i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);
370
+ return out;
371
+ }
372
+ var B64 = /^[A-Za-z0-9+/]+={0,2}$/;
373
+ function toDataUri(v) {
374
+ if (v instanceof ArrayBuffer) v = new Uint8Array(v);
375
+ if (v instanceof Uint8Array) {
376
+ if (v.length > IMAGE_LIMITS.bytes) return null;
377
+ const type2 = sniff(v);
378
+ return type2 ? `data:${MIME[type2]};base64,${toBase64(v)}` : null;
379
+ }
380
+ if (typeof v !== "string" || v.length < 16 || v.startsWith("data:")) return v;
381
+ if (/[^A-Za-z0-9+/=\r\n]/.test(v)) return v;
382
+ const s = v.replace(/[\r\n]/g, "");
383
+ if (!B64.test(s) || s.length % 4) return v;
384
+ let type;
385
+ try {
386
+ type = sniff(fromBase64(s.slice(0, 700)));
387
+ } catch {
388
+ return v;
389
+ }
390
+ return type ? `data:${MIME[type]};base64,${s}` : v;
391
+ }
392
+ function splitDataUri(uri) {
393
+ if (typeof uri !== "string" || !/^data:/i.test(uri)) return null;
394
+ const c = uri.indexOf(",");
395
+ if (c < 0) return null;
396
+ const meta = uri.slice(5, c);
397
+ return { meta, b64: meta.slice(meta.lastIndexOf(";") + 1).trim().toLowerCase() === "base64" && meta.includes(";"), body: uri.slice(c + 1) };
398
+ }
399
+ function dataUriBytes(uri) {
400
+ const d = splitDataUri(uri);
401
+ if (!d) return 0;
402
+ return d.b64 ? Math.floor(d.body.length * 3 / 4) : d.body.length;
403
+ }
404
+ function dataUriHead(uri, max = 262144) {
405
+ const d = splitDataUri(uri);
406
+ if (!d) return null;
407
+ try {
408
+ if (d.b64) return fromBase64(d.body.slice(0, Number.isFinite(max) ? Math.ceil(max / 3) * 4 : void 0).replace(/\s/g, ""));
409
+ return new TextEncoder().encode(decodeURIComponent(d.body.slice(0, max)));
410
+ } catch {
411
+ return null;
412
+ }
413
+ }
414
+ function dataUriBytesOf(uri) {
415
+ return dataUriHead(uri, Infinity);
416
+ }
417
+ var UNIT = { px: 1, pt: 4 / 3, pc: 16, mm: 96 / 25.4, cm: 96 / 2.54, in: 96, "": 1 };
418
+ function svgLength(v) {
419
+ const t = String(v ?? "").trim();
420
+ if (t.length > 64) return null;
421
+ const m = /^([\d.]+(?:e[-+]?\d+)?)(px|pt|pc|mm|cm|in)?$/i.exec(t);
422
+ if (!m) return null;
423
+ const n = Number(m[1]) * UNIT[(m[2] || "").toLowerCase()];
424
+ return Number.isFinite(n) && n > 0 ? n : null;
425
+ }
426
+ var isName = (c) => c >= "a" && c <= "z" || c >= "A" && c <= "Z" || c >= "0" && c <= "9" || c === "_" || c === ":" || c === "-" || c === ".";
427
+ var isSpace = (c) => c === " " || c === " " || c === "\n" || c === "\r";
428
+ function* xmlTags(text) {
429
+ const n = text.length;
430
+ let i = 0;
431
+ while (i < n) {
432
+ const lt = text.indexOf("<", i);
433
+ if (lt < 0) return;
434
+ if (text.startsWith("<!--", lt)) {
435
+ const e = text.indexOf("-->", lt + 4);
436
+ if (e < 0) return;
437
+ i = e + 3;
438
+ continue;
439
+ }
440
+ if (text.startsWith("<![CDATA[", lt)) {
441
+ const e = text.indexOf("]]>", lt + 9);
442
+ if (e < 0) return;
443
+ i = e + 3;
444
+ continue;
445
+ }
446
+ if (text[lt + 1] === "?" || text[lt + 1] === "!") {
447
+ const e = text.indexOf(">", lt + 2);
448
+ if (e < 0) return;
449
+ i = e + 1;
450
+ continue;
451
+ }
452
+ let j = lt + 1, q = "";
453
+ for (; j < n; j++) {
454
+ const c = text[j];
455
+ if (q) {
456
+ if (c === q) q = "";
457
+ } else if (c === '"' || c === "'") q = c;
458
+ else if (c === ">") break;
459
+ }
460
+ if (j >= n) return;
461
+ i = j + 1;
462
+ let body = text.slice(lt + 1, j);
463
+ const close = body[0] === "/";
464
+ if (close) body = body.slice(1);
465
+ const self = body.endsWith("/");
466
+ if (self) body = body.slice(0, -1);
467
+ let k = 0;
468
+ while (k < body.length && isName(body[k])) k++;
469
+ const name = body.slice(0, k);
470
+ if (!/^[a-zA-Z]/.test(name)) continue;
471
+ yield { close, name, attrs: body.slice(k), self };
472
+ }
473
+ }
474
+ function xmlAttrs(s) {
475
+ const a = /* @__PURE__ */ Object.create(null);
476
+ const n = s.length;
477
+ let i = 0;
478
+ while (i < n) {
479
+ while (i < n && !isName(s[i])) i++;
480
+ const st = i;
481
+ while (i < n && isName(s[i])) i++;
482
+ const name = s.slice(st, i);
483
+ while (i < n && isSpace(s[i])) i++;
484
+ if (s[i] !== "=") continue;
485
+ i++;
486
+ while (i < n && isSpace(s[i])) i++;
487
+ const q = s[i];
488
+ if (q !== '"' && q !== "'") continue;
489
+ const e = s.indexOf(q, i + 1);
490
+ if (e < 0) break;
491
+ if (name) a[name] = s.slice(i + 1, e);
492
+ i = e + 1;
493
+ }
494
+ return a;
495
+ }
496
+ function svgRootAttrs(text) {
497
+ for (const t of xmlTags(String(text))) if (!t.close && t.name.toLowerCase() === "svg") return xmlAttrs(t.attrs);
498
+ return null;
499
+ }
500
+ function svgSize(text) {
501
+ const a = svgRootAttrs(text);
502
+ if (!a) return null;
503
+ const vb = String(a.viewBox || "").trim().split(/[\s,]+/).map(Number);
504
+ const hasVb = vb.length === 4 && vb.every(Number.isFinite) && vb[2] > 0 && vb[3] > 0;
505
+ let w = svgLength(a.width), h = svgLength(a.height);
506
+ if (w && !h) h = hasVb ? w * vb[3] / vb[2] : null;
507
+ if (h && !w) w = hasVb ? h * vb[2] / vb[3] : null;
508
+ if (!w && hasVb) {
509
+ w = vb[2];
510
+ h = vb[3];
511
+ }
512
+ return w && h ? { w, h } : null;
513
+ }
514
+ function imageInfoOf(b) {
515
+ const type = sniff(b);
516
+ if (!type) return null;
517
+ const u32 = (i) => (b[i] << 24 | b[i + 1] << 16 | b[i + 2] << 8 | b[i + 3]) >>> 0;
518
+ if (type === "png") return pngInfo(b);
519
+ if (type === "gif" && b.length >= 10) return { type, w: b[6] | b[7] << 8, h: b[8] | b[9] << 8 };
520
+ if (type === "jpeg") {
521
+ for (let i = 2; i + 9 < b.length; ) {
522
+ if (b[i] !== 255) {
523
+ i++;
524
+ continue;
525
+ }
526
+ const mk = b[i + 1];
527
+ if (mk === 255) {
528
+ i++;
529
+ continue;
530
+ }
531
+ if (mk === 216 || mk === 1 || mk >= 208 && mk <= 215) {
532
+ i += 2;
533
+ continue;
534
+ }
535
+ if (mk >= 192 && mk <= 207 && mk !== 196 && mk !== 200 && mk !== 204) return { type, w: b[i + 7] << 8 | b[i + 8], h: b[i + 5] << 8 | b[i + 6] };
536
+ i += 2 + (b[i + 2] << 8 | b[i + 3]);
537
+ }
538
+ return { type };
539
+ }
540
+ if (type === "svg") {
541
+ const s = svgSize(new TextDecoder().decode(b));
542
+ return s ? { type, ...s } : { type };
543
+ }
544
+ return { type };
545
+ }
546
+ function pngInfo(b) {
547
+ const u32 = (i) => (b[i] << 24 | b[i + 1] << 16 | b[i + 2] << 8 | b[i + 3]) >>> 0;
548
+ let w = 0, h = 0, ihdrs = 0, animated = false;
549
+ for (let off = 8; off + 8 <= b.length; ) {
550
+ const len = u32(off);
551
+ const t = String.fromCharCode(b[off + 4], b[off + 5], b[off + 6], b[off + 7]);
552
+ const d = off + 8;
553
+ if (t === "IHDR" && d + 8 <= b.length) {
554
+ w = u32(d);
555
+ h = u32(d + 4);
556
+ ihdrs++;
557
+ } else if (t === "acTL" || t === "fcTL" || t === "fdAT") animated = true;
558
+ else if (t === "IEND") break;
559
+ off = d + len + 4;
560
+ }
561
+ if (!ihdrs) return { type: "png" };
562
+ return { type: "png", w, h, ...animated || ihdrs > 1 ? { suspect: true } : {} };
563
+ }
564
+ function imageInfo(uri) {
565
+ const b = typeof uri === "string" && uri.startsWith("data:") ? dataUriHead(uri) : null;
566
+ return b ? imageInfoOf(b) : null;
567
+ }
568
+ function resolveImageSrc(v, who, c) {
569
+ var _a;
570
+ if (v == null || v === "" || v === "#Error") return null;
571
+ if (typeof v === "string" && v.startsWith("embedded:")) {
572
+ const name = v.slice(9);
573
+ const img = c.images && Object.prototype.hasOwnProperty.call(c.images, name) ? c.images[name] : void 0;
574
+ if (typeof img !== "string" || !/^data:image\/[\w.+-]+[;,]/i.test(img)) {
575
+ c.warn(`${who}: there is no embedded image named "${name}" (add it to the report's images as a data:image/… URI)`);
576
+ return null;
577
+ }
578
+ v = img;
579
+ }
580
+ const memo = c.budget ? (_a = c.budget).memo || (_a.memo = /* @__PURE__ */ new Map()) : null;
581
+ let u = memo?.get(v);
582
+ if (u === void 0) {
583
+ u = toDataUri(v);
584
+ memo?.set(v, u);
585
+ }
586
+ if (u == null) {
587
+ c.warn(`${who}: the image data is not a PNG, JPEG, GIF, WebP or SVG image, or is larger than 10 MB`);
588
+ return null;
589
+ }
590
+ const s = String(u);
591
+ if (s.startsWith("data:")) {
592
+ const n = dataUriBytes(s);
593
+ if (n > IMAGE_LIMITS.bytes) {
594
+ c.warn(`${who}: the image is ${(n / 1048576).toFixed(1)} MB; images are limited to 10 MB each, so it is left out`);
595
+ return null;
596
+ }
597
+ const b = c.budget;
598
+ if (b && !b.seen.has(s)) {
599
+ if (b.bytes + n > IMAGE_LIMITS.total) {
600
+ c.warn(`${who}: the report's images pass 50 MB in all, so this one is left out`);
601
+ return null;
602
+ }
603
+ b.seen.add(s);
604
+ b.bytes += n;
605
+ }
606
+ }
607
+ return s;
608
+ }
609
+
610
+ export {
611
+ OPTIONAL_KEYS,
612
+ FONT_FAMILIES,
613
+ BUNDLED_FAMILIES,
614
+ DEFAULT_FAMILY,
615
+ ALL_FONT_KEYS,
616
+ CORE_FONT_KEY,
617
+ PRELOAD_KEYS,
618
+ SHAPER,
619
+ fontFile,
620
+ setCustomFonts,
621
+ resolveFontKey,
622
+ fontCss,
623
+ allFontKeys,
624
+ fallbackKeys,
625
+ unicodeRange,
626
+ fallbackKey,
627
+ fontsForDef,
628
+ fontsFor,
629
+ FontStore,
630
+ IMAGE_LIMITS,
631
+ PX,
632
+ dataUriBytes,
633
+ dataUriBytesOf,
634
+ svgLength,
635
+ xmlTags,
636
+ xmlAttrs,
637
+ svgRootAttrs,
638
+ imageInfoOf,
639
+ imageInfo,
640
+ resolveImageSrc
641
+ };
642
+ //# sourceMappingURL=chunk-Z7MKH66Z.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/engine/text/fonts.js", "../../../src/engine/text/shaper.js", "../../../src/engine/image.js"],
4
+ "mappings": "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",
5
+ "names": ["type"]
6
+ }