@agile-team/mach-report 2.16.0 → 2.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/README.md +10 -6
  2. package/dist/{ExcelBindingWizard-CP6h2x1f.cjs → ExcelBindingWizard-Bq6FYME6.cjs} +1 -1
  3. package/dist/{ExcelBindingWizard-HhB3hAJE.js → ExcelBindingWizard-Co1svTsw.js} +3 -3
  4. package/dist/{ParamEditor-CUQLgoxa.cjs → ParamEditor-B5UZRgxv.cjs} +1 -1
  5. package/dist/{ParamEditor-OKesP_nO.js → ParamEditor-DNNARyeB.js} +1 -1
  6. package/dist/{ReportBatchPanel-cZCAMAwH.cjs → ReportBatchPanel-Ctvs2t_9.cjs} +1 -1
  7. package/dist/{ReportBatchPanel-ruxcbfY6.js → ReportBatchPanel-uQh06usx.js} +1 -1
  8. package/dist/ReportPreview-BdQawRh0.js +4879 -0
  9. package/dist/ReportPreview-CJC_-j2I.cjs +6 -0
  10. package/dist/{ReportTemplateLibrary-BDlNT8JN.cjs → ReportTemplateLibrary-CnP7_1pH.cjs} +1 -1
  11. package/dist/{ReportTemplateLibrary-DcwrH-63.js → ReportTemplateLibrary-TIL_Oj2l.js} +1 -1
  12. package/dist/RuleEditor-DkRjOLlr.js +2141 -0
  13. package/dist/RuleEditor-h5anGsDB.cjs +1 -0
  14. package/dist/{TemplateOutlinePanel-CGrT5DFN.cjs → TemplateOutlinePanel-BlLxRrfu.cjs} +1 -1
  15. package/dist/{TemplateOutlinePanel-SXCjaPKR.js → TemplateOutlinePanel-BouxsuqQ.js} +1 -1
  16. package/dist/{TemplateReusePanel-lHLOS9Wn.js → TemplateReusePanel-BEACLPaN.js} +2 -2
  17. package/dist/{TemplateReusePanel-6Z3wRFz8.cjs → TemplateReusePanel-yxsHSO40.cjs} +1 -1
  18. package/dist/{TemplateReviewPanel-CJ9PLc48.js → TemplateReviewPanel-B1OGRY2i.js} +1 -1
  19. package/dist/{TemplateReviewPanel-Dpk7sLcF.cjs → TemplateReviewPanel-D9Cx0m2N.cjs} +1 -1
  20. package/dist/analytics.cjs +1 -1
  21. package/dist/analytics.d.cts +63 -1
  22. package/dist/analytics.d.ts +63 -1
  23. package/dist/analytics.js +4 -4
  24. package/dist/artifact-integrity.json +86 -90
  25. package/dist/assets-BIMVwjQe.js +231 -0
  26. package/dist/assets-Dfs2ElxI.cjs +1 -0
  27. package/dist/{auto-YR7a4BtF.js → auto-BIOmtVhk.js} +14 -14
  28. package/dist/{auto-uVBjX1j5.cjs → auto-DDHflI9v.cjs} +1 -1
  29. package/dist/computed-BW5a8QFk.js +612 -0
  30. package/dist/computed-C2GD3XcE.cjs +1 -0
  31. package/dist/dataset-DL83majE.js +161 -0
  32. package/dist/dataset-IrlXbUvh.cjs +1 -0
  33. package/dist/{designer-BfQSahxq.js → designer-D9XAxqSc.js} +1194 -1179
  34. package/dist/designer-uCDo5XSK.cjs +2 -0
  35. package/dist/designer.cjs +1 -1
  36. package/dist/designer.d.cts +125 -3
  37. package/dist/designer.d.ts +125 -3
  38. package/dist/designer.js +1 -1
  39. package/dist/{drill-CsdjgkRM.cjs → drill-ByN8COs_.cjs} +1 -1
  40. package/dist/{drill-DIGsZfyB.js → drill-CKW3Xtfa.js} +11 -11
  41. package/dist/{encoding-BYF9ZTl9.cjs → encoding-BFMFIc4r.cjs} +1 -1
  42. package/dist/{encoding-BOGq4qYL.js → encoding-DP_Eaf0A.js} +2 -2
  43. package/dist/{font-loader-EKLzOJxf.cjs → font-loader-7FWVlykp.cjs} +1 -1
  44. package/dist/{font-loader-CzI1GuBc.js → font-loader-CQZowp0I.js} +1 -1
  45. package/dist/index.cjs +8 -8
  46. package/dist/index.d.cts +173 -1
  47. package/dist/index.d.ts +173 -1
  48. package/dist/index.js +1205 -808
  49. package/dist/json-snapshot-D7PE1NsU.cjs +2 -0
  50. package/dist/{json-snapshot-D6ioHth9.js → json-snapshot-DYmEe3sO.js} +769 -692
  51. package/dist/matrix-JLAXlux-.js +302 -0
  52. package/dist/matrix-gTHpDTGm.cjs +1 -0
  53. package/dist/{pdf-ByVCb1i6.cjs → pdf-B8JouyYv.cjs} +47 -47
  54. package/dist/{pdf-DJ5S6ukC.js → pdf-l3ea86di.js} +13 -15
  55. package/dist/pdf.cjs +1 -1
  56. package/dist/pdf.d.cts +12 -0
  57. package/dist/pdf.d.ts +12 -0
  58. package/dist/pdf.js +2 -2
  59. package/dist/{plugin-C2j5_mhx.js → plugin-BBp74CQZ.js} +1 -1
  60. package/dist/{plugin-Dr39GBRG.cjs → plugin-CtFX9PFG.cjs} +1 -1
  61. package/dist/{prepared-DqtpvRTn.js → prepared-CARicKYh.js} +1 -1
  62. package/dist/{prepared-DdrjLC7L.cjs → prepared-Ch1x_Gog.cjs} +1 -1
  63. package/dist/{protocol-BzwMP4Vw.cjs → protocol-B5A2uom4.cjs} +1 -1
  64. package/dist/{protocol-kt4Iy6-3.js → protocol-BaiWjq5w.js} +3 -3
  65. package/dist/{record-bindings-DUX1VMlR.cjs → record-bindings-B86Sur_y.cjs} +1 -1
  66. package/dist/{record-bindings-CZWBJ1fU.js → record-bindings-D4TuMzHs.js} +1 -1
  67. package/dist/{region-binding-workflow-CWNvIjkV.js → region-binding-workflow-BNasF5kz.js} +2 -2
  68. package/dist/{region-binding-workflow-CqSMxQ4p.cjs → region-binding-workflow-O2Cni3mF.cjs} +1 -1
  69. package/dist/report-encoding-worker.cjs +1 -1
  70. package/dist/report-encoding-worker.js +1 -1
  71. package/dist/runtime-DakRXui3.js +170 -0
  72. package/dist/runtime-dL5ygIfa.cjs +1 -0
  73. package/dist/sbom.cdx.json +1 -1
  74. package/dist/server/node.d.cts +46 -0
  75. package/dist/server/node.d.ts +46 -0
  76. package/dist/server-node.cjs +4 -4
  77. package/dist/server-node.js +2540 -1911
  78. package/dist/server.cjs +1 -1
  79. package/dist/server.d.cts +174 -1
  80. package/dist/server.d.ts +174 -1
  81. package/dist/server.js +787 -544
  82. package/dist/style.css +1 -1
  83. package/dist/template-catalog-Dua8h9ZA.cjs +1 -0
  84. package/dist/{template-catalog-BtR2JmCL.js → template-catalog-wT1fNeAP.js} +4 -4
  85. package/dist/{template-fragments-BVsbxs4a.cjs → template-fragments-BajTajb4.cjs} +1 -1
  86. package/dist/{template-fragments-By0aZC1D.js → template-fragments-DmX5XK4N.js} +1 -1
  87. package/dist/{template-registry-C62vpv4a.cjs → template-registry-CpysHAxy.cjs} +1 -1
  88. package/dist/{template-registry-Cw3vRTX2.js → template-registry-u11fPd8D.js} +5 -5
  89. package/dist/{tree-BX380Rr7.cjs → tree-CLpxYbKa.cjs} +1 -1
  90. package/dist/{tree-CjVZLRw7.js → tree-DNJorJUf.js} +1 -1
  91. package/dist/vue/async.d.cts +108 -2
  92. package/dist/vue/async.d.ts +108 -2
  93. package/dist/vue/index.d.cts +130 -3
  94. package/dist/vue/index.d.ts +130 -3
  95. package/dist/vue-async.cjs +1 -1
  96. package/dist/vue-async.js +3 -3
  97. package/dist/vue.cjs +1 -1
  98. package/dist/vue.js +4 -4
  99. package/dist/{workbook-session-BeSO8PFB.js → workbook-session-B8pNW24X.js} +1 -1
  100. package/dist/{workbook-session-Cbts-22R.cjs → workbook-session-DN5LSA5C.cjs} +1 -1
  101. package/dist/worker.cjs +1 -1
  102. package/dist/worker.js +4 -4
  103. package/dist/xlsx.cjs +4 -4
  104. package/dist/xlsx.d.cts +88 -2
  105. package/dist/xlsx.d.ts +88 -2
  106. package/dist/xlsx.js +232 -230
  107. package/package.json +1 -1
  108. package/dist/ReportPreview-BcDKCLiK.js +0 -4834
  109. package/dist/ReportPreview-Bk9nLfO9.cjs +0 -6
  110. package/dist/RuleEditor-BX5S8RSF.cjs +0 -1
  111. package/dist/RuleEditor-CGl9XY2s.js +0 -2037
  112. package/dist/assets-CqIbfbTr.js +0 -126
  113. package/dist/assets-e4YSke8n.cjs +0 -1
  114. package/dist/capabilities-DDwXr_cA.js +0 -103
  115. package/dist/capabilities-DNLyZdNw.cjs +0 -1
  116. package/dist/computed-C-4C2S5h.js +0 -521
  117. package/dist/computed-CGV2a809.cjs +0 -1
  118. package/dist/dataset-BkRmwgeJ.cjs +0 -1
  119. package/dist/dataset-H5pFuQGU.js +0 -121
  120. package/dist/designer-CPPdeM5_.cjs +0 -2
  121. package/dist/diagnostic-notification-B9K9We3h.cjs +0 -1
  122. package/dist/diagnostic-notification-qGAYZdkB.js +0 -7
  123. package/dist/json-snapshot-DknkjvxP.cjs +0 -2
  124. package/dist/matrix-CGRGkn5s.js +0 -112
  125. package/dist/matrix-gEO7ZM_u.cjs +0 -1
  126. package/dist/runtime-BjKBI530.js +0 -168
  127. package/dist/runtime-CBFEPKEs.cjs +0 -1
  128. package/dist/template-catalog-C2NLdrwB.cjs +0 -1
package/dist/index.js CHANGED
@@ -1,32 +1,137 @@
1
- import { D as ne, a as U, r as z, b as _, c as Pe, d as q, e as Ae, m as le, f as ke, g as ce, p as W, P as Q } from "./style-67OqfNed.js";
2
- import { C as Zn, h as Qn, i as er, j as tr, L as nr, M as rr, S as ir, k as ar, l as or } from "./style-67OqfNed.js";
3
- import { R as lr, e as cr, f as dr, p as mr, b as hr, t as gr, d as fr } from "./record-bindings-CZWBJ1fU.js";
4
- import { i as re, a as $e } from "./component-tree-Ca6YYfHq.js";
5
- import { R as pr } from "./component-tree-Ca6YYfHq.js";
6
- import { v as Ie, R as Ne, p as G, a as Qe } from "./template-registry-Cw3vRTX2.js";
7
- import { b as br, c as Mr, d as vr, e as yr, s as xr, f as Sr, g as Er, h as Tr } from "./template-registry-Cw3vRTX2.js";
8
- import { v as et } from "./dataset-H5pFuQGU.js";
9
- import { d as Rr } from "./dataset-H5pFuQGU.js";
10
- import { h as de, w as Le } from "./textwrap-BEIg2w8y.js";
11
- import { c as Ar, a as kr, b as $r, m as Ir } from "./textwrap-BEIg2w8y.js";
12
- import { R as me, d as tt, a as nt, p as rt, s as it } from "./json-snapshot-D6ioHth9.js";
13
- import { D as Lr, P as Dr, b as Fr, c as Or, e as zr, f as Hr, g as Br, h as Wr, i as _r, j as jr, k as Ur, l as Gr, m as qr, n as Vr, o as Yr, q as Kr, r as Jr, t as Xr, u as Zr, v as Qr, w as ei, x as ti, y as ni, z as ri, A as ii, B as ai, C as oi } from "./json-snapshot-D6ioHth9.js";
14
- import { r as De } from "./grid-geometry-BNptEcMm.js";
15
- import { r as Fe, d as at } from "./rich-text-layout-Ct5WrY1g.js";
16
- import { r as Y, O as ot } from "./capabilities-DDwXr_cA.js";
17
- import { i as li } from "./capabilities-DDwXr_cA.js";
18
- import { o as st } from "./progress-Hc2vxoCs.js";
19
- import { n as Oe } from "./diagnostic-notification-qGAYZdkB.js";
20
- import { r as he } from "./assets-CqIbfbTr.js";
21
- import { O as di } from "./assets-CqIbfbTr.js";
22
- import { c as lt } from "./drill-DIGsZfyB.js";
23
- import { R as hi, a as gi, m as fi, r as ui, v as pi } from "./drill-DIGsZfyB.js";
24
- import { R as bi, a as Mi, f as vi, i as yi, b as xi, c as Si, p as Ei, r as Ti, v as Ci, d as Ri } from "./param-validation-Do7Eg8Zv.js";
25
- import { c as Ai, a as ki, d as $i, r as Ii, b as Ni } from "./template-catalog-BtR2JmCL.js";
26
- import { c as Di, i as Fi, t as Oi } from "./template-outline-cnWfT_LK.js";
27
- import { a as Hi, c as Bi, i as Wi, b as _i } from "./template-fragments-By0aZC1D.js";
28
- import { T as Ui, c as Gi, v as qi } from "./tree-CjVZLRw7.js";
29
- const ct = {
1
+ import { D as le, a as J, r as _, b as q, c as Ge, d as Y, e as Je, m as ue, f as Ke, g as ye, p as U, P as oe } from "./style-67OqfNed.js";
2
+ import { C as zr, h as Hr, i as Br, j as _r, L as Wr, M as Vr, S as Ur, k as qr, l as Gr } from "./style-67OqfNed.js";
3
+ import { R as Kr, e as Yr, f as Xr, p as Zr, b as Qr, t as ei, d as ti } from "./record-bindings-D4TuMzHs.js";
4
+ import { i as ce, a as Ye } from "./component-tree-Ca6YYfHq.js";
5
+ import { R as ri } from "./component-tree-Ca6YYfHq.js";
6
+ import { v as Xe, R as Ze, a as pe, p as re, b as St } from "./template-registry-u11fPd8D.js";
7
+ import { c as oi, d as ai, e as si, s as li, f as ci, g as di, h as mi } from "./template-registry-u11fPd8D.js";
8
+ import { v as Et } from "./dataset-DL83majE.js";
9
+ import { d as fi } from "./dataset-DL83majE.js";
10
+ import { h as Me, w as Qe } from "./textwrap-BEIg2w8y.js";
11
+ import { c as ui, a as pi, b as wi, m as bi } from "./textwrap-BEIg2w8y.js";
12
+ import { R as ve, d as Ct, s as et, a as Tt, p as Rt } from "./json-snapshot-DYmEe3sO.js";
13
+ import { D as Mi, P as vi, b as xi, c as Si, e as Ei, f as Ci, g as Ti, h as Ri, i as $i, j as Pi, k as Ai, l as ki, m as Oi, n as Ii, o as Ni, q as Li, r as Di, t as ji, u as Fi, v as zi, w as Hi, x as Bi, y as _i, z as Wi, A as Vi, B as Ui, C as qi, E as Gi } from "./json-snapshot-DYmEe3sO.js";
14
+ import { r as xe } from "./grid-geometry-BNptEcMm.js";
15
+ import { r as Se, d as $t } from "./rich-text-layout-Ct5WrY1g.js";
16
+ import { r as Z, n as tt, O as Pt, a as Ee } from "./assets-BIMVwjQe.js";
17
+ import { b as Ki, i as Yi } from "./assets-BIMVwjQe.js";
18
+ import { o as At, w as Le } from "./progress-Hc2vxoCs.js";
19
+ import { c as kt } from "./drill-CKW3Xtfa.js";
20
+ import { R as Zi, a as Qi, m as eo, r as to, v as no } from "./drill-CKW3Xtfa.js";
21
+ import { R as io, a as oo, f as ao, i as so, b as lo, c as co, p as mo, r as ho, v as fo, d as go } from "./param-validation-Do7Eg8Zv.js";
22
+ import { c as po, a as wo, d as bo, r as yo, b as Mo } from "./template-catalog-wT1fNeAP.js";
23
+ import { c as xo, i as So, t as Eo } from "./template-outline-cnWfT_LK.js";
24
+ import { a as To, c as Ro, i as $o, b as Po } from "./template-fragments-DmX5XK4N.js";
25
+ import { T as ko, c as Oo, v as Io } from "./tree-DNJorJUf.js";
26
+ function we(e, t, n) {
27
+ let r = 0, i = e.length;
28
+ for (; r < i; ) {
29
+ const o = r + i >>> 1;
30
+ n(e[o]) < t ? r = o + 1 : i = o;
31
+ }
32
+ return r;
33
+ }
34
+ function nt(e) {
35
+ if (![e.leftMm, e.topMm, e.widthMm, e.heightMm].every(Number.isFinite) || e.widthMm < 0 || e.heightMm < 0) throw new RangeError("Preview viewport must have finite coordinates and nonnegative dimensions.");
36
+ return e;
37
+ }
38
+ function Ot(e) {
39
+ const t = e.rows.map(() => []);
40
+ for (const n of e.cells) {
41
+ const r = Math.min(t.length, n.ri + (n.cell.rowSpan ?? 1));
42
+ for (let i = n.ri; i < r; i++) t[i].push(n);
43
+ }
44
+ for (const n of t) n.sort((r, i) => r.xMm - i.xMm);
45
+ return {
46
+ cells(n) {
47
+ nt(n);
48
+ const r = /* @__PURE__ */ new Set(), i = n.topMm + n.heightMm, o = n.leftMm + n.widthMm;
49
+ let l = we(e.rows, n.topMm, (s) => s.pos + s.size);
50
+ for (; l < t.length && e.rows[l].pos <= i; ) {
51
+ const s = t[l++];
52
+ let a = we(s, n.leftMm, (c) => c.xMm + c.widthMm);
53
+ for (; a < s.length && s[a].xMm <= o; ) r.add(s[a++]);
54
+ }
55
+ return [...r].sort((s, a) => s.ri - a.ri || s.ci - a.ci);
56
+ }
57
+ };
58
+ }
59
+ function It(e) {
60
+ const t = ["h", "v"].map((n) => e.filter((r) => r.kind === n).sort((r, i) => r.pos - i.pos));
61
+ return (n) => {
62
+ const r = [];
63
+ return t.forEach((i, o) => {
64
+ const l = o === 0 ? n.topMm : n.leftMm, s = l + (o === 0 ? n.heightMm : n.widthMm), a = o === 0 ? n.leftMm : n.topMm, c = a + (o === 0 ? n.widthMm : n.heightMm);
65
+ let d = we(i, l, (m) => m.pos);
66
+ for (; d < i.length && i[d].pos <= s; ) {
67
+ const m = i[d++];
68
+ m.to >= a && m.from <= c && r.push(m);
69
+ }
70
+ }), r;
71
+ };
72
+ }
73
+ function Nt() {
74
+ const e = [];
75
+ return {
76
+ mount(t) {
77
+ e.push(Ft(t));
78
+ },
79
+ update(t, n, r) {
80
+ nt(t);
81
+ let i = !1;
82
+ for (const o of e) i = o.update(t, o.component === n ? r : void 0) || i;
83
+ return i;
84
+ }
85
+ };
86
+ }
87
+ function Lt(e, t) {
88
+ const n = Math.max(8, e.widthMm / 4), r = Math.max(8, e.heightMm / 4);
89
+ return {
90
+ leftMm: e.leftMm - t.leftMm - n,
91
+ topMm: e.topMm - t.topMm - r,
92
+ widthMm: e.widthMm + 2 * n,
93
+ heightMm: e.heightMm + 2 * r
94
+ };
95
+ }
96
+ function Dt(e, t, n) {
97
+ let r = t.get(n);
98
+ return r || (r = e.table.ownerDocument.createElement("tr"), r.className = e.rowClass, r.setAttribute("role", "row"), r.setAttribute("aria-rowindex", String(n + 1)), r.style.cssText = "all:unset;display:contents;box-sizing:border-box", t.set(n, r)), r;
99
+ }
100
+ function jt(e, t, n, r) {
101
+ const i = new Set(t), o = new Set(t.map((s) => s.ri));
102
+ for (const [s, a] of n) i.has(s) || (a.remove(), n.delete(s));
103
+ for (const [s, a] of r) o.has(s) || (a.remove(), r.delete(s));
104
+ for (const s of t) {
105
+ let a = n.get(s);
106
+ a || (a = e.drawCell(s), a.setAttribute("aria-colindex", String(s.ci + 1)), n.set(s, a));
107
+ const c = Dt(e, r, s.ri);
108
+ a.parentElement !== c && c.appendChild(a);
109
+ }
110
+ const l = /* @__PURE__ */ new Map();
111
+ for (const s of t) {
112
+ const a = l.get(s.ri) ?? [];
113
+ a.push(n.get(s)), l.set(s.ri, a);
114
+ }
115
+ for (const [s, a] of l) De(r.get(s), a);
116
+ De(e.body, [...o].sort((s, a) => s - a).map((s) => r.get(s)));
117
+ }
118
+ function De(e, t) {
119
+ let n = e.firstElementChild;
120
+ for (const r of t)
121
+ r === n ? n = n.nextElementSibling : e.insertBefore(r, n);
122
+ }
123
+ function Ft(e) {
124
+ const t = xe(e.grid, e.component.widthMm, e.component.heightMm), n = new Map(t.cells.map((c) => [`${c.ri}:${c.ci}`, c])), r = Ot(t), i = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map(), l = It(Se(t, e.component));
125
+ e.table.setAttribute("aria-rowcount", String(t.rows.length)), e.table.setAttribute("aria-colcount", String(t.columns.length));
126
+ let s = "", a = "";
127
+ return { component: e.component, update(c, d) {
128
+ const m = Lt(c, e.component), h = r.cells(m), f = d && n.get(`${d.rowIndex}:${d.columnIndex}`);
129
+ f && !h.includes(f) && h.push(f), h.sort((y, N) => y.ri - N.ri || y.ci - N.ci);
130
+ const g = h.map((y) => `${y.ri}:${y.ci}`).join(";"), C = l(m), S = C.map((y) => `${y.kind}:${y.pos}:${y.from}:${y.to}`).join(";"), w = g !== s, v = S !== a;
131
+ return w && (s = g, jt(e, h, i, o)), v && (a = S, e.edgeHost.replaceChildren(...e.drawEdges(C))), w || v;
132
+ } };
133
+ }
134
+ const rt = /* @__PURE__ */ new WeakMap(), zt = {
30
135
  root: "mr-root",
31
136
  page: "mr-page",
32
137
  comp: "mr-comp",
@@ -43,10 +148,10 @@ const ct = {
43
148
  cell: "mr-cell",
44
149
  unknown: "mr-unknown"
45
150
  };
46
- function E(e, t) {
47
- return t?.classNames?.[e] ?? ct[e];
151
+ function $(e, t) {
152
+ return t?.classNames?.[e] ?? zt[e];
48
153
  }
49
- class dt {
154
+ class Ht {
50
155
  constructor() {
51
156
  this.props = [];
52
157
  }
@@ -54,7 +159,7 @@ class dt {
54
159
  return n == null || n === !1 || n === "" ? this : (this.props.push([t, String(n)]), this);
55
160
  }
56
161
  mm(t, n, r, i = 2) {
57
- return this.add(t, `${U(le(n, r), i)}px`);
162
+ return this.add(t, `${J(ue(n, r), i)}px`);
58
163
  }
59
164
  toString() {
60
165
  let t = "";
@@ -67,188 +172,213 @@ class dt {
67
172
  n && (t.style.cssText = n);
68
173
  }
69
174
  }
70
- function v(e, t = "unset") {
71
- return new dt().add("all", t).add("display", e).add("box-sizing", "border-box");
175
+ function x(e, t = "unset") {
176
+ return new Ht().add("all", t).add("display", e).add("box-sizing", "border-box");
72
177
  }
73
- function ze(e, t, n) {
74
- e.add("color", t.color).add("font-family", t.fontFamily).add("font-weight", t.bold != null ? t.bold ? "700" : "400" : void 0).add("font-style", t.italic != null ? t.italic ? "italic" : "normal" : void 0).add("text-decoration", t.underline != null ? t.underline ? "underline" : "none" : void 0).add("letter-spacing", t.letterSpacing != null ? `${t.letterSpacing}pt` : void 0).add("line-height", String(_(t))).add("text-align", t.align);
75
- const r = z(t, n);
76
- e.add("font-size", `${U(r.fontSizePx, 2)}px`);
178
+ function it(e, t, n) {
179
+ e.add("color", t.color).add("font-family", t.fontFamily).add("font-weight", t.bold != null ? t.bold ? "700" : "400" : void 0).add("font-style", t.italic != null ? t.italic ? "italic" : "normal" : void 0).add("text-decoration", t.underline != null ? t.underline ? "underline" : "none" : void 0).add("letter-spacing", t.letterSpacing != null ? `${t.letterSpacing}pt` : void 0).add("line-height", String(q(t))).add("text-align", t.align);
180
+ const r = _(t, n);
181
+ e.add("font-size", `${J(r.fontSizePx, 2)}px`);
77
182
  }
78
- function mt(e, t, n) {
183
+ function Bt(e, t, n) {
79
184
  const r = t.style ?? {};
80
- ze(e, r, n), e.add("background-color", r.backgroundColor).add("opacity", r.opacity != null ? String(r.opacity) : void 0).add("transform", r.rotateDeg ? `rotate(${r.rotateDeg}deg)` : void 0);
185
+ it(e, r, n), e.add("background-color", r.backgroundColor).add("opacity", r.opacity != null ? String(r.opacity) : void 0).add("transform", r.rotateDeg ? `rotate(${r.rotateDeg}deg)` : void 0);
81
186
  }
82
- function ht(e, t, n, r, i, o) {
83
- const l = e.cell, a = o.createElement("td");
84
- a.className = E("cell", i), a.dataset.mrRowIndex = String(e.ri), a.dataset.mrColumnIndex = String(e.ci), a.setAttribute("role", t.table?.role === "header" ? "columnheader" : "cell"), l.colSpan && (a.colSpan = l.colSpan), l.rowSpan && (a.rowSpan = l.rowSpan);
85
- const s = ke(t.style, l.style), c = v("block").add("position", "absolute").mm("left", e.xMm, r).mm("top", e.yMm, r).mm("width", e.widthMm, r).mm("height", e.heightMm, r).add("background-color", s.backgroundColor).add("vertical-align", s.verticalAlign ?? "middle");
86
- ze(c, s, r), c.applyTo(a);
187
+ function je(e, t, n, r, i, o) {
188
+ const l = e.cell, s = o.createElement("td");
189
+ s.className = $("cell", i), s.dataset.mrRowIndex = String(e.ri), s.dataset.mrColumnIndex = String(e.ci), s.setAttribute("role", t.table?.role === "header" ? "columnheader" : "cell"), l.colSpan && (s.colSpan = l.colSpan), l.rowSpan && (s.rowSpan = l.rowSpan);
190
+ const a = Ke(t.style, l.style), c = x("block").add("position", "absolute").mm("left", e.xMm, r).mm("top", e.yMm, r).mm("width", e.widthMm, r).mm("height", e.heightMm, r).add("background-color", a.backgroundColor).add("vertical-align", a.verticalAlign ?? "middle");
191
+ it(c, a, r), c.applyTo(s);
87
192
  const d = o.createElement("div");
88
- d.className = "mr-cell-content", v("flex").add("position", "absolute").mm("left", n + (l.indentMm ?? 0), r).mm("right", n, r).mm("top", n, r).mm("bottom", n, r).add("flex-direction", "column").add("justify-content", s.verticalAlign === "top" ? "flex-start" : s.verticalAlign === "bottom" ? "flex-end" : "center").add("overflow-wrap", "anywhere").add("overflow", "hidden").applyTo(d), l.richParagraphs?.length ? d.appendChild(He({ ...t, kind: "text", richParagraphs: l.richParagraphs }, r, i, o)) : l.text != null && d.append(l.text);
89
- for (const h of l.children ?? []) d.appendChild(Be(h, r, i, o));
90
- return a.appendChild(d), a;
91
- }
92
- function gt(e, t, n, r) {
93
- return Fe(e, t).map((i) => {
94
- const o = `${U(i.widthPt * n / 72, 2)}px solid ${i.color}`, l = r.createElement("div");
95
- l.className = "mr-grid-edge", l.setAttribute("aria-hidden", "true");
96
- const a = i.kind === "h";
97
- return v("block").add("position", "absolute").add("pointer-events", "none").mm("left", a ? i.from : i.pos, n).mm("top", a ? i.pos : i.from, n).mm("width", a ? i.to - i.from : 0, n).mm("height", a ? 0 : i.to - i.from, n).add(a ? "border-top" : "border-left", o).applyTo(l), l;
193
+ d.className = "mr-cell-content", x("flex").add("position", "absolute").mm("left", n + (l.indentMm ?? 0), r).mm("right", n, r).mm("top", n, r).mm("bottom", n, r).add("flex-direction", "column").add("justify-content", a.verticalAlign === "top" ? "flex-start" : a.verticalAlign === "bottom" ? "flex-end" : "center").add("overflow-wrap", "anywhere").add("overflow", "hidden").applyTo(d), l.richParagraphs?.length ? d.appendChild(at({ ...t, kind: "text", richParagraphs: l.richParagraphs }, r, i, o)) : l.text != null && d.append(l.text);
194
+ for (const m of l.children ?? []) d.appendChild(st(m, r, i, o));
195
+ return s.appendChild(d), s;
196
+ }
197
+ function _t(e, t, n, r) {
198
+ return ot(Se(e, t), n, r);
199
+ }
200
+ function ot(e, t, n) {
201
+ return e.map((r) => {
202
+ const i = `${J(r.widthPt * t / 72, 2)}px solid ${r.color}`, o = n.createElement("div");
203
+ o.className = "mr-grid-edge", o.setAttribute("aria-hidden", "true");
204
+ const l = r.kind === "h";
205
+ return x("block").add("position", "absolute").add("pointer-events", "none").mm("left", l ? r.from : r.pos, t).mm("top", l ? r.pos : r.from, t).mm("width", l ? r.to - r.from : 0, t).mm("height", l ? 0 : r.to - r.from, t).add(l ? "border-top" : "border-left", i).applyTo(o), o;
98
206
  });
99
207
  }
100
- function ft(e, t, n, r, i) {
208
+ function Wt(e, t, n, r, i) {
101
209
  const o = i.createElement("table");
102
- o.className = E("grid", r), o.setAttribute("role", "table"), v("block").add("position", "relative").add("width", "100%").add("height", "100%").applyTo(o);
103
- const l = De(e, t.widthMm, t.heightMm), a = i.createElement("tbody");
104
- v("contents").applyTo(a), o.appendChild(a);
105
- const s = e.cells.map(() => {
106
- const d = i.createElement("tr");
107
- return d.className = E("row", r), d.setAttribute("role", "row"), v("contents").applyTo(d), a.appendChild(d), d;
210
+ o.className = $("grid", r), o.setAttribute("role", "table"), x("block").add("position", "relative").add("width", "100%").add("height", "100%").applyTo(o);
211
+ const l = i.createElement("tbody");
212
+ x("contents").applyTo(l), o.appendChild(l);
213
+ const s = t.style?.rotateDeg ? void 0 : rt.get(r);
214
+ if (s) {
215
+ const m = i.createElement("div");
216
+ x("block").add("position", "relative").add("width", "100%").add("height", "100%").applyTo(m);
217
+ const h = i.createElement("div");
218
+ return x("contents").applyTo(h), h.setAttribute("aria-hidden", "true"), s.mount({
219
+ grid: e,
220
+ component: t,
221
+ table: o,
222
+ rowClass: $("row", r),
223
+ body: l,
224
+ edgeHost: h,
225
+ drawCell: (f) => je(f, t, e.paddingMm ?? 0.5, n, { ...r }, i),
226
+ drawEdges: (f) => ot(f, n, i)
227
+ }), m.append(o, h), m;
228
+ }
229
+ const a = xe(e, t.widthMm, t.heightMm), c = e.cells.map(() => {
230
+ const m = i.createElement("tr");
231
+ return m.className = $("row", r), m.setAttribute("role", "row"), x("contents").applyTo(m), l.appendChild(m), m;
108
232
  });
109
- for (const d of l.cells)
110
- s[d.ri].appendChild(ht(d, t, e.paddingMm ?? 0.5, n, r, i));
111
- const c = i.createElement("div");
112
- return v("block").add("position", "relative").add("width", "100%").add("height", "100%").applyTo(c), c.append(o, ...gt(l, t, n, i)), c;
233
+ for (const m of a.cells)
234
+ c[m.ri].appendChild(je(m, t, e.paddingMm ?? 0.5, n, r, i));
235
+ const d = i.createElement("div");
236
+ return x("block").add("position", "relative").add("width", "100%").add("height", "100%").applyTo(d), d.append(o, ..._t(a, t, n, i)), d;
113
237
  }
114
- function ut(e, t, n, r) {
238
+ function Vt(e, t, n, r) {
115
239
  const i = r.createElement("div");
116
- i.className = E("paragraph", n), v("block").add("text-align", e.align).add("line-height", e.lineHeight != null ? String(e.lineHeight) : void 0).mm("margin-top", e.spaceBeforeMm ?? 0, t).mm("margin-bottom", e.spaceAfterMm ?? 0, t).mm("text-indent", e.indentMm ?? 0, t).applyTo(i);
240
+ i.className = $("paragraph", n), x("block").add("text-align", e.align).add("line-height", e.lineHeight != null ? String(e.lineHeight) : void 0).mm("margin-top", e.spaceBeforeMm ?? 0, t).mm("margin-bottom", e.spaceAfterMm ?? 0, t).mm("text-indent", e.indentMm ?? 0, t).applyTo(i);
117
241
  for (const o of e.segments || []) {
118
242
  const l = r.createElement("span");
119
- l.className = E("segment", n), l.textContent = o.kind === "field" ? o.field ?? "" : o.text ?? "";
120
- const a = v("inline");
243
+ l.className = $("segment", n), l.textContent = o.kind === "field" ? o.field ?? "" : o.text ?? "";
244
+ const s = x("inline");
121
245
  if (o.style) {
122
- const s = o.style;
123
- a.add("color", s.color).add("background-color", s.backgroundColor).add("font-family", s.fontFamily).add("line-height", s.lineHeight).add("letter-spacing", s.letterSpacing == null ? void 0 : `${s.letterSpacing * t / 72}px`).add("font-weight", s.bold != null ? s.bold ? "700" : "400" : void 0).add("font-style", s.italic != null ? s.italic ? "italic" : "normal" : void 0).add("text-decoration", s.underline != null ? s.underline ? "underline" : "none" : void 0), (s.fontSize != null || s.fontSizePx != null) && a.add("font-size", `${U(z(s, t).fontSizePx, 2)}px`);
246
+ const a = o.style;
247
+ s.add("color", a.color).add("background-color", a.backgroundColor).add("font-family", a.fontFamily).add("line-height", a.lineHeight).add("letter-spacing", a.letterSpacing == null ? void 0 : `${a.letterSpacing * t / 72}px`).add("font-weight", a.bold != null ? a.bold ? "700" : "400" : void 0).add("font-style", a.italic != null ? a.italic ? "italic" : "normal" : void 0).add("text-decoration", a.underline != null ? a.underline ? "underline" : "none" : void 0), (a.fontSize != null || a.fontSizePx != null) && s.add("font-size", `${J(_(a, t).fontSizePx, 2)}px`);
124
248
  }
125
- a.applyTo(l), i.appendChild(l);
249
+ s.applyTo(l), i.appendChild(l);
126
250
  }
127
251
  return i;
128
252
  }
129
- function He(e, t, n, r) {
130
- if ($e(e)) {
253
+ function at(e, t, n, r) {
254
+ if (Ye(e)) {
131
255
  const i = r.createElement("div");
132
- i.className = E("rich", n), v("block").applyTo(i);
133
- for (const o of e.richParagraphs) i.appendChild(ut(o, t, n, r));
256
+ i.className = $("rich", n), x("block").applyTo(i);
257
+ for (const o of e.richParagraphs) i.appendChild(Vt(o, t, n, r));
134
258
  return i;
135
259
  }
136
260
  if (Array.isArray(e.lines) && e.lines.length > 0) {
137
261
  const i = r.createElement("div");
138
- i.className = E("lines", n), v("block").applyTo(i);
262
+ i.className = $("lines", n), x("block").applyTo(i);
139
263
  for (const o of e.lines) {
140
264
  const l = r.createElement("div");
141
- l.className = E("line", n), l.textContent = o, v("block").add("white-space", "pre").add("min-height", "1lh").applyTo(l), i.appendChild(l);
265
+ l.className = $("line", n), l.textContent = o, x("block").add("white-space", "pre").add("min-height", "1lh").applyTo(l), i.appendChild(l);
142
266
  }
143
267
  return i;
144
268
  }
145
269
  return e.text ?? "";
146
270
  }
147
- function pt(e, t, n, r) {
271
+ function Ut(e, t, n, r) {
148
272
  const i = r.createElement("div");
149
- i.className = E("text", n);
273
+ i.className = $("text", n);
150
274
  const o = e.style || {};
151
- return v("flex").add("width", "100%").add("height", "100%").add("flex-direction", "column").add("justify-content", o.verticalAlign === "middle" ? "center" : o.verticalAlign === "bottom" ? "flex-end" : "flex-start").add("overflow-wrap", "anywhere").add("overflow", "hidden").applyTo(i), i.append(He(e, t, n, r)), i;
275
+ return x("flex").add("width", "100%").add("height", "100%").add("flex-direction", "column").add("justify-content", o.verticalAlign === "middle" ? "center" : o.verticalAlign === "bottom" ? "flex-end" : "flex-start").add("overflow-wrap", "anywhere").add("overflow", "hidden").applyTo(i), i.append(at(e, t, n, r)), i;
152
276
  }
153
- function wt(e, t, n) {
277
+ function qt(e, t, n) {
154
278
  const r = n.createElement("img");
155
- return r.className = E("image", t), r.src = e.imageData, v("block").add("width", "100%").add("height", "100%").add("object-fit", "contain").applyTo(r), r.alt = e.kind, r;
279
+ return r.className = $("image", t), r.src = e.imageData, x("block").add("width", "100%").add("height", "100%").add("object-fit", "contain").applyTo(r), r.alt = e.kind, r;
156
280
  }
157
- function ye(e, t, n, r) {
281
+ function Fe(e, t, n, r) {
158
282
  const i = r.createElement("div");
159
- i.className = E("shape", n);
160
- const o = e.style || {}, l = q(o), a = Ae(o), s = `${U(l.widthPt * t / 72, 2)}px solid ${l.color}`, c = v("block");
161
- return e.grid ? c.add("position", "relative") : e.kind === "rect" ? (a.top && c.add("border-top", s), a.right && c.add("border-right", s), a.bottom && c.add("border-bottom", s), a.left && c.add("border-left", s)) : e.kind === "ellipse" ? (a.inner && c.add("border", s).add("border-radius", "50%"), o.backgroundColor && c.add("background-color", o.backgroundColor)) : e.kind === "line" && c.add("height", "0").add("border-top", s), c.add("box-sizing", "border-box").add("width", "100%").add("height", "100%"), c.applyTo(i), i;
283
+ i.className = $("shape", n);
284
+ const o = e.style || {}, l = Y(o), s = Je(o), a = `${J(l.widthPt * t / 72, 2)}px solid ${l.color}`, c = x("block");
285
+ return e.grid ? c.add("position", "relative") : e.kind === "rect" ? (s.top && c.add("border-top", a), s.right && c.add("border-right", a), s.bottom && c.add("border-bottom", a), s.left && c.add("border-left", a)) : e.kind === "ellipse" ? (s.inner && c.add("border", a).add("border-radius", "50%"), o.backgroundColor && c.add("background-color", o.backgroundColor)) : e.kind === "line" && c.add("height", "0").add("border-top", a), c.add("box-sizing", "border-box").add("width", "100%").add("height", "100%"), c.applyTo(i), i;
162
286
  }
163
- function bt(e, t, n) {
164
- const r = n.createElementNS("http://www.w3.org/2000/svg", "svg"), i = le(e.widthMm, t), o = le(e.heightMm, t);
287
+ function Gt(e, t, n) {
288
+ const r = n.createElementNS("http://www.w3.org/2000/svg", "svg"), i = ue(e.widthMm, t), o = ue(e.heightMm, t);
165
289
  r.setAttribute("width", String(Math.max(1, i))), r.setAttribute("height", String(Math.max(1, o))), r.setAttribute("aria-hidden", "true"), r.style.overflow = "visible", r.style.display = "block";
166
290
  const l = n.createElementNS("http://www.w3.org/2000/svg", "line");
167
291
  l.setAttribute("x1", "0"), l.setAttribute("x2", String(i)), l.setAttribute("y1", e.lineDirection === "up" ? String(o) : "0"), l.setAttribute("y2", e.lineDirection === "up" ? "0" : String(o));
168
- const a = q({ ...e.style, borderColor: e.style?.lineColor ?? e.style?.borderColor });
169
- return l.setAttribute("stroke", a.color), l.setAttribute("stroke-width", String(a.widthPt * t / 72)), r.appendChild(l), r;
292
+ const s = Y({ ...e.style, borderColor: e.style?.lineColor ?? e.style?.borderColor });
293
+ return l.setAttribute("stroke", s.color), l.setAttribute("stroke-width", String(s.widthPt * t / 72)), r.appendChild(l), r;
170
294
  }
171
- function Be(e, t, n, r) {
295
+ function st(e, t, n, r) {
172
296
  const i = r.createElement("div");
173
- i.className = `${E("comp", n)} mr-kind-${e.kind}`;
174
- const o = v("block").add("position", "absolute").mm("left", e.leftMm, t).mm("top", e.topMm, t).mm("width", e.widthMm, t).mm("height", e.heightMm, t).add("box-sizing", "border-box");
175
- if (mt(o, e, t), o.applyTo(i), re(e))
176
- return i.appendChild(wt(e, n, r)), i;
297
+ i.className = `${$("comp", n)} mr-kind-${e.kind}`;
298
+ const o = x("block").add("position", "absolute").mm("left", e.leftMm, t).mm("top", e.topMm, t).mm("width", e.widthMm, t).mm("height", e.heightMm, t).add("box-sizing", "border-box");
299
+ if (Bt(o, e, t), o.applyTo(i), ce(e))
300
+ return i.appendChild(qt(e, n, r)), i;
177
301
  if (e.kind === "text")
178
- return i.appendChild(pt(e, t, n, r)), i;
302
+ return i.appendChild(Ut(e, t, n, r)), i;
179
303
  if (e.grid) {
180
- const a = ye(e, t, n, r);
181
- return a.appendChild(ft(e.grid, e, t, n, r)), i.appendChild(a), i;
304
+ const s = Fe(e, t, n, r);
305
+ return s.appendChild(Wt(e.grid, e, t, n, r)), i.appendChild(s), i;
182
306
  }
183
307
  if (e.kind === "line" && e.lineDirection)
184
- return i.appendChild(bt(e, t, r)), i;
308
+ return i.appendChild(Gt(e, t, r)), i;
185
309
  if (e.kind === "line" || e.kind === "rect" || e.kind === "ellipse")
186
- return i.appendChild(ye(e, t, n, r)), i;
310
+ return i.appendChild(Fe(e, t, n, r)), i;
187
311
  const l = r.createElement("div");
188
- return l.className = E("unknown", n), v("block").applyTo(l), l.textContent = e.fallbackText ?? `[${e.kind}]`, l.dataset.mrUnsupported = e.kind, l.setAttribute("role", "note"), i.appendChild(l), i;
312
+ return l.className = $("unknown", n), x("block").applyTo(l), l.textContent = e.fallbackText ?? `[${e.kind}]`, l.dataset.mrUnsupported = e.kind, l.setAttribute("role", "note"), i.appendChild(l), i;
189
313
  }
190
- function Mt(e, t, n, r) {
314
+ function lt(e, t, n, r) {
191
315
  const i = r.createElement("div");
192
- return i.className = E("page", n), v("block", "initial").add("position", "relative").add("font-family", ne).add("font-size", `${U(z(void 0, t).fontSizePx, 2)}px`).add("line-height", String(_(void 0))).add("white-space", "pre-wrap").add("direction", "ltr").mm("width", e.pageWidthMm, t).mm("height", e.pageHeightMm, t).add("background-color", "#fff").add("color", Pe).add("overflow", "hidden").add("box-sizing", "border-box").applyTo(i), e.components.forEach((o, l) => {
193
- const a = Be(o, t, n, r);
194
- a.dataset.mrComponentIndex = String(l), i.appendChild(a);
316
+ return i.className = $("page", n), x("block", "initial").add("position", "relative").add("font-family", le).add("font-size", `${J(_(void 0, t).fontSizePx, 2)}px`).add("line-height", String(q(void 0))).add("white-space", "pre-wrap").add("direction", "ltr").mm("width", e.pageWidthMm, t).mm("height", e.pageHeightMm, t).add("background-color", "#fff").add("color", Ge).add("overflow", "hidden").add("box-sizing", "border-box").applyTo(i), e.components.forEach((o, l) => {
317
+ const s = st(o, t, n, r);
318
+ s.dataset.mrComponentIndex = String(l), i.appendChild(s);
195
319
  }), i;
196
320
  }
197
- function $n(e, t, n = {}) {
321
+ function pr(e, t, n = {}) {
198
322
  const r = n.dpi ?? 96;
199
- Y(e, "dom", n);
323
+ Z(e, "dom", n);
200
324
  const i = t.createElement("div");
201
- return i.className = E("root", n), v("block").applyTo(i), i.dataset.schemaVersion = e.schemaVersion, e.pages.forEach((o) => {
202
- i.appendChild(Mt(o, r, n, t));
325
+ return i.className = $("root", n), x("block").applyTo(i), i.dataset.schemaVersion = e.schemaVersion, e.pages.forEach((o) => {
326
+ i.appendChild(lt(o, r, n, t));
203
327
  }), i;
204
328
  }
205
- function ge(e, t, n, r, i, o, l, a = "top") {
329
+ function wr(e, t, n, r) {
330
+ const i = { ...n }, o = Nt();
331
+ return rt.set(i, o), { element: lt(e, t, i, r), update(s, a) {
332
+ return o.update(s, a && e.components[a.componentIndex], a);
333
+ } };
334
+ }
335
+ function Ce(e, t, n, r, i, o, l, s = "top") {
206
336
  e.font = `${t.italic ? "italic " : ""}${t.bold ? "bold " : ""}${t.fontSizePx}px ${l}`, "letterSpacing" in e && (e.letterSpacing = "0px"), e.fillStyle = t.color, e.textBaseline = "alphabetic";
207
- const s = t.fontSizePx * t.lineHeight, c = t.text === "" ? [""] : t.text.split(`
208
- `), d = c.length * s;
209
- let h = r;
210
- a === "middle" ? h = r + (o - d) / 2 : a === "bottom" && (h = r + o - d), c.forEach((m, g) => {
211
- const f = h + g * s + t.fontSizePx * 0.8;
212
- vt(e, m, t, n, f, i), t.underline && m && yt(e, m, t, n, f, i);
337
+ const a = t.fontSizePx * t.lineHeight, c = t.text === "" ? [""] : t.text.split(`
338
+ `), d = c.length * a;
339
+ let m = r;
340
+ s === "middle" ? m = r + (o - d) / 2 : s === "bottom" && (m = r + o - d), c.forEach((h, f) => {
341
+ const g = m + f * a + t.fontSizePx * 0.8;
342
+ Jt(e, h, t, n, g, i), t.underline && h && Kt(e, h, t, n, g, i);
213
343
  }), e.textAlign = "left";
214
344
  }
215
- function vt(e, t, n, r, i, o) {
216
- const l = Array.from(t), a = n.letterSpacingPx ?? 0;
217
- if (!a) {
345
+ function Jt(e, t, n, r, i, o) {
346
+ const l = Array.from(t), s = n.letterSpacingPx ?? 0;
347
+ if (!s) {
218
348
  e.textAlign = n.align === "center" ? "center" : n.align === "right" ? "right" : "left";
219
- const h = n.align === "center" ? r + o / 2 : n.align === "right" ? r + o : r;
220
- e.fillText(t, h, i);
349
+ const m = n.align === "center" ? r + o / 2 : n.align === "right" ? r + o : r;
350
+ e.fillText(t, m, i);
221
351
  return;
222
352
  }
223
- const s = e.measureText(t).width + Math.max(0, l.length - 1) * a, c = n.align === "center" ? r + (o - s) / 2 : n.align === "right" ? r + o - s : r;
353
+ const a = e.measureText(t).width + Math.max(0, l.length - 1) * s, c = n.align === "center" ? r + (o - a) / 2 : n.align === "right" ? r + o - a : r;
224
354
  e.textAlign = "left";
225
355
  let d = "";
226
- l.forEach((h, m) => {
227
- e.fillText(h, c + e.measureText(d).width + m * a, i), d += h;
356
+ l.forEach((m, h) => {
357
+ e.fillText(m, c + e.measureText(d).width + h * s, i), d += m;
228
358
  });
229
359
  }
230
- function yt(e, t, n, r, i, o) {
231
- const l = e.measureText(t).width + Math.max(0, Array.from(t).length - 1) * (n.letterSpacingPx ?? 0), a = n.align === "center" ? r + (o - l) / 2 : n.align === "right" ? r + o - l : r;
232
- e.strokeStyle = n.color, e.lineWidth = Math.max(0.5, n.fontSizePx / 20), e.beginPath(), e.moveTo(a, i + 1), e.lineTo(a + l, i + 1), e.stroke();
360
+ function Kt(e, t, n, r, i, o) {
361
+ const l = e.measureText(t).width + Math.max(0, Array.from(t).length - 1) * (n.letterSpacingPx ?? 0), s = n.align === "center" ? r + (o - l) / 2 : n.align === "right" ? r + o - l : r;
362
+ e.strokeStyle = n.color, e.lineWidth = Math.max(0.5, n.fontSizePx / 20), e.beginPath(), e.moveTo(s, i + 1), e.lineTo(s + l, i + 1), e.stroke();
233
363
  }
234
- function We(e, t, n, r, i) {
235
- const o = r / 72, l = (a) => {
236
- e.font = `${a.italic ? "italic " : ""}${a.bold ? "bold " : ""}${z(a, r).fontSizePx}px ${a.fontFamily ?? i}`, "letterSpacing" in e && (e.letterSpacing = "0px");
364
+ function ct(e, t, n, r, i) {
365
+ const o = r / 72, l = (s) => {
366
+ e.font = `${s.italic ? "italic " : ""}${s.bold ? "bold " : ""}${_(s, r).fontSizePx}px ${s.fontFamily ?? i}`, "letterSpacing" in e && (e.letterSpacing = "0px");
237
367
  };
238
- at(t, { x: n.x / o, yTop: -n.y / o, width: n.width / o, height: n.height / o }, {
239
- measure(a, s) {
240
- return l(s), e.measureText(a).width / o + (s.letterSpacing ?? 0);
368
+ $t(t, { x: n.x / o, yTop: -n.y / o, width: n.width / o, height: n.height / o }, {
369
+ measure(s, a) {
370
+ return l(a), e.measureText(s).width / o + (a.letterSpacing ?? 0);
241
371
  },
242
- draw(a, s, c, d, h) {
243
- const m = z(s, r).fontSizePx, g = -d * o - m * 0.8;
244
- s.backgroundColor && (e.fillStyle = s.backgroundColor, e.fillRect(c * o, g, h * o, m * _(s))), ge(e, { text: a, fontSizePx: m, bold: !!s.bold, italic: s.italic, underline: s.underline, color: ce(s), align: "left", lineHeight: _(s), letterSpacingPx: (s.letterSpacing ?? 0) * o }, c * o, g, h * o, m, s.fontFamily ?? i);
372
+ draw(s, a, c, d, m) {
373
+ const h = _(a, r).fontSizePx, f = -d * o - h * 0.8;
374
+ a.backgroundColor && (e.fillStyle = a.backgroundColor, e.fillRect(c * o, f, m * o, h * q(a))), Ce(e, { text: s, fontSizePx: h, bold: !!a.bold, italic: a.italic, underline: a.underline, color: ye(a), align: "left", lineHeight: q(a), letterSpacingPx: (a.letterSpacing ?? 0) * o }, c * o, f, m * o, h, a.fontFamily ?? i);
245
375
  }
246
376
  });
247
377
  }
248
378
  function k(e) {
249
379
  if (e?.aborted) throw e.reason ?? new DOMException("The operation was aborted.", "AbortError");
250
380
  }
251
- const xt = (e, t) => (k(t), /^data:image\/(?:png|jpe?g|webp|gif|svg\+xml)[;,]/i.test(e) ? new Promise((n, r) => {
381
+ const Yt = (e, t) => (k(t), /^data:image\/(?:png|jpe?g|webp|gif|svg\+xml)[;,]/i.test(e) ? new Promise((n, r) => {
252
382
  const i = new Image(), o = () => {
253
383
  i.onload = null, i.onerror = null, t?.removeEventListener("abort", l);
254
384
  }, l = () => {
@@ -260,364 +390,364 @@ const xt = (e, t) => (k(t), /^data:image\/(?:png|jpe?g|webp|gif|svg\+xml)[;,]/i.
260
390
  o(), r(new Error("Image could not be decoded for Canvas output."));
261
391
  }, t?.addEventListener("abort", l, { once: !0 }), i.src = e;
262
392
  }) : Promise.reject(new TypeError("Canvas imageData must be an image data URL; provide imageLoader for other sources.")));
263
- function St(e, t, n) {
393
+ function Xt(e, t, n) {
264
394
  return k(n), n ? new Promise((r, i) => {
265
395
  const o = () => i(n.reason ?? new DOMException("The operation was aborted.", "AbortError"));
266
396
  n.addEventListener("abort", o, { once: !0 }), Promise.resolve().then(() => e(t, n)).then(r, i).finally(() => n.removeEventListener("abort", o));
267
397
  }) : e(t);
268
398
  }
269
- function* fe(e) {
399
+ function* Te(e) {
270
400
  function* t(n, r, i, o) {
271
401
  if (o.has(n)) throw new TypeError("Cyclic grid children cannot be rendered.");
272
- re(n) && (yield { component: n, componentIndex: r, componentPath: i });
402
+ ce(n) && (yield { component: n, componentIndex: r, componentPath: i });
273
403
  const l = new Set(o).add(n);
274
- for (const [a, s] of (n.grid?.cells ?? []).entries()) for (const [c, d] of s.entries()) for (const [h, m] of (d?.children ?? []).entries()) yield* t(m, r, [...i, a, c, h], l);
404
+ for (const [s, a] of (n.grid?.cells ?? []).entries()) for (const [c, d] of a.entries()) for (const [m, h] of (d?.children ?? []).entries()) yield* t(h, r, [...i, s, c, m], l);
275
405
  }
276
406
  for (const [n, r] of e.components.entries()) yield* t(r, n, [], /* @__PURE__ */ new Set());
277
407
  }
278
- async function Et(e, t, n) {
408
+ async function Zt(e, t, n) {
279
409
  const r = /* @__PURE__ */ new Map();
280
- for (const { component: i } of fe(e))
281
- !re(i) || r.has(i.imageData) || r.set(i.imageData, await St(t, i.imageData, n));
410
+ for (const { component: i } of Te(e))
411
+ !ce(i) || r.has(i.imageData) || r.set(i.imageData, await Xt(t, i.imageData, n));
282
412
  return k(n), r;
283
413
  }
284
- function Tt(e, t, n, r, i, o) {
285
- const l = t, a = l.naturalWidth ?? l.width ?? i, s = l.naturalHeight ?? l.height ?? o;
286
- if (a <= 0 || s <= 0) throw new RangeError("Decoded Canvas image dimensions must be positive.");
287
- const c = Math.min(i / a, o / s), d = a * c, h = s * c;
288
- e.drawImage(t, n + (i - d) / 2, r + (o - h) / 2, d, h);
414
+ function Qt(e, t, n, r, i, o) {
415
+ const l = t, s = l.naturalWidth ?? l.width ?? i, a = l.naturalHeight ?? l.height ?? o;
416
+ if (s <= 0 || a <= 0) throw new RangeError("Decoded Canvas image dimensions must be positive.");
417
+ const c = Math.min(i / s, o / a), d = s * c, m = a * c;
418
+ e.drawImage(t, n + (i - d) / 2, r + (o - m) / 2, d, m);
289
419
  }
290
- function Ct(e) {
291
- return lt(e.pageHeightsPx, e.gapPx).window(e.viewportHeightPx, e.scrollTopPx, e.overscan);
420
+ function en(e) {
421
+ return kt(e.pageHeightsPx, e.gapPx).window(e.viewportHeightPx, e.scrollTopPx, e.overscan);
292
422
  }
293
- const ue = 96 / 25.4;
294
- function pe(e, t = 96) {
295
- const n = t / 96 * ue;
423
+ const Re = 96 / 25.4;
424
+ function $e(e, t = 96) {
425
+ const n = t / 96 * Re;
296
426
  return {
297
427
  widthPx: Math.max(1, Math.round(e.pageWidthMm * n)),
298
428
  heightPx: Math.max(1, Math.round(e.pageHeightMm * n))
299
429
  };
300
430
  }
301
- function _e(e, t, n, r = 64e6) {
431
+ function dt(e, t, n, r = 64e6) {
302
432
  if (!Number.isFinite(t) || t <= 0 || !Number.isFinite(n) || n <= 0) throw new RangeError("Canvas dpr and dpi must be positive finite numbers.");
303
433
  if (!Number.isFinite(r) || r <= 0) throw new RangeError("maxCanvasPixels must be positive and finite.");
304
- const i = pe(e, n), o = Math.round(i.widthPx * t), l = Math.round(i.heightPx * t);
434
+ const i = $e(e, n), o = Math.round(i.widthPx * t), l = Math.round(i.heightPx * t);
305
435
  if (!Number.isSafeInteger(o) || !Number.isSafeInteger(l) || o * l > r) throw new RangeError("Canvas page exceeds maxCanvasPixels; reduce resolution or split the report.");
306
436
  return { width: o, height: l };
307
437
  }
308
- function je(e, t, n, r) {
309
- const i = document.createElement("canvas"), { widthPx: o, heightPx: l } = pe(e, n), a = _e(e, t, n, r);
310
- i.width = a.width, i.height = a.height, i.style.width = `${o}px`, i.style.height = `${l}px`;
311
- const s = i.getContext("2d");
312
- if (!s)
438
+ function mt(e, t, n, r) {
439
+ const i = document.createElement("canvas"), { widthPx: o, heightPx: l } = $e(e, n), s = dt(e, t, n, r);
440
+ i.width = s.width, i.height = s.height, i.style.width = `${o}px`, i.style.height = `${l}px`;
441
+ const a = i.getContext("2d");
442
+ if (!a)
313
443
  throw new Error("当前环境不支持 Canvas 2D(测试需真浏览器,见 e2e/canvas.spec.ts)");
314
- return s.scale(t, t), s.fillStyle = "#ffffff", s.fillRect(0, 0, o, l), { canvas: i, ctx: s };
444
+ return a.scale(t, t), a.fillStyle = "#ffffff", a.fillRect(0, 0, o, l), { canvas: i, ctx: a };
315
445
  }
316
- function In(e, t = 96) {
317
- return z(e, t).fontSizePx;
446
+ function br(e, t = 96) {
447
+ return _(e, t).fontSizePx;
318
448
  }
319
- function Rt(e, t, n, r, i, o, l) {
320
- for (const a of Fe(t, n))
321
- e.strokeStyle = a.color, e.lineWidth = W(a.widthPt, l), e.beginPath(), a.kind === "v" ? (e.moveTo(r + a.pos * o, i + a.from * o), e.lineTo(r + a.pos * o, i + a.to * o)) : (e.moveTo(r + a.from * o, i + a.pos * o), e.lineTo(r + a.to * o, i + a.pos * o)), e.stroke();
449
+ function tn(e, t, n, r, i, o, l) {
450
+ for (const s of Se(t, n))
451
+ e.strokeStyle = s.color, e.lineWidth = U(s.widthPt, l), e.beginPath(), s.kind === "v" ? (e.moveTo(r + s.pos * o, i + s.from * o), e.lineTo(r + s.pos * o, i + s.to * o)) : (e.moveTo(r + s.from * o, i + s.pos * o), e.lineTo(r + s.to * o, i + s.pos * o)), e.stroke();
322
452
  }
323
- function Pt(e, t, n, r, i, o) {
453
+ function nn(e, t, n, r, i, o) {
324
454
  e.beginPath(), t.top && (e.moveTo(n, r), e.lineTo(n + i, r)), t.right && (e.moveTo(n + i, r), e.lineTo(n + i, r + o)), t.bottom && (e.moveTo(n + i, r + o), e.lineTo(n, r + o)), t.left && (e.moveTo(n, r + o), e.lineTo(n, r)), e.stroke();
325
455
  }
326
- function At(e, t, n, r, i, o, l, a, s, c, d, h) {
327
- const m = De(t, o / a, l / a);
328
- for (const g of m.cells) {
329
- const f = g.cell.style?.backgroundColor ?? n.style?.backgroundColor;
330
- f && (e.fillStyle = f, e.fillRect(r + g.xMm * a, i + g.yMm * a, g.widthMm * a, g.heightMm * a));
456
+ function rn(e, t, n, r, i, o, l, s, a, c, d, m) {
457
+ const h = xe(t, o / s, l / s);
458
+ for (const f of h.cells) {
459
+ const g = f.cell.style?.backgroundColor ?? n.style?.backgroundColor;
460
+ g && (e.fillStyle = g, e.fillRect(r + f.xMm * s, i + f.yMm * s, f.widthMm * s, f.heightMm * s));
331
461
  }
332
- Rt(e, m, n, r, i, a, s);
333
- for (const g of m.cells) kt(e, g, n, r, i, a, s, c, d, h);
462
+ tn(e, h, n, r, i, s, a);
463
+ for (const f of h.cells) on(e, f, n, r, i, s, a, c, d, m);
334
464
  }
335
- function kt(e, t, n, r, i, o, l, a, s, c) {
336
- const d = n.grid?.paddingMm ?? 0.5, h = t.cell.text ?? "", m = ke(n.style, t.cell.style), g = z(m, l), f = t.cell.indentMm ?? 0, T = Math.max(0, t.widthMm - 2 * d - f), R = Le(h, T, { fontSizePt: g.fontSizePt, bold: m.bold, italic: m.italic, fontFamily: m.fontFamily ?? a, letterSpacingPt: m.letterSpacing }, s).join(`
337
- `), b = { x: r + (t.xMm + d + f) * o, y: i + (t.yMm + d) * o, width: T * o, height: Math.max(0, t.heightMm - 2 * d) * o };
338
- e.save(), e.beginPath(), e.rect(b.x, b.y, b.width, b.height), e.clip(), t.cell.richParagraphs?.length ? We(e, { ...n, richParagraphs: t.cell.richParagraphs, style: { verticalAlign: "middle", ...m } }, b, l, a) : ge(
465
+ function on(e, t, n, r, i, o, l, s, a, c) {
466
+ const d = n.grid?.paddingMm ?? 0.5, m = t.cell.text ?? "", h = Ke(n.style, t.cell.style), f = _(h, l), g = t.cell.indentMm ?? 0, C = Math.max(0, t.widthMm - 2 * d - g), S = Qe(m, C, { fontSizePt: f.fontSizePt, bold: h.bold, italic: h.italic, fontFamily: h.fontFamily ?? s, letterSpacingPt: h.letterSpacing }, a).join(`
467
+ `), w = { x: r + (t.xMm + d + g) * o, y: i + (t.yMm + d) * o, width: C * o, height: Math.max(0, t.heightMm - 2 * d) * o };
468
+ e.save(), e.beginPath(), e.rect(w.x, w.y, w.width, w.height), e.clip(), t.cell.richParagraphs?.length ? ct(e, { ...n, richParagraphs: t.cell.richParagraphs, style: { verticalAlign: "middle", ...h } }, w, l, s) : Ce(
339
469
  e,
340
470
  {
341
- text: R,
342
- fontSizePx: g.fontSizePx,
343
- bold: m.bold ?? !1,
344
- italic: m.italic,
345
- underline: m.underline,
346
- color: ce(m, Pe),
347
- align: m.align ?? "left",
348
- lineHeight: _(m),
349
- letterSpacingPx: W(m.letterSpacing ?? 0, l)
471
+ text: S,
472
+ fontSizePx: f.fontSizePx,
473
+ bold: h.bold ?? !1,
474
+ italic: h.italic,
475
+ underline: h.underline,
476
+ color: ye(h, Ge),
477
+ align: h.align ?? "left",
478
+ lineHeight: q(h),
479
+ letterSpacingPx: U(h.letterSpacing ?? 0, l)
350
480
  },
351
- r + (t.xMm + d + f) * o,
481
+ r + (t.xMm + d + g) * o,
352
482
  i + (t.yMm + d) * o,
353
- T * o,
483
+ C * o,
354
484
  Math.max(0, t.heightMm - 2 * d) * o,
355
- m.fontFamily ?? a,
356
- m.verticalAlign ?? "middle"
485
+ h.fontFamily ?? s,
486
+ h.verticalAlign ?? "middle"
357
487
  );
358
- for (const y of t.cell.children ?? []) ie(e, { ...y, leftMm: y.leftMm + b.x / o, topMm: y.topMm + b.y / o }, o, l, a, s, c);
488
+ for (const v of t.cell.children ?? []) de(e, { ...v, leftMm: v.leftMm + w.x / o, topMm: v.topMm + w.y / o }, o, l, s, a, c);
359
489
  e.restore();
360
490
  }
361
- function $t(e, t, n, r, i, o, l, a, s) {
362
- const c = t.style ?? {}, d = z(c, l);
363
- if ($e(t)) {
364
- We(e, t, { x: n, y: r, width: i, height: o }, l, a);
491
+ function an(e, t, n, r, i, o, l, s, a) {
492
+ const c = t.style ?? {}, d = _(c, l);
493
+ if (Ye(t)) {
494
+ ct(e, t, { x: n, y: r, width: i, height: o }, l, s);
365
495
  return;
366
496
  }
367
- const h = t.lines?.length ? t.lines.join(`
368
- `) : Le(t.text ?? "", t.widthMm, { fontSizePt: d.fontSizePt, bold: c.bold, italic: c.italic, fontFamily: c.fontFamily ?? a, letterSpacingPt: c.letterSpacing }, s).join(`
497
+ const m = t.lines?.length ? t.lines.join(`
498
+ `) : Qe(t.text ?? "", t.widthMm, { fontSizePt: d.fontSizePt, bold: c.bold, italic: c.italic, fontFamily: c.fontFamily ?? s, letterSpacingPt: c.letterSpacing }, a).join(`
369
499
  `);
370
- ge(e, {
371
- text: h,
500
+ Ce(e, {
501
+ text: m,
372
502
  fontSizePx: d.fontSizePx,
373
503
  bold: c.bold ?? !1,
374
504
  italic: c.italic,
375
505
  underline: c.underline,
376
- color: ce(c),
506
+ color: ye(c),
377
507
  align: c.align ?? "left",
378
- lineHeight: _(c),
379
- letterSpacingPx: W(c.letterSpacing ?? 0, l)
380
- }, n, r, i, o, c.fontFamily ?? a, c.verticalAlign);
381
- }
382
- function ie(e, t, n, r, i, o, l) {
383
- const a = t.leftMm * n, s = t.topMm * n, c = t.widthMm * n, d = t.heightMm * n, h = t.style ?? {};
384
- if (re(t)) {
385
- const m = l?.get(t.imageData);
386
- m ? Tt(e, m, a, s, c, d) : xe(e, t, a, s, c, d);
508
+ lineHeight: q(c),
509
+ letterSpacingPx: U(c.letterSpacing ?? 0, l)
510
+ }, n, r, i, o, c.fontFamily ?? s, c.verticalAlign);
511
+ }
512
+ function de(e, t, n, r, i, o, l) {
513
+ const s = t.leftMm * n, a = t.topMm * n, c = t.widthMm * n, d = t.heightMm * n, m = t.style ?? {};
514
+ if (ce(t)) {
515
+ const h = l?.get(t.imageData);
516
+ h ? Qt(e, h, s, a, c, d) : ze(e, t, s, a, c, d);
387
517
  return;
388
518
  }
389
519
  if (t.grid) {
390
- At(e, t.grid, t, a, s, c, d, n, r, i, o, l);
520
+ rn(e, t.grid, t, s, a, c, d, n, r, i, o, l);
391
521
  return;
392
522
  }
393
523
  switch (t.kind) {
394
524
  case "text": {
395
- $t(e, t, a, s, c, d, r, i, o);
525
+ an(e, t, s, a, c, d, r, i, o);
396
526
  break;
397
527
  }
398
528
  case "rect": {
399
- const m = q(h), g = Ae(h);
400
- h.backgroundColor && (e.fillStyle = h.backgroundColor, e.fillRect(a, s, c, d)), g.inner && (e.strokeStyle = m.color, e.lineWidth = W(m.widthPt, r), Pt(e, g, a, s, c, d));
529
+ const h = Y(m), f = Je(m);
530
+ m.backgroundColor && (e.fillStyle = m.backgroundColor, e.fillRect(s, a, c, d)), f.inner && (e.strokeStyle = h.color, e.lineWidth = U(h.widthPt, r), nn(e, f, s, a, c, d));
401
531
  break;
402
532
  }
403
533
  case "line": {
404
- const m = q({ ...h, borderColor: h.lineColor ?? h.borderColor });
405
- e.strokeStyle = m.color, e.lineWidth = W(m.widthPt, r), e.beginPath();
406
- const g = t.lineDirection === "up" ? s + d : t.lineDirection === "down" ? s : s + d / 2, f = t.lineDirection === "up" ? s : t.lineDirection === "down" ? s + d : s + d / 2;
407
- e.moveTo(a, g), e.lineTo(a + c, f), e.stroke();
534
+ const h = Y({ ...m, borderColor: m.lineColor ?? m.borderColor });
535
+ e.strokeStyle = h.color, e.lineWidth = U(h.widthPt, r), e.beginPath();
536
+ const f = t.lineDirection === "up" ? a + d : t.lineDirection === "down" ? a : a + d / 2, g = t.lineDirection === "up" ? a : t.lineDirection === "down" ? a + d : a + d / 2;
537
+ e.moveTo(s, f), e.lineTo(s + c, g), e.stroke();
408
538
  break;
409
539
  }
410
540
  case "ellipse": {
411
- const m = q(h);
412
- e.strokeStyle = m.color, e.lineWidth = W(m.widthPt, r), h.backgroundColor && (e.fillStyle = h.backgroundColor, e.beginPath(), e.ellipse(a + c / 2, s + d / 2, c / 2, d / 2, 0, 0, Math.PI * 2), e.fill()), e.beginPath(), e.ellipse(a + c / 2, s + d / 2, c / 2, d / 2, 0, 0, Math.PI * 2), e.stroke();
541
+ const h = Y(m);
542
+ e.strokeStyle = h.color, e.lineWidth = U(h.widthPt, r), m.backgroundColor && (e.fillStyle = m.backgroundColor, e.beginPath(), e.ellipse(s + c / 2, a + d / 2, c / 2, d / 2, 0, 0, Math.PI * 2), e.fill()), e.beginPath(), e.ellipse(s + c / 2, a + d / 2, c / 2, d / 2, 0, 0, Math.PI * 2), e.stroke();
413
543
  break;
414
544
  }
415
545
  default:
416
- xe(e, t, a, s, c, d);
546
+ ze(e, t, s, a, c, d);
417
547
  break;
418
548
  }
419
549
  }
420
- function xe(e, t, n, r, i, o) {
550
+ function ze(e, t, n, r, i, o) {
421
551
  e.save(), e.strokeStyle = "#94a3b8", e.strokeRect(n, r, i, o), e.fillStyle = "#64748b", e.font = "12px sans-serif", e.fillText(t.fallbackText ?? `[${t.kind}]`, n + 3, r + 14), e.restore();
422
552
  }
423
- async function Nn(e, t = {}) {
553
+ async function yr(e, t = {}) {
424
554
  if (typeof document > "u")
425
555
  throw new Error("renderPlanToImages 需要浏览器环境(SSR/Node 请在客户端钩子中调用)");
426
556
  const { format: n = "png", quality: r = 0.92, ...i } = t;
427
557
  if (n !== "png" && n !== "jpeg") throw new TypeError("Image format must be png or jpeg.");
428
558
  if (!Number.isFinite(r) || r < 0 || r > 1) throw new RangeError("Image quality must be between 0 and 1.");
429
559
  k(t.signal);
430
- const o = await he(e, { ...t, format: "canvas" });
560
+ const o = await Ee(e, { ...t, format: "canvas" });
431
561
  e = o.plan;
432
- const l = [...o.diagnostics, ...Y(e, "canvas", t)], a = n === "jpeg" ? "image/jpeg" : "image/png", s = [], c = Math.min(e.pages.length - 1, t.end ?? e.pages.length - 1);
562
+ const l = [...o.diagnostics, ...Z(e, "canvas", t)], s = n === "jpeg" ? "image/jpeg" : "image/png", a = [], c = Math.min(e.pages.length - 1, t.end ?? e.pages.length - 1);
433
563
  for (let d = Math.max(0, t.start ?? 0); d <= c; d++) {
434
564
  k(t.signal);
435
- const h = await Ue(e.pages[d], d, i, l);
565
+ const m = await ht(e.pages[d], d, i, l);
436
566
  try {
437
- s.push(await It(h, a, r, t.signal));
567
+ a.push(await sn(m, s, r, t.signal));
438
568
  } finally {
439
- h.width = 0, h.height = 0;
569
+ m.width = 0, m.height = 0;
440
570
  }
441
- await st(t, s.length, c - Math.max(0, t.start ?? 0) + 1);
571
+ await At(t, a.length, c - Math.max(0, t.start ?? 0) + 1);
442
572
  }
443
- return k(t.signal), { blobs: s, diagnostics: l };
573
+ return k(t.signal), { blobs: a, diagnostics: l };
444
574
  }
445
- function It(e, t, n, r) {
575
+ function sn(e, t, n, r) {
446
576
  return k(r), new Promise((i, o) => {
447
577
  const l = () => o(r?.reason ?? new DOMException("The operation was aborted.", "AbortError"));
448
578
  r?.addEventListener("abort", l, { once: !0 });
449
579
  try {
450
- e.toBlob((a) => {
451
- r?.removeEventListener("abort", l), a ? i(a) : o(new Error("Canvas encoding failed; no empty image was emitted."));
580
+ e.toBlob((s) => {
581
+ r?.removeEventListener("abort", l), s ? i(s) : o(new Error("Canvas encoding failed; no empty image was emitted."));
452
582
  }, t, n);
453
- } catch (a) {
454
- r?.removeEventListener("abort", l), o(a);
583
+ } catch (s) {
584
+ r?.removeEventListener("abort", l), o(s);
455
585
  }
456
586
  });
457
587
  }
458
- function Ln(e, t = {}) {
588
+ function Mr(e, t = {}) {
459
589
  if (k(t.signal), typeof document > "u")
460
590
  throw new Error("renderPlanToCanvas 需要浏览器环境(SSR 请在客户端钩子中调用)");
461
- const n = t.dpr ?? (typeof devicePixelRatio == "number" ? devicePixelRatio : 1), r = t.dpi ?? 96, i = r / 96 * ue, o = t.fontFamily ?? ne, l = t.measurer ?? de, a = Math.max(0, t.start ?? 0), s = Math.min(e.pages.length - 1, t.end ?? e.pages.length - 1), c = [], d = Y(e, "canvas", t), h = Nt(e, a, s);
462
- for (const m of h)
463
- Oe(m, t), d.push(m);
464
- if (t.fidelity === "strict" && h.length) throw new ot(d);
465
- for (let m = a; m <= s; m++) {
591
+ const n = t.dpr ?? (typeof devicePixelRatio == "number" ? devicePixelRatio : 1), r = t.dpi ?? 96, i = r / 96 * Re, o = t.fontFamily ?? le, l = t.measurer ?? Me, s = Math.max(0, t.start ?? 0), a = Math.min(e.pages.length - 1, t.end ?? e.pages.length - 1), c = [], d = Z(e, "canvas", t), m = ln(e, s, a);
592
+ for (const h of m)
593
+ tt(h, t), d.push(h);
594
+ if (t.fidelity === "strict" && m.length) throw new Pt(d);
595
+ for (let h = s; h <= a; h++) {
466
596
  k(t.signal);
467
- const g = e.pages[m], { canvas: f, ctx: T } = je(g, n, r, t.maxCanvasPixels);
468
- for (const R of g.components)
469
- ie(T, R, i, r, o, l);
470
- c.push(f);
597
+ const f = e.pages[h], { canvas: g, ctx: C } = mt(f, n, r, t.maxCanvasPixels);
598
+ for (const S of f.components)
599
+ de(C, S, i, r, o, l);
600
+ c.push(g);
471
601
  }
472
602
  return { canvases: c, diagnostics: d };
473
603
  }
474
- function Nt(e, t, n) {
475
- return n < t ? [] : e.pages.slice(t, n + 1).flatMap((r, i) => [...fe(r)].map(({ component: o, componentIndex: l, componentPath: a }) => ({
604
+ function ln(e, t, n) {
605
+ return n < t ? [] : e.pages.slice(t, n + 1).flatMap((r, i) => [...Te(r)].map(({ component: o, componentIndex: l, componentPath: s }) => ({
476
606
  code: "async-image-required",
477
607
  severity: "warning",
478
608
  format: "canvas",
479
609
  pageIndex: t + i,
480
610
  componentIndex: l,
481
- componentPath: a,
611
+ componentPath: s,
482
612
  kind: o.kind,
483
613
  nid: o.nid,
484
614
  message: "Use renderPlanToCanvasAsync or renderPlanToImages to decode and include images."
485
615
  })));
486
616
  }
487
- async function Dn(e, t = {}) {
617
+ async function vr(e, t = {}) {
488
618
  if (typeof document > "u") throw new Error("renderPlanToCanvasAsync 需要浏览器环境(Node 请使用 PDF 或 XLSX 输出)");
489
619
  k(t.signal);
490
- const n = await he(e, { ...t, format: "canvas" });
620
+ const n = await Ee(e, { ...t, format: "canvas" });
491
621
  e = n.plan;
492
- const r = [...n.diagnostics, ...Y(e, "canvas", t)], i = [], o = Math.min(e.pages.length - 1, t.end ?? e.pages.length - 1);
622
+ const r = [...n.diagnostics, ...Z(e, "canvas", t)], i = [], o = Math.min(e.pages.length - 1, t.end ?? e.pages.length - 1);
493
623
  for (let l = Math.max(0, t.start ?? 0); l <= o; l++)
494
- i.push(await Ue(e.pages[l], l, t, r));
624
+ i.push(await ht(e.pages[l], l, t, r));
495
625
  return { canvases: i, diagnostics: r };
496
626
  }
497
- async function Ue(e, t, n, r) {
498
- const i = n.dpr ?? (typeof devicePixelRatio == "number" ? devicePixelRatio : 1), o = n.dpi ?? 96, l = n.fontFamily ?? ne, a = await Ge(e, t, n, r);
627
+ async function ht(e, t, n, r) {
628
+ const i = n.dpr ?? (typeof devicePixelRatio == "number" ? devicePixelRatio : 1), o = n.dpi ?? 96, l = n.fontFamily ?? le, s = await ft(e, t, n, r);
499
629
  k(n.signal);
500
- const { canvas: s, ctx: c } = je(e, i, o, n.maxCanvasPixels);
501
- for (const d of e.components) ie(c, d, o / 25.4, o, l, n.measurer ?? de, a);
502
- return s;
630
+ const { canvas: a, ctx: c } = mt(e, i, o, n.maxCanvasPixels);
631
+ for (const d of e.components) de(c, d, o / 25.4, o, l, n.measurer ?? Me, s);
632
+ return a;
503
633
  }
504
- async function Ge(e, t, n, r) {
505
- const i = n.imageLoader ?? xt;
506
- return Et(e, async (o, l) => {
634
+ async function ft(e, t, n, r) {
635
+ const i = n.imageLoader ?? Yt;
636
+ return Zt(e, async (o, l) => {
507
637
  try {
508
638
  return await i(o, l);
509
- } catch (a) {
510
- if (l?.aborted) throw a;
511
- const s = [...fe(e)].find(({ component: g }) => g.imageData === o), { component: c, componentIndex: d, componentPath: h } = s, m = { code: "image-decode-failed", severity: "warning", format: "canvas", pageIndex: t, componentIndex: d, componentPath: h, kind: c.kind, nid: c.nid, message: "Image decoding failed; raster output was cancelled instead of omitting the image." };
512
- throw r.push(m), Oe(m, n), a;
639
+ } catch (s) {
640
+ if (l?.aborted) throw s;
641
+ const a = [...Te(e)].find(({ component: f }) => f.imageData === o), { component: c, componentIndex: d, componentPath: m } = a, h = { code: "image-decode-failed", severity: "warning", format: "canvas", pageIndex: t, componentIndex: d, componentPath: m, kind: c.kind, nid: c.nid, message: "Image decoding failed; raster output was cancelled instead of omitting the image." };
642
+ throw r.push(h), tt(h, n), s;
513
643
  }
514
644
  }, n.signal);
515
645
  }
516
- function Fn(e, t = {}) {
517
- const n = t.dpr ?? (typeof devicePixelRatio == "number" ? devicePixelRatio : 1), r = t.dpi ?? 96, i = r / 96 * ue, o = t.fontFamily ?? ne, l = t.measurer ?? de, a = t.overscan ?? 1, s = t.gapPx ?? 18, c = t.pagesPerFrame ?? 1, d = e.pages.map((u) => u.pageHeightMm * i), h = Math.max(1, ...e.pages.map((u) => u.pageWidthMm * i)), m = { start: 0, end: -1 };
518
- let g = null, f = null, T = null, R = null, b = [], y = 0, P = [], H = 0, N = new AbortController();
519
- const be = [];
520
- function Ke() {
521
- const u = g;
522
- u.innerHTML = "", f = document.createElement("div"), f.style.cssText = `width:${h}px;margin:0 auto;`, T = document.createElement("div"), R = document.createElement("div"), f.appendChild(T), b = [];
523
- const x = Math.min(e.pages.length, 3 + a * 2);
524
- for (let F = 0; F < x; F++) {
525
- const M = document.createElement("div");
526
- M.style.cssText = `margin:0 auto ${s}px;box-shadow:0 2px 8px rgba(0,0,0,.35);background:#fff;`, f.appendChild(M), b.push(M);
646
+ function xr(e, t = {}) {
647
+ const n = t.dpr ?? (typeof devicePixelRatio == "number" ? devicePixelRatio : 1), r = t.dpi ?? 96, i = r / 96 * Re, o = t.fontFamily ?? le, l = t.measurer ?? Me, s = t.overscan ?? 1, a = t.gapPx ?? 18, c = t.pagesPerFrame ?? 1, d = e.pages.map((p) => p.pageHeightMm * i), m = Math.max(1, ...e.pages.map((p) => p.pageWidthMm * i)), h = { start: 0, end: -1 };
648
+ let f = null, g = null, C = null, S = null, w = [], v = 0, y = [], N = 0, L = new AbortController();
649
+ const Oe = [];
650
+ function yt() {
651
+ const p = f;
652
+ p.innerHTML = "", g = document.createElement("div"), g.style.cssText = `width:${m}px;margin:0 auto;`, C = document.createElement("div"), S = document.createElement("div"), g.appendChild(C), w = [];
653
+ const R = Math.min(e.pages.length, 3 + s * 2);
654
+ for (let z = 0; z < R; z++) {
655
+ const E = document.createElement("div");
656
+ E.style.cssText = `margin:0 auto ${a}px;box-shadow:0 2px 8px rgba(0,0,0,.35);background:#fff;`, g.appendChild(E), w.push(E);
527
657
  }
528
- f.appendChild(R), u.appendChild(f);
529
- }
530
- async function Je(u, x) {
531
- const F = H, M = await he(e, { ...t, signal: N.signal, format: "canvas", start: x, end: x });
532
- be.push(...M.diagnostics);
533
- const C = M.plan.pages[x], X = await Ge(C, x, { ...t, signal: N.signal }, be);
534
- if (F !== H || !g) return;
535
- const { widthPx: oe, heightPx: se } = pe(C, r);
536
- let L = u.firstElementChild;
537
- (!L || L.tagName !== "CANVAS") && (L = document.createElement("canvas"), u.innerHTML = "", u.appendChild(L));
538
- const ve = _e(C, n, r, t.maxCanvasPixels);
539
- L.width = ve.width, L.height = ve.height, L.style.width = `${oe}px`, L.style.height = `${se}px`;
540
- const B = L.getContext("2d");
541
- if (B) {
542
- B.setTransform(1, 0, 0, 1, 0, 0), B.scale(n, n), B.fillStyle = "#ffffff", B.fillRect(0, 0, oe, se);
543
- for (const Ze of C.components)
544
- ie(B, Ze, i, r, o, l, X);
545
- L.dataset.canvasPage = String(x), u.style.height = `${se}px`, u.style.width = `${oe}px`;
658
+ g.appendChild(S), p.appendChild(g);
659
+ }
660
+ async function Mt(p, R) {
661
+ const z = N, E = await Ee(e, { ...t, signal: L.signal, format: "canvas", start: R, end: R });
662
+ Oe.push(...E.diagnostics);
663
+ const P = E.plan.pages[R], ne = await ft(P, R, { ...t, signal: L.signal }, Oe);
664
+ if (z !== N || !f) return;
665
+ const { widthPx: fe, heightPx: ge } = $e(P, r);
666
+ let D = p.firstElementChild;
667
+ (!D || D.tagName !== "CANVAS") && (D = document.createElement("canvas"), p.innerHTML = "", p.appendChild(D));
668
+ const Ne = dt(P, n, r, t.maxCanvasPixels);
669
+ D.width = Ne.width, D.height = Ne.height, D.style.width = `${fe}px`, D.style.height = `${ge}px`;
670
+ const W = D.getContext("2d");
671
+ if (W) {
672
+ W.setTransform(1, 0, 0, 1, 0, 0), W.scale(n, n), W.fillStyle = "#ffffff", W.fillRect(0, 0, fe, ge);
673
+ for (const xt of P.components)
674
+ de(W, xt, i, r, o, l, ne);
675
+ D.dataset.canvasPage = String(R), p.style.height = `${ge}px`, p.style.width = `${fe}px`;
546
676
  }
547
677
  }
548
- function Xe(u) {
549
- H++, m.start = u.start, m.end = u.end, T.style.height = `${u.start * s + d.slice(0, u.start).reduce((M, C) => M + C, 0)}px`;
550
- const x = e.pages.length - 1 - u.end;
551
- R.style.height = `${x * s + d.slice(u.end + 1).reduce((M, C) => M + C, 0)}px`;
552
- const F = u.end - u.start + 1;
553
- b.forEach((M, C) => {
554
- if (C < F) {
555
- M.style.display = "";
556
- const X = u.start + C;
557
- M.style.height = `${d[X] ?? 0}px`;
678
+ function vt(p) {
679
+ N++, h.start = p.start, h.end = p.end, C.style.height = `${p.start * a + d.slice(0, p.start).reduce((E, P) => E + P, 0)}px`;
680
+ const R = e.pages.length - 1 - p.end;
681
+ S.style.height = `${R * a + d.slice(p.end + 1).reduce((E, P) => E + P, 0)}px`;
682
+ const z = p.end - p.start + 1;
683
+ w.forEach((E, P) => {
684
+ if (P < z) {
685
+ E.style.display = "";
686
+ const ne = p.start + P;
687
+ E.style.height = `${d[ne] ?? 0}px`;
558
688
  } else
559
- M.style.display = "none";
560
- }), P = [];
561
- for (let M = u.start; M <= u.end; M++) {
562
- const C = b[M - u.start];
563
- if (!C) continue;
564
- C.firstElementChild?.dataset?.canvasPage !== String(M) && P.push(M);
689
+ E.style.display = "none";
690
+ }), y = [];
691
+ for (let E = p.start; E <= p.end; E++) {
692
+ const P = w[E - p.start];
693
+ if (!P) continue;
694
+ P.firstElementChild?.dataset?.canvasPage !== String(E) && y.push(E);
565
695
  }
566
- ae();
567
- }
568
- function ae() {
569
- y || P.length === 0 || (y = requestAnimationFrame(() => {
570
- y = 0;
571
- let u = Math.max(1, c);
572
- for (; P.length > 0 && u-- > 0; ) {
573
- const x = P.shift(), F = b[x - m.start];
574
- F && Je(F, x).catch(() => {
696
+ he();
697
+ }
698
+ function he() {
699
+ v || y.length === 0 || (v = requestAnimationFrame(() => {
700
+ v = 0;
701
+ let p = Math.max(1, c);
702
+ for (; y.length > 0 && p-- > 0; ) {
703
+ const R = y.shift(), z = w[R - h.start];
704
+ z && Mt(z, R).catch(() => {
575
705
  });
576
706
  }
577
- P.length > 0 && ae();
707
+ y.length > 0 && he();
578
708
  }));
579
709
  }
580
- function K() {
581
- y || (y = requestAnimationFrame(() => {
582
- y = 0;
583
- const u = g, x = Ct({
710
+ function ee() {
711
+ v || (v = requestAnimationFrame(() => {
712
+ v = 0;
713
+ const p = f, R = en({
584
714
  pageHeightsPx: d,
585
- viewportHeightPx: u.clientHeight,
586
- scrollTopPx: u.scrollTop,
587
- overscan: a,
588
- gapPx: s
715
+ viewportHeightPx: p.clientHeight,
716
+ scrollTopPx: p.scrollTop,
717
+ overscan: s,
718
+ gapPx: a
589
719
  });
590
- x.start !== m.start || x.end !== m.end ? Xe(x) : ae();
720
+ R.start !== h.start || R.end !== h.end ? vt(R) : he();
591
721
  }));
592
722
  }
593
- let J = null;
723
+ let te = null;
594
724
  return {
595
- attach(u) {
725
+ attach(p) {
596
726
  if (typeof document > "u")
597
727
  throw new Error("createCanvasPager 需要浏览器环境(SSR 请在客户端钩子中调用 attach)");
598
- k(t.signal), N = new AbortController(), t.signal?.addEventListener("abort", Me, { once: !0 }), Y(e, "canvas", t), g = u, Ke(), u.addEventListener("scroll", K, { passive: !0 }), typeof ResizeObserver < "u" && (J = new ResizeObserver(() => K()), J.observe(u)), K();
728
+ k(t.signal), L = new AbortController(), t.signal?.addEventListener("abort", Ie, { once: !0 }), Z(e, "canvas", t), f = p, yt(), p.addEventListener("scroll", ee, { passive: !0 }), typeof ResizeObserver < "u" && (te = new ResizeObserver(() => ee()), te.observe(p)), ee();
599
729
  },
600
730
  destroy() {
601
- H++, N.abort(), t.signal?.removeEventListener("abort", Me), y && cancelAnimationFrame(y), y = 0, J?.disconnect(), J = null, g?.removeEventListener("scroll", K), P = [], f?.remove(), g = null;
731
+ N++, L.abort(), t.signal?.removeEventListener("abort", Ie), v && cancelAnimationFrame(v), v = 0, te?.disconnect(), te = null, f?.removeEventListener("scroll", ee), y = [], g?.remove(), f = null;
602
732
  },
603
733
  window() {
604
- return { ...m };
734
+ return { ...h };
605
735
  }
606
736
  };
607
- function Me() {
608
- N.abort(t.signal?.reason);
737
+ function Ie() {
738
+ L.abort(t.signal?.reason);
609
739
  }
610
740
  }
611
- function qe(e, t, n) {
741
+ function gt(e, t, n) {
612
742
  let r, i;
613
743
  if (typeof e == "string") {
614
- const o = Q[e];
615
- if (!o) throw new Error(`未知纸张预设 "${e}"(可用:${Object.keys(Q).join("/")})`);
744
+ const o = oe[e];
745
+ if (!o) throw new Error(`未知纸张预设 "${e}"(可用:${Object.keys(oe).join("/")})`);
616
746
  r = o.widthMm, i = o.heightMm;
617
747
  } else typeof e == "number" ? (r = e, i = t ?? 297) : (r = e.widthMm, i = e.heightMm);
618
748
  return n ? { widthMm: i, heightMm: r } : { widthMm: r, heightMm: i };
619
749
  }
620
- class Lt {
750
+ class cn {
621
751
  constructor() {
622
752
  this.pages = [], this.pending = null, this.templateParams = void 0;
623
753
  }
@@ -650,18 +780,18 @@ class Lt {
650
780
  */
651
781
  page(t = "a4", n = {}, r) {
652
782
  this.collect();
653
- const o = r != null && !("margins" in r) && !("landscape" in r) && ("marginTopMm" in r || "marginBottomMm" in r || "marginLeftMm" in r || "marginRightMm" in r) ? { margins: r } : typeof n == "number" ? r ?? {} : n, { widthMm: l, heightMm: a } = qe(
783
+ const o = r != null && !("margins" in r) && !("landscape" in r) && ("marginTopMm" in r || "marginBottomMm" in r || "marginLeftMm" in r || "marginRightMm" in r) ? { margins: r } : typeof n == "number" ? r ?? {} : n, { widthMm: l, heightMm: s } = gt(
654
784
  t,
655
785
  typeof n == "number" ? n : void 0,
656
786
  o.landscape
657
- ), s = o.margins ?? {};
658
- return this.pending = new Dt(this, {
787
+ ), a = o.margins ?? {};
788
+ return this.pending = new dn(this, {
659
789
  widthMm: l,
660
- heightMm: a,
661
- marginTopMm: s.marginTopMm ?? 10,
662
- marginBottomMm: s.marginBottomMm ?? 10,
663
- marginLeftMm: s.marginLeftMm ?? 10,
664
- marginRightMm: s.marginRightMm ?? 10
790
+ heightMm: s,
791
+ marginTopMm: a.marginTopMm ?? 10,
792
+ marginBottomMm: a.marginBottomMm ?? 10,
793
+ marginLeftMm: a.marginLeftMm ?? 10,
794
+ marginRightMm: a.marginRightMm ?? 10
665
795
  }), this.pending;
666
796
  }
667
797
  collect() {
@@ -677,7 +807,7 @@ class Lt {
677
807
  };
678
808
  }
679
809
  }
680
- class Dt {
810
+ class dn {
681
811
  constructor(t, n) {
682
812
  this.parent = t, this.page = n, this.components = [];
683
813
  }
@@ -746,26 +876,27 @@ class Dt {
746
876
  return this.done().build();
747
877
  }
748
878
  }
749
- function On() {
750
- return new Lt();
879
+ function Sr() {
880
+ return new cn();
751
881
  }
752
- function zn(e, t = {}) {
753
- return et([], e), e.fields.map((n) => ({
882
+ function Er(e, t = {}) {
883
+ return Et([], e), e.fields.map((n) => ({
754
884
  field: n.field,
755
885
  header: `${n.label ?? n.field}${n.unit ? ` (${n.unit})` : ""}`,
756
886
  semanticRole: n.semanticRole ?? (n.type === "number" || n.type === "decimal" ? "measure" : n.type === "date" ? "date" : n.enum ? "dimension" : "text"),
887
+ ...n.format ? { format: { ...n.format } } : {},
757
888
  ...t[n.field]
758
889
  }));
759
890
  }
760
- function $(e, t, n = !1) {
891
+ function O(e, t, n = !1) {
761
892
  if (!Number.isFinite(e) || (n ? e < 0 : e <= 0))
762
893
  throw new Error(`${t} 必须是有限${n ? "非负" : "正"}数`);
763
894
  }
764
- function ee(e, t, n) {
895
+ function ae(e, t, n) {
765
896
  if (e !== void 0 && !["left", "center", "right", "justify", ...n ? ["auto"] : []].includes(e))
766
897
  throw new Error(`${t} 必须是 left/center/right/justify${n ? "/auto" : ""}`);
767
898
  }
768
- function Ft(e) {
899
+ function mn(e) {
769
900
  const t = e.layout ?? "page";
770
901
  if (t !== "page" && t !== "wide")
771
902
  throw new Error("layout 必须是 page 或 wide");
@@ -774,18 +905,18 @@ function Ft(e) {
774
905
  if (t !== "wide" && e.columnWidthMm !== void 0)
775
906
  throw new Error('columnWidthMm 仅适用于 layout: "wide"');
776
907
  const n = e.columnWidthMm ?? 30;
777
- return $(n, "columnWidthMm"), { layout: t, columnWidthMm: n };
908
+ return O(n, "columnWidthMm"), { layout: t, columnWidthMm: n };
778
909
  }
779
- function Ot(e) {
910
+ function hn(e) {
780
911
  const t = e.paper === void 0 ? "a4" : e.paper;
781
912
  if (typeof t != "string" && (typeof t != "object" || t === null) || e.landscape !== void 0 && typeof e.landscape != "boolean")
782
913
  throw new Error("paper 必须是纸张预设名或 { widthMm, heightMm } 对象,landscape 必须是布尔值");
783
- if (typeof t == "string" && !Object.prototype.hasOwnProperty.call(Q, t))
784
- throw new Error(`未知纸张预设 "${t}"(可用:${Object.keys(Q).join("/")})`);
785
- const n = qe(t, void 0, e.landscape), r = n.widthMm, i = n.heightMm;
786
- return $(r, "纸张 widthMm"), $(i, "纸张 heightMm"), { widthMm: r, heightMm: i };
914
+ if (typeof t == "string" && !Object.prototype.hasOwnProperty.call(oe, t))
915
+ throw new Error(`未知纸张预设 "${t}"(可用:${Object.keys(oe).join("/")})`);
916
+ const n = gt(t, void 0, e.landscape), r = n.widthMm, i = n.heightMm;
917
+ return O(r, "纸张 widthMm"), O(i, "纸张 heightMm"), { widthMm: r, heightMm: i };
787
918
  }
788
- function zt(e) {
919
+ function fn(e) {
789
920
  if (e.margins !== void 0 && (!e.margins || typeof e.margins != "object" || Array.isArray(e.margins)))
790
921
  throw new Error("margins 必须是页边距对象");
791
922
  const t = e.margins ?? {}, n = {
@@ -794,133 +925,185 @@ function zt(e) {
794
925
  marginLeftMm: t.marginLeftMm === void 0 ? 10 : t.marginLeftMm,
795
926
  marginRightMm: t.marginRightMm === void 0 ? 10 : t.marginRightMm
796
927
  };
797
- for (const [r, i] of Object.entries(n)) $(i, r, !0);
928
+ for (const [r, i] of Object.entries(n)) O(i, r, !0);
798
929
  return n;
799
930
  }
800
- function Ht(e, t) {
931
+ function gn(e, t) {
801
932
  const n = e.dataset === void 0 ? "detail" : e.dataset;
802
933
  if (typeof n != "string" || !n.trim())
803
934
  throw new Error("dataset 必须是非空字符串");
804
935
  if (e.title !== void 0 && typeof e.title != "string")
805
936
  throw new Error("title 必须是字符串");
806
937
  const r = e.titleHeightMm === void 0 ? 10 : e.titleHeightMm, i = e.titleGapMm === void 0 ? 4 : e.titleGapMm;
807
- $(r, "titleHeightMm"), $(i, "titleGapMm", !0);
938
+ O(r, "titleHeightMm"), O(i, "titleGapMm", !0);
808
939
  const o = e.title !== void 0 && e.title.length > 0, l = o ? r + i : 0;
809
940
  if (l >= t)
810
941
  throw new Error("标题高度与间距占满页面,必须为表格保留可用高度");
811
942
  return { dataset: n, titleHeightMm: r, hasTitle: o, titleSpaceMm: l };
812
943
  }
813
- function Bt(e) {
944
+ function un(e) {
814
945
  if (e.listOptions !== void 0 && (!e.listOptions || typeof e.listOptions != "object" || Array.isArray(e.listOptions)))
815
946
  throw new Error("listOptions 必须是列表配置对象");
816
947
  const t = e.listOptions ?? {};
817
- ee(t.align, "listOptions.align", !0), ee(t.headerAlign, "listOptions.headerAlign", !1);
948
+ ae(t.align, "listOptions.align", !0), ae(t.headerAlign, "listOptions.headerAlign", !1);
818
949
  for (const n of ["fontSizePt", "rowHeightMm", "paddingMm"]) {
819
950
  const r = t[n];
820
- r !== void 0 && $(r, `listOptions.${n}`, n === "paddingMm");
951
+ r !== void 0 && O(r, `listOptions.${n}`, n === "paddingMm");
821
952
  }
822
953
  return t;
823
954
  }
824
- function Wt(e) {
955
+ function pn(e) {
825
956
  let t = 0, n = 0;
826
957
  for (const [r, i] of e.entries()) {
827
958
  if (!i || typeof i.header != "string" || typeof i.field != "string" || !i.field.trim())
828
959
  throw new Error(`columns[${r}] 需要字符串 header 与非空 field`);
829
- ee(i.align, `columns[${r}].align`, !0), ee(i.headerAlign, `columns[${r}].headerAlign`, !1), i.flex !== void 0 && $(i.flex, `columns[${r}].flex`), i.widthMm !== void 0 ? ($(i.widthMm, `columns[${r}].widthMm`), t += i.widthMm) : n = Math.max(n, i.flex ?? 1);
960
+ ae(i.align, `columns[${r}].align`, !0), ae(i.headerAlign, `columns[${r}].headerAlign`, !1), i.flex !== void 0 && O(i.flex, `columns[${r}].flex`), i.widthMm !== void 0 ? (O(i.widthMm, `columns[${r}].widthMm`), t += i.widthMm) : n = Math.max(n, i.flex ?? 1);
830
961
  }
831
962
  return { fixedWidthMm: t, maxFlex: n };
832
963
  }
833
- function _t(e, t, n, r) {
834
- const { fixedWidthMm: i, maxFlex: o } = Wt(e.columns);
964
+ function wn(e, t, n, r) {
965
+ const { fixedWidthMm: i, maxFlex: o } = pn(e.columns);
835
966
  if (t === "page" && i > r)
836
967
  throw new Error(`固定列宽 ${i}mm 超出页面可用宽度 ${r}mm`);
837
968
  const l = r - i;
838
969
  if (t === "page" && o > 0 && l <= 0)
839
970
  throw new Error("固定列占满页面可用宽度,自动列需要正的剩余宽度");
840
- const a = o > 0 ? e.columns.reduce((c, d) => c + (d.widthMm === void 0 ? (d.flex ?? 1) / o : 0), 0) : 0;
841
- return { columns: e.columns.map(({ widthMm: c, flex: d, ...h }, m) => {
842
- const g = c ?? (t === "wide" ? n * (d ?? 1) : l * ((d ?? 1) / o) / a);
843
- return $(g, `columns[${m}] 分配后的 widthMm`), { ...h, widthMm: g };
971
+ const s = o > 0 ? e.columns.reduce((c, d) => c + (d.widthMm === void 0 ? (d.flex ?? 1) / o : 0), 0) : 0;
972
+ return { columns: e.columns.map(({ widthMm: c, flex: d, ...m }, h) => {
973
+ const f = c ?? (t === "wide" ? n * (d ?? 1) : l * ((d ?? 1) / o) / s);
974
+ return O(f, `columns[${h}] 分配后的 widthMm`), { ...m, widthMm: f };
844
975
  }), fixedWidthMm: i, maxFlex: o };
845
976
  }
846
- function Hn(e) {
977
+ function Cr(e) {
847
978
  if (!e || typeof e != "object")
848
979
  throw new Error("标准明细模板需要 options 对象");
849
980
  if (!Array.isArray(e.columns) || e.columns.length === 0)
850
981
  throw new Error("columns 至少需要一列");
851
- const { layout: t, columnWidthMm: n } = Ft(e), r = Ot(e);
982
+ const { layout: t, columnWidthMm: n } = mn(e), r = hn(e);
852
983
  let i = r.widthMm;
853
- const o = r.heightMm, l = zt(e);
854
- let a = i - l.marginLeftMm - l.marginRightMm;
855
- const s = o - l.marginTopMm - l.marginBottomMm;
856
- if (t === "page" && a <= 0 || s <= 0)
984
+ const o = r.heightMm, l = fn(e);
985
+ let s = i - l.marginLeftMm - l.marginRightMm;
986
+ const a = o - l.marginTopMm - l.marginBottomMm;
987
+ if (t === "page" && s <= 0 || a <= 0)
857
988
  throw new Error("页边距占满纸张,必须保留正的可用宽度和高度");
858
- const { dataset: c, titleHeightMm: d, hasTitle: h, titleSpaceMm: m } = Ht(e, s), g = Bt(e), { columns: f, fixedWidthMm: T, maxFlex: R } = _t(e, t, n, a);
859
- t === "wide" && (a = f.reduce((y, P) => y + P.widthMm, 0), $(a, "宽表总列宽"), i = a + l.marginLeftMm + l.marginRightMm, $(i, "宽表总宽度"));
860
- const b = { widthMm: i, heightMm: o, ...l, components: [], ...t === "wide" ? { layout: t } : {} };
861
- return h && b.components.push({
989
+ const { dataset: c, titleHeightMm: d, hasTitle: m, titleSpaceMm: h } = gn(e, a), f = un(e), { columns: g, fixedWidthMm: C, maxFlex: S } = wn(e, t, n, s);
990
+ t === "wide" && (s = g.reduce((v, y) => v + y.widthMm, 0), O(s, "宽表总列宽"), i = s + l.marginLeftMm + l.marginRightMm, O(i, "宽表总宽度"));
991
+ const w = { widthMm: i, heightMm: o, ...l, components: [], ...t === "wide" ? { layout: t } : {} };
992
+ return m && w.components.push({
862
993
  kind: "text",
863
994
  text: e.title,
864
995
  leftMm: l.marginLeftMm,
865
996
  topMm: l.marginTopMm,
866
- widthMm: a,
997
+ widthMm: s,
867
998
  heightMm: d,
868
999
  style: { fontSize: 16, bold: !0, align: "center", verticalAlign: "middle", ...e.titleStyle }
869
- }), b.components.push({
1000
+ }), w.components.push({
870
1001
  align: "auto",
871
1002
  headerAlign: "center",
872
- ...g,
1003
+ ...f,
873
1004
  kind: "list",
874
1005
  ...t === "wide" ? { layout: t } : {},
875
- ...h ? { title: e.title } : {},
1006
+ ...m ? { title: e.title } : {},
876
1007
  dataset: c,
877
- columns: f,
1008
+ columns: g,
878
1009
  leftMm: l.marginLeftMm,
879
- topMm: l.marginTopMm + m,
880
- widthMm: t === "wide" || R > 0 ? a : T
881
- }), e.params === void 0 ? { pages: [b] } : { params: e.params, pages: [b] };
1010
+ topMm: l.marginTopMm + h,
1011
+ widthMm: t === "wide" || S > 0 ? s : C
1012
+ }), e.params === void 0 ? { pages: [w] } : { params: e.params, pages: [w] };
882
1013
  }
883
- function Bn(e) {
1014
+ function Tr(e) {
884
1015
  if (e.components !== void 0 && e.pages !== void 0) throw new TypeError("标签 components 与 pages 只能选择一种");
885
1016
  const { dataset: t, rowKey: n, copies: r, params: i } = e, o = e.pages ?? [{ components: e.components ?? [] }], l = {
886
1017
  repeat: { dataset: t, ...n === void 0 ? {} : { rowKey: n }, ...r === void 0 ? {} : { copies: r } },
887
1018
  ...i === void 0 ? {} : { params: i },
888
- pages: o.map((s) => ({
889
- widthMm: s.widthMm ?? e.widthMm ?? 80,
890
- heightMm: s.heightMm ?? e.heightMm ?? 55,
1019
+ pages: o.map((a) => ({
1020
+ widthMm: a.widthMm ?? e.widthMm ?? 80,
1021
+ heightMm: a.heightMm ?? e.heightMm ?? 55,
891
1022
  marginTopMm: 0,
892
1023
  marginRightMm: 0,
893
1024
  marginBottomMm: 0,
894
1025
  marginLeftMm: 0,
895
- components: s.components,
896
- ...s.meta === void 0 ? {} : { meta: s.meta }
1026
+ components: a.components,
1027
+ ...a.meta === void 0 ? {} : { meta: a.meta }
897
1028
  }))
898
- }, a = Ie(l);
899
- if (!a.ok) throw new Ne(a.errors);
1029
+ }, s = Xe(l);
1030
+ if (!s.ok) throw new Ze(s.errors);
900
1031
  return JSON.parse(JSON.stringify(l));
901
1032
  }
902
- function jt(e) {
1033
+ function bn(e) {
903
1034
  if (!e || typeof e != "object" || !e.repeat)
904
- throw new me("config", "defineLabelReport 需要带 repeat 的固定标签模板");
905
- const t = Ie(e);
906
- if (!t.ok) throw new Ne(t.errors);
1035
+ throw new ve("config", "defineLabelReport 需要带 repeat 的固定标签模板");
1036
+ const t = Xe(e);
1037
+ if (!t.ok) throw new Ze(t.errors);
907
1038
  return e.repeat.dataset;
908
1039
  }
909
- function Se(e, t) {
910
- if (!Array.isArray(e)) throw new me("validate", "标签数据应为对象数组;请从业务响应中提取行数组");
1040
+ function He(e, t) {
1041
+ if (!Array.isArray(e)) throw new ve("validate", "标签数据应为对象数组;请从业务响应中提取行数组");
911
1042
  return { [t]: e };
912
1043
  }
913
- function Wn(e) {
914
- const { template: t, rows: n, load: r, dataSchema: i, params: o, pagination: l, dataValidation: a } = e, s = jt(t);
1044
+ function Rr(e) {
1045
+ const { template: t, rows: n, load: r, dataSchema: i, params: o, pagination: l, dataValidation: s } = e, a = bn(t);
915
1046
  if (n !== void 0 == (r !== void 0) || r !== void 0 && typeof r != "function")
916
- throw new me("config", "标签报表应且只能配置 rows 或 load 其中一种数据来源");
917
- const c = { template: t, params: o, pagination: l, dataValidation: a, ...i === void 0 ? {} : { dataSchema: { [s]: i } } };
918
- return r ? tt({ ...c, load: r, mapData: (d) => Se(d, s) }) : { ...c, datasets: Se(n, s) };
1047
+ throw new ve("config", "标签报表应且只能配置 rows 或 load 其中一种数据来源");
1048
+ const c = { template: t, params: o, pagination: l, dataValidation: s, ...i === void 0 ? {} : { dataSchema: { [a]: i } } };
1049
+ return r ? Ct({ ...c, load: r, mapData: (d) => He(d, a) }) : { ...c, datasets: He(n, a) };
919
1050
  }
920
- function _n(e) {
1051
+ function $r(e) {
921
1052
  return e;
922
1053
  }
923
- class D extends Error {
1054
+ class F extends Error {
1055
+ constructor(t, n) {
1056
+ super(n), this.code = t, this.name = "ReportTemplateMigrationError";
1057
+ }
1058
+ }
1059
+ function Be(e) {
1060
+ let t = e;
1061
+ if (typeof t == "string") {
1062
+ if (t.length > 1e7) throw new F("result", "模板迁移输入超过预算");
1063
+ try {
1064
+ t = JSON.parse(t);
1065
+ } catch {
1066
+ throw new F("result", "模板 JSON 语法无效");
1067
+ }
1068
+ }
1069
+ const n = et(t, { maxBytes: 1e7, error: (r, i) => new F("result", i) });
1070
+ if (!n || typeof n != "object" || Array.isArray(n)) throw new F("result", "模板迁移应返回文档对象");
1071
+ return n;
1072
+ }
1073
+ function yn(e) {
1074
+ if (!Array.isArray(e) || e.length > 32) throw new F("definition", "模板迁移最多声明 32 步");
1075
+ const t = /* @__PURE__ */ new Map();
1076
+ for (const n of e) {
1077
+ if (!n || ![n.from, n.to].every((r) => typeof r == "string" && r.trim() && r.length <= 64) || n.from === n.to || t.has(n.from) || typeof n.migrate != "function" || n.from === pe) throw new F("definition", "迁移起点应唯一,不得从当前版本降级");
1078
+ t.set(n.from, { ...n });
1079
+ }
1080
+ for (const n of t.keys()) {
1081
+ const r = /* @__PURE__ */ new Set();
1082
+ let i = n;
1083
+ for (; t.has(i); ) {
1084
+ if (r.has(i)) throw new F("definition", "模板迁移链存在循环");
1085
+ r.add(i), i = t.get(i).to;
1086
+ }
1087
+ if (i !== pe) throw new F("definition", "每条迁移链应到达当前模板版本");
1088
+ }
1089
+ return t;
1090
+ }
1091
+ function Mn(e = []) {
1092
+ const t = yn(e);
1093
+ return async (n) => {
1094
+ let r = Be(n);
1095
+ const i = [];
1096
+ for (; r.schemaVersion !== pe; ) {
1097
+ const o = typeof r.schemaVersion == "string" ? t.get(r.schemaVersion) : void 0;
1098
+ if (!o) throw new F("unsupported", "未声明此模板版本的迁移路径");
1099
+ const l = r.id, s = Be(await o.migrate(r));
1100
+ if (s.schemaVersion !== o.to || typeof l == "string" && s.id !== l) throw new F("result", "迁移结果版本不匹配或改变了模板身份");
1101
+ i.push({ from: o.from, to: o.to }), r = s;
1102
+ }
1103
+ return { document: re(r), steps: i };
1104
+ };
1105
+ }
1106
+ class j extends Error {
924
1107
  constructor(t, n) {
925
1108
  super(n), this.code = t, this.name = "ReportTemplateStoreError";
926
1109
  }
@@ -928,134 +1111,342 @@ class D extends Error {
928
1111
  function I(e) {
929
1112
  return JSON.parse(JSON.stringify(e));
930
1113
  }
931
- function S(e) {
1114
+ function T(e) {
932
1115
  if (!e?.aborted) return;
933
1116
  const t = new Error("模板操作已取消");
934
1117
  throw t.name = "AbortError", t;
935
1118
  }
936
- function Ee(e) {
1119
+ function _e(e) {
937
1120
  const t = e ? Number(e.revision) : 0;
938
- if (!Number.isSafeInteger(t) || t < 0 || t >= Number.MAX_SAFE_INTEGER) throw new D("history", "修订号无效或已达上限");
1121
+ if (!Number.isSafeInteger(t) || t < 0 || t >= Number.MAX_SAFE_INTEGER) throw new j("history", "修订号无效或已达上限");
939
1122
  return String(t + 1);
940
1123
  }
941
- function jn(e, t = {}) {
942
- const n = async (l, a) => {
943
- S(a);
944
- const s = await e.read(l, a);
945
- return S(a), s ? I(s) : void 0;
946
- }, r = async (l, a) => {
947
- const s = await n(l, a.signal);
948
- if ((s?.revision ?? null) !== a.expectedRevision) throw new D("conflict", "模板已变化,请重新读取后提交");
949
- return s;
950
- }, i = async (l, a, s) => {
951
- if (S(a.signal), !await e.compareAndSwap(l.id, a.expectedRevision, I(l), { signal: a.signal, ...s ? { publication: I(s) } : {} })) throw new D("conflict", "模板已被其他请求更新");
952
- return I(l);
953
- }, o = async (l, a, s, c) => {
1124
+ function Pr(e, t = {}) {
1125
+ const n = t.migrations ? Mn(t.migrations) : void 0, r = async (a) => n ? (await n(a)).document : re(a), i = async (a, c) => {
1126
+ T(c);
1127
+ const d = await e.read(a, c);
1128
+ return T(c), d ? I(d) : void 0;
1129
+ }, o = async (a, c) => {
1130
+ const d = await i(a, c.signal);
1131
+ if ((d?.revision ?? null) !== c.expectedRevision) throw new j("conflict", "模板已变化,请重新读取后提交");
1132
+ return d;
1133
+ }, l = async (a, c, d) => {
1134
+ if (T(c.signal), !await e.compareAndSwap(a.id, c.expectedRevision, I(a), { signal: c.signal, ...d ? { publication: I(d) } : {} })) throw new j("conflict", "模板已被其他请求更新");
1135
+ return I(a);
1136
+ }, s = async (a, c, d, m) => {
954
1137
  if (t.beforePublish) {
955
- S(s.signal);
956
- const g = await t.beforePublish({ document: G(a), previous: l.published ? G(l.published) : void 0, signal: s.signal });
957
- if (!g || g.ok !== !0) throw new D("review", g?.issues?.find((f) => f.severity === "error")?.message ?? "模板发布检查未通过");
958
- S(s.signal);
1138
+ T(d.signal);
1139
+ const C = a.published ? await r(a.published) : void 0;
1140
+ T(d.signal);
1141
+ const S = await t.beforePublish({ document: re(c), previous: C, signal: d.signal });
1142
+ if (!S || S.ok !== !0) throw new j("review", S?.issues?.find((w) => w.severity === "error")?.message ?? "模板发布检查未通过");
1143
+ T(d.signal);
959
1144
  }
960
- const d = Ee(l), h = G({ ...a, revision: d }), m = { revision: d, document: h, publishedAt: (t.now?.() ?? /* @__PURE__ */ new Date()).toISOString() };
961
- return c !== void 0 && (m.restoredFrom = c), i({ id: l.id, revision: d, publishedRevision: d, published: h }, s, m);
1145
+ const h = _e(a), f = re({ ...c, revision: h }), g = { revision: h, document: f, publishedAt: (t.now?.() ?? /* @__PURE__ */ new Date()).toISOString() };
1146
+ return m !== void 0 && (g.restoredFrom = m), l({ id: a.id, revision: h, publishedRevision: h, published: f }, d, g);
962
1147
  };
963
1148
  return {
964
- list: async (l) => {
965
- S(l);
966
- const a = await e.list(l);
967
- return S(l), I(a);
1149
+ list: async (a) => {
1150
+ T(a);
1151
+ const c = await e.list(a);
1152
+ return T(a), I(c);
968
1153
  },
969
- get: async (l, a = {}) => {
970
- const s = await n(l, a.signal), c = a.draft ? s?.draft : s?.published;
971
- return c ? G(c) : void 0;
1154
+ get: async (a, c = {}) => {
1155
+ const d = await i(a, c.signal), m = c.draft ? d?.draft : d?.published, h = m ? await r(m) : void 0;
1156
+ return T(c.signal), h;
972
1157
  },
973
- history: async (l, a) => {
974
- S(a);
975
- const s = await e.history(l, a);
976
- return S(a), I(s);
1158
+ history: async (a, c) => {
1159
+ T(c);
1160
+ const d = await e.history(a, c);
1161
+ return T(c), I(d);
977
1162
  },
978
- saveDraft: async (l, a) => {
979
- a = { ...a }, S(a.signal);
980
- const s = G(t.migrate ? await t.migrate(l) : l), c = await r(s.id, a), d = Ee(c);
981
- return i({
982
- id: s.id,
983
- revision: d,
984
- draft: { ...s, revision: d },
985
- ...c?.publishedRevision ? { publishedRevision: c.publishedRevision, published: c.published } : {}
986
- }, a);
1163
+ saveDraft: async (a, c) => {
1164
+ c = { ...c }, T(c.signal);
1165
+ const d = await r(t.migrate ? await t.migrate(a) : a), m = await o(d.id, c), h = _e(m);
1166
+ return l({
1167
+ id: d.id,
1168
+ revision: h,
1169
+ draft: { ...d, revision: h },
1170
+ ...m?.publishedRevision ? { publishedRevision: m.publishedRevision, published: m.published } : {}
1171
+ }, c);
987
1172
  },
988
- publish: async (l, a) => {
989
- a = { ...a };
990
- const s = await r(l, a);
991
- if (!s) throw new D("missing", "模板不存在");
992
- if (!s.draft) throw new D("draft", "没有可发布的草稿");
993
- return o(s, s.draft, a);
1173
+ publish: async (a, c) => {
1174
+ c = { ...c };
1175
+ const d = await o(a, c);
1176
+ if (!d) throw new j("missing", "模板不存在");
1177
+ if (!d.draft) throw new j("draft", "没有可发布的草稿");
1178
+ return s(d, await r(d.draft), c);
994
1179
  },
995
- rollback: async (l, a, s) => {
996
- s = { ...s };
997
- const c = await r(l, s);
998
- if (!c) throw new D("missing", "模板不存在");
999
- S(s.signal);
1000
- const d = await e.getVersion(l, a, s.signal);
1001
- if (!d) throw new D("history", "历史修订不存在");
1002
- return o(c, d.document, s, a);
1180
+ rollback: async (a, c, d) => {
1181
+ d = { ...d };
1182
+ const m = await o(a, d);
1183
+ if (!m) throw new j("missing", "模板不存在");
1184
+ T(d.signal);
1185
+ const h = await e.getVersion(a, c, d.signal);
1186
+ if (!h) throw new j("history", "历史修订不存在");
1187
+ return s(m, await r(h.document), d, c);
1003
1188
  }
1004
1189
  };
1005
1190
  }
1006
- function Un() {
1191
+ function Ar() {
1007
1192
  const e = /* @__PURE__ */ new Map(), t = /* @__PURE__ */ new Map();
1008
1193
  return {
1009
1194
  read: async (n, r) => {
1010
- S(r);
1195
+ T(r);
1011
1196
  const i = e.get(n);
1012
1197
  return i ? I(i) : void 0;
1013
1198
  },
1014
- list: async (n) => (S(n), Array.from(e.values(), ({ id: r, revision: i, publishedRevision: o }) => ({ id: r, revision: i, ...o ? { publishedRevision: o } : {} }))),
1015
- history: async (n, r) => (S(r), Array.from(t.get(n)?.values() ?? [], (i) => I(i))),
1199
+ list: async (n) => (T(n), Array.from(e.values(), ({ id: r, revision: i, publishedRevision: o }) => ({ id: r, revision: i, ...o ? { publishedRevision: o } : {} }))),
1200
+ history: async (n, r) => (T(r), Array.from(t.get(n)?.values() ?? [], (i) => I(i))),
1016
1201
  getVersion: async (n, r, i) => {
1017
- S(i);
1202
+ T(i);
1018
1203
  const o = t.get(n)?.get(r);
1019
1204
  return o ? I(o) : void 0;
1020
1205
  },
1021
1206
  compareAndSwap: async (n, r, i, o) => {
1022
- if (S(o.signal), (e.get(n)?.revision ?? null) !== r) return !1;
1023
- if (i.id !== n) throw new D("history", "状态 ID 与存储 ID 不一致");
1024
- const l = I(i), a = o.publication;
1025
- if (a) {
1026
- const s = t.get(n) ?? /* @__PURE__ */ new Map();
1027
- if (s.has(a.revision) || a.revision !== i.revision || a.document.id !== n) throw new D("history", "发布修订不可覆盖,且必须与状态修订和模板 ID 一致");
1028
- s.set(a.revision, I(a)), t.set(n, s);
1207
+ if (T(o.signal), (e.get(n)?.revision ?? null) !== r) return !1;
1208
+ if (i.id !== n) throw new j("history", "状态 ID 与存储 ID 不一致");
1209
+ const l = I(i), s = o.publication;
1210
+ if (s) {
1211
+ const a = t.get(n) ?? /* @__PURE__ */ new Map();
1212
+ if (a.has(s.revision) || s.revision !== i.revision || s.document.id !== n) throw new j("history", "发布修订不可覆盖,且必须与状态修订和模板 ID 一致");
1213
+ a.set(s.revision, I(s)), t.set(n, a);
1029
1214
  }
1030
1215
  return e.set(n, l), !0;
1031
1216
  }
1032
1217
  };
1033
1218
  }
1034
- function Gn(e) {
1219
+ class u extends Error {
1220
+ constructor(t, n, r = "$", i) {
1221
+ super(n), this.code = t, this.path = r, this.extensionId = i, this.name = "ReportComponentExtensionError";
1222
+ }
1223
+ }
1224
+ const vn = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]);
1225
+ function K(e, t = "$", n = { nodes: 0, units: 0 }, r = 0) {
1226
+ if (++n.nodes > 2048 || r > 16) throw new u("binding", "Component extension JSON exceeds its depth/node budget.", t);
1227
+ if (n.units > 64 * 1024) throw new u("binding", "Component extension JSON exceeds 64 Ki UTF-16 units.", t);
1228
+ if (e === null || typeof e == "boolean" || typeof e == "number" && Number.isFinite(e)) return e;
1229
+ if (typeof e == "string") {
1230
+ if (n.units += e.length, n.units > 64 * 1024) throw new u("binding", "Component extension JSON exceeds 64 Ki UTF-16 units.", t);
1231
+ return e;
1232
+ }
1233
+ if (!e || typeof e != "object") throw new u("binding", "Component extension values must be finite JSON data.", t);
1234
+ const i = Object.getPrototypeOf(e);
1235
+ if (Array.isArray(e)) return xn(e, t, n, r);
1236
+ if (i !== Object.prototype && i !== null) throw new u("binding", "Component extension values must be plain JSON objects.", t);
1237
+ return Sn(e, t, n, r);
1238
+ }
1239
+ function Pe(e, t, n) {
1240
+ const r = Object.getOwnPropertyDescriptor(e, t);
1241
+ if (typeof t != "string" || vn.has(t) || !r?.enumerable || r.get || r.set)
1242
+ throw new u("binding", "Component extension JSON contains an unsafe key or accessor.", n);
1243
+ return r.value;
1244
+ }
1245
+ function xn(e, t, n, r) {
1246
+ if (Object.getPrototypeOf(e) !== Array.prototype || e.length > 2048 || Reflect.ownKeys(e).length !== e.length + 1) throw new u("binding", "Component extension arrays must be plain dense JSON arrays.", t);
1247
+ return Object.freeze(Array.from({ length: e.length }, (i, o) => K(Pe(e, String(o), `${t}[${o}]`), `${t}[${o}]`, n, r + 1)));
1248
+ }
1249
+ function Sn(e, t, n, r) {
1250
+ const i = Reflect.ownKeys(e);
1251
+ if (i.length > 2048) throw new u("binding", "Component extension JSON exceeds its node budget.", t);
1252
+ const o = i.map((l) => {
1253
+ const s = `${t}.${String(l)}`, a = Pe(e, l, s);
1254
+ return n.units += String(l).length, [l, K(a, s, n, r + 1)];
1255
+ });
1256
+ return Object.freeze(Object.fromEntries(o));
1257
+ }
1258
+ function Q(e, t) {
1259
+ if (!e || typeof e != "object" || Array.isArray(e)) throw new u("binding", "Expected a component extension object.", t);
1260
+ return e;
1261
+ }
1262
+ function me(e, t, n) {
1263
+ for (const r of Object.keys(e)) if (!t.includes(r)) throw new u("binding", "Unknown component extension property.", `${n}.${r}`);
1264
+ }
1265
+ function be(e, t, n = 160) {
1266
+ if (typeof e != "string" || !e.trim() || e.length > n) throw new u("definition", "Component extension labels must be bounded nonempty strings.", t);
1267
+ }
1268
+ function ut(e, t) {
1269
+ if (typeof e != "string" || !/^[a-z][a-z\d_.-]{0,127}$/i.test(e)) throw new u("definition", "Invalid component extension id.", "$.id");
1270
+ if (typeof t != "string" || t.length > 64 || !/^\d+\.\d+\.\d+(?:-[\da-z.-]+)?(?:\+[\da-z.-]+)?$/i.test(t)) throw new u("definition", "Component extension version must be explicit semantic version text.", "$.version", e);
1271
+ }
1272
+ function Ae(e, t, n) {
1273
+ if (!(e === null && !t.required)) {
1274
+ if (typeof e !== t.type || typeof e == "number" && !Number.isFinite(e)) throw new u("binding", `Expected ${t.type} component property.`, n);
1275
+ if (t.options && !t.options.some((r) => Object.is(r, e))) throw new u("binding", "Component property is outside its declared options.", n);
1276
+ if (typeof e == "number" && (e < (t.min ?? -1 / 0) || e > (t.max ?? 1 / 0))) throw new u("binding", "Component property is outside its declared range.", n);
1277
+ if (typeof e == "string" && e.length > (t.maxLength ?? 64 * 1024)) throw new u("binding", "Component property exceeds maxLength.", n);
1278
+ }
1279
+ }
1280
+ function En(e, t) {
1281
+ const n = Q(e, t);
1282
+ me(n, ["label", "type", "required", "default", "options", "min", "max", "maxLength"], t);
1283
+ const r = n;
1284
+ if (be(r.label, `${t}.label`), !["string", "number", "boolean"].includes(r.type)) throw new u("definition", "Unknown component property type.", t);
1285
+ if (r.required !== void 0 && typeof r.required != "boolean") throw new u("definition", "Component property required must be boolean.", t);
1286
+ Cn(r, t), r.default !== void 0 && Ae(r.default, r, `${t}.default`);
1287
+ }
1288
+ function Cn(e, t) {
1289
+ for (const n of ["min", "max"]) if (e[n] !== void 0 && (e.type !== "number" || !Number.isFinite(e[n]))) throw new u("definition", "Numeric property bounds must be finite numbers.", t);
1290
+ if ((e.min ?? -1 / 0) > (e.max ?? 1 / 0)) throw new u("definition", "Component property min exceeds max.", t);
1291
+ if (e.maxLength !== void 0 && (e.type !== "string" || !Number.isSafeInteger(e.maxLength) || e.maxLength < 0 || e.maxLength > 64 * 1024)) throw new u("definition", "Invalid component property maxLength.", t);
1292
+ if (e.options !== void 0) {
1293
+ if (!Array.isArray(e.options) || !e.options.length || e.options.length > 64) throw new u("definition", "Component property options must contain 1 to 64 values.", t);
1294
+ for (const n of e.options) Ae(n, { ...e, options: void 0 }, `${t}.options`);
1295
+ }
1296
+ }
1297
+ function Tn(e) {
1298
+ const t = Object.getPrototypeOf(e);
1299
+ if (t !== Object.prototype && t !== null) throw new u("definition", "Component extension metadata must be a plain object.");
1300
+ const n = Reflect.ownKeys(e).filter((i) => i !== "load").map((i) => [i, Pe(e, i, `$.${String(i)}`)]), r = K(Object.fromEntries(n));
1301
+ if (me(r, ["id", "version", "kind", "label", "description", "properties"], "$"), ut(r.id, r.version), be(r.label, "$.label"), !["image", "chart", "barcode", "qrcode"].includes(r.kind)) throw new u("definition", "Extension kind must use the existing image-backed output pipeline.", "$.kind");
1302
+ if (r.description !== void 0 && be(r.description, "$.description", 2048), r.properties !== void 0) {
1303
+ const i = Q(r.properties, "$.properties");
1304
+ if (Object.keys(i).length > 64) throw new u("definition", "Component extension supports at most 64 properties.", "$.properties");
1305
+ for (const [o, l] of Object.entries(i)) En(l, `$.properties.${o}`);
1306
+ }
1307
+ return r;
1308
+ }
1309
+ function pt(e, t) {
1310
+ const n = Q(K(t ?? {}), "$.props"), r = {};
1311
+ for (const i of Object.keys(n)) if (!Object.prototype.hasOwnProperty.call(e.properties ?? {}, i)) throw new u("binding", "Unknown component property.", `$.props.${i}`, e.id);
1312
+ for (const [i, o] of Object.entries(e.properties ?? {})) {
1313
+ const l = Object.prototype.hasOwnProperty.call(n, i) ? n[i] : o.default;
1314
+ if (l === void 0) {
1315
+ if (o.required) throw new u("binding", "Required component property is missing.", `$.props.${i}`, e.id);
1316
+ continue;
1317
+ }
1318
+ Ae(l, o, `$.props.${i}`), r[i] = l;
1319
+ }
1320
+ return Object.freeze(r);
1321
+ }
1322
+ const H = "componentExtension";
1323
+ function Rn(e) {
1324
+ const t = Object.getOwnPropertyDescriptor(e, "meta")?.value, n = t && Object.getOwnPropertyDescriptor(t, H);
1325
+ if (n) {
1326
+ if (n.get || n.set) throw new u("binding", "Component extension binding cannot be an accessor.", `$.meta.${H}`);
1327
+ return n.value;
1328
+ }
1329
+ }
1330
+ function $n(e, t) {
1331
+ const n = Q(K(Rn(t)), `$.meta.${H}`);
1332
+ me(n, ["id", "version", "props", "binding"], `$.meta.${H}`), ut(n.id, n.version);
1333
+ const r = e.get(n.id);
1334
+ if (!r) throw new u("binding", "Component extension is not registered in this runtime.", `$.meta.${H}.id`, n.id);
1335
+ if (r.metadata.version !== n.version || r.metadata.kind !== t.kind) throw new u("binding", "Component extension version or image kind does not match its registration.", `$.meta.${H}`, r.metadata.id);
1336
+ const i = Object.freeze({ id: r.metadata.id, version: r.metadata.version, props: pt(r.metadata, n.props), ...n.binding === void 0 ? {} : { binding: n.binding } });
1337
+ return { entry: r, extension: i };
1338
+ }
1339
+ function We(e) {
1340
+ return e.released ??= Promise.resolve().then(() => e.renderer?.dispose?.());
1341
+ }
1342
+ function V(e) {
1343
+ if (e) throw new u("disposed", "Component registry has been disposed.");
1344
+ }
1345
+ function Pn(e) {
1346
+ if (!e || typeof e != "object") throw new u("definition", "Component extension definition must be an object.");
1347
+ if (Object.getPrototypeOf(e) !== Object.prototype && Object.getPrototypeOf(e) !== null) throw new u("definition", "Component extension definition must be a plain object.");
1348
+ const t = Object.getOwnPropertyDescriptor(e, "load");
1349
+ if (!t || t.get || t.set || typeof t.value != "function") throw new u("definition", "Component extension needs a trusted runtime loader.", "$.load");
1350
+ return { metadata: Tn(e), load: t.value };
1351
+ }
1352
+ function An(e, t) {
1353
+ if (!(e && typeof e.render == "function" && (e.dispose === void 0 || typeof e.dispose == "function"))) {
1354
+ if (e && typeof e.dispose == "function")
1355
+ try {
1356
+ Promise.resolve(e.dispose()).catch(() => {
1357
+ });
1358
+ } catch {
1359
+ }
1360
+ throw new u("load", "Component loader must return render and optional dispose methods.", "$.load", t);
1361
+ }
1362
+ }
1363
+ function kn(e, t) {
1364
+ const n = new AbortController(), r = () => n.abort(e.reason), i = () => n.abort(t.reason);
1365
+ return e.aborted ? r() : e.addEventListener("abort", r, { once: !0 }), t.aborted ? i() : t.addEventListener("abort", i, { once: !0 }), { signal: n.signal, dispose() {
1366
+ e.removeEventListener("abort", r), t.removeEventListener("abort", i);
1367
+ } };
1368
+ }
1369
+ function kr(e) {
1370
+ if (!Array.isArray(e) || e.length > 128) throw new u("definition", "Register at most 128 component extensions.");
1371
+ const t = /* @__PURE__ */ new Map(), n = new AbortController();
1372
+ let r = !1, i;
1373
+ for (const a of e) {
1374
+ const c = Pn(a), d = c.metadata.id;
1375
+ if (t.has(d)) throw new u("definition", "Component extension id is already registered.", "$.id", d);
1376
+ t.set(d, c);
1377
+ }
1378
+ function o(a) {
1379
+ return V(r), a.pending || (a.pending = Promise.resolve().then(() => (V(r), a.load(n.signal))).then(async (c) => (An(c, a.metadata.id), a.renderer = c, r && (await We(a), V(r)), c)).catch((c) => {
1380
+ throw a.pending = void 0, c instanceof u ? c : Object.assign(new u("load", "Component extension loader failed.", "$.load", a.metadata.id), { cause: c });
1381
+ })), a.pending;
1382
+ }
1383
+ const l = async (a) => {
1384
+ V(r);
1385
+ const { entry: c, extension: d } = $n(t, a.component), m = kn(a.signal, n.signal);
1386
+ try {
1387
+ const h = await Le(o(c), m.signal);
1388
+ return await Le(h.render({ ...a, signal: m.signal, extension: d }), m.signal);
1389
+ } finally {
1390
+ m.dispose();
1391
+ }
1392
+ }, s = {
1393
+ assets: Object.freeze({ get assetRegistry() {
1394
+ return s;
1395
+ } }),
1396
+ describe(a) {
1397
+ return V(r), Object.freeze([...t.values()].map((c) => c.metadata).filter((c) => !a || c.kind === a));
1398
+ },
1399
+ hasExtension(a, c, d) {
1400
+ const m = t.get(a)?.metadata;
1401
+ return !r && m?.version === c && m.kind === d;
1402
+ },
1403
+ rendererFor(a) {
1404
+ const c = Object.getOwnPropertyDescriptor(a, "meta")?.value;
1405
+ return c && Object.prototype.hasOwnProperty.call(c, H) ? l : void 0;
1406
+ },
1407
+ createComponent(a, c = {}) {
1408
+ V(r);
1409
+ const d = t.get(a);
1410
+ if (!d) throw new u("binding", "Component extension is not registered in this runtime.", "$.id", a);
1411
+ const m = Q(K(c), "$");
1412
+ me(m, ["props", "binding"], "$");
1413
+ const h = { id: a, version: d.metadata.version, props: pt(d.metadata, m.props), ...m.binding === void 0 ? {} : { binding: m.binding } };
1414
+ return { kind: d.metadata.kind, meta: { [H]: Object.freeze(h) } };
1415
+ },
1416
+ dispose() {
1417
+ return i || (r = !0, n.abort(new u("disposed", "Component registry has been disposed.")), i = Promise.allSettled([...t.values()].filter((a) => a.renderer).map(We)).then((a) => {
1418
+ const c = a.find((d) => d.status === "rejected");
1419
+ if (c?.status === "rejected") throw c.reason;
1420
+ }), i);
1421
+ }
1422
+ };
1423
+ return s;
1424
+ }
1425
+ function Or(e) {
1035
1426
  return e.map((t) => t.map((n) => /[\t\r\n"]/.test(n) ? `"${n.replace(/"/g, '""')}"` : n).join(" ")).join(`\r
1036
1427
  `);
1037
1428
  }
1038
- function Ut(e, t) {
1429
+ function On(e, t) {
1039
1430
  const n = e[e.length - 1];
1040
1431
  e.length > 1 && n?.length === 1 && n[0] === "" && /[\r\n]$/.test(t) && e.pop();
1041
1432
  }
1042
- function qn(e, t = 1e4) {
1433
+ function Ir(e, t = 1e4) {
1043
1434
  if (e.length > 4 * 1024 * 1024) throw new Error("Clipboard text limit exceeded");
1044
1435
  const n = [[]];
1045
1436
  let r = "", i = !1, o = !1, l = 0;
1046
- function a() {
1437
+ function s() {
1047
1438
  if (++l > t) throw new Error("Clipboard cell limit exceeded");
1048
1439
  n[n.length - 1].push(r), r = "", o = !1;
1049
1440
  }
1050
- for (let s = 0; s < e.length; s++) {
1051
- const c = e[s];
1441
+ for (let a = 0; a < e.length; a++) {
1442
+ const c = e[a];
1052
1443
  if (i) {
1053
1444
  if (c !== '"') {
1054
1445
  r += c;
1055
1446
  continue;
1056
1447
  }
1057
- if (e[s + 1] === '"') {
1058
- r += '"', s++;
1448
+ if (e[a + 1] === '"') {
1449
+ r += '"', a++;
1059
1450
  continue;
1060
1451
  }
1061
1452
  i = !1, o = !0;
@@ -1066,22 +1457,22 @@ function qn(e, t = 1e4) {
1066
1457
  continue;
1067
1458
  }
1068
1459
  if (c === " ") {
1069
- a();
1460
+ s();
1070
1461
  continue;
1071
1462
  }
1072
1463
  if (c === "\r" || c === `
1073
1464
  `) {
1074
- a(), n.push([]), c === "\r" && e[s + 1] === `
1075
- ` && s++;
1465
+ s(), n.push([]), c === "\r" && e[a + 1] === `
1466
+ ` && a++;
1076
1467
  continue;
1077
1468
  }
1078
1469
  if (o) throw new Error("Invalid quoted clipboard value");
1079
1470
  r += c;
1080
1471
  }
1081
1472
  if (i) throw new Error("Unclosed clipboard quote");
1082
- return a(), Ut(n, e), n;
1473
+ return s(), On(n, e), n;
1083
1474
  }
1084
- class Gt extends Error {
1475
+ class In extends Error {
1085
1476
  constructor(t, n, r) {
1086
1477
  const i = typeof n.label == "string" ? n.label : "单元格", o = {
1087
1478
  definition: `${i}的编辑器配置无效`,
@@ -1097,457 +1488,463 @@ class Gt extends Error {
1097
1488
  super(o[t]), this.code = t, this.field = n, this.expected = r, this.name = "ReportCellFieldError";
1098
1489
  }
1099
1490
  }
1100
- function p(e, t, n) {
1101
- throw new Gt(t, e, n);
1491
+ function b(e, t, n) {
1492
+ throw new In(t, e, n);
1102
1493
  }
1103
- function Ve(e) {
1494
+ function wt(e) {
1104
1495
  if (typeof e != "string" || !/^\d{4}-\d{2}-\d{2}$/.test(e) || e.startsWith("0000-")) return !1;
1105
1496
  const t = /* @__PURE__ */ new Date(`${e}T00:00:00.000Z`);
1106
1497
  return Number.isFinite(t.getTime()) && t.toISOString().slice(0, 10) === e;
1107
1498
  }
1108
- function qt(e) {
1499
+ function Nn(e) {
1109
1500
  const [t = "", n = "0"] = String(e).toLowerCase().split("e");
1110
1501
  return Math.max(0, (t.split(".")[1]?.length ?? 0) - Number(n));
1111
1502
  }
1112
- function Vt(e, t) {
1113
- e.min !== void 0 && t < e.min && p(e, "min", e.min), e.max !== void 0 && t > e.max && p(e, "max", e.max), e.precision !== void 0 && qt(t) > e.precision && p(e, "precision", e.precision);
1503
+ function Ln(e, t) {
1504
+ e.min !== void 0 && t < e.min && b(e, "min", e.min), e.max !== void 0 && t > e.max && b(e, "max", e.max), e.precision !== void 0 && Nn(t) > e.precision && b(e, "precision", e.precision);
1114
1505
  }
1115
- function Yt(e, t) {
1116
- Ve(t) || p(e, "date"), e.min !== void 0 && t < e.min && p(e, "min", e.min), e.max !== void 0 && t > e.max && p(e, "max", e.max);
1506
+ function Dn(e, t) {
1507
+ wt(t) || b(e, "date"), e.min !== void 0 && t < e.min && b(e, "min", e.min), e.max !== void 0 && t > e.max && b(e, "max", e.max);
1117
1508
  }
1118
- function Kt(e) {
1119
- [e.min, e.max].some((t) => t !== void 0 && !Number.isFinite(t)) && p(e, "definition"), e.min !== void 0 && e.max !== void 0 && e.min > e.max && p(e, "definition"), e.precision !== void 0 && (!Number.isInteger(e.precision) || e.precision < 0 || e.precision > 15) && p(e, "definition");
1509
+ function jn(e) {
1510
+ [e.min, e.max].some((t) => t !== void 0 && !Number.isFinite(t)) && b(e, "definition"), e.min !== void 0 && e.max !== void 0 && e.min > e.max && b(e, "definition"), e.precision !== void 0 && (!Number.isInteger(e.precision) || e.precision < 0 || e.precision > 15) && b(e, "definition");
1120
1511
  }
1121
- function Jt(e) {
1122
- [e.min, e.max].some((t) => t !== void 0 && !Ve(t)) && p(e, "definition"), e.min !== void 0 && e.max !== void 0 && e.min > e.max && p(e, "definition");
1512
+ function Fn(e) {
1513
+ [e.min, e.max].some((t) => t !== void 0 && !wt(t)) && b(e, "definition"), e.min !== void 0 && e.max !== void 0 && e.min > e.max && b(e, "definition");
1123
1514
  }
1124
- function Xt(e, t) {
1125
- (!Array.isArray(t.options) || !t.options.length) && p(t, "definition");
1515
+ function zn(e, t) {
1516
+ (!Array.isArray(t.options) || !t.options.length) && b(t, "definition");
1126
1517
  const n = e.valueType === "text" ? "string" : e.valueType, r = /* @__PURE__ */ new Set();
1127
1518
  for (const i of t.options)
1128
- (!i || typeof i.value !== n || typeof i.value == "number" && !Number.isFinite(i.value)) && p(t, "definition"), i.label !== void 0 && typeof i.label != "string" && p(t, "definition"), r.has(i.value) && p(t, "definition"), r.add(i.value);
1519
+ (!i || typeof i.value !== n || typeof i.value == "number" && !Number.isFinite(i.value)) && b(t, "definition"), i.label !== void 0 && typeof i.label != "string" && b(t, "definition"), r.has(i.value) && b(t, "definition"), r.add(i.value);
1129
1520
  }
1130
- function Zt(e) {
1131
- e.required !== void 0 && typeof e.required != "boolean" && p(e, "definition"), [e.label, e.hint, e.unit].some((t) => t !== void 0 && typeof t != "string") && p(e, "definition"), e.type === "boolean" && [e.trueLabel, e.falseLabel].some((t) => t !== void 0 && typeof t != "string") && p(e, "definition");
1521
+ function Hn(e) {
1522
+ e.required !== void 0 && typeof e.required != "boolean" && b(e, "definition"), [e.label, e.hint, e.unit].some((t) => t !== void 0 && typeof t != "string") && b(e, "definition"), e.type === "boolean" && [e.trueLabel, e.falseLabel].some((t) => t !== void 0 && typeof t != "string") && b(e, "definition");
1132
1523
  }
1133
- function Qt(e, t) {
1134
- (!t || typeof t != "object" || Array.isArray(t) || !["text", "number", "boolean", "enum", "date"].includes(t.type)) && p(t ?? { type: "text" }, "definition"), Zt(t), (t.type === "number" || t.type === "boolean") && e.valueType !== t.type && p(t, "type"), (t.type === "text" || t.type === "date") && e.valueType !== "text" && p(t, "type"), t.type === "number" && Kt(t), t.type === "text" && t.maxLength !== void 0 && (!Number.isInteger(t.maxLength) || t.maxLength < 0) && p(t, "definition"), t.type === "date" && Jt(t), t.type === "enum" && Xt(e, t);
1524
+ function Bn(e, t) {
1525
+ (!t || typeof t != "object" || Array.isArray(t) || !["text", "number", "boolean", "enum", "date"].includes(t.type)) && b(t ?? { type: "text" }, "definition"), Hn(t), (t.type === "number" || t.type === "boolean") && e.valueType !== t.type && b(t, "type"), (t.type === "text" || t.type === "date") && e.valueType !== "text" && b(t, "type"), t.type === "number" && jn(t), t.type === "text" && t.maxLength !== void 0 && (!Number.isInteger(t.maxLength) || t.maxLength < 0) && b(t, "definition"), t.type === "date" && Fn(t), t.type === "enum" && zn(e, t);
1135
1526
  }
1136
- function Vn(e, t, n) {
1137
- if (!e.editable) throw new nt("readonly");
1138
- n && Qt(e, n);
1139
- const r = rt(e, t);
1140
- return n ? (n.required && typeof r == "string" && !r.trim() && p(n, "required"), r === null || r === "" ? (n.required && p(n, "required"), r) : (n.type === "number" && Vt(n, r), n.type === "date" && Yt(n, r), n.type === "text" && n.maxLength !== void 0 && [...String(r)].length > n.maxLength && p(n, "length", n.maxLength), n.type === "enum" && !n.options.some((i) => Object.is(i.value, r)) && p(n, "choice"), r)) : r;
1527
+ function Nr(e, t, n) {
1528
+ if (!e.editable) throw new Tt("readonly");
1529
+ n && Bn(e, n);
1530
+ const r = Rt(e, t);
1531
+ return n ? (n.required && typeof r == "string" && !r.trim() && b(n, "required"), r === null || r === "" ? (n.required && b(n, "required"), r) : (n.type === "number" && Ln(n, r), n.type === "date" && Dn(n, r), n.type === "text" && n.maxLength !== void 0 && [...String(r)].length > n.maxLength && b(n, "length", n.maxLength), n.type === "enum" && !n.options.some((i) => Object.is(i.value, r)) && b(n, "choice"), r)) : r;
1141
1532
  }
1142
- class w extends Error {
1533
+ class M extends Error {
1143
1534
  constructor(t) {
1144
1535
  super(`Report calculation: ${t}`), this.code = t, this.name = "ReportCalculationError";
1145
1536
  }
1146
1537
  }
1147
- function j(e) {
1538
+ function G(e) {
1148
1539
  if (!e?.aborted) return;
1149
1540
  const t = new Error("Calculation cancelled");
1150
1541
  throw t.name = "AbortError", t;
1151
1542
  }
1152
- async function te(e, t = 1) {
1543
+ async function se(e, t = 1) {
1153
1544
  const n = Math.floor(e.scanned / 2048);
1154
- if (e.scanned += t, e.scanned > e.maxScanned) throw new w("limit");
1155
- j(e.signal), Math.floor(e.scanned / 2048) > n && (await e.yieldToHost(), j(e.signal));
1545
+ if (e.scanned += t, e.scanned > e.maxScanned) throw new M("limit");
1546
+ G(e.signal), Math.floor(e.scanned / 2048) > n && (await e.yieldToHost(), G(e.signal));
1156
1547
  }
1157
- function we(e) {
1548
+ function ke(e) {
1158
1549
  return e.table?.role === "header" ? -Math.max(1, e.grid?.cells.length ?? 1) : e.table?.rowIndex ?? 0;
1159
1550
  }
1160
- function Te(e, t, n) {
1161
- if (![t.pageIndex, t.componentIndex, t.rowIndex, t.columnIndex].every((a) => Number.isSafeInteger(a) && a >= 0)) throw new w("selection");
1551
+ function Ve(e, t, n) {
1552
+ if (![t.pageIndex, t.componentIndex, t.rowIndex, t.columnIndex].every((s) => Number.isSafeInteger(s) && s >= 0)) throw new M("selection");
1162
1553
  const r = e.pages[t.pageIndex]?.components[t.componentIndex];
1163
- if (!r?.grid || t.rowIndex >= r.grid.cells.length) throw new w("selection");
1164
- const i = r.grid.colWidthsMm?.length ?? r.grid.cells.reduce((a, s) => Math.max(a, s.length), 1);
1165
- if (t.columnIndex >= i) throw new w("selection");
1554
+ if (!r?.grid || t.rowIndex >= r.grid.cells.length) throw new M("selection");
1555
+ const i = r.grid.colWidthsMm?.length ?? r.grid.cells.reduce((s, a) => Math.max(s, a.length), 1);
1556
+ if (t.columnIndex >= i) throw new M("selection");
1166
1557
  const o = r.table, l = e.pages[n.pageIndex]?.components[n.componentIndex]?.table;
1167
1558
  if (o && l && o.id === l.id) {
1168
- const a = l.columnKeys.indexOf(o.columnKeys[t.columnIndex] ?? "");
1169
- if (a < 0) throw new w("selection");
1170
- return { grid: o.id, row: we(r) + t.rowIndex, column: a };
1559
+ const s = l.columnKeys.indexOf(o.columnKeys[t.columnIndex] ?? "");
1560
+ if (s < 0) throw new M("selection");
1561
+ return { grid: o.id, row: ke(r) + t.rowIndex, column: s };
1171
1562
  }
1172
1563
  return { grid: `${t.pageIndex}:${t.componentIndex}`, row: t.rowIndex, column: t.columnIndex };
1173
1564
  }
1174
- function en(e, t, n) {
1175
- const r = Te(e, t.anchor, t.anchor), i = Te(e, t.focus, t.anchor);
1176
- if (r.grid !== i.grid) throw new w("selection");
1565
+ function _n(e, t, n) {
1566
+ const r = Ve(e, t.anchor, t.anchor), i = Ve(e, t.focus, t.anchor);
1567
+ if (r.grid !== i.grid) throw new M("selection");
1177
1568
  const o = (Math.abs(r.row - i.row) + 1) * (Math.abs(r.column - i.column) + 1);
1178
- if (!Number.isSafeInteger(o) || o > n) throw new w("limit");
1569
+ if (!Number.isSafeInteger(o) || o > n) throw new M("limit");
1179
1570
  return { grid: r.grid, rowStart: Math.min(r.row, i.row), rowEnd: Math.max(r.row, i.row), columnStart: Math.min(r.column, i.column), columnEnd: Math.max(r.column, i.column), origin: e.pages[t.anchor.pageIndex].components[t.anchor.componentIndex].table };
1180
1571
  }
1181
- function tn(e) {
1572
+ function Wn(e) {
1182
1573
  if (!e) return !1;
1183
1574
  const t = e.replace(/"[^"]*"|\\.|\[(?![hms]+\])[^\]]*\]/gi, "");
1184
1575
  return /[ymdhs]/i.test(t);
1185
1576
  }
1186
- function nn(e) {
1187
- if (e.valueType === "text" || e.valueType === "boolean" || tn(e.numberFormat)) return null;
1577
+ function Vn(e) {
1578
+ if (e.valueType === "text" || e.valueType === "boolean" || Wn(e.numberFormat)) return null;
1188
1579
  const t = e.value;
1189
1580
  if (typeof t != "number" || !Number.isFinite(t)) return null;
1190
- if (Number.isInteger(t) && !Number.isSafeInteger(t)) throw new w("precision");
1581
+ if (Number.isInteger(t) && !Number.isSafeInteger(t)) throw new M("precision");
1191
1582
  return t;
1192
1583
  }
1193
- function rn(e, t, n) {
1584
+ function Un(e, t, n) {
1194
1585
  if (e.seen.has(n)) return;
1195
1586
  e.seen.add(n), e.selected++;
1196
- const r = t ? nn(t) : null;
1587
+ const r = t ? Vn(t) : null;
1197
1588
  r === null ? e.excluded++ : e.values.push(r);
1198
1589
  }
1199
- function an(e, t, n, r) {
1590
+ function qn(e, t, n, r) {
1200
1591
  return r.origin ? e.table?.id === r.origin.id : `${t}:${n}` === r.grid;
1201
1592
  }
1202
- function on(e, t, n) {
1593
+ function Gn(e, t, n) {
1203
1594
  return n.origin ? n.origin.columnKeys.indexOf(e.table.columnKeys[t] ?? "") : t;
1204
1595
  }
1205
- function sn(e, t, n, r) {
1206
- const i = r.origin ? we(e) + t : t, o = on(e, n, r);
1596
+ function Jn(e, t, n, r) {
1597
+ const i = r.origin ? ke(e) + t : t, o = Gn(e, n, r);
1207
1598
  return i < r.rowStart || i > r.rowEnd || o < r.columnStart || o > r.columnEnd ? null : `${r.grid}:${i}:${o}`;
1208
1599
  }
1209
- function ln(e, t) {
1210
- const n = t.origin ? we(e) : 0, r = Math.max(0, t.rowStart - n), i = Math.min(e.grid.cells.length, t.rowEnd - n + 1);
1600
+ function Kn(e, t) {
1601
+ const n = t.origin ? ke(e) : 0, r = Math.max(0, t.rowStart - n), i = Math.min(e.grid.cells.length, t.rowEnd - n + 1);
1211
1602
  return i > r ? i : 0;
1212
1603
  }
1213
- async function cn(e, t, n, r, i) {
1604
+ async function Yn(e, t, n, r, i) {
1214
1605
  const o = e.grid;
1215
- if (t > r.maxScanned) throw new w("limit");
1216
- const l = o.colWidthsMm?.length ?? o.cells.reduce((s, c) => Math.max(s, c.length), 1);
1217
- if (l > r.maxScanned) throw new w("limit");
1218
- const a = /* @__PURE__ */ new Map();
1219
- for (let s = 0; s < t; s++) {
1220
- s > 0 && s % 2048 === 0 && (await r.yieldToHost(), j(r.signal));
1606
+ if (t > r.maxScanned) throw new M("limit");
1607
+ const l = o.colWidthsMm?.length ?? o.cells.reduce((a, c) => Math.max(a, c.length), 1);
1608
+ if (l > r.maxScanned) throw new M("limit");
1609
+ const s = /* @__PURE__ */ new Map();
1610
+ for (let a = 0; a < t; a++) {
1611
+ a > 0 && a % 2048 === 0 && (await r.yieldToHost(), G(r.signal));
1221
1612
  let c = 0;
1222
- for (const d of o.cells[s]) {
1223
- for (await te(r); c < l && (a.get(c) ?? 0) > s; ) c++;
1613
+ for (const d of o.cells[a]) {
1614
+ for (await se(r); c < l && (s.get(c) ?? 0) > a; ) c++;
1224
1615
  if (c >= l) break;
1225
- const h = Math.max(1, Math.min(d?.colSpan ?? 1, l - c)), m = Math.min(o.cells.length, s + Math.max(1, d?.rowSpan ?? 1));
1226
- h > 1 && await te(r, h - 1);
1227
- for (let f = c; f < c + h; f++) a.set(f, m);
1228
- const g = sn(e, s, c, n);
1229
- g && rn(i, d, g), c += h;
1616
+ const m = Math.max(1, Math.min(d?.colSpan ?? 1, l - c)), h = Math.min(o.cells.length, a + Math.max(1, d?.rowSpan ?? 1));
1617
+ m > 1 && await se(r, m - 1);
1618
+ for (let g = c; g < c + m; g++) s.set(g, h);
1619
+ const f = Jn(e, a, c, n);
1620
+ f && Un(i, d, f), c += m;
1230
1621
  }
1231
1622
  }
1232
1623
  }
1233
- async function dn(e, t, n) {
1624
+ async function Xn(e, t, n) {
1234
1625
  const r = { values: [], seen: /* @__PURE__ */ new Set(), excluded: 0, selected: 0 };
1235
1626
  for (let i = 0; i < e.pages.length; i++) {
1236
- await te(n);
1627
+ await se(n);
1237
1628
  const o = e.pages[i];
1238
1629
  for (let l = 0; l < o.components.length; l++) {
1239
- await te(n);
1240
- const a = o.components[l];
1241
- if (!a.grid || !an(a, i, l, t) || a.table && a.table.role !== "body") continue;
1242
- const s = ln(a, t);
1243
- s && await cn(a, s, t, n, r);
1630
+ await se(n);
1631
+ const s = o.components[l];
1632
+ if (!s.grid || !qn(s, i, l, t) || s.table && s.table.role !== "body") continue;
1633
+ const a = Kn(s, t);
1634
+ a && await Yn(s, a, t, n, r);
1244
1635
  }
1245
1636
  }
1246
1637
  return r;
1247
1638
  }
1248
- function V(e) {
1249
- if (!Number.isFinite(e)) throw new w("overflow");
1639
+ function X(e) {
1640
+ if (!Number.isFinite(e)) throw new M("overflow");
1250
1641
  return e;
1251
1642
  }
1252
- function mn(e) {
1643
+ function Zn(e) {
1253
1644
  let t = 0, n = 0;
1254
1645
  for (const r of e) {
1255
- const i = r - n, o = V(t + i);
1646
+ const i = r - n, o = X(t + i);
1256
1647
  n = o - t - i, t = o;
1257
1648
  }
1258
1649
  return t;
1259
1650
  }
1260
- async function Ce(e, t) {
1651
+ async function Ue(e, t) {
1261
1652
  let n = [...e], r = new Array(e.length);
1262
1653
  for (let o = 1; o < e.length; o *= 2) {
1263
1654
  for (let l = 0; l < e.length; l += o * 2) {
1264
- const a = Math.min(l + o, e.length), s = Math.min(l + o * 2, e.length);
1265
- let c = l, d = a;
1266
- for (let h = l; h < s; h++)
1267
- r[h] = d >= s || c < a && n[c] <= n[d] ? n[c++] : n[d++], h % 2048 === 0 && (await t.yieldToHost(), j(t.signal));
1655
+ const s = Math.min(l + o, e.length), a = Math.min(l + o * 2, e.length);
1656
+ let c = l, d = s;
1657
+ for (let m = l; m < a; m++)
1658
+ r[m] = d >= a || c < s && n[c] <= n[d] ? n[c++] : n[d++], m % 2048 === 0 && (await t.yieldToHost(), G(t.signal));
1268
1659
  }
1269
1660
  [n, r] = [r, n];
1270
1661
  }
1271
1662
  const i = Math.floor(n.length / 2);
1272
- return n.length % 2 ? n[i] : V(n[i - 1] / 2 + n[i] / 2);
1663
+ return n.length % 2 ? n[i] : X(n[i - 1] / 2 + n[i] / 2);
1273
1664
  }
1274
- function hn(e) {
1275
- const t = mn(e);
1665
+ function Qn(e) {
1666
+ const t = Zn(e);
1276
1667
  let n = 1 / 0, r = -1 / 0;
1277
1668
  for (const i of e)
1278
1669
  n = Math.min(n, i), r = Math.max(r, i);
1279
1670
  return { SUM: t, AVERAGE: t / e.length, AVG: t / e.length, MIN: n, MAX: r, COUNT: e.length };
1280
1671
  }
1281
- function gn(e, t) {
1282
- if (typeof e != "string" || e.length > 256) throw new w("expression");
1672
+ function er(e, t) {
1673
+ if (typeof e != "string" || e.length > 256) throw new M("expression");
1283
1674
  const n = e.toUpperCase().match(/(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?|[A-Z_]+|[()+\-*/]|\S/g) ?? [];
1284
- if (!n.length || n.length > 64) throw new w("expression");
1675
+ if (!n.length || n.length > 64) throw new M("expression");
1285
1676
  let r = 0;
1286
- function i(a) {
1287
- if (a > 16) throw new w("expression");
1288
- const s = n[r++];
1289
- if (s === "+" || s === "-") return (s === "-" ? -1 : 1) * i(a + 1);
1290
- if (s === "(") {
1291
- const c = o(0, a + 1);
1292
- if (n[r++] !== ")") throw new w("expression");
1677
+ function i(s) {
1678
+ if (s > 16) throw new M("expression");
1679
+ const a = n[r++];
1680
+ if (a === "+" || a === "-") return (a === "-" ? -1 : 1) * i(s + 1);
1681
+ if (a === "(") {
1682
+ const c = o(0, s + 1);
1683
+ if (n[r++] !== ")") throw new M("expression");
1293
1684
  return c;
1294
1685
  }
1295
- if (s && /^(?:SUM|AVERAGE|AVG|MIN|MAX|COUNT|MEDIAN)$/.test(s) && Object.prototype.hasOwnProperty.call(t, s)) return V(t[s]);
1296
- if (s && /^(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?$/.test(s)) return V(Number(s));
1297
- throw new w("expression");
1686
+ if (a && /^(?:SUM|AVERAGE|AVG|MIN|MAX|COUNT|MEDIAN)$/.test(a) && Object.prototype.hasOwnProperty.call(t, a)) return X(t[a]);
1687
+ if (a && /^(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?$/.test(a)) return X(Number(a));
1688
+ throw new M("expression");
1298
1689
  }
1299
- function o(a, s) {
1300
- let c = i(s);
1690
+ function o(s, a) {
1691
+ let c = i(a);
1301
1692
  for (; r < n.length; ) {
1302
- const d = n[r], h = d === "+" || d === "-" ? 1 : d === "*" || d === "/" ? 2 : 0;
1303
- if (!h || h < a) break;
1693
+ const d = n[r], m = d === "+" || d === "-" ? 1 : d === "*" || d === "/" ? 2 : 0;
1694
+ if (!m || m < s) break;
1304
1695
  r++;
1305
- const m = o(h + 1, s + 1);
1306
- if (d === "/" && m === 0) throw new w("division");
1307
- c = V(d === "+" ? c + m : d === "-" ? c - m : d === "*" ? c * m : c / m);
1696
+ const h = o(m + 1, a + 1);
1697
+ if (d === "/" && h === 0) throw new M("division");
1698
+ c = X(d === "+" ? c + h : d === "-" ? c - h : d === "*" ? c * h : c / h);
1308
1699
  }
1309
1700
  return c;
1310
1701
  }
1311
1702
  const l = o(1, 0);
1312
- if (r !== n.length) throw new w("expression");
1703
+ if (r !== n.length) throw new M("expression");
1313
1704
  return l;
1314
1705
  }
1315
- function fn(e) {
1706
+ function tr(e) {
1316
1707
  const t = e.maxCells ?? 1e5, n = e.maxScannedCells ?? 2e5, r = e.precision ?? 2;
1317
- if (![t, n].every((i) => Number.isSafeInteger(i) && i >= 1 && i <= 2e6)) throw new w("limit");
1318
- if (!Number.isInteger(r) || r < 0 || r > 12) throw new w("precision");
1708
+ if (![t, n].every((i) => Number.isSafeInteger(i) && i >= 1 && i <= 2e6)) throw new M("limit");
1709
+ if (!Number.isInteger(r) || r < 0 || r > 12) throw new M("precision");
1319
1710
  return { maxCells: t, maxScanned: n, precision: r };
1320
1711
  }
1321
- async function Yn(e, t, n = {}) {
1322
- const r = fn(n), i = { scanned: 0, maxScanned: r.maxScanned, signal: n.signal, yieldToHost: n.yieldToHost ?? (() => new Promise((s) => setTimeout(s, 0))) };
1323
- j(i.signal);
1324
- const o = await dn(e, en(e, t, r.maxCells), i), l = n.operation ?? "sum";
1325
- if (!["sum", "average", "min", "max", "count", "median", "expression"].includes(l)) throw new w("expression");
1326
- let a = null;
1327
- if (l === "count") a = o.values.length;
1712
+ async function Lr(e, t, n = {}) {
1713
+ const r = tr(n), i = { scanned: 0, maxScanned: r.maxScanned, signal: n.signal, yieldToHost: n.yieldToHost ?? (() => new Promise((a) => setTimeout(a, 0))) };
1714
+ G(i.signal);
1715
+ const o = await Xn(e, _n(e, t, r.maxCells), i), l = n.operation ?? "sum";
1716
+ if (!["sum", "average", "min", "max", "count", "median", "expression"].includes(l)) throw new M("expression");
1717
+ let s = null;
1718
+ if (l === "count") s = o.values.length;
1328
1719
  else if (o.values.length)
1329
- if (l === "median") a = await Ce(o.values, i);
1720
+ if (l === "median") s = await Ue(o.values, i);
1330
1721
  else {
1331
- const s = hn(o.values);
1332
- l === "expression" ? (/\bMEDIAN\b/i.test(n.expression ?? "") && (s.MEDIAN = await Ce(o.values, i)), a = gn(n.expression ?? "", s)) : a = s[l.toUpperCase()];
1722
+ const a = Qn(o.values);
1723
+ l === "expression" ? (/\bMEDIAN\b/i.test(n.expression ?? "") && (a.MEDIAN = await Ue(o.values, i)), s = er(n.expression ?? "", a)) : s = a[l.toUpperCase()];
1333
1724
  }
1334
- if (j(i.signal), a !== null && Number.isInteger(a) && !Number.isSafeInteger(a)) throw new w("precision");
1335
- return { value: a, formatted: a === null ? "—" : a.toFixed(r.precision), numericCells: o.values.length, excludedCells: o.excluded, selectedCells: o.selected, precision: r.precision };
1725
+ if (G(i.signal), s !== null && Number.isInteger(s) && !Number.isSafeInteger(s)) throw new M("precision");
1726
+ return { value: s, formatted: s === null ? "—" : s.toFixed(r.precision), numericCells: o.values.length, excludedCells: o.excluded, selectedCells: o.selected, precision: r.precision };
1336
1727
  }
1337
1728
  class A extends Error {
1338
1729
  constructor(t, n) {
1339
1730
  super(t), this.path = n, this.code = "label-sheet", this.name = "LabelSheetError";
1340
1731
  }
1341
1732
  }
1342
- function Z(e) {
1733
+ function ie(e) {
1343
1734
  if (e?.aborted) {
1344
1735
  const t = new Error("标签拼版已取消");
1345
1736
  throw t.name = "AbortError", t;
1346
1737
  }
1347
1738
  }
1348
- function O(e, t, n = !1) {
1739
+ function B(e, t, n = !1) {
1349
1740
  if (!Number.isFinite(e) || e <= 0 || n && !Number.isSafeInteger(e)) throw new A("应为正有限数字,数量应为安全整数", t);
1350
1741
  return e;
1351
1742
  }
1352
- function Re(e, t) {
1743
+ function qe(e, t) {
1353
1744
  if (!Number.isFinite(e) || e < 0) throw new A("应为非负有限数字", t);
1354
1745
  return e;
1355
1746
  }
1356
- function un(e) {
1747
+ function nr(e) {
1357
1748
  const t = typeof e.marginMm == "object" ? e.marginMm : { top: e.marginMm ?? 0, left: e.marginMm ?? 0, bottom: e.marginMm ?? 0, right: e.marginMm ?? 0 }, n = typeof e.gapMm == "object" ? e.gapMm : { horizontal: e.gapMm ?? 0, vertical: e.gapMm ?? 0 };
1358
- for (const r of ["top", "left", "bottom", "right"]) Re(t?.[r], `$.marginMm.${r}`);
1359
- for (const r of ["horizontal", "vertical"]) Re(n?.[r], `$.gapMm.${r}`);
1749
+ for (const r of ["top", "left", "bottom", "right"]) qe(t?.[r], `$.marginMm.${r}`);
1750
+ for (const r of ["horizontal", "vertical"]) qe(n?.[r], `$.gapMm.${r}`);
1360
1751
  return { margin: t, gap: n };
1361
1752
  }
1362
- function pn(e) {
1753
+ function rr(e) {
1363
1754
  const t = e.paper === void 0 || e.paper === "a4" ? { widthMm: 210, heightMm: 297 } : e.paper;
1364
- O(t.widthMm, "$.paper.widthMm"), O(t.heightMm, "$.paper.heightMm");
1365
- const n = O(e.columns, "$.columns", !0), r = O(e.rows, "$.rows", !0), i = n * r;
1755
+ B(t.widthMm, "$.paper.widthMm"), B(t.heightMm, "$.paper.heightMm");
1756
+ const n = B(e.columns, "$.columns", !0), r = B(e.rows, "$.rows", !0), i = n * r;
1366
1757
  if (i > 1e3) throw new A("每张纸不能超过 1000 个位置", "$.columns");
1367
- const { margin: o, gap: l } = un(e), a = e.startSlot ?? 0, s = e.offsetMm ?? { x: 0, y: 0 };
1368
- if (!Number.isSafeInteger(a) || a < 0 || a >= i) throw new A("起始位置应在首张纸的有效位置内", "$.startSlot");
1369
- if (!Number.isFinite(s.x) || !Number.isFinite(s.y)) throw new A("校准偏移应为有限毫米值", "$.offsetMm");
1370
- return { paper: t, columns: n, rows: r, capacity: i, margin: o, gap: l, startSlot: a, offset: s };
1758
+ const { margin: o, gap: l } = nr(e), s = e.startSlot ?? 0, a = e.offsetMm ?? { x: 0, y: 0 };
1759
+ if (!Number.isSafeInteger(s) || s < 0 || s >= i) throw new A("起始位置应在首张纸的有效位置内", "$.startSlot");
1760
+ if (!Number.isFinite(a.x) || !Number.isFinite(a.y)) throw new A("校准偏移应为有限毫米值", "$.offsetMm");
1761
+ return { paper: t, columns: n, rows: r, capacity: i, margin: o, gap: l, startSlot: s, offset: a };
1371
1762
  }
1372
- function Ye(e) {
1373
- return 1 + (e.grid?.cells.reduce((t, n) => t + n.length + 1 + n.reduce((r, i) => r + (i?.children?.reduce((o, l) => o + Ye(l), 0) ?? 0), 0), 0) ?? 0);
1763
+ function bt(e) {
1764
+ return 1 + (e.grid?.cells.reduce((t, n) => t + n.length + 1 + n.reduce((r, i) => r + (i?.children?.reduce((o, l) => o + bt(l), 0) ?? 0), 0), 0) ?? 0);
1374
1765
  }
1375
- function wn(e, t, n) {
1376
- if (!Qe(e).ok) throw new A("标签计划无效", "$.plan");
1766
+ function ir(e, t, n) {
1767
+ if (!St(e).ok) throw new A("标签计划无效", "$.plan");
1377
1768
  const r = e.pages[0];
1378
1769
  if (!r) return;
1379
- const { paper: i, columns: o, rows: l, margin: a, gap: s, offset: c } = n;
1380
- if (a.left + c.x < 0 || a.top + c.y < 0 || a.left + c.x + o * r.pageWidthMm + (o - 1) * s.horizontal + a.right > i.widthMm + 1e-6 || a.top + c.y + l * r.pageHeightMm + (l - 1) * s.vertical + a.bottom > i.heightMm + 1e-6) throw new A("标签、间距、边距及校准偏移超过纸张尺寸;不会自动缩小标签", "$.paper");
1770
+ const { paper: i, columns: o, rows: l, margin: s, gap: a, offset: c } = n;
1771
+ if (s.left + c.x < 0 || s.top + c.y < 0 || s.left + c.x + o * r.pageWidthMm + (o - 1) * a.horizontal + s.right > i.widthMm + 1e-6 || s.top + c.y + l * r.pageHeightMm + (l - 1) * a.vertical + s.bottom > i.heightMm + 1e-6) throw new A("标签、间距、边距及校准偏移超过纸张尺寸;不会自动缩小标签", "$.paper");
1381
1772
  let d = 0;
1382
- for (const [h, m] of e.pages.entries()) {
1383
- if (Z(t.signal), m.layout === "wide" || m.pageWidthMm !== r.pageWidthMm || m.pageHeightMm !== r.pageHeightMm) throw new A("拼版需要尺寸相同的固定标签页面", `$.pages.${h}`);
1384
- if (d += m.components.reduce((g, f) => g + Ye(f), 0), d > O(t.maxComponents ?? 25e4, "$.maxComponents", !0)) throw new A("拼版组件总量超过预算", "$.maxComponents");
1385
- for (const g of m.components) if (g.leftMm < 0 || g.topMm < 0 || g.leftMm + g.widthMm > m.pageWidthMm + 1e-6 || g.topMm + g.heightMm > m.pageHeightMm + 1e-6) throw new A("标签内容超出标签边界", `$.pages.${h}.components`);
1773
+ for (const [m, h] of e.pages.entries()) {
1774
+ if (ie(t.signal), h.layout === "wide" || h.pageWidthMm !== r.pageWidthMm || h.pageHeightMm !== r.pageHeightMm) throw new A("拼版需要尺寸相同的固定标签页面", `$.pages.${m}`);
1775
+ if (d += h.components.reduce((f, g) => f + bt(g), 0), d > B(t.maxComponents ?? 25e4, "$.maxComponents", !0)) throw new A("拼版组件总量超过预算", "$.maxComponents");
1776
+ for (const f of h.components) if (f.leftMm < 0 || f.topMm < 0 || f.leftMm + f.widthMm > h.pageWidthMm + 1e-6 || f.topMm + f.heightMm > h.pageHeightMm + 1e-6) throw new A("标签内容超出标签边界", `$.pages.${m}.components`);
1386
1777
  }
1387
1778
  }
1388
- function Kn(e, t) {
1389
- Z(t.signal);
1390
- const n = pn(t), { paper: r, columns: i, capacity: o, margin: l, gap: a, startSlot: s, offset: c } = n, d = e.pages.length ? Math.ceil((s + e.pages.length) / o) : 0;
1391
- if (d > O(t.maxSheets ?? 1e4, "$.maxSheets", !0)) throw new A("拼版纸张数量超过预算", "$.maxSheets");
1392
- O(t.maxComponents ?? 25e4, "$.maxComponents", !0), wn(e, t, n);
1393
- const h = it(e, { maxBytes: O(t.maxSnapshotBytes ?? 64e6, "$.maxSnapshotBytes", !0), check: () => Z(t.signal), error: (g, f) => new A(f, "$.maxSnapshotBytes") }), m = Array.from({ length: d }, () => ({ pageWidthMm: r.widthMm, pageHeightMm: r.heightMm, components: [], meta: { labelSheet: { columns: i, rows: n.rows, slots: [] } } }));
1394
- for (const [g, f] of h.pages.entries()) {
1395
- Z(t.signal);
1396
- const T = s + g, R = T % o, b = m[Math.floor(T / o)], y = l.left + c.x + R % i * (f.pageWidthMm + a.horizontal), P = l.top + c.y + Math.floor(R / i) * (f.pageHeightMm + a.vertical), H = { sourcePageIndex: g, slotIndex: R, xMm: y, yMm: P, widthMm: f.pageWidthMm, heightMm: f.pageHeightMm, ...f.meta ? { sourceMeta: f.meta } : {} };
1397
- b.meta.labelSheet.slots.push(H), b.components.push(...f.components.map((N) => ({ ...N, leftMm: N.leftMm + y, topMm: N.topMm + P, meta: { ...N.meta, labelSheet: H } })));
1398
- }
1399
- return { ...h, pages: m };
1779
+ function Dr(e, t) {
1780
+ ie(t.signal);
1781
+ const n = rr(t), { paper: r, columns: i, capacity: o, margin: l, gap: s, startSlot: a, offset: c } = n, d = e.pages.length ? Math.ceil((a + e.pages.length) / o) : 0;
1782
+ if (d > B(t.maxSheets ?? 1e4, "$.maxSheets", !0)) throw new A("拼版纸张数量超过预算", "$.maxSheets");
1783
+ B(t.maxComponents ?? 25e4, "$.maxComponents", !0), ir(e, t, n);
1784
+ const m = et(e, { maxBytes: B(t.maxSnapshotBytes ?? 64e6, "$.maxSnapshotBytes", !0), check: () => ie(t.signal), error: (f, g) => new A(g, "$.maxSnapshotBytes") }), h = Array.from({ length: d }, () => ({ pageWidthMm: r.widthMm, pageHeightMm: r.heightMm, components: [], meta: { labelSheet: { columns: i, rows: n.rows, slots: [] } } }));
1785
+ for (const [f, g] of m.pages.entries()) {
1786
+ ie(t.signal);
1787
+ const C = a + f, S = C % o, w = h[Math.floor(C / o)], v = l.left + c.x + S % i * (g.pageWidthMm + s.horizontal), y = l.top + c.y + Math.floor(S / i) * (g.pageHeightMm + s.vertical), N = { sourcePageIndex: f, slotIndex: S, xMm: v, yMm: y, widthMm: g.pageWidthMm, heightMm: g.pageHeightMm, ...g.meta ? { sourceMeta: g.meta } : {} };
1788
+ w.meta.labelSheet.slots.push(N), w.components.push(...g.components.map((L) => ({ ...L, leftMm: L.leftMm + v, topMm: L.topMm + y, meta: { ...L.meta, labelSheet: N } })));
1789
+ }
1790
+ return { ...m, pages: h };
1400
1791
  }
1401
1792
  export {
1402
- Zn as CSS_DPI,
1403
- Qn as DEFAULT_BORDER_PT,
1404
- ne as DEFAULT_FONT_FAMILY,
1405
- er as DEFAULT_FONT_PT,
1406
- Lr as DEFAULT_LABEL_PAGE_LIMIT,
1407
- tr as DEFAULT_STROKE_COLOR,
1408
- Pe as DEFAULT_TEXT_COLOR,
1409
- nr as LINE_HEIGHT,
1793
+ zr as CSS_DPI,
1794
+ Hr as DEFAULT_BORDER_PT,
1795
+ le as DEFAULT_FONT_FAMILY,
1796
+ Br as DEFAULT_FONT_PT,
1797
+ Mi as DEFAULT_LABEL_PAGE_LIMIT,
1798
+ _r as DEFAULT_STROKE_COLOR,
1799
+ Ge as DEFAULT_TEXT_COLOR,
1800
+ Wr as LINE_HEIGHT,
1410
1801
  A as LabelSheetError,
1411
- rr as MM_PER_INCH,
1412
- di as OutputAssetError,
1413
- ot as OutputFidelityError,
1414
- Q as PAPER_SIZES,
1415
- Dt as PageBuilder,
1416
- Dr as PaginateCellLimitError,
1417
- Fr as PaginatePageLimitError,
1418
- pr as RENDER_PLAN_SCHEMA_VERSION,
1419
- br as REPORT_TEMPLATE_DOCUMENT_VERSION,
1420
- lr as ReportBindingError,
1421
- w as ReportCalculationError,
1422
- nt as ReportCellEditError,
1423
- Gt as ReportCellFieldError,
1424
- hi as ReportDrillError,
1425
- bi as ReportParamValidationError,
1426
- me as ReportSourceError,
1427
- Ne as ReportTemplateError,
1428
- D as ReportTemplateStoreError,
1429
- ir as SCHEMA_VERSION_MACH,
1430
- Lt as TemplateBuilder,
1431
- Ui as TreeRowLimitError,
1432
- Or as applyReportCellEdit,
1433
- zr as applyReportCellEditBatch,
1434
- Hi as applyReportDocumentStyle,
1435
- Hr as applyReportEditResult,
1436
- Br as applyReportSourceMetadata,
1437
- Mr as assertRenderPlan,
1438
- Mi as assertReportParams,
1439
- Yn as calculateReportSelection,
1440
- Bi as captureTemplateFragment,
1441
- Ar as charWidthEm,
1442
- E as classOf,
1443
- Ai as cloneReportTemplate,
1444
- Di as collectTemplateOutline,
1445
- zn as columnsFromContract,
1446
- Ct as computePageWindow,
1447
- Wr as countTemplatePages,
1448
- kr as createCanvasMeasurer,
1449
- Fn as createCanvasPager,
1450
- $r as createHeuristicMeasurer,
1451
- Bn as createLabelTemplate,
1452
- ki as createLocalTemplateCatalog,
1453
- Un as createMemoryTemplateStore,
1454
- _n as createProviderReport,
1455
- _r as createReportCellEdit,
1456
- jr as createReportCellEditBatch,
1457
- Ur as createReportCellResolver,
1458
- gi as createReportDrillRequest,
1459
- Gr as createReportEditSession,
1460
- qr as createReportSource,
1461
- Hn as createTableTemplate,
1462
- On as createTemplate,
1463
- jn as createTemplateManager,
1464
- vr as createTemplateRegistry,
1465
- Gi as createTreeTable,
1466
- Rr as datasetJsonSchema,
1467
- Wn as defineLabelReport,
1468
- tt as defineReport,
1469
- yr as defineReportTemplate,
1470
- $i as diffReportTemplates,
1471
- Vr as estimateListLayoutCells,
1472
- cr as evalStyleRule,
1473
- gn as evaluateReportAggregateExpression,
1474
- Yr as formatReportCellEdit,
1475
- Gn as formatReportClipboard,
1476
- vi as formatReportDateRange,
1477
- dr as formatValue,
1478
- Kr as getReportCellContext,
1479
- Jr as getReportEditSession,
1480
- Xr as hasValidDataExplanation,
1481
- de as heuristicMeasurer,
1482
- Kn as imposeLabelSheets,
1483
- Wi as insertTemplateFragment,
1484
- li as inspectOutputCapabilities,
1485
- Fi as inspectTemplateFieldUsage,
1486
- _i as inspectTemplateFragmentBindings,
1487
- re as isImageBackedComponent,
1488
- Zr as isReportDataTarget,
1489
- yi as isReportDate,
1490
- xi as isReportMonth,
1491
- Qr as isReportValueState,
1492
- Si as isReportYear,
1493
- $e as isRichText,
1494
- fi as matchReportDrillActions,
1495
- pe as measurePageSizePx,
1496
- Ir as measureTextMm,
1497
- ke as mergeComponentStyles,
1498
- le as mmToPx,
1499
- ar as mmToPxFactor,
1500
- ei as paginateTemplate,
1501
- ti as paginateTemplatePages,
1502
- mr as parseDateLocal,
1503
- Vn as parseReportCellFieldInput,
1504
- rt as parseReportCellInput,
1505
- qn as parseReportClipboard,
1506
- Ei as parseReportDateRange,
1507
- G as parseReportTemplate,
1508
- In as planFontSizePx,
1509
- ni as projectListColumns,
1510
- W as ptToPx,
1511
- or as pxToMm,
1512
- ri as registerReportEditSession,
1513
- ii as relocateReportCellEdits,
1514
- Be as renderComponent,
1515
- Mt as renderPage,
1516
- $n as renderPlan,
1517
- Ln as renderPlanToCanvas,
1518
- Dn as renderPlanToCanvasAsync,
1519
- Nn as renderPlanToImages,
1520
- ai as reportCellEditKey,
1521
- Y as reportOutputDiagnostics,
1522
- Ti as reportParamsJsonSchema,
1523
- Ae as resolveBoxBorders,
1524
- hr as resolveComponentBinding,
1525
- z as resolveFontSize,
1526
- De as resolveGridLayout,
1527
- _ as resolveLineHeight,
1528
- qe as resolvePaper,
1529
- he as resolvePlanAssets,
1530
- ui as resolveReportDrillReturn,
1531
- q as resolveStroke,
1532
- ce as resolveTextColor,
1533
- Ii as reviewReportTemplate,
1534
- Ni as reviewReportTemplateAsync,
1535
- U as round,
1536
- xr as serializeReportTemplate,
1537
- oi as summarizeReportCellEdits,
1538
- Oi as templatePathLocation,
1539
- gr as toExcelNumberFormat,
1540
- fr as toNumber,
1541
- Sr as validateComponent,
1542
- et as validateDatasetRows,
1543
- Er as validatePage,
1544
- Qe as validateRenderPlan,
1545
- Qt as validateReportCellFieldDefinition,
1546
- pi as validateReportDrillActions,
1547
- Ci as validateReportParamDefinitions,
1548
- Ri as validateReportParams,
1549
- Ie as validateReportTemplate,
1550
- Tr as validateReportTemplateDocument,
1551
- qi as validateTreeOptions,
1552
- Le as wrapText
1802
+ Vr as MM_PER_INCH,
1803
+ Ki as OutputAssetError,
1804
+ Pt as OutputFidelityError,
1805
+ oe as PAPER_SIZES,
1806
+ dn as PageBuilder,
1807
+ vi as PaginateCellLimitError,
1808
+ xi as PaginatePageLimitError,
1809
+ ri as RENDER_PLAN_SCHEMA_VERSION,
1810
+ pe as REPORT_TEMPLATE_DOCUMENT_VERSION,
1811
+ Kr as ReportBindingError,
1812
+ M as ReportCalculationError,
1813
+ Tt as ReportCellEditError,
1814
+ In as ReportCellFieldError,
1815
+ u as ReportComponentExtensionError,
1816
+ Zi as ReportDrillError,
1817
+ io as ReportParamValidationError,
1818
+ ve as ReportSourceError,
1819
+ Ze as ReportTemplateError,
1820
+ F as ReportTemplateMigrationError,
1821
+ j as ReportTemplateStoreError,
1822
+ Ur as SCHEMA_VERSION_MACH,
1823
+ cn as TemplateBuilder,
1824
+ ko as TreeRowLimitError,
1825
+ Si as applyReportCellEdit,
1826
+ Ei as applyReportCellEditBatch,
1827
+ To as applyReportDocumentStyle,
1828
+ Ci as applyReportEditResult,
1829
+ Ti as applyReportSourceMetadata,
1830
+ oi as assertRenderPlan,
1831
+ oo as assertReportParams,
1832
+ Lr as calculateReportSelection,
1833
+ Ro as captureTemplateFragment,
1834
+ ui as charWidthEm,
1835
+ $ as classOf,
1836
+ po as cloneReportTemplate,
1837
+ xo as collectTemplateOutline,
1838
+ Er as columnsFromContract,
1839
+ en as computePageWindow,
1840
+ Ri as countTemplatePages,
1841
+ pi as createCanvasMeasurer,
1842
+ xr as createCanvasPager,
1843
+ wi as createHeuristicMeasurer,
1844
+ Tr as createLabelTemplate,
1845
+ wo as createLocalTemplateCatalog,
1846
+ Ar as createMemoryTemplateStore,
1847
+ wr as createPageViewportRenderer,
1848
+ $r as createProviderReport,
1849
+ $i as createReportCellEdit,
1850
+ Pi as createReportCellEditBatch,
1851
+ Ai as createReportCellResolver,
1852
+ kr as createReportComponentRegistry,
1853
+ Qi as createReportDrillRequest,
1854
+ ki as createReportEditSession,
1855
+ Oi as createReportSource,
1856
+ Cr as createTableTemplate,
1857
+ Sr as createTemplate,
1858
+ Pr as createTemplateManager,
1859
+ Mn as createTemplateMigrator,
1860
+ ai as createTemplateRegistry,
1861
+ Oo as createTreeTable,
1862
+ fi as datasetJsonSchema,
1863
+ Rr as defineLabelReport,
1864
+ Ct as defineReport,
1865
+ si as defineReportTemplate,
1866
+ bo as diffReportTemplates,
1867
+ Ii as estimateListLayoutCells,
1868
+ Yr as evalStyleRule,
1869
+ er as evaluateReportAggregateExpression,
1870
+ Ni as explainDatasetField,
1871
+ Li as formatReportCellEdit,
1872
+ Or as formatReportClipboard,
1873
+ ao as formatReportDateRange,
1874
+ Xr as formatValue,
1875
+ Di as getReportCellContext,
1876
+ ji as getReportEditSession,
1877
+ Fi as hasValidDataExplanation,
1878
+ Me as heuristicMeasurer,
1879
+ Dr as imposeLabelSheets,
1880
+ $o as insertTemplateFragment,
1881
+ Yi as inspectOutputCapabilities,
1882
+ So as inspectTemplateFieldUsage,
1883
+ Po as inspectTemplateFragmentBindings,
1884
+ ce as isImageBackedComponent,
1885
+ zi as isReportDataTarget,
1886
+ so as isReportDate,
1887
+ lo as isReportMonth,
1888
+ Hi as isReportValueState,
1889
+ co as isReportYear,
1890
+ Ye as isRichText,
1891
+ eo as matchReportDrillActions,
1892
+ $e as measurePageSizePx,
1893
+ bi as measureTextMm,
1894
+ Ke as mergeComponentStyles,
1895
+ ue as mmToPx,
1896
+ qr as mmToPxFactor,
1897
+ Bi as paginateTemplate,
1898
+ _i as paginateTemplatePages,
1899
+ Zr as parseDateLocal,
1900
+ Nr as parseReportCellFieldInput,
1901
+ Rt as parseReportCellInput,
1902
+ Ir as parseReportClipboard,
1903
+ mo as parseReportDateRange,
1904
+ re as parseReportTemplate,
1905
+ br as planFontSizePx,
1906
+ Wi as projectListColumns,
1907
+ U as ptToPx,
1908
+ Gr as pxToMm,
1909
+ Vi as registerReportEditSession,
1910
+ Ui as relocateReportCellEdits,
1911
+ st as renderComponent,
1912
+ lt as renderPage,
1913
+ pr as renderPlan,
1914
+ Mr as renderPlanToCanvas,
1915
+ vr as renderPlanToCanvasAsync,
1916
+ yr as renderPlanToImages,
1917
+ qi as reportCellEditKey,
1918
+ Z as reportOutputDiagnostics,
1919
+ ho as reportParamsJsonSchema,
1920
+ Je as resolveBoxBorders,
1921
+ Qr as resolveComponentBinding,
1922
+ _ as resolveFontSize,
1923
+ xe as resolveGridLayout,
1924
+ q as resolveLineHeight,
1925
+ gt as resolvePaper,
1926
+ Ee as resolvePlanAssets,
1927
+ to as resolveReportDrillReturn,
1928
+ Y as resolveStroke,
1929
+ ye as resolveTextColor,
1930
+ yo as reviewReportTemplate,
1931
+ Mo as reviewReportTemplateAsync,
1932
+ J as round,
1933
+ li as serializeReportTemplate,
1934
+ Gi as summarizeReportCellEdits,
1935
+ Eo as templatePathLocation,
1936
+ ei as toExcelNumberFormat,
1937
+ ti as toNumber,
1938
+ ci as validateComponent,
1939
+ Et as validateDatasetRows,
1940
+ di as validatePage,
1941
+ St as validateRenderPlan,
1942
+ Bn as validateReportCellFieldDefinition,
1943
+ no as validateReportDrillActions,
1944
+ fo as validateReportParamDefinitions,
1945
+ go as validateReportParams,
1946
+ Xe as validateReportTemplate,
1947
+ mi as validateReportTemplateDocument,
1948
+ Io as validateTreeOptions,
1949
+ Qe as wrapText
1553
1950
  };