@printstack/print-studio 0.1.2 → 0.1.3

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.
@@ -0,0 +1,1841 @@
1
+ import { n as e } from "./rolldown-runtime-QGRDbDUS.js";
2
+ import { $ as t, $t as n, At as r, B as i, Ct as a, Dt as o, Et as s, H as c, Ht as l, It as u, L as d, Lt as f, M as p, N as m, Ot as h, P as g, Qt as _, St as v, Tt as y, V as b, X as x, Xt as S, Y as ee, Yt as C, Zt as w, _ as te, an as T, b as ne, ct as re, dt as E, en as ie, et as ae, g as oe, h as se, it as ce, j as D, kt as O, mt as k, n as le, nn as ue, on as A, qt as de, rn as fe, rt as pe, t as me, tn as j, tt as he, v as ge, wt as _e, x as ve, y as ye, z as be, zt as xe } from "./elements-YX-XUHtf.js";
3
+ import { A as M, B as N, L as Se, R as P, j as Ce } from "./cloneDeep-waBDTGc3.js";
4
+ // src/components/error-fallback/exceptions/SilentException.ts
5
+ var we = Symbol.for("portable-error-handling.SilentException"), Te = class extends Error {
6
+ [we] = !0;
7
+ constructor(e, t) {
8
+ super(e, t), this.name = "SilentException";
9
+ }
10
+ };
11
+ function Ee(e) {
12
+ if (e instanceof Te) return !0;
13
+ if (typeof e != "object" || !e) return !1;
14
+ try {
15
+ return Reflect.get(e, we) === !0;
16
+ } catch {
17
+ return !1;
18
+ }
19
+ }
20
+ // src/components/error-fallback/rules/silent-exception.ts
21
+ var De = {
22
+ handle: function() {
23
+ return {
24
+ code: "silent",
25
+ handled: !0,
26
+ report: !1
27
+ };
28
+ },
29
+ match: function(e) {
30
+ return Ee(e.error);
31
+ }
32
+ };
33
+ // src/components/error-fallback/core.ts
34
+ function Oe(e = {}) {
35
+ let t = [...e.rules ?? []];
36
+ e.defaultRules !== !1 && t.push(De);
37
+ let n = t.map((e) => ({ rule: e })), r = /* @__PURE__ */ new WeakMap(), i = /* @__PURE__ */ new Set();
38
+ async function a(t, n) {
39
+ try {
40
+ e.onFailure ? await e.onFailure(t, n) : console.error(t);
41
+ } catch (e) {
42
+ console.error(e);
43
+ }
44
+ }
45
+ async function o(t) {
46
+ for (let e of [...i]) try {
47
+ e(t);
48
+ } catch (e) {
49
+ await a(e, t);
50
+ }
51
+ let r = { handled: !1 };
52
+ for (let e of n.slice()) try {
53
+ if (e.rule.match(t)) {
54
+ r = await e.rule.handle(t);
55
+ break;
56
+ }
57
+ } catch (e) {
58
+ await a(e, t);
59
+ }
60
+ try {
61
+ if (r.report === !1) return {
62
+ ...r,
63
+ duplicate: !1
64
+ };
65
+ e.report ? await e.report(t, r) : r.handled || console.error(t.error);
66
+ } catch (e) {
67
+ await a(e, t);
68
+ }
69
+ return {
70
+ ...r,
71
+ duplicate: !1
72
+ };
73
+ }
74
+ function s(e, t = { source: "manual" }) {
75
+ let n = {
76
+ context: t,
77
+ error: e
78
+ };
79
+ if (!(typeof e == "object" && e || typeof e == "function")) return o(n);
80
+ let i = r.get(e);
81
+ if (i) return i.then((e) => ({
82
+ ...e,
83
+ duplicate: !0
84
+ }));
85
+ let a = Promise.resolve().then(() => o(n));
86
+ return r.set(e, a), a;
87
+ }
88
+ function c(e, t) {
89
+ let r = { rule: e };
90
+ return t?.prepend ? n.unshift(r) : n.push(r), function() {
91
+ let e = n.indexOf(r);
92
+ e !== -1 && n.splice(e, 1);
93
+ };
94
+ }
95
+ function l(e) {
96
+ return i.add(e), () => {
97
+ i.delete(e);
98
+ };
99
+ }
100
+ return {
101
+ addRule: c,
102
+ capture: s,
103
+ subscribe: l
104
+ };
105
+ }
106
+ // src/core/render/resource-task.ts
107
+ async function F(e, t = {}) {
108
+ t.signal?.throwIfAborted();
109
+ let n = t.timeoutMs ?? 6e4;
110
+ if (!Number.isFinite(n) || n <= 0) throw Error("Resource timeout must be a positive finite number");
111
+ let r = new AbortController(), i = () => r.abort(t.signal?.reason);
112
+ t.signal?.addEventListener("abort", i, { once: !0 });
113
+ let a = setTimeout(() => {
114
+ r.abort(new M(N("core.frame.loadTimeout"), { code: "render.resource-timeout" }));
115
+ }, n), o = () => {}, s = new Promise((e, t) => {
116
+ o = () => t(r.signal.reason), r.signal.addEventListener("abort", o, { once: !0 });
117
+ });
118
+ try {
119
+ return await Promise.race([e(r.signal), s]);
120
+ } finally {
121
+ clearTimeout(a), t.signal?.removeEventListener("abort", i), r.signal.removeEventListener("abort", o), r.abort();
122
+ }
123
+ }
124
+ // src/runtime/document-output.ts
125
+ function ke(e, t, n) {
126
+ async function r(r, i, a) {
127
+ if (!t) throw Error("Browser output is unavailable in this editor context");
128
+ let o = await e.html(r, i, void 0, {
129
+ signal: a?.signal,
130
+ timeoutMs: a?.timeoutMs
131
+ });
132
+ return n(), {
133
+ browser: t,
134
+ result: o
135
+ };
136
+ }
137
+ return {
138
+ async preview(e, t, n) {
139
+ return F(async (i) => {
140
+ let a = {
141
+ ...n,
142
+ signal: i
143
+ }, { browser: o, result: s } = await r(e, t, a), c = await o.preview(s.html, a);
144
+ return {
145
+ ...c,
146
+ warnings: [...s.warnings, ...c.warnings]
147
+ };
148
+ }, n);
149
+ },
150
+ async print(e, t, n) {
151
+ return F(async (i) => {
152
+ let a = {
153
+ ...n,
154
+ signal: i
155
+ }, { browser: o, result: s } = await r(e, t, a), c = await o.print(s.html, a);
156
+ return { warnings: [...s.warnings, ...c] };
157
+ }, n);
158
+ },
159
+ toHTML: e.html,
160
+ toPDF: e.pdf
161
+ };
162
+ }
163
+ // src/core/follow-layout.ts
164
+ function I(e) {
165
+ return ue(e.map((e) => ie(e, e.rotation)));
166
+ }
167
+ function Ae(e) {
168
+ return Me(e).patches;
169
+ }
170
+ function je(e, t, n = []) {
171
+ return Me(e, new Set(t), new Set(n)).gaps;
172
+ }
173
+ function Me(e, t = /* @__PURE__ */ new Set(), n = /* @__PURE__ */ new Set()) {
174
+ let r = [], i = [];
175
+ if (!e.followBlocks?.length) return {
176
+ gaps: r,
177
+ patches: i
178
+ };
179
+ l(e);
180
+ for (let a of e.pages) {
181
+ let o = (e.followBlocks ?? []).filter((e) => e.pageId === a.id);
182
+ if (o.length === 0) continue;
183
+ let s = new Map(a.elements.map((e) => [e.id, { ...e }])), c = /* @__PURE__ */ new Set();
184
+ function l(e) {
185
+ return I(e.flatMap((e) => {
186
+ let t = s.get(e);
187
+ return t ? [t] : [];
188
+ }));
189
+ }
190
+ function u(a) {
191
+ if (c.has(a.id)) return;
192
+ let d = [];
193
+ if (a.target.kind === "element") d = [a.target.id];
194
+ else if (a.target.kind === "repeatGroup") d = e.repeatGroups?.find((e) => e.id === a.target.id)?.elementIds ?? [];
195
+ else {
196
+ let e = o.find((e) => e.id === a.target.id);
197
+ e && (u(e), d = e.elementIds);
198
+ }
199
+ c.add(a.id);
200
+ let f = l(d), p = l(a.elementIds);
201
+ if (!f || !p) return;
202
+ let m = a.elementIds.some((e) => n.has(e) || t.has(e)) ? p.y - f.y - f.height : a.gap;
203
+ m !== a.gap && r.push({
204
+ gap: m,
205
+ id: a.id
206
+ });
207
+ let h = f.y + f.height + m - p.y;
208
+ for (let e of a.elementIds) {
209
+ let t = s.get(e);
210
+ if (!t) continue;
211
+ let n = j(t, 0, h);
212
+ n.y !== t.y && (Object.assign(t, n), i.push({
213
+ id: e,
214
+ patch: n
215
+ }));
216
+ }
217
+ }
218
+ for (let e of o) u(e);
219
+ }
220
+ return {
221
+ gaps: r,
222
+ patches: i
223
+ };
224
+ }
225
+ // src/core/render/resource-data.ts
226
+ async function Ne(e, t) {
227
+ if (e.startsWith("data:")) return e;
228
+ let n = await fetch(e, { signal: t });
229
+ if (!n.ok) throw Error(`Resource request failed: ${n.status} ${e}`);
230
+ let r = new Uint8Array(await n.arrayBuffer());
231
+ t?.throwIfAborted();
232
+ let i = "";
233
+ for (let e = 0; e < r.length; e += 8192) i += String.fromCharCode(...r.subarray(e, e + 8192));
234
+ return `data:${n.headers.get("content-type")?.split(";")[0] || "application/octet-stream"};base64,${btoa(i)}`;
235
+ }
236
+ // src/core/render/fonts.ts
237
+ function L(e) {
238
+ return JSON.stringify(e).replaceAll("<", "\\3c ");
239
+ }
240
+ function R(e) {
241
+ return e.trim().replace(/^["']|["']$/g, "").toLowerCase();
242
+ }
243
+ function Pe(e, t) {
244
+ return JSON.stringify([
245
+ R(e),
246
+ t.style || "normal",
247
+ (t.weight || "400").replace("normal", "400").replace("bold", "700"),
248
+ (t.unicodeRange || "U+0-10FFFF").replaceAll(" ", "").toUpperCase()
249
+ ]);
250
+ }
251
+ async function Fe(e, t) {
252
+ let n = /url\(\s*(?:"([^"]*)"|'([^']*)'|([^)]*))\s*\)/g, r;
253
+ for (let i of e.source.matchAll(n)) try {
254
+ let n = await Ne(i[1] ?? i[2] ?? i[3].trim(), t);
255
+ if (typeof FontFace < "u") {
256
+ let t = new FontFace(e.family, `url("${n}")`, e.descriptors);
257
+ typeof t.load == "function" && await t.load();
258
+ }
259
+ return t?.throwIfAborted(), e.css.replace(e.source, `url("${n}")`);
260
+ } catch (e) {
261
+ t?.throwIfAborted(), r = e;
262
+ }
263
+ if (r && !e.source.includes("local(")) throw r;
264
+ return e.css;
265
+ }
266
+ function Ie(e, t) {
267
+ return e.replace(/url\(\s*(?:"([^"]*)"|'([^']*)'|([^)]*))\s*\)/g, (e, n, r, i) => `url(${L(new URL(n ?? r ?? i.trim(), t).href)})`);
268
+ }
269
+ function Le(e) {
270
+ let t = [], n = /* @__PURE__ */ new Set();
271
+ function r(e) {
272
+ if (n.has(e)) return;
273
+ n.add(e);
274
+ let t;
275
+ try {
276
+ t = e.cssRules;
277
+ } catch (e) {
278
+ if (e instanceof DOMException && e.name === "SecurityError") return;
279
+ throw e;
280
+ }
281
+ i(t, e.href ?? document.baseURI);
282
+ }
283
+ function i(e, n) {
284
+ for (let a of Array.from(e)) if (a.type === 5) {
285
+ let e = a, r = e.style.getPropertyValue("font-family"), i = Ie(e.style.getPropertyValue("src"), n), o = {
286
+ stretch: e.style.getPropertyValue("font-stretch") || "normal",
287
+ style: e.style.getPropertyValue("font-style") || "normal",
288
+ unicodeRange: e.style.getPropertyValue("unicode-range") || "U+0-10FFFF",
289
+ weight: e.style.getPropertyValue("font-weight") || "normal"
290
+ };
291
+ t.push({
292
+ css: Ie(e.cssText, n),
293
+ descriptors: o,
294
+ family: R(r),
295
+ source: i
296
+ });
297
+ } else if (a.type === 3) {
298
+ let e = a.styleSheet;
299
+ e && r(e);
300
+ } else "cssRules" in a && i(a.cssRules, n);
301
+ }
302
+ for (let e of [...Array.from(document.styleSheets), ...document.adoptedStyleSheets ?? []]) e.disabled || r(e);
303
+ for (let n of e) {
304
+ let e = `url(${L(new URL(n.url, document.baseURI).href)})`, r = n.style ?? "normal", i = n.weight ?? "normal";
305
+ t.push({
306
+ configured: !0,
307
+ css: `@font-face { font-family: ${L(n.family)}; src: ${e}; font-style: ${r}; font-weight: ${i}; font-display: block; }`,
308
+ descriptors: {
309
+ style: r,
310
+ weight: i
311
+ },
312
+ family: R(n.family),
313
+ source: e
314
+ });
315
+ }
316
+ return t;
317
+ }
318
+ async function Re(e, t) {
319
+ let n = /* @__PURE__ */ new Set(), r = /* @__PURE__ */ new Map();
320
+ for (let t of e) {
321
+ let e = `${t.style ?? "normal"} ${t.weight ?? "400"} 16px ${L(t.family)}`, n = r.get(e) ?? /* @__PURE__ */ new Set();
322
+ for (let e of t.text || " ") n.add(e);
323
+ r.set(e, n);
324
+ }
325
+ return await Promise.all(Array.from(r, async ([e, r]) => {
326
+ t?.throwIfAborted();
327
+ try {
328
+ let t = await document.fonts.load(e, Array.from(r).join(""));
329
+ for (let e of t) n.add(Pe(e.family, e));
330
+ } catch (n) {
331
+ throw t?.throwIfAborted(), new M(N("core.font.loadFailed", { font: e }), {
332
+ cause: n,
333
+ code: "render.font-load-failed"
334
+ });
335
+ }
336
+ t?.throwIfAborted();
337
+ })), n;
338
+ }
339
+ async function ze(e, t, n) {
340
+ let r = e.filter((e) => {
341
+ let n = typeof FontFace > "u" ? e.descriptors : new FontFace(e.family, e.source, e.descriptors);
342
+ return t.has(Pe(e.family, n));
343
+ }), i = await Promise.all(r.map((e) => Fe(e, n)));
344
+ return Array.from(new Set(i)).join("\n");
345
+ }
346
+ async function Be(e, t = [], n) {
347
+ if (n?.throwIfAborted(), typeof document > "u" || !document.fonts || e.length === 0) return {
348
+ css: "",
349
+ dispose() {}
350
+ };
351
+ let r = new Set(e.map((e) => R(e.family))), i = Le(t).filter((e) => r.has(e.family)), a = [];
352
+ function o() {
353
+ for (let e of a) document.fonts.delete(e);
354
+ }
355
+ n?.addEventListener("abort", o, { once: !0 });
356
+ try {
357
+ if (typeof FontFace < "u") for (let e of i) {
358
+ if (!e.configured) continue;
359
+ let t = new FontFace(e.family, e.source, e.descriptors);
360
+ document.fonts.add(t), a.push(t);
361
+ }
362
+ let t = await ze(i, await Re(e, n), n);
363
+ return n?.throwIfAborted(), {
364
+ css: t,
365
+ dispose: o
366
+ };
367
+ } catch (e) {
368
+ throw o(), n?.throwIfAborted(), e instanceof M ? e : new M(N("core.font.loadFailed", { font: Array.from(r).join(", ") }), {
369
+ cause: e,
370
+ code: "render.font-load-failed"
371
+ });
372
+ } finally {
373
+ n?.removeEventListener("abort", o);
374
+ }
375
+ }
376
+ function Ve(e) {
377
+ typeof document < "u" && document.fonts && e.fonts && typeof document.fonts.forEach == "function" && document.fonts.forEach((t) => {
378
+ t.status === "loaded" && e.fonts.add(t);
379
+ });
380
+ }
381
+ // src/core/render/frame.ts
382
+ function He(e, t, n = {}) {
383
+ return new Promise((r, i) => {
384
+ let a = e.contentDocument, o = !1, s = !1, c = setTimeout(() => {
385
+ u(new M(N("core.frame.loadTimeout")));
386
+ }, n.timeoutMs ?? 6e4), l = setInterval(f, 100);
387
+ function u(t) {
388
+ o || (o = !0, clearTimeout(c), clearInterval(l), e.removeEventListener("load", h), n.signal?.removeEventListener("abort", d), t ? i(t) : r());
389
+ }
390
+ function d() {
391
+ u(new DOMException("Aborted", "AbortError"));
392
+ }
393
+ function f() {
394
+ let t = e.contentDocument;
395
+ if (o || !t || t === a) return;
396
+ let r = Array.from(t.images);
397
+ n.onProgress?.({
398
+ loaded: r.filter((e) => e.complete && e.naturalWidth > 0).length,
399
+ total: r.length
400
+ });
401
+ }
402
+ async function p() {
403
+ let t = e.contentDocument;
404
+ if (!(!t || t === a || s || o)) {
405
+ s = !0;
406
+ try {
407
+ Ve(t), f(), await Promise.all(Array.from(t.images).map(async (e) => {
408
+ if (!e.complete || e.naturalWidth === 0) m(e);
409
+ else if (typeof e.decode == "function") try {
410
+ await e.decode();
411
+ } catch {
412
+ m(e);
413
+ }
414
+ })), t.fonts && (t.body.getBoundingClientRect(), await t.fonts.ready, t.fonts.forEach?.((e) => {
415
+ if (e.status === "error") throw new M(N("core.font.loadFailed", { font: e.family }), { code: "render.font-load-failed" });
416
+ })), u();
417
+ } catch (e) {
418
+ u(e);
419
+ }
420
+ }
421
+ }
422
+ function m(e) {
423
+ if (o) return;
424
+ let t = N("core.image.loadFailed", { imageUrl: e.currentSrc || e.getAttribute("src") || "" }), r = e.ownerDocument.createElement("div");
425
+ r.className = "print-image__failure", r.style.cssText = e.style.cssText, Object.assign(r.style, {
426
+ alignItems: "center",
427
+ background: "#f3f3f3",
428
+ border: "1px dashed #999999",
429
+ boxSizing: "border-box",
430
+ color: "#666666",
431
+ display: "flex",
432
+ fontSize: "12px",
433
+ justifyContent: "center",
434
+ overflow: "hidden",
435
+ overflowWrap: "anywhere",
436
+ textAlign: "center"
437
+ }), r.textContent = N("core.image.loadFailedHint"), r.title = t, e.replaceWith(r), n.onWarning?.(t);
438
+ }
439
+ function h() {
440
+ p();
441
+ }
442
+ e.addEventListener("load", h), n.signal?.addEventListener("abort", d, { once: !0 }), n.signal?.aborted ? d() : (n.onProgress?.({
443
+ loaded: 0,
444
+ total: 0
445
+ }), e.srcdoc = t);
446
+ });
447
+ }
448
+ var z = new class {
449
+ definitions = /* @__PURE__ */ new Map();
450
+ get(e) {
451
+ return this.definitions.get(e)?.at(-1)?.definition;
452
+ }
453
+ list() {
454
+ return [...this.definitions.keys()].flatMap((e) => {
455
+ let t = this.get(e);
456
+ return t ? [t] : [];
457
+ });
458
+ }
459
+ register(e) {
460
+ let t = this.definitions.get(e.name) ?? [], n = { definition: e };
461
+ return t.push(n), this.definitions.set(e.name, t), () => {
462
+ let r = t.indexOf(n);
463
+ r < 0 || (t.splice(r, 1), t.length === 0 && this.definitions.delete(e.name));
464
+ };
465
+ }
466
+ }(), Ue = [
467
+ {
468
+ label: () => N("designer.documentVariables.pageNumber"),
469
+ name: "pageNumber",
470
+ resolve: (e) => e.pageNumber,
471
+ type: "number"
472
+ },
473
+ {
474
+ label: () => N("designer.documentVariables.pageCount"),
475
+ name: "pageCount",
476
+ resolve: (e) => e.pageCount,
477
+ type: "number"
478
+ },
479
+ {
480
+ label: () => N("designer.documentVariables.now"),
481
+ name: "now",
482
+ resolve: (e) => e.now,
483
+ type: "date"
484
+ },
485
+ {
486
+ label: () => N("designer.documentVariables.documentName"),
487
+ name: "documentName",
488
+ resolve: (e) => e.documentName,
489
+ type: "string"
490
+ },
491
+ {
492
+ label: () => N("designer.documentVariables.pageName"),
493
+ name: "pageName",
494
+ resolve: (e) => e.pageName,
495
+ type: "string"
496
+ }
497
+ ];
498
+ for (let e of Ue) z.register(e);
499
+ // src/core/document-variable-resolver.ts
500
+ function B(e) {
501
+ let t = {};
502
+ for (let n of z.list()) Object.defineProperty(t, n.name, {
503
+ enumerable: !0,
504
+ get: () => n.resolve(e)
505
+ });
506
+ return m({ $document: t });
507
+ }
508
+ function V(e, t) {
509
+ if (t) {
510
+ let n = B(t);
511
+ return m({
512
+ ...e,
513
+ ...n.root
514
+ });
515
+ }
516
+ return {
517
+ ...m(e),
518
+ deferExpression(e, t) {
519
+ return H(e) ? `{{ ${t.trim()} }}` : void 0;
520
+ }
521
+ };
522
+ }
523
+ function H(e) {
524
+ return e.startsWith("$document.");
525
+ }
526
+ function We(e, t, n, r) {
527
+ return n.scope(g(e), () => ({
528
+ ...e,
529
+ props: d(e.props, t, r)
530
+ }));
531
+ }
532
+ function Ge(e, t, n, r) {
533
+ let i = B(t);
534
+ return We(e, (e) => c(e, i, n, H), n, r);
535
+ }
536
+ function Ke(e, t, n) {
537
+ return {
538
+ ...e,
539
+ pages: e.pages.map((r, i) => {
540
+ let a = {
541
+ documentName: e.name,
542
+ now: n,
543
+ pageCount: e.pages.length,
544
+ pageName: r.name,
545
+ pageNumber: i + 1
546
+ };
547
+ return {
548
+ ...r,
549
+ elements: r.elements.map((e) => t(e, a))
550
+ };
551
+ })
552
+ };
553
+ }
554
+ function qe(e, t = new D(), n = /* @__PURE__ */ new Date()) {
555
+ return Ke(e, (e, n) => Ge(e, n, t), n);
556
+ }
557
+ function Je(e) {
558
+ let t = V(e), n = `\u0000${k("binding")}:`, r = [], i = RegExp(`${n}(\\d+)\u0000`, "g");
559
+ t.deferExpression = (e, t) => {
560
+ if (!H(e)) return;
561
+ let i = r.push(`{{ ${t} }}`) - 1;
562
+ return `${n}${i}\u0000`;
563
+ };
564
+ function a(e, t, n) {
565
+ let a = [...e.matchAll(i)];
566
+ function o(e) {
567
+ return c(r[Number(e)], t, n);
568
+ }
569
+ return a.length === 1 && a[0][0] === e ? o(a[0][1]) : e.replace(i, (e, t) => {
570
+ let n = o(t);
571
+ return n == null ? "" : String(n);
572
+ });
573
+ }
574
+ function o(e, t) {
575
+ return Ke(e, (e, n) => {
576
+ let r = B(n);
577
+ return We(e, (e) => a(e, r, t), t);
578
+ }, /* @__PURE__ */ new Date());
579
+ }
580
+ return {
581
+ context: t,
582
+ resolve: o
583
+ };
584
+ }
585
+ // src/core/runtime-config.ts
586
+ function U(e = {}) {
587
+ let t = { rendering: {
588
+ worker: !1,
589
+ workerTimeoutMs: 6e4,
590
+ ...e.rendering
591
+ } };
592
+ if (typeof t.rendering.worker != "boolean" || !Number.isFinite(t.rendering.workerTimeoutMs) || t.rendering.workerTimeoutMs <= 0) throw Error("Invalid rendering configuration");
593
+ if (t.rendering.fonts) {
594
+ for (let e of t.rendering.fonts) if (!e.family?.trim() || !e.url?.trim()) throw Error("Font family and URL are required");
595
+ t.rendering.fonts = t.rendering.fonts.map((e) => ({ ...e }));
596
+ }
597
+ return t;
598
+ }
599
+ // src/core/render/render-task.ts
600
+ async function W(e) {
601
+ await e?.();
602
+ }
603
+ async function G(e) {
604
+ e?.throwIfAborted();
605
+ let t = globalThis.scheduler;
606
+ t?.yield ? await t.yield() : await new Promise((e) => setTimeout(e, 0)), e?.throwIfAborted();
607
+ }
608
+ // src/parser/html/html-parser.ts
609
+ var K = class {
610
+ elements;
611
+ id = "html";
612
+ get label() {
613
+ return N("parser.htmlParser.displayName");
614
+ }
615
+ constructor(e = C) {
616
+ this.elements = e;
617
+ }
618
+ async parse(e, t = {}) {
619
+ if (e.pages.length === 0) throw new M(N("parser.htmlParser.emptyDocument"), {
620
+ code: "parse.no-pages",
621
+ detail: N("parser.htmlParser.emptyDocumentDetail")
622
+ });
623
+ let n = e.pages[0], r = [], i = e.pages.length;
624
+ for (let [n, a] of e.pages.entries()) t.signal?.throwIfAborted(), r.push(await this.renderPage(a, e, n, t)), t.onProgress?.({
625
+ completed: n + 1,
626
+ stage: "render",
627
+ total: i
628
+ }), n % 4 == 3 && (await W(t.waitIfPaused), await G(t.signal));
629
+ await W(t.waitIfPaused), t.signal?.throwIfAborted(), t.onProgress?.({
630
+ completed: 0,
631
+ stage: "serialize",
632
+ total: 1
633
+ });
634
+ let a = r.join("\n"), o = Ye(t.title ?? e.name), s = e.pages.map((e, t) => `@page printPage${t} { size: ${q(e.width)}mm ${q(e.height)}mm; margin: 0; }`);
635
+ return [
636
+ "<!doctype html>",
637
+ "<html lang=\"zh-CN\">",
638
+ "<head>",
639
+ "<meta charset=\"UTF-8\" />",
640
+ `<title>${o}</title>`,
641
+ "<style>",
642
+ (t.fontCss ?? "").replaceAll("<", "\\3c "),
643
+ `@page { size: ${q(n.width)}mm ${q(n.height)}mm; margin: 0; }`,
644
+ ...s,
645
+ "*, *::before, *::after { box-sizing: border-box; -webkit-print-color-adjust: exact; print-color-adjust: exact; }",
646
+ "html, body { margin: 0; padding: 0; background: #ffffff; }",
647
+ ".print-page { position: relative; overflow: hidden; break-after: page; page-break-after: always; }",
648
+ ".print-page:last-child { break-after: auto; page-break-after: auto; }",
649
+ "@media screen {",
650
+ " body { background: #525659; padding: 24px 0; }",
651
+ " .print-page { margin: 0 auto 24px; box-shadow: 0 2px 14px rgba(0, 0, 0, 0.45); }",
652
+ "}",
653
+ "</style>",
654
+ "</head>",
655
+ "<body>",
656
+ a,
657
+ "</body>",
658
+ "</html>"
659
+ ].join("\n");
660
+ }
661
+ renderElement(e, t, n, r) {
662
+ let i = this.elements.get(e.type);
663
+ if (!e.visible) return "";
664
+ if (!i) throw Error(N("core.documentModel.unregisteredElementType", { elementType: e.type }));
665
+ let a = i.toHtml({
666
+ document: r,
667
+ node: e,
668
+ page: n,
669
+ props: e.props
670
+ }), o = {
671
+ height: `${Math.ceil(e.height * 1e3) / 1e3}mm`,
672
+ left: `${q(e.x)}mm`,
673
+ position: "absolute",
674
+ top: `${q(e.y)}mm`,
675
+ width: `${q(e.width)}mm`,
676
+ zIndex: String(t + 1)
677
+ };
678
+ return e.rotation && (o.transform = `rotate(${q(e.rotation)}deg)`), e.opacity < 1 && (o.opacity = String(e.opacity)), `<div style="${ce(o)}">${a}</div>`;
679
+ }
680
+ async renderPage(e, t, r, i) {
681
+ let a = [];
682
+ for (let [r, o] of e.elements.entries()) {
683
+ i.signal?.throwIfAborted();
684
+ try {
685
+ let n = this.renderElement(o, r, e, t);
686
+ n !== "" && a.push(n);
687
+ } catch (e) {
688
+ i.signal?.throwIfAborted(), n(o, e, i.onWarning);
689
+ }
690
+ r % 16 == 15 && (await G(i.signal), await W(i.waitIfPaused));
691
+ }
692
+ let o = a.join("\n");
693
+ return [
694
+ `<section class="print-page" style="page:printPage${r};width:${q(e.width)}mm;height:${q(e.height)}mm;background:${he(e.background)}">`,
695
+ o,
696
+ "</section>"
697
+ ].join("\n");
698
+ }
699
+ };
700
+ function q(e) {
701
+ return Math.round(e * 100) / 100;
702
+ }
703
+ function Ye(e) {
704
+ return e.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");
705
+ }
706
+ // src/core/render/jspdf-loader.ts
707
+ function Xe() {
708
+ return import("./jspdf.es.min-CKTVf941.js").then((e) => e.t);
709
+ }
710
+ // src/core/render/pdf-draw.ts
711
+ var J = 300 / 25.4, Ze = 96 / 25.4, Qe = class {
712
+ pdf;
713
+ gStateCtor;
714
+ elementOpacity = 1;
715
+ webFonts = /* @__PURE__ */ new Set();
716
+ constructor(e, t) {
717
+ this.pdf = e, this.gStateCtor = t, typeof document < "u" && document.fonts?.forEach((e) => {
718
+ e.status === "loaded" && this.webFonts.add(e.family.replace(/^["']|["']$/g, "").toLowerCase());
719
+ });
720
+ }
721
+ ellipse(e, n, r, i, a) {
722
+ let o = !t(a.fill), s = !t(a.stroke) && (a.strokeWidthMm ?? 0) > 0;
723
+ if (!o && !s) return;
724
+ this.setDash(a.dashMm ?? []), s && (this.setStrokeColor(a.stroke), this.setStrokeWidth(a.strokeWidthMm)), o && this.setFillColor(a.fill);
725
+ let c = tt(o, s);
726
+ this.pdf.ellipse(e + r / 2, n + i / 2, r / 2, i / 2, c), this.setDash([]);
727
+ }
728
+ image(e, t, n, r, i, a) {
729
+ typeof e == "string" && t ? this.pdf.addImage(e, t, n, r, i, a) : this.pdf.addImage(e, n, r, i, a);
730
+ }
731
+ line(e, n, r, i, a) {
732
+ t(a.color) || a.widthMm <= 0 || (this.setStrokeColor(a.color), this.setStrokeWidth(a.widthMm), this.setDash(a.dashMm ?? []), this.pdf.line(e, n, r, i), this.setDash([]));
733
+ }
734
+ rect(e, n, r, i, a) {
735
+ let o = !t(a.fill), s = !t(a.stroke) && (a.strokeWidthMm ?? 0) > 0;
736
+ if (!o && !s) return;
737
+ this.setDash(a.dashMm ?? []), s && (this.setStrokeColor(a.stroke), this.setStrokeWidth(a.strokeWidthMm)), o && this.setFillColor(a.fill);
738
+ let c = tt(o, s), l = Math.max(0, a.radiusMm ?? 0);
739
+ l > 0 ? this.pdf.roundedRect(e, n, r, i, l, l, c) : this.pdf.rect(e, n, r, i, c), this.setDash([]);
740
+ }
741
+ resetElementOpacity() {
742
+ this.elementOpacity = 1, this.pdf.setGState(new this.gStateCtor({ opacity: 1 }));
743
+ }
744
+ setDash(e) {
745
+ e.length === 0 ? this.pdf.setLineDashPattern([], 0) : this.pdf.setLineDashPattern(e, 0);
746
+ }
747
+ setElementOpacity(e) {
748
+ this.elementOpacity = Math.max(.02, Math.min(1, e)), this.pdf.setGState(new this.gStateCtor({ opacity: this.elementOpacity }));
749
+ }
750
+ setFillColor(e) {
751
+ this.applyColor(e, !1);
752
+ }
753
+ setStrokeColor(e) {
754
+ this.applyColor(e, !0);
755
+ }
756
+ setStrokeWidth(e) {
757
+ this.pdf.setLineWidth(Math.max(.05, e));
758
+ }
759
+ setTextColor(e) {
760
+ this.applyColor(e, !1, !0);
761
+ }
762
+ text(e) {
763
+ if (t(e.color) || !e.text) return;
764
+ let n = e.paddingMm ?? 0, r = e.x + n, i = e.y + n, a = Math.max(2, e.width - n * 2), o = Math.max(2, e.height - n * 2), s = e.text, c = Math.max(1, e.fontSizePt), l = A(e.letterSpacingPt), u = e.lineHeight > 0 ? e.lineHeight : 1.2, d = a * fe;
765
+ ye(s) && !ge(e.fontFamily) && e.fontFamily in se && !this.webFonts.has(e.fontFamily.toLowerCase()) ? this.drawTextNative(e, s, r, i, a, o, c, l, d, u) : this.drawTextRaster(e, s, r, i, a, o, c, l, d, u);
766
+ }
767
+ applyColor(e, t, n = !1) {
768
+ let r = ae(e);
769
+ r && (this.pdf.setGState(new this.gStateCtor({ opacity: this.elementOpacity * r.alpha })), n ? this.pdf.setTextColor(r.r, r.g, r.b) : t ? this.pdf.setDrawColor(r.r, r.g, r.b) : this.pdf.setFillColor(r.r, r.g, r.b));
770
+ }
771
+ drawDecorationPdf(e, t, n, r, i, a, o, s) {
772
+ let c = e.textDecoration ?? "none";
773
+ if (c === "none") return;
774
+ let l = this.pdf.getTextWidth(t), u = nt(r, n, l), d = c === "underline" ? i + T(a * .12) : (o + s) / 2;
775
+ this.pdf.setLineWidth(T(Math.max(.5, a / 14))), this.pdf.line(u, d, u + l, d);
776
+ }
777
+ drawTextNative(e, t, n, r, i, a, o, s, c, l) {
778
+ let u = oe({
779
+ fontFamily: e.fontFamily,
780
+ fontSize: o,
781
+ fontStyle: e.fontStyle,
782
+ fontWeight: e.fontWeight
783
+ }, A(o)), d = e.singleLine ? [te(t, u, c, s)] : ve(t, u, c, s), f = se[e.fontFamily] ?? "helvetica", p = this.pdf;
784
+ p.setFont(f, this.nativeFontStyle(e)), p.setFontSize(o), this.setTextColor(e.color);
785
+ let m = T(o * l), h = T(o * .8), g = d.length * m, _ = $e(e.verticalAlign, r, a, g), v = T(e.letterSpacingPt);
786
+ d.forEach((t, r) => {
787
+ if (t === "") return;
788
+ let a = _ + r * m + h, s = e.align === "justify" ? "left" : e.align, c = et(e.align, n, i);
789
+ p.text(t, c, a, {
790
+ align: s,
791
+ charSpace: v
792
+ }), this.drawDecorationPdf(e, t, c, s, a, o, _ + r * m, _ + (r + 1) * m);
793
+ });
794
+ }
795
+ drawTextRaster(e, t, n, r, i, a, o, s, c, l) {
796
+ let u = oe({
797
+ fontFamily: e.fontFamily,
798
+ fontSize: o,
799
+ fontStyle: e.fontStyle,
800
+ fontWeight: e.fontWeight
801
+ }, A(o)), d = e.singleLine ? [te(t, u, c, s)] : ve(t, u, c, s), f = T(o * l), p = T(o * .8), m = d.length * f, h = n - e.x, g = r - e.y, _ = $e(e.verticalAlign, g, a, m), v = document.createElement("canvas");
802
+ v.width = Math.max(1, Math.round(e.width * J)), v.height = Math.max(1, Math.round(e.height * J));
803
+ let y = v.getContext("2d");
804
+ if (!y) return;
805
+ y.scale(J, J);
806
+ let b = T(o), x = String(e.fontWeight || "400");
807
+ y.font = `${e.fontStyle === "italic" ? "italic " : ""}${x} ${b}px "${e.fontFamily}"`;
808
+ try {
809
+ y.letterSpacing = `${T(e.letterSpacingPt)}px`;
810
+ } catch {}
811
+ y.fillStyle = e.color, y.textBaseline = "alphabetic", d.forEach((t, n) => {
812
+ if (t === "") return;
813
+ let r = _ + n * f + p, a = et(e.align, h, i);
814
+ y.textAlign = e.align === "justify" ? "left" : e.align, y.fillText(t, a, r);
815
+ let c = e.textDecoration ?? "none";
816
+ if (c !== "none") {
817
+ let i = ne(t, u, s) / fe, l = nt(e.align, a, i), d = c === "underline" ? r + T(o * .12) : _ + (n + .5) * f;
818
+ y.fillRect(l, d - T(Math.max(.5, o / 28)), i, T(Math.max(.5, o / 14)));
819
+ }
820
+ }), this.pdf.addImage(v, "PNG", e.x, e.y, e.width, e.height);
821
+ }
822
+ nativeFontStyle(e) {
823
+ let t = String(e.fontWeight) === "700" || String(e.fontWeight) === "bold", n = e.fontStyle === "italic";
824
+ return t && n ? "bolditalic" : t ? "bold" : n ? "italic" : "normal";
825
+ }
826
+ };
827
+ function $e(e, t, n, r) {
828
+ return e === "middle" ? t + Math.max(0, (n - r) / 2) : e === "bottom" ? t + Math.max(0, n - r) : t;
829
+ }
830
+ function et(e, t, n) {
831
+ return e === "center" ? t + n / 2 : e === "right" ? t + n : t;
832
+ }
833
+ function tt(e, t) {
834
+ return e && t ? "FD" : e ? "F" : "S";
835
+ }
836
+ function nt(e, t, n) {
837
+ return e === "left" ? t : e === "center" ? t - n / 2 : t - n;
838
+ }
839
+ // src/parser/pdf/pdf-parser.ts
840
+ async function rt(e, t) {
841
+ let n = new DOMParser().parseFromString(`<div xmlns="http://www.w3.org/1999/xhtml">${e}</div>`, "application/xhtml+xml");
842
+ for (let e of Array.from(n.querySelectorAll("img"))) {
843
+ let n = e.getAttribute("src") ?? "", r = await ee(n, t);
844
+ if (!r) throw new M(N("core.image.loadFailed", { imageUrl: n }), { code: "render.image-load-failed" });
845
+ e.setAttribute("src", r);
846
+ }
847
+ return new XMLSerializer().serializeToString(n.documentElement);
848
+ }
849
+ var Y = class {
850
+ elements;
851
+ id = "pdf";
852
+ get label() {
853
+ return N("parser.pdfParser.displayName");
854
+ }
855
+ constructor(e = C) {
856
+ this.elements = e;
857
+ }
858
+ async parse(e, t = {}) {
859
+ if (e.pages.length === 0) throw new M(N("parser.pdfParser.emptyDocument"), {
860
+ code: "parse.no-pages",
861
+ detail: N("parser.pdfParser.emptyDocumentDetail")
862
+ });
863
+ let n = t.rasterPxPerMm ?? 11.811023622047244;
864
+ t.signal?.throwIfAborted();
865
+ let r = e.pages[0], i = await Xe(), a = new i.jsPDF({
866
+ compress: !0,
867
+ format: [r.width, r.height],
868
+ orientation: r.width > r.height ? "landscape" : "portrait",
869
+ unit: "mm"
870
+ }), o = new Qe(a, i.GState);
871
+ for (let [r, i] of e.pages.entries()) t.signal?.throwIfAborted(), r > 0 && a.addPage([i.width, i.height], i.width > i.height ? "landscape" : "portrait"), await this.renderPage(a, o, i, e, n, t), t.onProgress?.({
872
+ completed: r + 1,
873
+ stage: "render",
874
+ total: e.pages.length
875
+ }), await W(t.waitIfPaused), await G(t.signal);
876
+ return t.onProgress?.({
877
+ completed: 1,
878
+ stage: "serialize",
879
+ total: 1
880
+ }), a.output("blob");
881
+ }
882
+ async drawRotated(e, t, n, r, i, a) {
883
+ let o = this.elements.get(t.type);
884
+ if (!o) throw Error(N("core.documentModel.unregisteredElementType", { elementType: t.type }));
885
+ let s;
886
+ try {
887
+ s = o.toHtml({
888
+ document: r,
889
+ node: t,
890
+ page: n,
891
+ props: t.props
892
+ });
893
+ } catch (e) {
894
+ throw new M(N("parser.pdfParser.rotatedElementRasterizationFailed", {
895
+ elementId: t.id,
896
+ elementType: t.type
897
+ }), {
898
+ cause: e,
899
+ code: "render.pdf-rotated-element-failed"
900
+ });
901
+ }
902
+ s = await rt(s, a.signal);
903
+ let c = ie({
904
+ height: t.height,
905
+ width: t.width,
906
+ x: t.x,
907
+ y: t.y
908
+ }, t.rotation), l = globalThis.document.createElement("canvas");
909
+ l.width = Math.max(1, Math.round(c.width * i)), l.height = Math.max(1, Math.round(c.height * i));
910
+ let u = l.getContext("2d");
911
+ if (!u) throw new M(N("parser.pdfParser.rotatedElementRasterizationFailed", {
912
+ elementId: t.id,
913
+ elementType: t.type
914
+ }), { code: "render.pdf-rotated-element-failed" });
915
+ u.scale(i, i);
916
+ let d = {
917
+ height: `${X(t.height)}mm`,
918
+ left: `${X(t.x - c.x)}mm`,
919
+ position: "absolute",
920
+ top: `${X(t.y - c.y)}mm`,
921
+ transform: `rotate(${X(t.rotation)}deg)`,
922
+ width: `${X(t.width)}mm`
923
+ }, f = [
924
+ `<div xmlns="http://www.w3.org/1999/xhtml" style="width:${X(c.width)}mm;height:${X(c.height)}mm;">`,
925
+ `<style>${pe(a.fontCss ?? "")}</style>`,
926
+ `<div style="${ce(d)}">${s}</div>`,
927
+ "</div>"
928
+ ].join(""), p = Math.max(1, X(c.width * Ze)), m = Math.max(1, X(c.height * Ze)), h = [
929
+ `<svg xmlns="http://www.w3.org/2000/svg" width="${l.width}" height="${l.height}" viewBox="0 0 ${p} ${m}">`,
930
+ `<foreignObject width="100%" height="100%">${f}</foreignObject>`,
931
+ "</svg>"
932
+ ].join("");
933
+ try {
934
+ let t = await x(`data:image/svg+xml;charset=utf-8,${encodeURIComponent(h)}`, a.signal);
935
+ u.drawImage(t, 0, 0, c.width, c.height), e.addImage(l, "PNG", c.x, c.y, c.width, c.height);
936
+ } catch (e) {
937
+ throw new M(N("parser.pdfParser.rotatedElementRasterizationFailed", {
938
+ elementId: t.id,
939
+ elementType: t.type
940
+ }), {
941
+ cause: e,
942
+ code: "render.pdf-rotated-element-failed"
943
+ });
944
+ }
945
+ }
946
+ async renderPage(e, t, r, i, a, o) {
947
+ let s = he(r.background);
948
+ s !== "#ffffff" && t.rect(0, 0, r.width, r.height, { fill: s });
949
+ for (let [s, c] of r.elements.entries()) {
950
+ if (o.signal?.throwIfAborted(), !c.visible) continue;
951
+ let l = this.elements.get(c.type);
952
+ if (!l) n(c, Error(N("core.documentModel.unregisteredElementType", { elementType: c.type })), o.onWarning);
953
+ else {
954
+ e.saveGraphicsState();
955
+ try {
956
+ t.setElementOpacity(c.opacity), Math.abs(c.rotation) > .01 ? await this.drawRotated(e, c, r, i, a, o) : await l.toPdf({
957
+ document: i,
958
+ draw: t,
959
+ node: c,
960
+ page: r,
961
+ pdf: e,
962
+ props: c.props,
963
+ signal: o.signal
964
+ });
965
+ } catch (e) {
966
+ o.signal?.throwIfAborted(), n(c, e, o.onWarning);
967
+ } finally {
968
+ e.restoreGraphicsState(), t.resetElementOpacity();
969
+ }
970
+ s % 4 == 3 && (await W(o.waitIfPaused), await G(o.signal));
971
+ }
972
+ }
973
+ }
974
+ };
975
+ function X(e) {
976
+ return Math.round(e * 100) / 100;
977
+ }
978
+ // src/core/repeat-layout.ts
979
+ function Z(e, t, n) {
980
+ if (t.direction !== "grid") return 1;
981
+ let r = Math.max(0, t.gapX), i = O(n), a = Math.max(1, Math.trunc(t.columns || 1)), o = Math.floor((i.x + i.width - e.x + r) / (e.width + r));
982
+ return Math.max(1, Math.min(a, o));
983
+ }
984
+ function* it(e, t, n, r, i, a = () => n) {
985
+ if (r.length === 0) return;
986
+ if (t.direction === "page") {
987
+ let t = i.draftIndex + +(i.bottomY > e.y);
988
+ for (let [n, i] of r.entries()) {
989
+ let r = O(a(t + n));
990
+ yield {
991
+ bottomY: Math.max(r.y + r.height, e.y + i.height),
992
+ draftIndex: t + n,
993
+ offsetX: e.x - i.x,
994
+ offsetY: e.y - i.y
995
+ };
996
+ }
997
+ return;
998
+ }
999
+ let o = i.draftIndex, s = e.width + Math.max(0, t.gapX), c = Math.max(e.y, i.bottomY), l = 0;
1000
+ for (; l < r.length;) {
1001
+ let n = a(o), i = O(n), u = Z(e, t, n), d = r.slice(l, l + u), f = Math.max(1, ...d.map((e) => e.height));
1002
+ c + f > i.y + i.height + 1e-6 && (l > 0 || c > i.y + 1e-6) && (o += 1, n = a(o), i = O(n), u = Z(e, t, n), c = t.positionMode === "flow" ? i.y : e.y, d = r.slice(l, l + u), f = Math.max(1, ...d.map((e) => e.height)));
1003
+ let p = c + f;
1004
+ for (let [t, n] of d.entries()) yield {
1005
+ bottomY: p,
1006
+ draftIndex: o,
1007
+ offsetX: e.x + t * s - n.x,
1008
+ offsetY: c - n.y
1009
+ };
1010
+ l += d.length, c = p + Math.max(0, t.gapY);
1011
+ }
1012
+ }
1013
+ // src/core/repeat-expand.ts
1014
+ function* at(e) {
1015
+ let { context: t, cursor: n, getPage: r, group: a, prototypes: o, warnings: s } = e, c = b(t, a.collection);
1016
+ if (!Array.isArray(c)) {
1017
+ s.add(N("core.documentExpand.repeatCollectionMissing", {
1018
+ collection: a.collection,
1019
+ groupName: a.name
1020
+ }));
1021
+ return;
1022
+ }
1023
+ let l = c.map((n, r) => {
1024
+ let c = p(t, {
1025
+ collectionPath: a.collection,
1026
+ index: r,
1027
+ item: n
1028
+ }), l = o.map((e) => i(E(e), c, s));
1029
+ return {
1030
+ bounds: I(l) ?? e.bounds,
1031
+ elements: l
1032
+ };
1033
+ }), u = {
1034
+ ...e.bounds,
1035
+ width: l.reduce((e, t) => Math.max(e, t.bounds.width), 1)
1036
+ }, d = r(n.draftIndex), f = Z(u, a, d), m = Math.max(1, Math.trunc(a.columns || 1));
1037
+ a.direction === "grid" && f < m && s.add(N("core.documentExpand.repeatColumnsAdjusted", {
1038
+ columnCount: f,
1039
+ groupName: a.name
1040
+ }));
1041
+ let h = 0;
1042
+ for (let e of it(u, a, d, l.map((e) => e.bounds), n, r)) {
1043
+ let t = l[h].elements;
1044
+ for (let n of t) Object.assign(n, j(n, e.offsetX, e.offsetY));
1045
+ yield {
1046
+ bottomY: e.bottomY,
1047
+ draftIndex: e.draftIndex,
1048
+ elements: t
1049
+ }, h += 1;
1050
+ }
1051
+ }
1052
+ // src/core/flow-expand.ts
1053
+ function ot(e) {
1054
+ let { context: t, document: n, page: r, warnings: a } = e, o = (n.repeatGroups ?? []).filter((e) => e.pageId === r.id), s = (n.followBlocks ?? []).filter((e) => e.pageId === r.id), c = new Set([...o, ...s].flatMap((e) => e.elementIds)), l = new Set(s.filter((e) => e.target.kind === "element").map((e) => e.target.id)), u = r.elements.filter((e) => !c.has(e.id)).map((n) => e.resolveNode?.(n) ?? i(n, t, a)), d = (e) => l.has(e.id) || !!w(t).get(e.type)?.paginate, f = u.filter((e) => !d(e)), p = st(e, o, u.filter(d)), m = [[]], h = {
1055
+ bottomY: 0,
1056
+ draftIndex: 0
1057
+ };
1058
+ function g(e) {
1059
+ for (; m.length <= e.draftIndex;) m.push([]);
1060
+ m[e.draftIndex].push(...e.elements);
1061
+ }
1062
+ function _(t, n) {
1063
+ (n.draftIndex > h.draftIndex || n.draftIndex === h.draftIndex && n.bottomY > h.bottomY) && (h = { ...n });
1064
+ for (let r of s) {
1065
+ if (xe(r.target) !== xe(t)) continue;
1066
+ let i = ct(e, r, n);
1067
+ i && (g(i), _({
1068
+ id: r.id,
1069
+ kind: "followBlock"
1070
+ }, i));
1071
+ }
1072
+ }
1073
+ for (let e of p) {
1074
+ let t = {
1075
+ ...h,
1076
+ bottomY: Math.max(h.bottomY, e.y)
1077
+ };
1078
+ for (let n of e.expand(h)) g(n), t = n;
1079
+ _(e.target, t);
1080
+ }
1081
+ let v = new Map(r.elements.map((e, t) => [e.id, t]));
1082
+ return m.map((e, t) => [...(t === 0 ? f : []).map((e) => E(e)), ...e].sort((e, t) => (v.get(e.id) ?? 0) - (v.get(t.id) ?? 0)));
1083
+ }
1084
+ function st(e, t, n) {
1085
+ let r = [];
1086
+ for (let n of t) {
1087
+ let t = e.page.elements.filter((e) => n.elementIds.includes(e.id)), i = I(t);
1088
+ i && r.push({
1089
+ expand: (r) => at({
1090
+ bounds: i,
1091
+ context: e.context,
1092
+ cursor: r,
1093
+ getPage: e.getPage,
1094
+ group: n,
1095
+ prototypes: t,
1096
+ warnings: e.warnings
1097
+ }),
1098
+ target: {
1099
+ id: n.id,
1100
+ kind: "repeatGroup"
1101
+ },
1102
+ y: i.y
1103
+ });
1104
+ }
1105
+ for (let t of n) r.push({
1106
+ expand: (n) => lt(e, t, n),
1107
+ target: {
1108
+ id: t.id,
1109
+ kind: "element"
1110
+ },
1111
+ y: t.y
1112
+ });
1113
+ return r.sort((e, t) => e.y - t.y);
1114
+ }
1115
+ function ct(e, t, n) {
1116
+ let { context: r, getPage: a, page: o, warnings: s } = e, c = o.elements.filter((e) => t.elementIds.includes(e.id)).map((t) => e.resolveNode?.(t) ?? i(t, r, s)), l = I(c);
1117
+ if (!l) return;
1118
+ let u = n.draftIndex, d = O(a(u)), f = Math.max(d.y, n.bottomY + t.gap);
1119
+ f + l.height > d.y + d.height + 1e-6 && (u += 1, d = O(a(u)), f = d.y);
1120
+ let p = c.map((e) => {
1121
+ let t = E(e);
1122
+ Object.assign(t, j(t, 0, f - l.y));
1123
+ let n = S(w(r), {
1124
+ getPage: () => a(u),
1125
+ node: t,
1126
+ page: a(u),
1127
+ props: t.props,
1128
+ warnings: s
1129
+ });
1130
+ return n?.length === 1 && Object.assign(t, {
1131
+ height: n[0].height,
1132
+ props: n[0].props
1133
+ }), t;
1134
+ });
1135
+ return {
1136
+ bottomY: f + l.height,
1137
+ draftIndex: u,
1138
+ elements: p
1139
+ };
1140
+ }
1141
+ function* lt(e, t, n) {
1142
+ let { getPage: r, warnings: i } = e, a = E(t), o = n.draftIndex;
1143
+ Object.assign(a, j(a, 0, Math.max(a.y, n.bottomY) - a.y));
1144
+ let s = S(w(e.context), {
1145
+ getPage: (e) => r(o + e),
1146
+ node: a,
1147
+ page: r(o),
1148
+ props: a.props,
1149
+ warnings: i
1150
+ });
1151
+ if (!s?.length) yield ut(a, o, r);
1152
+ else for (let [e, t] of s.entries()) {
1153
+ if (t.height <= 0) continue;
1154
+ let n = E(a);
1155
+ Object.assign(n, j(n, 0, (t.y ?? a.y) - a.y), {
1156
+ height: t.height,
1157
+ props: t.props
1158
+ }), yield {
1159
+ bottomY: n.y + n.height,
1160
+ draftIndex: o + e,
1161
+ elements: [n]
1162
+ };
1163
+ }
1164
+ }
1165
+ function ut(e, t, n) {
1166
+ let r = O(n(t)), i = I([e]);
1167
+ if (!i) throw Error(`Missing element bounds: ${e.id}`);
1168
+ return i.y + i.height > r.y + r.height + 1e-6 && (t += 1, r = O(n(t)), Object.assign(e, j(e, 0, r.y - i.y)), i = I([e]) ?? i), {
1169
+ bottomY: i.y + i.height,
1170
+ draftIndex: t,
1171
+ elements: [e]
1172
+ };
1173
+ }
1174
+ // src/core/overflow-expand.ts
1175
+ function dt(e, t, n, r) {
1176
+ let o = w(n), s = [], c = /* @__PURE__ */ new Map(), l = new Set([...e.repeatGroups ?? [], ...e.followBlocks ?? []].filter((e) => e.pageId === t.id).flatMap((e) => e.elementIds)), u = t.elements.map((u) => {
1177
+ let d = o.get(u.type)?.overflow;
1178
+ if (!u.visible || !d || l.has(u.id)) return u;
1179
+ let f = i(E(u), n, r);
1180
+ try {
1181
+ let i = d({
1182
+ node: f,
1183
+ page: a(e, t),
1184
+ warnings: r
1185
+ });
1186
+ return i ? (s.push(...ft(e, i, n, r)), c.set(u.id, i.node), i.node) : (c.set(u.id, f), u);
1187
+ } catch (e) {
1188
+ return r.add(_(u, e)), c.set(u.id, f), u;
1189
+ }
1190
+ });
1191
+ return {
1192
+ continuations: s,
1193
+ page: {
1194
+ ...t,
1195
+ elements: u
1196
+ },
1197
+ resolveNode(e) {
1198
+ return c.get(e.id) ?? i(e, n, r);
1199
+ }
1200
+ };
1201
+ }
1202
+ function ft(e, t, n, r) {
1203
+ let a = t.continuation, o = e.templates?.find((e) => e.id === a.templateId);
1204
+ if (!o) throw new M(N("core.overflow.invalidLayout"), { code: "overflow.invalid-layout" });
1205
+ if (o.owner && o.owner.elementId !== t.node.id) throw new M(N("core.pageExtensions.internalTemplate"), { code: "template.owner-mismatch" });
1206
+ f(o);
1207
+ let c = s(e, o).page, l = c.elements.find((e) => e.id === a.elementId);
1208
+ if (!l || !l.visible) throw new M(N("core.overflow.invalidTarget"), { code: "overflow.invalid-target" });
1209
+ let d = w(n), p = u(e, l, d), m = i(E(p), n, r);
1210
+ if (!m.visible) throw new M(N("core.overflow.invalidTarget"), { code: "overflow.invalid-target" });
1211
+ let h = a.prepare(m), g = d.get(h.type)?.measureSize?.({
1212
+ node: h,
1213
+ props: h.props
1214
+ });
1215
+ Object.assign(h, g);
1216
+ let _ = S(d, {
1217
+ getPage: () => c,
1218
+ node: h,
1219
+ page: c,
1220
+ props: h.props,
1221
+ warnings: r
1222
+ }), v = c.elements.filter((e) => e.id !== l.id);
1223
+ return (_ ?? [{
1224
+ height: h.height,
1225
+ props: h.props,
1226
+ y: h.y
1227
+ }]).map((e, t) => ({
1228
+ ...c,
1229
+ background: o.background ?? c.background,
1230
+ elements: [...v.map((e) => {
1231
+ let t = i(E(e), n, r);
1232
+ return t.id = k("el"), t;
1233
+ }), {
1234
+ ...h,
1235
+ bindings: void 0,
1236
+ height: e.height,
1237
+ id: k("el"),
1238
+ props: e.props,
1239
+ y: e.y ?? h.y
1240
+ }],
1241
+ guides: [],
1242
+ id: k("page"),
1243
+ name: o.name + " · " + (t + 1),
1244
+ templateId: re
1245
+ }));
1246
+ }
1247
+ // src/core/document-expand.ts
1248
+ function pt(e, t, n = C) {
1249
+ l(e);
1250
+ let o = new D(), s = Je(t), c = s.context;
1251
+ c.elements = n;
1252
+ let u = e.repeatGroups ?? [], d = [];
1253
+ for (let t of e.pages) {
1254
+ let { continuations: n, page: i, resolveNode: s } = dt(e, t, c, o), l = d.length + 1, f = (t) => {
1255
+ try {
1256
+ return a(e, i, l + t);
1257
+ } catch (e) {
1258
+ return o.add(Ce(e)), r(i);
1259
+ }
1260
+ };
1261
+ if (e.followBlocks?.some((e) => e.pageId === i.id)) {
1262
+ let t = ot({
1263
+ context: c,
1264
+ document: e,
1265
+ getPage: f,
1266
+ page: i,
1267
+ resolveNode: s,
1268
+ warnings: o
1269
+ });
1270
+ d.push(...t.map((e, t) => ({
1271
+ ...f(t),
1272
+ background: i.background,
1273
+ elements: e,
1274
+ guides: t === 0 ? i.guides : [],
1275
+ id: t === 0 ? i.id : k("page"),
1276
+ name: t === 0 ? i.name : `${i.name} · ${t + 1}`,
1277
+ templateId: i.templateId
1278
+ })));
1279
+ } else d.push(...mt(i, u, c, o, f, s));
1280
+ d.push(...n);
1281
+ }
1282
+ let f = y({
1283
+ ...e,
1284
+ pages: d
1285
+ }, (e) => i(e, c, o), (e) => o.add(e));
1286
+ return {
1287
+ document: s.resolve({
1288
+ name: e.name,
1289
+ pages: f.pages,
1290
+ version: e.version
1291
+ }, o),
1292
+ warnings: o.list()
1293
+ };
1294
+ }
1295
+ function mt(e, t, n, r, i, a) {
1296
+ O(i(0));
1297
+ let o = t.filter((t) => t.pageId === e.id), s = new Set(o.flatMap((e) => e.elementIds)), c = e.elements.filter((e) => !s.has(e.id)).map(a), l = w(n), u = [{ elements: [...c] }], d = {
1298
+ bottomY: 0,
1299
+ draftIndex: 0
1300
+ };
1301
+ for (let t of o) gt(u, t, e, n, r, d, i);
1302
+ return ht(u, c, i, r, l), u.map((t, n) => ({
1303
+ ...i(n),
1304
+ background: e.background,
1305
+ elements: t.elements,
1306
+ guides: n === 0 ? e.guides : [],
1307
+ id: n === 0 ? e.id : k("page"),
1308
+ name: n === 0 ? e.name : `${e.name} · ${n + 1}`,
1309
+ templateId: e.templateId
1310
+ }));
1311
+ }
1312
+ function ht(e, t, n, r, i) {
1313
+ let a = [];
1314
+ for (let o of t) {
1315
+ if (!i.get(o.type)?.paginate) continue;
1316
+ let t = e.length + a.length, s = {
1317
+ getPage: (e) => n(e === 0 ? 0 : t + e - 1),
1318
+ node: o,
1319
+ page: n(0),
1320
+ props: o.props,
1321
+ warnings: r
1322
+ }, c = S(i, s);
1323
+ c && c.length !== 0 && c.forEach((t, n) => {
1324
+ let r = {
1325
+ ...o,
1326
+ height: t.height,
1327
+ props: t.props,
1328
+ y: t.y ?? o.y
1329
+ };
1330
+ if (n === 0) {
1331
+ let t = e[0].elements.findIndex((e) => e.id === o.id);
1332
+ e[0].elements.splice(t, 1, r);
1333
+ } else a.push(r);
1334
+ });
1335
+ }
1336
+ let o = a.map((e) => ({ elements: [e] }));
1337
+ e.push(...o);
1338
+ }
1339
+ function gt(e, t, n, r, i, a, o) {
1340
+ let s = n.elements.filter((e) => t.elementIds.includes(e.id));
1341
+ if (s.length === 0) return;
1342
+ let c = I(s);
1343
+ if (!c) return;
1344
+ let l = at({
1345
+ bounds: c,
1346
+ context: r,
1347
+ cursor: {
1348
+ ...a,
1349
+ draftIndex: Math.min(a.draftIndex, e.length - 1)
1350
+ },
1351
+ getPage: o,
1352
+ group: t,
1353
+ prototypes: s,
1354
+ warnings: i
1355
+ });
1356
+ for (let t of l) e[t.draftIndex] || e.push({ elements: [] }), e[t.draftIndex].elements.push(...t.elements), a.bottomY = t.bottomY;
1357
+ a.draftIndex = e.length - 1;
1358
+ }
1359
+ // src/parser/prepare-document.ts
1360
+ function _t(e, t, n = C) {
1361
+ if (t !== void 0) return pt(e, t, n);
1362
+ let r = new D();
1363
+ return {
1364
+ document: qe(y(e, void 0, (e) => r.add(e))),
1365
+ warnings: r.list()
1366
+ };
1367
+ }
1368
+ // src/parser/prepare-resources.ts
1369
+ function vt(e, t) {
1370
+ let n = new Set(e.pages);
1371
+ for (let r of e.pages) for (let i of [1, 2]) try {
1372
+ let t = _e(e, r, i);
1373
+ t && n.add(t.page);
1374
+ } catch (e) {
1375
+ let n = e instanceof Error ? e.message : String(e);
1376
+ t && t(n);
1377
+ }
1378
+ return n;
1379
+ }
1380
+ function yt(e, t, n, r, i) {
1381
+ if (!i) return [r];
1382
+ let a = e.repeatGroups?.find((e) => e.pageId === t.id && e.elementIds.includes(n.id));
1383
+ if (!a) return [r];
1384
+ let o = b(r, a.collection);
1385
+ return Array.isArray(o) ? o.map((e, t) => p(r, {
1386
+ collectionPath: a.collection,
1387
+ index: t,
1388
+ item: e
1389
+ })) : [];
1390
+ }
1391
+ function bt(e, t, r, i = [], a, o) {
1392
+ if (a?.throwIfAborted(), globalThis.document === void 0 || !globalThis.document.fonts) return;
1393
+ let s = [], c = V(t ?? {});
1394
+ c.elements = r;
1395
+ let l = new D();
1396
+ for (let i of vt(e, o)) for (let u of i.elements) {
1397
+ a?.throwIfAborted();
1398
+ let d = r.get(u.type)?.getResources;
1399
+ if (!u.visible || !d) continue;
1400
+ let f = yt(e, i, u, c, t !== void 0);
1401
+ for (let e of f) try {
1402
+ let n = t === void 0 ? u : be(u, e, l), r = d({
1403
+ node: n,
1404
+ props: n.props
1405
+ });
1406
+ s.push(...r.fonts ?? []);
1407
+ } catch (e) {
1408
+ a?.throwIfAborted(), n(u, e, o);
1409
+ }
1410
+ }
1411
+ return s.length > 0 ? Be(s, i, a) : void 0;
1412
+ }
1413
+ // src/parser/types.ts
1414
+ var Q = class {
1415
+ parsers = /* @__PURE__ */ new Map();
1416
+ get(e, t = o) {
1417
+ return this.parsers.get(e)?.get(t);
1418
+ }
1419
+ list() {
1420
+ return [...this.parsers.values()].flatMap((e) => [...e.values()]);
1421
+ }
1422
+ register(e) {
1423
+ let t = h(e.version);
1424
+ if (t !== "1.0.0" && !e.render) throw Error(`Parser version ${t} must provide a complete render implementation`);
1425
+ let n = this.parsers.get(e.id) ?? /* @__PURE__ */ new Map();
1426
+ if (n.has(t)) throw Error(N("parser.types.duplicateParser", { parserId: e.id }));
1427
+ n.set(t, e), this.parsers.set(e.id, n);
1428
+ }
1429
+ unregister(e, t = o) {
1430
+ let n = this.parsers.get(e), r = n?.delete(t) ?? !1;
1431
+ return n?.size === 0 && this.parsers.delete(e), r;
1432
+ }
1433
+ }, xt = new Map(me.map((e) => [e.type, {
1434
+ canExpand: e.worker?.canExpand,
1435
+ definition: e,
1436
+ html: e.worker?.html,
1437
+ measureSize: e.measureSize,
1438
+ overflow: e.overflow,
1439
+ paginate: e.paginate,
1440
+ resolveBindings: e.resolveBindings,
1441
+ toHtml: e.toHtml,
1442
+ worker: e.worker
1443
+ }])), St = Ue.map((e) => ({
1444
+ definition: e,
1445
+ resolve: e.resolve
1446
+ }));
1447
+ function Ct(e, t, n = C) {
1448
+ let r = z.list();
1449
+ if (r.length !== St.length || St.some(({ definition: e, resolve: t }, n) => r[n] !== e || e.resolve !== t)) return {
1450
+ expand: !1,
1451
+ html: !1
1452
+ };
1453
+ let i = !0;
1454
+ for (let r of v(e)) for (let e of r.elements) {
1455
+ let r = n.get(e.type), a = xt.get(e.type);
1456
+ if (!r || !a || r.measureSize !== a.measureSize || r.paginate !== a.paginate || r.overflow !== a.overflow || r.resolveBindings !== a.resolveBindings || r.toHtml !== a.toHtml || r.worker !== a.worker || !r.worker || r.worker.canExpand !== a.canExpand || r.worker.html !== a.html || t && !r.worker.canExpand(e)) return {
1457
+ expand: !1,
1458
+ html: !1
1459
+ };
1460
+ i &&= r.worker.html;
1461
+ }
1462
+ return {
1463
+ expand: !0,
1464
+ html: i
1465
+ };
1466
+ }
1467
+ // src/parser/worker/worker-protocol.ts
1468
+ function wt(e) {
1469
+ let t = e.kind === "domain" ? new M(e.userMessage ?? e.message, {
1470
+ code: e.code,
1471
+ detail: e.message
1472
+ }) : Error(e.message);
1473
+ return e.stack && (t.stack = e.stack), t;
1474
+ }
1475
+ // src/parser/worker/worker-client.ts
1476
+ var Tt = /* @__PURE__ */ e({ RenderWorkerClient: () => Et }), Et = class {
1477
+ factory;
1478
+ activeId;
1479
+ nextId = 0;
1480
+ pending = /* @__PURE__ */ new Map();
1481
+ worker;
1482
+ constructor(e = () => new Worker(new URL(
1483
+ /* @vite-ignore */
1484
+ new URL("assets/render.worker-Dl59Xk1a.js", import.meta.url).href,
1485
+ "" + import.meta.url
1486
+ ), { type: "module" })) {
1487
+ this.factory = e;
1488
+ }
1489
+ dispose() {
1490
+ this.failAll(new M(N("parser.worker.cancelled"), { code: "render.cancelled" }));
1491
+ }
1492
+ execute(e, t, n, r, i) {
1493
+ return new Promise((a, o) => {
1494
+ try {
1495
+ r?.throwIfAborted(), this.getWorker();
1496
+ let s = ++this.nextId, c = P.global.locale.value, l = n({
1497
+ id: s,
1498
+ locale: {
1499
+ fallback: Se,
1500
+ fallbackMessages: P.global.getLocaleMessage(Se),
1501
+ messages: P.global.getLocaleMessage(c),
1502
+ name: c
1503
+ },
1504
+ task: e
1505
+ }), u = () => {
1506
+ let e = this.activeId === s;
1507
+ clearTimeout(this.pending.get(s)?.timer), o(r?.reason), this.pending.delete(s), r?.removeEventListener("abort", u), e && (this.worker?.terminate(), this.worker = void 0, this.activeId = void 0, this.pending.size > 0 && (this.getWorker(), this.dispatch()));
1508
+ };
1509
+ this.pending.set(s, {
1510
+ cleanup: () => r?.removeEventListener("abort", u),
1511
+ execution: i,
1512
+ reject: o,
1513
+ request: l,
1514
+ resolve: a,
1515
+ timeoutMs: t
1516
+ }), r?.addEventListener("abort", u, { once: !0 }), this.dispatch();
1517
+ } catch (e) {
1518
+ o(e);
1519
+ }
1520
+ });
1521
+ }
1522
+ async continueTask(e, t, n) {
1523
+ try {
1524
+ await n.execution?.waitIfPaused?.(), this.worker === e && this.pending.get(t.id) === n && (n.timer = setTimeout(() => {
1525
+ this.failAll(new M(N("parser.worker.timeout"), { code: "render.worker-timeout" }));
1526
+ }, n.timeoutMs), e.postMessage({
1527
+ id: t.id,
1528
+ resume: t.checkpoint
1529
+ }));
1530
+ } catch (e) {
1531
+ this.failAll(e);
1532
+ }
1533
+ }
1534
+ dispatch() {
1535
+ if (this.activeId !== void 0 || !this.worker) return;
1536
+ let e = this.pending.entries().next();
1537
+ if (e.done) return;
1538
+ let [t, n] = e.value;
1539
+ this.activeId = t, n.timer = setTimeout(() => {
1540
+ this.failAll(new M(N("parser.worker.timeout"), { code: "render.worker-timeout" }));
1541
+ }, n.timeoutMs);
1542
+ try {
1543
+ this.worker.postMessage(n.request);
1544
+ } catch (e) {
1545
+ clearTimeout(n.timer), n.cleanup(), this.pending.delete(t), this.activeId = void 0, n.reject(e), this.dispatch();
1546
+ }
1547
+ }
1548
+ failAll(e) {
1549
+ this.worker?.terminate(), this.worker = void 0, this.activeId = void 0;
1550
+ for (let t of this.pending.values()) clearTimeout(t.timer), t.cleanup(), t.reject(e);
1551
+ this.pending.clear();
1552
+ }
1553
+ getWorker() {
1554
+ if (this.worker) return this.worker;
1555
+ let e;
1556
+ try {
1557
+ e = this.factory();
1558
+ } catch (e) {
1559
+ throw new M(N("parser.worker.failed"), {
1560
+ cause: e,
1561
+ code: "render.worker-start-failed"
1562
+ });
1563
+ }
1564
+ return e.onmessage = (t) => {
1565
+ if (this.worker !== e) return;
1566
+ let n = t.data, r = this.pending.get(n.id);
1567
+ r && ("checkpoint" in n ? (clearTimeout(r.timer), n.progress && r.execution?.onProgress?.(n.progress), this.continueTask(e, n, r)) : (clearTimeout(r.timer), r.cleanup(), this.pending.delete(n.id), this.activeId = void 0, n.ok ? r.resolve(n.output) : r.reject(wt(n.error)), this.dispatch()));
1568
+ }, e.onerror = (t) => {
1569
+ this.worker === e && (t.preventDefault(), this.failAll(new M(N("parser.worker.failed"), {
1570
+ code: "render.worker-failed",
1571
+ detail: t.message || N("parser.worker.failed")
1572
+ })));
1573
+ }, e.onmessageerror = () => {
1574
+ this.worker === e && this.failAll(new M(N("parser.worker.messageFailed"), { code: "render.worker-message-failed" }));
1575
+ }, this.worker = e, e;
1576
+ }
1577
+ };
1578
+ // src/parser/render-runtime.ts
1579
+ function Dt(e, t) {
1580
+ return e === "html" && t instanceof K && t.parse === K.prototype.parse || e === "pdf" && t instanceof Y && t.parse === Y.prototype.parse;
1581
+ }
1582
+ function Ot(e = {}) {
1583
+ let t = e.elements ?? le(), n = e.parsers ?? (() => {
1584
+ let e = new Q();
1585
+ return e.register(new K(t)), e.register(new Y(t)), e;
1586
+ })(), r = new Et(e.createWorker), i = e.snapshot ?? structuredClone, a = /* @__PURE__ */ new Set(), o = 0;
1587
+ function s(n, r, i, a, o) {
1588
+ if (!a.worker) return {
1589
+ backend: "main",
1590
+ reason: "disabled"
1591
+ };
1592
+ if (typeof Worker > "u" && !e.createWorker) return {
1593
+ backend: "main",
1594
+ reason: "unavailable"
1595
+ };
1596
+ if (!o) return {
1597
+ backend: "main",
1598
+ reason: "custom-parser"
1599
+ };
1600
+ let s = Ct(r, i, t);
1601
+ return s.expand ? { backend: n === "html" && s.html ? "worker" : "hybrid" } : {
1602
+ backend: "main",
1603
+ reason: "element-capability"
1604
+ };
1605
+ }
1606
+ async function c(a, c, l, u, d) {
1607
+ let f = o;
1608
+ d.signal?.throwIfAborted();
1609
+ let p = performance.now();
1610
+ d.onProgress?.({
1611
+ completed: 0,
1612
+ stage: "prepare",
1613
+ total: 1
1614
+ });
1615
+ let m = e.config?.() ?? U().rendering, g = h(c.parserVersion), _ = n.get(a, g);
1616
+ if (!_) throw Error(g === "1.0.0" ? N(a === "html" ? "parser.index.htmlParserNotRegistered" : "parser.index.pdfParserNotRegistered") : `Unsupported ${a} parser version: ${g}`);
1617
+ if (g !== "1.0.0") {
1618
+ if (!_.render) throw Error(`Parser version ${g} has no render implementation`);
1619
+ let e = await _.render(c, {
1620
+ input: l,
1621
+ onProgress: d.onProgress,
1622
+ options: u,
1623
+ signal: d.signal,
1624
+ waitIfPaused: d.waitIfPaused
1625
+ });
1626
+ if (d.signal?.throwIfAborted(), o !== f) throw new DOMException("Render runtime was disposed", "AbortError");
1627
+ return {
1628
+ execution: {
1629
+ backend: "main",
1630
+ durationMs: performance.now() - p,
1631
+ reason: "custom-parser"
1632
+ },
1633
+ output: e.output,
1634
+ warnings: e.warnings
1635
+ };
1636
+ }
1637
+ let v = {
1638
+ ...s(a, c, l !== void 0, m, g === "1.0.0" && Dt(a, _)),
1639
+ durationMs: 0
1640
+ }, y, b, x = [];
1641
+ if (v.backend !== "main") {
1642
+ let e = v.backend === "worker" ? "html" : "prepare", t = u ? {
1643
+ ...u,
1644
+ onProgress: void 0,
1645
+ onWarning: void 0,
1646
+ signal: void 0,
1647
+ waitIfPaused: void 0
1648
+ } : void 0, n = await r.execute({
1649
+ document: c,
1650
+ input: l,
1651
+ kind: e,
1652
+ options: e === "html" ? t : void 0
1653
+ }, m.workerTimeoutMs, i, d.signal, d);
1654
+ d.signal?.throwIfAborted(), n.kind === "html" ? (b = n.html, x = n.warnings) : y = n;
1655
+ }
1656
+ if (b === void 0 && (y ??= _t(c, l, t), d.signal?.throwIfAborted(), x = [...y.warnings], b = await _.parse(y.document, {
1657
+ ...u,
1658
+ onProgress: d.onProgress,
1659
+ onWarning(e) {
1660
+ x.push(e), u?.onWarning?.(e);
1661
+ },
1662
+ signal: d.signal,
1663
+ waitIfPaused: d.waitIfPaused
1664
+ })), d.signal?.throwIfAborted(), o !== f) throw new DOMException("Render runtime was disposed", "AbortError");
1665
+ return v.durationMs = performance.now() - p, {
1666
+ execution: v,
1667
+ output: b,
1668
+ warnings: x
1669
+ };
1670
+ }
1671
+ async function l(e, t, n, r = {}) {
1672
+ let i = await f("html", e, t, n, r);
1673
+ if (typeof i.output != "string") throw Error("HTML parser must return a string");
1674
+ return {
1675
+ execution: i.execution,
1676
+ html: i.output,
1677
+ warnings: i.warnings
1678
+ };
1679
+ }
1680
+ async function u(e, t, n, r = {}) {
1681
+ let i = await f("pdf", e, t, n, r);
1682
+ if (!(i.output instanceof Blob)) throw Error("PDF parser must return a Blob");
1683
+ return {
1684
+ blob: i.output,
1685
+ execution: i.execution,
1686
+ warnings: i.warnings
1687
+ };
1688
+ }
1689
+ function d() {
1690
+ o += 1;
1691
+ for (let e of a) e.abort(new M(N("parser.worker.cancelled"), { code: "render.cancelled" }));
1692
+ r.dispose();
1693
+ }
1694
+ async function f(n, r, i, o, s) {
1695
+ let l = new AbortController(), u = () => l.abort(s.signal?.reason);
1696
+ s.signal?.throwIfAborted(), s.signal?.addEventListener("abort", u, { once: !0 }), a.add(l);
1697
+ try {
1698
+ let a = e.config?.() ?? U().rendering, u = [];
1699
+ s.onProgress?.({
1700
+ completed: 0,
1701
+ stage: "resources",
1702
+ total: 1
1703
+ });
1704
+ let d = await F(async (e) => await bt(r, i, t, a.fonts, e, (e) => u.push(e)), {
1705
+ ...s,
1706
+ signal: l.signal
1707
+ });
1708
+ try {
1709
+ await s.waitIfPaused?.(), l.signal.throwIfAborted();
1710
+ let e = await c(n, r, i, d ? {
1711
+ ...o,
1712
+ fontCss: d.css
1713
+ } : o, {
1714
+ ...s,
1715
+ signal: l.signal
1716
+ });
1717
+ return await s.waitIfPaused?.(), l.signal.throwIfAborted(), e.warnings = [.../* @__PURE__ */ new Set([...u, ...e.warnings])], e;
1718
+ } finally {
1719
+ d?.dispose();
1720
+ }
1721
+ } finally {
1722
+ a.delete(l), s.signal?.removeEventListener("abort", u);
1723
+ }
1724
+ }
1725
+ return {
1726
+ dispose: d,
1727
+ html: l,
1728
+ pdf: u
1729
+ };
1730
+ }
1731
+ // src/parser/registry.ts
1732
+ function kt(e = le()) {
1733
+ let t = new K(e), n = new Y(e), r = new Q();
1734
+ return r.register(t), r.register(n), {
1735
+ elements: e,
1736
+ html: t,
1737
+ pdf: n,
1738
+ registry: r
1739
+ };
1740
+ }
1741
+ var $ = kt();
1742
+ $.html, $.pdf;
1743
+ var At = $.registry;
1744
+ $.elements;
1745
+ // src/runtime/browser-output.ts
1746
+ var jt = 6e4;
1747
+ function Mt() {
1748
+ let e = /* @__PURE__ */ new Set(), t = /* @__PURE__ */ new Set(), n = /* @__PURE__ */ new Set(), r = !1;
1749
+ function i() {
1750
+ if (!r) {
1751
+ r = !0;
1752
+ for (let e of t) e.abort();
1753
+ for (let t of e) t.close();
1754
+ for (let e of n) clearTimeout(e);
1755
+ n.clear();
1756
+ }
1757
+ }
1758
+ function a(t) {
1759
+ if (r) throw t.close(), Error("Print studio has been disposed");
1760
+ let n = {
1761
+ close() {
1762
+ t.close(), e.delete(n);
1763
+ },
1764
+ get element() {
1765
+ return t.element;
1766
+ },
1767
+ get warnings() {
1768
+ return t.warnings;
1769
+ }
1770
+ };
1771
+ return e.add(n), n;
1772
+ }
1773
+ async function o(n, i = {}, a = !1) {
1774
+ if (r) throw Error("Print studio has been disposed");
1775
+ i.signal?.throwIfAborted();
1776
+ let o = new AbortController(), s = () => o.abort(i.signal?.reason);
1777
+ i.signal?.addEventListener("abort", s, { once: !0 }), t.add(o);
1778
+ let c = document.createElement("iframe");
1779
+ c.title = N("core.output.previewTitle"), c.setAttribute("sandbox", "allow-same-origin allow-modals"), c.style.cssText = a ? "position:fixed;width:0;height:0;border:0;visibility:hidden" : "width:100%;height:100%;border:0;background:white";
1780
+ let l, u = {
1781
+ close() {
1782
+ o.abort(), c.remove(), l?.remove(), e.delete(u);
1783
+ },
1784
+ element: c,
1785
+ warnings: []
1786
+ };
1787
+ e.add(u);
1788
+ try {
1789
+ if (!a && !i.container) {
1790
+ l = document.createElement("div"), l.style.cssText = "position:fixed;inset:0;z-index:2147483647;background:white;display:flex;flex-direction:column";
1791
+ let e = document.createElement("button");
1792
+ e.textContent = "×", e.setAttribute("aria-label", N("core.output.closePreview")), e.onclick = () => u.close(), l.append(e, c), document.body.append(l);
1793
+ } else (i.container ?? document.body).append(c);
1794
+ return await He(c, n, {
1795
+ onWarning(e) {
1796
+ u.warnings.push(e);
1797
+ },
1798
+ signal: o.signal,
1799
+ timeoutMs: i.timeoutMs
1800
+ }), o.signal.throwIfAborted(), u;
1801
+ } catch (e) {
1802
+ throw u.close(), e;
1803
+ } finally {
1804
+ t.delete(o), i.signal?.removeEventListener("abort", s);
1805
+ }
1806
+ }
1807
+ async function s(e, t) {
1808
+ let r = await o(e, t, !0), i = r.element.contentWindow;
1809
+ if (!i) throw r.close(), new M(N("core.output.windowUnavailable"), { code: "print.frame-unavailable" });
1810
+ function a() {
1811
+ s && (clearTimeout(s), n.delete(s)), i?.removeEventListener("afterprint", a), r.close();
1812
+ }
1813
+ i.addEventListener("afterprint", a, { once: !0 });
1814
+ let s = setTimeout(a, jt);
1815
+ n.add(s);
1816
+ try {
1817
+ return i.focus(), i.print(), r.warnings;
1818
+ } catch (e) {
1819
+ throw a(), e;
1820
+ }
1821
+ }
1822
+ return {
1823
+ dispose: i,
1824
+ preview: o,
1825
+ print: s,
1826
+ track: a
1827
+ };
1828
+ }
1829
+ // src/runtime/registries.ts
1830
+ function Nt(e = {}) {
1831
+ let t = new de();
1832
+ for (let n of [...e.builtinElements ?? [], ...e.elements ?? []]) t.unregister(n.type), t.register({ ...n });
1833
+ let n = new Q();
1834
+ n.register(new K(t)), n.register(new Y(t));
1835
+ for (let t of e.parsers ?? []) n.unregister(t.id, t.version), n.register(t);
1836
+ return {
1837
+ elements: t,
1838
+ parsers: n
1839
+ };
1840
+ }
1841
+ export { Oe as _, Tt as a, V as c, He as d, je as f, F as g, ke as h, Ot as i, Ge as l, I as m, Mt as n, G as o, Ae as p, At as r, U as s, Nt as t, z as u, Te as v, Ee as y };