@agile-team/mach-report 2.15.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 (171) hide show
  1. package/README.md +21 -12
  2. package/dist/{ExcelBindingWizard-Bs43BGNp.cjs → ExcelBindingWizard-Bq6FYME6.cjs} +1 -1
  3. package/dist/{ExcelBindingWizard-BKH1nGNS.js → ExcelBindingWizard-Co1svTsw.js} +3 -3
  4. package/dist/{ParamEditor-Da4akw6V.cjs → ParamEditor-B5UZRgxv.cjs} +1 -1
  5. package/dist/{ParamEditor-DoAhzJsm.js → ParamEditor-DNNARyeB.js} +1 -1
  6. package/dist/{ReportBatchPanel-wP9m9Pj1.cjs → ReportBatchPanel-Ctvs2t_9.cjs} +1 -1
  7. package/dist/{ReportBatchPanel-BMf6boMA.js → ReportBatchPanel-uQh06usx.js} +3 -3
  8. package/dist/ReportPreview-BdQawRh0.js +4879 -0
  9. package/dist/ReportPreview-CJC_-j2I.cjs +6 -0
  10. package/dist/{ReportTemplateLibrary-Sxr3eD0J.cjs → ReportTemplateLibrary-CnP7_1pH.cjs} +1 -1
  11. package/dist/{ReportTemplateLibrary-C9wutIiT.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-JTSR53vJ.cjs → TemplateOutlinePanel-BlLxRrfu.cjs} +1 -1
  15. package/dist/{TemplateOutlinePanel-D6Bkny59.js → TemplateOutlinePanel-BouxsuqQ.js} +1 -1
  16. package/dist/{TemplateReusePanel-rVuK1kTz.js → TemplateReusePanel-BEACLPaN.js} +2 -2
  17. package/dist/{TemplateReusePanel-Kx35S0Ql.cjs → TemplateReusePanel-yxsHSO40.cjs} +1 -1
  18. package/dist/{TemplateReviewPanel-B0ar9_zf.js → TemplateReviewPanel-B1OGRY2i.js} +1 -1
  19. package/dist/{TemplateReviewPanel-Dn6X9UmY.cjs → TemplateReviewPanel-D9Cx0m2N.cjs} +1 -1
  20. package/dist/analytics.cjs +1 -1
  21. package/dist/analytics.d.cts +65 -1
  22. package/dist/analytics.d.ts +65 -1
  23. package/dist/analytics.js +4 -4
  24. package/dist/artifact-integrity.json +105 -101
  25. package/dist/assets-BIMVwjQe.js +231 -0
  26. package/dist/assets-Dfs2ElxI.cjs +1 -0
  27. package/dist/auto-BIOmtVhk.js +240 -0
  28. package/dist/auto-DDHflI9v.cjs +1 -0
  29. package/dist/{batch-BfZHN1do.js → batch-WzDIXJAt.js} +1 -1
  30. package/dist/{batch-CLpELXBl.cjs → batch-z6Aw5GEY.cjs} +1 -1
  31. package/dist/codes.d.cts +2 -0
  32. package/dist/codes.d.ts +2 -0
  33. package/dist/component-tree-Ca6YYfHq.js +61 -0
  34. package/dist/component-tree-DkGLEfZC.cjs +1 -0
  35. package/dist/computed-BW5a8QFk.js +612 -0
  36. package/dist/computed-C2GD3XcE.cjs +1 -0
  37. package/dist/config-Dg_o8e7m.cjs +1 -0
  38. package/dist/{config-BVsJXSqS.js → config-XQ4qrQ7Q.js} +66 -64
  39. package/dist/dataset-DL83majE.js +161 -0
  40. package/dist/dataset-IrlXbUvh.cjs +1 -0
  41. package/dist/designer-D9XAxqSc.js +5178 -0
  42. package/dist/designer-uCDo5XSK.cjs +2 -0
  43. package/dist/designer.cjs +1 -1
  44. package/dist/designer.d.cts +178 -3
  45. package/dist/designer.d.ts +178 -3
  46. package/dist/designer.js +1 -1
  47. package/dist/drill-ByN8COs_.cjs +1 -0
  48. package/dist/{drill-ByJviLXS.js → drill-CKW3Xtfa.js} +5 -5
  49. package/dist/encoding-BFMFIc4r.cjs +1 -0
  50. package/dist/encoding-DP_Eaf0A.js +21 -0
  51. package/dist/{font-loader-B_UkxpzC.cjs → font-loader-7FWVlykp.cjs} +1 -1
  52. package/dist/{font-loader-Q3bQjmrI.js → font-loader-CQZowp0I.js} +1 -1
  53. package/dist/index.cjs +8 -9
  54. package/dist/index.d.cts +175 -1
  55. package/dist/index.d.ts +175 -1
  56. package/dist/index.js +1343 -915
  57. package/dist/json-snapshot-D7PE1NsU.cjs +2 -0
  58. package/dist/json-snapshot-DYmEe3sO.js +1779 -0
  59. package/dist/matrix-JLAXlux-.js +302 -0
  60. package/dist/matrix-gTHpDTGm.cjs +1 -0
  61. package/dist/{pdf-CvvrjPQg.cjs → pdf-B8JouyYv.cjs} +48 -50
  62. package/dist/{pdf-BwNyeGpt.js → pdf-l3ea86di.js} +2734 -2748
  63. package/dist/pdf.cjs +1 -1
  64. package/dist/pdf.d.cts +14 -0
  65. package/dist/pdf.d.ts +14 -0
  66. package/dist/pdf.js +2 -2
  67. package/dist/{plugin-Ca_XZG3l.js → plugin-BBp74CQZ.js} +1 -1
  68. package/dist/{plugin-DHO7X8z2.cjs → plugin-CtFX9PFG.cjs} +1 -1
  69. package/dist/prepared-CARicKYh.js +87 -0
  70. package/dist/prepared-Ch1x_Gog.cjs +1 -0
  71. package/dist/progress-BXzlVbIp.js +29 -0
  72. package/dist/progress-DJBd9Rb9.cjs +1 -0
  73. package/dist/{progress-D-OTpEav.js → progress-Hc2vxoCs.js} +2 -2
  74. package/dist/protocol-B5A2uom4.cjs +1 -0
  75. package/dist/protocol-BaiWjq5w.js +90 -0
  76. package/dist/record-bindings-B86Sur_y.cjs +1 -0
  77. package/dist/{record-bindings-Do_b3h4V.js → record-bindings-D4TuMzHs.js} +10 -11
  78. package/dist/{region-binding-workflow-BMhK_TjP.js → region-binding-workflow-BNasF5kz.js} +2 -2
  79. package/dist/{region-binding-workflow-DIYJdCUr.cjs → region-binding-workflow-O2Cni3mF.cjs} +1 -1
  80. package/dist/report-encoding-worker.cjs +1 -0
  81. package/dist/report-encoding-worker.d.ts +1 -0
  82. package/dist/report-encoding-worker.js +2 -0
  83. package/dist/rich-text-layout-ALlMoYOG.cjs +3 -0
  84. package/dist/rich-text-layout-Ct5WrY1g.js +102 -0
  85. package/dist/runtime-DakRXui3.js +170 -0
  86. package/dist/runtime-dL5ygIfa.cjs +1 -0
  87. package/dist/sbom.cdx.json +2 -2
  88. package/dist/server/node.d.cts +132 -1
  89. package/dist/server/node.d.ts +132 -1
  90. package/dist/server-node.cjs +5 -1
  91. package/dist/server-node.js +5177 -463
  92. package/dist/server.cjs +1 -1
  93. package/dist/server.d.cts +182 -2
  94. package/dist/server.d.ts +182 -2
  95. package/dist/server.js +918 -833
  96. package/dist/sha256-BshdOkCC.cjs +1 -0
  97. package/dist/sha256-DTG-Gq8i.js +157 -0
  98. package/dist/style-67OqfNed.js +73 -0
  99. package/dist/style-C22Pbv3T.cjs +1 -0
  100. package/dist/style.css +1 -1
  101. package/dist/template-catalog-Dua8h9ZA.cjs +1 -0
  102. package/dist/{template-catalog-j2B1MJlL.js → template-catalog-wT1fNeAP.js} +10 -10
  103. package/dist/{template-fragments-DcKeiylI.cjs → template-fragments-BajTajb4.cjs} +1 -1
  104. package/dist/{template-fragments-BGbQLGlV.js → template-fragments-DmX5XK4N.js} +2 -2
  105. package/dist/template-registry-CpysHAxy.cjs +1 -0
  106. package/dist/{template-registry-BtaKPELV.js → template-registry-u11fPd8D.js} +389 -321
  107. package/dist/{textwrap-DE1kgcJB.js → textwrap-BEIg2w8y.js} +1 -1
  108. package/dist/textwrap-BI-yJ6Wt.cjs +4 -0
  109. package/dist/{tree-BX380Rr7.cjs → tree-CLpxYbKa.cjs} +1 -1
  110. package/dist/{tree-CjVZLRw7.js → tree-DNJorJUf.js} +1 -1
  111. package/dist/vue/async.d.cts +174 -2
  112. package/dist/vue/async.d.ts +174 -2
  113. package/dist/vue/index.d.cts +218 -3
  114. package/dist/vue/index.d.ts +218 -3
  115. package/dist/vue-async.cjs +1 -1
  116. package/dist/vue-async.js +3 -3
  117. package/dist/vue.cjs +1 -1
  118. package/dist/vue.js +7 -7
  119. package/dist/{workbook-session-BvToI-Fd.js → workbook-session-B8pNW24X.js} +153 -140
  120. package/dist/{workbook-session-Bjv1YCRK.cjs → workbook-session-DN5LSA5C.cjs} +12 -12
  121. package/dist/worker.cjs +1 -1
  122. package/dist/worker.d.cts +84 -1
  123. package/dist/worker.d.ts +84 -1
  124. package/dist/worker.js +12 -157
  125. package/dist/xlsx-node.cjs +33 -33
  126. package/dist/xlsx-node.js +1282 -1289
  127. package/dist/xlsx.cjs +4 -3
  128. package/dist/xlsx.d.cts +90 -2
  129. package/dist/xlsx.d.ts +90 -2
  130. package/dist/xlsx.js +279 -259
  131. package/package.json +6 -3
  132. package/dist/ReportPreview-ChV19HBp.js +0 -4619
  133. package/dist/ReportPreview-DbLvvOUT.cjs +0 -6
  134. package/dist/RuleEditor-C_Clasvd.js +0 -2037
  135. package/dist/RuleEditor-XhGHK8DE.cjs +0 -1
  136. package/dist/assets-B9ImAi6_.cjs +0 -1
  137. package/dist/assets-DEaz4qsp.js +0 -124
  138. package/dist/batch-BaP6pWDE.cjs +0 -1
  139. package/dist/batch-CGyt-b2W.js +0 -273
  140. package/dist/capabilities-CAh2Nrue.cjs +0 -1
  141. package/dist/capabilities-DskCHs3V.js +0 -69
  142. package/dist/computed-C-4C2S5h.js +0 -521
  143. package/dist/computed-CGV2a809.cjs +0 -1
  144. package/dist/config-D10us76d.cjs +0 -1
  145. package/dist/data-explanation-B8MZRYVS.js +0 -16
  146. package/dist/data-explanation-DE55G30w.cjs +0 -1
  147. package/dist/dataset-BkRmwgeJ.cjs +0 -1
  148. package/dist/dataset-H5pFuQGU.js +0 -121
  149. package/dist/defaults-DXhiM1ZD.js +0 -10
  150. package/dist/defaults-xhmcLLrf.cjs +0 -1
  151. package/dist/designer-2bDlcNXQ.js +0 -5136
  152. package/dist/designer-BT7XCdbW.cjs +0 -2
  153. package/dist/drill-DYTxuL3A.cjs +0 -1
  154. package/dist/grid-strokes-Cr7DwUux.cjs +0 -1
  155. package/dist/grid-strokes-DyyG1q_o.js +0 -53
  156. package/dist/json-snapshot-DFb2eWkf.js +0 -1416
  157. package/dist/json-snapshot-WWSGlaHG.cjs +0 -2
  158. package/dist/matrix-CGRGkn5s.js +0 -112
  159. package/dist/matrix-gEO7ZM_u.cjs +0 -1
  160. package/dist/prepared-CFy9B75C.cjs +0 -1
  161. package/dist/prepared-ajM-H-9B.js +0 -69
  162. package/dist/record-bindings-By_UKZ2g.cjs +0 -1
  163. package/dist/render-plan-7xpGrCEl.cjs +0 -1
  164. package/dist/render-plan-Ck6koX9L.js +0 -13
  165. package/dist/sha256-ArEYjaTI.cjs +0 -1
  166. package/dist/sha256-DPEuJ3nh.js +0 -155
  167. package/dist/style-CQ1PK8ZB.js +0 -67
  168. package/dist/style-UgIJSA1F.cjs +0 -1
  169. package/dist/template-catalog-FJE_c9Qe.cjs +0 -1
  170. package/dist/template-registry-Co1zPq5e.cjs +0 -1
  171. package/dist/textwrap-CWHyzkBH.cjs +0 -4
package/dist/index.js CHANGED
@@ -1,36 +1,137 @@
1
- import { D as te, a as Te } from "./defaults-DXhiM1ZD.js";
2
- import { b as Yn, c as Kn, d as Jn, L as Xn, S as Zn } from "./defaults-DXhiM1ZD.js";
3
- import { R as er, e as tr, f as nr, p as rr, b as ar, t as ir, d as or } from "./record-bindings-Do_b3h4V.js";
4
- import { a as j, r as _, b as ne, c as G, d as Ce, m as se, e as Re, p as W, f as Pe, P as Z } from "./style-CQ1PK8ZB.js";
5
- import { C as lr, M as cr, g as mr, h as dr } from "./style-CQ1PK8ZB.js";
6
- import { i as re, a as Ae } from "./render-plan-Ck6koX9L.js";
7
- import { R as gr } from "./render-plan-Ck6koX9L.js";
8
- import { v as $e, R as ke, p as U, a as Je } from "./template-registry-BtaKPELV.js";
9
- import { b as ur, c as pr, d as wr, e as br, s as Mr, f as yr, g as vr, h as xr } from "./template-registry-BtaKPELV.js";
10
- import { v as Xe } from "./dataset-H5pFuQGU.js";
11
- import { d as Sr } from "./dataset-H5pFuQGU.js";
12
- import { h as le, w as Ie } from "./textwrap-DE1kgcJB.js";
13
- import { c as Cr, a as Rr, b as Pr, m as Ar } from "./textwrap-DE1kgcJB.js";
14
- import { R as ce, d as Ze, s as Qe } from "./json-snapshot-DFb2eWkf.js";
15
- import { D as kr, P as Ir, a as Nr, b as Lr, c as Dr, e as Fr, f as Or, g as Hr, h as zr, i as Wr, p as Br, j as jr, k as _r, r as Ur, l as Gr } from "./json-snapshot-DFb2eWkf.js";
16
- import { r as Ne } from "./grid-geometry-BNptEcMm.js";
17
- import { r as Le } from "./grid-strokes-DyyG1q_o.js";
18
- import { r as q, n as De, O as et } from "./capabilities-DskCHs3V.js";
19
- import { i as qr } from "./capabilities-DskCHs3V.js";
20
- import { o as tt } from "./progress-D-OTpEav.js";
21
- import { r as me } from "./assets-DEaz4qsp.js";
22
- import { O as Kr } from "./assets-DEaz4qsp.js";
23
- import { c as nt } from "./drill-ByJviLXS.js";
24
- import { R as Xr, a as Zr, m as Qr, r as ea, v as ta } from "./drill-ByJviLXS.js";
25
- import { R as ra, a as aa, f as ia, i as oa, b as sa, c as la, p as ca, r as ma, v as da, d as ha } from "./param-validation-Do7Eg8Zv.js";
26
- import { c as fa, a as ua, d as pa, r as wa, b as ba } from "./template-catalog-j2B1MJlL.js";
27
- import { h as ya, i as va, a as xa } from "./data-explanation-B8MZRYVS.js";
28
- import { c as Sa, i as Ta, t as Ca } from "./template-outline-cnWfT_LK.js";
29
- import { a as Pa, c as Aa, i as $a, b as ka } from "./template-fragments-BGbQLGlV.js";
30
- import { R as rt, p as at } from "./batch-CGyt-b2W.js";
31
- import { a as Na, b as La, c as Da, d as Fa, e as Oa, f as Ha, g as za, r as Wa, s as Ba } from "./batch-CGyt-b2W.js";
32
- import { T as _a, c as Ua, v as Ga } from "./tree-CjVZLRw7.js";
33
- const it = {
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 = {
34
135
  root: "mr-root",
35
136
  page: "mr-page",
36
137
  comp: "mr-comp",
@@ -47,18 +148,18 @@ const it = {
47
148
  cell: "mr-cell",
48
149
  unknown: "mr-unknown"
49
150
  };
50
- function T(e, t) {
51
- return t?.classNames?.[e] ?? it[e];
151
+ function $(e, t) {
152
+ return t?.classNames?.[e] ?? zt[e];
52
153
  }
53
- class ot {
154
+ class Ht {
54
155
  constructor() {
55
156
  this.props = [];
56
157
  }
57
158
  add(t, n) {
58
159
  return n == null || n === !1 || n === "" ? this : (this.props.push([t, String(n)]), this);
59
160
  }
60
- mm(t, n, r, a = 2) {
61
- return this.add(t, `${j(se(n, r), a)}px`);
161
+ mm(t, n, r, i = 2) {
162
+ return this.add(t, `${J(ue(n, r), i)}px`);
62
163
  }
63
164
  toString() {
64
165
  let t = "";
@@ -71,522 +172,582 @@ class ot {
71
172
  n && (t.style.cssText = n);
72
173
  }
73
174
  }
74
- function y(e, t = "unset") {
75
- return new ot().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");
76
177
  }
77
- function Fe(e, t, n) {
78
- 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(ne(t))).add("text-align", t.align);
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);
79
180
  const r = _(t, n);
80
- e.add("font-size", `${j(r.fontSizePx, 2)}px`);
181
+ e.add("font-size", `${J(r.fontSizePx, 2)}px`);
81
182
  }
82
- function st(e, t, n) {
183
+ function Bt(e, t, n) {
83
184
  const r = t.style ?? {};
84
- Fe(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);
85
- }
86
- function lt(e, t, n, r, a, o) {
87
- const l = e.cell, i = o.createElement("td");
88
- i.className = T("cell", a), i.dataset.mrRowIndex = String(e.ri), i.dataset.mrColumnIndex = String(e.ci), i.setAttribute("role", t.table?.role === "header" ? "columnheader" : "cell"), l.colSpan && (i.colSpan = l.colSpan), l.rowSpan && (i.rowSpan = l.rowSpan);
89
- const s = Re(t.style, l.style), c = y("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");
90
- Fe(c, s, r), c.applyTo(i);
91
- const m = o.createElement("div");
92
- m.className = "mr-cell-content", y("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(m), l.text != null && m.append(l.text);
93
- for (const d of l.children ?? []) m.appendChild(Oe(d, r, a, o));
94
- return i.appendChild(m), i;
95
- }
96
- function ct(e, t, n, r) {
97
- return Le(e, t).map((a) => {
98
- const o = `${j(a.widthPt * n / 72, 2)}px solid ${a.color}`, l = r.createElement("div");
99
- l.className = "mr-grid-edge", l.setAttribute("aria-hidden", "true");
100
- const i = a.kind === "h";
101
- return y("block").add("position", "absolute").add("pointer-events", "none").mm("left", i ? a.from : a.pos, n).mm("top", i ? a.pos : a.from, n).mm("width", i ? a.to - a.from : 0, n).mm("height", i ? 0 : a.to - a.from, n).add(i ? "border-top" : "border-left", o).applyTo(l), l;
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);
186
+ }
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);
192
+ const d = o.createElement("div");
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;
102
206
  });
103
207
  }
104
- function mt(e, t, n, r, a) {
105
- const o = a.createElement("table");
106
- o.className = T("grid", r), o.setAttribute("role", "table"), y("block").add("position", "relative").add("width", "100%").add("height", "100%").applyTo(o);
107
- const l = Ne(e, t.widthMm, t.heightMm), i = a.createElement("tbody");
108
- y("contents").applyTo(i), o.appendChild(i);
109
- const s = e.cells.map(() => {
110
- const m = a.createElement("tr");
111
- return m.className = T("row", r), m.setAttribute("role", "row"), y("contents").applyTo(m), i.appendChild(m), m;
208
+ function Wt(e, t, n, r, i) {
209
+ const o = i.createElement("table");
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;
112
232
  });
113
- for (const m of l.cells)
114
- s[m.ri].appendChild(lt(m, t, e.paddingMm ?? 0.5, n, r, a));
115
- const c = a.createElement("div");
116
- return y("block").add("position", "relative").add("width", "100%").add("height", "100%").applyTo(c), c.append(o, ...ct(l, t, n, a)), c;
117
- }
118
- function dt(e, t, n, r) {
119
- const a = r.createElement("div");
120
- a.className = T("paragraph", n), y("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(a);
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;
237
+ }
238
+ function Vt(e, t, n, r) {
239
+ const i = r.createElement("div");
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);
121
241
  for (const o of e.segments || []) {
122
242
  const l = r.createElement("span");
123
- l.className = T("segment", n), l.textContent = o.kind === "field" ? o.field ?? "" : o.text ?? "";
124
- const i = y("inline");
243
+ l.className = $("segment", n), l.textContent = o.kind === "field" ? o.field ?? "" : o.text ?? "";
244
+ const s = x("inline");
125
245
  if (o.style) {
126
- const s = o.style;
127
- i.add("color", s.color).add("font-family", s.fontFamily).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) && i.add("font-size", `${j(_(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`);
128
248
  }
129
- i.applyTo(l), a.appendChild(l);
249
+ s.applyTo(l), i.appendChild(l);
130
250
  }
131
- return a;
132
- }
133
- function ht(e, t, n, r) {
134
- if (Ae(e)) {
135
- const a = r.createElement("div");
136
- a.className = T("rich", n), y("block").applyTo(a);
137
- for (const o of e.richParagraphs) a.appendChild(dt(o, t, n, r));
138
- return a;
251
+ return i;
252
+ }
253
+ function at(e, t, n, r) {
254
+ if (Ye(e)) {
255
+ const i = r.createElement("div");
256
+ i.className = $("rich", n), x("block").applyTo(i);
257
+ for (const o of e.richParagraphs) i.appendChild(Vt(o, t, n, r));
258
+ return i;
139
259
  }
140
260
  if (Array.isArray(e.lines) && e.lines.length > 0) {
141
- const a = r.createElement("div");
142
- a.className = T("lines", n), y("block").applyTo(a);
261
+ const i = r.createElement("div");
262
+ i.className = $("lines", n), x("block").applyTo(i);
143
263
  for (const o of e.lines) {
144
264
  const l = r.createElement("div");
145
- l.className = T("line", n), l.textContent = o, y("block").add("white-space", "pre").add("min-height", "1lh").applyTo(l), a.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);
146
266
  }
147
- return a;
267
+ return i;
148
268
  }
149
269
  return e.text ?? "";
150
270
  }
151
- function gt(e, t, n, r) {
152
- const a = r.createElement("div");
153
- a.className = T("text", n);
271
+ function Ut(e, t, n, r) {
272
+ const i = r.createElement("div");
273
+ i.className = $("text", n);
154
274
  const o = e.style || {};
155
- return y("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(a), a.append(ht(e, t, n, r)), a;
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;
156
276
  }
157
- function ft(e, t, n) {
277
+ function qt(e, t, n) {
158
278
  const r = n.createElement("img");
159
- return r.className = T("image", t), r.src = e.imageData, y("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;
160
280
  }
161
- function be(e, t, n, r) {
162
- const a = r.createElement("div");
163
- a.className = T("shape", n);
164
- const o = e.style || {}, l = G(o), i = Ce(o), s = `${j(l.widthPt * t / 72, 2)}px solid ${l.color}`, c = y("block");
165
- return e.grid ? c.add("position", "relative") : e.kind === "rect" ? (i.top && c.add("border-top", s), i.right && c.add("border-right", s), i.bottom && c.add("border-bottom", s), i.left && c.add("border-left", s)) : e.kind === "ellipse" ? (i.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(a), a;
281
+ function Fe(e, t, n, r) {
282
+ const i = r.createElement("div");
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;
166
286
  }
167
- function ut(e, t, n) {
168
- const r = n.createElementNS("http://www.w3.org/2000/svg", "svg"), a = se(e.widthMm, t), o = se(e.heightMm, t);
169
- r.setAttribute("width", String(Math.max(1, a))), r.setAttribute("height", String(Math.max(1, o))), r.setAttribute("aria-hidden", "true"), r.style.overflow = "visible", r.style.display = "block";
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);
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";
170
290
  const l = n.createElementNS("http://www.w3.org/2000/svg", "line");
171
- l.setAttribute("x1", "0"), l.setAttribute("x2", String(a)), l.setAttribute("y1", e.lineDirection === "up" ? String(o) : "0"), l.setAttribute("y2", e.lineDirection === "up" ? "0" : String(o));
172
- const i = G({ ...e.style, borderColor: e.style?.lineColor ?? e.style?.borderColor });
173
- return l.setAttribute("stroke", i.color), l.setAttribute("stroke-width", String(i.widthPt * t / 72)), r.appendChild(l), r;
174
- }
175
- function Oe(e, t, n, r) {
176
- const a = r.createElement("div");
177
- a.className = `${T("comp", n)} mr-kind-${e.kind}`;
178
- const o = y("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");
179
- if (st(o, e, t), o.applyTo(a), re(e))
180
- return a.appendChild(ft(e, n, r)), a;
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));
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;
294
+ }
295
+ function st(e, t, n, r) {
296
+ const i = r.createElement("div");
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;
181
301
  if (e.kind === "text")
182
- return a.appendChild(gt(e, t, n, r)), a;
302
+ return i.appendChild(Ut(e, t, n, r)), i;
183
303
  if (e.grid) {
184
- const i = be(e, t, n, r);
185
- return i.appendChild(mt(e.grid, e, t, n, r)), a.appendChild(i), a;
304
+ const s = Fe(e, t, n, r);
305
+ return s.appendChild(Wt(e.grid, e, t, n, r)), i.appendChild(s), i;
186
306
  }
187
307
  if (e.kind === "line" && e.lineDirection)
188
- return a.appendChild(ut(e, t, r)), a;
308
+ return i.appendChild(Gt(e, t, r)), i;
189
309
  if (e.kind === "line" || e.kind === "rect" || e.kind === "ellipse")
190
- return a.appendChild(be(e, t, n, r)), a;
310
+ return i.appendChild(Fe(e, t, n, r)), i;
191
311
  const l = r.createElement("div");
192
- return l.className = T("unknown", n), y("block").applyTo(l), l.textContent = e.fallbackText ?? `[${e.kind}]`, l.dataset.mrUnsupported = e.kind, l.setAttribute("role", "note"), a.appendChild(l), a;
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;
193
313
  }
194
- function pt(e, t, n, r) {
195
- const a = r.createElement("div");
196
- return a.className = T("page", n), y("block", "initial").add("position", "relative").add("font-family", te).add("font-size", `${j(_(void 0, t).fontSizePx, 2)}px`).add("line-height", String(ne(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", Te).add("overflow", "hidden").add("box-sizing", "border-box").applyTo(a), e.components.forEach((o, l) => {
197
- const i = Oe(o, t, n, r);
198
- i.dataset.mrComponentIndex = String(l), a.appendChild(i);
199
- }), a;
314
+ function lt(e, t, n, r) {
315
+ const i = r.createElement("div");
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);
319
+ }), i;
200
320
  }
201
- function Rn(e, t, n = {}) {
321
+ function pr(e, t, n = {}) {
202
322
  const r = n.dpi ?? 96;
203
- q(e, "dom", n);
204
- const a = t.createElement("div");
205
- return a.className = T("root", n), y("block").applyTo(a), a.dataset.schemaVersion = e.schemaVersion, e.pages.forEach((o) => {
206
- a.appendChild(pt(o, r, n, t));
207
- }), a;
323
+ Z(e, "dom", n);
324
+ const i = t.createElement("div");
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));
327
+ }), i;
328
+ }
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") {
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";
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);
343
+ }), e.textAlign = "left";
208
344
  }
209
- function $(e) {
345
+ function Jt(e, t, n, r, i, o) {
346
+ const l = Array.from(t), s = n.letterSpacingPx ?? 0;
347
+ if (!s) {
348
+ e.textAlign = n.align === "center" ? "center" : n.align === "right" ? "right" : "left";
349
+ const m = n.align === "center" ? r + o / 2 : n.align === "right" ? r + o : r;
350
+ e.fillText(t, m, i);
351
+ return;
352
+ }
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;
354
+ e.textAlign = "left";
355
+ let d = "";
356
+ l.forEach((m, h) => {
357
+ e.fillText(m, c + e.measureText(d).width + h * s, i), d += m;
358
+ });
359
+ }
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();
363
+ }
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");
367
+ };
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);
371
+ },
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);
375
+ }
376
+ });
377
+ }
378
+ function k(e) {
210
379
  if (e?.aborted) throw e.reason ?? new DOMException("The operation was aborted.", "AbortError");
211
380
  }
212
- const wt = (e, t) => ($(t), /^data:image\/(?:png|jpe?g|webp|gif|svg\+xml)[;,]/i.test(e) ? new Promise((n, r) => {
213
- const a = new Image(), o = () => {
214
- a.onload = null, a.onerror = null, t?.removeEventListener("abort", l);
381
+ const Yt = (e, t) => (k(t), /^data:image\/(?:png|jpe?g|webp|gif|svg\+xml)[;,]/i.test(e) ? new Promise((n, r) => {
382
+ const i = new Image(), o = () => {
383
+ i.onload = null, i.onerror = null, t?.removeEventListener("abort", l);
215
384
  }, l = () => {
216
- o(), a.src = "", r(t?.reason ?? new DOMException("The operation was aborted.", "AbortError"));
385
+ o(), i.src = "", r(t?.reason ?? new DOMException("The operation was aborted.", "AbortError"));
217
386
  };
218
- a.onload = () => {
219
- o(), n(a);
220
- }, a.onerror = () => {
387
+ i.onload = () => {
388
+ o(), n(i);
389
+ }, i.onerror = () => {
221
390
  o(), r(new Error("Image could not be decoded for Canvas output."));
222
- }, t?.addEventListener("abort", l, { once: !0 }), a.src = e;
391
+ }, t?.addEventListener("abort", l, { once: !0 }), i.src = e;
223
392
  }) : Promise.reject(new TypeError("Canvas imageData must be an image data URL; provide imageLoader for other sources.")));
224
- function bt(e, t, n) {
225
- return $(n), n ? new Promise((r, a) => {
226
- const o = () => a(n.reason ?? new DOMException("The operation was aborted.", "AbortError"));
227
- n.addEventListener("abort", o, { once: !0 }), Promise.resolve().then(() => e(t, n)).then(r, a).finally(() => n.removeEventListener("abort", o));
393
+ function Xt(e, t, n) {
394
+ return k(n), n ? new Promise((r, i) => {
395
+ const o = () => i(n.reason ?? new DOMException("The operation was aborted.", "AbortError"));
396
+ n.addEventListener("abort", o, { once: !0 }), Promise.resolve().then(() => e(t, n)).then(r, i).finally(() => n.removeEventListener("abort", o));
228
397
  }) : e(t);
229
398
  }
230
- async function Mt(e, t, n) {
399
+ function* Te(e) {
400
+ function* t(n, r, i, o) {
401
+ if (o.has(n)) throw new TypeError("Cyclic grid children cannot be rendered.");
402
+ ce(n) && (yield { component: n, componentIndex: r, componentPath: i });
403
+ const l = new Set(o).add(n);
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);
405
+ }
406
+ for (const [n, r] of e.components.entries()) yield* t(r, n, [], /* @__PURE__ */ new Set());
407
+ }
408
+ async function Zt(e, t, n) {
231
409
  const r = /* @__PURE__ */ new Map();
232
- for (const a of e.components)
233
- !re(a) || r.has(a.imageData) || r.set(a.imageData, await bt(t, a.imageData, n));
234
- return $(n), r;
235
- }
236
- function yt(e, t, n, r, a, o) {
237
- const l = t, i = l.naturalWidth ?? l.width ?? a, s = l.naturalHeight ?? l.height ?? o;
238
- if (i <= 0 || s <= 0) throw new RangeError("Decoded Canvas image dimensions must be positive.");
239
- const c = Math.min(a / i, o / s), m = i * c, d = s * c;
240
- e.drawImage(t, n + (a - m) / 2, r + (o - d) / 2, m, d);
241
- }
242
- function vt(e) {
243
- return nt(e.pageHeightsPx, e.gapPx).window(e.viewportHeightPx, e.scrollTopPx, e.overscan);
244
- }
245
- const de = 96 / 25.4;
246
- function he(e, t = 96) {
247
- const n = t / 96 * de;
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));
412
+ return k(n), r;
413
+ }
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);
419
+ }
420
+ function en(e) {
421
+ return kt(e.pageHeightsPx, e.gapPx).window(e.viewportHeightPx, e.scrollTopPx, e.overscan);
422
+ }
423
+ const Re = 96 / 25.4;
424
+ function $e(e, t = 96) {
425
+ const n = t / 96 * Re;
248
426
  return {
249
427
  widthPx: Math.max(1, Math.round(e.pageWidthMm * n)),
250
428
  heightPx: Math.max(1, Math.round(e.pageHeightMm * n))
251
429
  };
252
430
  }
253
- function He(e, t, n, r = 64e6) {
431
+ function dt(e, t, n, r = 64e6) {
254
432
  if (!Number.isFinite(t) || t <= 0 || !Number.isFinite(n) || n <= 0) throw new RangeError("Canvas dpr and dpi must be positive finite numbers.");
255
433
  if (!Number.isFinite(r) || r <= 0) throw new RangeError("maxCanvasPixels must be positive and finite.");
256
- const a = he(e, n), o = Math.round(a.widthPx * t), l = Math.round(a.heightPx * t);
434
+ const i = $e(e, n), o = Math.round(i.widthPx * t), l = Math.round(i.heightPx * t);
257
435
  if (!Number.isSafeInteger(o) || !Number.isSafeInteger(l) || o * l > r) throw new RangeError("Canvas page exceeds maxCanvasPixels; reduce resolution or split the report.");
258
436
  return { width: o, height: l };
259
437
  }
260
- function ze(e, t, n, r) {
261
- const a = document.createElement("canvas"), { widthPx: o, heightPx: l } = he(e, n), i = He(e, t, n, r);
262
- a.width = i.width, a.height = i.height, a.style.width = `${o}px`, a.style.height = `${l}px`;
263
- const s = a.getContext("2d");
264
- 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)
265
443
  throw new Error("当前环境不支持 Canvas 2D(测试需真浏览器,见 e2e/canvas.spec.ts)");
266
- return s.scale(t, t), s.fillStyle = "#ffffff", s.fillRect(0, 0, o, l), { canvas: a, ctx: s };
444
+ return a.scale(t, t), a.fillStyle = "#ffffff", a.fillRect(0, 0, o, l), { canvas: i, ctx: a };
267
445
  }
268
- function Pn(e, t = 96) {
446
+ function br(e, t = 96) {
269
447
  return _(e, t).fontSizePx;
270
448
  }
271
- function We(e, t, n, r, a, o, l, i = "top") {
272
- 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";
273
- const s = t.fontSizePx * t.lineHeight, c = t.text === "" ? [""] : t.text.split(`
274
- `), m = c.length * s;
275
- let d = r;
276
- i === "middle" ? d = r + (o - m) / 2 : i === "bottom" && (d = r + o - m), c.forEach((h, g) => {
277
- xt(e, h, t, n, d + g * s + t.fontSizePx * 0.8, a);
278
- }), e.textAlign = "left";
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();
279
452
  }
280
- function xt(e, t, n, r, a, o) {
281
- const l = Array.from(t), i = n.letterSpacingPx ?? 0;
282
- if (!i) {
283
- e.textAlign = n.align === "center" ? "center" : n.align === "right" ? "right" : "left";
284
- const d = n.align === "center" ? r + o / 2 : n.align === "right" ? r + o : r;
285
- e.fillText(t, d, a);
453
+ function nn(e, t, n, r, i, o) {
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();
455
+ }
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));
461
+ }
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);
464
+ }
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(
469
+ e,
470
+ {
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)
480
+ },
481
+ r + (t.xMm + d + g) * o,
482
+ i + (t.yMm + d) * o,
483
+ C * o,
484
+ Math.max(0, t.heightMm - 2 * d) * o,
485
+ h.fontFamily ?? s,
486
+ h.verticalAlign ?? "middle"
487
+ );
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);
489
+ e.restore();
490
+ }
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);
286
495
  return;
287
496
  }
288
- const s = e.measureText(t).width + Math.max(0, l.length - 1) * i, c = n.align === "center" ? r + (o - s) / 2 : n.align === "right" ? r + o - s : r;
289
- e.textAlign = "left";
290
- let m = "";
291
- l.forEach((d, h) => {
292
- e.fillText(d, c + e.measureText(m).width + h * i, a), m += d;
293
- });
294
- }
295
- function Et(e, t, n, r, a, o, l) {
296
- for (const i of Le(t, n))
297
- e.strokeStyle = i.color, e.lineWidth = W(i.widthPt, l), e.beginPath(), i.kind === "v" ? (e.moveTo(r + i.pos * o, a + i.from * o), e.lineTo(r + i.pos * o, a + i.to * o)) : (e.moveTo(r + i.from * o, a + i.pos * o), e.lineTo(r + i.to * o, a + i.pos * o)), e.stroke();
298
- }
299
- function St(e, t, n, r, a, o) {
300
- e.beginPath(), t.top && (e.moveTo(n, r), e.lineTo(n + a, r)), t.right && (e.moveTo(n + a, r), e.lineTo(n + a, r + o)), t.bottom && (e.moveTo(n + a, r + o), e.lineTo(n, r + o)), t.left && (e.moveTo(n, r + o), e.lineTo(n, r)), e.stroke();
301
- }
302
- function Tt(e, t, n, r, a, o, l, i, s, c, m) {
303
- const d = Ne(t, o / i, l / i);
304
- for (const g of d.cells) {
305
- const f = g.cell.style?.backgroundColor ?? n.style?.backgroundColor;
306
- f && (e.fillStyle = f, e.fillRect(r + g.xMm * i, a + g.yMm * i, g.widthMm * i, g.heightMm * i));
307
- }
308
- Et(e, d, n, r, a, i, s);
309
- const h = t.paddingMm ?? 0.5;
310
- for (const g of d.cells) {
311
- const f = g.cell.text ?? "";
312
- if (!f) continue;
313
- const w = Re(n.style, g.cell.style), C = _(w, s), x = g.cell.indentMm ?? 0, v = Math.max(0, g.widthMm - 2 * h - x), R = Ie(f, v, { fontSizePt: C.fontSizePt, bold: w.bold, italic: w.italic, fontFamily: w.fontFamily ?? c, letterSpacingPt: w.letterSpacing }, m).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(`
314
499
  `);
315
- We(
316
- e,
317
- {
318
- text: R,
319
- fontSizePx: C.fontSizePx,
320
- bold: w.bold ?? !1,
321
- italic: w.italic,
322
- color: Pe(w, Te),
323
- align: w.align ?? "left",
324
- lineHeight: ne(w),
325
- letterSpacingPx: W(w.letterSpacing ?? 0, s)
326
- },
327
- r + (g.xMm + h + x) * i,
328
- a + (g.yMm + h) * i,
329
- v * i,
330
- Math.max(0, g.heightMm - 2 * h) * i,
331
- w.fontFamily ?? c,
332
- w.verticalAlign ?? "middle"
333
- );
334
- }
335
- }
336
- function Ct(e, t, n, r, a, o, l, i, s) {
337
- const c = t.style ?? {}, m = _(c, l), d = Ae(t) ? t.richParagraphs.map((h) => h.segments.map((g) => g.text ?? g.field ?? "").join("")).join(`
338
- `) : t.lines?.length ? t.lines.join(`
339
- `) : Ie(t.text ?? "", t.widthMm, { fontSizePt: m.fontSizePt, bold: c.bold, italic: c.italic, fontFamily: c.fontFamily ?? i, letterSpacingPt: c.letterSpacing }, s).join(`
340
- `);
341
- We(e, {
342
- text: d,
343
- fontSizePx: m.fontSizePx,
500
+ Ce(e, {
501
+ text: m,
502
+ fontSizePx: d.fontSizePx,
344
503
  bold: c.bold ?? !1,
345
504
  italic: c.italic,
346
- color: Pe(c),
505
+ underline: c.underline,
506
+ color: ye(c),
347
507
  align: c.align ?? "left",
348
- lineHeight: ne(c),
349
- letterSpacingPx: W(c.letterSpacing ?? 0, l)
350
- }, n, r, a, o, c.fontFamily ?? i, c.verticalAlign);
508
+ lineHeight: q(c),
509
+ letterSpacingPx: U(c.letterSpacing ?? 0, l)
510
+ }, n, r, i, o, c.fontFamily ?? s, c.verticalAlign);
351
511
  }
352
- function ge(e, t, n, r, a, o, l) {
353
- const i = t.leftMm * n, s = t.topMm * n, c = t.widthMm * n, m = t.heightMm * n, d = t.style ?? {};
354
- if (re(t)) {
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)) {
355
515
  const h = l?.get(t.imageData);
356
- h ? yt(e, h, i, s, c, m) : Me(e, t, i, s, c, m);
516
+ h ? Qt(e, h, s, a, c, d) : ze(e, t, s, a, c, d);
357
517
  return;
358
518
  }
359
519
  if (t.grid) {
360
- Tt(e, t.grid, t, i, s, c, m, n, r, a, o);
520
+ rn(e, t.grid, t, s, a, c, d, n, r, i, o, l);
361
521
  return;
362
522
  }
363
523
  switch (t.kind) {
364
524
  case "text": {
365
- Ct(e, t, i, s, c, m, r, a, o);
525
+ an(e, t, s, a, c, d, r, i, o);
366
526
  break;
367
527
  }
368
528
  case "rect": {
369
- const h = G(d), g = Ce(d);
370
- d.backgroundColor && (e.fillStyle = d.backgroundColor, e.fillRect(i, s, c, m)), g.inner && (e.strokeStyle = h.color, e.lineWidth = W(h.widthPt, r), St(e, g, i, s, c, m));
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));
371
531
  break;
372
532
  }
373
533
  case "line": {
374
- const h = G({ ...d, borderColor: d.lineColor ?? d.borderColor });
375
- e.strokeStyle = h.color, e.lineWidth = W(h.widthPt, r), e.beginPath();
376
- const g = t.lineDirection === "up" ? s + m : t.lineDirection === "down" ? s : s + m / 2, f = t.lineDirection === "up" ? s : t.lineDirection === "down" ? s + m : s + m / 2;
377
- e.moveTo(i, g), e.lineTo(i + 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();
378
538
  break;
379
539
  }
380
540
  case "ellipse": {
381
- const h = G(d);
382
- e.strokeStyle = h.color, e.lineWidth = W(h.widthPt, r), d.backgroundColor && (e.fillStyle = d.backgroundColor, e.beginPath(), e.ellipse(i + c / 2, s + m / 2, c / 2, m / 2, 0, 0, Math.PI * 2), e.fill()), e.beginPath(), e.ellipse(i + c / 2, s + m / 2, c / 2, m / 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();
383
543
  break;
384
544
  }
385
545
  default:
386
- Me(e, t, i, s, c, m);
546
+ ze(e, t, s, a, c, d);
387
547
  break;
388
548
  }
389
549
  }
390
- function Me(e, t, n, r, a, o) {
391
- e.save(), e.strokeStyle = "#94a3b8", e.strokeRect(n, r, a, o), e.fillStyle = "#64748b", e.font = "12px sans-serif", e.fillText(t.fallbackText ?? `[${t.kind}]`, n + 3, r + 14), e.restore();
550
+ function ze(e, t, n, r, i, o) {
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();
392
552
  }
393
- async function An(e, t = {}) {
553
+ async function yr(e, t = {}) {
394
554
  if (typeof document > "u")
395
555
  throw new Error("renderPlanToImages 需要浏览器环境(SSR/Node 请在客户端钩子中调用)");
396
- const { format: n = "png", quality: r = 0.92, ...a } = t;
556
+ const { format: n = "png", quality: r = 0.92, ...i } = t;
397
557
  if (n !== "png" && n !== "jpeg") throw new TypeError("Image format must be png or jpeg.");
398
558
  if (!Number.isFinite(r) || r < 0 || r > 1) throw new RangeError("Image quality must be between 0 and 1.");
399
- $(t.signal);
400
- const o = await me(e, { ...t, format: "canvas" });
559
+ k(t.signal);
560
+ const o = await Ee(e, { ...t, format: "canvas" });
401
561
  e = o.plan;
402
- const l = [...o.diagnostics, ...q(e, "canvas", t)], i = n === "jpeg" ? "image/jpeg" : "image/png", s = [], c = Math.min(e.pages.length - 1, t.end ?? e.pages.length - 1);
403
- for (let m = Math.max(0, t.start ?? 0); m <= c; m++) {
404
- $(t.signal);
405
- const d = await Be(e.pages[m], m, a, l);
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);
563
+ for (let d = Math.max(0, t.start ?? 0); d <= c; d++) {
564
+ k(t.signal);
565
+ const m = await ht(e.pages[d], d, i, l);
406
566
  try {
407
- s.push(await Rt(d, i, r, t.signal));
567
+ a.push(await sn(m, s, r, t.signal));
408
568
  } finally {
409
- d.width = 0, d.height = 0;
569
+ m.width = 0, m.height = 0;
410
570
  }
411
- await tt(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);
412
572
  }
413
- return $(t.signal), { blobs: s, diagnostics: l };
573
+ return k(t.signal), { blobs: a, diagnostics: l };
414
574
  }
415
- function Rt(e, t, n, r) {
416
- return $(r), new Promise((a, o) => {
575
+ function sn(e, t, n, r) {
576
+ return k(r), new Promise((i, o) => {
417
577
  const l = () => o(r?.reason ?? new DOMException("The operation was aborted.", "AbortError"));
418
578
  r?.addEventListener("abort", l, { once: !0 });
419
579
  try {
420
- e.toBlob((i) => {
421
- r?.removeEventListener("abort", l), i ? a(i) : 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."));
422
582
  }, t, n);
423
- } catch (i) {
424
- r?.removeEventListener("abort", l), o(i);
583
+ } catch (s) {
584
+ r?.removeEventListener("abort", l), o(s);
425
585
  }
426
586
  });
427
587
  }
428
- function $n(e, t = {}) {
429
- if ($(t.signal), typeof document > "u")
588
+ function Mr(e, t = {}) {
589
+ if (k(t.signal), typeof document > "u")
430
590
  throw new Error("renderPlanToCanvas 需要浏览器环境(SSR 请在客户端钩子中调用)");
431
- const n = t.dpr ?? (typeof devicePixelRatio == "number" ? devicePixelRatio : 1), r = t.dpi ?? 96, a = r / 96 * de, o = t.fontFamily ?? te, l = t.measurer ?? le, i = Math.max(0, t.start ?? 0), s = Math.min(e.pages.length - 1, t.end ?? e.pages.length - 1), c = [], m = q(e, "canvas", t), d = Pt(e, i, s);
432
- for (const h of d)
433
- De(h, t), m.push(h);
434
- if (t.fidelity === "strict" && d.length) throw new et(m);
435
- for (let h = i; h <= s; h++) {
436
- $(t.signal);
437
- const g = e.pages[h], { canvas: f, ctx: w } = ze(g, n, r, t.maxCanvasPixels);
438
- for (const C of g.components)
439
- ge(w, C, a, r, o, l);
440
- c.push(f);
441
- }
442
- return { canvases: c, diagnostics: m };
443
- }
444
- function Pt(e, t, n) {
445
- return n < t ? [] : e.pages.slice(t, n + 1).flatMap((r, a) => r.components.flatMap((o, l) => re(o) ? [{
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++) {
596
+ k(t.signal);
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);
601
+ }
602
+ return { canvases: c, diagnostics: d };
603
+ }
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 }) => ({
446
606
  code: "async-image-required",
447
607
  severity: "warning",
448
608
  format: "canvas",
449
- pageIndex: t + a,
609
+ pageIndex: t + i,
450
610
  componentIndex: l,
611
+ componentPath: s,
451
612
  kind: o.kind,
452
613
  nid: o.nid,
453
614
  message: "Use renderPlanToCanvasAsync or renderPlanToImages to decode and include images."
454
- }] : []));
615
+ })));
455
616
  }
456
- async function kn(e, t = {}) {
617
+ async function vr(e, t = {}) {
457
618
  if (typeof document > "u") throw new Error("renderPlanToCanvasAsync 需要浏览器环境(Node 请使用 PDF 或 XLSX 输出)");
458
- $(t.signal);
459
- const n = await me(e, { ...t, format: "canvas" });
619
+ k(t.signal);
620
+ const n = await Ee(e, { ...t, format: "canvas" });
460
621
  e = n.plan;
461
- const r = [...n.diagnostics, ...q(e, "canvas", t)], a = [], 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);
462
623
  for (let l = Math.max(0, t.start ?? 0); l <= o; l++)
463
- a.push(await Be(e.pages[l], l, t, r));
464
- return { canvases: a, diagnostics: r };
465
- }
466
- async function Be(e, t, n, r) {
467
- const a = n.dpr ?? (typeof devicePixelRatio == "number" ? devicePixelRatio : 1), o = n.dpi ?? 96, l = n.fontFamily ?? te, i = await je(e, t, n, r);
468
- $(n.signal);
469
- const { canvas: s, ctx: c } = ze(e, a, o, n.maxCanvasPixels);
470
- for (const m of e.components) ge(c, m, o / 25.4, o, l, n.measurer ?? le, i);
471
- return s;
624
+ i.push(await ht(e.pages[l], l, t, r));
625
+ return { canvases: i, diagnostics: r };
626
+ }
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);
629
+ k(n.signal);
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;
472
633
  }
473
- async function je(e, t, n, r) {
474
- const a = n.imageLoader ?? wt;
475
- return Mt(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) => {
476
637
  try {
477
- return await a(o, l);
478
- } catch (i) {
479
- if (l?.aborted) throw i;
480
- const s = e.components.findIndex((d) => d.imageData === o), c = e.components[s], m = { code: "image-decode-failed", severity: "warning", format: "canvas", pageIndex: t, componentIndex: s, kind: c.kind, nid: c.nid, message: "Image decoding failed; raster output was cancelled instead of omitting the image." };
481
- throw r.push(m), De(m, n), i;
638
+ return await i(o, l);
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;
482
643
  }
483
644
  }, n.signal);
484
645
  }
485
- function In(e, t = {}) {
486
- const n = t.dpr ?? (typeof devicePixelRatio == "number" ? devicePixelRatio : 1), r = t.dpi ?? 96, a = r / 96 * de, o = t.fontFamily ?? te, l = t.measurer ?? le, i = t.overscan ?? 1, s = t.gapPx ?? 18, c = t.pagesPerFrame ?? 1, m = e.pages.map((u) => u.pageHeightMm * a), d = Math.max(1, ...e.pages.map((u) => u.pageWidthMm * a)), h = { start: 0, end: -1 };
487
- let g = null, f = null, w = null, C = null, x = [], v = 0, R = [], H = 0, N = new AbortController();
488
- const ue = [];
489
- function Ve() {
490
- const u = g;
491
- u.innerHTML = "", f = document.createElement("div"), f.style.cssText = `width:${d}px;margin:0 auto;`, w = document.createElement("div"), C = document.createElement("div"), f.appendChild(w), x = [];
492
- const E = Math.min(e.pages.length, 3 + i * 2);
493
- for (let F = 0; F < E; F++) {
494
- const M = document.createElement("div");
495
- M.style.cssText = `margin:0 auto ${s}px;box-shadow:0 2px 8px rgba(0,0,0,.35);background:#fff;`, f.appendChild(M), x.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);
496
657
  }
497
- f.appendChild(C), u.appendChild(f);
498
- }
499
- async function qe(u, E) {
500
- const F = H, M = await me(e, { ...t, signal: N.signal, format: "canvas", start: E, end: E });
501
- ue.push(...M.diagnostics);
502
- const P = M.plan.pages[E], J = await je(P, E, { ...t, signal: N.signal }, ue);
503
- if (F !== H || !g) return;
504
- const { widthPx: ie, heightPx: oe } = he(P, r);
505
- let L = u.firstElementChild;
506
- (!L || L.tagName !== "CANVAS") && (L = document.createElement("canvas"), u.innerHTML = "", u.appendChild(L));
507
- const we = He(P, n, r, t.maxCanvasPixels);
508
- L.width = we.width, L.height = we.height, L.style.width = `${ie}px`, L.style.height = `${oe}px`;
509
- const z = L.getContext("2d");
510
- if (z) {
511
- z.setTransform(1, 0, 0, 1, 0, 0), z.scale(n, n), z.fillStyle = "#ffffff", z.fillRect(0, 0, ie, oe);
512
- for (const Ke of P.components)
513
- ge(z, Ke, a, r, o, l, J);
514
- L.dataset.canvasPage = String(E), u.style.height = `${oe}px`, u.style.width = `${ie}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`;
515
676
  }
516
677
  }
517
- function Ye(u) {
518
- H++, h.start = u.start, h.end = u.end, w.style.height = `${u.start * s + m.slice(0, u.start).reduce((M, P) => M + P, 0)}px`;
519
- const E = e.pages.length - 1 - u.end;
520
- C.style.height = `${E * s + m.slice(u.end + 1).reduce((M, P) => M + P, 0)}px`;
521
- const F = u.end - u.start + 1;
522
- x.forEach((M, P) => {
523
- if (P < F) {
524
- M.style.display = "";
525
- const J = u.start + P;
526
- M.style.height = `${m[J] ?? 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`;
527
688
  } else
528
- M.style.display = "none";
529
- }), R = [];
530
- for (let M = u.start; M <= u.end; M++) {
531
- const P = x[M - u.start];
689
+ E.style.display = "none";
690
+ }), y = [];
691
+ for (let E = p.start; E <= p.end; E++) {
692
+ const P = w[E - p.start];
532
693
  if (!P) continue;
533
- P.firstElementChild?.dataset?.canvasPage !== String(M) && R.push(M);
694
+ P.firstElementChild?.dataset?.canvasPage !== String(E) && y.push(E);
534
695
  }
535
- ae();
696
+ he();
536
697
  }
537
- function ae() {
538
- v || R.length === 0 || (v = requestAnimationFrame(() => {
698
+ function he() {
699
+ v || y.length === 0 || (v = requestAnimationFrame(() => {
539
700
  v = 0;
540
- let u = Math.max(1, c);
541
- for (; R.length > 0 && u-- > 0; ) {
542
- const E = R.shift(), F = x[E - h.start];
543
- F && qe(F, E).catch(() => {
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(() => {
544
705
  });
545
706
  }
546
- R.length > 0 && ae();
707
+ y.length > 0 && he();
547
708
  }));
548
709
  }
549
- function Y() {
710
+ function ee() {
550
711
  v || (v = requestAnimationFrame(() => {
551
712
  v = 0;
552
- const u = g, E = vt({
553
- pageHeightsPx: m,
554
- viewportHeightPx: u.clientHeight,
555
- scrollTopPx: u.scrollTop,
556
- overscan: i,
557
- gapPx: s
713
+ const p = f, R = en({
714
+ pageHeightsPx: d,
715
+ viewportHeightPx: p.clientHeight,
716
+ scrollTopPx: p.scrollTop,
717
+ overscan: s,
718
+ gapPx: a
558
719
  });
559
- E.start !== h.start || E.end !== h.end ? Ye(E) : ae();
720
+ R.start !== h.start || R.end !== h.end ? vt(R) : he();
560
721
  }));
561
722
  }
562
- let K = null;
723
+ let te = null;
563
724
  return {
564
- attach(u) {
725
+ attach(p) {
565
726
  if (typeof document > "u")
566
727
  throw new Error("createCanvasPager 需要浏览器环境(SSR 请在客户端钩子中调用 attach)");
567
- $(t.signal), N = new AbortController(), t.signal?.addEventListener("abort", pe, { once: !0 }), q(e, "canvas", t), g = u, Ve(), u.addEventListener("scroll", Y, { passive: !0 }), typeof ResizeObserver < "u" && (K = new ResizeObserver(() => Y()), K.observe(u)), Y();
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();
568
729
  },
569
730
  destroy() {
570
- H++, N.abort(), t.signal?.removeEventListener("abort", pe), v && cancelAnimationFrame(v), v = 0, K?.disconnect(), K = null, g?.removeEventListener("scroll", Y), R = [], 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;
571
732
  },
572
733
  window() {
573
734
  return { ...h };
574
735
  }
575
736
  };
576
- function pe() {
577
- N.abort(t.signal?.reason);
737
+ function Ie() {
738
+ L.abort(t.signal?.reason);
578
739
  }
579
740
  }
580
- function _e(e, t, n) {
581
- let r, a;
741
+ function gt(e, t, n) {
742
+ let r, i;
582
743
  if (typeof e == "string") {
583
- const o = Z[e];
584
- if (!o) throw new Error(`未知纸张预设 "${e}"(可用:${Object.keys(Z).join("/")})`);
585
- r = o.widthMm, a = o.heightMm;
586
- } else typeof e == "number" ? (r = e, a = t ?? 297) : (r = e.widthMm, a = e.heightMm);
587
- return n ? { widthMm: a, heightMm: r } : { widthMm: r, heightMm: a };
744
+ const o = oe[e];
745
+ if (!o) throw new Error(`未知纸张预设 "${e}"(可用:${Object.keys(oe).join("/")})`);
746
+ r = o.widthMm, i = o.heightMm;
747
+ } else typeof e == "number" ? (r = e, i = t ?? 297) : (r = e.widthMm, i = e.heightMm);
748
+ return n ? { widthMm: i, heightMm: r } : { widthMm: r, heightMm: i };
588
749
  }
589
- class At {
750
+ class cn {
590
751
  constructor() {
591
752
  this.pages = [], this.pending = null, this.templateParams = void 0;
592
753
  }
@@ -619,18 +780,18 @@ class At {
619
780
  */
620
781
  page(t = "a4", n = {}, r) {
621
782
  this.collect();
622
- 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: i } = _e(
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(
623
784
  t,
624
785
  typeof n == "number" ? n : void 0,
625
786
  o.landscape
626
- ), s = o.margins ?? {};
627
- return this.pending = new $t(this, {
787
+ ), a = o.margins ?? {};
788
+ return this.pending = new dn(this, {
628
789
  widthMm: l,
629
- heightMm: i,
630
- marginTopMm: s.marginTopMm ?? 10,
631
- marginBottomMm: s.marginBottomMm ?? 10,
632
- marginLeftMm: s.marginLeftMm ?? 10,
633
- 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
634
795
  }), this.pending;
635
796
  }
636
797
  collect() {
@@ -646,7 +807,7 @@ class At {
646
807
  };
647
808
  }
648
809
  }
649
- class $t {
810
+ class dn {
650
811
  constructor(t, n) {
651
812
  this.parent = t, this.page = n, this.components = [];
652
813
  }
@@ -661,7 +822,7 @@ class $t {
661
822
  style: r
662
823
  }), this;
663
824
  }
664
- list(t, n, r, a = {}) {
825
+ list(t, n, r, i = {}) {
665
826
  return this.components.push({
666
827
  kind: "list",
667
828
  leftMm: n.leftMm ?? 10,
@@ -669,20 +830,20 @@ class $t {
669
830
  widthMm: n.widthMm ?? 180,
670
831
  dataset: t,
671
832
  columns: r,
672
- ...a
833
+ ...i
673
834
  }), this;
674
835
  }
675
836
  rect(t, n = {}) {
676
837
  return this.components.push({ kind: "rect", ...t, style: n }), this;
677
838
  }
678
- line(t, n, r, a = {}) {
839
+ line(t, n, r, i = {}) {
679
840
  return this.components.push({
680
841
  kind: "line",
681
842
  leftMm: t,
682
843
  topMm: n,
683
844
  widthMm: r,
684
845
  heightMm: 0.5,
685
- style: a
846
+ style: i
686
847
  }), this;
687
848
  }
688
849
  barcode(t, n) {
@@ -695,11 +856,11 @@ class $t {
695
856
  fallbackText: t
696
857
  }), this;
697
858
  }
698
- qrcode(t, n, r, a) {
859
+ qrcode(t, n, r, i) {
699
860
  return this.components.push({
700
861
  kind: "qrcode",
701
862
  leftMm: r,
702
- topMm: a,
863
+ topMm: i,
703
864
  widthMm: n,
704
865
  heightMm: n,
705
866
  fallbackText: t
@@ -715,26 +876,27 @@ class $t {
715
876
  return this.done().build();
716
877
  }
717
878
  }
718
- function Nn() {
719
- return new At();
879
+ function Sr() {
880
+ return new cn();
720
881
  }
721
- function Ln(e, t = {}) {
722
- return Xe([], e), e.fields.map((n) => ({
882
+ function Er(e, t = {}) {
883
+ return Et([], e), e.fields.map((n) => ({
723
884
  field: n.field,
724
885
  header: `${n.label ?? n.field}${n.unit ? ` (${n.unit})` : ""}`,
725
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 } } : {},
726
888
  ...t[n.field]
727
889
  }));
728
890
  }
729
- function k(e, t, n = !1) {
891
+ function O(e, t, n = !1) {
730
892
  if (!Number.isFinite(e) || (n ? e < 0 : e <= 0))
731
893
  throw new Error(`${t} 必须是有限${n ? "非负" : "正"}数`);
732
894
  }
733
- function Q(e, t, n) {
895
+ function ae(e, t, n) {
734
896
  if (e !== void 0 && !["left", "center", "right", "justify", ...n ? ["auto"] : []].includes(e))
735
897
  throw new Error(`${t} 必须是 left/center/right/justify${n ? "/auto" : ""}`);
736
898
  }
737
- function kt(e) {
899
+ function mn(e) {
738
900
  const t = e.layout ?? "page";
739
901
  if (t !== "page" && t !== "wide")
740
902
  throw new Error("layout 必须是 page 或 wide");
@@ -743,18 +905,18 @@ function kt(e) {
743
905
  if (t !== "wide" && e.columnWidthMm !== void 0)
744
906
  throw new Error('columnWidthMm 仅适用于 layout: "wide"');
745
907
  const n = e.columnWidthMm ?? 30;
746
- return k(n, "columnWidthMm"), { layout: t, columnWidthMm: n };
908
+ return O(n, "columnWidthMm"), { layout: t, columnWidthMm: n };
747
909
  }
748
- function It(e) {
910
+ function hn(e) {
749
911
  const t = e.paper === void 0 ? "a4" : e.paper;
750
912
  if (typeof t != "string" && (typeof t != "object" || t === null) || e.landscape !== void 0 && typeof e.landscape != "boolean")
751
913
  throw new Error("paper 必须是纸张预设名或 { widthMm, heightMm } 对象,landscape 必须是布尔值");
752
- if (typeof t == "string" && !Object.prototype.hasOwnProperty.call(Z, t))
753
- throw new Error(`未知纸张预设 "${t}"(可用:${Object.keys(Z).join("/")})`);
754
- const n = _e(t, void 0, e.landscape), r = n.widthMm, a = n.heightMm;
755
- return k(r, "纸张 widthMm"), k(a, "纸张 heightMm"), { widthMm: r, heightMm: a };
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 };
756
918
  }
757
- function Nt(e) {
919
+ function fn(e) {
758
920
  if (e.margins !== void 0 && (!e.margins || typeof e.margins != "object" || Array.isArray(e.margins)))
759
921
  throw new Error("margins 必须是页边距对象");
760
922
  const t = e.margins ?? {}, n = {
@@ -763,133 +925,185 @@ function Nt(e) {
763
925
  marginLeftMm: t.marginLeftMm === void 0 ? 10 : t.marginLeftMm,
764
926
  marginRightMm: t.marginRightMm === void 0 ? 10 : t.marginRightMm
765
927
  };
766
- for (const [r, a] of Object.entries(n)) k(a, r, !0);
928
+ for (const [r, i] of Object.entries(n)) O(i, r, !0);
767
929
  return n;
768
930
  }
769
- function Lt(e, t) {
931
+ function gn(e, t) {
770
932
  const n = e.dataset === void 0 ? "detail" : e.dataset;
771
933
  if (typeof n != "string" || !n.trim())
772
934
  throw new Error("dataset 必须是非空字符串");
773
935
  if (e.title !== void 0 && typeof e.title != "string")
774
936
  throw new Error("title 必须是字符串");
775
- const r = e.titleHeightMm === void 0 ? 10 : e.titleHeightMm, a = e.titleGapMm === void 0 ? 4 : e.titleGapMm;
776
- k(r, "titleHeightMm"), k(a, "titleGapMm", !0);
777
- const o = e.title !== void 0 && e.title.length > 0, l = o ? r + a : 0;
937
+ const r = e.titleHeightMm === void 0 ? 10 : e.titleHeightMm, i = e.titleGapMm === void 0 ? 4 : e.titleGapMm;
938
+ O(r, "titleHeightMm"), O(i, "titleGapMm", !0);
939
+ const o = e.title !== void 0 && e.title.length > 0, l = o ? r + i : 0;
778
940
  if (l >= t)
779
941
  throw new Error("标题高度与间距占满页面,必须为表格保留可用高度");
780
942
  return { dataset: n, titleHeightMm: r, hasTitle: o, titleSpaceMm: l };
781
943
  }
782
- function Dt(e) {
944
+ function un(e) {
783
945
  if (e.listOptions !== void 0 && (!e.listOptions || typeof e.listOptions != "object" || Array.isArray(e.listOptions)))
784
946
  throw new Error("listOptions 必须是列表配置对象");
785
947
  const t = e.listOptions ?? {};
786
- Q(t.align, "listOptions.align", !0), Q(t.headerAlign, "listOptions.headerAlign", !1);
948
+ ae(t.align, "listOptions.align", !0), ae(t.headerAlign, "listOptions.headerAlign", !1);
787
949
  for (const n of ["fontSizePt", "rowHeightMm", "paddingMm"]) {
788
950
  const r = t[n];
789
- r !== void 0 && k(r, `listOptions.${n}`, n === "paddingMm");
951
+ r !== void 0 && O(r, `listOptions.${n}`, n === "paddingMm");
790
952
  }
791
953
  return t;
792
954
  }
793
- function Ft(e) {
955
+ function pn(e) {
794
956
  let t = 0, n = 0;
795
- for (const [r, a] of e.entries()) {
796
- if (!a || typeof a.header != "string" || typeof a.field != "string" || !a.field.trim())
957
+ for (const [r, i] of e.entries()) {
958
+ if (!i || typeof i.header != "string" || typeof i.field != "string" || !i.field.trim())
797
959
  throw new Error(`columns[${r}] 需要字符串 header 与非空 field`);
798
- Q(a.align, `columns[${r}].align`, !0), Q(a.headerAlign, `columns[${r}].headerAlign`, !1), a.flex !== void 0 && k(a.flex, `columns[${r}].flex`), a.widthMm !== void 0 ? (k(a.widthMm, `columns[${r}].widthMm`), t += a.widthMm) : n = Math.max(n, a.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);
799
961
  }
800
962
  return { fixedWidthMm: t, maxFlex: n };
801
963
  }
802
- function Ot(e, t, n, r) {
803
- const { fixedWidthMm: a, maxFlex: o } = Ft(e.columns);
804
- if (t === "page" && a > r)
805
- throw new Error(`固定列宽 ${a}mm 超出页面可用宽度 ${r}mm`);
806
- const l = r - a;
964
+ function wn(e, t, n, r) {
965
+ const { fixedWidthMm: i, maxFlex: o } = pn(e.columns);
966
+ if (t === "page" && i > r)
967
+ throw new Error(`固定列宽 ${i}mm 超出页面可用宽度 ${r}mm`);
968
+ const l = r - i;
807
969
  if (t === "page" && o > 0 && l <= 0)
808
970
  throw new Error("固定列占满页面可用宽度,自动列需要正的剩余宽度");
809
- const i = o > 0 ? e.columns.reduce((c, m) => c + (m.widthMm === void 0 ? (m.flex ?? 1) / o : 0), 0) : 0;
810
- return { columns: e.columns.map(({ widthMm: c, flex: m, ...d }, h) => {
811
- const g = c ?? (t === "wide" ? n * (m ?? 1) : l * ((m ?? 1) / o) / i);
812
- return k(g, `columns[${h}] 分配后的 widthMm`), { ...d, widthMm: g };
813
- }), fixedWidthMm: a, maxFlex: o };
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 };
975
+ }), fixedWidthMm: i, maxFlex: o };
814
976
  }
815
- function Dn(e) {
977
+ function Cr(e) {
816
978
  if (!e || typeof e != "object")
817
979
  throw new Error("标准明细模板需要 options 对象");
818
980
  if (!Array.isArray(e.columns) || e.columns.length === 0)
819
981
  throw new Error("columns 至少需要一列");
820
- const { layout: t, columnWidthMm: n } = kt(e), r = It(e);
821
- let a = r.widthMm;
822
- const o = r.heightMm, l = Nt(e);
823
- let i = a - l.marginLeftMm - l.marginRightMm;
824
- const s = o - l.marginTopMm - l.marginBottomMm;
825
- if (t === "page" && i <= 0 || s <= 0)
982
+ const { layout: t, columnWidthMm: n } = mn(e), r = hn(e);
983
+ let i = r.widthMm;
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)
826
988
  throw new Error("页边距占满纸张,必须保留正的可用宽度和高度");
827
- const { dataset: c, titleHeightMm: m, hasTitle: d, titleSpaceMm: h } = Lt(e, s), g = Dt(e), { columns: f, fixedWidthMm: w, maxFlex: C } = Ot(e, t, n, i);
828
- t === "wide" && (i = f.reduce((v, R) => v + R.widthMm, 0), k(i, "宽表总列宽"), a = i + l.marginLeftMm + l.marginRightMm, k(a, "宽表总宽度"));
829
- const x = { widthMm: a, heightMm: o, ...l, components: [], ...t === "wide" ? { layout: t } : {} };
830
- return d && x.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({
831
993
  kind: "text",
832
994
  text: e.title,
833
995
  leftMm: l.marginLeftMm,
834
996
  topMm: l.marginTopMm,
835
- widthMm: i,
836
- heightMm: m,
997
+ widthMm: s,
998
+ heightMm: d,
837
999
  style: { fontSize: 16, bold: !0, align: "center", verticalAlign: "middle", ...e.titleStyle }
838
- }), x.components.push({
1000
+ }), w.components.push({
839
1001
  align: "auto",
840
1002
  headerAlign: "center",
841
- ...g,
1003
+ ...f,
842
1004
  kind: "list",
843
1005
  ...t === "wide" ? { layout: t } : {},
844
- ...d ? { title: e.title } : {},
1006
+ ...m ? { title: e.title } : {},
845
1007
  dataset: c,
846
- columns: f,
1008
+ columns: g,
847
1009
  leftMm: l.marginLeftMm,
848
1010
  topMm: l.marginTopMm + h,
849
- widthMm: t === "wide" || C > 0 ? i : w
850
- }), e.params === void 0 ? { pages: [x] } : { params: e.params, pages: [x] };
1011
+ widthMm: t === "wide" || S > 0 ? s : C
1012
+ }), e.params === void 0 ? { pages: [w] } : { params: e.params, pages: [w] };
851
1013
  }
852
- function Fn(e) {
1014
+ function Tr(e) {
853
1015
  if (e.components !== void 0 && e.pages !== void 0) throw new TypeError("标签 components 与 pages 只能选择一种");
854
- const { dataset: t, rowKey: n, copies: r, params: a } = e, o = e.pages ?? [{ components: e.components ?? [] }], l = {
1016
+ const { dataset: t, rowKey: n, copies: r, params: i } = e, o = e.pages ?? [{ components: e.components ?? [] }], l = {
855
1017
  repeat: { dataset: t, ...n === void 0 ? {} : { rowKey: n }, ...r === void 0 ? {} : { copies: r } },
856
- ...a === void 0 ? {} : { params: a },
857
- pages: o.map((s) => ({
858
- widthMm: s.widthMm ?? e.widthMm ?? 80,
859
- heightMm: s.heightMm ?? e.heightMm ?? 55,
1018
+ ...i === void 0 ? {} : { params: i },
1019
+ pages: o.map((a) => ({
1020
+ widthMm: a.widthMm ?? e.widthMm ?? 80,
1021
+ heightMm: a.heightMm ?? e.heightMm ?? 55,
860
1022
  marginTopMm: 0,
861
1023
  marginRightMm: 0,
862
1024
  marginBottomMm: 0,
863
1025
  marginLeftMm: 0,
864
- components: s.components,
865
- ...s.meta === void 0 ? {} : { meta: s.meta }
1026
+ components: a.components,
1027
+ ...a.meta === void 0 ? {} : { meta: a.meta }
866
1028
  }))
867
- }, i = $e(l);
868
- if (!i.ok) throw new ke(i.errors);
1029
+ }, s = Xe(l);
1030
+ if (!s.ok) throw new Ze(s.errors);
869
1031
  return JSON.parse(JSON.stringify(l));
870
1032
  }
871
- function Ht(e) {
1033
+ function bn(e) {
872
1034
  if (!e || typeof e != "object" || !e.repeat)
873
- throw new ce("config", "defineLabelReport 需要带 repeat 的固定标签模板");
874
- const t = $e(e);
875
- if (!t.ok) throw new ke(t.errors);
1035
+ throw new ve("config", "defineLabelReport 需要带 repeat 的固定标签模板");
1036
+ const t = Xe(e);
1037
+ if (!t.ok) throw new Ze(t.errors);
876
1038
  return e.repeat.dataset;
877
1039
  }
878
- function ye(e, t) {
879
- if (!Array.isArray(e)) throw new ce("validate", "标签数据应为对象数组;请从业务响应中提取行数组");
1040
+ function He(e, t) {
1041
+ if (!Array.isArray(e)) throw new ve("validate", "标签数据应为对象数组;请从业务响应中提取行数组");
880
1042
  return { [t]: e };
881
1043
  }
882
- function On(e) {
883
- const { template: t, rows: n, load: r, dataSchema: a, params: o, pagination: l, dataValidation: i } = e, s = Ht(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);
884
1046
  if (n !== void 0 == (r !== void 0) || r !== void 0 && typeof r != "function")
885
- throw new ce("config", "标签报表应且只能配置 rows 或 load 其中一种数据来源");
886
- const c = { template: t, params: o, pagination: l, dataValidation: i, ...a === void 0 ? {} : { dataSchema: { [s]: a } } };
887
- return r ? Ze({ ...c, load: r, mapData: (m) => ye(m, s) }) : { ...c, datasets: ye(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) };
888
1050
  }
889
- function Hn(e) {
1051
+ function $r(e) {
890
1052
  return e;
891
1053
  }
892
- 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 {
893
1107
  constructor(t, n) {
894
1108
  super(n), this.code = t, this.name = "ReportTemplateStoreError";
895
1109
  }
@@ -897,626 +1111,840 @@ class D extends Error {
897
1111
  function I(e) {
898
1112
  return JSON.parse(JSON.stringify(e));
899
1113
  }
900
- function S(e) {
1114
+ function T(e) {
901
1115
  if (!e?.aborted) return;
902
1116
  const t = new Error("模板操作已取消");
903
1117
  throw t.name = "AbortError", t;
904
1118
  }
905
- function ve(e) {
1119
+ function _e(e) {
906
1120
  const t = e ? Number(e.revision) : 0;
907
- 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", "修订号无效或已达上限");
908
1122
  return String(t + 1);
909
1123
  }
910
- function zn(e, t = {}) {
911
- const n = async (l, i) => {
912
- S(i);
913
- const s = await e.read(l, i);
914
- return S(i), s ? I(s) : void 0;
915
- }, r = async (l, i) => {
916
- const s = await n(l, i.signal);
917
- if ((s?.revision ?? null) !== i.expectedRevision) throw new D("conflict", "模板已变化,请重新读取后提交");
918
- return s;
919
- }, a = async (l, i, s) => {
920
- if (S(i.signal), !await e.compareAndSwap(l.id, i.expectedRevision, I(l), { signal: i.signal, ...s ? { publication: I(s) } : {} })) throw new D("conflict", "模板已被其他请求更新");
921
- return I(l);
922
- }, o = async (l, i, 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) => {
923
1137
  if (t.beforePublish) {
924
- S(s.signal);
925
- const g = await t.beforePublish({ document: U(i), previous: l.published ? U(l.published) : void 0, signal: s.signal });
926
- if (!g || g.ok !== !0) throw new D("review", g?.issues?.find((f) => f.severity === "error")?.message ?? "模板发布检查未通过");
927
- 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);
928
1144
  }
929
- const m = ve(l), d = U({ ...i, revision: m }), h = { revision: m, document: d, publishedAt: (t.now?.() ?? /* @__PURE__ */ new Date()).toISOString() };
930
- return c !== void 0 && (h.restoredFrom = c), a({ id: l.id, revision: m, publishedRevision: m, published: d }, s, h);
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);
931
1147
  };
932
1148
  return {
933
- list: async (l) => {
934
- S(l);
935
- const i = await e.list(l);
936
- return S(l), I(i);
1149
+ list: async (a) => {
1150
+ T(a);
1151
+ const c = await e.list(a);
1152
+ return T(a), I(c);
937
1153
  },
938
- get: async (l, i = {}) => {
939
- const s = await n(l, i.signal), c = i.draft ? s?.draft : s?.published;
940
- return c ? U(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;
941
1157
  },
942
- history: async (l, i) => {
943
- S(i);
944
- const s = await e.history(l, i);
945
- return S(i), I(s);
1158
+ history: async (a, c) => {
1159
+ T(c);
1160
+ const d = await e.history(a, c);
1161
+ return T(c), I(d);
946
1162
  },
947
- saveDraft: async (l, i) => {
948
- i = { ...i }, S(i.signal);
949
- const s = U(t.migrate ? await t.migrate(l) : l), c = await r(s.id, i), m = ve(c);
950
- return a({
951
- id: s.id,
952
- revision: m,
953
- draft: { ...s, revision: m },
954
- ...c?.publishedRevision ? { publishedRevision: c.publishedRevision, published: c.published } : {}
955
- }, i);
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);
956
1172
  },
957
- publish: async (l, i) => {
958
- i = { ...i };
959
- const s = await r(l, i);
960
- if (!s) throw new D("missing", "模板不存在");
961
- if (!s.draft) throw new D("draft", "没有可发布的草稿");
962
- return o(s, s.draft, i);
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);
963
1179
  },
964
- rollback: async (l, i, s) => {
965
- s = { ...s };
966
- const c = await r(l, s);
967
- if (!c) throw new D("missing", "模板不存在");
968
- S(s.signal);
969
- const m = await e.getVersion(l, i, s.signal);
970
- if (!m) throw new D("history", "历史修订不存在");
971
- return o(c, m.document, s, i);
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);
972
1188
  }
973
1189
  };
974
1190
  }
975
- function Wn() {
1191
+ function Ar() {
976
1192
  const e = /* @__PURE__ */ new Map(), t = /* @__PURE__ */ new Map();
977
1193
  return {
978
1194
  read: async (n, r) => {
979
- S(r);
980
- const a = e.get(n);
981
- return a ? I(a) : void 0;
1195
+ T(r);
1196
+ const i = e.get(n);
1197
+ return i ? I(i) : void 0;
982
1198
  },
983
- list: async (n) => (S(n), Array.from(e.values(), ({ id: r, revision: a, publishedRevision: o }) => ({ id: r, revision: a, ...o ? { publishedRevision: o } : {} }))),
984
- history: async (n, r) => (S(r), Array.from(t.get(n)?.values() ?? [], (a) => I(a))),
985
- getVersion: async (n, r, a) => {
986
- S(a);
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))),
1201
+ getVersion: async (n, r, i) => {
1202
+ T(i);
987
1203
  const o = t.get(n)?.get(r);
988
1204
  return o ? I(o) : void 0;
989
1205
  },
990
- compareAndSwap: async (n, r, a, o) => {
991
- if (S(o.signal), (e.get(n)?.revision ?? null) !== r) return !1;
992
- if (a.id !== n) throw new D("history", "状态 ID 与存储 ID 不一致");
993
- const l = I(a), i = o.publication;
994
- if (i) {
995
- const s = t.get(n) ?? /* @__PURE__ */ new Map();
996
- if (s.has(i.revision) || i.revision !== a.revision || i.document.id !== n) throw new D("history", "发布修订不可覆盖,且必须与状态修订和模板 ID 一致");
997
- s.set(i.revision, I(i)), t.set(n, s);
1206
+ compareAndSwap: async (n, r, i, o) => {
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);
998
1214
  }
999
1215
  return e.set(n, l), !0;
1000
1216
  }
1001
1217
  };
1002
1218
  }
1003
- function Bn(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) {
1004
1426
  return e.map((t) => t.map((n) => /[\t\r\n"]/.test(n) ? `"${n.replace(/"/g, '""')}"` : n).join(" ")).join(`\r
1005
1427
  `);
1006
1428
  }
1007
- function zt(e, t) {
1429
+ function On(e, t) {
1008
1430
  const n = e[e.length - 1];
1009
1431
  e.length > 1 && n?.length === 1 && n[0] === "" && /[\r\n]$/.test(t) && e.pop();
1010
1432
  }
1011
- function jn(e, t = 1e4) {
1433
+ function Ir(e, t = 1e4) {
1012
1434
  if (e.length > 4 * 1024 * 1024) throw new Error("Clipboard text limit exceeded");
1013
1435
  const n = [[]];
1014
- let r = "", a = !1, o = !1, l = 0;
1015
- function i() {
1436
+ let r = "", i = !1, o = !1, l = 0;
1437
+ function s() {
1016
1438
  if (++l > t) throw new Error("Clipboard cell limit exceeded");
1017
1439
  n[n.length - 1].push(r), r = "", o = !1;
1018
1440
  }
1019
- for (let s = 0; s < e.length; s++) {
1020
- const c = e[s];
1021
- if (a) {
1441
+ for (let a = 0; a < e.length; a++) {
1442
+ const c = e[a];
1443
+ if (i) {
1022
1444
  if (c !== '"') {
1023
1445
  r += c;
1024
1446
  continue;
1025
1447
  }
1026
- if (e[s + 1] === '"') {
1027
- r += '"', s++;
1448
+ if (e[a + 1] === '"') {
1449
+ r += '"', a++;
1028
1450
  continue;
1029
1451
  }
1030
- a = !1, o = !0;
1452
+ i = !1, o = !0;
1031
1453
  continue;
1032
1454
  }
1033
1455
  if (c === '"' && !r && !o) {
1034
- a = !0;
1456
+ i = !0;
1035
1457
  continue;
1036
1458
  }
1037
1459
  if (c === " ") {
1038
- i();
1460
+ s();
1039
1461
  continue;
1040
1462
  }
1041
1463
  if (c === "\r" || c === `
1042
1464
  `) {
1043
- i(), n.push([]), c === "\r" && e[s + 1] === `
1044
- ` && s++;
1465
+ s(), n.push([]), c === "\r" && e[a + 1] === `
1466
+ ` && a++;
1045
1467
  continue;
1046
1468
  }
1047
1469
  if (o) throw new Error("Invalid quoted clipboard value");
1048
1470
  r += c;
1049
1471
  }
1050
- if (a) throw new Error("Unclosed clipboard quote");
1051
- return i(), zt(n, e), n;
1472
+ if (i) throw new Error("Unclosed clipboard quote");
1473
+ return s(), On(n, e), n;
1052
1474
  }
1053
- class Wt extends Error {
1475
+ class In extends Error {
1054
1476
  constructor(t, n, r) {
1055
- const a = typeof n.label == "string" ? n.label : "单元格", o = {
1056
- definition: `${a}的编辑器配置无效`,
1057
- type: `${a}的编辑器与数据类型不一致`,
1058
- required: `${a}不能为空`,
1059
- min: `${a}不能小于 ${r}`,
1060
- max: `${a}不能大于 ${r}`,
1061
- precision: `${a}最多保留 ${r} 位小数`,
1062
- length: `${a}最多允许 ${r} 个字符`,
1063
- choice: `${a}请选择有效选项`,
1064
- date: `${a}请输入有效日期(YYYY-MM-DD)`
1477
+ const i = typeof n.label == "string" ? n.label : "单元格", o = {
1478
+ definition: `${i}的编辑器配置无效`,
1479
+ type: `${i}的编辑器与数据类型不一致`,
1480
+ required: `${i}不能为空`,
1481
+ min: `${i}不能小于 ${r}`,
1482
+ max: `${i}不能大于 ${r}`,
1483
+ precision: `${i}最多保留 ${r} 位小数`,
1484
+ length: `${i}最多允许 ${r} 个字符`,
1485
+ choice: `${i}请选择有效选项`,
1486
+ date: `${i}请输入有效日期(YYYY-MM-DD)`
1065
1487
  };
1066
1488
  super(o[t]), this.code = t, this.field = n, this.expected = r, this.name = "ReportCellFieldError";
1067
1489
  }
1068
1490
  }
1069
- function p(e, t, n) {
1070
- throw new Wt(t, e, n);
1491
+ function b(e, t, n) {
1492
+ throw new In(t, e, n);
1071
1493
  }
1072
- function Ue(e) {
1494
+ function wt(e) {
1073
1495
  if (typeof e != "string" || !/^\d{4}-\d{2}-\d{2}$/.test(e) || e.startsWith("0000-")) return !1;
1074
1496
  const t = /* @__PURE__ */ new Date(`${e}T00:00:00.000Z`);
1075
1497
  return Number.isFinite(t.getTime()) && t.toISOString().slice(0, 10) === e;
1076
1498
  }
1077
- function Bt(e) {
1499
+ function Nn(e) {
1078
1500
  const [t = "", n = "0"] = String(e).toLowerCase().split("e");
1079
1501
  return Math.max(0, (t.split(".")[1]?.length ?? 0) - Number(n));
1080
1502
  }
1081
- function jt(e, t) {
1082
- 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 && Bt(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);
1083
1505
  }
1084
- function _t(e, t) {
1085
- Ue(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);
1086
1508
  }
1087
- function Ut(e) {
1088
- [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");
1089
1511
  }
1090
- function Gt(e) {
1091
- [e.min, e.max].some((t) => t !== void 0 && !Ue(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");
1092
1514
  }
1093
- function Vt(e, t) {
1094
- (!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");
1095
1517
  const n = e.valueType === "text" ? "string" : e.valueType, r = /* @__PURE__ */ new Set();
1096
- for (const a of t.options)
1097
- (!a || typeof a.value !== n || typeof a.value == "number" && !Number.isFinite(a.value)) && p(t, "definition"), a.label !== void 0 && typeof a.label != "string" && p(t, "definition"), r.has(a.value) && p(t, "definition"), r.add(a.value);
1518
+ for (const i of t.options)
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);
1098
1520
  }
1099
- function qt(e) {
1100
- 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");
1101
1523
  }
1102
- function Yt(e, t) {
1103
- (!t || typeof t != "object" || Array.isArray(t) || !["text", "number", "boolean", "enum", "date"].includes(t.type)) && p(t ?? { type: "text" }, "definition"), qt(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" && Ut(t), t.type === "text" && t.maxLength !== void 0 && (!Number.isInteger(t.maxLength) || t.maxLength < 0) && p(t, "definition"), t.type === "date" && Gt(t), t.type === "enum" && Vt(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);
1104
1526
  }
1105
- function _n(e, t, n) {
1106
- if (!e.editable) throw new rt("readonly");
1107
- n && Yt(e, n);
1108
- const r = at(e, t);
1109
- return n ? (n.required && typeof r == "string" && !r.trim() && p(n, "required"), r === null || r === "" ? (n.required && p(n, "required"), r) : (n.type === "number" && jt(n, r), n.type === "date" && _t(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((a) => Object.is(a.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;
1110
1532
  }
1111
- class b extends Error {
1533
+ class M extends Error {
1112
1534
  constructor(t) {
1113
1535
  super(`Report calculation: ${t}`), this.code = t, this.name = "ReportCalculationError";
1114
1536
  }
1115
1537
  }
1116
- function B(e) {
1538
+ function G(e) {
1117
1539
  if (!e?.aborted) return;
1118
1540
  const t = new Error("Calculation cancelled");
1119
1541
  throw t.name = "AbortError", t;
1120
1542
  }
1121
- async function ee(e, t = 1) {
1543
+ async function se(e, t = 1) {
1122
1544
  const n = Math.floor(e.scanned / 2048);
1123
- if (e.scanned += t, e.scanned > e.maxScanned) throw new b("limit");
1124
- B(e.signal), Math.floor(e.scanned / 2048) > n && (await e.yieldToHost(), B(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));
1125
1547
  }
1126
- function fe(e) {
1548
+ function ke(e) {
1127
1549
  return e.table?.role === "header" ? -Math.max(1, e.grid?.cells.length ?? 1) : e.table?.rowIndex ?? 0;
1128
1550
  }
1129
- function xe(e, t, n) {
1130
- if (![t.pageIndex, t.componentIndex, t.rowIndex, t.columnIndex].every((i) => Number.isSafeInteger(i) && i >= 0)) throw new b("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");
1131
1553
  const r = e.pages[t.pageIndex]?.components[t.componentIndex];
1132
- if (!r?.grid || t.rowIndex >= r.grid.cells.length) throw new b("selection");
1133
- const a = r.grid.colWidthsMm?.length ?? r.grid.cells.reduce((i, s) => Math.max(i, s.length), 1);
1134
- if (t.columnIndex >= a) throw new b("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");
1135
1557
  const o = r.table, l = e.pages[n.pageIndex]?.components[n.componentIndex]?.table;
1136
1558
  if (o && l && o.id === l.id) {
1137
- const i = l.columnKeys.indexOf(o.columnKeys[t.columnIndex] ?? "");
1138
- if (i < 0) throw new b("selection");
1139
- return { grid: o.id, row: fe(r) + t.rowIndex, column: i };
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 };
1140
1562
  }
1141
1563
  return { grid: `${t.pageIndex}:${t.componentIndex}`, row: t.rowIndex, column: t.columnIndex };
1142
1564
  }
1143
- function Kt(e, t, n) {
1144
- const r = xe(e, t.anchor, t.anchor), a = xe(e, t.focus, t.anchor);
1145
- if (r.grid !== a.grid) throw new b("selection");
1146
- const o = (Math.abs(r.row - a.row) + 1) * (Math.abs(r.column - a.column) + 1);
1147
- if (!Number.isSafeInteger(o) || o > n) throw new b("limit");
1148
- return { grid: r.grid, rowStart: Math.min(r.row, a.row), rowEnd: Math.max(r.row, a.row), columnStart: Math.min(r.column, a.column), columnEnd: Math.max(r.column, a.column), origin: e.pages[t.anchor.pageIndex].components[t.anchor.componentIndex].table };
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");
1568
+ const o = (Math.abs(r.row - i.row) + 1) * (Math.abs(r.column - i.column) + 1);
1569
+ if (!Number.isSafeInteger(o) || o > n) throw new M("limit");
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 };
1149
1571
  }
1150
- function Jt(e) {
1572
+ function Wn(e) {
1151
1573
  if (!e) return !1;
1152
1574
  const t = e.replace(/"[^"]*"|\\.|\[(?![hms]+\])[^\]]*\]/gi, "");
1153
1575
  return /[ymdhs]/i.test(t);
1154
1576
  }
1155
- function Xt(e) {
1156
- if (e.valueType === "text" || e.valueType === "boolean" || Jt(e.numberFormat)) return null;
1577
+ function Vn(e) {
1578
+ if (e.valueType === "text" || e.valueType === "boolean" || Wn(e.numberFormat)) return null;
1157
1579
  const t = e.value;
1158
1580
  if (typeof t != "number" || !Number.isFinite(t)) return null;
1159
- if (Number.isInteger(t) && !Number.isSafeInteger(t)) throw new b("precision");
1581
+ if (Number.isInteger(t) && !Number.isSafeInteger(t)) throw new M("precision");
1160
1582
  return t;
1161
1583
  }
1162
- function Zt(e, t, n) {
1584
+ function Un(e, t, n) {
1163
1585
  if (e.seen.has(n)) return;
1164
1586
  e.seen.add(n), e.selected++;
1165
- const r = t ? Xt(t) : null;
1587
+ const r = t ? Vn(t) : null;
1166
1588
  r === null ? e.excluded++ : e.values.push(r);
1167
1589
  }
1168
- function Qt(e, t, n, r) {
1590
+ function qn(e, t, n, r) {
1169
1591
  return r.origin ? e.table?.id === r.origin.id : `${t}:${n}` === r.grid;
1170
1592
  }
1171
- function en(e, t, n) {
1593
+ function Gn(e, t, n) {
1172
1594
  return n.origin ? n.origin.columnKeys.indexOf(e.table.columnKeys[t] ?? "") : t;
1173
1595
  }
1174
- function tn(e, t, n, r) {
1175
- const a = r.origin ? fe(e) + t : t, o = en(e, n, r);
1176
- return a < r.rowStart || a > r.rowEnd || o < r.columnStart || o > r.columnEnd ? null : `${r.grid}:${a}:${o}`;
1596
+ function Jn(e, t, n, r) {
1597
+ const i = r.origin ? ke(e) + t : t, o = Gn(e, n, r);
1598
+ return i < r.rowStart || i > r.rowEnd || o < r.columnStart || o > r.columnEnd ? null : `${r.grid}:${i}:${o}`;
1177
1599
  }
1178
- function nn(e, t) {
1179
- const n = t.origin ? fe(e) : 0, r = Math.max(0, t.rowStart - n), a = Math.min(e.grid.cells.length, t.rowEnd - n + 1);
1180
- return a > r ? a : 0;
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);
1602
+ return i > r ? i : 0;
1181
1603
  }
1182
- async function rn(e, t, n, r, a) {
1604
+ async function Yn(e, t, n, r, i) {
1183
1605
  const o = e.grid;
1184
- if (t > r.maxScanned) throw new b("limit");
1185
- const l = o.colWidthsMm?.length ?? o.cells.reduce((s, c) => Math.max(s, c.length), 1);
1186
- if (l > r.maxScanned) throw new b("limit");
1187
- const i = /* @__PURE__ */ new Map();
1188
- for (let s = 0; s < t; s++) {
1189
- s > 0 && s % 2048 === 0 && (await r.yieldToHost(), B(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));
1190
1612
  let c = 0;
1191
- for (const m of o.cells[s]) {
1192
- for (await ee(r); c < l && (i.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++;
1193
1615
  if (c >= l) break;
1194
- const d = Math.max(1, Math.min(m?.colSpan ?? 1, l - c)), h = Math.min(o.cells.length, s + Math.max(1, m?.rowSpan ?? 1));
1195
- d > 1 && await ee(r, d - 1);
1196
- for (let f = c; f < c + d; f++) i.set(f, h);
1197
- const g = tn(e, s, c, n);
1198
- g && Zt(a, m, g), c += d;
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;
1199
1621
  }
1200
1622
  }
1201
1623
  }
1202
- async function an(e, t, n) {
1624
+ async function Xn(e, t, n) {
1203
1625
  const r = { values: [], seen: /* @__PURE__ */ new Set(), excluded: 0, selected: 0 };
1204
- for (let a = 0; a < e.pages.length; a++) {
1205
- await ee(n);
1206
- const o = e.pages[a];
1626
+ for (let i = 0; i < e.pages.length; i++) {
1627
+ await se(n);
1628
+ const o = e.pages[i];
1207
1629
  for (let l = 0; l < o.components.length; l++) {
1208
- await ee(n);
1209
- const i = o.components[l];
1210
- if (!i.grid || !Qt(i, a, l, t) || i.table && i.table.role !== "body") continue;
1211
- const s = nn(i, t);
1212
- s && await rn(i, 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);
1213
1635
  }
1214
1636
  }
1215
1637
  return r;
1216
1638
  }
1217
- function V(e) {
1218
- if (!Number.isFinite(e)) throw new b("overflow");
1639
+ function X(e) {
1640
+ if (!Number.isFinite(e)) throw new M("overflow");
1219
1641
  return e;
1220
1642
  }
1221
- function on(e) {
1643
+ function Zn(e) {
1222
1644
  let t = 0, n = 0;
1223
1645
  for (const r of e) {
1224
- const a = r - n, o = V(t + a);
1225
- n = o - t - a, t = o;
1646
+ const i = r - n, o = X(t + i);
1647
+ n = o - t - i, t = o;
1226
1648
  }
1227
1649
  return t;
1228
1650
  }
1229
- async function Ee(e, t) {
1651
+ async function Ue(e, t) {
1230
1652
  let n = [...e], r = new Array(e.length);
1231
1653
  for (let o = 1; o < e.length; o *= 2) {
1232
1654
  for (let l = 0; l < e.length; l += o * 2) {
1233
- const i = Math.min(l + o, e.length), s = Math.min(l + o * 2, e.length);
1234
- let c = l, m = i;
1235
- for (let d = l; d < s; d++)
1236
- r[d] = m >= s || c < i && n[c] <= n[m] ? n[c++] : n[m++], d % 2048 === 0 && (await t.yieldToHost(), B(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));
1237
1659
  }
1238
1660
  [n, r] = [r, n];
1239
1661
  }
1240
- const a = Math.floor(n.length / 2);
1241
- return n.length % 2 ? n[a] : V(n[a - 1] / 2 + n[a] / 2);
1662
+ const i = Math.floor(n.length / 2);
1663
+ return n.length % 2 ? n[i] : X(n[i - 1] / 2 + n[i] / 2);
1242
1664
  }
1243
- function sn(e) {
1244
- const t = on(e);
1665
+ function Qn(e) {
1666
+ const t = Zn(e);
1245
1667
  let n = 1 / 0, r = -1 / 0;
1246
- for (const a of e)
1247
- n = Math.min(n, a), r = Math.max(r, a);
1668
+ for (const i of e)
1669
+ n = Math.min(n, i), r = Math.max(r, i);
1248
1670
  return { SUM: t, AVERAGE: t / e.length, AVG: t / e.length, MIN: n, MAX: r, COUNT: e.length };
1249
1671
  }
1250
- function ln(e, t) {
1251
- if (typeof e != "string" || e.length > 256) throw new b("expression");
1672
+ function er(e, t) {
1673
+ if (typeof e != "string" || e.length > 256) throw new M("expression");
1252
1674
  const n = e.toUpperCase().match(/(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?|[A-Z_]+|[()+\-*/]|\S/g) ?? [];
1253
- if (!n.length || n.length > 64) throw new b("expression");
1675
+ if (!n.length || n.length > 64) throw new M("expression");
1254
1676
  let r = 0;
1255
- function a(i) {
1256
- if (i > 16) throw new b("expression");
1257
- const s = n[r++];
1258
- if (s === "+" || s === "-") return (s === "-" ? -1 : 1) * a(i + 1);
1259
- if (s === "(") {
1260
- const c = o(0, i + 1);
1261
- if (n[r++] !== ")") throw new b("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");
1262
1684
  return c;
1263
1685
  }
1264
- if (s && /^(?:SUM|AVERAGE|AVG|MIN|MAX|COUNT|MEDIAN)$/.test(s) && Object.prototype.hasOwnProperty.call(t, s)) return V(t[s]);
1265
- if (s && /^(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?$/.test(s)) return V(Number(s));
1266
- throw new b("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");
1267
1689
  }
1268
- function o(i, s) {
1269
- let c = a(s);
1690
+ function o(s, a) {
1691
+ let c = i(a);
1270
1692
  for (; r < n.length; ) {
1271
- const m = n[r], d = m === "+" || m === "-" ? 1 : m === "*" || m === "/" ? 2 : 0;
1272
- if (!d || d < i) break;
1693
+ const d = n[r], m = d === "+" || d === "-" ? 1 : d === "*" || d === "/" ? 2 : 0;
1694
+ if (!m || m < s) break;
1273
1695
  r++;
1274
- const h = o(d + 1, s + 1);
1275
- if (m === "/" && h === 0) throw new b("division");
1276
- c = V(m === "+" ? c + h : m === "-" ? c - h : m === "*" ? c * h : c / h);
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);
1277
1699
  }
1278
1700
  return c;
1279
1701
  }
1280
1702
  const l = o(1, 0);
1281
- if (r !== n.length) throw new b("expression");
1703
+ if (r !== n.length) throw new M("expression");
1282
1704
  return l;
1283
1705
  }
1284
- function cn(e) {
1706
+ function tr(e) {
1285
1707
  const t = e.maxCells ?? 1e5, n = e.maxScannedCells ?? 2e5, r = e.precision ?? 2;
1286
- if (![t, n].every((a) => Number.isSafeInteger(a) && a >= 1 && a <= 2e6)) throw new b("limit");
1287
- if (!Number.isInteger(r) || r < 0 || r > 12) throw new b("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");
1288
1710
  return { maxCells: t, maxScanned: n, precision: r };
1289
1711
  }
1290
- async function Un(e, t, n = {}) {
1291
- const r = cn(n), a = { scanned: 0, maxScanned: r.maxScanned, signal: n.signal, yieldToHost: n.yieldToHost ?? (() => new Promise((s) => setTimeout(s, 0))) };
1292
- B(a.signal);
1293
- const o = await an(e, Kt(e, t, r.maxCells), a), l = n.operation ?? "sum";
1294
- if (!["sum", "average", "min", "max", "count", "median", "expression"].includes(l)) throw new b("expression");
1295
- let i = null;
1296
- if (l === "count") i = 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;
1297
1719
  else if (o.values.length)
1298
- if (l === "median") i = await Ee(o.values, a);
1720
+ if (l === "median") s = await Ue(o.values, i);
1299
1721
  else {
1300
- const s = sn(o.values);
1301
- l === "expression" ? (/\bMEDIAN\b/i.test(n.expression ?? "") && (s.MEDIAN = await Ee(o.values, a)), i = ln(n.expression ?? "", s)) : i = 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()];
1302
1724
  }
1303
- if (B(a.signal), i !== null && Number.isInteger(i) && !Number.isSafeInteger(i)) throw new b("precision");
1304
- return { value: i, formatted: i === null ? "—" : i.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 };
1305
1727
  }
1306
1728
  class A extends Error {
1307
1729
  constructor(t, n) {
1308
1730
  super(t), this.path = n, this.code = "label-sheet", this.name = "LabelSheetError";
1309
1731
  }
1310
1732
  }
1311
- function X(e) {
1733
+ function ie(e) {
1312
1734
  if (e?.aborted) {
1313
1735
  const t = new Error("标签拼版已取消");
1314
1736
  throw t.name = "AbortError", t;
1315
1737
  }
1316
1738
  }
1317
- function O(e, t, n = !1) {
1739
+ function B(e, t, n = !1) {
1318
1740
  if (!Number.isFinite(e) || e <= 0 || n && !Number.isSafeInteger(e)) throw new A("应为正有限数字,数量应为安全整数", t);
1319
1741
  return e;
1320
1742
  }
1321
- function Se(e, t) {
1743
+ function qe(e, t) {
1322
1744
  if (!Number.isFinite(e) || e < 0) throw new A("应为非负有限数字", t);
1323
1745
  return e;
1324
1746
  }
1325
- function mn(e) {
1747
+ function nr(e) {
1326
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 };
1327
- for (const r of ["top", "left", "bottom", "right"]) Se(t?.[r], `$.marginMm.${r}`);
1328
- for (const r of ["horizontal", "vertical"]) Se(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}`);
1329
1751
  return { margin: t, gap: n };
1330
1752
  }
1331
- function dn(e) {
1753
+ function rr(e) {
1332
1754
  const t = e.paper === void 0 || e.paper === "a4" ? { widthMm: 210, heightMm: 297 } : e.paper;
1333
- O(t.widthMm, "$.paper.widthMm"), O(t.heightMm, "$.paper.heightMm");
1334
- const n = O(e.columns, "$.columns", !0), r = O(e.rows, "$.rows", !0), a = n * r;
1335
- if (a > 1e3) throw new A("每张纸不能超过 1000 个位置", "$.columns");
1336
- const { margin: o, gap: l } = mn(e), i = e.startSlot ?? 0, s = e.offsetMm ?? { x: 0, y: 0 };
1337
- if (!Number.isSafeInteger(i) || i < 0 || i >= a) throw new A("起始位置应在首张纸的有效位置内", "$.startSlot");
1338
- if (!Number.isFinite(s.x) || !Number.isFinite(s.y)) throw new A("校准偏移应为有限毫米值", "$.offsetMm");
1339
- return { paper: t, columns: n, rows: r, capacity: a, margin: o, gap: l, startSlot: i, offset: s };
1340
- }
1341
- function Ge(e) {
1342
- return 1 + (e.grid?.cells.reduce((t, n) => t + n.length + 1 + n.reduce((r, a) => r + (a?.children?.reduce((o, l) => o + Ge(l), 0) ?? 0), 0), 0) ?? 0);
1343
- }
1344
- function hn(e, t, n) {
1345
- if (!Je(e).ok) throw new A("标签计划无效", "$.plan");
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;
1757
+ if (i > 1e3) throw new A("每张纸不能超过 1000 个位置", "$.columns");
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 };
1762
+ }
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);
1765
+ }
1766
+ function ir(e, t, n) {
1767
+ if (!St(e).ok) throw new A("标签计划无效", "$.plan");
1346
1768
  const r = e.pages[0];
1347
1769
  if (!r) return;
1348
- const { paper: a, columns: o, rows: l, margin: i, gap: s, offset: c } = n;
1349
- if (i.left + c.x < 0 || i.top + c.y < 0 || i.left + c.x + o * r.pageWidthMm + (o - 1) * s.horizontal + i.right > a.widthMm + 1e-6 || i.top + c.y + l * r.pageHeightMm + (l - 1) * s.vertical + i.bottom > a.heightMm + 1e-6) throw new A("标签、间距、边距及校准偏移超过纸张尺寸;不会自动缩小标签", "$.paper");
1350
- let m = 0;
1351
- for (const [d, h] of e.pages.entries()) {
1352
- if (X(t.signal), h.layout === "wide" || h.pageWidthMm !== r.pageWidthMm || h.pageHeightMm !== r.pageHeightMm) throw new A("拼版需要尺寸相同的固定标签页面", `$.pages.${d}`);
1353
- if (m += h.components.reduce((g, f) => g + Ge(f), 0), m > O(t.maxComponents ?? 25e4, "$.maxComponents", !0)) throw new A("拼版组件总量超过预算", "$.maxComponents");
1354
- for (const g of h.components) if (g.leftMm < 0 || g.topMm < 0 || g.leftMm + g.widthMm > h.pageWidthMm + 1e-6 || g.topMm + g.heightMm > h.pageHeightMm + 1e-6) throw new A("标签内容超出标签边界", `$.pages.${d}.components`);
1355
- }
1356
- }
1357
- function Gn(e, t) {
1358
- X(t.signal);
1359
- const n = dn(t), { paper: r, columns: a, capacity: o, margin: l, gap: i, startSlot: s, offset: c } = n, m = e.pages.length ? Math.ceil((s + e.pages.length) / o) : 0;
1360
- if (m > O(t.maxSheets ?? 1e4, "$.maxSheets", !0)) throw new A("拼版纸张数量超过预算", "$.maxSheets");
1361
- O(t.maxComponents ?? 25e4, "$.maxComponents", !0), hn(e, t, n);
1362
- const d = Qe(e, { maxBytes: O(t.maxSnapshotBytes ?? 64e6, "$.maxSnapshotBytes", !0), check: () => X(t.signal), error: (g, f) => new A(f, "$.maxSnapshotBytes") }), h = Array.from({ length: m }, () => ({ pageWidthMm: r.widthMm, pageHeightMm: r.heightMm, components: [], meta: { labelSheet: { columns: a, rows: n.rows, slots: [] } } }));
1363
- for (const [g, f] of d.pages.entries()) {
1364
- X(t.signal);
1365
- const w = s + g, C = w % o, x = h[Math.floor(w / o)], v = l.left + c.x + C % a * (f.pageWidthMm + i.horizontal), R = l.top + c.y + Math.floor(C / a) * (f.pageHeightMm + i.vertical), H = { sourcePageIndex: g, slotIndex: C, xMm: v, yMm: R, widthMm: f.pageWidthMm, heightMm: f.pageHeightMm, ...f.meta ? { sourceMeta: f.meta } : {} };
1366
- x.meta.labelSheet.slots.push(H), x.components.push(...f.components.map((N) => ({ ...N, leftMm: N.leftMm + v, topMm: N.topMm + R, meta: { ...N.meta, labelSheet: H } })));
1367
- }
1368
- return { ...d, pages: h };
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");
1772
+ let d = 0;
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`);
1777
+ }
1778
+ }
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 };
1369
1791
  }
1370
1792
  export {
1371
- lr as CSS_DPI,
1372
- Yn as DEFAULT_BORDER_PT,
1373
- te as DEFAULT_FONT_FAMILY,
1374
- Kn as DEFAULT_FONT_PT,
1375
- kr as DEFAULT_LABEL_PAGE_LIMIT,
1376
- Jn as DEFAULT_STROKE_COLOR,
1377
- Te as DEFAULT_TEXT_COLOR,
1378
- Xn 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,
1379
1801
  A as LabelSheetError,
1380
- cr as MM_PER_INCH,
1381
- Kr as OutputAssetError,
1382
- et as OutputFidelityError,
1383
- Z as PAPER_SIZES,
1384
- $t as PageBuilder,
1385
- Ir as PaginateCellLimitError,
1386
- Nr as PaginatePageLimitError,
1387
- gr as RENDER_PLAN_SCHEMA_VERSION,
1388
- ur as REPORT_TEMPLATE_DOCUMENT_VERSION,
1389
- er as ReportBindingError,
1390
- b as ReportCalculationError,
1391
- rt as ReportCellEditError,
1392
- Wt as ReportCellFieldError,
1393
- Xr as ReportDrillError,
1394
- ra as ReportParamValidationError,
1395
- ce as ReportSourceError,
1396
- ke as ReportTemplateError,
1397
- D as ReportTemplateStoreError,
1398
- Zn as SCHEMA_VERSION_MACH,
1399
- At as TemplateBuilder,
1400
- _a as TreeRowLimitError,
1401
- Na as applyReportCellEdit,
1402
- La as applyReportCellEditBatch,
1403
- Pa as applyReportDocumentStyle,
1404
- Lr as applyReportEditResult,
1405
- Dr as applyReportSourceMetadata,
1406
- pr as assertRenderPlan,
1407
- aa as assertReportParams,
1408
- Un as calculateReportSelection,
1409
- Aa as captureTemplateFragment,
1410
- Cr as charWidthEm,
1411
- T as classOf,
1412
- fa as cloneReportTemplate,
1413
- Sa as collectTemplateOutline,
1414
- Ln as columnsFromContract,
1415
- vt as computePageWindow,
1416
- Fr as countTemplatePages,
1417
- Rr as createCanvasMeasurer,
1418
- In as createCanvasPager,
1419
- Pr as createHeuristicMeasurer,
1420
- Fn as createLabelTemplate,
1421
- ua as createLocalTemplateCatalog,
1422
- Wn as createMemoryTemplateStore,
1423
- Hn as createProviderReport,
1424
- Da as createReportCellEdit,
1425
- Fa as createReportCellEditBatch,
1426
- Oa as createReportCellResolver,
1427
- Zr as createReportDrillRequest,
1428
- Or as createReportEditSession,
1429
- Hr as createReportSource,
1430
- Dn as createTableTemplate,
1431
- Nn as createTemplate,
1432
- zn as createTemplateManager,
1433
- wr as createTemplateRegistry,
1434
- Ua as createTreeTable,
1435
- Sr as datasetJsonSchema,
1436
- On as defineLabelReport,
1437
- Ze as defineReport,
1438
- br as defineReportTemplate,
1439
- pa as diffReportTemplates,
1440
- zr as estimateListLayoutCells,
1441
- tr as evalStyleRule,
1442
- ln as evaluateReportAggregateExpression,
1443
- Ha as formatReportCellEdit,
1444
- Bn as formatReportClipboard,
1445
- ia as formatReportDateRange,
1446
- nr as formatValue,
1447
- za as getReportCellContext,
1448
- Wr as getReportEditSession,
1449
- ya as hasValidDataExplanation,
1450
- le as heuristicMeasurer,
1451
- Gn as imposeLabelSheets,
1452
- $a as insertTemplateFragment,
1453
- qr as inspectOutputCapabilities,
1454
- Ta as inspectTemplateFieldUsage,
1455
- ka as inspectTemplateFragmentBindings,
1456
- re as isImageBackedComponent,
1457
- va as isReportDataTarget,
1458
- oa as isReportDate,
1459
- sa as isReportMonth,
1460
- xa as isReportValueState,
1461
- la as isReportYear,
1462
- Ae as isRichText,
1463
- Qr as matchReportDrillActions,
1464
- he as measurePageSizePx,
1465
- Ar as measureTextMm,
1466
- Re as mergeComponentStyles,
1467
- se as mmToPx,
1468
- mr as mmToPxFactor,
1469
- Br as paginateTemplate,
1470
- jr as paginateTemplatePages,
1471
- rr as parseDateLocal,
1472
- _n as parseReportCellFieldInput,
1473
- at as parseReportCellInput,
1474
- jn as parseReportClipboard,
1475
- ca as parseReportDateRange,
1476
- U as parseReportTemplate,
1477
- Pn as planFontSizePx,
1478
- _r as projectListColumns,
1479
- W as ptToPx,
1480
- dr as pxToMm,
1481
- Ur as registerReportEditSession,
1482
- Gr as relocateReportCellEdits,
1483
- Oe as renderComponent,
1484
- pt as renderPage,
1485
- Rn as renderPlan,
1486
- $n as renderPlanToCanvas,
1487
- kn as renderPlanToCanvasAsync,
1488
- An as renderPlanToImages,
1489
- Wa as reportCellEditKey,
1490
- q as reportOutputDiagnostics,
1491
- ma as reportParamsJsonSchema,
1492
- Ce as resolveBoxBorders,
1493
- ar as resolveComponentBinding,
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,
1494
1922
  _ as resolveFontSize,
1495
- Ne as resolveGridLayout,
1496
- ne as resolveLineHeight,
1497
- _e as resolvePaper,
1498
- me as resolvePlanAssets,
1499
- ea as resolveReportDrillReturn,
1500
- G as resolveStroke,
1501
- Pe as resolveTextColor,
1502
- wa as reviewReportTemplate,
1503
- ba as reviewReportTemplateAsync,
1504
- j as round,
1505
- Mr as serializeReportTemplate,
1506
- Ba as summarizeReportCellEdits,
1507
- Ca as templatePathLocation,
1508
- ir as toExcelNumberFormat,
1509
- or as toNumber,
1510
- yr as validateComponent,
1511
- Xe as validateDatasetRows,
1512
- vr as validatePage,
1513
- Je as validateRenderPlan,
1514
- Yt as validateReportCellFieldDefinition,
1515
- ta as validateReportDrillActions,
1516
- da as validateReportParamDefinitions,
1517
- ha as validateReportParams,
1518
- $e as validateReportTemplate,
1519
- xr as validateReportTemplateDocument,
1520
- Ga as validateTreeOptions,
1521
- Ie as wrapText
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
1522
1950
  };