@agile-team/mach-report 2.14.0 → 2.15.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 (256) hide show
  1. package/README.md +16 -11
  2. package/THIRD_PARTY_NOTICES.md +3 -1
  3. package/dist/{ExcelBindingWizard-CvsWR8Ga.js → ExcelBindingWizard-BKH1nGNS.js} +3 -3
  4. package/dist/{ExcelBindingWizard-CLT2p7P3.cjs → ExcelBindingWizard-Bs43BGNp.cjs} +1 -1
  5. package/dist/ParamEditor-Da4akw6V.cjs +1 -0
  6. package/dist/ParamEditor-DoAhzJsm.js +594 -0
  7. package/dist/{ReportBatchPanel-LqVgiqp7.js → ReportBatchPanel-BMf6boMA.js} +39 -39
  8. package/dist/{ReportBatchPanel-DkxTzBkD.cjs → ReportBatchPanel-wP9m9Pj1.cjs} +1 -1
  9. package/dist/ReportPreview-ChV19HBp.js +4619 -0
  10. package/dist/ReportPreview-DbLvvOUT.cjs +6 -0
  11. package/dist/{ReportTemplateLibrary-MjWEtc7X.js → ReportTemplateLibrary-C9wutIiT.js} +1 -1
  12. package/dist/{ReportTemplateLibrary-cQ1sqNYo.cjs → ReportTemplateLibrary-Sxr3eD0J.cjs} +1 -1
  13. package/dist/{RuleEditor-ChuXMlei.js → RuleEditor-C_Clasvd.js} +5 -5
  14. package/dist/{RuleEditor-BaR6xUiI.cjs → RuleEditor-XhGHK8DE.cjs} +1 -1
  15. package/dist/{TemplateOutlinePanel-Dci6aRn1.js → TemplateOutlinePanel-D6Bkny59.js} +2 -2
  16. package/dist/{TemplateOutlinePanel-BHKP89Xz.cjs → TemplateOutlinePanel-JTSR53vJ.cjs} +1 -1
  17. package/dist/{TemplateReusePanel-CY5eO2Sh.cjs → TemplateReusePanel-Kx35S0Ql.cjs} +1 -1
  18. package/dist/{TemplateReusePanel-B7Gmyc1z.js → TemplateReusePanel-rVuK1kTz.js} +2 -2
  19. package/dist/{TemplateReviewPanel-DjlX3xpt.js → TemplateReviewPanel-B0ar9_zf.js} +2 -2
  20. package/dist/{TemplateReviewPanel-JvZe9_4G.cjs → TemplateReviewPanel-Dn6X9UmY.cjs} +1 -1
  21. package/dist/analytics.cjs +1 -1
  22. package/dist/analytics.d.cts +3 -1
  23. package/dist/analytics.d.ts +3 -1
  24. package/dist/analytics.js +154 -60
  25. package/dist/artifact-integrity.json +135 -0
  26. package/dist/assets-B9ImAi6_.cjs +1 -0
  27. package/dist/assets-DEaz4qsp.js +124 -0
  28. package/dist/batch-BaP6pWDE.cjs +1 -0
  29. package/dist/batch-BfZHN1do.js +220 -0
  30. package/dist/batch-CGyt-b2W.js +273 -0
  31. package/dist/batch-CLpELXBl.cjs +1 -0
  32. package/dist/capabilities-CAh2Nrue.cjs +1 -0
  33. package/dist/capabilities-DskCHs3V.js +69 -0
  34. package/dist/codes.d.cts +2 -0
  35. package/dist/codes.d.ts +2 -0
  36. package/dist/{computed-Bvk0W15F.js → computed-C-4C2S5h.js} +3 -3
  37. package/dist/config-BVsJXSqS.js +842 -0
  38. package/dist/config-D10us76d.cjs +1 -0
  39. package/dist/data-explanation-B8MZRYVS.js +16 -0
  40. package/dist/data-explanation-DE55G30w.cjs +1 -0
  41. package/dist/designer-2bDlcNXQ.js +5136 -0
  42. package/dist/designer-BT7XCdbW.cjs +2 -0
  43. package/dist/designer.cjs +1 -1
  44. package/dist/designer.d.cts +144 -16
  45. package/dist/designer.d.ts +144 -16
  46. package/dist/designer.js +1 -1
  47. package/dist/drill-ByJviLXS.js +145 -0
  48. package/dist/drill-DYTxuL3A.cjs +1 -0
  49. package/dist/{font-loader-vhCT8znW.cjs → font-loader-B_UkxpzC.cjs} +1 -1
  50. package/dist/{font-loader-DHto6Lra.js → font-loader-Q3bQjmrI.js} +1 -1
  51. package/dist/index.cjs +8 -8
  52. package/dist/index.d.cts +82 -4
  53. package/dist/index.d.ts +82 -4
  54. package/dist/index.js +785 -820
  55. package/dist/json-snapshot-DFb2eWkf.js +1416 -0
  56. package/dist/json-snapshot-WWSGlaHG.cjs +2 -0
  57. package/dist/licenses/_bwip-js_generic-4.11.4.txt +24 -0
  58. package/dist/licenses/_fast-csv_format-4.3.5.txt +22 -0
  59. package/dist/licenses/_fast-csv_parse-4.3.6.txt +22 -0
  60. package/dist/licenses/_pdf-lib_fontkit-1.1.1.txt +326 -0
  61. package/dist/licenses/_pdf-lib_standard-fonts-1.0.0.txt +22 -0
  62. package/dist/licenses/_pdf-lib_upng-1.0.1.txt +22 -0
  63. package/dist/licenses/_types_node-14.18.63.txt +22 -0
  64. package/dist/licenses/_types_pako-2.0.3.txt +22 -0
  65. package/dist/licenses/_types_pegjs-0.10.6.txt +22 -0
  66. package/dist/licenses/archiver-5.3.2.txt +23 -0
  67. package/dist/licenses/archiver-utils-2.1.0.txt +23 -0
  68. package/dist/licenses/archiver-utils-3.0.4.txt +23 -0
  69. package/dist/licenses/async-3.2.6.txt +20 -0
  70. package/dist/licenses/balanced-match-1.0.2.txt +22 -0
  71. package/dist/licenses/base64-js-1.5.1.txt +22 -0
  72. package/dist/licenses/big-integer-1.6.52.txt +25 -0
  73. package/dist/licenses/binary-0.3.0.txt +178 -0
  74. package/dist/licenses/bl-4.1.0.txt +14 -0
  75. package/dist/licenses/bluebird-3.4.7.txt +22 -0
  76. package/dist/licenses/brace-expansion-1.1.21.txt +22 -0
  77. package/dist/licenses/brace-expansion-2.1.7.txt +22 -0
  78. package/dist/licenses/buffer-5.7.1.txt +22 -0
  79. package/dist/licenses/buffer-crc32-0.2.13.txt +20 -0
  80. package/dist/licenses/buffer-indexof-polyfill-1.0.2.txt +23 -0
  81. package/dist/licenses/buffers-0.1.1.txt +140 -0
  82. package/dist/licenses/chainsaw-0.1.0.txt +184 -0
  83. package/dist/licenses/compress-commons-4.1.2.txt +23 -0
  84. package/dist/licenses/concat-map-0.0.1.txt +19 -0
  85. package/dist/licenses/core-util-is-1.0.3.txt +20 -0
  86. package/dist/licenses/crc-32-1.2.2.txt +202 -0
  87. package/dist/licenses/crc32-stream-4.0.3.txt +23 -0
  88. package/dist/licenses/dayjs-1.11.23.txt +22 -0
  89. package/dist/licenses/duplexer2-0.1.4.txt +27 -0
  90. package/dist/licenses/end-of-stream-1.4.5.txt +22 -0
  91. package/dist/licenses/exceljs-4.4.0.txt +23 -0
  92. package/dist/licenses/fast-csv-4.3.6.txt +22 -0
  93. package/dist/licenses/fast-png-6.4.0.txt +22 -0
  94. package/dist/licenses/fs-constants-1.0.0.txt +22 -0
  95. package/dist/licenses/fs.realpath-1.0.0.txt +44 -0
  96. package/dist/licenses/fstream-1.0.12.txt +16 -0
  97. package/dist/licenses/glob-7.2.3.txt +22 -0
  98. package/dist/licenses/graceful-fs-4.2.11.txt +16 -0
  99. package/dist/licenses/ieee754-1.2.1.txt +12 -0
  100. package/dist/licenses/immediate-3.0.6.txt +21 -0
  101. package/dist/licenses/inflight-1.0.6.txt +16 -0
  102. package/dist/licenses/inherits-2.0.4.txt +17 -0
  103. package/dist/licenses/iobuffer-5.4.0.txt +23 -0
  104. package/dist/licenses/isarray-1.0.0.txt +61 -0
  105. package/dist/licenses/jszip-3.10.2.txt +652 -0
  106. package/dist/licenses/lazystream-1.0.1.txt +24 -0
  107. package/dist/licenses/lie-3.3.0.txt +8 -0
  108. package/dist/licenses/listenercount-1.0.1.txt +6 -0
  109. package/dist/licenses/lodash.defaults-4.2.0.txt +48 -0
  110. package/dist/licenses/lodash.difference-4.5.0.txt +48 -0
  111. package/dist/licenses/lodash.escaperegexp-4.1.2.txt +48 -0
  112. package/dist/licenses/lodash.flatten-4.4.0.txt +48 -0
  113. package/dist/licenses/lodash.groupby-4.6.0.txt +48 -0
  114. package/dist/licenses/lodash.isboolean-3.0.3.txt +23 -0
  115. package/dist/licenses/lodash.isequal-4.5.0.txt +48 -0
  116. package/dist/licenses/lodash.isfunction-3.0.9.txt +48 -0
  117. package/dist/licenses/lodash.isnil-4.0.0.txt +23 -0
  118. package/dist/licenses/lodash.isplainobject-4.0.6.txt +48 -0
  119. package/dist/licenses/lodash.isundefined-3.0.1.txt +23 -0
  120. package/dist/licenses/lodash.union-4.6.0.txt +48 -0
  121. package/dist/licenses/lodash.uniq-4.5.0.txt +48 -0
  122. package/dist/licenses/minimatch-3.1.5.txt +16 -0
  123. package/dist/licenses/minimatch-5.1.9.txt +16 -0
  124. package/dist/licenses/minimist-1.2.8.txt +19 -0
  125. package/dist/licenses/mkdirp-0.5.6.txt +22 -0
  126. package/dist/licenses/node-sql-parser-5.4.0.txt +202 -0
  127. package/dist/licenses/normalize-path-3.0.0.txt +22 -0
  128. package/dist/licenses/once-1.4.0.txt +16 -0
  129. package/dist/licenses/pako-1.0.11.txt +22 -0
  130. package/dist/licenses/pako-2.2.0.txt +22 -0
  131. package/dist/licenses/path-is-absolute-1.0.1.txt +22 -0
  132. package/dist/licenses/pdf-lib-1.17.1.txt +22 -0
  133. package/dist/licenses/process-nextick-args-2.0.1.txt +20 -0
  134. package/dist/licenses/readable-stream-2.3.8.txt +48 -0
  135. package/dist/licenses/readable-stream-3.6.2.txt +48 -0
  136. package/dist/licenses/readdir-glob-1.1.3.txt +202 -0
  137. package/dist/licenses/rimraf-2.7.1.txt +16 -0
  138. package/dist/licenses/safe-buffer-5.1.2.txt +22 -0
  139. package/dist/licenses/safe-buffer-5.2.1.txt +22 -0
  140. package/dist/licenses/saxes-5.0.1.txt +397 -0
  141. package/dist/licenses/setimmediate-1.0.5.txt +21 -0
  142. package/dist/licenses/string_decoder-1.1.1.txt +49 -0
  143. package/dist/licenses/string_decoder-1.3.0.txt +49 -0
  144. package/dist/licenses/tar-stream-2.2.0.txt +22 -0
  145. package/dist/licenses/tmp-0.2.7.txt +22 -0
  146. package/dist/licenses/traverse-0.3.9.txt +25 -0
  147. package/dist/licenses/tslib-1.14.1.txt +13 -0
  148. package/dist/licenses/unzipper-0.10.14.txt +26 -0
  149. package/dist/licenses/util-deprecate-1.0.2.txt +25 -0
  150. package/dist/licenses/uuid-11.1.1.txt +10 -0
  151. package/dist/licenses/wrappy-1.0.2.txt +16 -0
  152. package/dist/licenses/xmlchars-2.2.0.txt +19 -0
  153. package/dist/licenses/zip-stream-4.1.1.txt +23 -0
  154. package/dist/matrix-CGRGkn5s.js +112 -0
  155. package/dist/matrix-gEO7ZM_u.cjs +1 -0
  156. package/dist/media-B7vnpD8k.cjs +1 -0
  157. package/dist/media-Y90dHK9z.js +70 -0
  158. package/dist/param-validation-C3HlcLLO.cjs +1 -0
  159. package/dist/param-validation-Do7Eg8Zv.js +181 -0
  160. package/dist/{pdf-8UPQebOE.js → pdf-BwNyeGpt.js} +4385 -4321
  161. package/dist/{pdf-AyJGb22z.cjs → pdf-CvvrjPQg.cjs} +51 -49
  162. package/dist/pdf.cjs +1 -1
  163. package/dist/pdf.d.cts +18 -3
  164. package/dist/pdf.d.ts +18 -3
  165. package/dist/pdf.js +2 -2
  166. package/dist/{plugin-BGKf-Tqg.js → plugin-Ca_XZG3l.js} +2 -2
  167. package/dist/{plugin-CktLH_Iy.cjs → plugin-DHO7X8z2.cjs} +1 -1
  168. package/dist/prepared-CFy9B75C.cjs +1 -0
  169. package/dist/prepared-ajM-H-9B.js +69 -0
  170. package/dist/progress-B0ctFpKf.cjs +1 -0
  171. package/dist/progress-D-OTpEav.js +52 -0
  172. package/dist/record-bindings-By_UKZ2g.cjs +1 -0
  173. package/dist/record-bindings-Do_b3h4V.js +196 -0
  174. package/dist/{region-binding-workflow-DEJbhpCv.js → region-binding-workflow-BMhK_TjP.js} +1 -1
  175. package/dist/{region-binding-workflow-BzfbxRiR.cjs → region-binding-workflow-DIYJdCUr.cjs} +1 -1
  176. package/dist/{report-params-B44imUd4.js → report-params-B1RzkhJj.js} +1 -1
  177. package/dist/{report-params-SJfhKgaX.cjs → report-params-WDGrA4oP.cjs} +1 -1
  178. package/dist/sbom.cdx.json +3982 -0
  179. package/dist/server/node.d.cts +20 -1
  180. package/dist/server/node.d.ts +20 -1
  181. package/dist/server-node.cjs +1 -1
  182. package/dist/server-node.js +247 -237
  183. package/dist/server.cjs +1 -1
  184. package/dist/server.d.cts +772 -4
  185. package/dist/server.d.ts +772 -4
  186. package/dist/server.js +885 -645
  187. package/dist/sha256-ArEYjaTI.cjs +1 -0
  188. package/dist/sha256-DPEuJ3nh.js +155 -0
  189. package/dist/style.css +1 -1
  190. package/dist/template-bindings-C2SpvsMU.js +58 -0
  191. package/dist/template-bindings-CEtWyiLX.cjs +1 -0
  192. package/dist/template-catalog-FJE_c9Qe.cjs +1 -0
  193. package/dist/template-catalog-j2B1MJlL.js +414 -0
  194. package/dist/{template-fragments-CLkGo6To.js → template-fragments-BGbQLGlV.js} +21 -21
  195. package/dist/{template-fragments-DFUpq5QM.cjs → template-fragments-DcKeiylI.cjs} +1 -1
  196. package/dist/{template-outline-B3xVkzSv.cjs → template-outline-BwRV_eRo.cjs} +1 -1
  197. package/dist/{template-outline-CFenM1PV.js → template-outline-cnWfT_LK.js} +3 -3
  198. package/dist/{template-registry-COXDEJEM.js → template-registry-BtaKPELV.js} +364 -201
  199. package/dist/template-registry-Co1zPq5e.cjs +1 -0
  200. package/dist/textwrap-CWHyzkBH.cjs +4 -0
  201. package/dist/textwrap-DE1kgcJB.js +110 -0
  202. package/dist/{tree-CqcQ99NM.js → tree-CjVZLRw7.js} +1 -1
  203. package/dist/vue/async.d.cts +123 -14
  204. package/dist/vue/async.d.ts +123 -14
  205. package/dist/vue/index.d.cts +158 -22
  206. package/dist/vue/index.d.ts +158 -22
  207. package/dist/vue-async.cjs +1 -1
  208. package/dist/vue-async.js +3 -3
  209. package/dist/vue.cjs +1 -1
  210. package/dist/vue.js +80 -78
  211. package/dist/{workbook-session-DNa2RHNG.cjs → workbook-session-Bjv1YCRK.cjs} +18 -18
  212. package/dist/{workbook-session-BfK1yHOO.js → workbook-session-BvToI-Fd.js} +5440 -5288
  213. package/dist/worker.cjs +1 -1
  214. package/dist/worker.d.cts +20 -1
  215. package/dist/worker.d.ts +20 -1
  216. package/dist/worker.js +33 -32
  217. package/dist/xlsx-node.cjs +34 -34
  218. package/dist/xlsx-node.js +878 -870
  219. package/dist/xlsx.cjs +3 -4
  220. package/dist/xlsx.d.cts +22 -10
  221. package/dist/xlsx.d.ts +22 -10
  222. package/dist/xlsx.js +261 -253
  223. package/package.json +2 -2
  224. package/dist/ParamEditor-CflQV3eQ.js +0 -526
  225. package/dist/ParamEditor-vIDzvpPV.cjs +0 -1
  226. package/dist/ReportPreview-CvbqLUzM.cjs +0 -6
  227. package/dist/ReportPreview-D_ywJ_-H.js +0 -4533
  228. package/dist/assets-C2U-e-Sz.cjs +0 -4
  229. package/dist/assets-Q0wUwNrV.js +0 -217
  230. package/dist/batch-DzaTNLWI.js +0 -371
  231. package/dist/batch-xMkqYiTr.cjs +0 -1
  232. package/dist/capabilities-CK_7hizc.js +0 -63
  233. package/dist/capabilities-CsZ-pNHR.cjs +0 -1
  234. package/dist/config-0UIohTS7.cjs +0 -1
  235. package/dist/config-Dt9NtCPl.js +0 -566
  236. package/dist/data-explanation-BktvER5B.cjs +0 -1
  237. package/dist/data-explanation-C_J6jYNi.js +0 -16
  238. package/dist/designer-Ci1LizA9.js +0 -5020
  239. package/dist/designer-rtmVIIdN.cjs +0 -2
  240. package/dist/json-snapshot-BeFT3Tso.js +0 -1952
  241. package/dist/json-snapshot-D1NTP2oI.cjs +0 -2
  242. package/dist/matrix-DVyWiYsd.cjs +0 -1
  243. package/dist/matrix-yZsGnldA.js +0 -227
  244. package/dist/page-window-index-CIuT4BAv.js +0 -43
  245. package/dist/page-window-index-DEjnM6IB.cjs +0 -1
  246. package/dist/param-validation-BlHHXs6u.js +0 -153
  247. package/dist/param-validation-DCK039V1.cjs +0 -1
  248. package/dist/progress-7OSZbFok.js +0 -39
  249. package/dist/progress-BnLiS5eH.cjs +0 -1
  250. package/dist/task-events-DQ276fn2.cjs +0 -1
  251. package/dist/task-events-Dpsvf_t2.js +0 -47
  252. package/dist/template-bindings-BJR4k7qZ.cjs +0 -1
  253. package/dist/template-bindings-Daui7hLF.js +0 -252
  254. package/dist/template-registry-D3SjENi6.cjs +0 -1
  255. package/dist/validate-BJ5HIWY8.cjs +0 -1
  256. package/dist/validate-CkQBWCeg.js +0 -163
@@ -0,0 +1,145 @@
1
+ import { g as w, r as j, e as K } from "./batch-CGyt-b2W.js";
2
+ import { r as D } from "./grid-geometry-BNptEcMm.js";
3
+ function m(e) {
4
+ return Number.isFinite(e) ? Math.max(0, e) : 0;
5
+ }
6
+ function _(e, t = 0) {
7
+ const r = e.length, n = m(t), o = new Array(r + 1);
8
+ o[0] = 0;
9
+ for (let s = 0; s < r; s++)
10
+ o[s + 1] = o[s] + m(e[s] ?? 0) + n;
11
+ const u = o[r];
12
+ function l(s) {
13
+ let i = 0, d = r - 1, g = 0;
14
+ for (; i <= d; ) {
15
+ const p = i + d >>> 1;
16
+ o[p] <= s ? (g = p, i = p + 1) : d = p - 1;
17
+ }
18
+ return g;
19
+ }
20
+ function a(s, i, d = 1) {
21
+ if (r === 0) return { start: 0, end: -1, padTopPx: 0, padBottomPx: 0 };
22
+ const g = Math.floor(m(d)), p = m(i), v = l(p), I = Math.max(0, v - g), M = p + m(s);
23
+ let y = v, b = r - 1, S = r - 1;
24
+ for (; y <= b; ) {
25
+ const h = y + b >>> 1;
26
+ o[h + 1] < M ? y = h + 1 : (S = h, b = h - 1);
27
+ }
28
+ const x = Math.min(r - 1, S + g);
29
+ return {
30
+ start: I,
31
+ end: x,
32
+ padTopPx: o[I],
33
+ padBottomPx: Math.max(0, u - o[x + 1])
34
+ };
35
+ }
36
+ return {
37
+ totalHeightPx: u,
38
+ pageAt: l,
39
+ offsetAt: (s) => o[Math.max(0, Math.min(r, Math.floor(s)))] ?? 0,
40
+ window: a
41
+ };
42
+ }
43
+ class c extends Error {
44
+ constructor(t) {
45
+ super(`Report drill: ${t}`), this.code = t, this.name = "ReportDrillError";
46
+ }
47
+ }
48
+ function f(e) {
49
+ return typeof e == "string" && e.trim().length > 0 && e.length <= 256;
50
+ }
51
+ function O(e) {
52
+ if (typeof e == "number" && Number.isFinite(e) || typeof e == "boolean") return String(e);
53
+ if (typeof e == "string" && e.length > 0 && e.length <= 4096) return e;
54
+ throw new c("missing-value");
55
+ }
56
+ function E(e, t) {
57
+ return Object.getOwnPropertyDescriptor(e, t)?.value;
58
+ }
59
+ function R(e) {
60
+ if (!Array.isArray(e) || e.length > 64) throw new c("config");
61
+ const t = /* @__PURE__ */ new Set();
62
+ for (const r of e) {
63
+ if (!r || !f(r.id) || !f(r.label) || !r.target || !f(r.target.field) || t.has(r.id)) throw new c("config");
64
+ t.add(r.id);
65
+ const n = r.target;
66
+ if (n.datasetId !== void 0 && !f(n.datasetId) || n.reportScope !== void 0 && !f(n.reportScope)) throw new c("config");
67
+ if (n.roles !== void 0 && (!Array.isArray(n.roles) || n.roles.length > 16 || n.roles.some((o) => !f(o)))) throw new c("config");
68
+ z(r.params);
69
+ }
70
+ }
71
+ function z(e) {
72
+ if (e !== void 0) {
73
+ if (!e || typeof e != "object" || Array.isArray(e) || Object.keys(e).length > 32) throw new c("config");
74
+ for (const [t, r] of Object.entries(e)) {
75
+ if (!f(t) || ["__proto__", "constructor", "prototype"].includes(t) || !r || typeof r != "object") throw new c("config");
76
+ if ("value" in r)
77
+ try {
78
+ O(r.value);
79
+ } catch {
80
+ throw new c("config");
81
+ }
82
+ else if (!["value", "rowKey", "query", "field"].includes(r.from) || (r.from === "query" || r.from === "field") && !f(r.field)) throw new c("config");
83
+ }
84
+ }
85
+ }
86
+ function A(e, t, r) {
87
+ const { target: n } = r, o = t.source?.datasetId ?? t.component.table?.source?.datasetId;
88
+ return (t.source?.field ?? t.table?.columnKey) === n.field && (n.datasetId === void 0 || o === n.datasetId) && (n.reportScope === void 0 || e.pages[t.address.pageIndex]?.meta?.reportScope === n.reportScope) && (n.roles ? n.roles.includes(t.table?.role ?? "") : t.table?.role !== "header");
89
+ }
90
+ function k(e, t, r) {
91
+ R(r);
92
+ const n = w(e, t);
93
+ return n ? r.filter((o) => A(e, n, o)) : [];
94
+ }
95
+ function P(e, t, r, n) {
96
+ if ("value" in e) return e.value;
97
+ switch (e.from) {
98
+ case "value":
99
+ return r.value;
100
+ case "rowKey":
101
+ return r.source?.rowKey;
102
+ case "query":
103
+ return E(n, e.field);
104
+ case "field": {
105
+ const o = r.component.table?.columnKeys.indexOf(e.field) ?? -1;
106
+ return o < 0 ? void 0 : w(t, { ...r.address, columnIndex: o })?.value;
107
+ }
108
+ }
109
+ }
110
+ function B(e, t, r, n = {}) {
111
+ R([r]);
112
+ const o = w(e, t);
113
+ if (!o || !A(e, o, r)) throw new c("target");
114
+ const u = Object.fromEntries(Object.entries(r.params ?? {}).map(([s, i]) => [s, O(P(i, e, o, n))])), l = Object.entries(n);
115
+ if (l.length > 128 || l.some(([s, i]) => !f(s) || typeof i != "string" || i.length > 4096)) throw new c("config");
116
+ const a = e.pages[t.pageIndex]?.meta?.reportScope;
117
+ return Object.freeze({ actionId: r.id, params: Object.freeze(u), returnState: Object.freeze({
118
+ params: Object.freeze(Object.fromEntries(l)),
119
+ address: Object.freeze({ ...t }),
120
+ ...typeof a == "string" ? { reportScope: a } : {},
121
+ ...o.source ? { source: Object.freeze({ sourceScope: o.source.sourceScope, datasetId: o.source.datasetId, rowKey: o.source.rowKey, field: o.source.field }) } : {}
122
+ }) });
123
+ }
124
+ function N(e, t) {
125
+ if (!t.source) return e.pages[t.address.pageIndex]?.meta?.reportScope === t.reportScope && w(e, t.address) ? { ...t.address } : null;
126
+ const r = K(e), n = j({ address: t.address, source: t.source });
127
+ for (const [o, u] of e.pages.entries())
128
+ if (!(t.reportScope !== void 0 && u.meta?.reportScope !== t.reportScope)) {
129
+ for (const [l, a] of u.components.entries())
130
+ if (a.grid)
131
+ for (const s of D(a.grid, a.widthMm, a.heightMm).cells) {
132
+ const i = { pageIndex: o, componentIndex: l, rowIndex: s.ri, columnIndex: s.ci }, d = r(i);
133
+ if (d?.source && j(d) === n) return i;
134
+ }
135
+ }
136
+ return null;
137
+ }
138
+ export {
139
+ c as R,
140
+ B as a,
141
+ _ as c,
142
+ k as m,
143
+ N as r,
144
+ R as v
145
+ };
@@ -0,0 +1 @@
1
+ "use strict";const g=require("./batch-BaP6pWDE.cjs"),D=require("./grid-geometry-CZ_cYB6O.cjs");function m(e){return Number.isFinite(e)?Math.max(0,e):0}function C(e,r=0){const t=e.length,n=m(r),o=new Array(t+1);o[0]=0;for(let i=0;i<t;i++)o[i+1]=o[i]+m(e[i]??0)+n;const u=o[t];function f(i){let c=0,a=t-1,h=0;for(;c<=a;){const p=c+a>>>1;o[p]<=i?(h=p,c=p+1):a=p-1}return h}function l(i,c,a=1){if(t===0)return{start:0,end:-1,padTopPx:0,padBottomPx:0};const h=Math.floor(m(a)),p=m(c),v=f(p),x=Math.max(0,v-h),A=p+m(i);let y=v,b=t-1,I=t-1;for(;y<=b;){const w=y+b>>>1;o[w+1]<A?y=w+1:(I=w,b=w-1)}const S=Math.min(t-1,I+h);return{start:x,end:S,padTopPx:o[x],padBottomPx:Math.max(0,u-o[S+1])}}return{totalHeightPx:u,pageAt:f,offsetAt:i=>o[Math.max(0,Math.min(t,Math.floor(i)))]??0,window:l}}class s extends Error{constructor(r){super(`Report drill: ${r}`),this.code=r,this.name="ReportDrillError"}}function d(e){return typeof e=="string"&&e.trim().length>0&&e.length<=256}function j(e){if(typeof e=="number"&&Number.isFinite(e)||typeof e=="boolean")return String(e);if(typeof e=="string"&&e.length>0&&e.length<=4096)return e;throw new s("missing-value")}function M(e,r){return Object.getOwnPropertyDescriptor(e,r)?.value}function R(e){if(!Array.isArray(e)||e.length>64)throw new s("config");const r=new Set;for(const t of e){if(!t||!d(t.id)||!d(t.label)||!t.target||!d(t.target.field)||r.has(t.id))throw new s("config");r.add(t.id);const n=t.target;if(n.datasetId!==void 0&&!d(n.datasetId)||n.reportScope!==void 0&&!d(n.reportScope))throw new s("config");if(n.roles!==void 0&&(!Array.isArray(n.roles)||n.roles.length>16||n.roles.some(o=>!d(o))))throw new s("config");E(t.params)}}function E(e){if(e!==void 0){if(!e||typeof e!="object"||Array.isArray(e)||Object.keys(e).length>32)throw new s("config");for(const[r,t]of Object.entries(e)){if(!d(r)||["__proto__","constructor","prototype"].includes(r)||!t||typeof t!="object")throw new s("config");if("value"in t)try{j(t.value)}catch{throw new s("config")}else if(!["value","rowKey","query","field"].includes(t.from)||(t.from==="query"||t.from==="field")&&!d(t.field))throw new s("config")}}}function O(e,r,t){const{target:n}=t,o=r.source?.datasetId??r.component.table?.source?.datasetId;return(r.source?.field??r.table?.columnKey)===n.field&&(n.datasetId===void 0||o===n.datasetId)&&(n.reportScope===void 0||e.pages[r.address.pageIndex]?.meta?.reportScope===n.reportScope)&&(n.roles?n.roles.includes(r.table?.role??""):r.table?.role!=="header")}function K(e,r,t){R(t);const n=g.getReportCellContext(e,r);return n?t.filter(o=>O(e,n,o)):[]}function q(e,r,t,n){if("value"in e)return e.value;switch(e.from){case"value":return t.value;case"rowKey":return t.source?.rowKey;case"query":return M(n,e.field);case"field":{const o=t.component.table?.columnKeys.indexOf(e.field)??-1;return o<0?void 0:g.getReportCellContext(r,{...t.address,columnIndex:o})?.value}}}function P(e,r,t,n={}){R([t]);const o=g.getReportCellContext(e,r);if(!o||!O(e,o,t))throw new s("target");const u=Object.fromEntries(Object.entries(t.params??{}).map(([i,c])=>[i,j(q(c,e,o,n))])),f=Object.entries(n);if(f.length>128||f.some(([i,c])=>!d(i)||typeof c!="string"||c.length>4096))throw new s("config");const l=e.pages[r.pageIndex]?.meta?.reportScope;return Object.freeze({actionId:t.id,params:Object.freeze(u),returnState:Object.freeze({params:Object.freeze(Object.fromEntries(f)),address:Object.freeze({...r}),...typeof l=="string"?{reportScope:l}:{},...o.source?{source:Object.freeze({sourceScope:o.source.sourceScope,datasetId:o.source.datasetId,rowKey:o.source.rowKey,field:o.source.field})}:{}})})}function z(e,r){if(!r.source)return e.pages[r.address.pageIndex]?.meta?.reportScope===r.reportScope&&g.getReportCellContext(e,r.address)?{...r.address}:null;const t=g.createReportCellResolver(e),n=g.reportCellEditKey({address:r.address,source:r.source});for(const[o,u]of e.pages.entries())if(!(r.reportScope!==void 0&&u.meta?.reportScope!==r.reportScope)){for(const[f,l]of u.components.entries())if(l.grid)for(const i of D.resolveGridLayout(l.grid,l.widthMm,l.heightMm).cells){const c={pageIndex:o,componentIndex:f,rowIndex:i.ri,columnIndex:i.ci},a=t(c);if(a?.source&&g.reportCellEditKey(a)===n)return c}}return null}exports.ReportDrillError=s;exports.createPageWindowIndex=C;exports.createReportDrillRequest=P;exports.matchReportDrillActions=K;exports.resolveReportDrillReturn=z;exports.validateReportDrillActions=R;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=new Map;let b=0,d={maxFonts:8,maxBytes:64*1024*1024,maxFontBytes:24*1024*1024};function O(){for(;f.size>d.maxFonts||b>d.maxBytes;){const t=f.keys().next().value;b-=f.get(t).byteLength,f.delete(t)}}function W(t){const e={...d,...t};if(!Object.values(e).every(n=>Number.isSafeInteger(n)&&n>0))throw new Error("字体缓存预算应为正整数字节/数量");d=e;for(const[n,a]of f)a.byteLength>d.maxFontBytes&&B(n);O()}function p(){return{fonts:f.size,bytes:b,...d}}function j(t){const e=f.get(t);return e&&(f.delete(t),f.set(t,e)),e}function B(t){const e=f.get(t);e&&(b-=e.byteLength),f.delete(t)}function q(){f.clear(),b=0}function H(t,e){B(t),!(e.byteLength>d.maxBytes||e.byteLength>d.maxFontBytes)&&(f.set(t,e),b+=e.byteLength,O())}const V="mach-report-fonts",u="fonts";function $(){return new Promise((t,e)=>{const n=indexedDB.open(V,1);n.onupgradeneeded=()=>{n.result.objectStoreNames.contains(u)||n.result.createObjectStore(u)},n.onsuccess=()=>t(n.result),n.onerror=()=>e(n.error)})}function M(t){if(t instanceof Uint8Array)return{bytes:t,accessedAt:0};const e=t;return e?.bytes instanceof Uint8Array&&Number.isFinite(e.accessedAt)?e:void 0}async function C(t,e){if(typeof indexedDB>"u")return t;let n;try{return n=await $(),await e(n)}catch{return t}finally{n?.close()}}function G(t){return C(null,e=>new Promise((n,a)=>{const r=e.transaction(u,"readwrite"),o=r.objectStore(u),i=o.get(t);let c=null;i.onsuccess=()=>{const s=M(i.result);s&&s.bytes.byteLength<=p().maxFontBytes?(c=s.bytes,o.put({bytes:s.bytes,accessedAt:Date.now()},t)):i.result!==void 0&&o.delete(t)},r.oncomplete=()=>n(c),r.onerror=()=>a(r.error),r.onabort=()=>a(r.error)}))}function J(t,e,n,a){const r=p(),o=e.filter(s=>s.key!==n);t.delete(n),a.byteLength<=Math.min(r.maxFontBytes,r.maxBytes)&&o.unshift({key:n,bytes:a.byteLength,accessedAt:Date.now()}),o.sort((s,h)=>h.accessedAt-s.accessedAt);let i=0,c=0;for(const s of o){if(c>=r.maxFonts||i+s.bytes>r.maxBytes||s.bytes>r.maxFontBytes){t.delete(s.key);continue}i+=s.bytes,c++,s.key===n&&t.put({bytes:a,accessedAt:s.accessedAt},n)}}function _(t,e){return C(void 0,n=>new Promise((a,r)=>{const o=n.transaction(u,"readwrite"),i=o.objectStore(u),c=i.openCursor(),s=[];c.onsuccess=()=>{const h=c.result;if(!h){J(i,s,t,e);return}const x=M(h.value);x?s.push({key:h.key,bytes:x.bytes.byteLength,accessedAt:x.accessedAt}):h.delete(),h.continue()},o.oncomplete=()=>a(),o.onerror=()=>r(o.error),o.onabort=()=>r(o.error)}))}function D(t){return C(void 0,e=>new Promise((n,a)=>{const r=e.transaction(u,"readwrite"),o=r.objectStore(u);t===void 0?o.clear():o.delete(t),r.oncomplete=()=>n(),r.onerror=()=>a(r.error),r.onabort=()=>a(r.error)}))}let L=0,S=0,v=Promise.resolve();const g=new Map;async function N(t){l.set(t,(l.get(t)??0)+1),B(t),w.delete(t);const e=g.get(t),n=(async()=>{await v,await e,await y.get(t),await D(t)})();g.set(t,n);try{await n}finally{g.get(t)===n&&g.delete(t)}}async function I(){L++,q(),w.clear(),l.clear();const t=v,e=(async()=>{await t,await Promise.all(y.values()),await D()})();v=e.catch(()=>{}),await e}const l=new Map,y=new Map,w=new Map,E=new Set;function k(){!S&&!E.size&&l.clear()}const T=new WeakMap;function K(t){const e=new TextDecoder().decode(t.subarray(0,256));return/^\s*(?:\uFEFF)?\s*<(?:!doctype\s+html|html|head|body)(?:\s|>)/i.test(e)}function R(t){if(t.byteLength===0)throw new Error("字体文件为空");if(K(t))throw new Error("字体 URL 返回 HTML 页面(可能是 SPA 路由回退),不是字体文件")}function Q(t){const e=T.get(t);if(e)return e;const n=(async()=>{const a=String.fromCharCode(...t.subarray(0,4));if(!["\0\0\0","true","OTTO","wOFF","wOF2","ttcf"].includes(a))throw new Error("文件内容不是支持的 TTF/OTF/WOFF 字体(可能返回了 JSON 或文本)");const{default:r}=await Promise.resolve().then(()=>require("./pdf-AyJGb22z.cjs")).then(i=>i.fontkit_es),o=r.create(t);if(!Number.isFinite(o.unitsPerEm)||o.unitsPerEm<=0||!o.characterSet?.length||!o.numGlyphs)throw new Error("字体结构无效或不含可嵌入的单字体;请提供有效的 TTF/OTF/WOFF 文件")})();return T.set(t,n),n}function A(t,e,n=!1){const a=n?"字体加载超时,请检查网络或字体服务":e instanceof Error?e.message:String(e);return Object.assign(new Error(`PDF 字体 ${JSON.stringify(t)} 加载失败:${a}`),{cause:e})}function P(t,e){if(t>e)throw new Error(`字体文件超过单字体下载预算(${e}字节)`)}async function X(t,e,n){const a=Number(t.headers?.get("content-length"));try{Number.isFinite(a)&&P(a,e)}catch(r){throw t.body?.cancel(r).catch(()=>{}),r}if(!t.body){const r=new Uint8Array(await F(t.arrayBuffer(),n));return P(r.byteLength,e),r}return U(t.body,e,n)}async function U(t,e,n){const a=t.getReader(),r=[];let o=0;try{for(;;){const s=await F(a.read(),n);if(s.done)break;o+=s.value.byteLength,P(o,e),r.push(s.value)}const i=new Uint8Array(o);let c=0;for(const s of r)i.set(s,c),c+=s.byteLength;return i}catch(i){throw a.cancel(i).catch(()=>{}),i}finally{a.releaseLock()}}async function Y(t,e,n){if(t[0]!==31||t[1]!==139)return t;if(typeof DecompressionStream>"u")throw new Error("当前环境不支持 gzip 字体解压,请使用未压缩的字体 URL 或支持 DecompressionStream 的浏览器 / Node 环境");const r=new ReadableStream({start(o){o.enqueue(t),o.close()}}).pipeThrough(new DecompressionStream("gzip"));return U(r,e,n)}async function Z(t){const e=new AbortController;let n=!1;const a=setTimeout(()=>{n=!0,e.abort()},15e3);try{const r=await fetch(t,{signal:e.signal});if(!r.ok)throw new Error(`字体请求返回 HTTP ${r.status}`);if(/text\/html|application\/xhtml\+xml/i.test(r.headers?.get("content-type")??""))throw new Error("字体 URL 返回 HTML 页面(可能是 SPA 路由回退),不是字体文件");const o=p().maxFontBytes,i=await X(r,o,e.signal),c=await Y(i,o,e.signal);return R(c),{bytes:c,fromCache:!1}}catch(r){throw e.abort(),A(t,r,n)}finally{clearTimeout(a)}}async function tt(t){await v,await g.get(t);const e=await G(t);if(e)try{return R(e),{bytes:e,fromCache:!0}}catch{}return Z(t)}function et(t){const e=w.get(t);if(e)return e;const n=tt(t);w.set(t,n),E.add(n);const a=()=>{w.get(t)===n&&w.delete(t),E.delete(n),k()};return n.then(a,a),n}async function nt(t,e,n,a){if((l.get(t)??0)!==n||L!==a)return;H(t,e);const r=y.get(t);if(r){await r;return}const o=_(t,e);y.set(t,o),await o,y.get(t)===o&&y.delete(t)}function m(t){return t.reason??new DOMException("字体加载已取消","AbortError")}function F(t,e){return e?e.aborted?Promise.reject(m(e)):new Promise((n,a)=>{const r=()=>{e.removeEventListener("abort",r),a(m(e))};e.addEventListener("abort",r,{once:!0}),t.then(o=>{e.removeEventListener("abort",r),n(o)},o=>{e.removeEventListener("abort",r),a(o)})}):t}async function rt(t,e,n,a,r){try{return await F(Q(e.bytes),n.signal),e.bytes}catch(o){if(n.signal?.aborted)throw m(n.signal);if((l.get(t)??0)!==a||L!==r)throw A(t,o);if(await N(t),e.fromCache)return await z(t,n);throw A(t,o)}}async function z(t,e={}){if(e.signal?.aborted)throw m(e.signal);const n=l.get(t)??0,a=L,r=j(t);if(r&&!e.strict)return r;const o=r?void 0:et(t);S++;try{const i=r?{bytes:r,fromCache:!0}:await F(o,e.signal),c=e.strict?await rt(t,i,e,n,a):i.bytes;if(e.signal?.aborted)throw m(e.signal);return r||await F(nt(t,c,n,a),e.signal),c}catch(i){if(e.signal?.aborted)throw m(e.signal);if(e.strict)throw i;return null}finally{S--,k()}}exports.clearFontCache=I;exports.configureFontCache=W;exports.getFontCacheStats=p;exports.invalidateFontCache=N;exports.loadFontWithCache=z;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=new Map;let b=0,d={maxFonts:8,maxBytes:64*1024*1024,maxFontBytes:24*1024*1024};function O(){for(;f.size>d.maxFonts||b>d.maxBytes;){const t=f.keys().next().value;b-=f.get(t).byteLength,f.delete(t)}}function W(t){const e={...d,...t};if(!Object.values(e).every(n=>Number.isSafeInteger(n)&&n>0))throw new Error("字体缓存预算应为正整数字节/数量");d=e;for(const[n,a]of f)a.byteLength>d.maxFontBytes&&B(n);O()}function p(){return{fonts:f.size,bytes:b,...d}}function j(t){const e=f.get(t);return e&&(f.delete(t),f.set(t,e)),e}function B(t){const e=f.get(t);e&&(b-=e.byteLength),f.delete(t)}function q(){f.clear(),b=0}function H(t,e){B(t),!(e.byteLength>d.maxBytes||e.byteLength>d.maxFontBytes)&&(f.set(t,e),b+=e.byteLength,O())}const V="mach-report-fonts",u="fonts";function $(){return new Promise((t,e)=>{const n=indexedDB.open(V,1);n.onupgradeneeded=()=>{n.result.objectStoreNames.contains(u)||n.result.createObjectStore(u)},n.onsuccess=()=>t(n.result),n.onerror=()=>e(n.error)})}function M(t){if(t instanceof Uint8Array)return{bytes:t,accessedAt:0};const e=t;return e?.bytes instanceof Uint8Array&&Number.isFinite(e.accessedAt)?e:void 0}async function C(t,e){if(typeof indexedDB>"u")return t;let n;try{return n=await $(),await e(n)}catch{return t}finally{n?.close()}}function G(t){return C(null,e=>new Promise((n,a)=>{const r=e.transaction(u,"readwrite"),o=r.objectStore(u),i=o.get(t);let c=null;i.onsuccess=()=>{const s=M(i.result);s&&s.bytes.byteLength<=p().maxFontBytes?(c=s.bytes,o.put({bytes:s.bytes,accessedAt:Date.now()},t)):i.result!==void 0&&o.delete(t)},r.oncomplete=()=>n(c),r.onerror=()=>a(r.error),r.onabort=()=>a(r.error)}))}function J(t,e,n,a){const r=p(),o=e.filter(s=>s.key!==n);t.delete(n),a.byteLength<=Math.min(r.maxFontBytes,r.maxBytes)&&o.unshift({key:n,bytes:a.byteLength,accessedAt:Date.now()}),o.sort((s,h)=>h.accessedAt-s.accessedAt);let i=0,c=0;for(const s of o){if(c>=r.maxFonts||i+s.bytes>r.maxBytes||s.bytes>r.maxFontBytes){t.delete(s.key);continue}i+=s.bytes,c++,s.key===n&&t.put({bytes:a,accessedAt:s.accessedAt},n)}}function _(t,e){return C(void 0,n=>new Promise((a,r)=>{const o=n.transaction(u,"readwrite"),i=o.objectStore(u),c=i.openCursor(),s=[];c.onsuccess=()=>{const h=c.result;if(!h){J(i,s,t,e);return}const x=M(h.value);x?s.push({key:h.key,bytes:x.bytes.byteLength,accessedAt:x.accessedAt}):h.delete(),h.continue()},o.oncomplete=()=>a(),o.onerror=()=>r(o.error),o.onabort=()=>r(o.error)}))}function D(t){return C(void 0,e=>new Promise((n,a)=>{const r=e.transaction(u,"readwrite"),o=r.objectStore(u);t===void 0?o.clear():o.delete(t),r.oncomplete=()=>n(),r.onerror=()=>a(r.error),r.onabort=()=>a(r.error)}))}let L=0,S=0,v=Promise.resolve();const g=new Map;async function N(t){l.set(t,(l.get(t)??0)+1),B(t),w.delete(t);const e=g.get(t),n=(async()=>{await v,await e,await y.get(t),await D(t)})();g.set(t,n);try{await n}finally{g.get(t)===n&&g.delete(t)}}async function I(){L++,q(),w.clear(),l.clear();const t=v,e=(async()=>{await t,await Promise.all(y.values()),await D()})();v=e.catch(()=>{}),await e}const l=new Map,y=new Map,w=new Map,E=new Set;function k(){!S&&!E.size&&l.clear()}const T=new WeakMap;function K(t){const e=new TextDecoder().decode(t.subarray(0,256));return/^\s*(?:\uFEFF)?\s*<(?:!doctype\s+html|html|head|body)(?:\s|>)/i.test(e)}function R(t){if(t.byteLength===0)throw new Error("字体文件为空");if(K(t))throw new Error("字体 URL 返回 HTML 页面(可能是 SPA 路由回退),不是字体文件")}function Q(t){const e=T.get(t);if(e)return e;const n=(async()=>{const a=String.fromCharCode(...t.subarray(0,4));if(!["\0\0\0","true","OTTO","wOFF","wOF2","ttcf"].includes(a))throw new Error("文件内容不是支持的 TTF/OTF/WOFF 字体(可能返回了 JSON 或文本)");const{default:r}=await Promise.resolve().then(()=>require("./pdf-CvvrjPQg.cjs")).then(i=>i.fontkit_es),o=r.create(t);if(!Number.isFinite(o.unitsPerEm)||o.unitsPerEm<=0||!o.characterSet?.length||!o.numGlyphs)throw new Error("字体结构无效或不含可嵌入的单字体;请提供有效的 TTF/OTF/WOFF 文件")})();return T.set(t,n),n}function A(t,e,n=!1){const a=n?"字体加载超时,请检查网络或字体服务":e instanceof Error?e.message:String(e);return Object.assign(new Error(`PDF 字体 ${JSON.stringify(t)} 加载失败:${a}`),{cause:e})}function P(t,e){if(t>e)throw new Error(`字体文件超过单字体下载预算(${e}字节)`)}async function X(t,e,n){const a=Number(t.headers?.get("content-length"));try{Number.isFinite(a)&&P(a,e)}catch(r){throw t.body?.cancel(r).catch(()=>{}),r}if(!t.body){const r=new Uint8Array(await F(t.arrayBuffer(),n));return P(r.byteLength,e),r}return U(t.body,e,n)}async function U(t,e,n){const a=t.getReader(),r=[];let o=0;try{for(;;){const s=await F(a.read(),n);if(s.done)break;o+=s.value.byteLength,P(o,e),r.push(s.value)}const i=new Uint8Array(o);let c=0;for(const s of r)i.set(s,c),c+=s.byteLength;return i}catch(i){throw a.cancel(i).catch(()=>{}),i}finally{a.releaseLock()}}async function Y(t,e,n){if(t[0]!==31||t[1]!==139)return t;if(typeof DecompressionStream>"u")throw new Error("当前环境不支持 gzip 字体解压,请使用未压缩的字体 URL 或支持 DecompressionStream 的浏览器 / Node 环境");const r=new ReadableStream({start(o){o.enqueue(t),o.close()}}).pipeThrough(new DecompressionStream("gzip"));return U(r,e,n)}async function Z(t){const e=new AbortController;let n=!1;const a=setTimeout(()=>{n=!0,e.abort()},15e3);try{const r=await fetch(t,{signal:e.signal});if(!r.ok)throw new Error(`字体请求返回 HTTP ${r.status}`);if(/text\/html|application\/xhtml\+xml/i.test(r.headers?.get("content-type")??""))throw new Error("字体 URL 返回 HTML 页面(可能是 SPA 路由回退),不是字体文件");const o=p().maxFontBytes,i=await X(r,o,e.signal),c=await Y(i,o,e.signal);return R(c),{bytes:c,fromCache:!1}}catch(r){throw e.abort(),A(t,r,n)}finally{clearTimeout(a)}}async function tt(t){await v,await g.get(t);const e=await G(t);if(e)try{return R(e),{bytes:e,fromCache:!0}}catch{}return Z(t)}function et(t){const e=w.get(t);if(e)return e;const n=tt(t);w.set(t,n),E.add(n);const a=()=>{w.get(t)===n&&w.delete(t),E.delete(n),k()};return n.then(a,a),n}async function nt(t,e,n,a){if((l.get(t)??0)!==n||L!==a)return;H(t,e);const r=y.get(t);if(r){await r;return}const o=_(t,e);y.set(t,o),await o,y.get(t)===o&&y.delete(t)}function m(t){return t.reason??new DOMException("字体加载已取消","AbortError")}function F(t,e){return e?e.aborted?Promise.reject(m(e)):new Promise((n,a)=>{const r=()=>{e.removeEventListener("abort",r),a(m(e))};e.addEventListener("abort",r,{once:!0}),t.then(o=>{e.removeEventListener("abort",r),n(o)},o=>{e.removeEventListener("abort",r),a(o)})}):t}async function rt(t,e,n,a,r){try{return await F(Q(e.bytes),n.signal),e.bytes}catch(o){if(n.signal?.aborted)throw m(n.signal);if((l.get(t)??0)!==a||L!==r)throw A(t,o);if(await N(t),e.fromCache)return await z(t,n);throw A(t,o)}}async function z(t,e={}){if(e.signal?.aborted)throw m(e.signal);const n=l.get(t)??0,a=L,r=j(t);if(r&&!e.strict)return r;const o=r?void 0:et(t);S++;try{const i=r?{bytes:r,fromCache:!0}:await F(o,e.signal),c=e.strict?await rt(t,i,e,n,a):i.bytes;if(e.signal?.aborted)throw m(e.signal);return r||await F(nt(t,c,n,a),e.signal),c}catch(i){if(e.signal?.aborted)throw m(e.signal);if(e.strict)throw i;return null}finally{S--,k()}}exports.clearFontCache=I;exports.configureFontCache=W;exports.getFontCacheStats=p;exports.invalidateFontCache=N;exports.loadFontWithCache=z;
@@ -139,7 +139,7 @@ function I(t) {
139
139
  const a = String.fromCharCode(...t.subarray(0, 4));
140
140
  if (!["\0\0\0", "true", "OTTO", "wOFF", "wOF2", "ttcf"].includes(a))
141
141
  throw new Error("文件内容不是支持的 TTF/OTF/WOFF 字体(可能返回了 JSON 或文本)");
142
- const { default: r } = await import("./pdf-8UPQebOE.js").then((i) => i.f), o = r.create(t);
142
+ const { default: r } = await import("./pdf-BwNyeGpt.js").then((i) => i.f), o = r.create(t);
143
143
  if (!Number.isFinite(o.unitsPerEm) || o.unitsPerEm <= 0 || !o.characterSet?.length || !o.numGlyphs)
144
144
  throw new Error("字体结构无效或不含可嵌入的单字体;请提供有效的 TTF/OTF/WOFF 文件");
145
145
  })();
package/dist/index.cjs CHANGED
@@ -1,9 +1,9 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const $=require("./defaults-xhmcLLrf.cjs"),G=require("./template-bindings-BJR4k7qZ.cjs"),u=require("./style-UgIJSA1F.cjs"),U=require("./render-plan-7xpGrCEl.cjs"),X=require("./validate-BJ5HIWY8.cjs"),ce=require("./dataset-BkRmwgeJ.cjs"),A=require("./assets-C2U-e-Sz.cjs"),f=require("./json-snapshot-D1NTP2oI.cjs"),de=require("./grid-geometry-CZ_cYB6O.cjs"),Le=require("./grid-strokes-Cr7DwUux.cjs"),B=require("./capabilities-CsZ-pNHR.cjs"),Ke=require("./progress-BnLiS5eH.cjs"),Xe=require("./page-window-index-DEjnM6IB.cjs"),M=require("./template-registry-D3SjENi6.cjs"),W=require("./param-validation-DCK039V1.cjs"),me=require("./data-explanation-BktvER5B.cjs"),he=require("./template-outline-B3xVkzSv.cjs"),oe=require("./template-fragments-DFUpq5QM.cjs"),ge=require("./tree-BX380Rr7.cjs"),Ze={root:"mr-root",page:"mr-page",comp:"mr-comp",text:"mr-text",lines:"mr-lines",line:"mr-line",rich:"mr-rich",paragraph:"mr-paragraph",segment:"mr-segment",image:"mr-image",shape:"mr-shape",grid:"mr-grid",row:"mr-row",cell:"mr-cell",unknown:"mr-unknown"};function P(e,t){return t?.classNames?.[e]??Ze[e]}class Qe{constructor(){this.props=[]}add(t,r){return r==null||r===!1||r===""?this:(this.props.push([t,String(r)]),this)}mm(t,r,n,o=2){return this.add(t,`${u.round(u.mmToPx(r,n),o)}px`)}toString(){let t="";for(const[r,n]of this.props)t+=`${r}:${n};`;return t}applyTo(t){const r=this.toString();r&&(t.style.cssText=r)}}function T(e,t="unset"){return new Qe().add("all",t).add("display",e).add("box-sizing","border-box")}function Ie(e,t,r){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(u.resolveLineHeight(t))).add("text-align",t.align);const n=u.resolveFontSize(t,r);e.add("font-size",`${u.round(n.fontSizePx,2)}px`)}function et(e,t,r){const n=t.style??{};Ie(e,n,r),e.add("background-color",n.backgroundColor).add("opacity",n.opacity!=null?String(n.opacity):void 0).add("transform",n.rotateDeg?`rotate(${n.rotateDeg}deg)`:void 0)}function tt(e,t,r,n,o,a){const s=e.cell,i=a.createElement("td");i.className=P("cell",o),i.dataset.mrRowIndex=String(e.ri),i.dataset.mrColumnIndex=String(e.ci),i.setAttribute("role",t.table?.role==="header"?"columnheader":"cell"),s.colSpan&&(i.colSpan=s.colSpan),s.rowSpan&&(i.rowSpan=s.rowSpan);const l=u.mergeComponentStyles(t.style,s.style),c=T("block").add("position","absolute").mm("left",e.xMm,n).mm("top",e.yMm,n).mm("width",e.widthMm,n).mm("height",e.heightMm,n).add("background-color",l.backgroundColor).add("vertical-align",l.verticalAlign??"middle");Ie(c,l,n),c.applyTo(i);const d=a.createElement("div");d.className="mr-cell-content",T("flex").add("position","absolute").mm("left",r+(s.indentMm??0),n).mm("right",r,n).mm("top",r,n).mm("bottom",r,n).add("flex-direction","column").add("justify-content",l.verticalAlign==="top"?"flex-start":l.verticalAlign==="bottom"?"flex-end":"center").add("overflow-wrap","anywhere").add("overflow","hidden").applyTo(d),s.text!=null&&d.append(s.text);for(const m of s.children??[])d.appendChild(ue(m,n,o,a));return i.appendChild(d),i}function rt(e,t,r,n){return Le.resolveGridStrokes(e,t).map(o=>{const a=`${u.round(o.widthPt*r/72,2)}px solid ${o.color}`,s=n.createElement("div");s.className="mr-grid-edge",s.setAttribute("aria-hidden","true");const i=o.kind==="h";return T("block").add("position","absolute").add("pointer-events","none").mm("left",i?o.from:o.pos,r).mm("top",i?o.pos:o.from,r).mm("width",i?o.to-o.from:0,r).mm("height",i?0:o.to-o.from,r).add(i?"border-top":"border-left",a).applyTo(s),s})}function nt(e,t,r,n,o){const a=o.createElement("table");a.className=P("grid",n),a.setAttribute("role","table"),T("block").add("position","relative").add("width","100%").add("height","100%").applyTo(a);const s=de.resolveGridLayout(e,t.widthMm,t.heightMm),i=o.createElement("tbody");T("contents").applyTo(i),a.appendChild(i);const l=e.cells.map(()=>{const d=o.createElement("tr");return d.className=P("row",n),d.setAttribute("role","row"),T("contents").applyTo(d),i.appendChild(d),d});for(const d of s.cells)l[d.ri].appendChild(tt(d,t,e.paddingMm??.5,r,n,o));const c=o.createElement("div");return T("block").add("position","relative").add("width","100%").add("height","100%").applyTo(c),c.append(a,...rt(s,t,r,o)),c}function ot(e,t,r,n){const o=n.createElement("div");o.className=P("paragraph",r),T("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(o);for(const a of e.segments||[]){const s=n.createElement("span");s.className=P("segment",r),s.textContent=a.kind==="field"?a.field??"":a.text??"";const i=T("inline");if(a.style){const l=a.style;i.add("color",l.color).add("font-family",l.fontFamily).add("font-weight",l.bold!=null?l.bold?"700":"400":void 0).add("font-style",l.italic!=null?l.italic?"italic":"normal":void 0).add("text-decoration",l.underline!=null?l.underline?"underline":"none":void 0),(l.fontSize!=null||l.fontSizePx!=null)&&i.add("font-size",`${u.round(u.resolveFontSize(l,t).fontSizePx,2)}px`)}i.applyTo(s),o.appendChild(s)}return o}function it(e,t,r,n){if(U.isRichText(e)){const o=n.createElement("div");o.className=P("rich",r),T("block").applyTo(o);for(const a of e.richParagraphs)o.appendChild(ot(a,t,r,n));return o}if(Array.isArray(e.lines)&&e.lines.length>0){const o=n.createElement("div");o.className=P("lines",r),T("block").applyTo(o);for(const a of e.lines){const s=n.createElement("div");s.className=P("line",r),s.textContent=a,T("block").add("white-space","pre").add("min-height","1lh").applyTo(s),o.appendChild(s)}return o}return e.text??""}function at(e,t,r,n){const o=n.createElement("div");o.className=P("text",r);const a=e.style||{};return T("flex").add("width","100%").add("height","100%").add("flex-direction","column").add("justify-content",a.verticalAlign==="middle"?"center":a.verticalAlign==="bottom"?"flex-end":"flex-start").add("overflow-wrap","anywhere").add("overflow","hidden").applyTo(o),o.append(it(e,t,r,n)),o}function st(e,t,r){const n=r.createElement("img");return n.className=P("image",t),n.src=e.imageData,T("block").add("width","100%").add("height","100%").add("object-fit","contain").applyTo(n),n.alt=e.kind,n}function Ee(e,t,r,n){const o=n.createElement("div");o.className=P("shape",r);const a=e.style||{},s=u.resolveStroke(a),i=u.resolveBoxBorders(a),l=`${u.round(s.widthPt*t/72,2)}px solid ${s.color}`,c=T("block");return e.grid?c.add("position","relative"):e.kind==="rect"?(i.top&&c.add("border-top",l),i.right&&c.add("border-right",l),i.bottom&&c.add("border-bottom",l),i.left&&c.add("border-left",l)):e.kind==="ellipse"?(i.inner&&c.add("border",l).add("border-radius","50%"),a.backgroundColor&&c.add("background-color",a.backgroundColor)):e.kind==="line"&&c.add("height","0").add("border-top",l),c.add("box-sizing","border-box").add("width","100%").add("height","100%"),c.applyTo(o),o}function lt(e,t,r){const n=r.createElementNS("http://www.w3.org/2000/svg","svg"),o=u.mmToPx(e.widthMm,t),a=u.mmToPx(e.heightMm,t);n.setAttribute("width",String(Math.max(1,o))),n.setAttribute("height",String(Math.max(1,a))),n.setAttribute("aria-hidden","true"),n.style.overflow="visible",n.style.display="block";const s=r.createElementNS("http://www.w3.org/2000/svg","line");s.setAttribute("x1","0"),s.setAttribute("x2",String(o)),s.setAttribute("y1",e.lineDirection==="up"?String(a):"0"),s.setAttribute("y2",e.lineDirection==="up"?"0":String(a));const i=u.resolveStroke({...e.style,borderColor:e.style?.lineColor??e.style?.borderColor});return s.setAttribute("stroke",i.color),s.setAttribute("stroke-width",String(i.widthPt*t/72)),n.appendChild(s),n}function ue(e,t,r,n){const o=n.createElement("div");o.className=`${P("comp",r)} mr-kind-${e.kind}`;const a=T("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");if(et(a,e,t),a.applyTo(o),U.isImageBackedComponent(e))return o.appendChild(st(e,r,n)),o;if(e.kind==="text")return o.appendChild(at(e,t,r,n)),o;if(e.grid){const i=Ee(e,t,r,n);return i.appendChild(nt(e.grid,e,t,r,n)),o.appendChild(i),o}if(e.kind==="line"&&e.lineDirection)return o.appendChild(lt(e,t,n)),o;if(e.kind==="line"||e.kind==="rect"||e.kind==="ellipse")return o.appendChild(Ee(e,t,r,n)),o;const s=n.createElement("div");return s.className=P("unknown",r),T("block").applyTo(s),s.textContent=e.fallbackText??`[${e.kind}]`,s.dataset.mrUnsupported=e.kind,s.setAttribute("role","note"),o.appendChild(s),o}function ke(e,t,r,n){const o=n.createElement("div");return o.className=P("page",r),T("block","initial").add("position","relative").add("font-family",$.DEFAULT_FONT_FAMILY).add("font-size",`${u.round(u.resolveFontSize(void 0,t).fontSizePx,2)}px`).add("line-height",String(u.resolveLineHeight(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",$.DEFAULT_TEXT_COLOR).add("overflow","hidden").add("box-sizing","border-box").applyTo(o),e.components.forEach((a,s)=>{const i=ue(a,t,r,n);i.dataset.mrComponentIndex=String(s),o.appendChild(i)}),o}function ct(e,t,r={}){const n=r.dpi??96;B.reportOutputDiagnostics(e,"dom",r);const o=t.createElement("div");return o.className=P("root",r),T("block").applyTo(o),o.dataset.schemaVersion=e.schemaVersion,e.pages.forEach(a=>{o.appendChild(ke(a,n,r,t))}),o}function D(e){if(e?.aborted)throw e.reason??new DOMException("The operation was aborted.","AbortError")}const dt=(e,t)=>(D(t),/^data:image\/(?:png|jpe?g|webp|gif|svg\+xml)[;,]/i.test(e)?new Promise((r,n)=>{const o=new Image,a=()=>{o.onload=null,o.onerror=null,t?.removeEventListener("abort",s)},s=()=>{a(),o.src="",n(t?.reason??new DOMException("The operation was aborted.","AbortError"))};o.onload=()=>{a(),r(o)},o.onerror=()=>{a(),n(new Error("Image could not be decoded for Canvas output."))},t?.addEventListener("abort",s,{once:!0}),o.src=e}):Promise.reject(new TypeError("Canvas imageData must be an image data URL; provide imageLoader for other sources.")));function mt(e,t,r){return D(r),r?new Promise((n,o)=>{const a=()=>o(r.reason??new DOMException("The operation was aborted.","AbortError"));r.addEventListener("abort",a,{once:!0}),Promise.resolve().then(()=>e(t,r)).then(n,o).finally(()=>r.removeEventListener("abort",a))}):e(t)}async function ht(e,t,r){const n=new Map;for(const o of e.components)!U.isImageBackedComponent(o)||n.has(o.imageData)||n.set(o.imageData,await mt(t,o.imageData,r));return D(r),n}function gt(e,t,r,n,o,a){const s=t,i=s.naturalWidth??s.width??o,l=s.naturalHeight??s.height??a;if(i<=0||l<=0)throw new RangeError("Decoded Canvas image dimensions must be positive.");const c=Math.min(o/i,a/l),d=i*c,m=l*c;e.drawImage(t,r+(o-d)/2,n+(a-m)/2,d,m)}function Fe(e){return Xe.createPageWindowIndex(e.pageHeightsPx,e.gapPx).window(e.viewportHeightPx,e.scrollTopPx,e.overscan)}const pe=96/25.4;function ie(e,t=96){const r=t/96*pe;return{widthPx:Math.max(1,Math.round(e.pageWidthMm*r)),heightPx:Math.max(1,Math.round(e.pageHeightMm*r))}}function $e(e,t,r,n=64e6){if(!Number.isFinite(t)||t<=0||!Number.isFinite(r)||r<=0)throw new RangeError("Canvas dpr and dpi must be positive finite numbers.");if(!Number.isFinite(n)||n<=0)throw new RangeError("maxCanvasPixels must be positive and finite.");const o=ie(e,r),a=Math.round(o.widthPx*t),s=Math.round(o.heightPx*t);if(!Number.isSafeInteger(a)||!Number.isSafeInteger(s)||a*s>n)throw new RangeError("Canvas page exceeds maxCanvasPixels; reduce resolution or split the report.");return{width:a,height:s}}function De(e,t,r,n){const o=document.createElement("canvas"),{widthPx:a,heightPx:s}=ie(e,r),i=$e(e,t,r,n);o.width=i.width,o.height=i.height,o.style.width=`${a}px`,o.style.height=`${s}px`;const l=o.getContext("2d");if(!l)throw new Error("当前环境不支持 Canvas 2D(测试需真浏览器,见 e2e/canvas.spec.ts)");return l.scale(t,t),l.fillStyle="#ffffff",l.fillRect(0,0,a,s),{canvas:o,ctx:l}}function ut(e,t=96){return u.resolveFontSize(e,t).fontSizePx}function Ne(e,t,r,n,o,a,s,i="top"){e.font=`${t.italic?"italic ":""}${t.bold?"bold ":""}${t.fontSizePx}px ${s}`,"letterSpacing"in e&&(e.letterSpacing="0px"),e.fillStyle=t.color,e.textBaseline="alphabetic";const l=t.fontSizePx*t.lineHeight,c=t.text===""?[""]:t.text.split(`
2
- `),d=c.length*l;let m=n;i==="middle"?m=n+(a-d)/2:i==="bottom"&&(m=n+a-d),c.forEach((h,g)=>{pt(e,h,t,r,m+g*l+t.fontSizePx*.8,o)}),e.textAlign="left"}function pt(e,t,r,n,o,a){const s=Array.from(t),i=r.letterSpacingPx??0;if(!i){e.textAlign=r.align==="center"?"center":r.align==="right"?"right":"left";const m=r.align==="center"?n+a/2:r.align==="right"?n+a:n;e.fillText(t,m,o);return}const l=e.measureText(t).width+Math.max(0,s.length-1)*i,c=r.align==="center"?n+(a-l)/2:r.align==="right"?n+a-l:n;e.textAlign="left";let d="";s.forEach((m,h)=>{e.fillText(m,c+e.measureText(d).width+h*i,o),d+=m})}function ft(e,t,r,n,o,a,s){for(const i of Le.resolveGridStrokes(t,r))e.strokeStyle=i.color,e.lineWidth=u.ptToPx(i.widthPt,s),e.beginPath(),i.kind==="v"?(e.moveTo(n+i.pos*a,o+i.from*a),e.lineTo(n+i.pos*a,o+i.to*a)):(e.moveTo(n+i.from*a,o+i.pos*a),e.lineTo(n+i.to*a,o+i.pos*a)),e.stroke()}function wt(e,t,r,n,o,a){e.beginPath(),t.top&&(e.moveTo(r,n),e.lineTo(r+o,n)),t.right&&(e.moveTo(r+o,n),e.lineTo(r+o,n+a)),t.bottom&&(e.moveTo(r+o,n+a),e.lineTo(r,n+a)),t.left&&(e.moveTo(r,n+a),e.lineTo(r,n)),e.stroke()}function vt(e,t,r,n,o,a,s,i,l,c,d){const m=de.resolveGridLayout(t,a/i,s/i);for(const g of m.cells){const p=g.cell.style?.backgroundColor??r.style?.backgroundColor;p&&(e.fillStyle=p,e.fillRect(n+g.xMm*i,o+g.yMm*i,g.widthMm*i,g.heightMm*i))}ft(e,m,r,n,o,i,l);const h=t.paddingMm??.5;for(const g of m.cells){const p=g.cell.text??"";if(!p)continue;const y=u.mergeComponentStyles(r.style,g.cell.style),L=u.resolveFontSize(y,l),R=g.cell.indentMm??0,x=Math.max(0,g.widthMm-2*h-R),I=A.wrapText(p,x,{fontSizePt:L.fontSizePt,bold:y.bold,italic:y.italic,fontFamily:y.fontFamily??c,letterSpacingPt:y.letterSpacing},d).join(`
3
- `);Ne(e,{text:I,fontSizePx:L.fontSizePx,bold:y.bold??!1,italic:y.italic,color:u.resolveTextColor(y,$.DEFAULT_TEXT_COLOR),align:y.align??"left",lineHeight:u.resolveLineHeight(y),letterSpacingPx:u.ptToPx(y.letterSpacing??0,l)},n+(g.xMm+h+R)*i,o+(g.yMm+h)*i,x*i,Math.max(0,g.heightMm-2*h)*i,y.fontFamily??c,y.verticalAlign??"middle")}}function yt(e,t,r,n,o,a,s,i,l){const c=t.style??{},d=u.resolveFontSize(c,s),m=U.isRichText(t)?t.richParagraphs.map(h=>h.segments.map(g=>g.text??g.field??"").join("")).join(`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const k=require("./defaults-xhmcLLrf.cjs"),Y=require("./record-bindings-By_UKZ2g.cjs"),g=require("./style-UgIJSA1F.cjs"),U=require("./render-plan-7xpGrCEl.cjs"),y=require("./template-registry-Co1zPq5e.cjs"),he=require("./dataset-BkRmwgeJ.cjs"),H=require("./textwrap-CWHyzkBH.cjs"),b=require("./json-snapshot-WWSGlaHG.cjs"),ue=require("./grid-geometry-CZ_cYB6O.cjs"),De=require("./grid-strokes-Cr7DwUux.cjs"),B=require("./capabilities-CAh2Nrue.cjs"),Ze=require("./progress-B0ctFpKf.cjs"),Q=require("./assets-B9ImAi6_.cjs"),J=require("./drill-DYTxuL3A.cjs"),W=require("./param-validation-C3HlcLLO.cjs"),ee=require("./template-catalog-FJE_c9Qe.cjs"),ge=require("./data-explanation-DE55G30w.cjs"),pe=require("./template-outline-BwRV_eRo.cjs"),se=require("./template-fragments-DcKeiylI.cjs"),F=require("./batch-BaP6pWDE.cjs"),fe=require("./tree-BX380Rr7.cjs"),Qe={root:"mr-root",page:"mr-page",comp:"mr-comp",text:"mr-text",lines:"mr-lines",line:"mr-line",rich:"mr-rich",paragraph:"mr-paragraph",segment:"mr-segment",image:"mr-image",shape:"mr-shape",grid:"mr-grid",row:"mr-row",cell:"mr-cell",unknown:"mr-unknown"};function P(e,t){return t?.classNames?.[e]??Qe[e]}class et{constructor(){this.props=[]}add(t,n){return n==null||n===!1||n===""?this:(this.props.push([t,String(n)]),this)}mm(t,n,r,i=2){return this.add(t,`${g.round(g.mmToPx(n,r),i)}px`)}toString(){let t="";for(const[n,r]of this.props)t+=`${n}:${r};`;return t}applyTo(t){const n=this.toString();n&&(t.style.cssText=n)}}function T(e,t="unset"){return new et().add("all",t).add("display",e).add("box-sizing","border-box")}function ke(e,t,n){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(g.resolveLineHeight(t))).add("text-align",t.align);const r=g.resolveFontSize(t,n);e.add("font-size",`${g.round(r.fontSizePx,2)}px`)}function tt(e,t,n){const r=t.style??{};ke(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)}function nt(e,t,n,r,i,a){const l=e.cell,o=a.createElement("td");o.className=P("cell",i),o.dataset.mrRowIndex=String(e.ri),o.dataset.mrColumnIndex=String(e.ci),o.setAttribute("role",t.table?.role==="header"?"columnheader":"cell"),l.colSpan&&(o.colSpan=l.colSpan),l.rowSpan&&(o.rowSpan=l.rowSpan);const s=g.mergeComponentStyles(t.style,l.style),c=T("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");ke(c,s,r),c.applyTo(o);const m=a.createElement("div");m.className="mr-cell-content",T("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);for(const d of l.children??[])m.appendChild(we(d,r,i,a));return o.appendChild(m),o}function rt(e,t,n,r){return De.resolveGridStrokes(e,t).map(i=>{const a=`${g.round(i.widthPt*n/72,2)}px solid ${i.color}`,l=r.createElement("div");l.className="mr-grid-edge",l.setAttribute("aria-hidden","true");const o=i.kind==="h";return T("block").add("position","absolute").add("pointer-events","none").mm("left",o?i.from:i.pos,n).mm("top",o?i.pos:i.from,n).mm("width",o?i.to-i.from:0,n).mm("height",o?0:i.to-i.from,n).add(o?"border-top":"border-left",a).applyTo(l),l})}function it(e,t,n,r,i){const a=i.createElement("table");a.className=P("grid",r),a.setAttribute("role","table"),T("block").add("position","relative").add("width","100%").add("height","100%").applyTo(a);const l=ue.resolveGridLayout(e,t.widthMm,t.heightMm),o=i.createElement("tbody");T("contents").applyTo(o),a.appendChild(o);const s=e.cells.map(()=>{const m=i.createElement("tr");return m.className=P("row",r),m.setAttribute("role","row"),T("contents").applyTo(m),o.appendChild(m),m});for(const m of l.cells)s[m.ri].appendChild(nt(m,t,e.paddingMm??.5,n,r,i));const c=i.createElement("div");return T("block").add("position","relative").add("width","100%").add("height","100%").applyTo(c),c.append(a,...rt(l,t,n,i)),c}function ot(e,t,n,r){const i=r.createElement("div");i.className=P("paragraph",n),T("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);for(const a of e.segments||[]){const l=r.createElement("span");l.className=P("segment",n),l.textContent=a.kind==="field"?a.field??"":a.text??"";const o=T("inline");if(a.style){const s=a.style;o.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)&&o.add("font-size",`${g.round(g.resolveFontSize(s,t).fontSizePx,2)}px`)}o.applyTo(l),i.appendChild(l)}return i}function at(e,t,n,r){if(U.isRichText(e)){const i=r.createElement("div");i.className=P("rich",n),T("block").applyTo(i);for(const a of e.richParagraphs)i.appendChild(ot(a,t,n,r));return i}if(Array.isArray(e.lines)&&e.lines.length>0){const i=r.createElement("div");i.className=P("lines",n),T("block").applyTo(i);for(const a of e.lines){const l=r.createElement("div");l.className=P("line",n),l.textContent=a,T("block").add("white-space","pre").add("min-height","1lh").applyTo(l),i.appendChild(l)}return i}return e.text??""}function st(e,t,n,r){const i=r.createElement("div");i.className=P("text",n);const a=e.style||{};return T("flex").add("width","100%").add("height","100%").add("flex-direction","column").add("justify-content",a.verticalAlign==="middle"?"center":a.verticalAlign==="bottom"?"flex-end":"flex-start").add("overflow-wrap","anywhere").add("overflow","hidden").applyTo(i),i.append(at(e,t,n,r)),i}function lt(e,t,n){const r=n.createElement("img");return r.className=P("image",t),r.src=e.imageData,T("block").add("width","100%").add("height","100%").add("object-fit","contain").applyTo(r),r.alt=e.kind,r}function Re(e,t,n,r){const i=r.createElement("div");i.className=P("shape",n);const a=e.style||{},l=g.resolveStroke(a),o=g.resolveBoxBorders(a),s=`${g.round(l.widthPt*t/72,2)}px solid ${l.color}`,c=T("block");return e.grid?c.add("position","relative"):e.kind==="rect"?(o.top&&c.add("border-top",s),o.right&&c.add("border-right",s),o.bottom&&c.add("border-bottom",s),o.left&&c.add("border-left",s)):e.kind==="ellipse"?(o.inner&&c.add("border",s).add("border-radius","50%"),a.backgroundColor&&c.add("background-color",a.backgroundColor)):e.kind==="line"&&c.add("height","0").add("border-top",s),c.add("box-sizing","border-box").add("width","100%").add("height","100%"),c.applyTo(i),i}function ct(e,t,n){const r=n.createElementNS("http://www.w3.org/2000/svg","svg"),i=g.mmToPx(e.widthMm,t),a=g.mmToPx(e.heightMm,t);r.setAttribute("width",String(Math.max(1,i))),r.setAttribute("height",String(Math.max(1,a))),r.setAttribute("aria-hidden","true"),r.style.overflow="visible",r.style.display="block";const l=n.createElementNS("http://www.w3.org/2000/svg","line");l.setAttribute("x1","0"),l.setAttribute("x2",String(i)),l.setAttribute("y1",e.lineDirection==="up"?String(a):"0"),l.setAttribute("y2",e.lineDirection==="up"?"0":String(a));const o=g.resolveStroke({...e.style,borderColor:e.style?.lineColor??e.style?.borderColor});return l.setAttribute("stroke",o.color),l.setAttribute("stroke-width",String(o.widthPt*t/72)),r.appendChild(l),r}function we(e,t,n,r){const i=r.createElement("div");i.className=`${P("comp",n)} mr-kind-${e.kind}`;const a=T("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");if(tt(a,e,t),a.applyTo(i),U.isImageBackedComponent(e))return i.appendChild(lt(e,n,r)),i;if(e.kind==="text")return i.appendChild(st(e,t,n,r)),i;if(e.grid){const o=Re(e,t,n,r);return o.appendChild(it(e.grid,e,t,n,r)),i.appendChild(o),i}if(e.kind==="line"&&e.lineDirection)return i.appendChild(ct(e,t,r)),i;if(e.kind==="line"||e.kind==="rect"||e.kind==="ellipse")return i.appendChild(Re(e,t,n,r)),i;const l=r.createElement("div");return l.className=P("unknown",n),T("block").applyTo(l),l.textContent=e.fallbackText??`[${e.kind}]`,l.dataset.mrUnsupported=e.kind,l.setAttribute("role","note"),i.appendChild(l),i}function Fe(e,t,n,r){const i=r.createElement("div");return i.className=P("page",n),T("block","initial").add("position","relative").add("font-family",k.DEFAULT_FONT_FAMILY).add("font-size",`${g.round(g.resolveFontSize(void 0,t).fontSizePx,2)}px`).add("line-height",String(g.resolveLineHeight(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",k.DEFAULT_TEXT_COLOR).add("overflow","hidden").add("box-sizing","border-box").applyTo(i),e.components.forEach((a,l)=>{const o=we(a,t,n,r);o.dataset.mrComponentIndex=String(l),i.appendChild(o)}),i}function mt(e,t,n={}){const r=n.dpi??96;B.reportOutputDiagnostics(e,"dom",n);const i=t.createElement("div");return i.className=P("root",n),T("block").applyTo(i),i.dataset.schemaVersion=e.schemaVersion,e.pages.forEach(a=>{i.appendChild(Fe(a,r,n,t))}),i}function $(e){if(e?.aborted)throw e.reason??new DOMException("The operation was aborted.","AbortError")}const dt=(e,t)=>($(t),/^data:image\/(?:png|jpe?g|webp|gif|svg\+xml)[;,]/i.test(e)?new Promise((n,r)=>{const i=new Image,a=()=>{i.onload=null,i.onerror=null,t?.removeEventListener("abort",l)},l=()=>{a(),i.src="",r(t?.reason??new DOMException("The operation was aborted.","AbortError"))};i.onload=()=>{a(),n(i)},i.onerror=()=>{a(),r(new Error("Image could not be decoded for Canvas output."))},t?.addEventListener("abort",l,{once:!0}),i.src=e}):Promise.reject(new TypeError("Canvas imageData must be an image data URL; provide imageLoader for other sources.")));function ht(e,t,n){return $(n),n?new Promise((r,i)=>{const a=()=>i(n.reason??new DOMException("The operation was aborted.","AbortError"));n.addEventListener("abort",a,{once:!0}),Promise.resolve().then(()=>e(t,n)).then(r,i).finally(()=>n.removeEventListener("abort",a))}):e(t)}async function ut(e,t,n){const r=new Map;for(const i of e.components)!U.isImageBackedComponent(i)||r.has(i.imageData)||r.set(i.imageData,await ht(t,i.imageData,n));return $(n),r}function gt(e,t,n,r,i,a){const l=t,o=l.naturalWidth??l.width??i,s=l.naturalHeight??l.height??a;if(o<=0||s<=0)throw new RangeError("Decoded Canvas image dimensions must be positive.");const c=Math.min(i/o,a/s),m=o*c,d=s*c;e.drawImage(t,n+(i-m)/2,r+(a-d)/2,m,d)}function $e(e){return J.createPageWindowIndex(e.pageHeightsPx,e.gapPx).window(e.viewportHeightPx,e.scrollTopPx,e.overscan)}const ve=96/25.4;function le(e,t=96){const n=t/96*ve;return{widthPx:Math.max(1,Math.round(e.pageWidthMm*n)),heightPx:Math.max(1,Math.round(e.pageHeightMm*n))}}function Ne(e,t,n,r=64e6){if(!Number.isFinite(t)||t<=0||!Number.isFinite(n)||n<=0)throw new RangeError("Canvas dpr and dpi must be positive finite numbers.");if(!Number.isFinite(r)||r<=0)throw new RangeError("maxCanvasPixels must be positive and finite.");const i=le(e,n),a=Math.round(i.widthPx*t),l=Math.round(i.heightPx*t);if(!Number.isSafeInteger(a)||!Number.isSafeInteger(l)||a*l>r)throw new RangeError("Canvas page exceeds maxCanvasPixels; reduce resolution or split the report.");return{width:a,height:l}}function Oe(e,t,n,r){const i=document.createElement("canvas"),{widthPx:a,heightPx:l}=le(e,n),o=Ne(e,t,n,r);i.width=o.width,i.height=o.height,i.style.width=`${a}px`,i.style.height=`${l}px`;const s=i.getContext("2d");if(!s)throw new Error("当前环境不支持 Canvas 2D(测试需真浏览器,见 e2e/canvas.spec.ts)");return s.scale(t,t),s.fillStyle="#ffffff",s.fillRect(0,0,a,l),{canvas:i,ctx:s}}function pt(e,t=96){return g.resolveFontSize(e,t).fontSizePx}function _e(e,t,n,r,i,a,l,o="top"){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";const s=t.fontSizePx*t.lineHeight,c=t.text===""?[""]:t.text.split(`
2
+ `),m=c.length*s;let d=r;o==="middle"?d=r+(a-m)/2:o==="bottom"&&(d=r+a-m),c.forEach((h,u)=>{ft(e,h,t,n,d+u*s+t.fontSizePx*.8,i)}),e.textAlign="left"}function ft(e,t,n,r,i,a){const l=Array.from(t),o=n.letterSpacingPx??0;if(!o){e.textAlign=n.align==="center"?"center":n.align==="right"?"right":"left";const d=n.align==="center"?r+a/2:n.align==="right"?r+a:r;e.fillText(t,d,i);return}const s=e.measureText(t).width+Math.max(0,l.length-1)*o,c=n.align==="center"?r+(a-s)/2:n.align==="right"?r+a-s:r;e.textAlign="left";let m="";l.forEach((d,h)=>{e.fillText(d,c+e.measureText(m).width+h*o,i),m+=d})}function wt(e,t,n,r,i,a,l){for(const o of De.resolveGridStrokes(t,n))e.strokeStyle=o.color,e.lineWidth=g.ptToPx(o.widthPt,l),e.beginPath(),o.kind==="v"?(e.moveTo(r+o.pos*a,i+o.from*a),e.lineTo(r+o.pos*a,i+o.to*a)):(e.moveTo(r+o.from*a,i+o.pos*a),e.lineTo(r+o.to*a,i+o.pos*a)),e.stroke()}function vt(e,t,n,r,i,a){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+a)),t.bottom&&(e.moveTo(n+i,r+a),e.lineTo(n,r+a)),t.left&&(e.moveTo(n,r+a),e.lineTo(n,r)),e.stroke()}function Mt(e,t,n,r,i,a,l,o,s,c,m){const d=ue.resolveGridLayout(t,a/o,l/o);for(const u of d.cells){const p=u.cell.style?.backgroundColor??n.style?.backgroundColor;p&&(e.fillStyle=p,e.fillRect(r+u.xMm*o,i+u.yMm*o,u.widthMm*o,u.heightMm*o))}wt(e,d,n,r,i,o,s);const h=t.paddingMm??.5;for(const u of d.cells){const p=u.cell.text??"";if(!p)continue;const v=g.mergeComponentStyles(n.style,u.cell.style),A=g.resolveFontSize(v,s),R=u.cell.indentMm??0,x=Math.max(0,u.widthMm-2*h-R),L=H.wrapText(p,x,{fontSizePt:A.fontSizePt,bold:v.bold,italic:v.italic,fontFamily:v.fontFamily??c,letterSpacingPt:v.letterSpacing},m).join(`
3
+ `);_e(e,{text:L,fontSizePx:A.fontSizePx,bold:v.bold??!1,italic:v.italic,color:g.resolveTextColor(v,k.DEFAULT_TEXT_COLOR),align:v.align??"left",lineHeight:g.resolveLineHeight(v),letterSpacingPx:g.ptToPx(v.letterSpacing??0,s)},r+(u.xMm+h+R)*o,i+(u.yMm+h)*o,x*o,Math.max(0,u.heightMm-2*h)*o,v.fontFamily??c,v.verticalAlign??"middle")}}function yt(e,t,n,r,i,a,l,o,s){const c=t.style??{},m=g.resolveFontSize(c,l),d=U.isRichText(t)?t.richParagraphs.map(h=>h.segments.map(u=>u.text??u.field??"").join("")).join(`
4
4
  `):t.lines?.length?t.lines.join(`
5
- `):A.wrapText(t.text??"",t.widthMm,{fontSizePt:d.fontSizePt,bold:c.bold,italic:c.italic,fontFamily:c.fontFamily??i,letterSpacingPt:c.letterSpacing},l).join(`
6
- `);Ne(e,{text:m,fontSizePx:d.fontSizePx,bold:c.bold??!1,italic:c.italic,color:u.resolveTextColor(c),align:c.align??"left",lineHeight:u.resolveLineHeight(c),letterSpacingPx:u.ptToPx(c.letterSpacing??0,s)},r,n,o,a,c.fontFamily??i,c.verticalAlign)}function fe(e,t,r,n,o,a,s){const i=t.leftMm*r,l=t.topMm*r,c=t.widthMm*r,d=t.heightMm*r,m=t.style??{};if(U.isImageBackedComponent(t)){const h=s?.get(t.imageData);h?gt(e,h,i,l,c,d):Te(e,t,i,l,c,d);return}if(t.grid){vt(e,t.grid,t,i,l,c,d,r,n,o,a);return}switch(t.kind){case"text":{yt(e,t,i,l,c,d,n,o,a);break}case"rect":{const h=u.resolveStroke(m),g=u.resolveBoxBorders(m);m.backgroundColor&&(e.fillStyle=m.backgroundColor,e.fillRect(i,l,c,d)),g.inner&&(e.strokeStyle=h.color,e.lineWidth=u.ptToPx(h.widthPt,n),wt(e,g,i,l,c,d));break}case"line":{const h=u.resolveStroke({...m,borderColor:m.lineColor??m.borderColor});e.strokeStyle=h.color,e.lineWidth=u.ptToPx(h.widthPt,n),e.beginPath();const g=t.lineDirection==="up"?l+d:t.lineDirection==="down"?l:l+d/2,p=t.lineDirection==="up"?l:t.lineDirection==="down"?l+d:l+d/2;e.moveTo(i,g),e.lineTo(i+c,p),e.stroke();break}case"ellipse":{const h=u.resolveStroke(m);e.strokeStyle=h.color,e.lineWidth=u.ptToPx(h.widthPt,n),m.backgroundColor&&(e.fillStyle=m.backgroundColor,e.beginPath(),e.ellipse(i+c/2,l+d/2,c/2,d/2,0,0,Math.PI*2),e.fill()),e.beginPath(),e.ellipse(i+c/2,l+d/2,c/2,d/2,0,0,Math.PI*2),e.stroke();break}default:Te(e,t,i,l,c,d);break}}function Te(e,t,r,n,o,a){e.save(),e.strokeStyle="#94a3b8",e.strokeRect(r,n,o,a),e.fillStyle="#64748b",e.font="12px sans-serif",e.fillText(t.fallbackText??`[${t.kind}]`,r+3,n+14),e.restore()}async function bt(e,t={}){if(typeof document>"u")throw new Error("renderPlanToImages 需要浏览器环境(SSR/Node 请在客户端钩子中调用)");const{format:r="png",quality:n=.92,...o}=t;if(r!=="png"&&r!=="jpeg")throw new TypeError("Image format must be png or jpeg.");if(!Number.isFinite(n)||n<0||n>1)throw new RangeError("Image quality must be between 0 and 1.");D(t.signal);const a=await A.resolvePlanAssets(e,{...t,format:"canvas"});e=a.plan;const s=[...a.diagnostics,...B.reportOutputDiagnostics(e,"canvas",t)],i=r==="jpeg"?"image/jpeg":"image/png",l=[],c=Math.min(e.pages.length-1,t.end??e.pages.length-1);for(let d=Math.max(0,t.start??0);d<=c;d++){D(t.signal);const m=await Oe(e.pages[d],d,o,s);try{l.push(await Mt(m,i,n,t.signal))}finally{m.width=0,m.height=0}await Ke.outputCheckpoint(t,l.length,c-Math.max(0,t.start??0)+1)}return D(t.signal),{blobs:l,diagnostics:s}}function Mt(e,t,r,n){return D(n),new Promise((o,a)=>{const s=()=>a(n?.reason??new DOMException("The operation was aborted.","AbortError"));n?.addEventListener("abort",s,{once:!0});try{e.toBlob(i=>{n?.removeEventListener("abort",s),i?o(i):a(new Error("Canvas encoding failed; no empty image was emitted."))},t,r)}catch(i){n?.removeEventListener("abort",s),a(i)}})}function Et(e,t={}){if(D(t.signal),typeof document>"u")throw new Error("renderPlanToCanvas 需要浏览器环境(SSR 请在客户端钩子中调用)");const r=t.dpr??(typeof devicePixelRatio=="number"?devicePixelRatio:1),n=t.dpi??96,o=n/96*pe,a=t.fontFamily??$.DEFAULT_FONT_FAMILY,s=t.measurer??A.heuristicMeasurer,i=Math.max(0,t.start??0),l=Math.min(e.pages.length-1,t.end??e.pages.length-1),c=[],d=B.reportOutputDiagnostics(e,"canvas",t),m=Tt(e,i,l);for(const h of m)B.notifyOutputDiagnostic(h,t),d.push(h);if(t.fidelity==="strict"&&m.length)throw new B.OutputFidelityError(d);for(let h=i;h<=l;h++){D(t.signal);const g=e.pages[h],{canvas:p,ctx:y}=De(g,r,n,t.maxCanvasPixels);for(const L of g.components)fe(y,L,o,n,a,s);c.push(p)}return{canvases:c,diagnostics:d}}function Tt(e,t,r){return r<t?[]:e.pages.slice(t,r+1).flatMap((n,o)=>n.components.flatMap((a,s)=>U.isImageBackedComponent(a)?[{code:"async-image-required",severity:"warning",format:"canvas",pageIndex:t+o,componentIndex:s,kind:a.kind,nid:a.nid,message:"Use renderPlanToCanvasAsync or renderPlanToImages to decode and include images."}]:[]))}async function xt(e,t={}){if(typeof document>"u")throw new Error("renderPlanToCanvasAsync 需要浏览器环境(Node 请使用 PDF 或 XLSX 输出)");D(t.signal);const r=await A.resolvePlanAssets(e,{...t,format:"canvas"});e=r.plan;const n=[...r.diagnostics,...B.reportOutputDiagnostics(e,"canvas",t)],o=[],a=Math.min(e.pages.length-1,t.end??e.pages.length-1);for(let s=Math.max(0,t.start??0);s<=a;s++)o.push(await Oe(e.pages[s],s,t,n));return{canvases:o,diagnostics:n}}async function Oe(e,t,r,n){const o=r.dpr??(typeof devicePixelRatio=="number"?devicePixelRatio:1),a=r.dpi??96,s=r.fontFamily??$.DEFAULT_FONT_FAMILY,i=await _e(e,t,r,n);D(r.signal);const{canvas:l,ctx:c}=De(e,o,a,r.maxCanvasPixels);for(const d of e.components)fe(c,d,a/25.4,a,s,r.measurer??A.heuristicMeasurer,i);return l}async function _e(e,t,r,n){const o=r.imageLoader??dt;return ht(e,async(a,s)=>{try{return await o(a,s)}catch(i){if(s?.aborted)throw i;const l=e.components.findIndex(m=>m.imageData===a),c=e.components[l],d={code:"image-decode-failed",severity:"warning",format:"canvas",pageIndex:t,componentIndex:l,kind:c.kind,nid:c.nid,message:"Image decoding failed; raster output was cancelled instead of omitting the image."};throw n.push(d),B.notifyOutputDiagnostic(d,r),i}},r.signal)}function Rt(e,t={}){const r=t.dpr??(typeof devicePixelRatio=="number"?devicePixelRatio:1),n=t.dpi??96,o=n/96*pe,a=t.fontFamily??$.DEFAULT_FONT_FAMILY,s=t.measurer??A.heuristicMeasurer,i=t.overscan??1,l=t.gapPx??18,c=t.pagesPerFrame??1,d=e.pages.map(w=>w.pageHeightMm*o),m=Math.max(1,...e.pages.map(w=>w.pageWidthMm*o)),h={start:0,end:-1};let g=null,p=null,y=null,L=null,R=[],x=0,I=[],V=0,H=new AbortController;const ye=[];function Ve(){const w=g;w.innerHTML="",p=document.createElement("div"),p.style.cssText=`width:${m}px;margin:0 auto;`,y=document.createElement("div"),L=document.createElement("div"),p.appendChild(y),R=[];const S=Math.min(e.pages.length,3+i*2);for(let j=0;j<S;j++){const E=document.createElement("div");E.style.cssText=`margin:0 auto ${l}px;box-shadow:0 2px 8px rgba(0,0,0,.35);background:#fff;`,p.appendChild(E),R.push(E)}p.appendChild(L),w.appendChild(p)}async function Ge(w,S){const j=V,E=await A.resolvePlanAssets(e,{...t,signal:H.signal,format:"canvas",start:S,end:S});ye.push(...E.diagnostics);const k=E.plan.pages[S],ee=await _e(k,S,{...t,signal:H.signal},ye);if(j!==V||!g)return;const{widthPx:se,heightPx:le}=ie(k,n);let z=w.firstElementChild;(!z||z.tagName!=="CANVAS")&&(z=document.createElement("canvas"),w.innerHTML="",w.appendChild(z));const Me=$e(k,r,n,t.maxCanvasPixels);z.width=Me.width,z.height=Me.height,z.style.width=`${se}px`,z.style.height=`${le}px`;const Y=z.getContext("2d");if(Y){Y.setTransform(1,0,0,1,0,0),Y.scale(r,r),Y.fillStyle="#ffffff",Y.fillRect(0,0,se,le);for(const Je of k.components)fe(Y,Je,o,n,a,s,ee);z.dataset.canvasPage=String(S),w.style.height=`${le}px`,w.style.width=`${se}px`}}function Ye(w){V++,h.start=w.start,h.end=w.end,y.style.height=`${w.start*l+d.slice(0,w.start).reduce((E,k)=>E+k,0)}px`;const S=e.pages.length-1-w.end;L.style.height=`${S*l+d.slice(w.end+1).reduce((E,k)=>E+k,0)}px`;const j=w.end-w.start+1;R.forEach((E,k)=>{if(k<j){E.style.display="";const ee=w.start+k;E.style.height=`${d[ee]??0}px`}else E.style.display="none"}),I=[];for(let E=w.start;E<=w.end;E++){const k=R[E-w.start];if(!k)continue;k.firstElementChild?.dataset?.canvasPage!==String(E)&&I.push(E)}ae()}function ae(){x||I.length===0||(x=requestAnimationFrame(()=>{x=0;let w=Math.max(1,c);for(;I.length>0&&w-- >0;){const S=I.shift(),j=R[S-h.start];j&&Ge(j,S).catch(()=>{})}I.length>0&&ae()}))}function Z(){x||(x=requestAnimationFrame(()=>{x=0;const w=g,S=Fe({pageHeightsPx:d,viewportHeightPx:w.clientHeight,scrollTopPx:w.scrollTop,overscan:i,gapPx:l});S.start!==h.start||S.end!==h.end?Ye(S):ae()}))}let Q=null;return{attach(w){if(typeof document>"u")throw new Error("createCanvasPager 需要浏览器环境(SSR 请在客户端钩子中调用 attach)");D(t.signal),H=new AbortController,t.signal?.addEventListener("abort",be,{once:!0}),B.reportOutputDiagnostics(e,"canvas",t),g=w,Ve(),w.addEventListener("scroll",Z,{passive:!0}),typeof ResizeObserver<"u"&&(Q=new ResizeObserver(()=>Z()),Q.observe(w)),Z()},destroy(){V++,H.abort(),t.signal?.removeEventListener("abort",be),x&&cancelAnimationFrame(x),x=0,Q?.disconnect(),Q=null,g?.removeEventListener("scroll",Z),I=[],p?.remove(),g=null},window(){return{...h}}};function be(){H.abort(t.signal?.reason)}}function we(e,t,r){let n,o;if(typeof e=="string"){const a=u.PAPER_SIZES[e];if(!a)throw new Error(`未知纸张预设 "${e}"(可用:${Object.keys(u.PAPER_SIZES).join("/")})`);n=a.widthMm,o=a.heightMm}else typeof e=="number"?(n=e,o=t??297):(n=e.widthMm,o=e.heightMm);return r?{widthMm:o,heightMm:n}:{widthMm:n,heightMm:o}}class Be{constructor(){this.pages=[],this.pending=null,this.templateParams=void 0}repeat(t){return this.templateRepeat=t,this}params(t){return this.templateParams=t,this}page(t="a4",r={},n){this.collect();const a=n!=null&&!("margins"in n)&&!("landscape"in n)&&("marginTopMm"in n||"marginBottomMm"in n||"marginLeftMm"in n||"marginRightMm"in n)?{margins:n}:typeof r=="number"?n??{}:r,{widthMm:s,heightMm:i}=we(t,typeof r=="number"?r:void 0,a.landscape),l=a.margins??{};return this.pending=new He(this,{widthMm:s,heightMm:i,marginTopMm:l.marginTopMm??10,marginBottomMm:l.marginBottomMm??10,marginLeftMm:l.marginLeftMm??10,marginRightMm:l.marginRightMm??10}),this.pending}collect(){this.pending&&(this.pages.push(this.pending.buildPage()),this.pending=null)}build(){if(this.collect(),this.pages.length===0)throw new Error("模板至少需要一页:先调用 .page() 添加内容");return{...this.templateParams?{params:this.templateParams}:{},...this.templateRepeat?{repeat:this.templateRepeat}:{},pages:this.pages}}}class He{constructor(t,r){this.parent=t,this.page=r,this.components=[]}text(t,r={},n={}){return this.components.push({kind:"text",leftMm:r.leftMm??0,topMm:r.topMm??0,widthMm:r.widthMm??60,heightMm:r.heightMm??8,text:t,style:n}),this}list(t,r,n,o={}){return this.components.push({kind:"list",leftMm:r.leftMm??10,topMm:r.topMm??30,widthMm:r.widthMm??180,dataset:t,columns:n,...o}),this}rect(t,r={}){return this.components.push({kind:"rect",...t,style:r}),this}line(t,r,n,o={}){return this.components.push({kind:"line",leftMm:t,topMm:r,widthMm:n,heightMm:.5,style:o}),this}barcode(t,r){return this.components.push({kind:"barcode",leftMm:r.leftMm??0,topMm:r.topMm??0,widthMm:r.widthMm??40,heightMm:r.heightMm??12,fallbackText:t}),this}qrcode(t,r,n,o){return this.components.push({kind:"qrcode",leftMm:n,topMm:o,widthMm:r,heightMm:r,fallbackText:t}),this}buildPage(){return{...this.page,components:this.components}}done(){return this.parent}build(){return this.done().build()}}function St(){return new Be}function Ct(e,t={}){return ce.validateDatasetRows([],e),e.fields.map(r=>({field:r.field,header:`${r.label??r.field}${r.unit?` (${r.unit})`:""}`,semanticRole:r.semanticRole??(r.type==="number"||r.type==="decimal"?"measure":r.type==="date"?"date":r.enum?"dimension":"text"),...t[r.field]}))}function N(e,t,r=!1){if(!Number.isFinite(e)||(r?e<0:e<=0))throw new Error(`${t} 必须是有限${r?"非负":"正"}数`)}function re(e,t,r){if(e!==void 0&&!["left","center","right","justify",...r?["auto"]:[]].includes(e))throw new Error(`${t} 必须是 left/center/right/justify${r?"/auto":""}`)}function Pt(e){const t=e.layout??"page";if(t!=="page"&&t!=="wide")throw new Error("layout 必须是 page 或 wide");if(t==="wide"&&(e.paper!==void 0||e.landscape!==void 0))throw new Error('宽表布局不能同时指定 paper 或 landscape;标准纸型请使用 layout: "page"');if(t!=="wide"&&e.columnWidthMm!==void 0)throw new Error('columnWidthMm 仅适用于 layout: "wide"');const r=e.columnWidthMm??30;return N(r,"columnWidthMm"),{layout:t,columnWidthMm:r}}function At(e){const t=e.paper===void 0?"a4":e.paper;if(typeof t!="string"&&(typeof t!="object"||t===null)||e.landscape!==void 0&&typeof e.landscape!="boolean")throw new Error("paper 必须是纸张预设名或 { widthMm, heightMm } 对象,landscape 必须是布尔值");if(typeof t=="string"&&!Object.prototype.hasOwnProperty.call(u.PAPER_SIZES,t))throw new Error(`未知纸张预设 "${t}"(可用:${Object.keys(u.PAPER_SIZES).join("/")})`);const r=we(t,void 0,e.landscape),n=r.widthMm,o=r.heightMm;return N(n,"纸张 widthMm"),N(o,"纸张 heightMm"),{widthMm:n,heightMm:o}}function Lt(e){if(e.margins!==void 0&&(!e.margins||typeof e.margins!="object"||Array.isArray(e.margins)))throw new Error("margins 必须是页边距对象");const t=e.margins??{},r={marginTopMm:t.marginTopMm===void 0?10:t.marginTopMm,marginBottomMm:t.marginBottomMm===void 0?10:t.marginBottomMm,marginLeftMm:t.marginLeftMm===void 0?10:t.marginLeftMm,marginRightMm:t.marginRightMm===void 0?10:t.marginRightMm};for(const[n,o]of Object.entries(r))N(o,n,!0);return r}function It(e,t){const r=e.dataset===void 0?"detail":e.dataset;if(typeof r!="string"||!r.trim())throw new Error("dataset 必须是非空字符串");if(e.title!==void 0&&typeof e.title!="string")throw new Error("title 必须是字符串");const n=e.titleHeightMm===void 0?10:e.titleHeightMm,o=e.titleGapMm===void 0?4:e.titleGapMm;N(n,"titleHeightMm"),N(o,"titleGapMm",!0);const a=e.title!==void 0&&e.title.length>0,s=a?n+o:0;if(s>=t)throw new Error("标题高度与间距占满页面,必须为表格保留可用高度");return{dataset:r,titleHeightMm:n,hasTitle:a,titleSpaceMm:s}}function kt(e){if(e.listOptions!==void 0&&(!e.listOptions||typeof e.listOptions!="object"||Array.isArray(e.listOptions)))throw new Error("listOptions 必须是列表配置对象");const t=e.listOptions??{};re(t.align,"listOptions.align",!0),re(t.headerAlign,"listOptions.headerAlign",!1);for(const r of["fontSizePt","rowHeightMm","paddingMm"]){const n=t[r];n!==void 0&&N(n,`listOptions.${r}`,r==="paddingMm")}return t}function Ft(e){let t=0,r=0;for(const[n,o]of e.entries()){if(!o||typeof o.header!="string"||typeof o.field!="string"||!o.field.trim())throw new Error(`columns[${n}] 需要字符串 header 与非空 field`);re(o.align,`columns[${n}].align`,!0),re(o.headerAlign,`columns[${n}].headerAlign`,!1),o.flex!==void 0&&N(o.flex,`columns[${n}].flex`),o.widthMm!==void 0?(N(o.widthMm,`columns[${n}].widthMm`),t+=o.widthMm):r=Math.max(r,o.flex??1)}return{fixedWidthMm:t,maxFlex:r}}function $t(e,t,r,n){const{fixedWidthMm:o,maxFlex:a}=Ft(e.columns);if(t==="page"&&o>n)throw new Error(`固定列宽 ${o}mm 超出页面可用宽度 ${n}mm`);const s=n-o;if(t==="page"&&a>0&&s<=0)throw new Error("固定列占满页面可用宽度,自动列需要正的剩余宽度");const i=a>0?e.columns.reduce((c,d)=>c+(d.widthMm===void 0?(d.flex??1)/a:0),0):0;return{columns:e.columns.map(({widthMm:c,flex:d,...m},h)=>{const g=c??(t==="wide"?r*(d??1):s*((d??1)/a)/i);return N(g,`columns[${h}] 分配后的 widthMm`),{...m,widthMm:g}}),fixedWidthMm:o,maxFlex:a}}function Dt(e){if(!e||typeof e!="object")throw new Error("标准明细模板需要 options 对象");if(!Array.isArray(e.columns)||e.columns.length===0)throw new Error("columns 至少需要一列");const{layout:t,columnWidthMm:r}=Pt(e),n=At(e);let o=n.widthMm;const a=n.heightMm,s=Lt(e);let i=o-s.marginLeftMm-s.marginRightMm;const l=a-s.marginTopMm-s.marginBottomMm;if(t==="page"&&i<=0||l<=0)throw new Error("页边距占满纸张,必须保留正的可用宽度和高度");const{dataset:c,titleHeightMm:d,hasTitle:m,titleSpaceMm:h}=It(e,l),g=kt(e),{columns:p,fixedWidthMm:y,maxFlex:L}=$t(e,t,r,i);t==="wide"&&(i=p.reduce((x,I)=>x+I.widthMm,0),N(i,"宽表总列宽"),o=i+s.marginLeftMm+s.marginRightMm,N(o,"宽表总宽度"));const R={widthMm:o,heightMm:a,...s,components:[],...t==="wide"?{layout:t}:{}};return m&&R.components.push({kind:"text",text:e.title,leftMm:s.marginLeftMm,topMm:s.marginTopMm,widthMm:i,heightMm:d,style:{fontSize:16,bold:!0,align:"center",verticalAlign:"middle",...e.titleStyle}}),R.components.push({align:"auto",headerAlign:"center",...g,kind:"list",...t==="wide"?{layout:t}:{},...m?{title:e.title}:{},dataset:c,columns:p,leftMm:s.marginLeftMm,topMm:s.marginTopMm+h,widthMm:t==="wide"||L>0?i:y}),e.params===void 0?{pages:[R]}:{params:e.params,pages:[R]}}function Nt(e){if(e.components!==void 0&&e.pages!==void 0)throw new TypeError("标签 components 与 pages 只能选择一种");const{dataset:t,rowKey:r,copies:n,params:o}=e,a=e.pages??[{components:e.components??[]}],s={repeat:{dataset:t,...r===void 0?{}:{rowKey:r},...n===void 0?{}:{copies:n}},...o===void 0?{}:{params:o},pages:a.map(l=>({widthMm:l.widthMm??e.widthMm??80,heightMm:l.heightMm??e.heightMm??55,marginTopMm:0,marginRightMm:0,marginBottomMm:0,marginLeftMm:0,components:l.components,...l.meta===void 0?{}:{meta:l.meta}}))},i=M.validateReportTemplate(s);if(!i.ok)throw new M.ReportTemplateError(i.errors);return JSON.parse(JSON.stringify(s))}function Ot(e){if(!e||typeof e!="object"||!e.repeat)throw new f.ReportSourceError("config","defineLabelReport 需要带 repeat 的固定标签模板");const t=M.validateReportTemplate(e);if(!t.ok)throw new M.ReportTemplateError(t.errors);return e.repeat.dataset}function xe(e,t){if(!Array.isArray(e))throw new f.ReportSourceError("validate","标签数据应为对象数组;请从业务响应中提取行数组");return{[t]:e}}function _t(e){const{template:t,rows:r,load:n,dataSchema:o,params:a,pagination:s,dataValidation:i}=e,l=Ot(t);if(r!==void 0==(n!==void 0)||n!==void 0&&typeof n!="function")throw new f.ReportSourceError("config","标签报表应且只能配置 rows 或 load 其中一种数据来源");const c={template:t,params:a,pagination:s,dataValidation:i,...o===void 0?{}:{dataSchema:{[l]:o}}};return n?f.defineReport({...c,load:n,mapData:d=>xe(d,l)}):{...c,datasets:xe(r,l)}}function Bt(e){return e}class O extends Error{constructor(t,r){super(r),this.code=t,this.name="ReportTemplateStoreError"}}function _(e){return JSON.parse(JSON.stringify(e))}function C(e){if(!e?.aborted)return;const t=new Error("模板操作已取消");throw t.name="AbortError",t}function Re(e){const t=e?Number(e.revision):0;if(!Number.isSafeInteger(t)||t<0||t>=Number.MAX_SAFE_INTEGER)throw new O("history","修订号无效或已达上限");return String(t+1)}function Ht(e,t={}){const r=async(s,i)=>{C(i);const l=await e.read(s,i);return C(i),l?_(l):void 0},n=async(s,i)=>{const l=await r(s,i.signal);if((l?.revision??null)!==i.expectedRevision)throw new O("conflict","模板已变化,请重新读取后提交");return l},o=async(s,i,l)=>{if(C(i.signal),!await e.compareAndSwap(s.id,i.expectedRevision,_(s),{signal:i.signal,...l?{publication:_(l)}:{}}))throw new O("conflict","模板已被其他请求更新");return _(s)},a=async(s,i,l,c)=>{if(t.beforePublish){C(l.signal);const g=await t.beforePublish({document:M.parseReportTemplate(i),previous:s.published?M.parseReportTemplate(s.published):void 0,signal:l.signal});if(!g||g.ok!==!0)throw new O("review",g?.issues?.find(p=>p.severity==="error")?.message??"模板发布检查未通过");C(l.signal)}const d=Re(s),m=M.parseReportTemplate({...i,revision:d}),h={revision:d,document:m,publishedAt:(t.now?.()??new Date).toISOString()};return c!==void 0&&(h.restoredFrom=c),o({id:s.id,revision:d,publishedRevision:d,published:m},l,h)};return{list:async s=>{C(s);const i=await e.list(s);return C(s),_(i)},get:async(s,i={})=>{const l=await r(s,i.signal),c=i.draft?l?.draft:l?.published;return c?M.parseReportTemplate(c):void 0},history:async(s,i)=>{C(i);const l=await e.history(s,i);return C(i),_(l)},saveDraft:async(s,i)=>{i={...i},C(i.signal);const l=M.parseReportTemplate(t.migrate?await t.migrate(s):s),c=await n(l.id,i),d=Re(c);return o({id:l.id,revision:d,draft:{...l,revision:d},...c?.publishedRevision?{publishedRevision:c.publishedRevision,published:c.published}:{}},i)},publish:async(s,i)=>{i={...i};const l=await n(s,i);if(!l)throw new O("missing","模板不存在");if(!l.draft)throw new O("draft","没有可发布的草稿");return a(l,l.draft,i)},rollback:async(s,i,l)=>{l={...l};const c=await n(s,l);if(!c)throw new O("missing","模板不存在");C(l.signal);const d=await e.getVersion(s,i,l.signal);if(!d)throw new O("history","历史修订不存在");return a(c,d.document,l,i)}}}function zt(){const e=new Map,t=new Map;return{read:async(r,n)=>{C(n);const o=e.get(r);return o?_(o):void 0},list:async r=>(C(r),Array.from(e.values(),({id:n,revision:o,publishedRevision:a})=>({id:n,revision:o,...a?{publishedRevision:a}:{}}))),history:async(r,n)=>(C(n),Array.from(t.get(r)?.values()??[],o=>_(o))),getVersion:async(r,n,o)=>{C(o);const a=t.get(r)?.get(n);return a?_(a):void 0},compareAndSwap:async(r,n,o,a)=>{if(C(a.signal),(e.get(r)?.revision??null)!==n)return!1;if(o.id!==r)throw new O("history","状态 ID 与存储 ID 不一致");const s=_(o),i=a.publication;if(i){const l=t.get(r)??new Map;if(l.has(i.revision)||i.revision!==o.revision||i.document.id!==r)throw new O("history","发布修订不可覆盖,且必须与状态修订和模板 ID 一致");l.set(i.revision,_(i)),t.set(r,l)}return e.set(r,s),!0}}}function Wt(e,t){const r=e.publishedRevision??e.published?.revision;for(const n of[e.draftRevision,r])if(n!==void 0&&(typeof n!="string"||!n.trim()))throw new TypeError("模板生命周期修订应为非空字符串");if(e.draftRevision!==void 0&&e.draftRevision!==t.revision)throw new TypeError("可编辑文档应与草稿修订一致");if(e.published&&(e.published.id!==t.id||e.published.revision!==r))throw new TypeError("发布文档身份或修订不一致");if(!e.published&&r!==void 0&&r!==t.revision)throw new TypeError("发布修订需要对应的独立文档");return{...e.draftRevision===void 0?{}:{draftRevision:e.draftRevision},...r===void 0?{}:{publishedRevision:r}}}function jt(e,t){const r=M.parseReportTemplate(e);if(t.id===r.id)throw new Error("复制模板应使用新的 ID");const{revision:n,...o}=r;return M.parseReportTemplate({...o,id:t.id,name:t.name})}function Ut(e){if(!Array.isArray(e)||e.length>1e3)throw new RangeError("本地模板目录最多 1000 项");const t=new Map,r=new Map,n=[];for(const o of e){const a=M.parseReportTemplate(o.document);if(t.has(a.id))throw new Error(`模板 ID 重复:${a.id}`);if(o.category!==void 0&&(typeof o.category!="string"||o.category.length>128)||o.tags!==void 0&&(!Array.isArray(o.tags)||o.tags.length>20||o.tags.some(c=>typeof c!="string"||c.length>128)))throw new TypeError("模板分类和标签无效");const s=Wt(o,a),{template:i,...l}=a;t.set(a.id,a),o.published?r.set(a.id,M.parseReportTemplate(o.published)):s.publishedRevision&&r.set(a.id,M.parseReportTemplate(a)),n.push({...l,...s,...o.category?{category:o.category}:{},...o.tags?{tags:[...o.tags]}:{}})}return n.sort((o,a)=>o.id<a.id?-1:1),{search:async o=>{Se(o.signal);const a=o.limit??30;if(!Number.isSafeInteger(a)||a<1||a>100)throw new RangeError("模板每页数量应为 1–100");const s=o.query?.trim().toLocaleLowerCase()??"",i=n.filter(c=>(!o.category||c.category===o.category)&&(!o.cursor||c.id>o.cursor)&&(!s||[c.id,c.name,c.description,...c.tags??[]].some(d=>d?.toLocaleLowerCase().includes(s)))),l=new Map;for(const c of n)c.category&&l.set(c.category,(l.get(c.category)??0)+1);return JSON.parse(JSON.stringify({items:i.slice(0,a),...i.length>a?{next:i[a-1].id}:{},categories:Array.from(l,([c,d])=>({id:c,label:c,count:d}))}))},get:async(o,a)=>{Se(a.signal);const s=a.mode==="published"?r.get(o):t.get(o);return s?M.parseReportTemplate(s):void 0}}}function Se(e){if(!e?.aborted)return;const t=new Error("模板目录操作已取消");throw t.name="AbortError",t}function qt(e){return e.map(t=>t.map(r=>/[\t\r\n"]/.test(r)?`"${r.replace(/"/g,'""')}"`:r).join(" ")).join(`\r
7
- `)}function Vt(e,t){const r=e[e.length-1];e.length>1&&r?.length===1&&r[0]===""&&/[\r\n]$/.test(t)&&e.pop()}function Gt(e,t=1e4){if(e.length>4*1024*1024)throw new Error("Clipboard text limit exceeded");const r=[[]];let n="",o=!1,a=!1,s=0;function i(){if(++s>t)throw new Error("Clipboard cell limit exceeded");r[r.length-1].push(n),n="",a=!1}for(let l=0;l<e.length;l++){const c=e[l];if(o){if(c!=='"'){n+=c;continue}if(e[l+1]==='"'){n+='"',l++;continue}o=!1,a=!0;continue}if(c==='"'&&!n&&!a){o=!0;continue}if(c===" "){i();continue}if(c==="\r"||c===`
8
- `){i(),r.push([]),c==="\r"&&e[l+1]===`
9
- `&&l++;continue}if(a)throw new Error("Invalid quoted clipboard value");n+=c}if(o)throw new Error("Unclosed clipboard quote");return i(),Vt(r,e),r}class ze extends Error{constructor(t,r,n){const o=typeof r.label=="string"?r.label:"单元格",a={definition:`${o}的编辑器配置无效`,type:`${o}的编辑器与数据类型不一致`,required:`${o}不能为空`,min:`${o}不能小于 ${n}`,max:`${o}不能大于 ${n}`,precision:`${o}最多保留 ${n} 位小数`,length:`${o}最多允许 ${n} 个字符`,choice:`${o}请选择有效选项`,date:`${o}请输入有效日期(YYYY-MM-DD)`};super(a[t]),this.code=t,this.field=r,this.expected=n,this.name="ReportCellFieldError"}}function v(e,t,r){throw new ze(t,e,r)}function We(e){if(typeof e!="string"||!/^\d{4}-\d{2}-\d{2}$/.test(e)||e.startsWith("0000-"))return!1;const t=new Date(`${e}T00:00:00.000Z`);return Number.isFinite(t.getTime())&&t.toISOString().slice(0,10)===e}function Yt(e){const[t="",r="0"]=String(e).toLowerCase().split("e");return Math.max(0,(t.split(".")[1]?.length??0)-Number(r))}function Jt(e,t){e.min!==void 0&&t<e.min&&v(e,"min",e.min),e.max!==void 0&&t>e.max&&v(e,"max",e.max),e.precision!==void 0&&Yt(t)>e.precision&&v(e,"precision",e.precision)}function Kt(e,t){We(t)||v(e,"date"),e.min!==void 0&&t<e.min&&v(e,"min",e.min),e.max!==void 0&&t>e.max&&v(e,"max",e.max)}function Xt(e){[e.min,e.max].some(t=>t!==void 0&&!Number.isFinite(t))&&v(e,"definition"),e.min!==void 0&&e.max!==void 0&&e.min>e.max&&v(e,"definition"),e.precision!==void 0&&(!Number.isInteger(e.precision)||e.precision<0||e.precision>15)&&v(e,"definition")}function Zt(e){[e.min,e.max].some(t=>t!==void 0&&!We(t))&&v(e,"definition"),e.min!==void 0&&e.max!==void 0&&e.min>e.max&&v(e,"definition")}function Qt(e,t){(!Array.isArray(t.options)||!t.options.length)&&v(t,"definition");const r=e.valueType==="text"?"string":e.valueType,n=new Set;for(const o of t.options)(!o||typeof o.value!==r||typeof o.value=="number"&&!Number.isFinite(o.value))&&v(t,"definition"),o.label!==void 0&&typeof o.label!="string"&&v(t,"definition"),n.has(o.value)&&v(t,"definition"),n.add(o.value)}function er(e){e.required!==void 0&&typeof e.required!="boolean"&&v(e,"definition"),[e.label,e.hint,e.unit].some(t=>t!==void 0&&typeof t!="string")&&v(e,"definition"),e.type==="boolean"&&[e.trueLabel,e.falseLabel].some(t=>t!==void 0&&typeof t!="string")&&v(e,"definition")}function je(e,t){(!t||typeof t!="object"||Array.isArray(t)||!["text","number","boolean","enum","date"].includes(t.type))&&v(t??{type:"text"},"definition"),er(t),(t.type==="number"||t.type==="boolean")&&e.valueType!==t.type&&v(t,"type"),(t.type==="text"||t.type==="date")&&e.valueType!=="text"&&v(t,"type"),t.type==="number"&&Xt(t),t.type==="text"&&t.maxLength!==void 0&&(!Number.isInteger(t.maxLength)||t.maxLength<0)&&v(t,"definition"),t.type==="date"&&Zt(t),t.type==="enum"&&Qt(e,t)}function tr(e,t,r){if(!e.editable)throw new f.ReportCellEditError("readonly");r&&je(e,r);const n=f.parseReportCellInput(e,t);return r?(r.required&&typeof n=="string"&&!n.trim()&&v(r,"required"),n===null||n===""?(r.required&&v(r,"required"),n):(r.type==="number"&&Jt(r,n),r.type==="date"&&Kt(r,n),r.type==="text"&&r.maxLength!==void 0&&[...String(n)].length>r.maxLength&&v(r,"length",r.maxLength),r.type==="enum"&&!r.options.some(o=>Object.is(o.value,n))&&v(r,"choice"),n)):n}class b extends Error{constructor(t){super(`Report calculation: ${t}`),this.code=t,this.name="ReportCalculationError"}}function J(e){if(!e?.aborted)return;const t=new Error("Calculation cancelled");throw t.name="AbortError",t}async function ne(e,t=1){const r=Math.floor(e.scanned/2048);if(e.scanned+=t,e.scanned>e.maxScanned)throw new b("limit");J(e.signal),Math.floor(e.scanned/2048)>r&&(await e.yieldToHost(),J(e.signal))}function ve(e){return e.table?.role==="header"?-Math.max(1,e.grid?.cells.length??1):e.table?.rowIndex??0}function Ce(e,t,r){if(![t.pageIndex,t.componentIndex,t.rowIndex,t.columnIndex].every(i=>Number.isSafeInteger(i)&&i>=0))throw new b("selection");const n=e.pages[t.pageIndex]?.components[t.componentIndex];if(!n?.grid||t.rowIndex>=n.grid.cells.length)throw new b("selection");const o=n.grid.colWidthsMm?.length??n.grid.cells.reduce((i,l)=>Math.max(i,l.length),1);if(t.columnIndex>=o)throw new b("selection");const a=n.table,s=e.pages[r.pageIndex]?.components[r.componentIndex]?.table;if(a&&s&&a.id===s.id){const i=s.columnKeys.indexOf(a.columnKeys[t.columnIndex]??"");if(i<0)throw new b("selection");return{grid:a.id,row:ve(n)+t.rowIndex,column:i}}return{grid:`${t.pageIndex}:${t.componentIndex}`,row:t.rowIndex,column:t.columnIndex}}function rr(e,t,r){const n=Ce(e,t.anchor,t.anchor),o=Ce(e,t.focus,t.anchor);if(n.grid!==o.grid)throw new b("selection");const a=(Math.abs(n.row-o.row)+1)*(Math.abs(n.column-o.column)+1);if(!Number.isSafeInteger(a)||a>r)throw new b("limit");return{grid:n.grid,rowStart:Math.min(n.row,o.row),rowEnd:Math.max(n.row,o.row),columnStart:Math.min(n.column,o.column),columnEnd:Math.max(n.column,o.column),origin:e.pages[t.anchor.pageIndex].components[t.anchor.componentIndex].table}}function nr(e){if(!e)return!1;const t=e.replace(/"[^"]*"|\\.|\[(?![hms]+\])[^\]]*\]/gi,"");return/[ymdhs]/i.test(t)}function or(e){if(e.valueType==="text"||e.valueType==="boolean"||nr(e.numberFormat))return null;const t=e.value;if(typeof t!="number"||!Number.isFinite(t))return null;if(Number.isInteger(t)&&!Number.isSafeInteger(t))throw new b("precision");return t}function ir(e,t,r){if(e.seen.has(r))return;e.seen.add(r),e.selected++;const n=t?or(t):null;n===null?e.excluded++:e.values.push(n)}function ar(e,t,r,n){return n.origin?e.table?.id===n.origin.id:`${t}:${r}`===n.grid}function sr(e,t,r){return r.origin?r.origin.columnKeys.indexOf(e.table.columnKeys[t]??""):t}function lr(e,t,r,n){const o=n.origin?ve(e)+t:t,a=sr(e,r,n);return o<n.rowStart||o>n.rowEnd||a<n.columnStart||a>n.columnEnd?null:`${n.grid}:${o}:${a}`}function cr(e,t){const r=t.origin?ve(e):0,n=Math.max(0,t.rowStart-r),o=Math.min(e.grid.cells.length,t.rowEnd-r+1);return o>n?o:0}async function dr(e,t,r,n,o){const a=e.grid;if(t>n.maxScanned)throw new b("limit");const s=a.colWidthsMm?.length??a.cells.reduce((l,c)=>Math.max(l,c.length),1);if(s>n.maxScanned)throw new b("limit");const i=new Map;for(let l=0;l<t;l++){l>0&&l%2048===0&&(await n.yieldToHost(),J(n.signal));let c=0;for(const d of a.cells[l]){for(await ne(n);c<s&&(i.get(c)??0)>l;)c++;if(c>=s)break;const m=Math.max(1,Math.min(d?.colSpan??1,s-c)),h=Math.min(a.cells.length,l+Math.max(1,d?.rowSpan??1));m>1&&await ne(n,m-1);for(let p=c;p<c+m;p++)i.set(p,h);const g=lr(e,l,c,r);g&&ir(o,d,g),c+=m}}}async function mr(e,t,r){const n={values:[],seen:new Set,excluded:0,selected:0};for(let o=0;o<e.pages.length;o++){await ne(r);const a=e.pages[o];for(let s=0;s<a.components.length;s++){await ne(r);const i=a.components[s];if(!i.grid||!ar(i,o,s,t)||i.table&&i.table.role!=="body")continue;const l=cr(i,t);l&&await dr(i,l,t,r,n)}}return n}function K(e){if(!Number.isFinite(e))throw new b("overflow");return e}function hr(e){let t=0,r=0;for(const n of e){const o=n-r,a=K(t+o);r=a-t-o,t=a}return t}async function Pe(e,t){let r=[...e],n=new Array(e.length);for(let a=1;a<e.length;a*=2){for(let s=0;s<e.length;s+=a*2){const i=Math.min(s+a,e.length),l=Math.min(s+a*2,e.length);let c=s,d=i;for(let m=s;m<l;m++)n[m]=d>=l||c<i&&r[c]<=r[d]?r[c++]:r[d++],m%2048===0&&(await t.yieldToHost(),J(t.signal))}[r,n]=[n,r]}const o=Math.floor(r.length/2);return r.length%2?r[o]:K(r[o-1]/2+r[o]/2)}function gr(e){const t=hr(e);let r=1/0,n=-1/0;for(const o of e)r=Math.min(r,o),n=Math.max(n,o);return{SUM:t,AVERAGE:t/e.length,AVG:t/e.length,MIN:r,MAX:n,COUNT:e.length}}function Ue(e,t){if(typeof e!="string"||e.length>256)throw new b("expression");const r=e.toUpperCase().match(/(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?|[A-Z_]+|[()+\-*/]|\S/g)??[];if(!r.length||r.length>64)throw new b("expression");let n=0;function o(i){if(i>16)throw new b("expression");const l=r[n++];if(l==="+"||l==="-")return(l==="-"?-1:1)*o(i+1);if(l==="("){const c=a(0,i+1);if(r[n++]!==")")throw new b("expression");return c}if(l&&/^(?:SUM|AVERAGE|AVG|MIN|MAX|COUNT|MEDIAN)$/.test(l)&&Object.prototype.hasOwnProperty.call(t,l))return K(t[l]);if(l&&/^(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?$/.test(l))return K(Number(l));throw new b("expression")}function a(i,l){let c=o(l);for(;n<r.length;){const d=r[n],m=d==="+"||d==="-"?1:d==="*"||d==="/"?2:0;if(!m||m<i)break;n++;const h=a(m+1,l+1);if(d==="/"&&h===0)throw new b("division");c=K(d==="+"?c+h:d==="-"?c-h:d==="*"?c*h:c/h)}return c}const s=a(1,0);if(n!==r.length)throw new b("expression");return s}function ur(e){const t=e.maxCells??1e5,r=e.maxScannedCells??2e5,n=e.precision??2;if(![t,r].every(o=>Number.isSafeInteger(o)&&o>=1&&o<=2e6))throw new b("limit");if(!Number.isInteger(n)||n<0||n>12)throw new b("precision");return{maxCells:t,maxScanned:r,precision:n}}async function pr(e,t,r={}){const n=ur(r),o={scanned:0,maxScanned:n.maxScanned,signal:r.signal,yieldToHost:r.yieldToHost??(()=>new Promise(l=>setTimeout(l,0)))};J(o.signal);const a=await mr(e,rr(e,t,n.maxCells),o),s=r.operation??"sum";if(!["sum","average","min","max","count","median","expression"].includes(s))throw new b("expression");let i=null;if(s==="count")i=a.values.length;else if(a.values.length)if(s==="median")i=await Pe(a.values,o);else{const l=gr(a.values);s==="expression"?(/\bMEDIAN\b/i.test(r.expression??"")&&(l.MEDIAN=await Pe(a.values,o)),i=Ue(r.expression??"",l)):i=l[s.toUpperCase()]}if(J(o.signal),i!==null&&Number.isInteger(i)&&!Number.isSafeInteger(i))throw new b("precision");return{value:i,formatted:i===null?"—":i.toFixed(n.precision),numericCells:a.values.length,excludedCells:a.excluded,selectedCells:a.selected,precision:n.precision}}class F extends Error{constructor(t,r){super(t),this.path=r,this.code="label-sheet",this.name="LabelSheetError"}}function te(e){if(e?.aborted){const t=new Error("标签拼版已取消");throw t.name="AbortError",t}}function q(e,t,r=!1){if(!Number.isFinite(e)||e<=0||r&&!Number.isSafeInteger(e))throw new F("应为正有限数字,数量应为安全整数",t);return e}function Ae(e,t){if(!Number.isFinite(e)||e<0)throw new F("应为非负有限数字",t);return e}function fr(e){const t=typeof e.marginMm=="object"?e.marginMm:{top:e.marginMm??0,left:e.marginMm??0,bottom:e.marginMm??0,right:e.marginMm??0},r=typeof e.gapMm=="object"?e.gapMm:{horizontal:e.gapMm??0,vertical:e.gapMm??0};for(const n of["top","left","bottom","right"])Ae(t?.[n],`$.marginMm.${n}`);for(const n of["horizontal","vertical"])Ae(r?.[n],`$.gapMm.${n}`);return{margin:t,gap:r}}function wr(e){const t=e.paper===void 0||e.paper==="a4"?{widthMm:210,heightMm:297}:e.paper;q(t.widthMm,"$.paper.widthMm"),q(t.heightMm,"$.paper.heightMm");const r=q(e.columns,"$.columns",!0),n=q(e.rows,"$.rows",!0),o=r*n;if(o>1e3)throw new F("每张纸不能超过 1000 个位置","$.columns");const{margin:a,gap:s}=fr(e),i=e.startSlot??0,l=e.offsetMm??{x:0,y:0};if(!Number.isSafeInteger(i)||i<0||i>=o)throw new F("起始位置应在首张纸的有效位置内","$.startSlot");if(!Number.isFinite(l.x)||!Number.isFinite(l.y))throw new F("校准偏移应为有限毫米值","$.offsetMm");return{paper:t,columns:r,rows:n,capacity:o,margin:a,gap:s,startSlot:i,offset:l}}function qe(e){return 1+(e.grid?.cells.reduce((t,r)=>t+r.length+1+r.reduce((n,o)=>n+(o?.children?.reduce((a,s)=>a+qe(s),0)??0),0),0)??0)}function vr(e,t,r){if(!X.validateRenderPlan(e).ok)throw new F("标签计划无效","$.plan");const n=e.pages[0];if(!n)return;const{paper:o,columns:a,rows:s,margin:i,gap:l,offset:c}=r;if(i.left+c.x<0||i.top+c.y<0||i.left+c.x+a*n.pageWidthMm+(a-1)*l.horizontal+i.right>o.widthMm+1e-6||i.top+c.y+s*n.pageHeightMm+(s-1)*l.vertical+i.bottom>o.heightMm+1e-6)throw new F("标签、间距、边距及校准偏移超过纸张尺寸;不会自动缩小标签","$.paper");let d=0;for(const[m,h]of e.pages.entries()){if(te(t.signal),h.layout==="wide"||h.pageWidthMm!==n.pageWidthMm||h.pageHeightMm!==n.pageHeightMm)throw new F("拼版需要尺寸相同的固定标签页面",`$.pages.${m}`);if(d+=h.components.reduce((g,p)=>g+qe(p),0),d>q(t.maxComponents??25e4,"$.maxComponents",!0))throw new F("拼版组件总量超过预算","$.maxComponents");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 F("标签内容超出标签边界",`$.pages.${m}.components`)}}function yr(e,t){te(t.signal);const r=wr(t),{paper:n,columns:o,capacity:a,margin:s,gap:i,startSlot:l,offset:c}=r,d=e.pages.length?Math.ceil((l+e.pages.length)/a):0;if(d>q(t.maxSheets??1e4,"$.maxSheets",!0))throw new F("拼版纸张数量超过预算","$.maxSheets");q(t.maxComponents??25e4,"$.maxComponents",!0),vr(e,t,r);const m=f.snapshotReportJson(e,{maxBytes:q(t.maxSnapshotBytes??64e6,"$.maxSnapshotBytes",!0),check:()=>te(t.signal),error:(g,p)=>new F(p,"$.maxSnapshotBytes")}),h=Array.from({length:d},()=>({pageWidthMm:n.widthMm,pageHeightMm:n.heightMm,components:[],meta:{labelSheet:{columns:o,rows:r.rows,slots:[]}}}));for(const[g,p]of m.pages.entries()){te(t.signal);const y=l+g,L=y%a,R=h[Math.floor(y/a)],x=s.left+c.x+L%o*(p.pageWidthMm+i.horizontal),I=s.top+c.y+Math.floor(L/o)*(p.pageHeightMm+i.vertical),V={sourcePageIndex:g,slotIndex:L,xMm:x,yMm:I,widthMm:p.pageWidthMm,heightMm:p.pageHeightMm,...p.meta?{sourceMeta:p.meta}:{}};R.meta.labelSheet.slots.push(V),R.components.push(...p.components.map(H=>({...H,leftMm:H.leftMm+x,topMm:H.topMm+I,meta:{...H.meta,labelSheet:V}})))}return{...m,pages:h}}exports.DEFAULT_BORDER_PT=$.DEFAULT_BORDER_PT;exports.DEFAULT_FONT_FAMILY=$.DEFAULT_FONT_FAMILY;exports.DEFAULT_FONT_PT=$.DEFAULT_FONT_PT;exports.DEFAULT_STROKE_COLOR=$.DEFAULT_STROKE_COLOR;exports.DEFAULT_TEXT_COLOR=$.DEFAULT_TEXT_COLOR;exports.LINE_HEIGHT=$.LINE_HEIGHT;exports.SCHEMA_VERSION_MACH=$.SCHEMA_VERSION_MACH;exports.ReportBindingError=G.ReportBindingError;exports.evalStyleRule=G.evalStyleRule;exports.formatValue=G.formatValue;exports.parseDateLocal=G.parseDateLocal;exports.resolveComponentBinding=G.resolveComponentBinding;exports.toExcelNumberFormat=G.toExcelNumberFormat;exports.toNumber=G.toNumber;exports.CSS_DPI=u.CSS_DPI;exports.MM_PER_INCH=u.MM_PER_INCH;exports.PAPER_SIZES=u.PAPER_SIZES;exports.mergeComponentStyles=u.mergeComponentStyles;exports.mmToPx=u.mmToPx;exports.mmToPxFactor=u.mmToPxFactor;exports.ptToPx=u.ptToPx;exports.pxToMm=u.pxToMm;exports.resolveBoxBorders=u.resolveBoxBorders;exports.resolveFontSize=u.resolveFontSize;exports.resolveLineHeight=u.resolveLineHeight;exports.resolveStroke=u.resolveStroke;exports.resolveTextColor=u.resolveTextColor;exports.round=u.round;exports.RENDER_PLAN_SCHEMA_VERSION=U.RENDER_PLAN_SCHEMA_VERSION;exports.isImageBackedComponent=U.isImageBackedComponent;exports.isRichText=U.isRichText;exports.assertRenderPlan=X.assertRenderPlan;exports.validateComponent=X.validateComponent;exports.validatePage=X.validatePage;exports.validateRenderPlan=X.validateRenderPlan;exports.datasetJsonSchema=ce.datasetJsonSchema;exports.validateDatasetRows=ce.validateDatasetRows;exports.OutputAssetError=A.OutputAssetError;exports.charWidthEm=A.charWidthEm;exports.createCanvasMeasurer=A.createCanvasMeasurer;exports.createHeuristicMeasurer=A.createHeuristicMeasurer;exports.heuristicMeasurer=A.heuristicMeasurer;exports.measureTextMm=A.measureTextMm;exports.resolvePlanAssets=A.resolvePlanAssets;exports.wrapText=A.wrapText;exports.DEFAULT_LABEL_PAGE_LIMIT=f.DEFAULT_LABEL_PAGE_LIMIT;exports.PaginateCellLimitError=f.PaginateCellLimitError;exports.PaginatePageLimitError=f.PaginatePageLimitError;exports.ReportCellEditError=f.ReportCellEditError;exports.ReportSourceError=f.ReportSourceError;exports.applyReportCellEdit=f.applyReportCellEdit;exports.applyReportCellEditBatch=f.applyReportCellEditBatch;exports.applyReportEditResult=f.applyReportEditResult;exports.countTemplatePages=f.countTemplatePages;exports.createReportCellEdit=f.createReportCellEdit;exports.createReportCellEditBatch=f.createReportCellEditBatch;exports.createReportCellResolver=f.createReportCellResolver;exports.createReportEditSession=f.createReportEditSession;exports.createReportSource=f.createReportSource;exports.defineReport=f.defineReport;exports.diffReportTemplates=f.diffReportTemplates;exports.estimateListLayoutCells=f.estimateListLayoutCells;exports.formatReportCellEdit=f.formatReportCellEdit;exports.getReportCellContext=f.getReportCellContext;exports.getReportEditSession=f.getReportEditSession;exports.paginateTemplate=f.paginateTemplate;exports.paginateTemplatePages=f.paginateTemplatePages;exports.parseReportCellInput=f.parseReportCellInput;exports.projectListColumns=f.projectListColumns;exports.registerReportEditSession=f.registerReportEditSession;exports.relocateReportCellEdits=f.relocateReportCellEdits;exports.reportCellEditKey=f.reportCellEditKey;exports.reviewReportTemplate=f.reviewReportTemplate;exports.reviewReportTemplateAsync=f.reviewReportTemplateAsync;exports.summarizeReportCellEdits=f.summarizeReportCellEdits;exports.resolveGridLayout=de.resolveGridLayout;exports.OutputFidelityError=B.OutputFidelityError;exports.inspectOutputCapabilities=B.inspectOutputCapabilities;exports.reportOutputDiagnostics=B.reportOutputDiagnostics;exports.REPORT_TEMPLATE_DOCUMENT_VERSION=M.REPORT_TEMPLATE_DOCUMENT_VERSION;exports.ReportTemplateError=M.ReportTemplateError;exports.createTemplateRegistry=M.createTemplateRegistry;exports.defineReportTemplate=M.defineReportTemplate;exports.parseReportTemplate=M.parseReportTemplate;exports.serializeReportTemplate=M.serializeReportTemplate;exports.validateReportTemplate=M.validateReportTemplate;exports.validateReportTemplateDocument=M.validateReportTemplateDocument;exports.ReportParamValidationError=W.ReportParamValidationError;exports.assertReportParams=W.assertReportParams;exports.formatReportDateRange=W.formatReportDateRange;exports.isReportDate=W.isReportDate;exports.isReportMonth=W.isReportMonth;exports.isReportYear=W.isReportYear;exports.parseReportDateRange=W.parseReportDateRange;exports.reportParamsJsonSchema=W.reportParamsJsonSchema;exports.validateReportParamDefinitions=W.validateReportParamDefinitions;exports.validateReportParams=W.validateReportParams;exports.hasValidDataExplanation=me.hasValidDataExplanation;exports.isReportDataTarget=me.isReportDataTarget;exports.isReportValueState=me.isReportValueState;exports.collectTemplateOutline=he.collectTemplateOutline;exports.inspectTemplateFieldUsage=he.inspectTemplateFieldUsage;exports.templatePathLocation=he.templatePathLocation;exports.applyReportDocumentStyle=oe.applyReportDocumentStyle;exports.captureTemplateFragment=oe.captureTemplateFragment;exports.insertTemplateFragment=oe.insertTemplateFragment;exports.inspectTemplateFragmentBindings=oe.inspectTemplateFragmentBindings;exports.TreeRowLimitError=ge.TreeRowLimitError;exports.createTreeTable=ge.createTreeTable;exports.validateTreeOptions=ge.validateTreeOptions;exports.LabelSheetError=F;exports.PageBuilder=He;exports.ReportCalculationError=b;exports.ReportCellFieldError=ze;exports.ReportTemplateStoreError=O;exports.TemplateBuilder=Be;exports.calculateReportSelection=pr;exports.classOf=P;exports.cloneReportTemplate=jt;exports.columnsFromContract=Ct;exports.computePageWindow=Fe;exports.createCanvasPager=Rt;exports.createLabelTemplate=Nt;exports.createLocalTemplateCatalog=Ut;exports.createMemoryTemplateStore=zt;exports.createProviderReport=Bt;exports.createTableTemplate=Dt;exports.createTemplate=St;exports.createTemplateManager=Ht;exports.defineLabelReport=_t;exports.evaluateReportAggregateExpression=Ue;exports.formatReportClipboard=qt;exports.imposeLabelSheets=yr;exports.measurePageSizePx=ie;exports.parseReportCellFieldInput=tr;exports.parseReportClipboard=Gt;exports.planFontSizePx=ut;exports.renderComponent=ue;exports.renderPage=ke;exports.renderPlan=ct;exports.renderPlanToCanvas=Et;exports.renderPlanToCanvasAsync=xt;exports.renderPlanToImages=bt;exports.resolvePaper=we;exports.validateReportCellFieldDefinition=je;
5
+ `):H.wrapText(t.text??"",t.widthMm,{fontSizePt:m.fontSizePt,bold:c.bold,italic:c.italic,fontFamily:c.fontFamily??o,letterSpacingPt:c.letterSpacing},s).join(`
6
+ `);_e(e,{text:d,fontSizePx:m.fontSizePx,bold:c.bold??!1,italic:c.italic,color:g.resolveTextColor(c),align:c.align??"left",lineHeight:g.resolveLineHeight(c),letterSpacingPx:g.ptToPx(c.letterSpacing??0,l)},n,r,i,a,c.fontFamily??o,c.verticalAlign)}function Me(e,t,n,r,i,a,l){const o=t.leftMm*n,s=t.topMm*n,c=t.widthMm*n,m=t.heightMm*n,d=t.style??{};if(U.isImageBackedComponent(t)){const h=l?.get(t.imageData);h?gt(e,h,o,s,c,m):Se(e,t,o,s,c,m);return}if(t.grid){Mt(e,t.grid,t,o,s,c,m,n,r,i,a);return}switch(t.kind){case"text":{yt(e,t,o,s,c,m,r,i,a);break}case"rect":{const h=g.resolveStroke(d),u=g.resolveBoxBorders(d);d.backgroundColor&&(e.fillStyle=d.backgroundColor,e.fillRect(o,s,c,m)),u.inner&&(e.strokeStyle=h.color,e.lineWidth=g.ptToPx(h.widthPt,r),vt(e,u,o,s,c,m));break}case"line":{const h=g.resolveStroke({...d,borderColor:d.lineColor??d.borderColor});e.strokeStyle=h.color,e.lineWidth=g.ptToPx(h.widthPt,r),e.beginPath();const u=t.lineDirection==="up"?s+m:t.lineDirection==="down"?s:s+m/2,p=t.lineDirection==="up"?s:t.lineDirection==="down"?s+m:s+m/2;e.moveTo(o,u),e.lineTo(o+c,p),e.stroke();break}case"ellipse":{const h=g.resolveStroke(d);e.strokeStyle=h.color,e.lineWidth=g.ptToPx(h.widthPt,r),d.backgroundColor&&(e.fillStyle=d.backgroundColor,e.beginPath(),e.ellipse(o+c/2,s+m/2,c/2,m/2,0,0,Math.PI*2),e.fill()),e.beginPath(),e.ellipse(o+c/2,s+m/2,c/2,m/2,0,0,Math.PI*2),e.stroke();break}default:Se(e,t,o,s,c,m);break}}function Se(e,t,n,r,i,a){e.save(),e.strokeStyle="#94a3b8",e.strokeRect(n,r,i,a),e.fillStyle="#64748b",e.font="12px sans-serif",e.fillText(t.fallbackText??`[${t.kind}]`,n+3,r+14),e.restore()}async function bt(e,t={}){if(typeof document>"u")throw new Error("renderPlanToImages 需要浏览器环境(SSR/Node 请在客户端钩子中调用)");const{format:n="png",quality:r=.92,...i}=t;if(n!=="png"&&n!=="jpeg")throw new TypeError("Image format must be png or jpeg.");if(!Number.isFinite(r)||r<0||r>1)throw new RangeError("Image quality must be between 0 and 1.");$(t.signal);const a=await Q.resolvePlanAssets(e,{...t,format:"canvas"});e=a.plan;const l=[...a.diagnostics,...B.reportOutputDiagnostics(e,"canvas",t)],o=n==="jpeg"?"image/jpeg":"image/png",s=[],c=Math.min(e.pages.length-1,t.end??e.pages.length-1);for(let m=Math.max(0,t.start??0);m<=c;m++){$(t.signal);const d=await Be(e.pages[m],m,i,l);try{s.push(await Et(d,o,r,t.signal))}finally{d.width=0,d.height=0}await Ze.outputCheckpoint(t,s.length,c-Math.max(0,t.start??0)+1)}return $(t.signal),{blobs:s,diagnostics:l}}function Et(e,t,n,r){return $(r),new Promise((i,a)=>{const l=()=>a(r?.reason??new DOMException("The operation was aborted.","AbortError"));r?.addEventListener("abort",l,{once:!0});try{e.toBlob(o=>{r?.removeEventListener("abort",l),o?i(o):a(new Error("Canvas encoding failed; no empty image was emitted."))},t,n)}catch(o){r?.removeEventListener("abort",l),a(o)}})}function Tt(e,t={}){if($(t.signal),typeof document>"u")throw new Error("renderPlanToCanvas 需要浏览器环境(SSR 请在客户端钩子中调用)");const n=t.dpr??(typeof devicePixelRatio=="number"?devicePixelRatio:1),r=t.dpi??96,i=r/96*ve,a=t.fontFamily??k.DEFAULT_FONT_FAMILY,l=t.measurer??H.heuristicMeasurer,o=Math.max(0,t.start??0),s=Math.min(e.pages.length-1,t.end??e.pages.length-1),c=[],m=B.reportOutputDiagnostics(e,"canvas",t),d=xt(e,o,s);for(const h of d)B.notifyOutputDiagnostic(h,t),m.push(h);if(t.fidelity==="strict"&&d.length)throw new B.OutputFidelityError(m);for(let h=o;h<=s;h++){$(t.signal);const u=e.pages[h],{canvas:p,ctx:v}=Oe(u,n,r,t.maxCanvasPixels);for(const A of u.components)Me(v,A,i,r,a,l);c.push(p)}return{canvases:c,diagnostics:m}}function xt(e,t,n){return n<t?[]:e.pages.slice(t,n+1).flatMap((r,i)=>r.components.flatMap((a,l)=>U.isImageBackedComponent(a)?[{code:"async-image-required",severity:"warning",format:"canvas",pageIndex:t+i,componentIndex:l,kind:a.kind,nid:a.nid,message:"Use renderPlanToCanvasAsync or renderPlanToImages to decode and include images."}]:[]))}async function Rt(e,t={}){if(typeof document>"u")throw new Error("renderPlanToCanvasAsync 需要浏览器环境(Node 请使用 PDF 或 XLSX 输出)");$(t.signal);const n=await Q.resolvePlanAssets(e,{...t,format:"canvas"});e=n.plan;const r=[...n.diagnostics,...B.reportOutputDiagnostics(e,"canvas",t)],i=[],a=Math.min(e.pages.length-1,t.end??e.pages.length-1);for(let l=Math.max(0,t.start??0);l<=a;l++)i.push(await Be(e.pages[l],l,t,r));return{canvases:i,diagnostics:r}}async function Be(e,t,n,r){const i=n.dpr??(typeof devicePixelRatio=="number"?devicePixelRatio:1),a=n.dpi??96,l=n.fontFamily??k.DEFAULT_FONT_FAMILY,o=await He(e,t,n,r);$(n.signal);const{canvas:s,ctx:c}=Oe(e,i,a,n.maxCanvasPixels);for(const m of e.components)Me(c,m,a/25.4,a,l,n.measurer??H.heuristicMeasurer,o);return s}async function He(e,t,n,r){const i=n.imageLoader??dt;return ut(e,async(a,l)=>{try{return await i(a,l)}catch(o){if(l?.aborted)throw o;const s=e.components.findIndex(d=>d.imageData===a),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."};throw r.push(m),B.notifyOutputDiagnostic(m,n),o}},n.signal)}function St(e,t={}){const n=t.dpr??(typeof devicePixelRatio=="number"?devicePixelRatio:1),r=t.dpi??96,i=r/96*ve,a=t.fontFamily??k.DEFAULT_FONT_FAMILY,l=t.measurer??H.heuristicMeasurer,o=t.overscan??1,s=t.gapPx??18,c=t.pagesPerFrame??1,m=e.pages.map(f=>f.pageHeightMm*i),d=Math.max(1,...e.pages.map(f=>f.pageWidthMm*i)),h={start:0,end:-1};let u=null,p=null,v=null,A=null,R=[],x=0,L=[],G=0,z=new AbortController;const Ee=[];function Ye(){const f=u;f.innerHTML="",p=document.createElement("div"),p.style.cssText=`width:${d}px;margin:0 auto;`,v=document.createElement("div"),A=document.createElement("div"),p.appendChild(v),R=[];const S=Math.min(e.pages.length,3+o*2);for(let j=0;j<S;j++){const E=document.createElement("div");E.style.cssText=`margin:0 auto ${s}px;box-shadow:0 2px 8px rgba(0,0,0,.35);background:#fff;`,p.appendChild(E),R.push(E)}p.appendChild(A),f.appendChild(p)}async function Ke(f,S){const j=G,E=await Q.resolvePlanAssets(e,{...t,signal:z.signal,format:"canvas",start:S,end:S});Ee.push(...E.diagnostics);const I=E.plan.pages[S],re=await He(I,S,{...t,signal:z.signal},Ee);if(j!==G||!u)return;const{widthPx:me,heightPx:de}=le(I,r);let q=f.firstElementChild;(!q||q.tagName!=="CANVAS")&&(q=document.createElement("canvas"),f.innerHTML="",f.appendChild(q));const xe=Ne(I,n,r,t.maxCanvasPixels);q.width=xe.width,q.height=xe.height,q.style.width=`${me}px`,q.style.height=`${de}px`;const K=q.getContext("2d");if(K){K.setTransform(1,0,0,1,0,0),K.scale(n,n),K.fillStyle="#ffffff",K.fillRect(0,0,me,de);for(const Je of I.components)Me(K,Je,i,r,a,l,re);q.dataset.canvasPage=String(S),f.style.height=`${de}px`,f.style.width=`${me}px`}}function Xe(f){G++,h.start=f.start,h.end=f.end,v.style.height=`${f.start*s+m.slice(0,f.start).reduce((E,I)=>E+I,0)}px`;const S=e.pages.length-1-f.end;A.style.height=`${S*s+m.slice(f.end+1).reduce((E,I)=>E+I,0)}px`;const j=f.end-f.start+1;R.forEach((E,I)=>{if(I<j){E.style.display="";const re=f.start+I;E.style.height=`${m[re]??0}px`}else E.style.display="none"}),L=[];for(let E=f.start;E<=f.end;E++){const I=R[E-f.start];if(!I)continue;I.firstElementChild?.dataset?.canvasPage!==String(E)&&L.push(E)}ce()}function ce(){x||L.length===0||(x=requestAnimationFrame(()=>{x=0;let f=Math.max(1,c);for(;L.length>0&&f-- >0;){const S=L.shift(),j=R[S-h.start];j&&Ke(j,S).catch(()=>{})}L.length>0&&ce()}))}function te(){x||(x=requestAnimationFrame(()=>{x=0;const f=u,S=$e({pageHeightsPx:m,viewportHeightPx:f.clientHeight,scrollTopPx:f.scrollTop,overscan:o,gapPx:s});S.start!==h.start||S.end!==h.end?Xe(S):ce()}))}let ne=null;return{attach(f){if(typeof document>"u")throw new Error("createCanvasPager 需要浏览器环境(SSR 请在客户端钩子中调用 attach)");$(t.signal),z=new AbortController,t.signal?.addEventListener("abort",Te,{once:!0}),B.reportOutputDiagnostics(e,"canvas",t),u=f,Ye(),f.addEventListener("scroll",te,{passive:!0}),typeof ResizeObserver<"u"&&(ne=new ResizeObserver(()=>te()),ne.observe(f)),te()},destroy(){G++,z.abort(),t.signal?.removeEventListener("abort",Te),x&&cancelAnimationFrame(x),x=0,ne?.disconnect(),ne=null,u?.removeEventListener("scroll",te),L=[],p?.remove(),u=null},window(){return{...h}}};function Te(){z.abort(t.signal?.reason)}}function ye(e,t,n){let r,i;if(typeof e=="string"){const a=g.PAPER_SIZES[e];if(!a)throw new Error(`未知纸张预设 "${e}"(可用:${Object.keys(g.PAPER_SIZES).join("/")})`);r=a.widthMm,i=a.heightMm}else typeof e=="number"?(r=e,i=t??297):(r=e.widthMm,i=e.heightMm);return n?{widthMm:i,heightMm:r}:{widthMm:r,heightMm:i}}class ze{constructor(){this.pages=[],this.pending=null,this.templateParams=void 0}repeat(t){return this.templateRepeat=t,this}params(t){return this.templateParams=t,this}page(t="a4",n={},r){this.collect();const a=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:o}=ye(t,typeof n=="number"?n:void 0,a.landscape),s=a.margins??{};return this.pending=new qe(this,{widthMm:l,heightMm:o,marginTopMm:s.marginTopMm??10,marginBottomMm:s.marginBottomMm??10,marginLeftMm:s.marginLeftMm??10,marginRightMm:s.marginRightMm??10}),this.pending}collect(){this.pending&&(this.pages.push(this.pending.buildPage()),this.pending=null)}build(){if(this.collect(),this.pages.length===0)throw new Error("模板至少需要一页:先调用 .page() 添加内容");return{...this.templateParams?{params:this.templateParams}:{},...this.templateRepeat?{repeat:this.templateRepeat}:{},pages:this.pages}}}class qe{constructor(t,n){this.parent=t,this.page=n,this.components=[]}text(t,n={},r={}){return this.components.push({kind:"text",leftMm:n.leftMm??0,topMm:n.topMm??0,widthMm:n.widthMm??60,heightMm:n.heightMm??8,text:t,style:r}),this}list(t,n,r,i={}){return this.components.push({kind:"list",leftMm:n.leftMm??10,topMm:n.topMm??30,widthMm:n.widthMm??180,dataset:t,columns:r,...i}),this}rect(t,n={}){return this.components.push({kind:"rect",...t,style:n}),this}line(t,n,r,i={}){return this.components.push({kind:"line",leftMm:t,topMm:n,widthMm:r,heightMm:.5,style:i}),this}barcode(t,n){return this.components.push({kind:"barcode",leftMm:n.leftMm??0,topMm:n.topMm??0,widthMm:n.widthMm??40,heightMm:n.heightMm??12,fallbackText:t}),this}qrcode(t,n,r,i){return this.components.push({kind:"qrcode",leftMm:r,topMm:i,widthMm:n,heightMm:n,fallbackText:t}),this}buildPage(){return{...this.page,components:this.components}}done(){return this.parent}build(){return this.done().build()}}function Ct(){return new ze}function Pt(e,t={}){return he.validateDatasetRows([],e),e.fields.map(n=>({field:n.field,header:`${n.label??n.field}${n.unit?` (${n.unit})`:""}`,semanticRole:n.semanticRole??(n.type==="number"||n.type==="decimal"?"measure":n.type==="date"?"date":n.enum?"dimension":"text"),...t[n.field]}))}function N(e,t,n=!1){if(!Number.isFinite(e)||(n?e<0:e<=0))throw new Error(`${t} 必须是有限${n?"非负":"正"}数`)}function oe(e,t,n){if(e!==void 0&&!["left","center","right","justify",...n?["auto"]:[]].includes(e))throw new Error(`${t} 必须是 left/center/right/justify${n?"/auto":""}`)}function At(e){const t=e.layout??"page";if(t!=="page"&&t!=="wide")throw new Error("layout 必须是 page 或 wide");if(t==="wide"&&(e.paper!==void 0||e.landscape!==void 0))throw new Error('宽表布局不能同时指定 paper 或 landscape;标准纸型请使用 layout: "page"');if(t!=="wide"&&e.columnWidthMm!==void 0)throw new Error('columnWidthMm 仅适用于 layout: "wide"');const n=e.columnWidthMm??30;return N(n,"columnWidthMm"),{layout:t,columnWidthMm:n}}function Lt(e){const t=e.paper===void 0?"a4":e.paper;if(typeof t!="string"&&(typeof t!="object"||t===null)||e.landscape!==void 0&&typeof e.landscape!="boolean")throw new Error("paper 必须是纸张预设名或 { widthMm, heightMm } 对象,landscape 必须是布尔值");if(typeof t=="string"&&!Object.prototype.hasOwnProperty.call(g.PAPER_SIZES,t))throw new Error(`未知纸张预设 "${t}"(可用:${Object.keys(g.PAPER_SIZES).join("/")})`);const n=ye(t,void 0,e.landscape),r=n.widthMm,i=n.heightMm;return N(r,"纸张 widthMm"),N(i,"纸张 heightMm"),{widthMm:r,heightMm:i}}function It(e){if(e.margins!==void 0&&(!e.margins||typeof e.margins!="object"||Array.isArray(e.margins)))throw new Error("margins 必须是页边距对象");const t=e.margins??{},n={marginTopMm:t.marginTopMm===void 0?10:t.marginTopMm,marginBottomMm:t.marginBottomMm===void 0?10:t.marginBottomMm,marginLeftMm:t.marginLeftMm===void 0?10:t.marginLeftMm,marginRightMm:t.marginRightMm===void 0?10:t.marginRightMm};for(const[r,i]of Object.entries(n))N(i,r,!0);return n}function Dt(e,t){const n=e.dataset===void 0?"detail":e.dataset;if(typeof n!="string"||!n.trim())throw new Error("dataset 必须是非空字符串");if(e.title!==void 0&&typeof e.title!="string")throw new Error("title 必须是字符串");const r=e.titleHeightMm===void 0?10:e.titleHeightMm,i=e.titleGapMm===void 0?4:e.titleGapMm;N(r,"titleHeightMm"),N(i,"titleGapMm",!0);const a=e.title!==void 0&&e.title.length>0,l=a?r+i:0;if(l>=t)throw new Error("标题高度与间距占满页面,必须为表格保留可用高度");return{dataset:n,titleHeightMm:r,hasTitle:a,titleSpaceMm:l}}function kt(e){if(e.listOptions!==void 0&&(!e.listOptions||typeof e.listOptions!="object"||Array.isArray(e.listOptions)))throw new Error("listOptions 必须是列表配置对象");const t=e.listOptions??{};oe(t.align,"listOptions.align",!0),oe(t.headerAlign,"listOptions.headerAlign",!1);for(const n of["fontSizePt","rowHeightMm","paddingMm"]){const r=t[n];r!==void 0&&N(r,`listOptions.${n}`,n==="paddingMm")}return t}function Ft(e){let t=0,n=0;for(const[r,i]of e.entries()){if(!i||typeof i.header!="string"||typeof i.field!="string"||!i.field.trim())throw new Error(`columns[${r}] 需要字符串 header 与非空 field`);oe(i.align,`columns[${r}].align`,!0),oe(i.headerAlign,`columns[${r}].headerAlign`,!1),i.flex!==void 0&&N(i.flex,`columns[${r}].flex`),i.widthMm!==void 0?(N(i.widthMm,`columns[${r}].widthMm`),t+=i.widthMm):n=Math.max(n,i.flex??1)}return{fixedWidthMm:t,maxFlex:n}}function $t(e,t,n,r){const{fixedWidthMm:i,maxFlex:a}=Ft(e.columns);if(t==="page"&&i>r)throw new Error(`固定列宽 ${i}mm 超出页面可用宽度 ${r}mm`);const l=r-i;if(t==="page"&&a>0&&l<=0)throw new Error("固定列占满页面可用宽度,自动列需要正的剩余宽度");const o=a>0?e.columns.reduce((c,m)=>c+(m.widthMm===void 0?(m.flex??1)/a:0),0):0;return{columns:e.columns.map(({widthMm:c,flex:m,...d},h)=>{const u=c??(t==="wide"?n*(m??1):l*((m??1)/a)/o);return N(u,`columns[${h}] 分配后的 widthMm`),{...d,widthMm:u}}),fixedWidthMm:i,maxFlex:a}}function Nt(e){if(!e||typeof e!="object")throw new Error("标准明细模板需要 options 对象");if(!Array.isArray(e.columns)||e.columns.length===0)throw new Error("columns 至少需要一列");const{layout:t,columnWidthMm:n}=At(e),r=Lt(e);let i=r.widthMm;const a=r.heightMm,l=It(e);let o=i-l.marginLeftMm-l.marginRightMm;const s=a-l.marginTopMm-l.marginBottomMm;if(t==="page"&&o<=0||s<=0)throw new Error("页边距占满纸张,必须保留正的可用宽度和高度");const{dataset:c,titleHeightMm:m,hasTitle:d,titleSpaceMm:h}=Dt(e,s),u=kt(e),{columns:p,fixedWidthMm:v,maxFlex:A}=$t(e,t,n,o);t==="wide"&&(o=p.reduce((x,L)=>x+L.widthMm,0),N(o,"宽表总列宽"),i=o+l.marginLeftMm+l.marginRightMm,N(i,"宽表总宽度"));const R={widthMm:i,heightMm:a,...l,components:[],...t==="wide"?{layout:t}:{}};return d&&R.components.push({kind:"text",text:e.title,leftMm:l.marginLeftMm,topMm:l.marginTopMm,widthMm:o,heightMm:m,style:{fontSize:16,bold:!0,align:"center",verticalAlign:"middle",...e.titleStyle}}),R.components.push({align:"auto",headerAlign:"center",...u,kind:"list",...t==="wide"?{layout:t}:{},...d?{title:e.title}:{},dataset:c,columns:p,leftMm:l.marginLeftMm,topMm:l.marginTopMm+h,widthMm:t==="wide"||A>0?o:v}),e.params===void 0?{pages:[R]}:{params:e.params,pages:[R]}}function Ot(e){if(e.components!==void 0&&e.pages!==void 0)throw new TypeError("标签 components 与 pages 只能选择一种");const{dataset:t,rowKey:n,copies:r,params:i}=e,a=e.pages??[{components:e.components??[]}],l={repeat:{dataset:t,...n===void 0?{}:{rowKey:n},...r===void 0?{}:{copies:r}},...i===void 0?{}:{params:i},pages:a.map(s=>({widthMm:s.widthMm??e.widthMm??80,heightMm:s.heightMm??e.heightMm??55,marginTopMm:0,marginRightMm:0,marginBottomMm:0,marginLeftMm:0,components:s.components,...s.meta===void 0?{}:{meta:s.meta}}))},o=y.validateReportTemplate(l);if(!o.ok)throw new y.ReportTemplateError(o.errors);return JSON.parse(JSON.stringify(l))}function _t(e){if(!e||typeof e!="object"||!e.repeat)throw new b.ReportSourceError("config","defineLabelReport 需要带 repeat 的固定标签模板");const t=y.validateReportTemplate(e);if(!t.ok)throw new y.ReportTemplateError(t.errors);return e.repeat.dataset}function Ce(e,t){if(!Array.isArray(e))throw new b.ReportSourceError("validate","标签数据应为对象数组;请从业务响应中提取行数组");return{[t]:e}}function Bt(e){const{template:t,rows:n,load:r,dataSchema:i,params:a,pagination:l,dataValidation:o}=e,s=_t(t);if(n!==void 0==(r!==void 0)||r!==void 0&&typeof r!="function")throw new b.ReportSourceError("config","标签报表应且只能配置 rows 或 load 其中一种数据来源");const c={template:t,params:a,pagination:l,dataValidation:o,...i===void 0?{}:{dataSchema:{[s]:i}}};return r?b.defineReport({...c,load:r,mapData:m=>Ce(m,s)}):{...c,datasets:Ce(n,s)}}function Ht(e){return e}class O extends Error{constructor(t,n){super(n),this.code=t,this.name="ReportTemplateStoreError"}}function _(e){return JSON.parse(JSON.stringify(e))}function C(e){if(!e?.aborted)return;const t=new Error("模板操作已取消");throw t.name="AbortError",t}function Pe(e){const t=e?Number(e.revision):0;if(!Number.isSafeInteger(t)||t<0||t>=Number.MAX_SAFE_INTEGER)throw new O("history","修订号无效或已达上限");return String(t+1)}function zt(e,t={}){const n=async(l,o)=>{C(o);const s=await e.read(l,o);return C(o),s?_(s):void 0},r=async(l,o)=>{const s=await n(l,o.signal);if((s?.revision??null)!==o.expectedRevision)throw new O("conflict","模板已变化,请重新读取后提交");return s},i=async(l,o,s)=>{if(C(o.signal),!await e.compareAndSwap(l.id,o.expectedRevision,_(l),{signal:o.signal,...s?{publication:_(s)}:{}}))throw new O("conflict","模板已被其他请求更新");return _(l)},a=async(l,o,s,c)=>{if(t.beforePublish){C(s.signal);const u=await t.beforePublish({document:y.parseReportTemplate(o),previous:l.published?y.parseReportTemplate(l.published):void 0,signal:s.signal});if(!u||u.ok!==!0)throw new O("review",u?.issues?.find(p=>p.severity==="error")?.message??"模板发布检查未通过");C(s.signal)}const m=Pe(l),d=y.parseReportTemplate({...o,revision:m}),h={revision:m,document:d,publishedAt:(t.now?.()??new Date).toISOString()};return c!==void 0&&(h.restoredFrom=c),i({id:l.id,revision:m,publishedRevision:m,published:d},s,h)};return{list:async l=>{C(l);const o=await e.list(l);return C(l),_(o)},get:async(l,o={})=>{const s=await n(l,o.signal),c=o.draft?s?.draft:s?.published;return c?y.parseReportTemplate(c):void 0},history:async(l,o)=>{C(o);const s=await e.history(l,o);return C(o),_(s)},saveDraft:async(l,o)=>{o={...o},C(o.signal);const s=y.parseReportTemplate(t.migrate?await t.migrate(l):l),c=await r(s.id,o),m=Pe(c);return i({id:s.id,revision:m,draft:{...s,revision:m},...c?.publishedRevision?{publishedRevision:c.publishedRevision,published:c.published}:{}},o)},publish:async(l,o)=>{o={...o};const s=await r(l,o);if(!s)throw new O("missing","模板不存在");if(!s.draft)throw new O("draft","没有可发布的草稿");return a(s,s.draft,o)},rollback:async(l,o,s)=>{s={...s};const c=await r(l,s);if(!c)throw new O("missing","模板不存在");C(s.signal);const m=await e.getVersion(l,o,s.signal);if(!m)throw new O("history","历史修订不存在");return a(c,m.document,s,o)}}}function qt(){const e=new Map,t=new Map;return{read:async(n,r)=>{C(r);const i=e.get(n);return i?_(i):void 0},list:async n=>(C(n),Array.from(e.values(),({id:r,revision:i,publishedRevision:a})=>({id:r,revision:i,...a?{publishedRevision:a}:{}}))),history:async(n,r)=>(C(r),Array.from(t.get(n)?.values()??[],i=>_(i))),getVersion:async(n,r,i)=>{C(i);const a=t.get(n)?.get(r);return a?_(a):void 0},compareAndSwap:async(n,r,i,a)=>{if(C(a.signal),(e.get(n)?.revision??null)!==r)return!1;if(i.id!==n)throw new O("history","状态 ID 与存储 ID 不一致");const l=_(i),o=a.publication;if(o){const s=t.get(n)??new Map;if(s.has(o.revision)||o.revision!==i.revision||o.document.id!==n)throw new O("history","发布修订不可覆盖,且必须与状态修订和模板 ID 一致");s.set(o.revision,_(o)),t.set(n,s)}return e.set(n,l),!0}}}function Wt(e){return e.map(t=>t.map(n=>/[\t\r\n"]/.test(n)?`"${n.replace(/"/g,'""')}"`:n).join(" ")).join(`\r
7
+ `)}function jt(e,t){const n=e[e.length-1];e.length>1&&n?.length===1&&n[0]===""&&/[\r\n]$/.test(t)&&e.pop()}function Ut(e,t=1e4){if(e.length>4*1024*1024)throw new Error("Clipboard text limit exceeded");const n=[[]];let r="",i=!1,a=!1,l=0;function o(){if(++l>t)throw new Error("Clipboard cell limit exceeded");n[n.length-1].push(r),r="",a=!1}for(let s=0;s<e.length;s++){const c=e[s];if(i){if(c!=='"'){r+=c;continue}if(e[s+1]==='"'){r+='"',s++;continue}i=!1,a=!0;continue}if(c==='"'&&!r&&!a){i=!0;continue}if(c===" "){o();continue}if(c==="\r"||c===`
8
+ `){o(),n.push([]),c==="\r"&&e[s+1]===`
9
+ `&&s++;continue}if(a)throw new Error("Invalid quoted clipboard value");r+=c}if(i)throw new Error("Unclosed clipboard quote");return o(),jt(n,e),n}class We extends Error{constructor(t,n,r){const i=typeof n.label=="string"?n.label:"单元格",a={definition:`${i}的编辑器配置无效`,type:`${i}的编辑器与数据类型不一致`,required:`${i}不能为空`,min:`${i}不能小于 ${r}`,max:`${i}不能大于 ${r}`,precision:`${i}最多保留 ${r} 位小数`,length:`${i}最多允许 ${r} 个字符`,choice:`${i}请选择有效选项`,date:`${i}请输入有效日期(YYYY-MM-DD)`};super(a[t]),this.code=t,this.field=n,this.expected=r,this.name="ReportCellFieldError"}}function w(e,t,n){throw new We(t,e,n)}function je(e){if(typeof e!="string"||!/^\d{4}-\d{2}-\d{2}$/.test(e)||e.startsWith("0000-"))return!1;const t=new Date(`${e}T00:00:00.000Z`);return Number.isFinite(t.getTime())&&t.toISOString().slice(0,10)===e}function Vt(e){const[t="",n="0"]=String(e).toLowerCase().split("e");return Math.max(0,(t.split(".")[1]?.length??0)-Number(n))}function Gt(e,t){e.min!==void 0&&t<e.min&&w(e,"min",e.min),e.max!==void 0&&t>e.max&&w(e,"max",e.max),e.precision!==void 0&&Vt(t)>e.precision&&w(e,"precision",e.precision)}function Yt(e,t){je(t)||w(e,"date"),e.min!==void 0&&t<e.min&&w(e,"min",e.min),e.max!==void 0&&t>e.max&&w(e,"max",e.max)}function Kt(e){[e.min,e.max].some(t=>t!==void 0&&!Number.isFinite(t))&&w(e,"definition"),e.min!==void 0&&e.max!==void 0&&e.min>e.max&&w(e,"definition"),e.precision!==void 0&&(!Number.isInteger(e.precision)||e.precision<0||e.precision>15)&&w(e,"definition")}function Xt(e){[e.min,e.max].some(t=>t!==void 0&&!je(t))&&w(e,"definition"),e.min!==void 0&&e.max!==void 0&&e.min>e.max&&w(e,"definition")}function Jt(e,t){(!Array.isArray(t.options)||!t.options.length)&&w(t,"definition");const n=e.valueType==="text"?"string":e.valueType,r=new Set;for(const i of t.options)(!i||typeof i.value!==n||typeof i.value=="number"&&!Number.isFinite(i.value))&&w(t,"definition"),i.label!==void 0&&typeof i.label!="string"&&w(t,"definition"),r.has(i.value)&&w(t,"definition"),r.add(i.value)}function Zt(e){e.required!==void 0&&typeof e.required!="boolean"&&w(e,"definition"),[e.label,e.hint,e.unit].some(t=>t!==void 0&&typeof t!="string")&&w(e,"definition"),e.type==="boolean"&&[e.trueLabel,e.falseLabel].some(t=>t!==void 0&&typeof t!="string")&&w(e,"definition")}function Ue(e,t){(!t||typeof t!="object"||Array.isArray(t)||!["text","number","boolean","enum","date"].includes(t.type))&&w(t??{type:"text"},"definition"),Zt(t),(t.type==="number"||t.type==="boolean")&&e.valueType!==t.type&&w(t,"type"),(t.type==="text"||t.type==="date")&&e.valueType!=="text"&&w(t,"type"),t.type==="number"&&Kt(t),t.type==="text"&&t.maxLength!==void 0&&(!Number.isInteger(t.maxLength)||t.maxLength<0)&&w(t,"definition"),t.type==="date"&&Xt(t),t.type==="enum"&&Jt(e,t)}function Qt(e,t,n){if(!e.editable)throw new F.ReportCellEditError("readonly");n&&Ue(e,n);const r=F.parseReportCellInput(e,t);return n?(n.required&&typeof r=="string"&&!r.trim()&&w(n,"required"),r===null||r===""?(n.required&&w(n,"required"),r):(n.type==="number"&&Gt(n,r),n.type==="date"&&Yt(n,r),n.type==="text"&&n.maxLength!==void 0&&[...String(r)].length>n.maxLength&&w(n,"length",n.maxLength),n.type==="enum"&&!n.options.some(i=>Object.is(i.value,r))&&w(n,"choice"),r)):r}class M extends Error{constructor(t){super(`Report calculation: ${t}`),this.code=t,this.name="ReportCalculationError"}}function X(e){if(!e?.aborted)return;const t=new Error("Calculation cancelled");throw t.name="AbortError",t}async function ae(e,t=1){const n=Math.floor(e.scanned/2048);if(e.scanned+=t,e.scanned>e.maxScanned)throw new M("limit");X(e.signal),Math.floor(e.scanned/2048)>n&&(await e.yieldToHost(),X(e.signal))}function be(e){return e.table?.role==="header"?-Math.max(1,e.grid?.cells.length??1):e.table?.rowIndex??0}function Ae(e,t,n){if(![t.pageIndex,t.componentIndex,t.rowIndex,t.columnIndex].every(o=>Number.isSafeInteger(o)&&o>=0))throw new M("selection");const r=e.pages[t.pageIndex]?.components[t.componentIndex];if(!r?.grid||t.rowIndex>=r.grid.cells.length)throw new M("selection");const i=r.grid.colWidthsMm?.length??r.grid.cells.reduce((o,s)=>Math.max(o,s.length),1);if(t.columnIndex>=i)throw new M("selection");const a=r.table,l=e.pages[n.pageIndex]?.components[n.componentIndex]?.table;if(a&&l&&a.id===l.id){const o=l.columnKeys.indexOf(a.columnKeys[t.columnIndex]??"");if(o<0)throw new M("selection");return{grid:a.id,row:be(r)+t.rowIndex,column:o}}return{grid:`${t.pageIndex}:${t.componentIndex}`,row:t.rowIndex,column:t.columnIndex}}function en(e,t,n){const r=Ae(e,t.anchor,t.anchor),i=Ae(e,t.focus,t.anchor);if(r.grid!==i.grid)throw new M("selection");const a=(Math.abs(r.row-i.row)+1)*(Math.abs(r.column-i.column)+1);if(!Number.isSafeInteger(a)||a>n)throw new M("limit");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}}function tn(e){if(!e)return!1;const t=e.replace(/"[^"]*"|\\.|\[(?![hms]+\])[^\]]*\]/gi,"");return/[ymdhs]/i.test(t)}function nn(e){if(e.valueType==="text"||e.valueType==="boolean"||tn(e.numberFormat))return null;const t=e.value;if(typeof t!="number"||!Number.isFinite(t))return null;if(Number.isInteger(t)&&!Number.isSafeInteger(t))throw new M("precision");return t}function rn(e,t,n){if(e.seen.has(n))return;e.seen.add(n),e.selected++;const r=t?nn(t):null;r===null?e.excluded++:e.values.push(r)}function on(e,t,n,r){return r.origin?e.table?.id===r.origin.id:`${t}:${n}`===r.grid}function an(e,t,n){return n.origin?n.origin.columnKeys.indexOf(e.table.columnKeys[t]??""):t}function sn(e,t,n,r){const i=r.origin?be(e)+t:t,a=an(e,n,r);return i<r.rowStart||i>r.rowEnd||a<r.columnStart||a>r.columnEnd?null:`${r.grid}:${i}:${a}`}function ln(e,t){const n=t.origin?be(e):0,r=Math.max(0,t.rowStart-n),i=Math.min(e.grid.cells.length,t.rowEnd-n+1);return i>r?i:0}async function cn(e,t,n,r,i){const a=e.grid;if(t>r.maxScanned)throw new M("limit");const l=a.colWidthsMm?.length??a.cells.reduce((s,c)=>Math.max(s,c.length),1);if(l>r.maxScanned)throw new M("limit");const o=new Map;for(let s=0;s<t;s++){s>0&&s%2048===0&&(await r.yieldToHost(),X(r.signal));let c=0;for(const m of a.cells[s]){for(await ae(r);c<l&&(o.get(c)??0)>s;)c++;if(c>=l)break;const d=Math.max(1,Math.min(m?.colSpan??1,l-c)),h=Math.min(a.cells.length,s+Math.max(1,m?.rowSpan??1));d>1&&await ae(r,d-1);for(let p=c;p<c+d;p++)o.set(p,h);const u=sn(e,s,c,n);u&&rn(i,m,u),c+=d}}}async function mn(e,t,n){const r={values:[],seen:new Set,excluded:0,selected:0};for(let i=0;i<e.pages.length;i++){await ae(n);const a=e.pages[i];for(let l=0;l<a.components.length;l++){await ae(n);const o=a.components[l];if(!o.grid||!on(o,i,l,t)||o.table&&o.table.role!=="body")continue;const s=ln(o,t);s&&await cn(o,s,t,n,r)}}return r}function Z(e){if(!Number.isFinite(e))throw new M("overflow");return e}function dn(e){let t=0,n=0;for(const r of e){const i=r-n,a=Z(t+i);n=a-t-i,t=a}return t}async function Le(e,t){let n=[...e],r=new Array(e.length);for(let a=1;a<e.length;a*=2){for(let l=0;l<e.length;l+=a*2){const o=Math.min(l+a,e.length),s=Math.min(l+a*2,e.length);let c=l,m=o;for(let d=l;d<s;d++)r[d]=m>=s||c<o&&n[c]<=n[m]?n[c++]:n[m++],d%2048===0&&(await t.yieldToHost(),X(t.signal))}[n,r]=[r,n]}const i=Math.floor(n.length/2);return n.length%2?n[i]:Z(n[i-1]/2+n[i]/2)}function hn(e){const t=dn(e);let n=1/0,r=-1/0;for(const i of e)n=Math.min(n,i),r=Math.max(r,i);return{SUM:t,AVERAGE:t/e.length,AVG:t/e.length,MIN:n,MAX:r,COUNT:e.length}}function Ve(e,t){if(typeof e!="string"||e.length>256)throw new M("expression");const n=e.toUpperCase().match(/(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?|[A-Z_]+|[()+\-*/]|\S/g)??[];if(!n.length||n.length>64)throw new M("expression");let r=0;function i(o){if(o>16)throw new M("expression");const s=n[r++];if(s==="+"||s==="-")return(s==="-"?-1:1)*i(o+1);if(s==="("){const c=a(0,o+1);if(n[r++]!==")")throw new M("expression");return c}if(s&&/^(?:SUM|AVERAGE|AVG|MIN|MAX|COUNT|MEDIAN)$/.test(s)&&Object.prototype.hasOwnProperty.call(t,s))return Z(t[s]);if(s&&/^(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?$/.test(s))return Z(Number(s));throw new M("expression")}function a(o,s){let c=i(s);for(;r<n.length;){const m=n[r],d=m==="+"||m==="-"?1:m==="*"||m==="/"?2:0;if(!d||d<o)break;r++;const h=a(d+1,s+1);if(m==="/"&&h===0)throw new M("division");c=Z(m==="+"?c+h:m==="-"?c-h:m==="*"?c*h:c/h)}return c}const l=a(1,0);if(r!==n.length)throw new M("expression");return l}function un(e){const t=e.maxCells??1e5,n=e.maxScannedCells??2e5,r=e.precision??2;if(![t,n].every(i=>Number.isSafeInteger(i)&&i>=1&&i<=2e6))throw new M("limit");if(!Number.isInteger(r)||r<0||r>12)throw new M("precision");return{maxCells:t,maxScanned:n,precision:r}}async function gn(e,t,n={}){const r=un(n),i={scanned:0,maxScanned:r.maxScanned,signal:n.signal,yieldToHost:n.yieldToHost??(()=>new Promise(s=>setTimeout(s,0)))};X(i.signal);const a=await mn(e,en(e,t,r.maxCells),i),l=n.operation??"sum";if(!["sum","average","min","max","count","median","expression"].includes(l))throw new M("expression");let o=null;if(l==="count")o=a.values.length;else if(a.values.length)if(l==="median")o=await Le(a.values,i);else{const s=hn(a.values);l==="expression"?(/\bMEDIAN\b/i.test(n.expression??"")&&(s.MEDIAN=await Le(a.values,i)),o=Ve(n.expression??"",s)):o=s[l.toUpperCase()]}if(X(i.signal),o!==null&&Number.isInteger(o)&&!Number.isSafeInteger(o))throw new M("precision");return{value:o,formatted:o===null?"—":o.toFixed(r.precision),numericCells:a.values.length,excludedCells:a.excluded,selectedCells:a.selected,precision:r.precision}}class D extends Error{constructor(t,n){super(t),this.path=n,this.code="label-sheet",this.name="LabelSheetError"}}function ie(e){if(e?.aborted){const t=new Error("标签拼版已取消");throw t.name="AbortError",t}}function V(e,t,n=!1){if(!Number.isFinite(e)||e<=0||n&&!Number.isSafeInteger(e))throw new D("应为正有限数字,数量应为安全整数",t);return e}function Ie(e,t){if(!Number.isFinite(e)||e<0)throw new D("应为非负有限数字",t);return e}function pn(e){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};for(const r of["top","left","bottom","right"])Ie(t?.[r],`$.marginMm.${r}`);for(const r of["horizontal","vertical"])Ie(n?.[r],`$.gapMm.${r}`);return{margin:t,gap:n}}function fn(e){const t=e.paper===void 0||e.paper==="a4"?{widthMm:210,heightMm:297}:e.paper;V(t.widthMm,"$.paper.widthMm"),V(t.heightMm,"$.paper.heightMm");const n=V(e.columns,"$.columns",!0),r=V(e.rows,"$.rows",!0),i=n*r;if(i>1e3)throw new D("每张纸不能超过 1000 个位置","$.columns");const{margin:a,gap:l}=pn(e),o=e.startSlot??0,s=e.offsetMm??{x:0,y:0};if(!Number.isSafeInteger(o)||o<0||o>=i)throw new D("起始位置应在首张纸的有效位置内","$.startSlot");if(!Number.isFinite(s.x)||!Number.isFinite(s.y))throw new D("校准偏移应为有限毫米值","$.offsetMm");return{paper:t,columns:n,rows:r,capacity:i,margin:a,gap:l,startSlot:o,offset:s}}function Ge(e){return 1+(e.grid?.cells.reduce((t,n)=>t+n.length+1+n.reduce((r,i)=>r+(i?.children?.reduce((a,l)=>a+Ge(l),0)??0),0),0)??0)}function wn(e,t,n){if(!y.validateRenderPlan(e).ok)throw new D("标签计划无效","$.plan");const r=e.pages[0];if(!r)return;const{paper:i,columns:a,rows:l,margin:o,gap:s,offset:c}=n;if(o.left+c.x<0||o.top+c.y<0||o.left+c.x+a*r.pageWidthMm+(a-1)*s.horizontal+o.right>i.widthMm+1e-6||o.top+c.y+l*r.pageHeightMm+(l-1)*s.vertical+o.bottom>i.heightMm+1e-6)throw new D("标签、间距、边距及校准偏移超过纸张尺寸;不会自动缩小标签","$.paper");let m=0;for(const[d,h]of e.pages.entries()){if(ie(t.signal),h.layout==="wide"||h.pageWidthMm!==r.pageWidthMm||h.pageHeightMm!==r.pageHeightMm)throw new D("拼版需要尺寸相同的固定标签页面",`$.pages.${d}`);if(m+=h.components.reduce((u,p)=>u+Ge(p),0),m>V(t.maxComponents??25e4,"$.maxComponents",!0))throw new D("拼版组件总量超过预算","$.maxComponents");for(const u of h.components)if(u.leftMm<0||u.topMm<0||u.leftMm+u.widthMm>h.pageWidthMm+1e-6||u.topMm+u.heightMm>h.pageHeightMm+1e-6)throw new D("标签内容超出标签边界",`$.pages.${d}.components`)}}function vn(e,t){ie(t.signal);const n=fn(t),{paper:r,columns:i,capacity:a,margin:l,gap:o,startSlot:s,offset:c}=n,m=e.pages.length?Math.ceil((s+e.pages.length)/a):0;if(m>V(t.maxSheets??1e4,"$.maxSheets",!0))throw new D("拼版纸张数量超过预算","$.maxSheets");V(t.maxComponents??25e4,"$.maxComponents",!0),wn(e,t,n);const d=b.snapshotReportJson(e,{maxBytes:V(t.maxSnapshotBytes??64e6,"$.maxSnapshotBytes",!0),check:()=>ie(t.signal),error:(u,p)=>new D(p,"$.maxSnapshotBytes")}),h=Array.from({length:m},()=>({pageWidthMm:r.widthMm,pageHeightMm:r.heightMm,components:[],meta:{labelSheet:{columns:i,rows:n.rows,slots:[]}}}));for(const[u,p]of d.pages.entries()){ie(t.signal);const v=s+u,A=v%a,R=h[Math.floor(v/a)],x=l.left+c.x+A%i*(p.pageWidthMm+o.horizontal),L=l.top+c.y+Math.floor(A/i)*(p.pageHeightMm+o.vertical),G={sourcePageIndex:u,slotIndex:A,xMm:x,yMm:L,widthMm:p.pageWidthMm,heightMm:p.pageHeightMm,...p.meta?{sourceMeta:p.meta}:{}};R.meta.labelSheet.slots.push(G),R.components.push(...p.components.map(z=>({...z,leftMm:z.leftMm+x,topMm:z.topMm+L,meta:{...z.meta,labelSheet:G}})))}return{...d,pages:h}}exports.DEFAULT_BORDER_PT=k.DEFAULT_BORDER_PT;exports.DEFAULT_FONT_FAMILY=k.DEFAULT_FONT_FAMILY;exports.DEFAULT_FONT_PT=k.DEFAULT_FONT_PT;exports.DEFAULT_STROKE_COLOR=k.DEFAULT_STROKE_COLOR;exports.DEFAULT_TEXT_COLOR=k.DEFAULT_TEXT_COLOR;exports.LINE_HEIGHT=k.LINE_HEIGHT;exports.SCHEMA_VERSION_MACH=k.SCHEMA_VERSION_MACH;exports.ReportBindingError=Y.ReportBindingError;exports.evalStyleRule=Y.evalStyleRule;exports.formatValue=Y.formatValue;exports.parseDateLocal=Y.parseDateLocal;exports.resolveComponentBinding=Y.resolveComponentBinding;exports.toExcelNumberFormat=Y.toExcelNumberFormat;exports.toNumber=Y.toNumber;exports.CSS_DPI=g.CSS_DPI;exports.MM_PER_INCH=g.MM_PER_INCH;exports.PAPER_SIZES=g.PAPER_SIZES;exports.mergeComponentStyles=g.mergeComponentStyles;exports.mmToPx=g.mmToPx;exports.mmToPxFactor=g.mmToPxFactor;exports.ptToPx=g.ptToPx;exports.pxToMm=g.pxToMm;exports.resolveBoxBorders=g.resolveBoxBorders;exports.resolveFontSize=g.resolveFontSize;exports.resolveLineHeight=g.resolveLineHeight;exports.resolveStroke=g.resolveStroke;exports.resolveTextColor=g.resolveTextColor;exports.round=g.round;exports.RENDER_PLAN_SCHEMA_VERSION=U.RENDER_PLAN_SCHEMA_VERSION;exports.isImageBackedComponent=U.isImageBackedComponent;exports.isRichText=U.isRichText;exports.REPORT_TEMPLATE_DOCUMENT_VERSION=y.REPORT_TEMPLATE_DOCUMENT_VERSION;exports.ReportTemplateError=y.ReportTemplateError;exports.assertRenderPlan=y.assertRenderPlan;exports.createTemplateRegistry=y.createTemplateRegistry;exports.defineReportTemplate=y.defineReportTemplate;exports.parseReportTemplate=y.parseReportTemplate;exports.serializeReportTemplate=y.serializeReportTemplate;exports.validateComponent=y.validateComponent;exports.validatePage=y.validatePage;exports.validateRenderPlan=y.validateRenderPlan;exports.validateReportTemplate=y.validateReportTemplate;exports.validateReportTemplateDocument=y.validateReportTemplateDocument;exports.datasetJsonSchema=he.datasetJsonSchema;exports.validateDatasetRows=he.validateDatasetRows;exports.charWidthEm=H.charWidthEm;exports.createCanvasMeasurer=H.createCanvasMeasurer;exports.createHeuristicMeasurer=H.createHeuristicMeasurer;exports.heuristicMeasurer=H.heuristicMeasurer;exports.measureTextMm=H.measureTextMm;exports.wrapText=H.wrapText;exports.DEFAULT_LABEL_PAGE_LIMIT=b.DEFAULT_LABEL_PAGE_LIMIT;exports.PaginateCellLimitError=b.PaginateCellLimitError;exports.PaginatePageLimitError=b.PaginatePageLimitError;exports.ReportSourceError=b.ReportSourceError;exports.applyReportEditResult=b.applyReportEditResult;exports.applyReportSourceMetadata=b.applyReportSourceMetadata;exports.countTemplatePages=b.countTemplatePages;exports.createReportEditSession=b.createReportEditSession;exports.createReportSource=b.createReportSource;exports.defineReport=b.defineReport;exports.estimateListLayoutCells=b.estimateListLayoutCells;exports.getReportEditSession=b.getReportEditSession;exports.paginateTemplate=b.paginateTemplate;exports.paginateTemplatePages=b.paginateTemplatePages;exports.projectListColumns=b.projectListColumns;exports.registerReportEditSession=b.registerReportEditSession;exports.relocateReportCellEdits=b.relocateReportCellEdits;exports.resolveGridLayout=ue.resolveGridLayout;exports.OutputFidelityError=B.OutputFidelityError;exports.inspectOutputCapabilities=B.inspectOutputCapabilities;exports.reportOutputDiagnostics=B.reportOutputDiagnostics;exports.OutputAssetError=Q.OutputAssetError;exports.resolvePlanAssets=Q.resolvePlanAssets;exports.ReportDrillError=J.ReportDrillError;exports.createReportDrillRequest=J.createReportDrillRequest;exports.matchReportDrillActions=J.matchReportDrillActions;exports.resolveReportDrillReturn=J.resolveReportDrillReturn;exports.validateReportDrillActions=J.validateReportDrillActions;exports.ReportParamValidationError=W.ReportParamValidationError;exports.assertReportParams=W.assertReportParams;exports.formatReportDateRange=W.formatReportDateRange;exports.isReportDate=W.isReportDate;exports.isReportMonth=W.isReportMonth;exports.isReportYear=W.isReportYear;exports.parseReportDateRange=W.parseReportDateRange;exports.reportParamsJsonSchema=W.reportParamsJsonSchema;exports.validateReportParamDefinitions=W.validateReportParamDefinitions;exports.validateReportParams=W.validateReportParams;exports.cloneReportTemplate=ee.cloneReportTemplate;exports.createLocalTemplateCatalog=ee.createLocalTemplateCatalog;exports.diffReportTemplates=ee.diffReportTemplates;exports.reviewReportTemplate=ee.reviewReportTemplate;exports.reviewReportTemplateAsync=ee.reviewReportTemplateAsync;exports.hasValidDataExplanation=ge.hasValidDataExplanation;exports.isReportDataTarget=ge.isReportDataTarget;exports.isReportValueState=ge.isReportValueState;exports.collectTemplateOutline=pe.collectTemplateOutline;exports.inspectTemplateFieldUsage=pe.inspectTemplateFieldUsage;exports.templatePathLocation=pe.templatePathLocation;exports.applyReportDocumentStyle=se.applyReportDocumentStyle;exports.captureTemplateFragment=se.captureTemplateFragment;exports.insertTemplateFragment=se.insertTemplateFragment;exports.inspectTemplateFragmentBindings=se.inspectTemplateFragmentBindings;exports.ReportCellEditError=F.ReportCellEditError;exports.applyReportCellEdit=F.applyReportCellEdit;exports.applyReportCellEditBatch=F.applyReportCellEditBatch;exports.createReportCellEdit=F.createReportCellEdit;exports.createReportCellEditBatch=F.createReportCellEditBatch;exports.createReportCellResolver=F.createReportCellResolver;exports.formatReportCellEdit=F.formatReportCellEdit;exports.getReportCellContext=F.getReportCellContext;exports.parseReportCellInput=F.parseReportCellInput;exports.reportCellEditKey=F.reportCellEditKey;exports.summarizeReportCellEdits=F.summarizeReportCellEdits;exports.TreeRowLimitError=fe.TreeRowLimitError;exports.createTreeTable=fe.createTreeTable;exports.validateTreeOptions=fe.validateTreeOptions;exports.LabelSheetError=D;exports.PageBuilder=qe;exports.ReportCalculationError=M;exports.ReportCellFieldError=We;exports.ReportTemplateStoreError=O;exports.TemplateBuilder=ze;exports.calculateReportSelection=gn;exports.classOf=P;exports.columnsFromContract=Pt;exports.computePageWindow=$e;exports.createCanvasPager=St;exports.createLabelTemplate=Ot;exports.createMemoryTemplateStore=qt;exports.createProviderReport=Ht;exports.createTableTemplate=Nt;exports.createTemplate=Ct;exports.createTemplateManager=zt;exports.defineLabelReport=Bt;exports.evaluateReportAggregateExpression=Ve;exports.formatReportClipboard=Wt;exports.imposeLabelSheets=vn;exports.measurePageSizePx=le;exports.parseReportCellFieldInput=Qt;exports.parseReportClipboard=Ut;exports.planFontSizePx=pt;exports.renderComponent=we;exports.renderPage=Fe;exports.renderPlan=mt;exports.renderPlanToCanvas=Tt;exports.renderPlanToCanvasAsync=Rt;exports.renderPlanToImages=bt;exports.resolvePaper=ye;exports.validateReportCellFieldDefinition=Ue;