@paprize/core 0.0.9 → 0.0.11

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,1492 @@
1
+ const fe = "paprize", _e = "pz-temp-container", at = "pz-current-element", lt = "pz-current-text", ct = "pz-ignored-element", dt = "pz-ignored-text", Y = "paprize-global-style", z = "pz-page", ve = "pz-section", T = "pz-preview", C = "data-pz-";
2
+ let re = !1;
3
+ const gt = () => {
4
+ re = !0;
5
+ }, q = () => re;
6
+ function se(i) {
7
+ return i.nodeType === Node.ELEMENT_NODE;
8
+ }
9
+ function be(i) {
10
+ return i.nodeType === Node.TEXT_NODE;
11
+ }
12
+ function B(i) {
13
+ const e = i.getBoundingClientRect(), t = getComputedStyle(i), n = parseFloat(t.marginTop) || 0, o = parseFloat(t.marginBottom) || 0;
14
+ return e.height + n + o;
15
+ }
16
+ function ye(i) {
17
+ i.style.visibility = "hidden", i.style.position = "absolute", i.style.left = "-9999px", i.style.top = "-9999px";
18
+ }
19
+ const ae = {
20
+ hyphen: "-",
21
+ keepOnSamePage: !1,
22
+ hyphenationDisabled: !1
23
+ }, we = `${C}hyphen`, xe = `${C}keep-on-same-page`, Ne = `${C}hyphenation-disabled`, le = {
24
+ hyphen: {
25
+ key: we,
26
+ reader: (i) => String(i)
27
+ },
28
+ keepOnSamePage: {
29
+ key: xe,
30
+ reader: (i) => i === "true"
31
+ },
32
+ hyphenationDisabled: {
33
+ key: Ne,
34
+ reader: (i) => i === "true"
35
+ }
36
+ };
37
+ function pt(i) {
38
+ const e = {};
39
+ for (const [t, n] of Object.entries(i)) {
40
+ const o = le[t];
41
+ o !== void 0 && n !== void 0 && (e[o.key] = String(n));
42
+ }
43
+ return e;
44
+ }
45
+ const Q = /* @__PURE__ */ new WeakMap();
46
+ function Se(i, e, t, n) {
47
+ if (t == null)
48
+ return;
49
+ const o = e(t);
50
+ o !== void 0 && (n[i] = o);
51
+ }
52
+ function ce(i) {
53
+ if (!i)
54
+ return {};
55
+ if (!(i instanceof Element))
56
+ return ce(i?.parentNode);
57
+ const e = {};
58
+ for (const o of Object.keys(ae)) {
59
+ const r = o, s = le[r], c = i.getAttribute(s.key);
60
+ Se(r, s.reader, c, e);
61
+ }
62
+ const n = { ...i.parentNode ? Q.get(i.parentNode) : void 0, ...e };
63
+ return Q.set(i, n), n;
64
+ }
65
+ const de = {
66
+ id: "default",
67
+ plugins: [],
68
+ ...ae
69
+ };
70
+ function Ce(i, e) {
71
+ const t = ce(i);
72
+ return { ...de, ...e, ...t };
73
+ }
74
+ function Pe(i) {
75
+ return i && i.__esModule && Object.prototype.hasOwnProperty.call(i, "default") ? i.default : i;
76
+ }
77
+ var $ = { exports: {} }, Ee = $.exports, ee;
78
+ function Te() {
79
+ return ee || (ee = 1, (function(i) {
80
+ (function(e, t) {
81
+ i.exports ? i.exports = t() : e.log = t();
82
+ })(Ee, function() {
83
+ var e = function() {
84
+ }, t = "undefined", n = typeof window !== t && typeof window.navigator !== t && /Trident\/|MSIE /.test(window.navigator.userAgent), o = [
85
+ "trace",
86
+ "debug",
87
+ "info",
88
+ "warn",
89
+ "error"
90
+ ], r = {}, s = null;
91
+ function c(l, p) {
92
+ var a = l[p];
93
+ if (typeof a.bind == "function")
94
+ return a.bind(l);
95
+ try {
96
+ return Function.prototype.bind.call(a, l);
97
+ } catch {
98
+ return function() {
99
+ return Function.prototype.apply.apply(a, [l, arguments]);
100
+ };
101
+ }
102
+ }
103
+ function _() {
104
+ console.log && (console.log.apply ? console.log.apply(console, arguments) : Function.prototype.apply.apply(console.log, [console, arguments])), console.trace && console.trace();
105
+ }
106
+ function w(l) {
107
+ return l === "debug" && (l = "log"), typeof console === t ? !1 : l === "trace" && n ? _ : console[l] !== void 0 ? c(console, l) : console.log !== void 0 ? c(console, "log") : e;
108
+ }
109
+ function f() {
110
+ for (var l = this.getLevel(), p = 0; p < o.length; p++) {
111
+ var a = o[p];
112
+ this[a] = p < l ? e : this.methodFactory(a, l, this.name);
113
+ }
114
+ if (this.log = this.debug, typeof console === t && l < this.levels.SILENT)
115
+ return "No console available for logging";
116
+ }
117
+ function v(l) {
118
+ return function() {
119
+ typeof console !== t && (f.call(this), this[l].apply(this, arguments));
120
+ };
121
+ }
122
+ function M(l, p, a) {
123
+ return w(l) || v.apply(this, arguments);
124
+ }
125
+ function G(l, p) {
126
+ var a = this, O, W, x, m = "loglevel";
127
+ typeof l == "string" ? m += ":" + l : typeof l == "symbol" && (m = void 0);
128
+ function ue(d) {
129
+ var u = (o[d] || "silent").toUpperCase();
130
+ if (!(typeof window === t || !m)) {
131
+ try {
132
+ window.localStorage[m] = u;
133
+ return;
134
+ } catch {
135
+ }
136
+ try {
137
+ window.document.cookie = encodeURIComponent(m) + "=" + u + ";";
138
+ } catch {
139
+ }
140
+ }
141
+ }
142
+ function Z() {
143
+ var d;
144
+ if (!(typeof window === t || !m)) {
145
+ try {
146
+ d = window.localStorage[m];
147
+ } catch {
148
+ }
149
+ if (typeof d === t)
150
+ try {
151
+ var u = window.document.cookie, H = encodeURIComponent(m), X = u.indexOf(H + "=");
152
+ X !== -1 && (d = /^([^;]+)/.exec(
153
+ u.slice(X + H.length + 1)
154
+ )[1]);
155
+ } catch {
156
+ }
157
+ return a.levels[d] === void 0 && (d = void 0), d;
158
+ }
159
+ }
160
+ function he() {
161
+ if (!(typeof window === t || !m)) {
162
+ try {
163
+ window.localStorage.removeItem(m);
164
+ } catch {
165
+ }
166
+ try {
167
+ window.document.cookie = encodeURIComponent(m) + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC";
168
+ } catch {
169
+ }
170
+ }
171
+ }
172
+ function E(d) {
173
+ var u = d;
174
+ if (typeof u == "string" && a.levels[u.toUpperCase()] !== void 0 && (u = a.levels[u.toUpperCase()]), typeof u == "number" && u >= 0 && u <= a.levels.SILENT)
175
+ return u;
176
+ throw new TypeError("log.setLevel() called with invalid level: " + d);
177
+ }
178
+ a.name = l, a.levels = {
179
+ TRACE: 0,
180
+ DEBUG: 1,
181
+ INFO: 2,
182
+ WARN: 3,
183
+ ERROR: 4,
184
+ SILENT: 5
185
+ }, a.methodFactory = p || M, a.getLevel = function() {
186
+ return x ?? W ?? O;
187
+ }, a.setLevel = function(d, u) {
188
+ return x = E(d), u !== !1 && ue(x), f.call(a);
189
+ }, a.setDefaultLevel = function(d) {
190
+ W = E(d), Z() || a.setLevel(d, !1);
191
+ }, a.resetLevel = function() {
192
+ x = null, he(), f.call(a);
193
+ }, a.enableAll = function(d) {
194
+ a.setLevel(a.levels.TRACE, d);
195
+ }, a.disableAll = function(d) {
196
+ a.setLevel(a.levels.SILENT, d);
197
+ }, a.rebuild = function() {
198
+ if (s !== a && (O = E(s.getLevel())), f.call(a), s === a)
199
+ for (var d in r)
200
+ r[d].rebuild();
201
+ }, O = E(
202
+ s ? s.getLevel() : "WARN"
203
+ );
204
+ var K = Z();
205
+ K != null && (x = E(K)), f.call(a);
206
+ }
207
+ s = new G(), s.getLogger = function(p) {
208
+ if (typeof p != "symbol" && typeof p != "string" || p === "")
209
+ throw new TypeError("You must supply a name when creating a logger.");
210
+ var a = r[p];
211
+ return a || (a = r[p] = new G(
212
+ p,
213
+ s.methodFactory
214
+ )), a;
215
+ };
216
+ var pe = typeof window !== t ? window.log : void 0;
217
+ return s.noConflict = function() {
218
+ return typeof window !== t && window.log === s && (window.log = pe), s;
219
+ }, s.getLoggers = function() {
220
+ return r;
221
+ }, s.default = s, s;
222
+ });
223
+ })($)), $.exports;
224
+ }
225
+ var ke = Te();
226
+ const S = /* @__PURE__ */ Pe(ke), g = S.getLogger(fe);
227
+ g.setDefaultLevel("info");
228
+ const U = "\x1B[46mPLUGIN\x1B[0m";
229
+ function y(i, e, ...t) {
230
+ i.sort((n, o) => n.order - o.order).forEach((n) => {
231
+ const o = n[e];
232
+ if (o) {
233
+ g.debug(
234
+ U,
235
+ `executing plugin ${n.name}:${String(e)} ()`,
236
+ t
237
+ );
238
+ try {
239
+ o(...t), g.debug(
240
+ U,
241
+ `plugin ${n.name}:${String(e)} executed`,
242
+ t
243
+ );
244
+ } catch (r) {
245
+ g.debug(
246
+ U,
247
+ `plugin ${n.name}:${String(e)} failed`,
248
+ r
249
+ );
250
+ }
251
+ }
252
+ });
253
+ }
254
+ const P = {
255
+ Element: "element",
256
+ Text: "text"
257
+ };
258
+ class F {
259
+ _node;
260
+ config;
261
+ type = P.Element;
262
+ transaction;
263
+ clonedFrom;
264
+ cloneCount;
265
+ constructor(e, t, n, o) {
266
+ this._node = e, this.transaction = t, this.config = n, this.clonedFrom = o, this.cloneCount = o ? o.cloneCount + 1 : 0;
267
+ }
268
+ getOriginalNode() {
269
+ let e = this.clonedFrom;
270
+ for (; e?.clonedFrom; )
271
+ e = e.clonedFrom;
272
+ return e?._node;
273
+ }
274
+ appendChild(e) {
275
+ this.transaction.isActive && this.transaction.addRollbackCallback(() => {
276
+ this._node.removeChild(e.getNode());
277
+ }), this._node.appendChild(e.getNode());
278
+ }
279
+ clone(e) {
280
+ const t = this._node.cloneNode(e), n = new F(
281
+ t,
282
+ this.transaction,
283
+ this.config,
284
+ this
285
+ );
286
+ return y(
287
+ this.config.plugins,
288
+ "onClone",
289
+ this.config.id,
290
+ this._node,
291
+ n
292
+ ), n;
293
+ }
294
+ getHeight() {
295
+ return B(this._node);
296
+ }
297
+ remove() {
298
+ this.transaction.addCommitCallback(() => {
299
+ this._node.remove();
300
+ });
301
+ }
302
+ isEmpty() {
303
+ return this._node.innerHTML === "";
304
+ }
305
+ getChildrenCount() {
306
+ return this._node.childNodes.length;
307
+ }
308
+ getNode() {
309
+ return this._node;
310
+ }
311
+ }
312
+ class Ae {
313
+ _node;
314
+ type = P.Text;
315
+ transaction;
316
+ config;
317
+ constructor(e, t, n) {
318
+ this._node = e, this.transaction = t, this.config = n;
319
+ }
320
+ get textContent() {
321
+ return this._node.textContent ?? "";
322
+ }
323
+ set textContent(e) {
324
+ this._node.textContent = e;
325
+ }
326
+ remove() {
327
+ this.transaction.addCommitCallback(() => {
328
+ this._node.remove();
329
+ });
330
+ }
331
+ getNode() {
332
+ return this._node;
333
+ }
334
+ }
335
+ function D(i, e, t) {
336
+ if (be(i))
337
+ return new Ae(i, e, t);
338
+ if (se(i))
339
+ return new F(i, e, t);
340
+ throw new Error("Unsupported node type");
341
+ }
342
+ const k = "\x1B[106mDOM\x1B[0m";
343
+ class Ie {
344
+ _transaction;
345
+ _treeWalker;
346
+ _config;
347
+ _completed = !1;
348
+ _currentNode = null;
349
+ _previousNode = null;
350
+ constructor(e, t, n) {
351
+ this._transaction = t, this._config = n, this._treeWalker = document.createTreeWalker(
352
+ e,
353
+ NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT
354
+ );
355
+ }
356
+ get completed() {
357
+ return this._completed;
358
+ }
359
+ get currentNode() {
360
+ return this._currentNode;
361
+ }
362
+ get previousNode() {
363
+ return this._previousNode;
364
+ }
365
+ goToNextNode() {
366
+ this._treeWalker.nextNode() || (this._completed = !0), g.debug(k, "moving to next node"), this.setState();
367
+ }
368
+ goToNextSiblingOrParentSibling() {
369
+ let e = 0;
370
+ if (this._treeWalker.nextSibling())
371
+ return g.debug(k, "moving to next sibling node"), this.setState(), { parentsTraversed: e };
372
+ for (; this._treeWalker.parentNode(); )
373
+ if (e++, this._treeWalker.nextSibling())
374
+ return g.debug(
375
+ k,
376
+ "moving to parent sibling node, traversed:",
377
+ e
378
+ ), this.setState(), { parentsTraversed: e };
379
+ return this._completed = !0, { parentsTraversed: e };
380
+ }
381
+ goToFirstChildOrNextNode() {
382
+ return this._treeWalker.firstChild() ? (g.debug(k, "moving to first child node"), this.setState(), { parentsTraversed: 1 }) : (this.goToNextNode(), { parentsTraversed: 0 });
383
+ }
384
+ setState() {
385
+ this._previousNode = this._currentNode, this._currentNode = D(
386
+ this._treeWalker.currentNode,
387
+ this._transaction,
388
+ Ce(this._treeWalker.currentNode, this._config)
389
+ ), g.debug(k, "moved to node", {
390
+ currentNode: this._currentNode,
391
+ previousNode: this._previousNode
392
+ });
393
+ }
394
+ }
395
+ class Fe {
396
+ _onRollback;
397
+ _onCommit;
398
+ isActive;
399
+ constructor() {
400
+ this._onRollback = [], this._onCommit = [], this.isActive = !1;
401
+ }
402
+ start = () => {
403
+ if (this.isActive)
404
+ throw new Error("Transaction already in progress");
405
+ this.isActive = !0, this._onRollback = [], this._onCommit = [];
406
+ };
407
+ addRollbackCallback = (e) => {
408
+ this._onRollback.push(e);
409
+ };
410
+ addCommitCallback = (e) => {
411
+ if (!this.isActive) {
412
+ e();
413
+ return;
414
+ }
415
+ this._onCommit.push(e);
416
+ };
417
+ rollback = () => {
418
+ this.isActive && (this.isActive = !1, this._onRollback.forEach((e) => e()));
419
+ };
420
+ commit = () => {
421
+ this.isActive && (this.isActive = !1, this._onCommit.forEach((e) => e()));
422
+ };
423
+ }
424
+ const V = "\x1B[102mPAGE\x1B[0m";
425
+ class L {
426
+ currentPage;
427
+ activeElement;
428
+ currentElement;
429
+ parentStack;
430
+ pageIsFull;
431
+ pageIndex;
432
+ pageHeight;
433
+ constructor(e, t, n, o, r, s, c) {
434
+ this.currentPage = e, this.activeElement = t, this.currentElement = n, this.parentStack = o, this.pageIsFull = r, this.pageIndex = s, this.pageHeight = c;
435
+ }
436
+ static create(e, t, n, o) {
437
+ return new L(
438
+ e,
439
+ null,
440
+ e,
441
+ t,
442
+ !1,
443
+ n,
444
+ o
445
+ );
446
+ }
447
+ clone = () => new L(
448
+ this.currentPage,
449
+ this.activeElement,
450
+ this.currentElement,
451
+ [...this.parentStack],
452
+ this.pageIsFull,
453
+ this.pageIndex,
454
+ this.pageHeight
455
+ );
456
+ }
457
+ class J {
458
+ _pageState;
459
+ _transaction;
460
+ _tempContainer;
461
+ _config;
462
+ constructor(e, t, n, o) {
463
+ this._tempContainer = e, this._config = o, this._transaction = n;
464
+ const r = J.createPageHtmlElement(
465
+ t.width
466
+ ), s = this.createNewPage(r);
467
+ this._pageState = L.create(s, [], 0, t.height), y(this._config.plugins, "onNewPage", o.id, this);
468
+ }
469
+ nextPage() {
470
+ const e = this.createNewPage(
471
+ this._pageState.currentPage.getNode().cloneNode(!1)
472
+ ), t = L.create(
473
+ e,
474
+ [],
475
+ this._pageState.pageIndex + 1,
476
+ this._pageState.pageHeight
477
+ );
478
+ this.cloneParentStackToNewPage(t), this.cleanupEmptyParent(), this._pageState = t, y(
479
+ this._config.plugins,
480
+ "onNewPage",
481
+ this._config.id,
482
+ this
483
+ );
484
+ }
485
+ cloneParentStackToNewPage(e) {
486
+ for (const t of this._pageState.parentStack) {
487
+ const n = t.clone(!1);
488
+ e.currentElement.appendChild(n), e.currentElement = n, e.parentStack.push(n);
489
+ }
490
+ }
491
+ cleanupEmptyParent() {
492
+ const e = [...this._pageState.parentStack], t = () => {
493
+ for (let n = e.length - 1; n >= 0; n--) {
494
+ const o = e[n];
495
+ o.isEmpty() && o.remove();
496
+ }
497
+ };
498
+ this._transaction.addCommitCallback(t);
499
+ }
500
+ enterElement() {
501
+ if (!this._pageState.activeElement || this._pageState.activeElement.type !== P.Element)
502
+ throw new Error("Invalid state: activeElement is not an Element");
503
+ g.debug(
504
+ V,
505
+ "entering an element",
506
+ this._pageState.activeElement
507
+ ), this._pageState.currentElement = this._pageState.activeElement, this._pageState.parentStack.push(this._pageState.activeElement);
508
+ }
509
+ leaveElement() {
510
+ this._pageState.activeElement = null;
511
+ const e = this._pageState.parentStack.pop();
512
+ g.debug(V, "leaving a parent element", e);
513
+ const t = this._pageState.parentStack.at(-1);
514
+ this._pageState.currentElement = t ?? this._pageState.currentPage;
515
+ }
516
+ static createPageHtmlElement(e) {
517
+ const t = document.createElement("div");
518
+ return t.style.width = `${e}px`, t.style.maxWidth = `${e}px`, t.className = z, t;
519
+ }
520
+ createNewPage(e) {
521
+ return g.debug(V, "creating new page"), this._tempContainer.appendChild(e), this._transaction.isActive && this._transaction.addRollbackCallback(() => {
522
+ this._tempContainer.removeChild(e);
523
+ }), D(e, this._transaction, this._config);
524
+ }
525
+ startTransaction() {
526
+ this._transaction.start();
527
+ const e = this._pageState.clone();
528
+ return this._transaction.addRollbackCallback(() => {
529
+ this._pageState = e;
530
+ }), this._transaction;
531
+ }
532
+ hasEmptySpace(e) {
533
+ return !this._pageState.pageIsFull && this._pageState.currentPage.getHeight() + (e || 1e-4) <= this._pageState.pageHeight;
534
+ }
535
+ isOverFlow() {
536
+ return this._pageState.currentPage.getHeight() > this._pageState.pageHeight;
537
+ }
538
+ markPageAsFull() {
539
+ this._pageState.pageIsFull = !0;
540
+ }
541
+ appendChild(e, t) {
542
+ const n = e.clone(t);
543
+ return this._pageState.currentElement.appendChild(n), this._pageState.activeElement = n, n;
544
+ }
545
+ addTextNode(e) {
546
+ if (this._pageState.activeElement?.type === P.Text)
547
+ return this._pageState.activeElement;
548
+ const t = document.createTextNode(e), n = D(
549
+ t,
550
+ this._transaction,
551
+ this._config
552
+ );
553
+ return this._pageState.currentElement.appendChild(n), this._pageState.activeElement = n, n;
554
+ }
555
+ getPageState() {
556
+ return this._pageState;
557
+ }
558
+ }
559
+ const h = {
560
+ None: 0,
561
+ // The node fits completely on the page, no further splitting required.
562
+ FullNodePlaced: 1,
563
+ // The entire node was placed on the page, continue with the next sibling or element.
564
+ SplitChildren: 2
565
+ // The node is too large for the page, and its children must be paginated individually.
566
+ };
567
+ function Le(i, e) {
568
+ const t = te(i, e);
569
+ if (t !== h.None)
570
+ return t;
571
+ const { rollback: n, commit: o } = e.startTransaction();
572
+ e.nextPage();
573
+ const r = te(i, e);
574
+ return r !== h.None ? (o(), r) : (n(), g.debug("Element is too big to fit on a page", i), h.None);
575
+ }
576
+ function te(i, e) {
577
+ if (e.hasEmptySpace(i.getHeight())) {
578
+ const n = e.appendChild(i, !0);
579
+ if (e.isOverFlow())
580
+ n.remove();
581
+ else
582
+ return h.FullNodePlaced;
583
+ }
584
+ if (i.config.keepOnSamePage || i.getChildrenCount() === 0)
585
+ return h.None;
586
+ const t = e.appendChild(i, !1);
587
+ return e.isOverFlow() ? (t.remove(), h.None) : h.SplitChildren;
588
+ }
589
+ function Re(i, e) {
590
+ let t = h.FullNodePlaced;
591
+ const n = i.textContent.split(/(\s+)/).filter((s) => s !== "");
592
+ let o, r = 0;
593
+ for (; o || r < n.length; ) {
594
+ const s = o ?? n[r], c = Oe(s, e, i.config);
595
+ c.completed || (t = h.None), c.pendingToken ? o = c.pendingToken : (o = void 0, r++);
596
+ }
597
+ return t;
598
+ }
599
+ function Oe(i, e, t) {
600
+ const n = e.addTextNode(""), o = n.textContent;
601
+ if (n.textContent += i, !e.isOverFlow())
602
+ return {
603
+ completed: !0
604
+ };
605
+ n.textContent = o;
606
+ const r = He(i, e, t);
607
+ return {
608
+ pendingToken: r.leftovers,
609
+ completed: r.completed
610
+ };
611
+ }
612
+ function He(i, e, t) {
613
+ const { rollback: n, commit: o } = e.startTransaction();
614
+ if (e.nextPage(), e.addTextNode(i), !e.isOverFlow())
615
+ return o(), {
616
+ completed: !0
617
+ };
618
+ if (n(), t.hyphenationDisabled)
619
+ return g.warn("Hyphenation disabled, skipping oversized token:", i), {
620
+ completed: !1
621
+ };
622
+ e.hasEmptySpace() || e.nextPage();
623
+ const r = $e(i, t.hyphen, e);
624
+ return {
625
+ completed: !0,
626
+ leftovers: r && r.length > 0 ? r : void 0
627
+ };
628
+ }
629
+ function $e(i, e, t) {
630
+ const n = t.addTextNode("");
631
+ let o = "";
632
+ for (let r = 0; r < i.length; r++) {
633
+ const s = i[r], c = o + s;
634
+ if (n.textContent = c + e, !t.hasEmptySpace())
635
+ return n.textContent = o ? o + e : "", t.markPageAsFull(), i.slice(r);
636
+ o = c;
637
+ }
638
+ return null;
639
+ }
640
+ const A = "\x1B[103mPAGINATOR\x1B[0m";
641
+ class j {
642
+ _domState;
643
+ _pageManager;
644
+ _transaction;
645
+ _tempContainer;
646
+ _config;
647
+ constructor(e, t, n) {
648
+ this._config = { ...de, ...n }, this._tempContainer = j.createTempContainer(this._config.id), this._transaction = new Fe(), this._domState = new Ie(e, this._transaction, this._config), this._pageManager = new J(
649
+ this._tempContainer,
650
+ t,
651
+ this._transaction,
652
+ this._config
653
+ );
654
+ }
655
+ static createTempContainer(e) {
656
+ const t = document.createElement("div");
657
+ return t.style.display = "flex", t.style.flexDirection = "column", t.style.gap = "20px", t.setAttribute(`${C}-section-id`, e), t.classList.add(_e), q() || ye(t), document.body.appendChild(t), t;
658
+ }
659
+ static paginate(e, t, n) {
660
+ const o = new j(e, t, n);
661
+ o.processAllNodes();
662
+ const r = Array.from(o._tempContainer.childNodes).filter((s) => se(s)).map((s) => s.innerHTML);
663
+ return q() ? Array.from(o._tempContainer.childNodes).forEach((s) => {
664
+ const c = s;
665
+ c.style.height = `${t.height}px`, c.style.width = `${t.width}px`;
666
+ }) : o._tempContainer.remove(), r;
667
+ }
668
+ processAllNodes() {
669
+ this._domState.goToNextNode();
670
+ do {
671
+ S.debug(
672
+ A,
673
+ "paginating node",
674
+ this._domState.currentNode
675
+ );
676
+ const e = this.processCurrentNode();
677
+ switch (y(
678
+ this._config.plugins,
679
+ "afterVisitNode",
680
+ this._config.id,
681
+ e,
682
+ this._domState,
683
+ this._pageManager
684
+ ), e) {
685
+ case h.None:
686
+ this.handleNodeSkipped();
687
+ break;
688
+ case h.FullNodePlaced:
689
+ this.handleFullNodePlaced();
690
+ break;
691
+ case h.SplitChildren:
692
+ this.handleChildrenSplit();
693
+ break;
694
+ }
695
+ } while (this._domState.completed === !1);
696
+ y(
697
+ this._config.plugins,
698
+ "afterPagination",
699
+ this._config.id,
700
+ this._domState,
701
+ this._pageManager
702
+ ), S.debug(A, "pagination completed");
703
+ }
704
+ handleNodeSkipped() {
705
+ S.debug(A, "node skipped - couldn't paginate"), this._domState.goToNextNode();
706
+ }
707
+ handleFullNodePlaced() {
708
+ S.debug(A, "node fully paginated");
709
+ const { parentsTraversed: e } = this._domState.goToNextSiblingOrParentSibling();
710
+ for (let t = 0; t < e; t++)
711
+ this._pageManager.leaveElement();
712
+ }
713
+ handleChildrenSplit() {
714
+ S.debug(
715
+ A,
716
+ "node partially paginated - splitting children"
717
+ ), this._domState.goToFirstChildOrNextNode().parentsTraversed === 1 && this._domState.previousNode?.type === P.Element && this._pageManager.enterElement();
718
+ }
719
+ processCurrentNode() {
720
+ if (!this._domState.currentNode)
721
+ return h.None;
722
+ if (this._domState.currentNode.type === P.Element) {
723
+ const e = {};
724
+ return y(
725
+ this._config.plugins,
726
+ "onVisitElement",
727
+ this._config.id,
728
+ this._domState,
729
+ this._pageManager,
730
+ e
731
+ ), e.result !== void 0 ? e.result : Le(
732
+ this._domState.currentNode,
733
+ this._pageManager
734
+ );
735
+ } else {
736
+ const e = {};
737
+ return y(
738
+ this._config.plugins,
739
+ "onVisitText",
740
+ this._config.id,
741
+ this._domState,
742
+ this._pageManager,
743
+ e
744
+ ), e.result !== void 0 ? e.result : Re(
745
+ this._domState.currentNode,
746
+ this._pageManager
747
+ );
748
+ }
749
+ }
750
+ }
751
+ class ge {
752
+ registry = /* @__PURE__ */ new Map();
753
+ addEventListener(e, t) {
754
+ const { registry: n } = this, o = new Set(n.get(e));
755
+ return o.add(t), n.set(e, o), () => this.removeEventListener(e, t);
756
+ }
757
+ removeEventListener(e, t) {
758
+ const { registry: n } = this, o = new Set(n.get(e));
759
+ o.delete(t), n.set(e, o);
760
+ }
761
+ async dispatch(e, ...t) {
762
+ const { registry: n } = this, o = n.get(e);
763
+ if (o)
764
+ for (const r of o)
765
+ await r(...t);
766
+ }
767
+ }
768
+ const ut = {
769
+ /** 841mm x 594mm */
770
+ A1: { height: "841mm", width: "594mm" },
771
+ /** 594mm x 420mm */
772
+ A2: { height: "594mm", width: "420mm" },
773
+ /** 420mm x 297mm */
774
+ A3: { height: "420mm", width: "297mm" },
775
+ /** 297mm x 210mm */
776
+ A4: { height: "297mm", width: "210mm" },
777
+ /** 210mm x 148mm */
778
+ A5: { height: "210mm", width: "148mm" },
779
+ /** 148mm x 105mm */
780
+ A6: { height: "148mm", width: "105mm" },
781
+ /** 500mm x 353mm */
782
+ B3: { height: "500mm", width: "353mm" },
783
+ /** 353mm x 250mm */
784
+ B4: { height: "353mm", width: "250mm" },
785
+ /** 250mm x 176mm */
786
+ B5: { height: "250mm", width: "176mm" },
787
+ /** 8.5in x 11in */
788
+ Letter: { height: "8.5in", width: "11in" },
789
+ /** 11in x 8.5in */
790
+ Legal: { height: "11in", width: "8.5in" },
791
+ /** 11in x 17in */
792
+ Tabloid: { height: "11in", width: "17in" }
793
+ }, ze = {
794
+ /** Top, Right, Bottom, Left: 1in */
795
+ Normal: {
796
+ top: "1in",
797
+ right: "1in",
798
+ bottom: "1in",
799
+ left: "1in"
800
+ },
801
+ /** Top: 0.4in, Right, Bottom, Left: 0.6in */
802
+ Narrow: {
803
+ top: "0.4in",
804
+ right: "0.6in",
805
+ bottom: "0.6in",
806
+ left: "0.6in"
807
+ },
808
+ /** Top, Bottom: 0.5in, Right, Left: 2in */
809
+ Wide: {
810
+ top: "0.5in",
811
+ right: "2in",
812
+ bottom: "0.5in",
813
+ left: "2in"
814
+ },
815
+ /** Top, Right, Bottom, Left: 0 */
816
+ None: {
817
+ top: "0in",
818
+ right: "0in",
819
+ bottom: "0in",
820
+ left: "0in"
821
+ }
822
+ }, Be = "__PAPRIZE_IS_INITIALIZED", ne = "__PAPRIZE_IS_READY", ie = "__PAPRIZE_READ_JSON_DATA_FILE";
823
+ function De(i) {
824
+ const e = i.getBoundingClientRect(), t = getComputedStyle(i), n = parseFloat(t.marginLeft) || 0, o = parseFloat(t.marginRight) || 0;
825
+ return {
826
+ height: B(i),
827
+ width: e.width + n + o
828
+ };
829
+ }
830
+ function je(i, e, t) {
831
+ const { height: n, width: o } = De(i), r = e ? B(e) : 0, s = t ? B(t) : 0;
832
+ return { height: n, width: o, sectionHeaderHeight: r, sectionFooterHeight: s };
833
+ }
834
+ function Me(i, e, t) {
835
+ return {
836
+ name: "sectionPageHeight",
837
+ order: 1,
838
+ afterPagination: (n, o, r) => {
839
+ t <= 0 || r.hasEmptySpace(t) || r.nextPage();
840
+ },
841
+ onNewPage: (n, o) => {
842
+ const r = o.getPageState();
843
+ r.pageIndex === 0 ? r.pageHeight = i + t : r.pageHeight = i + e + t;
844
+ }
845
+ };
846
+ }
847
+ function We(i) {
848
+ return i ? `${i.top} ${i.right} ${i.bottom} ${i.left}` : "0";
849
+ }
850
+ function Ue(i) {
851
+ let e = null;
852
+ return () => (e || (e = i()), e);
853
+ }
854
+ async function Ve() {
855
+ if (!(ie in window))
856
+ return null;
857
+ const i = await window[ie]?.();
858
+ return i ? JSON.parse(i) : null;
859
+ }
860
+ const qe = `
861
+ html {
862
+ box-sizing: border-box;
863
+ }
864
+
865
+ *,
866
+ *:before,
867
+ *:after {
868
+ box-sizing: inherit;
869
+ }
870
+
871
+ :root {
872
+ --paprize-page-background-color: #ffffff;
873
+ --paprize-page-box-shadow: rgb(142 138 138) -1px 3px 5px 2px;
874
+ --paprize-section-margin-bottom: 10px;
875
+ --paprize-preview-background-color: rgb(218 220 224);
876
+ --paprize-preview-padding: 30px 10px;
877
+ }
878
+
879
+ body {
880
+ margin: 0;
881
+ }
882
+
883
+ @media screen {
884
+ .${T} {
885
+ min-height: 100vh;
886
+ display: flex;
887
+ flex-direction: column;
888
+ align-items: center;
889
+ background-color: var(--paprize-preview-background-color);
890
+ padding: var(--paprize-preview-padding);
891
+ }
892
+
893
+ .${z} {
894
+ box-shadow: var(--paprize-page-box-shadow);
895
+ background-color: var(--paprize-page-background-color);
896
+ }
897
+
898
+ .${ve} {
899
+ margin-bottom: var(--paprize-section-margin-bottom);
900
+ }
901
+ }
902
+
903
+ @media print {
904
+ html:has(.${T}) *:not(.${T}):not(.${T} *):not(:has(.${T})) {
905
+ display: none !important;
906
+ }
907
+ }
908
+ `, Je = {
909
+ display: "flex",
910
+ flexDirection: "column"
911
+ }, Ge = {
912
+ position: "absolute",
913
+ left: "-9999px",
914
+ top: "-9999px",
915
+ visibility: "hidden"
916
+ }, Ze = (i, e) => ({
917
+ display: "flex",
918
+ flexDirection: "column",
919
+ width: i.width,
920
+ height: i.height,
921
+ maxHeight: i.height,
922
+ position: "relative",
923
+ padding: We(e),
924
+ zIndex: "1"
925
+ }), Ke = {
926
+ overflow: "hidden",
927
+ width: "100%",
928
+ height: "100%"
929
+ }, Xe = {
930
+ position: "absolute",
931
+ width: "100%",
932
+ height: "100%",
933
+ left: 0,
934
+ top: 0
935
+ }, Ye = (i) => ({
936
+ page: `section-${i}`
937
+ });
938
+ function Qe(i, e) {
939
+ return `@page section-${i} {
940
+ margin: none;
941
+ size:${e.width} ${e.height};
942
+ width:${e.width};
943
+ height:${e.height};
944
+ }`;
945
+ }
946
+ const b = {
947
+ globalStyle: qe,
948
+ component: Je,
949
+ outOfScreen: Ge,
950
+ page: Ze,
951
+ overlay: Xe,
952
+ pageContent: Ke,
953
+ sectionPageMedia: Qe,
954
+ section: Ye
955
+ };
956
+ function I(i) {
957
+ return i?.cloneNode(!0) ?? null;
958
+ }
959
+ function et(i) {
960
+ return {
961
+ sectionHeader: I(i.sectionHeader),
962
+ sectionFooter: I(i.sectionFooter),
963
+ pageHeader: I(i.pageHeader),
964
+ pageFooter: I(i.pageFooter),
965
+ pageContent: I(i.pageContent)
966
+ };
967
+ }
968
+ const tt = "data-pz-page-break";
969
+ class nt {
970
+ name = "pageBreak";
971
+ order = 1;
972
+ onVisitElement = (e, t, n, o) => {
973
+ t.currentNode.getNode().getAttribute(tt) === "true" && (n.markPageAsFull(), o.result = h.FullNodePlaced);
974
+ };
975
+ }
976
+ class it {
977
+ _options = {};
978
+ name = "table";
979
+ order = 1;
980
+ constructor(e = {}) {
981
+ this._options = e;
982
+ }
983
+ onNewPage = (e, t) => {
984
+ if (this._options.includeHeaderOnlyTables)
985
+ return;
986
+ const o = t.getPageState().parentStack.find(
987
+ (v) => this._isTable(v.getNode())
988
+ );
989
+ if (!o || !o.clonedFrom)
990
+ return;
991
+ const r = o.clonedFrom, s = r.getNode(), c = s.tHead;
992
+ if (!(c !== null))
993
+ return;
994
+ const w = s.tBodies;
995
+ if (!this._isTableBodyEmpty(w))
996
+ return;
997
+ if (r.remove(), o.getNode().tHead === null) {
998
+ const v = D(
999
+ c.cloneNode(!0),
1000
+ o.transaction,
1001
+ o.config
1002
+ );
1003
+ o.appendChild(v);
1004
+ }
1005
+ };
1006
+ onVisitElement = (e, t, n, o) => {
1007
+ const r = t.currentNode.getNode();
1008
+ r.tagName === "TR" ? t.currentNode.config.keepOnSamePage = !0 : (r.tagName === "TFOOT" && this._options.cloneFooter || r.tagName === "THEAD" && this._options.cloneHeader) && (o.result = h.FullNodePlaced);
1009
+ };
1010
+ onClone = (e, t, n) => {
1011
+ if (!this._isTable(t) || !n.clonedFrom)
1012
+ return;
1013
+ const o = n.getNode();
1014
+ if (o.tHead || o.tFoot)
1015
+ return;
1016
+ const r = n.getOriginalNode(), s = r.tHead;
1017
+ if (s && this._options.cloneHeader === !0) {
1018
+ const _ = new F(
1019
+ s.cloneNode(!0),
1020
+ n.transaction,
1021
+ n.config
1022
+ );
1023
+ n.appendChild(_);
1024
+ }
1025
+ const c = r.tFoot;
1026
+ if (c && this._options.cloneFooter === !0) {
1027
+ const _ = new F(
1028
+ c.cloneNode(!0),
1029
+ n.transaction,
1030
+ n.config
1031
+ );
1032
+ n.appendChild(_);
1033
+ }
1034
+ };
1035
+ _isTable(e) {
1036
+ return e.tagName === "TABLE";
1037
+ }
1038
+ _isTableBodyEmpty(e) {
1039
+ if (e.length === 0) return !0;
1040
+ const t = e[0];
1041
+ if (t.rows.length === 0) return !0;
1042
+ if (t.rows.length > 1) return !1;
1043
+ const n = t.rows[0];
1044
+ return n.cells.length === 0 ? !0 : n.cells.length > 1 ? !1 : n.cells[0].textContent?.trim().length === 0;
1045
+ }
1046
+ }
1047
+ const ot = [
1048
+ new nt(),
1049
+ new it()
1050
+ ], ht = {
1051
+ name: "debug",
1052
+ order: Number.MAX_SAFE_INTEGER,
1053
+ onNewPage: (i, e) => {
1054
+ const t = e.getPageState().currentPage.getNode();
1055
+ t.classList.contains(z) || t.classList.add(z), t.setAttribute(`${C}-element`, "page"), t.setAttribute(
1056
+ `${C}-height`,
1057
+ e.getPageState().pageHeight.toString()
1058
+ );
1059
+ }
1060
+ }, rt = "sectionToc";
1061
+ class mt {
1062
+ name = rt;
1063
+ order = 1;
1064
+ _state = /* @__PURE__ */ new Map();
1065
+ getContentList = () => Array.from(this._state.values()).flat();
1066
+ onVisitElement = (e, t, n) => {
1067
+ {
1068
+ const o = t.currentNode.getNode(), r = this.getHeadingLevel(o);
1069
+ if (!r || !o.textContent) return;
1070
+ const s = n.getPageState().pageIndex;
1071
+ s === 0 && this._state.set(e, []), this._state.get(e)?.push({
1072
+ sectionId: e,
1073
+ pageIndex: s,
1074
+ title: o.textContent,
1075
+ level: r
1076
+ });
1077
+ }
1078
+ };
1079
+ getHeadingLevel(e) {
1080
+ const t = e.tagName;
1081
+ return /^H[1-6]$/.test(t) ? parseInt(t.charAt(1), 10) : null;
1082
+ }
1083
+ }
1084
+ class R {
1085
+ _promises;
1086
+ monitor;
1087
+ constructor() {
1088
+ this._promises = [], this.monitor = new ge();
1089
+ }
1090
+ toPromise() {
1091
+ return this._promises.length > 0 ? Promise.allSettled(this._promises.map((e) => e.promise)).then(
1092
+ (e) => {
1093
+ const t = e.find(
1094
+ (n) => n.status === "rejected"
1095
+ );
1096
+ return t ? Promise.reject(t.reason) : Promise.resolve();
1097
+ }
1098
+ ) : Promise.resolve();
1099
+ }
1100
+ then(e) {
1101
+ this._promises.push(
1102
+ R.toTracked(this.toPromise().then(e))
1103
+ );
1104
+ }
1105
+ async add(e = []) {
1106
+ if (this._promises.push(...e.map(R.toTracked)), await new Promise((t) => setTimeout(t, 0)), this.getPending().length === 0) {
1107
+ this.monitor.dispatch("onChange", 0);
1108
+ return;
1109
+ }
1110
+ this._promises.forEach((t) => this.injectEvents(t));
1111
+ }
1112
+ static toTracked(e) {
1113
+ const t = {
1114
+ promise: e,
1115
+ status: "pending"
1116
+ };
1117
+ return t.promise.then(() => {
1118
+ t.status = "resolved";
1119
+ }).catch(() => {
1120
+ t.status = "rejected";
1121
+ }), t;
1122
+ }
1123
+ async injectEvents(e) {
1124
+ e.promise.finally(() => {
1125
+ const t = this.getPending();
1126
+ this.monitor.dispatch("onChange", t.length);
1127
+ });
1128
+ }
1129
+ getPending() {
1130
+ return Array.from(this._promises.values()).filter(
1131
+ (e) => e.status === "pending"
1132
+ );
1133
+ }
1134
+ }
1135
+ function ft(i, e) {
1136
+ return `${i}-${e + 1}`;
1137
+ }
1138
+ function st(i, e) {
1139
+ return e === "landscape" ? { height: i.width, width: i.height } : i;
1140
+ }
1141
+ const N = "\x1B[43mREPORT\x1B[0m";
1142
+ class _t {
1143
+ _sections;
1144
+ _monitor;
1145
+ _paginationInProgress;
1146
+ _pendingPaginateResolvers;
1147
+ _currentAbortController;
1148
+ constructor() {
1149
+ this._sections = /* @__PURE__ */ new Map(), this._monitor = new ge(), this._paginationInProgress = !1, this._pendingPaginateResolvers = [], this._currentAbortController = null, window[Be] = !0, this._injectStyle(b.globalStyle);
1150
+ }
1151
+ /**
1152
+ * Monitor instance used to subscribe to pagination events.
1153
+ * See {@link ReportBuilderEvents} for available event types.
1154
+ */
1155
+ get monitor() {
1156
+ return this._monitor;
1157
+ }
1158
+ /**
1159
+ * Removes a section from the registered sections, if it has already been registered in the report.
1160
+ */
1161
+ removeSection(e) {
1162
+ this._sections.delete(e);
1163
+ }
1164
+ /**
1165
+ * Registers a section by its ID, specifying the page size, margins, and other options.
1166
+ *
1167
+ * @param options - Configuration options for the section.
1168
+ * @param components - The DOM components associated with the section.
1169
+ * @param onPaginationCompleted - Callback invoked when pagination for the section is completed.
1170
+ * @returns `true` if the section was added to the report’s section list, or `false` if it already exists.
1171
+ */
1172
+ async tryAddSection(e, t, n) {
1173
+ if (this._sections.has(e.id))
1174
+ return !1;
1175
+ const o = {
1176
+ sectionIndex: this._sections.size,
1177
+ sectionId: e.id,
1178
+ isPaginated: !1,
1179
+ isSuspended: !!e.suspense?.length,
1180
+ pages: [],
1181
+ options: {
1182
+ ...e,
1183
+ size: st(
1184
+ e.size,
1185
+ e.orientation ?? "portrait"
1186
+ )
1187
+ },
1188
+ components: t
1189
+ };
1190
+ return this._sections.set(e.id, {
1191
+ context: o,
1192
+ onPaginationCompleted: n
1193
+ }), this._injectStyle(
1194
+ b.sectionPageMedia(e.id, e.size)
1195
+ ), await this._monitor.dispatch("sectionCreated", o), !0;
1196
+ }
1197
+ /**
1198
+ * Schedules a pagination operation.
1199
+ *
1200
+ * It is not possible to schedule multiple pagination operations in parallel,
1201
+ * as the process involves DOM manipulation, and concurrent modifications
1202
+ * could cause conflicts and unexpected results.
1203
+ * Each newly scheduled operation is queued and executed sequentially.
1204
+ * When a new pagination is scheduled, any ongoing or pending operations
1205
+ * will be aborted, and the new pagination will start immediately afterward.
1206
+ *
1207
+ * @returns A promise that resolves when the first pagination cycle is completed.
1208
+ * It does not wait for suspended sections to resolve and be paginated.
1209
+ * To wait for all sections to complete pagination, use the
1210
+ * `suspension` property of the returned result object.
1211
+ */
1212
+ async schedulePagination() {
1213
+ return this._sections.size === 0 ? (window[ne] = !0, {
1214
+ sections: [],
1215
+ suspension: Promise.resolve()
1216
+ }) : (this._paginationInProgress && this._currentAbortController && (g.debug(
1217
+ N,
1218
+ "Cancelling previous pagination operation."
1219
+ ), this._currentAbortController.abort(
1220
+ "Cancelled by new paginate call"
1221
+ )), this._paginationInProgress ? new Promise((e, t) => {
1222
+ this._pendingPaginateResolvers.push({ resolve: e, reject: t });
1223
+ }) : this._executePagination());
1224
+ }
1225
+ /**
1226
+ * Retrieves JSON data injected by **@paprize/puppeteer** during server-side rendering (SSR).
1227
+ *
1228
+ * If no injected data is available, the function returns the provided `defaultData`, or `null` if none is given.
1229
+ *
1230
+ * ⚠️ **Important Notes:**
1231
+ * - This function is **not type-safe** — it performs **no runtime type validation** on the returned data.
1232
+ * - It is available **only during server-side rendering** when using **@paprize/puppeteer**.
1233
+ * - When used in **client-side rendering** or **development** mode, you should provide a `defaultData` value for testing purposes.
1234
+ *
1235
+ * @template T - The expected type of the injected JSON data.
1236
+ * @param defaultData - Optional fallback value to return if no injected data is found.
1237
+ * @returns A promise resolving to the injected JSON data if available, otherwise the provided default value or `null`.
1238
+ */
1239
+ async getJsonData(e) {
1240
+ return await this._lazyJsonDataReader().catch(() => e) ?? e ?? null;
1241
+ }
1242
+ _lazyJsonDataReader = Ue(Ve);
1243
+ async _executePagination() {
1244
+ this._paginationInProgress = !0, this._currentAbortController = new AbortController();
1245
+ const e = this._currentAbortController.signal;
1246
+ try {
1247
+ if (g.debug(N, "Schedule paginate."), await document.fonts.ready, e.aborted)
1248
+ return new Promise((o, r) => {
1249
+ this._pendingPaginateResolvers.push({ resolve: o, reject: r });
1250
+ });
1251
+ const t = [];
1252
+ for (const o of this._sections.values()) {
1253
+ o.context.isPaginated = !1;
1254
+ const r = new R();
1255
+ await r.add(o.context.options.suspense), r.monitor.addEventListener("onChange", (s) => {
1256
+ g.debug(
1257
+ N,
1258
+ `${s} pending promises in section '${o.context.sectionId}'.`
1259
+ );
1260
+ }), r.then(async () => {
1261
+ e.aborted || (g.debug(
1262
+ N,
1263
+ `Start paginating section '${o.context.sectionId}'.`
1264
+ ), o.context.isSuspended = !1, await this._paginateSection(o));
1265
+ }), t.push(r);
1266
+ }
1267
+ const n = new R();
1268
+ return n.monitor.addEventListener("onChange", async () => {
1269
+ g.debug(N, "Report pagination completed."), await this._monitor.dispatch("paginationCycleCompleted", {
1270
+ sections: [...this._sections.values()].map(
1271
+ (o) => o.context
1272
+ )
1273
+ });
1274
+ }), e.aborted ? new Promise((o, r) => {
1275
+ this._pendingPaginateResolvers.push({ resolve: o, reject: r });
1276
+ }) : (await n.add(t.map((o) => o.toPromise())), {
1277
+ sections: [...this._sections.values()].map((o) => o.context),
1278
+ suspension: n.toPromise().then(() => {
1279
+ window[ne] = !0;
1280
+ })
1281
+ });
1282
+ } finally {
1283
+ this._processPendingPagination(), this._paginationInProgress = !1, this._currentAbortController = null;
1284
+ }
1285
+ }
1286
+ async _processPendingPagination() {
1287
+ if (this._pendingPaginateResolvers.length === 0)
1288
+ return;
1289
+ g.debug(
1290
+ N,
1291
+ `Processing ${this._pendingPaginateResolvers.length} pending paginate calls.`
1292
+ );
1293
+ const e = [...this._pendingPaginateResolvers];
1294
+ this._pendingPaginateResolvers = [];
1295
+ const t = await this._executePagination();
1296
+ for (const n of e)
1297
+ n.resolve(t);
1298
+ }
1299
+ _injectStyle(e) {
1300
+ let t = document.getElementById(
1301
+ Y
1302
+ );
1303
+ t || (t = document.createElement("style"), t.id = Y, t.textContent = "", document.head.appendChild(t)), t.textContent = (t.textContent + e).replace(/\s+/g, " ").replace(/\s*([:;{}])\s*/g, "$1").trim();
1304
+ }
1305
+ async _paginateSection(e) {
1306
+ const t = document.createElement("div");
1307
+ Object.assign(
1308
+ t.style,
1309
+ b.page(
1310
+ e.context.options.size,
1311
+ e.context.options.margin ?? ze.None
1312
+ )
1313
+ ), q() || Object.assign(t.style, b.outOfScreen);
1314
+ const n = et(e.context.components);
1315
+ n.sectionHeader && (Object.assign(
1316
+ n.sectionHeader.style,
1317
+ b.component
1318
+ ), t.appendChild(n.sectionHeader)), n.pageHeader && (Object.assign(n.pageHeader.style, b.component), t.appendChild(n.pageHeader)), Object.assign(n.pageContent.style, b.pageContent), t.appendChild(n.pageContent), n.pageFooter && (Object.assign(n.pageFooter.style, b.component), t.appendChild(n.pageFooter)), n.sectionFooter && (Object.assign(
1319
+ n.sectionFooter.style,
1320
+ b.component
1321
+ ), t.appendChild(n.sectionFooter)), document.body.appendChild(t);
1322
+ const { height: o, width: r, sectionHeaderHeight: s, sectionFooterHeight: c } = je(
1323
+ n.pageContent,
1324
+ n.sectionHeader,
1325
+ n.sectionFooter
1326
+ );
1327
+ if (o === 0)
1328
+ throw g.error(
1329
+ `Pagination failed for section '${e.context.sectionId}': insufficient space for page content or content is empty. Ensure that the section has content and that the header and footer do not occupy all available space.`
1330
+ ), t.remove(), new Error(
1331
+ `Pagination failed: no available space for content in section '${e.context.sectionId}'.`
1332
+ );
1333
+ const _ = j.paginate(
1334
+ n.pageContent,
1335
+ { height: o, width: r },
1336
+ {
1337
+ id: e.context.sectionId,
1338
+ plugins: [
1339
+ ...e.context.options.plugins ?? ot,
1340
+ Me(
1341
+ o,
1342
+ s,
1343
+ c
1344
+ )
1345
+ ]
1346
+ }
1347
+ );
1348
+ t.remove();
1349
+ const w = _.map((v, M) => ({
1350
+ pageIndex: M,
1351
+ totalPages: _.length,
1352
+ sectionId: e.context.sectionId,
1353
+ pageContentHtml: v
1354
+ })), f = {
1355
+ ...e.context,
1356
+ isPaginated: !0,
1357
+ isSuspended: !1,
1358
+ pages: w
1359
+ };
1360
+ this._sections.set(e.context.sectionId, {
1361
+ ...e,
1362
+ context: f
1363
+ }), await e.onPaginationCompleted(f);
1364
+ for (const v of w)
1365
+ await this._monitor.dispatch("pageCompleted", v);
1366
+ await this._monitor.dispatch("sectionCompleted", f);
1367
+ }
1368
+ }
1369
+ const oe = [
1370
+ "ad",
1371
+ "adipisicing",
1372
+ "aliqua",
1373
+ "aliquip",
1374
+ "amet",
1375
+ "anim",
1376
+ "aute",
1377
+ "cillum",
1378
+ "commodo",
1379
+ "consectetur",
1380
+ "consequat",
1381
+ "culpa",
1382
+ "cupidatat",
1383
+ "deserunt",
1384
+ "do",
1385
+ "dolor",
1386
+ "dolore",
1387
+ "duis",
1388
+ "ea",
1389
+ "eiusmod",
1390
+ "elit",
1391
+ "enim",
1392
+ "esse",
1393
+ "est",
1394
+ "et",
1395
+ "eu",
1396
+ "ex",
1397
+ "excepteur",
1398
+ "exercitation",
1399
+ "fugiat",
1400
+ "id",
1401
+ "in",
1402
+ "incididunt",
1403
+ "ipsum",
1404
+ "irure",
1405
+ "labore",
1406
+ "laboris",
1407
+ "laborum",
1408
+ "Lorem",
1409
+ "magna",
1410
+ "minim",
1411
+ "mollit",
1412
+ "nisi",
1413
+ "non",
1414
+ "nostrud",
1415
+ "nulla",
1416
+ "occaecat",
1417
+ "officia",
1418
+ "pariatur",
1419
+ "proident",
1420
+ "qui",
1421
+ "quis",
1422
+ "reprehenderit",
1423
+ "sint",
1424
+ "sit",
1425
+ "sunt",
1426
+ "tempor",
1427
+ "ullamco",
1428
+ "ut",
1429
+ "velit",
1430
+ "veniam",
1431
+ "voluptate"
1432
+ ];
1433
+ function vt(i, e) {
1434
+ if (i <= 0)
1435
+ return "";
1436
+ const t = [], n = Math.floor(e * 982451653);
1437
+ for (let o = 0; o < i; o++) {
1438
+ const r = (n + o * 2654435761) % Math.pow(2, 32), s = Math.floor(
1439
+ r / Math.pow(2, 32) * oe.length
1440
+ );
1441
+ t.push(oe[s]);
1442
+ }
1443
+ return t.length > 0 && (t[0] = t[0].charAt(0).toUpperCase() + t[0].slice(1)), t.join(" ") + ".";
1444
+ }
1445
+ export {
1446
+ ge as EventDispatcher,
1447
+ nt as PageBreakPlugin,
1448
+ j as Paginator,
1449
+ _t as ReportBuilder,
1450
+ mt as SectionTocPlugin,
1451
+ h as SplitResult,
1452
+ it as TablePlugin,
1453
+ st as adjustPageSize,
1454
+ C as attributePrefix,
1455
+ ft as buildPageId,
1456
+ et as cloneComponents,
1457
+ vt as createLoremIpsumParagraph,
1458
+ at as currentElementClassName,
1459
+ lt as currentTextClassName,
1460
+ ht as debugPlugin,
1461
+ ot as defaultPlugins,
1462
+ gt as enableDebugMode,
1463
+ ce as getNodeLayoutOptionsFromAttribute,
1464
+ B as getVisibleHeight,
1465
+ qe as globalStyle,
1466
+ Y as globalStyleId,
1467
+ ct as ignoredElementClassName,
1468
+ dt as ignoredTextClassName,
1469
+ q as isDebugMode,
1470
+ se as isElement,
1471
+ be as isTextNode,
1472
+ we as layoutOptionHyphenAttribute,
1473
+ Ne as layoutOptionHyphenationDisabledAttribute,
1474
+ xe as layoutOptionKeepOnSamePageAttribute,
1475
+ pt as layoutOptionsToAttributes,
1476
+ g as logger,
1477
+ fe as loggerName,
1478
+ ye as moveOffscreen,
1479
+ tt as pageBreakAttributeName,
1480
+ z as pageClassName,
1481
+ ze as pageMargin,
1482
+ ut as pageSize,
1483
+ Be as paprize_isInitialized,
1484
+ ne as paprize_isReady,
1485
+ ie as paprize_readJsonDataFile,
1486
+ T as previewClassName,
1487
+ b as reportStyles,
1488
+ ve as sectionClassName,
1489
+ rt as sectionTocName,
1490
+ _e as tempContainerClassName
1491
+ };
1492
+ //# sourceMappingURL=paprize-core.js.map