@agile-team/mach-report 2.14.0 → 2.16.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 (282) hide show
  1. package/README.md +26 -16
  2. package/THIRD_PARTY_NOTICES.md +3 -1
  3. package/dist/{ExcelBindingWizard-CLT2p7P3.cjs → ExcelBindingWizard-CP6h2x1f.cjs} +1 -1
  4. package/dist/{ExcelBindingWizard-CvsWR8Ga.js → ExcelBindingWizard-HhB3hAJE.js} +3 -3
  5. package/dist/ParamEditor-CUQLgoxa.cjs +1 -0
  6. package/dist/ParamEditor-OKesP_nO.js +594 -0
  7. package/dist/{ReportBatchPanel-DkxTzBkD.cjs → ReportBatchPanel-cZCAMAwH.cjs} +1 -1
  8. package/dist/{ReportBatchPanel-LqVgiqp7.js → ReportBatchPanel-ruxcbfY6.js} +39 -39
  9. package/dist/ReportPreview-BcDKCLiK.js +4834 -0
  10. package/dist/ReportPreview-Bk9nLfO9.cjs +6 -0
  11. package/dist/{ReportTemplateLibrary-cQ1sqNYo.cjs → ReportTemplateLibrary-BDlNT8JN.cjs} +1 -1
  12. package/dist/{ReportTemplateLibrary-MjWEtc7X.js → ReportTemplateLibrary-DcwrH-63.js} +1 -1
  13. package/dist/{RuleEditor-BaR6xUiI.cjs → RuleEditor-BX5S8RSF.cjs} +1 -1
  14. package/dist/{RuleEditor-ChuXMlei.js → RuleEditor-CGl9XY2s.js} +5 -5
  15. package/dist/{TemplateOutlinePanel-BHKP89Xz.cjs → TemplateOutlinePanel-CGrT5DFN.cjs} +1 -1
  16. package/dist/{TemplateOutlinePanel-Dci6aRn1.js → TemplateOutlinePanel-SXCjaPKR.js} +2 -2
  17. package/dist/{TemplateReusePanel-CY5eO2Sh.cjs → TemplateReusePanel-6Z3wRFz8.cjs} +1 -1
  18. package/dist/{TemplateReusePanel-B7Gmyc1z.js → TemplateReusePanel-lHLOS9Wn.js} +2 -2
  19. package/dist/{TemplateReviewPanel-DjlX3xpt.js → TemplateReviewPanel-CJ9PLc48.js} +2 -2
  20. package/dist/{TemplateReviewPanel-JvZe9_4G.cjs → TemplateReviewPanel-Dpk7sLcF.cjs} +1 -1
  21. package/dist/analytics.cjs +1 -1
  22. package/dist/analytics.d.cts +5 -1
  23. package/dist/analytics.d.ts +5 -1
  24. package/dist/analytics.js +154 -60
  25. package/dist/artifact-integrity.json +143 -0
  26. package/dist/assets-CqIbfbTr.js +126 -0
  27. package/dist/assets-e4YSke8n.cjs +1 -0
  28. package/dist/auto-YR7a4BtF.js +240 -0
  29. package/dist/auto-uVBjX1j5.cjs +1 -0
  30. package/dist/batch-WzDIXJAt.js +220 -0
  31. package/dist/batch-z6Aw5GEY.cjs +1 -0
  32. package/dist/capabilities-DDwXr_cA.js +103 -0
  33. package/dist/capabilities-DNLyZdNw.cjs +1 -0
  34. package/dist/codes.d.cts +4 -0
  35. package/dist/codes.d.ts +4 -0
  36. package/dist/component-tree-Ca6YYfHq.js +61 -0
  37. package/dist/component-tree-DkGLEfZC.cjs +1 -0
  38. package/dist/{computed-Bvk0W15F.js → computed-C-4C2S5h.js} +3 -3
  39. package/dist/config-Dg_o8e7m.cjs +1 -0
  40. package/dist/config-XQ4qrQ7Q.js +844 -0
  41. package/dist/designer-BfQSahxq.js +5163 -0
  42. package/dist/designer-CPPdeM5_.cjs +2 -0
  43. package/dist/designer.cjs +1 -1
  44. package/dist/designer.d.cts +197 -16
  45. package/dist/designer.d.ts +197 -16
  46. package/dist/designer.js +1 -1
  47. package/dist/diagnostic-notification-B9K9We3h.cjs +1 -0
  48. package/dist/diagnostic-notification-qGAYZdkB.js +7 -0
  49. package/dist/drill-CsdjgkRM.cjs +1 -0
  50. package/dist/drill-DIGsZfyB.js +145 -0
  51. package/dist/encoding-BOGq4qYL.js +21 -0
  52. package/dist/encoding-BYF9ZTl9.cjs +1 -0
  53. package/dist/{font-loader-DHto6Lra.js → font-loader-CzI1GuBc.js} +1 -1
  54. package/dist/{font-loader-vhCT8znW.cjs → font-loader-EKLzOJxf.cjs} +1 -1
  55. package/dist/index.cjs +8 -9
  56. package/dist/index.d.cts +84 -4
  57. package/dist/index.d.ts +84 -4
  58. package/dist/index.js +829 -833
  59. package/dist/json-snapshot-D6ioHth9.js +1702 -0
  60. package/dist/json-snapshot-DknkjvxP.cjs +2 -0
  61. package/dist/licenses/_bwip-js_generic-4.11.4.txt +24 -0
  62. package/dist/licenses/_fast-csv_format-4.3.5.txt +22 -0
  63. package/dist/licenses/_fast-csv_parse-4.3.6.txt +22 -0
  64. package/dist/licenses/_pdf-lib_fontkit-1.1.1.txt +326 -0
  65. package/dist/licenses/_pdf-lib_standard-fonts-1.0.0.txt +22 -0
  66. package/dist/licenses/_pdf-lib_upng-1.0.1.txt +22 -0
  67. package/dist/licenses/_types_node-14.18.63.txt +22 -0
  68. package/dist/licenses/_types_pako-2.0.3.txt +22 -0
  69. package/dist/licenses/_types_pegjs-0.10.6.txt +22 -0
  70. package/dist/licenses/archiver-5.3.2.txt +23 -0
  71. package/dist/licenses/archiver-utils-2.1.0.txt +23 -0
  72. package/dist/licenses/archiver-utils-3.0.4.txt +23 -0
  73. package/dist/licenses/async-3.2.6.txt +20 -0
  74. package/dist/licenses/balanced-match-1.0.2.txt +22 -0
  75. package/dist/licenses/base64-js-1.5.1.txt +22 -0
  76. package/dist/licenses/big-integer-1.6.52.txt +25 -0
  77. package/dist/licenses/binary-0.3.0.txt +178 -0
  78. package/dist/licenses/bl-4.1.0.txt +14 -0
  79. package/dist/licenses/bluebird-3.4.7.txt +22 -0
  80. package/dist/licenses/brace-expansion-1.1.21.txt +22 -0
  81. package/dist/licenses/brace-expansion-2.1.7.txt +22 -0
  82. package/dist/licenses/buffer-5.7.1.txt +22 -0
  83. package/dist/licenses/buffer-crc32-0.2.13.txt +20 -0
  84. package/dist/licenses/buffer-indexof-polyfill-1.0.2.txt +23 -0
  85. package/dist/licenses/buffers-0.1.1.txt +140 -0
  86. package/dist/licenses/chainsaw-0.1.0.txt +184 -0
  87. package/dist/licenses/compress-commons-4.1.2.txt +23 -0
  88. package/dist/licenses/concat-map-0.0.1.txt +19 -0
  89. package/dist/licenses/core-util-is-1.0.3.txt +20 -0
  90. package/dist/licenses/crc-32-1.2.2.txt +202 -0
  91. package/dist/licenses/crc32-stream-4.0.3.txt +23 -0
  92. package/dist/licenses/dayjs-1.11.23.txt +22 -0
  93. package/dist/licenses/duplexer2-0.1.4.txt +27 -0
  94. package/dist/licenses/end-of-stream-1.4.5.txt +22 -0
  95. package/dist/licenses/exceljs-4.4.0.txt +23 -0
  96. package/dist/licenses/fast-csv-4.3.6.txt +22 -0
  97. package/dist/licenses/fast-png-6.4.0.txt +22 -0
  98. package/dist/licenses/fs-constants-1.0.0.txt +22 -0
  99. package/dist/licenses/fs.realpath-1.0.0.txt +44 -0
  100. package/dist/licenses/fstream-1.0.12.txt +16 -0
  101. package/dist/licenses/glob-7.2.3.txt +22 -0
  102. package/dist/licenses/graceful-fs-4.2.11.txt +16 -0
  103. package/dist/licenses/ieee754-1.2.1.txt +12 -0
  104. package/dist/licenses/immediate-3.0.6.txt +21 -0
  105. package/dist/licenses/inflight-1.0.6.txt +16 -0
  106. package/dist/licenses/inherits-2.0.4.txt +17 -0
  107. package/dist/licenses/iobuffer-5.4.0.txt +23 -0
  108. package/dist/licenses/isarray-1.0.0.txt +61 -0
  109. package/dist/licenses/jszip-3.10.2.txt +652 -0
  110. package/dist/licenses/lazystream-1.0.1.txt +24 -0
  111. package/dist/licenses/lie-3.3.0.txt +8 -0
  112. package/dist/licenses/listenercount-1.0.1.txt +6 -0
  113. package/dist/licenses/lodash.defaults-4.2.0.txt +48 -0
  114. package/dist/licenses/lodash.difference-4.5.0.txt +48 -0
  115. package/dist/licenses/lodash.escaperegexp-4.1.2.txt +48 -0
  116. package/dist/licenses/lodash.flatten-4.4.0.txt +48 -0
  117. package/dist/licenses/lodash.groupby-4.6.0.txt +48 -0
  118. package/dist/licenses/lodash.isboolean-3.0.3.txt +23 -0
  119. package/dist/licenses/lodash.isequal-4.5.0.txt +48 -0
  120. package/dist/licenses/lodash.isfunction-3.0.9.txt +48 -0
  121. package/dist/licenses/lodash.isnil-4.0.0.txt +23 -0
  122. package/dist/licenses/lodash.isplainobject-4.0.6.txt +48 -0
  123. package/dist/licenses/lodash.isundefined-3.0.1.txt +23 -0
  124. package/dist/licenses/lodash.union-4.6.0.txt +48 -0
  125. package/dist/licenses/lodash.uniq-4.5.0.txt +48 -0
  126. package/dist/licenses/minimatch-3.1.5.txt +16 -0
  127. package/dist/licenses/minimatch-5.1.9.txt +16 -0
  128. package/dist/licenses/minimist-1.2.8.txt +19 -0
  129. package/dist/licenses/mkdirp-0.5.6.txt +22 -0
  130. package/dist/licenses/node-sql-parser-5.4.0.txt +202 -0
  131. package/dist/licenses/normalize-path-3.0.0.txt +22 -0
  132. package/dist/licenses/once-1.4.0.txt +16 -0
  133. package/dist/licenses/pako-1.0.11.txt +22 -0
  134. package/dist/licenses/pako-2.2.0.txt +22 -0
  135. package/dist/licenses/path-is-absolute-1.0.1.txt +22 -0
  136. package/dist/licenses/pdf-lib-1.17.1.txt +22 -0
  137. package/dist/licenses/process-nextick-args-2.0.1.txt +20 -0
  138. package/dist/licenses/readable-stream-2.3.8.txt +48 -0
  139. package/dist/licenses/readable-stream-3.6.2.txt +48 -0
  140. package/dist/licenses/readdir-glob-1.1.3.txt +202 -0
  141. package/dist/licenses/rimraf-2.7.1.txt +16 -0
  142. package/dist/licenses/safe-buffer-5.1.2.txt +22 -0
  143. package/dist/licenses/safe-buffer-5.2.1.txt +22 -0
  144. package/dist/licenses/saxes-5.0.1.txt +397 -0
  145. package/dist/licenses/setimmediate-1.0.5.txt +21 -0
  146. package/dist/licenses/string_decoder-1.1.1.txt +49 -0
  147. package/dist/licenses/string_decoder-1.3.0.txt +49 -0
  148. package/dist/licenses/tar-stream-2.2.0.txt +22 -0
  149. package/dist/licenses/tmp-0.2.7.txt +22 -0
  150. package/dist/licenses/traverse-0.3.9.txt +25 -0
  151. package/dist/licenses/tslib-1.14.1.txt +13 -0
  152. package/dist/licenses/unzipper-0.10.14.txt +26 -0
  153. package/dist/licenses/util-deprecate-1.0.2.txt +25 -0
  154. package/dist/licenses/uuid-11.1.1.txt +10 -0
  155. package/dist/licenses/wrappy-1.0.2.txt +16 -0
  156. package/dist/licenses/xmlchars-2.2.0.txt +19 -0
  157. package/dist/licenses/zip-stream-4.1.1.txt +23 -0
  158. package/dist/matrix-CGRGkn5s.js +112 -0
  159. package/dist/matrix-gEO7ZM_u.cjs +1 -0
  160. package/dist/media-B7vnpD8k.cjs +1 -0
  161. package/dist/media-Y90dHK9z.js +70 -0
  162. package/dist/param-validation-C3HlcLLO.cjs +1 -0
  163. package/dist/param-validation-Do7Eg8Zv.js +181 -0
  164. package/dist/{pdf-AyJGb22z.cjs → pdf-ByVCb1i6.cjs} +49 -49
  165. package/dist/{pdf-8UPQebOE.js → pdf-DJ5S6ukC.js} +4924 -4872
  166. package/dist/pdf.cjs +1 -1
  167. package/dist/pdf.d.cts +20 -3
  168. package/dist/pdf.d.ts +20 -3
  169. package/dist/pdf.js +2 -2
  170. package/dist/{plugin-BGKf-Tqg.js → plugin-C2j5_mhx.js} +2 -2
  171. package/dist/{plugin-CktLH_Iy.cjs → plugin-Dr39GBRG.cjs} +1 -1
  172. package/dist/prepared-DdrjLC7L.cjs +1 -0
  173. package/dist/prepared-DqtpvRTn.js +87 -0
  174. package/dist/progress-B0ctFpKf.cjs +1 -0
  175. package/dist/progress-BXzlVbIp.js +29 -0
  176. package/dist/progress-DJBd9Rb9.cjs +1 -0
  177. package/dist/progress-Hc2vxoCs.js +52 -0
  178. package/dist/protocol-BzwMP4Vw.cjs +1 -0
  179. package/dist/protocol-kt4Iy6-3.js +90 -0
  180. package/dist/record-bindings-CZWBJ1fU.js +195 -0
  181. package/dist/record-bindings-DUX1VMlR.cjs +1 -0
  182. package/dist/{region-binding-workflow-DEJbhpCv.js → region-binding-workflow-CWNvIjkV.js} +1 -1
  183. package/dist/{region-binding-workflow-BzfbxRiR.cjs → region-binding-workflow-CqSMxQ4p.cjs} +1 -1
  184. package/dist/report-encoding-worker.cjs +1 -0
  185. package/dist/report-encoding-worker.d.ts +1 -0
  186. package/dist/report-encoding-worker.js +2 -0
  187. package/dist/{report-params-B44imUd4.js → report-params-B1RzkhJj.js} +1 -1
  188. package/dist/{report-params-SJfhKgaX.cjs → report-params-WDGrA4oP.cjs} +1 -1
  189. package/dist/rich-text-layout-ALlMoYOG.cjs +3 -0
  190. package/dist/rich-text-layout-Ct5WrY1g.js +102 -0
  191. package/dist/runtime-BjKBI530.js +168 -0
  192. package/dist/runtime-CBFEPKEs.cjs +1 -0
  193. package/dist/sbom.cdx.json +3982 -0
  194. package/dist/server/node.d.cts +106 -2
  195. package/dist/server/node.d.ts +106 -2
  196. package/dist/server-node.cjs +5 -1
  197. package/dist/server-node.js +4634 -539
  198. package/dist/server.cjs +1 -1
  199. package/dist/server.d.cts +780 -5
  200. package/dist/server.d.ts +780 -5
  201. package/dist/server.js +773 -691
  202. package/dist/sha256-BshdOkCC.cjs +1 -0
  203. package/dist/sha256-DTG-Gq8i.js +157 -0
  204. package/dist/style-67OqfNed.js +73 -0
  205. package/dist/style-C22Pbv3T.cjs +1 -0
  206. package/dist/style.css +1 -1
  207. package/dist/template-bindings-C2SpvsMU.js +58 -0
  208. package/dist/template-bindings-CEtWyiLX.cjs +1 -0
  209. package/dist/template-catalog-BtR2JmCL.js +414 -0
  210. package/dist/template-catalog-C2NLdrwB.cjs +1 -0
  211. package/dist/{template-fragments-DFUpq5QM.cjs → template-fragments-BVsbxs4a.cjs} +1 -1
  212. package/dist/{template-fragments-CLkGo6To.js → template-fragments-By0aZC1D.js} +21 -21
  213. package/dist/{template-outline-B3xVkzSv.cjs → template-outline-BwRV_eRo.cjs} +1 -1
  214. package/dist/{template-outline-CFenM1PV.js → template-outline-cnWfT_LK.js} +3 -3
  215. package/dist/template-registry-C62vpv4a.cjs +1 -0
  216. package/dist/template-registry-Cw3vRTX2.js +801 -0
  217. package/dist/textwrap-BEIg2w8y.js +110 -0
  218. package/dist/textwrap-BI-yJ6Wt.cjs +4 -0
  219. package/dist/{tree-CqcQ99NM.js → tree-CjVZLRw7.js} +1 -1
  220. package/dist/vue/async.d.cts +189 -14
  221. package/dist/vue/async.d.ts +189 -14
  222. package/dist/vue/index.d.cts +246 -22
  223. package/dist/vue/index.d.ts +246 -22
  224. package/dist/vue-async.cjs +1 -1
  225. package/dist/vue-async.js +3 -3
  226. package/dist/vue.cjs +1 -1
  227. package/dist/vue.js +80 -78
  228. package/dist/{workbook-session-BfK1yHOO.js → workbook-session-BeSO8PFB.js} +5460 -5295
  229. package/dist/{workbook-session-DNa2RHNG.cjs → workbook-session-Cbts-22R.cjs} +19 -19
  230. package/dist/worker.cjs +1 -1
  231. package/dist/worker.d.cts +104 -2
  232. package/dist/worker.d.ts +104 -2
  233. package/dist/worker.js +12 -156
  234. package/dist/xlsx-node.cjs +35 -35
  235. package/dist/xlsx-node.js +2138 -2137
  236. package/dist/xlsx.cjs +4 -4
  237. package/dist/xlsx.d.cts +24 -10
  238. package/dist/xlsx.d.ts +24 -10
  239. package/dist/xlsx.js +303 -277
  240. package/package.json +7 -4
  241. package/dist/ParamEditor-CflQV3eQ.js +0 -526
  242. package/dist/ParamEditor-vIDzvpPV.cjs +0 -1
  243. package/dist/ReportPreview-CvbqLUzM.cjs +0 -6
  244. package/dist/ReportPreview-D_ywJ_-H.js +0 -4533
  245. package/dist/assets-C2U-e-Sz.cjs +0 -4
  246. package/dist/assets-Q0wUwNrV.js +0 -217
  247. package/dist/batch-DzaTNLWI.js +0 -371
  248. package/dist/batch-xMkqYiTr.cjs +0 -1
  249. package/dist/capabilities-CK_7hizc.js +0 -63
  250. package/dist/capabilities-CsZ-pNHR.cjs +0 -1
  251. package/dist/config-0UIohTS7.cjs +0 -1
  252. package/dist/config-Dt9NtCPl.js +0 -566
  253. package/dist/data-explanation-BktvER5B.cjs +0 -1
  254. package/dist/data-explanation-C_J6jYNi.js +0 -16
  255. package/dist/defaults-DXhiM1ZD.js +0 -10
  256. package/dist/defaults-xhmcLLrf.cjs +0 -1
  257. package/dist/designer-Ci1LizA9.js +0 -5020
  258. package/dist/designer-rtmVIIdN.cjs +0 -2
  259. package/dist/grid-strokes-Cr7DwUux.cjs +0 -1
  260. package/dist/grid-strokes-DyyG1q_o.js +0 -53
  261. package/dist/json-snapshot-BeFT3Tso.js +0 -1952
  262. package/dist/json-snapshot-D1NTP2oI.cjs +0 -2
  263. package/dist/matrix-DVyWiYsd.cjs +0 -1
  264. package/dist/matrix-yZsGnldA.js +0 -227
  265. package/dist/page-window-index-CIuT4BAv.js +0 -43
  266. package/dist/page-window-index-DEjnM6IB.cjs +0 -1
  267. package/dist/param-validation-BlHHXs6u.js +0 -153
  268. package/dist/param-validation-DCK039V1.cjs +0 -1
  269. package/dist/progress-7OSZbFok.js +0 -39
  270. package/dist/progress-BnLiS5eH.cjs +0 -1
  271. package/dist/render-plan-7xpGrCEl.cjs +0 -1
  272. package/dist/render-plan-Ck6koX9L.js +0 -13
  273. package/dist/style-CQ1PK8ZB.js +0 -67
  274. package/dist/style-UgIJSA1F.cjs +0 -1
  275. package/dist/task-events-DQ276fn2.cjs +0 -1
  276. package/dist/task-events-Dpsvf_t2.js +0 -47
  277. package/dist/template-bindings-BJR4k7qZ.cjs +0 -1
  278. package/dist/template-bindings-Daui7hLF.js +0 -252
  279. package/dist/template-registry-COXDEJEM.js +0 -570
  280. package/dist/template-registry-D3SjENi6.cjs +0 -1
  281. package/dist/validate-BJ5HIWY8.cjs +0 -1
  282. package/dist/validate-CkQBWCeg.js +0 -163
package/dist/xlsx.cjs CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("./progress-BnLiS5eH.cjs"),w=require("./workbook-session-DNa2RHNG.cjs"),W=require("./render-plan-7xpGrCEl.cjs"),R=require("./grid-geometry-CZ_cYB6O.cjs"),C=require("./style-UgIJSA1F.cjs"),P=require("./capabilities-CsZ-pNHR.cjs"),m=require("./region-binding-workflow-BzfbxRiR.cjs");function v(e,t){const i=e??t;if(!Number.isSafeInteger(i)||i<=0)throw new Error("Excel 图片字节预算应为正安全整数");return i}function z(e,t){const i=e.imageData;if(!i||!/^data:image\/(png|jpe?g);base64,/i.test(i))return;if(i.length>Math.ceil(t/3)*4+64)throw new Error("Excel 单张图片超过字节预算");const n=i.indexOf(","),r=i.slice(n+1);if(!/^[A-Za-z0-9+/]+={0,2}$/.test(r)||r.length%4!==0)throw new Error("Excel 图片不是有效的 base64 数据");const o=r.length/4*3-(r.endsWith("==")?2:r.endsWith("=")?1:0);if(o>t)throw new Error("Excel 单张图片超过字节预算");const l=/^data:image\/png;/i.test(i)?"png":"jpeg",s=atob(r.slice(0,12));if(l==="png"?!s.startsWith(`‰PNG\r
2
- 
3
- `):!s.startsWith("ÿØÿ"))throw new Error("Excel 图片内容与 PNG/JPEG 类型不一致");return{base64:`data:image/${l};base64,${r}`,key:`${l}:${r}`,extension:l,bytes:o}}function O(e,t,i){let n=i*72/25.4;if(!Number.isFinite(n)||t+Math.ceil(n/409)-1>1048576)throw new Error("Excel 图片占位超过工作表行数上限");for(;n>0;){if(t>1048576)throw new Error("Excel 图片占位超过工作表行数上限");const r=Math.min(409,n);e.getRow(t++).height=r,n-=r}return t}function G(e,t,i){let n=Math.round(t*36e3),r=0;if(!Number.isSafeInteger(n))throw new Error("Excel 图片锚点超出安全坐标范围");for(e.properties.defaultColWidth??=8.43;r<16384;){const o=e.getColumn(r+1).width??e.properties.defaultColWidth,l=Math.round(w.excelColumnWidthToMm(o)*36e3);if(!Number.isSafeInteger(l)||l<=0)throw new Error("Excel 图片锚点所在列宽无效");if(n<l)return{col:r+n/l,row:i-1,nativeCol:r,nativeColOff:n,nativeRow:i-1,nativeRowOff:0};n-=l,r++}throw new Error("Excel 图片锚点超过16384列上限")}function N(e,t,i){const n=v(t.maxImageBytes,16777216),r=v(t.maxTotalImageBytes,32*1024*1024),o=v(t.maxImages,1e3),l=new Map,s=new Map;let a=0;return{write(d,c,h){if(![c.widthMm,c.heightMm,c.leftMm].every(Number.isFinite)||c.widthMm<0||c.heightMm<0||c.leftMm<0)throw new Error("Excel 图片尺寸无效");if(!c.widthMm||!c.heightMm)return h;const g=s.get(c.imageData)??z(c,n);if(g&&s.set(c.imageData,g),!g)return i.push(`${c.nid??c.kind}: Excel 图片仅支持 PNG/JPEG data URI,已跳过`),h;let f=l.get(g.key);if(f===void 0){if(l.size>=o)throw new Error("Excel 唯一图片数量超过预算");if(a+g.bytes>r)throw new Error("Excel 图片总字节数超过预算");f=e.addImage({base64:g.base64,extension:g.extension}),l.set(g.key,f),a+=g.bytes}const u=O(d,h,c.heightMm);return d.addImage(f,{tl:G(d,c.leftMm,h),ext:{width:c.widthMm*96/25.4,height:c.heightMm*96/25.4},editAs:"oneCell"}),u}}}function B(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function A(e,t){const i=e.meta?.xlsxFlow;if(i===void 0)return;if(!B(i)||i.version!=="1.0"||!Number.isSafeInteger(i.columnStart)||Number(i.columnStart)<0)throw new Error("Excel 多区域几何标记无效,不能按列序猜测输出");if(!e.grid)throw new Error("Excel 多区域输出只接受显式网格组件");const n=i,r=e.grid.colWidthsMm;if(!r?.length||n.columnStart+r.length>t.length||r.some((o,l)=>Math.abs(o-t[n.columnStart+l])>.001))throw new Error("Excel 多区域列位置与网格列宽不一致");return n}function I(e){const t=e.meta?.xlsxFlow;if(t===void 0){if(e.components.some(n=>n.meta?.xlsxFlow!==void 0))throw new Error("Excel 多区域页面缺少完整列几何标记");return}const i=L(t,e.meta?.reportScope);for(const n of e.components){const r=A(n,i.widths);if(!r)throw new Error("Excel 多区域页面混入没有区域几何的组件,请使用独立页面模板");const o=i.widths.slice(0,r.columnStart).reduce((s,a)=>s+a,e.marginLeftMm??0),l=n.grid.colWidthsMm.reduce((s,a)=>s+a,0);if(Math.abs(o-n.leftMm)>.01||Math.abs(l-n.widthMm)>.01)throw new Error("Excel 多区域标记与真实横向位置不一致")}return i}function L(e,t){if(!B(e)||e.version!=="1.0"||typeof e.sheet!="string"||!e.sheet.trim()||typeof e.templateId!="string"||!e.templateId.trim())throw new Error("Excel 多区域工作表标识无效");if(!Array.isArray(e.fullWidthsMm)||!e.fullWidthsMm.length||e.fullWidthsMm.length>16384||e.fullWidthsMm.some(i=>typeof i!="number"||!Number.isFinite(i)||i<=0||i>2e3))throw new Error("Excel 多区域完整列宽无效");if(t!==void 0&&(typeof t!="string"||!t.trim()))throw new Error("Excel 多区域报表命名空间无效");return{key:JSON.stringify([t??e.templateId,e.sheet]),sheet:e.sheet,widths:e.fullWidthsMm}}function S(e){return Math.round(e*1e6)/1e6}function D(e,t,i,n,r){return e.components.filter(o=>n?o.pageAnchor==="header"?t===0:o.pageAnchor==="footer"?t===i-1:o.table?.role!=="header"?!0:r.has(o.table.id)?!1:(r.add(o.table.id),!0):!0)}function j(e,t,i,n){const r=e.components.filter(l=>!t.includes(l)&&l.table?.role==="header"),o=t.filter(l=>!l.pageAnchor).reduce((l,s)=>Math.max(l,s.topMm+s.heightMm),e.marginTopMm??0);return t.map(l=>{let s=l.topMm;return i&&l.pageAnchor==="footer"&&(s=o),s-=r.filter(a=>a.topMm+a.heightMm<=s+.001).reduce((a,d)=>a+d.heightMm,0),{component:l,layout:R.resolveGridLayout(l.grid,l.widthMm,l.heightMm),top:s,column:A(l,n).columnStart}})}function _(e,t,i){const n=t.length-1;if(n*i.length>1e6)throw new Error("Excel 多区域单页超过 100 万几何单元格,请减小预览分页高度或列数");const r=new Map(t.map((s,a)=>[s,a])),o=new Map,l=new Map;for(const s of e)for(const a of s.layout.cells){if(!Object.keys(a.cell).length)continue;const d=r.get(S(s.top+a.yMm)),c=r.get(S(s.top+a.yMm+a.heightMm)),h=s.column+a.ci,g=h+(a.cell.colSpan??1),f=`${d}:${h}`;for(let u=d;u<c;u++)for(let x=h;x<g;x++){const M=`${u}:${x}`;if(l.has(M))throw new Error("Excel 多区域实际单元格互相覆盖,已终止输出,未覆盖已有内容");l.set(M,f)}o.set(f,{...a.cell,style:C.mergeComponentStyles(s.component.style,a.cell.style),rowSpan:c-d,colSpan:g-h})}return Array.from({length:n},(s,a)=>{const d=[];for(let c=0;c<i.length;c++){const h=`${a}:${c}`,g=o.get(h);g?(d.push(g),c+=(g.colSpan??1)-1):l.has(h)||d.push(null)}return d})}function H(e,t){const i=new Set,n=[];let r;for(const[o,{page:l}]of e.entries()){const s=I(l);if(r&&(s.key!==r.key||s.widths.length!==r.widths.length||s.widths.some((f,u)=>Math.abs(f-r.widths[u])>.001)))throw new Error("Excel 多区域分页的工作表或列结构不一致");r??=s;const a=D(l,o,e.length,t,i),d=j(l,a,t,s.widths);if(!d.length)continue;const c=[...new Set(d.flatMap(f=>[...f.layout.rows.map(u=>S(f.top+u.pos)),S(f.top+f.component.heightMm)]))].sort((f,u)=>f-u),h=_(d,c,s.widths),g=c.slice(1).map((f,u)=>f-c[u]);n.push({kind:"rect",leftMm:0,topMm:0,widthMm:s.widths.reduce((f,u)=>f+u,0),heightMm:g.reduce((f,u)=>f+u,0),grid:{cells:h,colWidthsMm:s.widths,rowHeightsMm:g}})}return n}const T=72/25.4,q=32767,X=253;function b(e,t){if(typeof e!="string")return;if(e.length>q)throw new Error(`Excel 单元格 ${t} 最多支持 32767 个字符,无法无损导出;内容未裁剪`);let i=0;for(let n=0;n<e.length;n++)if(e.charCodeAt(n)===10&&++i>X)throw new Error(`Excel 单元格 ${t} 最多支持 253 个换行,无法无损导出;内容未改写`)}function E(e){if(!e)return;const t=e.replace("#","");return/^[0-9a-fA-F]{6}$/.test(t)?`FF${t.toUpperCase()}`:void 0}function F(e,t={}){e.font={name:t.fontFamily,bold:t.bold===!0,italic:t.italic===!0,underline:t.underline===!0,size:C.resolveFontSize(t).fontSizePt,color:E(t.color)?{argb:E(t.color)}:void 0}}const y={a3:{width:297,height:420,code:8},a4:{width:210,height:297,code:9},a5:{width:148,height:210,code:11}};function K(e,t,i,n){if(t&&t!=="auto")return y[t].code;const r=Math.min(e.pageWidthMm,e.pageHeightMm),o=Math.max(e.pageWidthMm,e.pageHeightMm),l=Object.values(y).find(s=>Math.abs(r-s.width)<=1&&Math.abs(o-s.height)<=1);return l?l.code:(n.push(`page ${i+1}: 自定义纸张 ${e.pageWidthMm}×${e.pageHeightMm}mm 无对应 Excel 纸型,打印设置回退 A4;可显式配置 paperSize`),y.a4.code)}function J(e,t,i,n){const r=typeof t.text=="string"?t.text:"";if(i!=="raw"||!Object.prototype.hasOwnProperty.call(t,"value")){b(r,e.address),e.value=r;return}const o=t.value;if(o===null||typeof o=="string"||typeof o=="boolean"||typeof o=="number"&&Number.isFinite(o)){b(o,e.address),e.value=o,t.numberFormat&&(e.numFmt=t.numberFormat);return}b(r,e.address),e.value=r,n.push(`原始单元格值无效,已保留显示文本:${e.address}`)}function U(e){const t=I(e);return t?{id:`xlsx-flow:${t.key}`,title:t.sheet,wide:!0,flow:!0}:V(e)}function V(e){const i=e.components.filter(n=>n.table!==void 0)[0]?.table;if(!(!i||typeof i.id!="string"||!i.id.trim()||!Array.isArray(i.columnKeys)||!i.columnKeys.length)){for(const n of e.components){if(n.table){if(!n.grid||n.table.id!==i.id)return;continue}if(n.grid||n.kind!=="text"&&!W.isImageBackedComponent(n)||n.richParagraphs?.length&&!n.text&&!n.lines?.length)return}return{id:i.id,title:i.title,wide:i.layout==="wide"||e.layout==="wide"}}}function Z(e,t){const i=new Set;for(const[n,r]of e.pages.entries())if(!t[n])for(const o of r.components)typeof o.table?.id=="string"&&i.add(o.table.id);return i}function k(e){return e.layout==="wide"||e.components.some(t=>t.table?.layout==="wide")}function Q(e,t,i){const n=[],r=e.pages.map(U),o=Z(e,r);for(const[l,s]of e.pages.entries()){const a=r[l],d=a&&!o.has(a.id),c=t==="pages"||!d?void 0:a;if(t==="continuous"&&!c)throw new Error(`page ${l+1}: continuous Excel 需要完整、单一的逻辑表来源;自由布局请使用 sheetMode: 'pages'`);const h=c!==void 0&&(t==="continuous"||c.wide);!h&&t!=="pages"&&k(s)&&i.push(`page ${l+1}: 混合或缺少逻辑表来源,已保留独立 Sheet,未猜测合并内容`);const g=n[n.length-1];h&&g?.continuous&&g.tableId===c.id?g.pages.push({page:s,index:l}):n.push({pages:[{page:s,index:l}],continuous:h,...h?{tableId:c.id,title:c.title}:{},...a?.flow?{flow:!0,title:a.title}:{}})}return n}function $(e,t,i){return!e||e.length===t.length&&e.every((n,r)=>i(n,t[r]))}function Y(e,t,i,n){const r=e.table,o=t.columns.map(a=>a.size),l=$(n.keys,r.columnKeys,(a,d)=>a===d),s=$(n.widths,o,(a,d)=>Math.abs(a-d)<=.001);if(r.columnKeys.length!==o.length||!l||!s)throw new Error(`page ${i+1}: 连续 Excel 逻辑表 ${r.id} 的列结构或列宽不一致`);if(n.keys??=r.columnKeys,n.widths??=o,r.role==="header"){if(r.rowIndex!==-1)throw new Error(`page ${i+1}: 连续 Excel 表头 rowIndex 必须为 -1`);n.headerSeen=!0}else{if(!["body","group-header","subtotal","grand-total"].includes(r.role)||r.rowIndex!==n.expectedRow)throw new Error(`page ${i+1}: 连续 Excel 逻辑行来源不连续或重复(期望 ${n.expectedRow})`);n.expectedRow+=t.rows.length}if(t.cells.some(a=>a.cell.children?.length))throw new Error(`page ${i+1}: 连续 Excel 暂不支持嵌套组件;请使用独立 Sheet 导出并检查告警`)}function ee(e,t){const i={expectedRow:0,headerSeen:!1};for(const{page:n,index:r}of e.pages)for(const o of n.components){const l=t.get(o);o.table&&l&&Y(o,l,r,i)}if(!i.headerSeen)throw new Error("连续 Excel 逻辑表缺少明确表头来源")}function te(e,t,i){let n=(e?.replace(/[\\/*?:[\]]/g," ").replace(/\s+/g," ").trim()||`Sheet${t+1}`).slice(0,31).replace(/^'+|'+$/g,"").trim()||`Sheet${t+1}`;n.toLowerCase()==="history"&&(n+=" 报表");let r=n,o=1;for(;i.has(r.toLowerCase());){const l=` (${++o})`;r=n.slice(0,31-l.length)+l}return i.add(r.toLowerCase()),r}function ne(e){const t=new Set;function i(n,r,o,l){return n<=r?n:(t.has(o)||(e.push(l),t.add(o)),r)}return{column:n=>i(n,255,"column","Excel 单列宽度上限为 255 字符,超宽列已收敛至 255;单元格值完整保留,显示范围可能受限"),row:n=>i(n,409,"row","Excel 行高上限为 409pt,超高行已收敛至 409pt;单元格值完整保留,显示范围可能受限")}}function ie(e){const t=e.flow?H(e.pages,e.continuous).map(o=>({comp:o,pageIndex:e.pages[0].index})):e.pages.flatMap(({page:o,index:l},s)=>o.components.filter(a=>!e.continuous||(a.pageAnchor!=="header"||s===0)&&(a.pageAnchor!=="footer"||s===e.pages.length-1)).map(a=>({comp:a,pageIndex:l}))),i=new Map;let n=1,r=0;for(const{comp:o}of t)if(o.grid){const l=R.resolveGridLayout(o.grid,o.widthMm,o.heightMm);i.set(o,l),n=Math.max(n,l.columns.length)}else o.kind==="text"&&(r=Math.max(r,o.widthMm));if(n>16384)throw new Error("Excel 最多支持 16384 列,无法无损导出此报表");return{components:t,grids:i,columnCount:n,textWidthMm:r}}function re(e,t,i){const{page:n,index:r}=e.pages[0],o=t!==void 0&&t!=="auto";return(e.continuous||k(n))&&!o?{}:{pageSetup:{paperSize:K(n,t,r,i),orientation:n.pageWidthMm>n.pageHeightMm?"landscape":"portrait",fitToPage:!0,...e.continuous?{fitToWidth:1,fitToHeight:0}:{}}}}function oe(e){const t=E(e.borderColor??e.lineColor),i={style:"thin",...t?{color:{argb:t}}:{}};return{...e.borderTop!==!1?{top:i}:{},...e.borderLeft!==!1?{left:i}:{},...e.borderBottom!==!1?{bottom:i}:{},...e.borderRight!==!1?{right:i}:{}}}function le(e,t){e.alignment={horizontal:t.align??"left",vertical:t.verticalAlign??"middle",wrapText:!0};const i=E(t.backgroundColor);i&&(e.fill={type:"pattern",pattern:"solid",fgColor:{argb:i}}),e.border=oe(t),F(e,t)}function se(e,t){for(const[i,n]of t.columns.entries()){const r=e.sheet.getColumn(i+1),o=e.limits.column(w.mmToExcelColumnWidth(n.size));(r.width==null||r.width<o)&&(r.width=o)}}function ae(e,t,i){for(const[n,r]of t.rows.entries()){const o=e.sheet.getRow(i+n),l=e.limits.row(r.size*T);(o.height==null||o.height<l)&&(o.height=l)}}function ce(e,t,i,n){const r=Math.max(1,Math.min(t.cell.colSpan??1,i.columns.length-t.ci)),o=Math.max(1,Math.min(t.cell.rowSpan??1,i.rows.length-t.ri));(r>1||o>1)&&e.mergeCells(n+t.ri,t.ci+1,n+t.ri+o-1,t.ci+r)}function de(e,t,i,n,r){if(n+i.rows.length-1>1048576)throw new Error("Excel 最多支持 1048576 行,无法无损导出此报表");ae(e,i,n);for(const o of i.cells){const l=e.sheet.getCell(n+o.ri,o.ci+1);J(l,o.cell,e.valueMode,e.warnings),o.cell.children?.length&&e.warnings.push(`page ${r+1} ${t.nid??t.kind} cell ${o.ri+1}:${o.ci+1}: 嵌套组件内容暂不支持 xlsx 导出,已跳过`),le(l,C.mergeComponentStyles(t.style,o.cell.style)),o.cell.indentMm&&(l.alignment={...l.alignment,indent:Math.min(250,Math.max(1,Math.round(o.cell.indentMm/2.5)))}),ce(e.sheet,o,i,n)}return n+i.rows.length}function he(e,t,i,n,r){const o=Array.isArray(t.lines)&&t.lines.length>0?t.lines.join(`
4
- `):t.text??"";if(t.richParagraphs?.length){const d=o.length===0?"富文本内容暂不支持 xlsx 导出,已跳过":"富文本按已有文本回退导出,内联样式未保留";e.warnings.push(`page ${r+1} ${t.nid??t.kind}: ${d}`)}const l=e.sheet.getRow(i),s=l.getCell(1);b(o,s.address),s.value=o,s.alignment={horizontal:t.style?.align??"left",vertical:t.style?.verticalAlign??"middle",wrapText:!0};const a=E(t.style?.backgroundColor);return a&&(s.fill={type:"pattern",pattern:"solid",fgColor:{argb:a}}),F(s,t.style),n>1&&e.sheet.mergeCells(i,1,i,n),l.height=e.limits.row(t.heightMm*T),i+1}function ge(e,t,i){const n=t+i-1;e.views=[{state:"frozen",ySplit:n,xSplit:0}],e.pageSetup.printTitlesRow=`1:${n}`}function fe(e,t,i,n){!t.grids.size&&t.textWidthMm>0&&(e.sheet.getColumn(1).width=e.limits.column(w.mmToExcelColumnWidth(t.textWidthMm)));for(const l of t.grids.values())se(e,l);let r=1,o=!1;for(const{comp:l,pageIndex:s}of t.components){const a=i&&l.table?.role==="header";if(a&&o)continue;if(r>1048576)throw new Error("Excel 最多支持 1048576 行,无法无损导出此报表");const d=t.grids.get(l);d?(a&&(ge(e.sheet,r,d.rows.length),o=!0),r=de(e,l,d,r,s)):l.kind==="text"?r=he(e,l,r,t.columnCount,s):W.isImageBackedComponent(l)?r=n.write(e.sheet,l,r):e.warnings.push(`page ${s+1} ${l.nid??l.kind}: 组件类型 ${l.kind} 暂不支持 xlsx 导出,已跳过`)}}function ue(e){if(e.valueMode!==void 0&&e.valueMode!=="text"&&e.valueMode!=="raw")throw new Error("xlsx valueMode 必须是 text 或 raw");if(e.paperSize!==void 0&&e.paperSize!=="auto"&&!Object.prototype.hasOwnProperty.call(y,e.paperSize))throw new Error("xlsx paperSize 必须是 auto、a3、a4 或 a5");if(e.sheetMode!==void 0&&!["auto","pages","continuous"].includes(e.sheetMode))throw new Error("xlsx sheetMode 必须是 auto、pages 或 continuous")}async function me(e,t={}){ue(t),p.assertOutputActive(t.signal);const i=P.reportOutputDiagnostics(e,"xlsx",t),n=new w.ExcelJSRuntime.Workbook,r=[],o=N(n,t,r),l=ne(r),s=Q(e,t.sheetMode,r),a=new Set;for(const[c,h]of s.entries()){const g=ie(h);h.continuous&&!h.flow&&ee(h,g.grids);const f=h.pages[0].page,u=t.sheetName?.(c)??te(h.title,c,a);a.add(u.toLowerCase());const x=n.addWorksheet(u,re(h,t.paperSize,r)),M=t.valueMode??(k(f)||h.continuous||h.flow?"raw":"text");p.assertOutputActive(t.signal),fe({sheet:x,warnings:r,limits:l,valueMode:M},g,h.continuous,o),await p.outputCheckpoint(t,c+1,s.length)}p.assertOutputActive(t.signal);const d=await n.xlsx.writeBuffer();return p.assertOutputActive(t.signal),{workbook:n,buffer:d,warnings:r,diagnostics:i}}exports.importExcelTemplate=w.importExcelTemplate;exports.inspectExcelWorkbook=w.inspectExcelWorkbook;exports.openExcelWorkbook=w.openExcelWorkbook;exports.bindExcelTemplate=m.bindExcelTemplate;exports.createExcelBindingDocument=m.createExcelBindingDocument;exports.createExcelBindingSession=m.createExcelBindingSession;exports.createExcelRegionBindingDocument=m.createExcelRegionBindingDocument;exports.createExcelRegionBindingSession=m.createExcelRegionBindingSession;exports.excelBindingCellRange=m.excelBindingCellRange;exports.excelBindingRowRange=m.excelBindingRowRange;exports.getExcelSheetWindow=m.getExcelSheetWindow;exports.parseExcelBindingSession=m.parseExcelBindingSession;exports.parseExcelRegionBindingSession=m.parseExcelRegionBindingSession;exports.validateExcelBindingFields=m.validateExcelBindingFields;exports.validateExcelBindingRecipe=m.validateExcelBindingRecipe;exports.validateExcelBindingRegions=m.validateExcelBindingRegions;exports.validateExcelRegionBindings=m.validateExcelRegionBindings;exports.validateExcelRegionFields=m.validateExcelRegionFields;exports.validateExcelRegionGeometry=m.validateExcelRegionGeometry;exports.renderPlanToXlsx=me;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("./style-C22Pbv3T.cjs"),M=require("./progress-B0ctFpKf.cjs"),p=require("./workbook-session-Cbts-22R.cjs"),C=require("./component-tree-DkGLEfZC.cjs"),z=require("./media-B7vnpD8k.cjs"),T=require("./grid-geometry-CZ_cYB6O.cjs"),O=require("./capabilities-DNLyZdNw.cjs"),m=require("./region-binding-workflow-CqSMxQ4p.cjs");function A(e,t){return{richText:e.flatMap((o,n)=>[...n?[{text:`
2
+ `}]:[],...o.segments.map(i=>{const l=w.mergeComponentStyles(t,i.style),r=l.color?.replace(/^#/,"");return{text:i.kind==="field"?i.field??"":i.text??"",font:{name:l.fontFamily,bold:l.bold,italic:l.italic,underline:l.underline,size:w.resolveFontSize(l).fontSizePt,.../^[a-f\d]{6}$/i.test(r??"")?{color:{argb:`FF${r.toUpperCase()}`}}:{}}}})])}}function N(e,t){const o=e.children?.filter(l=>l.kind==="text"&&!l.grid)??[];if(!e.richParagraphs?.length&&!o.length)return;const n=w.mergeComponentStyles(t,e.style),i=e.richParagraphs?.length?[...e.richParagraphs]:e.text?[{segments:[{text:e.text}]}]:[];for(const l of o){const r=w.mergeComponentStyles(n,l.style),s=l.richParagraphs?.length?l.richParagraphs:[{segments:[{text:l.lines?.join(`
3
+ `)??l.text??""}]}];for(const a of s)i.push({...a,segments:a.segments.map(c=>({...c,style:w.mergeComponentStyles(r,c.style)}))})}return A(i,n)}function L(e,t,o){let n=o*72/25.4;if(!Number.isFinite(n)||t+Math.ceil(n/409)-1>1048576)throw new Error("Excel 图片占位超过工作表行数上限");for(;n>0;){if(t>1048576)throw new Error("Excel 图片占位超过工作表行数上限");const i=Math.min(409,n);e.getRow(t++).height=i,n-=i}return t}function G(e,t,o){let n=Math.round(t*36e3),i=0;if(!Number.isSafeInteger(n))throw new Error("Excel 图片锚点超出安全坐标范围");for(e.properties.defaultColWidth??=8.43;i<16384;){const l=e.getColumn(i+1).width??e.properties.defaultColWidth,r=Math.round(p.excelColumnWidthToMm(l)*36e3);if(!Number.isSafeInteger(r)||r<=0)throw new Error("Excel 图片锚点所在列宽无效");if(n<r)return{col:i+n/r,row:o-1,nativeCol:i,nativeColOff:n,nativeRow:o-1,nativeRowOff:0};n-=r,i++}throw new Error("Excel 图片锚点超过16384列上限")}function j(e,t,o){let n=o*72/25.4;if(!Number.isFinite(n)||Math.abs(n)>1048576*409)throw new Error("Excel 图片纵向偏移超过工作表范围");const i=l=>{const r=e.getRow(l).height??e.properties.defaultRowHeight??15;if(!Number.isFinite(r)||r<=0)throw new Error("Excel 图片锚点所在行高无效");return r};for(;n<0&&t>1;)n+=i(--t);for(;t<=1048576&&n>=i(t);)n-=i(t++);if(t>1048576||n<0)throw new Error("Excel 图片移动到工作表边界之外");return{nativeRow:t-1,nativeRowOff:Math.round(n*25.4/72*36e3)}}function D(e,t,o){const n=z.createImageMediaInspector(t),i=new Map;return{write(l,r,s,a){if(![r.widthMm,r.heightMm,r.leftMm].every(Number.isFinite)||r.widthMm<0||r.heightMm<0||r.leftMm<0)throw new Error("Excel 图片尺寸无效");if(!r.widthMm||!r.heightMm)return s;if(!r.imageData||!/^data:image\/(png|jpe?g);base64,/i.test(r.imageData))return o.push(`${r.nid??r.kind}: Excel 图片仅支持 PNG/JPEG data URI,已跳过`),s;const c=n(r.imageData);let d=i.get(c.dataUrl);d===void 0&&(d=e.addImage({base64:c.dataUrl,extension:c.extension}),i.set(c.dataUrl,d));const g=a?s:L(l,s,r.heightMm);return l.addImage(d,{tl:{...G(l,a?.leftMm??r.leftMm,s),...a?j(l,s,a.offsetMm):{}},ext:{width:r.widthMm*96/25.4,height:r.heightMm*96/25.4},editAs:"oneCell"}),g}}}function B(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function F(e,t){const o=e.meta?.xlsxFlow;if(o===void 0)return;if(!B(o)||o.version!=="1.0"||!Number.isSafeInteger(o.columnStart)||Number(o.columnStart)<0)throw new Error("Excel 多区域几何标记无效,不能按列序猜测输出");if(!e.grid)throw new Error("Excel 多区域输出只接受显式网格组件");const n=o,i=e.grid.colWidthsMm;if(!i?.length||n.columnStart+i.length>t.length||i.some((l,r)=>Math.abs(l-t[n.columnStart+r])>.001))throw new Error("Excel 多区域列位置与网格列宽不一致");return n}function W(e){const t=e.meta?.xlsxFlow;if(t===void 0){if(e.components.some(n=>n.meta?.xlsxFlow!==void 0))throw new Error("Excel 多区域页面缺少完整列几何标记");return}const o=H(t,e.meta?.reportScope);for(const n of e.components){const i=F(n,o.widths);if(!i)throw new Error("Excel 多区域页面混入没有区域几何的组件,请使用独立页面模板");const l=o.widths.slice(0,i.columnStart).reduce((s,a)=>s+a,e.marginLeftMm??0),r=n.grid.colWidthsMm.reduce((s,a)=>s+a,0);if(Math.abs(l-n.leftMm)>.01||Math.abs(r-n.widthMm)>.01)throw new Error("Excel 多区域标记与真实横向位置不一致")}return o}function H(e,t){if(!B(e)||e.version!=="1.0"||typeof e.sheet!="string"||!e.sheet.trim()||typeof e.templateId!="string"||!e.templateId.trim())throw new Error("Excel 多区域工作表标识无效");if(!Array.isArray(e.fullWidthsMm)||!e.fullWidthsMm.length||e.fullWidthsMm.length>16384||e.fullWidthsMm.some(o=>typeof o!="number"||!Number.isFinite(o)||o<=0||o>2e3))throw new Error("Excel 多区域完整列宽无效");if(t!==void 0&&(typeof t!="string"||!t.trim()))throw new Error("Excel 多区域报表命名空间无效");return{key:JSON.stringify([t??e.templateId,e.sheet]),sheet:e.sheet,widths:e.fullWidthsMm}}function v(e){return Math.round(e*1e6)/1e6}function _(e,t,o,n,i){return e.components.filter(l=>n?l.pageAnchor==="header"?t===0:l.pageAnchor==="footer"?t===o-1:l.table?.role!=="header"?!0:i.has(l.table.id)?!1:(i.add(l.table.id),!0):!0)}function q(e,t,o,n){const i=e.components.filter(r=>!t.includes(r)&&r.table?.role==="header"),l=t.filter(r=>!r.pageAnchor).reduce((r,s)=>Math.max(r,s.topMm+s.heightMm),e.marginTopMm??0);return t.map(r=>{let s=r.topMm;return o&&r.pageAnchor==="footer"&&(s=l),s-=i.filter(a=>a.topMm+a.heightMm<=s+.001).reduce((a,c)=>a+c.heightMm,0),{component:r,layout:T.resolveGridLayout(r.grid,r.widthMm,r.heightMm),top:s,column:F(r,n).columnStart}})}function U(e,t,o){const n=t.length-1;if(n*o.length>1e6)throw new Error("Excel 多区域单页超过 100 万几何单元格,请减小预览分页高度或列数");const i=new Map(t.map((s,a)=>[s,a])),l=new Map,r=new Map;for(const s of e)for(const a of s.layout.cells){if(!Object.keys(a.cell).length)continue;const c=i.get(v(s.top+a.yMm)),d=i.get(v(s.top+a.yMm+a.heightMm)),g=s.column+a.ci,h=g+(a.cell.colSpan??1),f=`${c}:${g}`;for(let u=c;u<d;u++)for(let x=g;x<h;x++){const y=`${u}:${x}`;if(r.has(y))throw new Error("Excel 多区域实际单元格互相覆盖,已终止输出,未覆盖已有内容");r.set(y,f)}l.set(f,{...a.cell,style:w.mergeComponentStyles(s.component.style,a.cell.style),rowSpan:d-c,colSpan:h-g})}return Array.from({length:n},(s,a)=>{const c=[];for(let d=0;d<o.length;d++){const g=`${a}:${d}`,h=l.get(g);h?(c.push(h),d+=(h.colSpan??1)-1):r.has(g)||c.push(null)}return c})}function X(e,t){const o=new Set,n=[];let i;for(const[l,{page:r}]of e.entries()){const s=W(r);if(i&&(s.key!==i.key||s.widths.length!==i.widths.length||s.widths.some((f,u)=>Math.abs(f-i.widths[u])>.001)))throw new Error("Excel 多区域分页的工作表或列结构不一致");i??=s;const a=_(r,l,e.length,t,o),c=q(r,a,t,s.widths);if(!c.length)continue;const d=[...new Set(c.flatMap(f=>[...f.layout.rows.map(u=>v(f.top+u.pos)),v(f.top+f.component.heightMm)]))].sort((f,u)=>f-u),g=U(c,d,s.widths),h=d.slice(1).map((f,u)=>f-d[u]);n.push({kind:"rect",leftMm:0,topMm:0,widthMm:s.widths.reduce((f,u)=>f+u,0),heightMm:h.reduce((f,u)=>f+u,0),grid:{cells:g,colWidthsMm:s.widths,rowHeightsMm:h}})}return n}const $=72/25.4,K=32767,J=253;function E(e,t){if(typeof e!="string")return;if(e.length>K)throw new Error(`Excel 单元格 ${t} 最多支持 32767 个字符,无法无损导出;内容未裁剪`);let o=0;for(let n=0;n<e.length;n++)if(e.charCodeAt(n)===10&&++o>J)throw new Error(`Excel 单元格 ${t} 最多支持 253 个换行,无法无损导出;内容未改写`)}function b(e){if(!e)return;const t=e.replace("#","");return/^[0-9a-fA-F]{6}$/.test(t)?`FF${t.toUpperCase()}`:void 0}function I(e,t={}){e.font={name:t.fontFamily,bold:t.bold===!0,italic:t.italic===!0,underline:t.underline===!0,size:w.resolveFontSize(t).fontSizePt,color:b(t.color)?{argb:b(t.color)}:void 0}}const S={a3:{width:297,height:420,code:8},a4:{width:210,height:297,code:9},a5:{width:148,height:210,code:11}};function V(e,t,o,n){if(t&&t!=="auto")return S[t].code;const i=Math.min(e.pageWidthMm,e.pageHeightMm),l=Math.max(e.pageWidthMm,e.pageHeightMm),r=Object.values(S).find(s=>Math.abs(i-s.width)<=1&&Math.abs(l-s.height)<=1);return r?r.code:(n.push(`page ${o+1}: 自定义纸张 ${e.pageWidthMm}×${e.pageHeightMm}mm 无对应 Excel 纸型,打印设置回退 A4;可显式配置 paperSize`),S.a4.code)}function Q(e,t,o,n){const i=typeof t.text=="string"?t.text:"";if(o!=="raw"||!Object.prototype.hasOwnProperty.call(t,"value")){E(i,e.address),e.value=i;return}const l=t.value;if(l===null||typeof l=="string"||typeof l=="boolean"||typeof l=="number"&&Number.isFinite(l)){E(l,e.address),e.value=l,t.numberFormat&&(e.numFmt=t.numberFormat);return}E(i,e.address),e.value=i,n.push(`原始单元格值无效,已保留显示文本:${e.address}`)}function Y(e){const t=W(e);return t?{id:`xlsx-flow:${t.key}`,title:t.sheet,wide:!0,flow:!0}:Z(e)}function Z(e){const o=e.components.filter(n=>n.table!==void 0)[0]?.table;if(!(!o||typeof o.id!="string"||!o.id.trim()||!Array.isArray(o.columnKeys)||!o.columnKeys.length)){for(const n of e.components){if(n.table){if(!n.grid||n.table.id!==o.id)return;continue}if(n.grid||n.kind!=="text"&&!C.isImageBackedComponent(n))return}return{id:o.id,title:o.title,wide:o.layout==="wide"||e.layout==="wide"}}}function ee(e,t){const o=new Set;for(const[n,i]of e.pages.entries())if(!t[n])for(const l of i.components)typeof l.table?.id=="string"&&o.add(l.table.id);return o}function k(e){return e.layout==="wide"||e.components.some(t=>t.table?.layout==="wide")}function te(e,t,o){const n=[],i=e.pages.map(Y),l=ee(e,i);for(const[r,s]of e.pages.entries()){const a=i[r],c=a&&!l.has(a.id),d=t==="pages"||!c?void 0:a;if(t==="continuous"&&!d)throw new Error(`page ${r+1}: continuous Excel 需要完整、单一的逻辑表来源;自由布局请使用 sheetMode: 'pages'`);const g=d!==void 0&&(t==="continuous"||d.wide);!g&&t!=="pages"&&k(s)&&o.push(`page ${r+1}: 混合或缺少逻辑表来源,已保留独立 Sheet,未猜测合并内容`);const h=n[n.length-1];g&&h?.continuous&&h.tableId===d.id?h.pages.push({page:s,index:r}):n.push({pages:[{page:s,index:r}],continuous:g,...g?{tableId:d.id,title:d.title}:{},...a?.flow?{flow:!0,title:a.title}:{}})}return n}function R(e,t,o){return!e||e.length===t.length&&e.every((n,i)=>o(n,t[i]))}function ne(e,t,o,n){const i=e.table,l=t.columns.map(a=>a.size),r=R(n.keys,i.columnKeys,(a,c)=>a===c),s=R(n.widths,l,(a,c)=>Math.abs(a-c)<=.001);if(i.columnKeys.length!==l.length||!r||!s)throw new Error(`page ${o+1}: 连续 Excel 逻辑表 ${i.id} 的列结构或列宽不一致`);if(n.keys??=i.columnKeys,n.widths??=l,i.role==="header"){if(i.rowIndex!==-1)throw new Error(`page ${o+1}: 连续 Excel 表头 rowIndex 必须为 -1`);n.headerSeen=!0}else{if(!["body","group-header","subtotal","grand-total"].includes(i.role)||i.rowIndex!==n.expectedRow)throw new Error(`page ${o+1}: 连续 Excel 逻辑行来源不连续或重复(期望 ${n.expectedRow})`);n.expectedRow+=t.rows.length}}function ie(e,t){const o={expectedRow:0,headerSeen:!1};for(const{page:n,index:i}of e.pages)for(const l of n.components){const r=t.get(l);l.table&&r&&ne(l,r,i,o)}if(!o.headerSeen)throw new Error("连续 Excel 逻辑表缺少明确表头来源")}function re(e,t,o){let n=(e?.replace(/[\\/*?:[\]]/g," ").replace(/\s+/g," ").trim()||`Sheet${t+1}`).slice(0,31).replace(/^'+|'+$/g,"").trim()||`Sheet${t+1}`;n.toLowerCase()==="history"&&(n+=" 报表");let i=n,l=1;for(;o.has(i.toLowerCase());){const r=` (${++l})`;i=n.slice(0,31-r.length)+r}return o.add(i.toLowerCase()),i}function oe(e){const t=new Set;function o(n,i,l,r){return n<=i?n:(t.has(l)||(e.push(r),t.add(l)),i)}return{column:n=>o(n,255,"column","Excel 单列宽度上限为 255 字符,超宽列已收敛至 255;单元格值完整保留,显示范围可能受限"),row:n=>o(n,409,"row","Excel 行高上限为 409pt,超高行已收敛至 409pt;单元格值完整保留,显示范围可能受限")}}async function le(e,t){const o=e.flow?X(e.pages,e.continuous).map(r=>({comp:r,pageIndex:e.pages[0].index})):e.pages.flatMap(({page:r,index:s},a)=>r.components.filter(c=>!e.continuous||(c.pageAnchor!=="header"||a===0)&&(c.pageAnchor!=="footer"||a===e.pages.length-1)).map(c=>({comp:c,pageIndex:s}))),n=new Map;let i=1,l=0;for(const{comp:r}of o)if(r.grid){const s=T.resolveGridLayout(r.grid,r.widthMm,r.heightMm);n.set(r,s),i=Math.max(i,s.columns.length);const a=t(s.cells.length);a&&await a}else r.kind==="text"&&(l=Math.max(l,r.widthMm));if(i>16384)throw new Error("Excel 最多支持 16384 列,无法无损导出此报表");return{components:o,grids:n,columnCount:i,textWidthMm:l}}function se(e,t,o){const{page:n,index:i}=e.pages[0],l=t!==void 0&&t!=="auto";return(e.continuous||k(n))&&!l?{}:{pageSetup:{paperSize:V(n,t,i,o),orientation:n.pageWidthMm>n.pageHeightMm?"landscape":"portrait",fitToPage:!0,...e.continuous?{fitToWidth:1,fitToHeight:0}:{}}}}function ae(e){const t=b(e.borderColor??e.lineColor),o={style:"thin",...t?{color:{argb:t}}:{}};return{...e.borderTop!==!1?{top:o}:{},...e.borderLeft!==!1?{left:o}:{},...e.borderBottom!==!1?{bottom:o}:{},...e.borderRight!==!1?{right:o}:{}}}function ce(e,t){e.alignment={horizontal:t.align??"left",vertical:t.verticalAlign??"middle",wrapText:!0};const o=b(t.backgroundColor);o&&(e.fill={type:"pattern",pattern:"solid",fgColor:{argb:o}}),e.border=ae(t),I(e,t)}function de(e,t){for(const[o,n]of t.columns.entries()){const i=e.sheet.getColumn(o+1),l=e.limits.column(p.mmToExcelColumnWidth(n.size));(i.width==null||i.width<l)&&(i.width=l)}}function he(e,t,o){for(const[n,i]of t.rows.entries()){const l=e.sheet.getRow(o+n),r=e.limits.row(i.size*$);(l.height==null||l.height<r)&&(l.height=r)}}function ge(e,t,o,n){const i=Math.max(1,Math.min(t.cell.colSpan??1,o.columns.length-t.ci)),l=Math.max(1,Math.min(t.cell.rowSpan??1,o.rows.length-t.ri));(i>1||l>1)&&e.mergeCells(n+t.ri,t.ci+1,n+t.ri+l-1,t.ci+i)}async function fe(e,t,o,n){if(n+o.rows.length-1>1048576)throw new Error("Excel 最多支持 1048576 行,无法无损导出此报表");he(e,o,n);for(const i of o.cells){const l=e.sheet.getCell(n+i.ri,i.ci+1);Q(l,i.cell,e.valueMode,e.warnings);const r=N(i.cell,t.style);r&&(E(r.richText.map(c=>c.text).join(""),l.address),l.value=r);const s=t.grid?.paddingMm??.5;for(const c of i.cell.children??[])C.isImageBackedComponent(c)&&!c.grid&&e.images.write(e.sheet,c,n+i.ri,{leftMm:i.xMm+s+(i.cell.indentMm??0)+c.leftMm,offsetMm:s+c.topMm});ce(l,w.mergeComponentStyles(t.style,i.cell.style)),i.cell.indentMm&&(l.alignment={...l.alignment,indent:Math.min(250,Math.max(1,Math.round(i.cell.indentMm/2.5)))}),ge(e.sheet,i,o,n);const a=e.schedule();a&&await a}return n+o.rows.length}function ue(e,t,o,n){const i=Array.isArray(t.lines)&&t.lines.length>0?t.lines.join(`
4
+ `):t.text??"",l=e.sheet.getRow(o),r=l.getCell(1);t.richParagraphs?.length||E(i,r.address),r.value=t.richParagraphs?.length?A(t.richParagraphs,t.style):i,typeof r.value=="object"&&r.value&&"richText"in r.value&&E(r.value.richText.map(a=>a.text).join(""),r.address),r.alignment={horizontal:t.style?.align??"left",vertical:t.style?.verticalAlign??"middle",wrapText:!0};const s=b(t.style?.backgroundColor);return s&&(r.fill={type:"pattern",pattern:"solid",fgColor:{argb:s}}),I(r,t.style),n>1&&e.sheet.mergeCells(o,1,o,n),l.height=e.limits.row(t.heightMm*$),o+1}function me(e,t,o){const n=t+o-1;e.views=[{state:"frozen",ySplit:n,xSplit:0}],e.pageSetup.printTitlesRow=`1:${n}`}async function we(e,t,o,n){!t.grids.size&&t.textWidthMm>0&&(e.sheet.getColumn(1).width=e.limits.column(p.mmToExcelColumnWidth(t.textWidthMm)));for(const r of t.grids.values()){de(e,r);const s=e.schedule(r.columns.length);s&&await s}let i=1,l=!1;for(const{comp:r,pageIndex:s}of t.components){const a=o&&r.table?.role==="header";if(a&&l)continue;if(i>1048576)throw new Error("Excel 最多支持 1048576 行,无法无损导出此报表");const c=t.grids.get(r);if(c)a&&(me(e.sheet,i,c.rows.length),l=!0),i=await fe(e,r,c,i);else if(r.kind==="text")i=ue(e,r,i,t.columnCount);else if(C.isImageBackedComponent(r)){const d=p.importedImageOverlay(r,o),g=n.write(e.sheet,r,d?.row??i,d);d||(i=g)}else e.warnings.push(`page ${s+1} ${r.nid??r.kind}: 组件类型 ${r.kind} 暂不支持 xlsx 导出,已跳过`)}}function pe(e){if(e.valueMode!==void 0&&e.valueMode!=="text"&&e.valueMode!=="raw")throw new Error("xlsx valueMode 必须是 text 或 raw");if(e.paperSize!==void 0&&e.paperSize!=="auto"&&!Object.prototype.hasOwnProperty.call(S,e.paperSize))throw new Error("xlsx paperSize 必须是 auto、a3、a4 或 a5");if(e.sheetMode!==void 0&&!["auto","pages","continuous"].includes(e.sheetMode))throw new Error("xlsx sheetMode 必须是 auto、pages 或 continuous")}async function xe(e,t={}){pe(t),M.assertOutputActive(t.signal);const o=O.reportOutputDiagnostics(e,"xlsx",t),n=new p.ExcelJSRuntime.Workbook,i=[],l=D(n,t,i),r=oe(i),s=te(e,t.sheetMode,i),a=new Set,c=M.createOutputScheduler(t);for(const[g,h]of s.entries()){const f=await le(h,c);h.continuous&&!h.flow&&ie(h,f.grids);const u=h.pages[0].page,x=t.sheetName?.(g)??re(h.title,g,a);a.add(x.toLowerCase());const y=n.addWorksheet(x,se(h,t.paperSize,i)),P=t.valueMode??(k(u)||h.continuous||h.flow?"raw":"text");M.assertOutputActive(t.signal),await we({sheet:y,warnings:i,limits:r,valueMode:P,schedule:c,images:l},f,h.continuous,l),await M.outputCheckpoint(t,g+1,s.length)}M.assertOutputActive(t.signal);const d=await n.xlsx.writeBuffer();return M.assertOutputActive(t.signal),{workbook:n,buffer:d,warnings:i,diagnostics:o}}exports.importExcelTemplate=p.importExcelTemplate;exports.inspectExcelWorkbook=p.inspectExcelWorkbook;exports.openExcelWorkbook=p.openExcelWorkbook;exports.bindExcelTemplate=m.bindExcelTemplate;exports.createExcelBindingDocument=m.createExcelBindingDocument;exports.createExcelBindingSession=m.createExcelBindingSession;exports.createExcelRegionBindingDocument=m.createExcelRegionBindingDocument;exports.createExcelRegionBindingSession=m.createExcelRegionBindingSession;exports.excelBindingCellRange=m.excelBindingCellRange;exports.excelBindingRowRange=m.excelBindingRowRange;exports.getExcelSheetWindow=m.getExcelSheetWindow;exports.parseExcelBindingSession=m.parseExcelBindingSession;exports.parseExcelRegionBindingSession=m.parseExcelRegionBindingSession;exports.validateExcelBindingFields=m.validateExcelBindingFields;exports.validateExcelBindingRecipe=m.validateExcelBindingRecipe;exports.validateExcelBindingRegions=m.validateExcelBindingRegions;exports.validateExcelRegionBindings=m.validateExcelRegionBindings;exports.validateExcelRegionFields=m.validateExcelRegionFields;exports.validateExcelRegionGeometry=m.validateExcelRegionGeometry;exports.renderPlanToXlsx=xe;
package/dist/xlsx.d.cts CHANGED
@@ -1152,6 +1152,8 @@ declare interface GradientStop {
1152
1152
  }
1153
1153
 
1154
1154
  declare interface GridCell {
1155
+ /** Styled cell content; text remains a plain-text fallback. Imported rich cells are read-only. */
1156
+ richParagraphs?: RichParagraph[];
1155
1157
  text?: string;
1156
1158
  rawText?: string;
1157
1159
  /** 原始值,仅供 Excel raw 模式消费;不参与预览、分页与 PDF 绘制。 */
@@ -1248,6 +1250,19 @@ declare interface ImageHyperlinkValue {
1248
1250
  tooltip?: string;
1249
1251
  }
1250
1252
 
1253
+ /** Bounded binary image inspection shared by PDF, Excel and template import. No decoder is loaded. */
1254
+ export declare interface ImageMediaOptions {
1255
+ maxImageBytes?: number;
1256
+ maxTotalImageBytes?: number;
1257
+ maxImages?: number;
1258
+ /** Decoded pixels per unique image, default 16 million. */
1259
+ maxImagePixels?: number;
1260
+ /** Total decoded pixels for unique media, default 64 million. */
1261
+ maxTotalImagePixels?: number;
1262
+ /** Maximum source dimension, default 16384 pixels. */
1263
+ maxImageDimension?: number;
1264
+ }
1265
+
1251
1266
  declare interface ImagePosition {
1252
1267
  tl: { col: number; row: number };
1253
1268
  ext: { width: number; height: number };
@@ -1447,7 +1462,7 @@ declare interface Media {
1447
1462
  export declare function openExcelWorkbook(input: ArrayBuffer | Uint8Array | Blob, options?: ExcelImportOptions): Promise<ExcelWorkbookSession>;
1448
1463
 
1449
1464
  declare interface OutputDiagnostic {
1450
- code: "missing-image" | "unsupported-component" | "unsupported-image-format" | "unsupported-style" | "rich-text-flattened" | "nested-components-omitted" | "async-image-required" | "image-decode-failed" | "asset-render-failed" | "asset-budget-exceeded";
1465
+ code: "invalid-image-data" | "image-budget-exceeded" | "component-render-failed" | "unsupported-text" | "output-degraded" | "missing-image" | "unsupported-component" | "unsupported-image-format" | "unsupported-style" | "rich-text-flattened" | "nested-components-omitted" | "async-image-required" | "image-decode-failed" | "asset-render-failed" | "asset-budget-exceeded";
1451
1466
  severity: "warning";
1452
1467
  format: OutputFormat;
1453
1468
  pageIndex: number;
@@ -1796,6 +1811,8 @@ export declare function renderPlanToXlsx(plan: RenderPlan, options?: XlsxRenderO
1796
1811
 
1797
1812
  /** 可持久化的业务身份与计划坐标独立;权限及并发校验仍由业务服务器执行。 */
1798
1813
  declare interface ReportCellSource {
1814
+ /** Source identity across report occurrences; sharing must be explicitly declared. */
1815
+ sourceScope?: string;
1799
1816
  datasetId: string;
1800
1817
  rowKey: string | number;
1801
1818
  field: string;
@@ -1855,6 +1872,10 @@ declare interface ReportParamDef {
1855
1872
  label: string;
1856
1873
  value: string;
1857
1874
  }>;
1875
+ /** Opaque host-resolved source key. No URL, credentials or executable code is stored. */
1876
+ optionsSource?: string;
1877
+ /** Select dependencies must be declared parameters; changing a parent clears descendants. */
1878
+ dependsOn?: string[];
1858
1879
  defaultValue?: string;
1859
1880
  required?: boolean;
1860
1881
  placeholder?: string;
@@ -3026,14 +3047,7 @@ declare interface Xlsx {
3026
3047
  write(stream: Stream, options?: Partial<XlsxWriteOptions>): Promise<void>;
3027
3048
  }
3028
3049
 
3029
- declare interface XlsxImageOptions {
3030
- /** Decoded bytes per unique embedded image; default 16 MiB. */
3031
- maxImageBytes?: number;
3032
- /** Total decoded bytes of unique images in this workbook; default 32 MiB. */
3033
- maxTotalImageBytes?: number;
3034
- /** Unique embedded media limit, default 1000; repeated placements reuse the same media. */
3035
- maxImages?: number;
3036
- }
3050
+ declare type XlsxImageOptions = ImageMediaOptions;
3037
3051
 
3038
3052
  declare interface XlsxReadOptions {
3039
3053
  /**
@@ -3048,7 +3062,7 @@ declare interface XlsxReadOptions {
3048
3062
  * 加粗/对齐/底色/字号直译(resolveGridLayout 复用单真相源几何)
3049
3063
  * - 文本组件 → 合并标题行(顺序流式输出,保字号/加粗/对齐;非像素级定位,
3050
3064
  * 目标是"财务能直接用的对账表"而非复刻版面)
3051
- * - 未支持组件、富文本专有内容与单元格嵌套组件跳过并计入 warnings
3065
+ * - 原生 richText 保留基础字形;未支持组件、段落专有排版与单元格嵌套组件计入 diagnostics / warnings
3052
3066
  */
3053
3067
  export declare interface XlsxRenderOptions extends OutputDiagnosticOptions, XlsxImageOptions {
3054
3068
  /** 工作表命名(连续表默认使用标题,其余默认 "Sheet1" 起序)。 */
package/dist/xlsx.d.ts CHANGED
@@ -1152,6 +1152,8 @@ declare interface GradientStop {
1152
1152
  }
1153
1153
 
1154
1154
  declare interface GridCell {
1155
+ /** Styled cell content; text remains a plain-text fallback. Imported rich cells are read-only. */
1156
+ richParagraphs?: RichParagraph[];
1155
1157
  text?: string;
1156
1158
  rawText?: string;
1157
1159
  /** 原始值,仅供 Excel raw 模式消费;不参与预览、分页与 PDF 绘制。 */
@@ -1248,6 +1250,19 @@ declare interface ImageHyperlinkValue {
1248
1250
  tooltip?: string;
1249
1251
  }
1250
1252
 
1253
+ /** Bounded binary image inspection shared by PDF, Excel and template import. No decoder is loaded. */
1254
+ export declare interface ImageMediaOptions {
1255
+ maxImageBytes?: number;
1256
+ maxTotalImageBytes?: number;
1257
+ maxImages?: number;
1258
+ /** Decoded pixels per unique image, default 16 million. */
1259
+ maxImagePixels?: number;
1260
+ /** Total decoded pixels for unique media, default 64 million. */
1261
+ maxTotalImagePixels?: number;
1262
+ /** Maximum source dimension, default 16384 pixels. */
1263
+ maxImageDimension?: number;
1264
+ }
1265
+
1251
1266
  declare interface ImagePosition {
1252
1267
  tl: { col: number; row: number };
1253
1268
  ext: { width: number; height: number };
@@ -1447,7 +1462,7 @@ declare interface Media {
1447
1462
  export declare function openExcelWorkbook(input: ArrayBuffer | Uint8Array | Blob, options?: ExcelImportOptions): Promise<ExcelWorkbookSession>;
1448
1463
 
1449
1464
  declare interface OutputDiagnostic {
1450
- code: "missing-image" | "unsupported-component" | "unsupported-image-format" | "unsupported-style" | "rich-text-flattened" | "nested-components-omitted" | "async-image-required" | "image-decode-failed" | "asset-render-failed" | "asset-budget-exceeded";
1465
+ code: "invalid-image-data" | "image-budget-exceeded" | "component-render-failed" | "unsupported-text" | "output-degraded" | "missing-image" | "unsupported-component" | "unsupported-image-format" | "unsupported-style" | "rich-text-flattened" | "nested-components-omitted" | "async-image-required" | "image-decode-failed" | "asset-render-failed" | "asset-budget-exceeded";
1451
1466
  severity: "warning";
1452
1467
  format: OutputFormat;
1453
1468
  pageIndex: number;
@@ -1796,6 +1811,8 @@ export declare function renderPlanToXlsx(plan: RenderPlan, options?: XlsxRenderO
1796
1811
 
1797
1812
  /** 可持久化的业务身份与计划坐标独立;权限及并发校验仍由业务服务器执行。 */
1798
1813
  declare interface ReportCellSource {
1814
+ /** Source identity across report occurrences; sharing must be explicitly declared. */
1815
+ sourceScope?: string;
1799
1816
  datasetId: string;
1800
1817
  rowKey: string | number;
1801
1818
  field: string;
@@ -1855,6 +1872,10 @@ declare interface ReportParamDef {
1855
1872
  label: string;
1856
1873
  value: string;
1857
1874
  }>;
1875
+ /** Opaque host-resolved source key. No URL, credentials or executable code is stored. */
1876
+ optionsSource?: string;
1877
+ /** Select dependencies must be declared parameters; changing a parent clears descendants. */
1878
+ dependsOn?: string[];
1858
1879
  defaultValue?: string;
1859
1880
  required?: boolean;
1860
1881
  placeholder?: string;
@@ -3026,14 +3047,7 @@ declare interface Xlsx {
3026
3047
  write(stream: Stream, options?: Partial<XlsxWriteOptions>): Promise<void>;
3027
3048
  }
3028
3049
 
3029
- declare interface XlsxImageOptions {
3030
- /** Decoded bytes per unique embedded image; default 16 MiB. */
3031
- maxImageBytes?: number;
3032
- /** Total decoded bytes of unique images in this workbook; default 32 MiB. */
3033
- maxTotalImageBytes?: number;
3034
- /** Unique embedded media limit, default 1000; repeated placements reuse the same media. */
3035
- maxImages?: number;
3036
- }
3050
+ declare type XlsxImageOptions = ImageMediaOptions;
3037
3051
 
3038
3052
  declare interface XlsxReadOptions {
3039
3053
  /**
@@ -3048,7 +3062,7 @@ declare interface XlsxReadOptions {
3048
3062
  * 加粗/对齐/底色/字号直译(resolveGridLayout 复用单真相源几何)
3049
3063
  * - 文本组件 → 合并标题行(顺序流式输出,保字号/加粗/对齐;非像素级定位,
3050
3064
  * 目标是"财务能直接用的对账表"而非复刻版面)
3051
- * - 未支持组件、富文本专有内容与单元格嵌套组件跳过并计入 warnings
3065
+ * - 原生 richText 保留基础字形;未支持组件、段落专有排版与单元格嵌套组件计入 diagnostics / warnings
3052
3066
  */
3053
3067
  export declare interface XlsxRenderOptions extends OutputDiagnosticOptions, XlsxImageOptions {
3054
3068
  /** 工作表命名(连续表默认使用标题,其余默认 "Sheet1" 起序)。 */