@agile-team/mach-report 2.15.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 (155) hide show
  1. package/README.md +14 -9
  2. package/dist/{ExcelBindingWizard-Bs43BGNp.cjs → ExcelBindingWizard-CP6h2x1f.cjs} +1 -1
  3. package/dist/{ExcelBindingWizard-BKH1nGNS.js → ExcelBindingWizard-HhB3hAJE.js} +3 -3
  4. package/dist/{ParamEditor-Da4akw6V.cjs → ParamEditor-CUQLgoxa.cjs} +1 -1
  5. package/dist/{ParamEditor-DoAhzJsm.js → ParamEditor-OKesP_nO.js} +1 -1
  6. package/dist/{ReportBatchPanel-wP9m9Pj1.cjs → ReportBatchPanel-cZCAMAwH.cjs} +1 -1
  7. package/dist/{ReportBatchPanel-BMf6boMA.js → ReportBatchPanel-ruxcbfY6.js} +3 -3
  8. package/dist/ReportPreview-BcDKCLiK.js +4834 -0
  9. package/dist/ReportPreview-Bk9nLfO9.cjs +6 -0
  10. package/dist/{ReportTemplateLibrary-Sxr3eD0J.cjs → ReportTemplateLibrary-BDlNT8JN.cjs} +1 -1
  11. package/dist/{ReportTemplateLibrary-C9wutIiT.js → ReportTemplateLibrary-DcwrH-63.js} +1 -1
  12. package/dist/{RuleEditor-XhGHK8DE.cjs → RuleEditor-BX5S8RSF.cjs} +1 -1
  13. package/dist/{RuleEditor-C_Clasvd.js → RuleEditor-CGl9XY2s.js} +2 -2
  14. package/dist/{TemplateOutlinePanel-JTSR53vJ.cjs → TemplateOutlinePanel-CGrT5DFN.cjs} +1 -1
  15. package/dist/{TemplateOutlinePanel-D6Bkny59.js → TemplateOutlinePanel-SXCjaPKR.js} +1 -1
  16. package/dist/{TemplateReusePanel-Kx35S0Ql.cjs → TemplateReusePanel-6Z3wRFz8.cjs} +1 -1
  17. package/dist/{TemplateReusePanel-rVuK1kTz.js → TemplateReusePanel-lHLOS9Wn.js} +2 -2
  18. package/dist/{TemplateReviewPanel-B0ar9_zf.js → TemplateReviewPanel-CJ9PLc48.js} +1 -1
  19. package/dist/{TemplateReviewPanel-Dn6X9UmY.cjs → TemplateReviewPanel-Dpk7sLcF.cjs} +1 -1
  20. package/dist/analytics.d.cts +2 -0
  21. package/dist/analytics.d.ts +2 -0
  22. package/dist/artifact-integrity.json +99 -91
  23. package/dist/{assets-DEaz4qsp.js → assets-CqIbfbTr.js} +24 -22
  24. package/dist/assets-e4YSke8n.cjs +1 -0
  25. package/dist/auto-YR7a4BtF.js +240 -0
  26. package/dist/auto-uVBjX1j5.cjs +1 -0
  27. package/dist/{batch-BfZHN1do.js → batch-WzDIXJAt.js} +1 -1
  28. package/dist/{batch-CLpELXBl.cjs → batch-z6Aw5GEY.cjs} +1 -1
  29. package/dist/capabilities-DDwXr_cA.js +103 -0
  30. package/dist/capabilities-DNLyZdNw.cjs +1 -0
  31. package/dist/codes.d.cts +2 -0
  32. package/dist/codes.d.ts +2 -0
  33. package/dist/component-tree-Ca6YYfHq.js +61 -0
  34. package/dist/component-tree-DkGLEfZC.cjs +1 -0
  35. package/dist/config-Dg_o8e7m.cjs +1 -0
  36. package/dist/{config-BVsJXSqS.js → config-XQ4qrQ7Q.js} +66 -64
  37. package/dist/designer-BfQSahxq.js +5163 -0
  38. package/dist/designer-CPPdeM5_.cjs +2 -0
  39. package/dist/designer.cjs +1 -1
  40. package/dist/designer.d.cts +53 -0
  41. package/dist/designer.d.ts +53 -0
  42. package/dist/designer.js +1 -1
  43. package/dist/diagnostic-notification-B9K9We3h.cjs +1 -0
  44. package/dist/diagnostic-notification-qGAYZdkB.js +7 -0
  45. package/dist/drill-CsdjgkRM.cjs +1 -0
  46. package/dist/{drill-ByJviLXS.js → drill-DIGsZfyB.js} +11 -11
  47. package/dist/encoding-BOGq4qYL.js +21 -0
  48. package/dist/encoding-BYF9ZTl9.cjs +1 -0
  49. package/dist/{font-loader-Q3bQjmrI.js → font-loader-CzI1GuBc.js} +1 -1
  50. package/dist/{font-loader-B_UkxpzC.cjs → font-loader-EKLzOJxf.cjs} +1 -1
  51. package/dist/index.cjs +7 -8
  52. package/dist/index.d.cts +2 -0
  53. package/dist/index.d.ts +2 -0
  54. package/dist/index.js +865 -834
  55. package/dist/json-snapshot-D6ioHth9.js +1702 -0
  56. package/dist/json-snapshot-DknkjvxP.cjs +2 -0
  57. package/dist/{pdf-CvvrjPQg.cjs → pdf-ByVCb1i6.cjs} +48 -50
  58. package/dist/{pdf-BwNyeGpt.js → pdf-DJ5S6ukC.js} +2737 -2749
  59. package/dist/pdf.cjs +1 -1
  60. package/dist/pdf.d.cts +2 -0
  61. package/dist/pdf.d.ts +2 -0
  62. package/dist/pdf.js +2 -2
  63. package/dist/{plugin-Ca_XZG3l.js → plugin-C2j5_mhx.js} +1 -1
  64. package/dist/{plugin-DHO7X8z2.cjs → plugin-Dr39GBRG.cjs} +1 -1
  65. package/dist/prepared-DdrjLC7L.cjs +1 -0
  66. package/dist/prepared-DqtpvRTn.js +87 -0
  67. package/dist/progress-BXzlVbIp.js +29 -0
  68. package/dist/progress-DJBd9Rb9.cjs +1 -0
  69. package/dist/{progress-D-OTpEav.js → progress-Hc2vxoCs.js} +2 -2
  70. package/dist/protocol-BzwMP4Vw.cjs +1 -0
  71. package/dist/protocol-kt4Iy6-3.js +90 -0
  72. package/dist/{record-bindings-Do_b3h4V.js → record-bindings-CZWBJ1fU.js} +9 -10
  73. package/dist/record-bindings-DUX1VMlR.cjs +1 -0
  74. package/dist/{region-binding-workflow-BMhK_TjP.js → region-binding-workflow-CWNvIjkV.js} +1 -1
  75. package/dist/{region-binding-workflow-DIYJdCUr.cjs → region-binding-workflow-CqSMxQ4p.cjs} +1 -1
  76. package/dist/report-encoding-worker.cjs +1 -0
  77. package/dist/report-encoding-worker.d.ts +1 -0
  78. package/dist/report-encoding-worker.js +2 -0
  79. package/dist/rich-text-layout-ALlMoYOG.cjs +3 -0
  80. package/dist/rich-text-layout-Ct5WrY1g.js +102 -0
  81. package/dist/runtime-BjKBI530.js +168 -0
  82. package/dist/runtime-CBFEPKEs.cjs +1 -0
  83. package/dist/sbom.cdx.json +2 -2
  84. package/dist/server/node.d.cts +86 -1
  85. package/dist/server/node.d.ts +86 -1
  86. package/dist/server-node.cjs +5 -1
  87. package/dist/server-node.js +4558 -473
  88. package/dist/server.cjs +1 -1
  89. package/dist/server.d.cts +8 -1
  90. package/dist/server.d.ts +8 -1
  91. package/dist/server.js +634 -792
  92. package/dist/sha256-BshdOkCC.cjs +1 -0
  93. package/dist/sha256-DTG-Gq8i.js +157 -0
  94. package/dist/style-67OqfNed.js +73 -0
  95. package/dist/style-C22Pbv3T.cjs +1 -0
  96. package/dist/style.css +1 -1
  97. package/dist/{template-catalog-j2B1MJlL.js → template-catalog-BtR2JmCL.js} +9 -9
  98. package/dist/{template-catalog-FJE_c9Qe.cjs → template-catalog-C2NLdrwB.cjs} +1 -1
  99. package/dist/{template-fragments-DcKeiylI.cjs → template-fragments-BVsbxs4a.cjs} +1 -1
  100. package/dist/{template-fragments-BGbQLGlV.js → template-fragments-By0aZC1D.js} +2 -2
  101. package/dist/template-registry-C62vpv4a.cjs +1 -0
  102. package/dist/{template-registry-BtaKPELV.js → template-registry-Cw3vRTX2.js} +389 -321
  103. package/dist/{textwrap-DE1kgcJB.js → textwrap-BEIg2w8y.js} +1 -1
  104. package/dist/textwrap-BI-yJ6Wt.cjs +4 -0
  105. package/dist/vue/async.d.cts +66 -0
  106. package/dist/vue/async.d.ts +66 -0
  107. package/dist/vue/index.d.cts +89 -1
  108. package/dist/vue/index.d.ts +89 -1
  109. package/dist/vue-async.cjs +1 -1
  110. package/dist/vue-async.js +3 -3
  111. package/dist/vue.cjs +1 -1
  112. package/dist/vue.js +7 -7
  113. package/dist/{workbook-session-BvToI-Fd.js → workbook-session-BeSO8PFB.js} +153 -140
  114. package/dist/{workbook-session-Bjv1YCRK.cjs → workbook-session-Cbts-22R.cjs} +12 -12
  115. package/dist/worker.cjs +1 -1
  116. package/dist/worker.d.cts +84 -1
  117. package/dist/worker.d.ts +84 -1
  118. package/dist/worker.js +12 -157
  119. package/dist/xlsx-node.cjs +33 -33
  120. package/dist/xlsx-node.js +1282 -1289
  121. package/dist/xlsx.cjs +4 -3
  122. package/dist/xlsx.d.cts +2 -0
  123. package/dist/xlsx.d.ts +2 -0
  124. package/dist/xlsx.js +297 -279
  125. package/package.json +6 -3
  126. package/dist/ReportPreview-ChV19HBp.js +0 -4619
  127. package/dist/ReportPreview-DbLvvOUT.cjs +0 -6
  128. package/dist/assets-B9ImAi6_.cjs +0 -1
  129. package/dist/batch-BaP6pWDE.cjs +0 -1
  130. package/dist/batch-CGyt-b2W.js +0 -273
  131. package/dist/capabilities-CAh2Nrue.cjs +0 -1
  132. package/dist/capabilities-DskCHs3V.js +0 -69
  133. package/dist/config-D10us76d.cjs +0 -1
  134. package/dist/data-explanation-B8MZRYVS.js +0 -16
  135. package/dist/data-explanation-DE55G30w.cjs +0 -1
  136. package/dist/defaults-DXhiM1ZD.js +0 -10
  137. package/dist/defaults-xhmcLLrf.cjs +0 -1
  138. package/dist/designer-2bDlcNXQ.js +0 -5136
  139. package/dist/designer-BT7XCdbW.cjs +0 -2
  140. package/dist/drill-DYTxuL3A.cjs +0 -1
  141. package/dist/grid-strokes-Cr7DwUux.cjs +0 -1
  142. package/dist/grid-strokes-DyyG1q_o.js +0 -53
  143. package/dist/json-snapshot-DFb2eWkf.js +0 -1416
  144. package/dist/json-snapshot-WWSGlaHG.cjs +0 -2
  145. package/dist/prepared-CFy9B75C.cjs +0 -1
  146. package/dist/prepared-ajM-H-9B.js +0 -69
  147. package/dist/record-bindings-By_UKZ2g.cjs +0 -1
  148. package/dist/render-plan-7xpGrCEl.cjs +0 -1
  149. package/dist/render-plan-Ck6koX9L.js +0 -13
  150. package/dist/sha256-ArEYjaTI.cjs +0 -1
  151. package/dist/sha256-DPEuJ3nh.js +0 -155
  152. package/dist/style-CQ1PK8ZB.js +0 -67
  153. package/dist/style-UgIJSA1F.cjs +0 -1
  154. package/dist/template-registry-Co1zPq5e.cjs +0 -1
  155. package/dist/textwrap-CWHyzkBH.cjs +0 -4
@@ -85,6 +85,14 @@ declare const BASE_TEMPLATE_EDITOR_MESSAGES: {
85
85
  note: string;
86
86
  invalid: string;
87
87
  };
88
+ declare interface BrowserReportWorker {
89
+ postMessage(value: unknown, transfer?: Transferable[]): void;
90
+ terminate(): void;
91
+ addEventListener(type: "message", listener: (event: MessageEvent) => void): void;
92
+ addEventListener(type: "error" | "messageerror", listener: (event: Event) => void): void;
93
+ removeEventListener(type: "message", listener: (event: MessageEvent) => void): void;
94
+ removeEventListener(type: "error" | "messageerror", listener: (event: Event) => void): void;
95
+ }
88
96
  declare interface CanvasSelection {
89
97
  /** Ctrl/Command/Shift toggles the selection without changing the report schema. */
90
98
  additive?: boolean;
@@ -655,6 +663,8 @@ declare interface ExpressionOptions_3 {
655
663
  divisionByZero?: "null" | "error";
656
664
  }
657
665
  declare interface GridCell {
666
+ /** Styled cell content; text remains a plain-text fallback. Imported rich cells are read-only. */
667
+ richParagraphs?: RichParagraph[];
658
668
  text?: string;
659
669
  rawText?: string;
660
670
  /** 原始值,仅供 Excel raw 模式消费;不参与预览、分页与 PDF 绘制。 */
@@ -678,6 +688,8 @@ declare interface GridCell {
678
688
  style?: ComponentStyle;
679
689
  }
680
690
  declare interface GridCell_2 {
691
+ /** Styled cell content; text remains a plain-text fallback. Imported rich cells are read-only. */
692
+ richParagraphs?: RichParagraph_2[];
681
693
  text?: string;
682
694
  rawText?: string;
683
695
  /** 原始值,仅供 Excel raw 模式消费;不参与预览、分页与 PDF 绘制。 */
@@ -701,6 +713,8 @@ declare interface GridCell_2 {
701
713
  style?: ComponentStyle_2;
702
714
  }
703
715
  declare interface GridCell_3 {
716
+ /** Styled cell content; text remains a plain-text fallback. Imported rich cells are read-only. */
717
+ richParagraphs?: RichParagraph_3[];
704
718
  text?: string;
705
719
  rawText?: string;
706
720
  /** 原始值,仅供 Excel raw 模式消费;不参与预览、分页与 PDF 绘制。 */
@@ -1092,6 +1106,8 @@ declare interface ListGroupBy_3 {
1092
1106
  }
1093
1107
  /** defaults 层可配置项(全部可选,均有内置缺省) */
1094
1108
  declare interface MachReportDefaults {
1109
+ /** Small encodes stay local; optional Worker isolation uses the same prepared plan for large output. */
1110
+ exportExecution?: ReportExportExecutionOptions;
1095
1111
  drill?: ReportDrillOptions;
1096
1112
  loadParamOptions?: ReportParamOptionsLoader;
1097
1113
  printOptions?: ReportPrintOptions;
@@ -2356,8 +2372,36 @@ declare interface ReportEditResult {
2356
2372
  /** Any conflict rejects the entire client batch. A server must also transact atomically. */
2357
2373
  conflicts?: readonly ReportEditConflict[];
2358
2374
  }
2375
+ declare interface ReportExportDecision {
2376
+ mode: "local" | "worker";
2377
+ reason: ReportExportDecisionReason;
2378
+ /** Lower bounds: traversal stops as soon as isolation is warranted. No font or image hashing. */
2379
+ estimate: {
2380
+ pages: number;
2381
+ cells: number;
2382
+ bytes: number;
2383
+ };
2384
+ hardCancellation: boolean;
2385
+ }
2386
+ declare type ReportExportDecisionReason = "small-task" | "threshold" | "scan-limit" | "explicit-local" | "explicit-worker" | "worker-unavailable" | "worker-start-failed" | "nonserializable-options";
2387
+ declare interface ReportExportExecutionOptions {
2388
+ mode?: "auto" | "worker" | "local";
2389
+ /** A fresh bundler-managed module Worker for every call; never a shared worker. */
2390
+ workerFactory?: () => BrowserReportWorker;
2391
+ thresholds?: ReportExportThresholds;
2392
+ /** Auto only. Startup unavailability may use local; encoding failures never retry. */
2393
+ fallback?: "local" | "error";
2394
+ timeoutMs?: number;
2395
+ budget?: ReportRuntimeBudget;
2396
+ onDecision?: (decision: ReportExportDecision) => void;
2397
+ }
2359
2398
  /** 输出能力仍由宿主授权;工具偏好只决定当前预览实例的可见与启用状态。 */
2360
2399
  declare type ReportExportFormat = "html" | "pdf" | "xlsx" | "png" | "word";
2400
+ declare interface ReportExportThresholds {
2401
+ cells?: number;
2402
+ pages?: number;
2403
+ bytes?: number;
2404
+ }
2361
2405
  declare type ReportExpression = {
2362
2406
  field: string;
2363
2407
  } | {
@@ -2624,6 +2668,15 @@ declare interface ReportPrintOptions {
2624
2668
  /** Physical translation only; no scaling or mutation of the report data/plan. */
2625
2669
  calibration?: ReportPrintCalibration;
2626
2670
  }
2671
+ declare interface ReportRuntimeBudget {
2672
+ maxRows?: number;
2673
+ maxPages?: number;
2674
+ maxCells?: number;
2675
+ maxOutputBytes?: number;
2676
+ /** Bound the plain JSON snapshot accepted by exportPrepared (default 64 MB). */
2677
+ maxPreparedBytes?: number;
2678
+ maxDurationMs?: number;
2679
+ }
2627
2680
  declare interface ReportTemplate {
2628
2681
  schemaVersion?: string;
2629
2682
  /** 参数定义(可选;宿主也可经 ReportPreview 的 paramDefs prop 提供,prop 优先) */
package/dist/designer.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import "vue";
2
- import { E as S, c as T, P as s, d as R, R as t, D as A, e as _, f as r, g as M, h as l, i as P, a as i, b as p, j as m, T as o, k as G, l as L, m as n, n as D } from "./designer-2bDlcNXQ.js";
2
+ import { E as S, c as T, P as s, d as R, R as t, D as A, e as _, f as r, g as M, h as l, i as P, a as i, b as p, j as m, T as o, k as G, l as L, m as n, n as D } from "./designer-BfQSahxq.js";
3
3
  export {
4
4
  S as EXCEL_BINDING_MESSAGES,
5
5
  T as ExcelBindingWizard,
@@ -0,0 +1 @@
1
+ "use strict";const i=require("./progress-B0ctFpKf.cjs");function u(s,t){i.assertOutputActive(t.signal),i.observeOutput(()=>t.onDiagnostic?.(s)),i.assertOutputActive(t.signal)}exports.notifyOutputDiagnostic=u;
@@ -0,0 +1,7 @@
1
+ import { b as a, a as s } from "./progress-Hc2vxoCs.js";
2
+ function u(i, t) {
3
+ a(t.signal), s(() => t.onDiagnostic?.(i)), a(t.signal);
4
+ }
5
+ export {
6
+ u as n
7
+ };
@@ -0,0 +1 @@
1
+ "use strict";const g=require("./json-snapshot-DknkjvxP.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 s=0,a=t-1,h=0;for(;s<=a;){const p=s+a>>>1;o[p]<=i?(h=p,s=p+1):a=p-1}return h}function l(i,s,a=1){if(t===0)return{start:0,end:-1,padTopPx:0,padBottomPx:0};const h=Math.floor(m(a)),p=m(s),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 c 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 c("missing-value")}function M(e,r){return Object.getOwnPropertyDescriptor(e,r)?.value}function R(e){if(!Array.isArray(e)||e.length>64)throw new c("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 c("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 c("config");if(n.roles!==void 0&&(!Array.isArray(n.roles)||n.roles.length>16||n.roles.some(o=>!d(o))))throw new c("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 c("config");for(const[r,t]of Object.entries(e)){if(!d(r)||["__proto__","constructor","prototype"].includes(r)||!t||typeof t!="object")throw new c("config");if("value"in t)try{j(t.value)}catch{throw new c("config")}else if(!["value","rowKey","query","field"].includes(t.from)||(t.from==="query"||t.from==="field")&&!d(t.field))throw new c("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 c("target");const u=Object.fromEntries(Object.entries(t.params??{}).map(([i,s])=>[i,j(q(s,e,o,n))])),f=Object.entries(n);if(f.length>128||f.some(([i,s])=>!d(i)||typeof s!="string"||s.length>4096))throw new c("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 s={pageIndex:o,componentIndex:f,rowIndex:i.ri,columnIndex:i.ci},a=t(s);if(a?.source&&g.reportCellEditKey(a)===n)return s}}return null}exports.ReportDrillError=c;exports.createPageWindowIndex=C;exports.createReportDrillRequest=P;exports.matchReportDrillActions=K;exports.resolveReportDrillReturn=z;exports.validateReportDrillActions=R;
@@ -1,9 +1,9 @@
1
- import { g as w, r as j, e as K } from "./batch-CGyt-b2W.js";
1
+ import { q as w, B as j, k as K } from "./json-snapshot-D6ioHth9.js";
2
2
  import { r as D } from "./grid-geometry-BNptEcMm.js";
3
3
  function m(e) {
4
4
  return Number.isFinite(e) ? Math.max(0, e) : 0;
5
5
  }
6
- function _(e, t = 0) {
6
+ function B(e, t = 0) {
7
7
  const r = e.length, n = m(t), o = new Array(r + 1);
8
8
  o[0] = 0;
9
9
  for (let s = 0; s < r; s++)
@@ -65,10 +65,10 @@ function R(e) {
65
65
  const n = r.target;
66
66
  if (n.datasetId !== void 0 && !f(n.datasetId) || n.reportScope !== void 0 && !f(n.reportScope)) throw new c("config");
67
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);
68
+ q(r.params);
69
69
  }
70
70
  }
71
- function z(e) {
71
+ function q(e) {
72
72
  if (e !== void 0) {
73
73
  if (!e || typeof e != "object" || Array.isArray(e) || Object.keys(e).length > 32) throw new c("config");
74
74
  for (const [t, r] of Object.entries(e)) {
@@ -87,12 +87,12 @@ function A(e, t, r) {
87
87
  const { target: n } = r, o = t.source?.datasetId ?? t.component.table?.source?.datasetId;
88
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
89
  }
90
- function k(e, t, r) {
90
+ function C(e, t, r) {
91
91
  R(r);
92
92
  const n = w(e, t);
93
93
  return n ? r.filter((o) => A(e, n, o)) : [];
94
94
  }
95
- function P(e, t, r, n) {
95
+ function z(e, t, r, n) {
96
96
  if ("value" in e) return e.value;
97
97
  switch (e.from) {
98
98
  case "value":
@@ -107,11 +107,11 @@ function P(e, t, r, n) {
107
107
  }
108
108
  }
109
109
  }
110
- function B(e, t, r, n = {}) {
110
+ function _(e, t, r, n = {}) {
111
111
  R([r]);
112
112
  const o = w(e, t);
113
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);
114
+ const u = Object.fromEntries(Object.entries(r.params ?? {}).map(([s, i]) => [s, O(z(i, e, o, n))])), l = Object.entries(n);
115
115
  if (l.length > 128 || l.some(([s, i]) => !f(s) || typeof i != "string" || i.length > 4096)) throw new c("config");
116
116
  const a = e.pages[t.pageIndex]?.meta?.reportScope;
117
117
  return Object.freeze({ actionId: r.id, params: Object.freeze(u), returnState: Object.freeze({
@@ -137,9 +137,9 @@ function N(e, t) {
137
137
  }
138
138
  export {
139
139
  c as R,
140
- B as a,
141
- _ as c,
142
- k as m,
140
+ _ as a,
141
+ B as c,
142
+ C as m,
143
143
  N as r,
144
144
  R as v
145
145
  };
@@ -0,0 +1,21 @@
1
+ import { c as n } from "./runtime-BjKBI530.js";
2
+ import { i, a as p, r as d, R as a, s as R } from "./protocol-kt4Iy6-3.js";
3
+ async function u(r, e) {
4
+ try {
5
+ if (r.operation !== "exportPrepared") throw new TypeError("内置编码 Worker 仅接受 exportPrepared");
6
+ return await d(n({ reports: {}, budget: r.budget }), r, e);
7
+ } catch (t) {
8
+ return { protocol: a, id: r.id, error: R(t) };
9
+ }
10
+ }
11
+ function m(r = globalThis) {
12
+ const e = (t) => {
13
+ if (!i(t.data)) return;
14
+ const s = t.data;
15
+ u(s, (o) => r.postMessage({ protocol: a, id: s.id, type: "event", event: o })).then((o) => r.postMessage(o, p(o)));
16
+ };
17
+ return r.addEventListener("message", e), () => r.removeEventListener("message", e);
18
+ }
19
+ export {
20
+ m as s
21
+ };
@@ -0,0 +1 @@
1
+ "use strict";const s=require("./runtime-CBFEPKEs.cjs"),e=require("./protocol-BzwMP4Vw.cjs");async function a(r,t){try{if(r.operation!=="exportPrepared")throw new TypeError("内置编码 Worker 仅接受 exportPrepared");return await e.runReportWorkerRequest(s.createReportRuntime({reports:{},budget:r.budget}),r,t)}catch(o){return{protocol:e.REPORT_WORKER_PROTOCOL,id:r.id,error:e.serializeError(o)}}}function R(r=globalThis){const t=o=>{if(!e.isReportWorkerRequest(o.data))return;const i=o.data;a(i,n=>r.postMessage({protocol:e.REPORT_WORKER_PROTOCOL,id:i.id,type:"event",event:n})).then(n=>r.postMessage(n,e.reportWorkerTransferList(n)))};return r.addEventListener("message",t),()=>r.removeEventListener("message",t)}exports.serveReportEncodingWorker=R;
@@ -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-BwNyeGpt.js").then((i) => i.f), o = r.create(t);
142
+ const { default: r } = await import("./pdf-DJ5S6ukC.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
  })();
@@ -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-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;
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-ByVCb1i6.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;
package/dist/index.cjs CHANGED
@@ -1,9 +1,8 @@
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
- `):t.lines?.length?t.lines.join(`
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===`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("./style-C22Pbv3T.cjs"),G=require("./record-bindings-DUX1VMlR.cjs"),q=require("./component-tree-DkGLEfZC.cjs"),y=require("./template-registry-C62vpv4a.cjs"),me=require("./dataset-BkRmwgeJ.cjs"),O=require("./textwrap-BI-yJ6Wt.cjs"),f=require("./json-snapshot-DknkjvxP.cjs"),he=require("./grid-geometry-CZ_cYB6O.cjs"),ge=require("./rich-text-layout-ALlMoYOG.cjs"),W=require("./capabilities-DNLyZdNw.cjs"),Qe=require("./progress-B0ctFpKf.cjs"),Ie=require("./diagnostic-notification-B9K9We3h.cjs"),J=require("./assets-e4YSke8n.cjs"),K=require("./drill-CsdjgkRM.cjs"),z=require("./param-validation-C3HlcLLO.cjs"),Z=require("./template-catalog-C2NLdrwB.cjs"),ue=require("./template-outline-BwRV_eRo.cjs"),oe=require("./template-fragments-BVsbxs4a.cjs"),pe=require("./tree-BX380Rr7.cjs"),et={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 C(e,t){return t?.classNames?.[e]??et[e]}class tt{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 E(e,t="unset"){return new tt().add("all",t).add("display",e).add("box-sizing","border-box")}function De(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 nt(e,t,n){const r=t.style??{};De(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 rt(e,t,n,r,i,a){const l=e.cell,o=a.createElement("td");o.className=C("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=E("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");De(c,s,r),c.applyTo(o);const d=a.createElement("div");d.className="mr-cell-content",E("flex").add("position","absolute").mm("left",n+(l.indentMm??0),r).mm("right",n,r).mm("top",n,r).mm("bottom",n,r).add("flex-direction","column").add("justify-content",s.verticalAlign==="top"?"flex-start":s.verticalAlign==="bottom"?"flex-end":"center").add("overflow-wrap","anywhere").add("overflow","hidden").applyTo(d),l.richParagraphs?.length?d.appendChild(Fe({...t,kind:"text",richParagraphs:l.richParagraphs},r,i,a)):l.text!=null&&d.append(l.text);for(const h of l.children??[])d.appendChild(fe(h,r,i,a));return o.appendChild(d),o}function it(e,t,n,r){return ge.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 E("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 ot(e,t,n,r,i){const a=i.createElement("table");a.className=C("grid",r),a.setAttribute("role","table"),E("block").add("position","relative").add("width","100%").add("height","100%").applyTo(a);const l=he.resolveGridLayout(e,t.widthMm,t.heightMm),o=i.createElement("tbody");E("contents").applyTo(o),a.appendChild(o);const s=e.cells.map(()=>{const d=i.createElement("tr");return d.className=C("row",r),d.setAttribute("role","row"),E("contents").applyTo(d),o.appendChild(d),d});for(const d of l.cells)s[d.ri].appendChild(rt(d,t,e.paddingMm??.5,n,r,i));const c=i.createElement("div");return E("block").add("position","relative").add("width","100%").add("height","100%").applyTo(c),c.append(a,...it(l,t,n,i)),c}function at(e,t,n,r){const i=r.createElement("div");i.className=C("paragraph",n),E("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=C("segment",n),l.textContent=a.kind==="field"?a.field??"":a.text??"";const o=E("inline");if(a.style){const s=a.style;o.add("color",s.color).add("background-color",s.backgroundColor).add("font-family",s.fontFamily).add("line-height",s.lineHeight).add("letter-spacing",s.letterSpacing==null?void 0:`${s.letterSpacing*t/72}px`).add("font-weight",s.bold!=null?s.bold?"700":"400":void 0).add("font-style",s.italic!=null?s.italic?"italic":"normal":void 0).add("text-decoration",s.underline!=null?s.underline?"underline":"none":void 0),(s.fontSize!=null||s.fontSizePx!=null)&&o.add("font-size",`${g.round(g.resolveFontSize(s,t).fontSizePx,2)}px`)}o.applyTo(l),i.appendChild(l)}return i}function Fe(e,t,n,r){if(q.isRichText(e)){const i=r.createElement("div");i.className=C("rich",n),E("block").applyTo(i);for(const a of e.richParagraphs)i.appendChild(at(a,t,n,r));return i}if(Array.isArray(e.lines)&&e.lines.length>0){const i=r.createElement("div");i.className=C("lines",n),E("block").applyTo(i);for(const a of e.lines){const l=r.createElement("div");l.className=C("line",n),l.textContent=a,E("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=C("text",n);const a=e.style||{};return E("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(Fe(e,t,n,r)),i}function lt(e,t,n){const r=n.createElement("img");return r.className=C("image",t),r.src=e.imageData,E("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=C("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=E("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 fe(e,t,n,r){const i=r.createElement("div");i.className=`${C("comp",n)} mr-kind-${e.kind}`;const a=E("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(nt(a,e,t),a.applyTo(i),q.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(ot(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=C("unknown",n),E("block").applyTo(l),l.textContent=e.fallbackText??`[${e.kind}]`,l.dataset.mrUnsupported=e.kind,l.setAttribute("role","note"),i.appendChild(l),i}function Ne(e,t,n,r){const i=r.createElement("div");return i.className=C("page",n),E("block","initial").add("position","relative").add("font-family",g.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",g.DEFAULT_TEXT_COLOR).add("overflow","hidden").add("box-sizing","border-box").applyTo(i),e.components.forEach((a,l)=>{const o=fe(a,t,n,r);o.dataset.mrComponentIndex=String(l),i.appendChild(o)}),i}function dt(e,t,n={}){const r=n.dpi??96;W.reportOutputDiagnostics(e,"dom",n);const i=t.createElement("div");return i.className=C("root",n),E("block").applyTo(i),i.dataset.schemaVersion=e.schemaVersion,e.pages.forEach(a=>{i.appendChild(Ne(a,r,n,t))}),i}function we(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
+ `),d=c.length*s;let h=r;o==="middle"?h=r+(a-d)/2:o==="bottom"&&(h=r+a-d),c.forEach((m,u)=>{const p=h+u*s+t.fontSizePx*.8;mt(e,m,t,n,p,i),t.underline&&m&&ht(e,m,t,n,p,i)}),e.textAlign="left"}function mt(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 h=n.align==="center"?r+a/2:n.align==="right"?r+a:r;e.fillText(t,h,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 d="";l.forEach((h,m)=>{e.fillText(h,c+e.measureText(d).width+m*o,i),d+=h})}function ht(e,t,n,r,i,a){const l=e.measureText(t).width+Math.max(0,Array.from(t).length-1)*(n.letterSpacingPx??0),o=n.align==="center"?r+(a-l)/2:n.align==="right"?r+a-l:r;e.strokeStyle=n.color,e.lineWidth=Math.max(.5,n.fontSizePx/20),e.beginPath(),e.moveTo(o,i+1),e.lineTo(o+l,i+1),e.stroke()}function $e(e,t,n,r,i){const a=r/72,l=o=>{e.font=`${o.italic?"italic ":""}${o.bold?"bold ":""}${g.resolveFontSize(o,r).fontSizePx}px ${o.fontFamily??i}`,"letterSpacing"in e&&(e.letterSpacing="0px")};ge.drawRichText(t,{x:n.x/a,yTop:-n.y/a,width:n.width/a,height:n.height/a},{measure(o,s){return l(s),e.measureText(o).width/a+(s.letterSpacing??0)},draw(o,s,c,d,h){const m=g.resolveFontSize(s,r).fontSizePx,u=-d*a-m*.8;s.backgroundColor&&(e.fillStyle=s.backgroundColor,e.fillRect(c*a,u,h*a,m*g.resolveLineHeight(s))),we(e,{text:o,fontSizePx:m,bold:!!s.bold,italic:s.italic,underline:s.underline,color:g.resolveTextColor(s),align:"left",lineHeight:g.resolveLineHeight(s),letterSpacingPx:(s.letterSpacing??0)*a},c*a,u,h*a,m,s.fontFamily??i)}})}function D(e){if(e?.aborted)throw e.reason??new DOMException("The operation was aborted.","AbortError")}const gt=(e,t)=>(D(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 ut(e,t,n){return D(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)}function*ve(e){function*t(n,r,i,a){if(a.has(n))throw new TypeError("Cyclic grid children cannot be rendered.");q.isImageBackedComponent(n)&&(yield{component:n,componentIndex:r,componentPath:i});const l=new Set(a).add(n);for(const[o,s]of(n.grid?.cells??[]).entries())for(const[c,d]of s.entries())for(const[h,m]of(d?.children??[]).entries())yield*t(m,r,[...i,o,c,h],l)}for(const[n,r]of e.components.entries())yield*t(r,n,[],new Set)}async function pt(e,t,n){const r=new Map;for(const{component:i}of ve(e))!q.isImageBackedComponent(i)||r.has(i.imageData)||r.set(i.imageData,await ut(t,i.imageData,n));return D(n),r}function ft(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),d=o*c,h=s*c;e.drawImage(t,n+(i-d)/2,r+(a-h)/2,d,h)}function Oe(e){return K.createPageWindowIndex(e.pageHeightsPx,e.gapPx).window(e.viewportHeightPx,e.scrollTopPx,e.overscan)}const Me=96/25.4;function ae(e,t=96){const n=t/96*Me;return{widthPx:Math.max(1,Math.round(e.pageWidthMm*n)),heightPx:Math.max(1,Math.round(e.pageHeightMm*n))}}function _e(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=ae(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 He(e,t,n,r){const i=document.createElement("canvas"),{widthPx:a,heightPx:l}=ae(e,n),o=_e(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 wt(e,t=96){return g.resolveFontSize(e,t).fontSizePx}function vt(e,t,n,r,i,a,l){for(const o of ge.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 Mt(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 yt(e,t,n,r,i,a,l,o,s,c,d,h){const m=he.resolveGridLayout(t,a/o,l/o);for(const u of m.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))}vt(e,m,n,r,i,o,s);for(const u of m.cells)bt(e,u,n,r,i,o,s,c,d,h)}function bt(e,t,n,r,i,a,l,o,s,c){const d=n.grid?.paddingMm??.5,h=t.cell.text??"",m=g.mergeComponentStyles(n.style,t.cell.style),u=g.resolveFontSize(m,l),p=t.cell.indentMm??0,P=Math.max(0,t.widthMm-2*d-p),L=O.wrapText(h,P,{fontSizePt:u.fontSizePt,bold:m.bold,italic:m.italic,fontFamily:m.fontFamily??o,letterSpacingPt:m.letterSpacing},s).join(`
3
+ `),b={x:r+(t.xMm+d+p)*a,y:i+(t.yMm+d)*a,width:P*a,height:Math.max(0,t.heightMm-2*d)*a};e.save(),e.beginPath(),e.rect(b.x,b.y,b.width,b.height),e.clip(),t.cell.richParagraphs?.length?$e(e,{...n,richParagraphs:t.cell.richParagraphs,style:{verticalAlign:"middle",...m}},b,l,o):we(e,{text:L,fontSizePx:u.fontSizePx,bold:m.bold??!1,italic:m.italic,underline:m.underline,color:g.resolveTextColor(m,g.DEFAULT_TEXT_COLOR),align:m.align??"left",lineHeight:g.resolveLineHeight(m),letterSpacingPx:g.ptToPx(m.letterSpacing??0,l)},r+(t.xMm+d+p)*a,i+(t.yMm+d)*a,P*a,Math.max(0,t.heightMm-2*d)*a,m.fontFamily??o,m.verticalAlign??"middle");for(const S of t.cell.children??[])se(e,{...S,leftMm:S.leftMm+b.x/a,topMm:S.topMm+b.y/a},a,l,o,s,c);e.restore()}function Tt(e,t,n,r,i,a,l,o,s){const c=t.style??{},d=g.resolveFontSize(c,l);if(q.isRichText(t)){$e(e,t,{x:n,y:r,width:i,height:a},l,o);return}const h=t.lines?.length?t.lines.join(`
4
+ `):O.wrapText(t.text??"",t.widthMm,{fontSizePt:d.fontSizePt,bold:c.bold,italic:c.italic,fontFamily:c.fontFamily??o,letterSpacingPt:c.letterSpacing},s).join(`
5
+ `);we(e,{text:h,fontSizePx:d.fontSizePx,bold:c.bold??!1,italic:c.italic,underline:c.underline,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 se(e,t,n,r,i,a,l){const o=t.leftMm*n,s=t.topMm*n,c=t.widthMm*n,d=t.heightMm*n,h=t.style??{};if(q.isImageBackedComponent(t)){const m=l?.get(t.imageData);m?ft(e,m,o,s,c,d):xe(e,t,o,s,c,d);return}if(t.grid){yt(e,t.grid,t,o,s,c,d,n,r,i,a,l);return}switch(t.kind){case"text":{Tt(e,t,o,s,c,d,r,i,a);break}case"rect":{const m=g.resolveStroke(h),u=g.resolveBoxBorders(h);h.backgroundColor&&(e.fillStyle=h.backgroundColor,e.fillRect(o,s,c,d)),u.inner&&(e.strokeStyle=m.color,e.lineWidth=g.ptToPx(m.widthPt,r),Mt(e,u,o,s,c,d));break}case"line":{const m=g.resolveStroke({...h,borderColor:h.lineColor??h.borderColor});e.strokeStyle=m.color,e.lineWidth=g.ptToPx(m.widthPt,r),e.beginPath();const u=t.lineDirection==="up"?s+d:t.lineDirection==="down"?s:s+d/2,p=t.lineDirection==="up"?s:t.lineDirection==="down"?s+d:s+d/2;e.moveTo(o,u),e.lineTo(o+c,p),e.stroke();break}case"ellipse":{const m=g.resolveStroke(h);e.strokeStyle=m.color,e.lineWidth=g.ptToPx(m.widthPt,r),h.backgroundColor&&(e.fillStyle=h.backgroundColor,e.beginPath(),e.ellipse(o+c/2,s+d/2,c/2,d/2,0,0,Math.PI*2),e.fill()),e.beginPath(),e.ellipse(o+c/2,s+d/2,c/2,d/2,0,0,Math.PI*2),e.stroke();break}default:xe(e,t,o,s,c,d);break}}function xe(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 Et(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.");D(t.signal);const a=await J.resolvePlanAssets(e,{...t,format:"canvas"});e=a.plan;const l=[...a.diagnostics,...W.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 d=Math.max(0,t.start??0);d<=c;d++){D(t.signal);const h=await ze(e.pages[d],d,i,l);try{s.push(await St(h,o,r,t.signal))}finally{h.width=0,h.height=0}await Qe.outputCheckpoint(t,s.length,c-Math.max(0,t.start??0)+1)}return D(t.signal),{blobs:s,diagnostics:l}}function St(e,t,n,r){return D(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 Rt(e,t={}){if(D(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*Me,a=t.fontFamily??g.DEFAULT_FONT_FAMILY,l=t.measurer??O.heuristicMeasurer,o=Math.max(0,t.start??0),s=Math.min(e.pages.length-1,t.end??e.pages.length-1),c=[],d=W.reportOutputDiagnostics(e,"canvas",t),h=xt(e,o,s);for(const m of h)Ie.notifyOutputDiagnostic(m,t),d.push(m);if(t.fidelity==="strict"&&h.length)throw new W.OutputFidelityError(d);for(let m=o;m<=s;m++){D(t.signal);const u=e.pages[m],{canvas:p,ctx:P}=He(u,n,r,t.maxCanvasPixels);for(const L of u.components)se(P,L,i,r,a,l);c.push(p)}return{canvases:c,diagnostics:d}}function xt(e,t,n){return n<t?[]:e.pages.slice(t,n+1).flatMap((r,i)=>[...ve(r)].map(({component:a,componentIndex:l,componentPath:o})=>({code:"async-image-required",severity:"warning",format:"canvas",pageIndex:t+i,componentIndex:l,componentPath:o,kind:a.kind,nid:a.nid,message:"Use renderPlanToCanvasAsync or renderPlanToImages to decode and include images."})))}async function Ct(e,t={}){if(typeof document>"u")throw new Error("renderPlanToCanvasAsync 需要浏览器环境(Node 请使用 PDF 或 XLSX 输出)");D(t.signal);const n=await J.resolvePlanAssets(e,{...t,format:"canvas"});e=n.plan;const r=[...n.diagnostics,...W.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 ze(e.pages[l],l,t,r));return{canvases:i,diagnostics:r}}async function ze(e,t,n,r){const i=n.dpr??(typeof devicePixelRatio=="number"?devicePixelRatio:1),a=n.dpi??96,l=n.fontFamily??g.DEFAULT_FONT_FAMILY,o=await Be(e,t,n,r);D(n.signal);const{canvas:s,ctx:c}=He(e,i,a,n.maxCanvasPixels);for(const d of e.components)se(c,d,a/25.4,a,l,n.measurer??O.heuristicMeasurer,o);return s}async function Be(e,t,n,r){const i=n.imageLoader??gt;return pt(e,async(a,l)=>{try{return await i(a,l)}catch(o){if(l?.aborted)throw o;const s=[...ve(e)].find(({component:u})=>u.imageData===a),{component:c,componentIndex:d,componentPath:h}=s,m={code:"image-decode-failed",severity:"warning",format:"canvas",pageIndex:t,componentIndex:d,componentPath:h,kind:c.kind,nid:c.nid,message:"Image decoding failed; raster output was cancelled instead of omitting the image."};throw r.push(m),Ie.notifyOutputDiagnostic(m,n),o}},n.signal)}function Pt(e,t={}){const n=t.dpr??(typeof devicePixelRatio=="number"?devicePixelRatio:1),r=t.dpi??96,i=r/96*Me,a=t.fontFamily??g.DEFAULT_FONT_FAMILY,l=t.measurer??O.heuristicMeasurer,o=t.overscan??1,s=t.gapPx??18,c=t.pagesPerFrame??1,d=e.pages.map(w=>w.pageHeightMm*i),h=Math.max(1,...e.pages.map(w=>w.pageWidthMm*i)),m={start:0,end:-1};let u=null,p=null,P=null,L=null,b=[],S=0,I=[],j=0,_=new AbortController;const Te=[];function Ke(){const w=u;w.innerHTML="",p=document.createElement("div"),p.style.cssText=`width:${h}px;margin:0 auto;`,P=document.createElement("div"),L=document.createElement("div"),p.appendChild(P),b=[];const R=Math.min(e.pages.length,3+o*2);for(let B=0;B<R;B++){const T=document.createElement("div");T.style.cssText=`margin:0 auto ${s}px;box-shadow:0 2px 8px rgba(0,0,0,.35);background:#fff;`,p.appendChild(T),b.push(T)}p.appendChild(L),w.appendChild(p)}async function Xe(w,R){const B=j,T=await J.resolvePlanAssets(e,{...t,signal:_.signal,format:"canvas",start:R,end:R});Te.push(...T.diagnostics);const A=T.plan.pages[R],te=await Be(A,R,{...t,signal:_.signal},Te);if(B!==j||!u)return;const{widthPx:ce,heightPx:de}=ae(A,r);let H=w.firstElementChild;(!H||H.tagName!=="CANVAS")&&(H=document.createElement("canvas"),w.innerHTML="",w.appendChild(H));const Se=_e(A,n,r,t.maxCanvasPixels);H.width=Se.width,H.height=Se.height,H.style.width=`${ce}px`,H.style.height=`${de}px`;const V=H.getContext("2d");if(V){V.setTransform(1,0,0,1,0,0),V.scale(n,n),V.fillStyle="#ffffff",V.fillRect(0,0,ce,de);for(const Ze of A.components)se(V,Ze,i,r,a,l,te);H.dataset.canvasPage=String(R),w.style.height=`${de}px`,w.style.width=`${ce}px`}}function Je(w){j++,m.start=w.start,m.end=w.end,P.style.height=`${w.start*s+d.slice(0,w.start).reduce((T,A)=>T+A,0)}px`;const R=e.pages.length-1-w.end;L.style.height=`${R*s+d.slice(w.end+1).reduce((T,A)=>T+A,0)}px`;const B=w.end-w.start+1;b.forEach((T,A)=>{if(A<B){T.style.display="";const te=w.start+A;T.style.height=`${d[te]??0}px`}else T.style.display="none"}),I=[];for(let T=w.start;T<=w.end;T++){const A=b[T-w.start];if(!A)continue;A.firstElementChild?.dataset?.canvasPage!==String(T)&&I.push(T)}le()}function le(){S||I.length===0||(S=requestAnimationFrame(()=>{S=0;let w=Math.max(1,c);for(;I.length>0&&w-- >0;){const R=I.shift(),B=b[R-m.start];B&&Xe(B,R).catch(()=>{})}I.length>0&&le()}))}function Q(){S||(S=requestAnimationFrame(()=>{S=0;const w=u,R=Oe({pageHeightsPx:d,viewportHeightPx:w.clientHeight,scrollTopPx:w.scrollTop,overscan:o,gapPx:s});R.start!==m.start||R.end!==m.end?Je(R):le()}))}let ee=null;return{attach(w){if(typeof document>"u")throw new Error("createCanvasPager 需要浏览器环境(SSR 请在客户端钩子中调用 attach)");D(t.signal),_=new AbortController,t.signal?.addEventListener("abort",Ee,{once:!0}),W.reportOutputDiagnostics(e,"canvas",t),u=w,Ke(),w.addEventListener("scroll",Q,{passive:!0}),typeof ResizeObserver<"u"&&(ee=new ResizeObserver(()=>Q()),ee.observe(w)),Q()},destroy(){j++,_.abort(),t.signal?.removeEventListener("abort",Ee),S&&cancelAnimationFrame(S),S=0,ee?.disconnect(),ee=null,u?.removeEventListener("scroll",Q),I=[],p?.remove(),u=null},window(){return{...m}}};function Ee(){_.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 We{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 At(){return new We}function Lt(e,t={}){return me.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 F(e,t,n=!1){if(!Number.isFinite(e)||(n?e<0:e<=0))throw new Error(`${t} 必须是有限${n?"非负":"正"}数`)}function re(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 kt(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 F(n,"columnWidthMm"),{layout:t,columnWidthMm:n}}function It(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 F(r,"纸张 widthMm"),F(i,"纸张 heightMm"),{widthMm:r,heightMm:i}}function Dt(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))F(i,r,!0);return n}function Ft(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;F(r,"titleHeightMm"),F(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 Nt(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 n of["fontSizePt","rowHeightMm","paddingMm"]){const r=t[n];r!==void 0&&F(r,`listOptions.${n}`,n==="paddingMm")}return t}function $t(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`);re(i.align,`columns[${r}].align`,!0),re(i.headerAlign,`columns[${r}].headerAlign`,!1),i.flex!==void 0&&F(i.flex,`columns[${r}].flex`),i.widthMm!==void 0?(F(i.widthMm,`columns[${r}].widthMm`),t+=i.widthMm):n=Math.max(n,i.flex??1)}return{fixedWidthMm:t,maxFlex:n}}function Ot(e,t,n,r){const{fixedWidthMm:i,maxFlex:a}=$t(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,d)=>c+(d.widthMm===void 0?(d.flex??1)/a:0),0):0;return{columns:e.columns.map(({widthMm:c,flex:d,...h},m)=>{const u=c??(t==="wide"?n*(d??1):l*((d??1)/a)/o);return F(u,`columns[${m}] 分配后的 widthMm`),{...h,widthMm:u}}),fixedWidthMm:i,maxFlex:a}}function _t(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}=kt(e),r=It(e);let i=r.widthMm;const a=r.heightMm,l=Dt(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:d,hasTitle:h,titleSpaceMm:m}=Ft(e,s),u=Nt(e),{columns:p,fixedWidthMm:P,maxFlex:L}=Ot(e,t,n,o);t==="wide"&&(o=p.reduce((S,I)=>S+I.widthMm,0),F(o,"宽表总列宽"),i=o+l.marginLeftMm+l.marginRightMm,F(i,"宽表总宽度"));const b={widthMm:i,heightMm:a,...l,components:[],...t==="wide"?{layout:t}:{}};return h&&b.components.push({kind:"text",text:e.title,leftMm:l.marginLeftMm,topMm:l.marginTopMm,widthMm:o,heightMm:d,style:{fontSize:16,bold:!0,align:"center",verticalAlign:"middle",...e.titleStyle}}),b.components.push({align:"auto",headerAlign:"center",...u,kind:"list",...t==="wide"?{layout:t}:{},...h?{title:e.title}:{},dataset:c,columns:p,leftMm:l.marginLeftMm,topMm:l.marginTopMm+m,widthMm:t==="wide"||L>0?o:P}),e.params===void 0?{pages:[b]}:{params:e.params,pages:[b]}}function Ht(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 zt(e){if(!e||typeof e!="object"||!e.repeat)throw new f.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 f.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=zt(t);if(n!==void 0==(r!==void 0)||r!==void 0&&typeof r!="function")throw new f.ReportSourceError("config","标签报表应且只能配置 rows 或 load 其中一种数据来源");const c={template:t,params:a,pagination:l,dataValidation:o,...i===void 0?{}:{dataSchema:{[s]:i}}};return r?f.defineReport({...c,load:r,mapData:d=>Ce(d,s)}):{...c,datasets:Ce(n,s)}}function Wt(e){return e}class N extends Error{constructor(t,n){super(n),this.code=t,this.name="ReportTemplateStoreError"}}function $(e){return JSON.parse(JSON.stringify(e))}function x(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 N("history","修订号无效或已达上限");return String(t+1)}function qt(e,t={}){const n=async(l,o)=>{x(o);const s=await e.read(l,o);return x(o),s?$(s):void 0},r=async(l,o)=>{const s=await n(l,o.signal);if((s?.revision??null)!==o.expectedRevision)throw new N("conflict","模板已变化,请重新读取后提交");return s},i=async(l,o,s)=>{if(x(o.signal),!await e.compareAndSwap(l.id,o.expectedRevision,$(l),{signal:o.signal,...s?{publication:$(s)}:{}}))throw new N("conflict","模板已被其他请求更新");return $(l)},a=async(l,o,s,c)=>{if(t.beforePublish){x(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 N("review",u?.issues?.find(p=>p.severity==="error")?.message??"模板发布检查未通过");x(s.signal)}const d=Pe(l),h=y.parseReportTemplate({...o,revision:d}),m={revision:d,document:h,publishedAt:(t.now?.()??new Date).toISOString()};return c!==void 0&&(m.restoredFrom=c),i({id:l.id,revision:d,publishedRevision:d,published:h},s,m)};return{list:async l=>{x(l);const o=await e.list(l);return x(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)=>{x(o);const s=await e.history(l,o);return x(o),$(s)},saveDraft:async(l,o)=>{o={...o},x(o.signal);const s=y.parseReportTemplate(t.migrate?await t.migrate(l):l),c=await r(s.id,o),d=Pe(c);return i({id:s.id,revision:d,draft:{...s,revision:d},...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 N("missing","模板不存在");if(!s.draft)throw new N("draft","没有可发布的草稿");return a(s,s.draft,o)},rollback:async(l,o,s)=>{s={...s};const c=await r(l,s);if(!c)throw new N("missing","模板不存在");x(s.signal);const d=await e.getVersion(l,o,s.signal);if(!d)throw new N("history","历史修订不存在");return a(c,d.document,s,o)}}}function Ut(){const e=new Map,t=new Map;return{read:async(n,r)=>{x(r);const i=e.get(n);return i?$(i):void 0},list:async n=>(x(n),Array.from(e.values(),({id:r,revision:i,publishedRevision:a})=>({id:r,revision:i,...a?{publishedRevision:a}:{}}))),history:async(n,r)=>(x(r),Array.from(t.get(n)?.values()??[],i=>$(i))),getVersion:async(n,r,i)=>{x(i);const a=t.get(n)?.get(r);return a?$(a):void 0},compareAndSwap:async(n,r,i,a)=>{if(x(a.signal),(e.get(n)?.revision??null)!==r)return!1;if(i.id!==n)throw new N("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 N("history","发布修订不可覆盖,且必须与状态修订和模板 ID 一致");s.set(o.revision,$(o)),t.set(n,s)}return e.set(n,l),!0}}}function jt(e){return e.map(t=>t.map(n=>/[\t\r\n"]/.test(n)?`"${n.replace(/"/g,'""')}"`:n).join(" ")).join(`\r
6
+ `)}function Gt(e,t){const n=e[e.length-1];e.length>1&&n?.length===1&&n[0]===""&&/[\r\n]$/.test(t)&&e.pop()}function Vt(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
7
  `){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;
8
+ `&&s++;continue}if(a)throw new Error("Invalid quoted clipboard value");r+=c}if(i)throw new Error("Unclosed clipboard quote");return o(),Gt(n,e),n}class Ue 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 v(e,t,n){throw new Ue(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 Yt(e){const[t="",n="0"]=String(e).toLowerCase().split("e");return Math.max(0,(t.split(".")[1]?.length??0)-Number(n))}function Kt(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 Xt(e,t){je(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 Jt(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&&!je(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 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))&&v(t,"definition"),i.label!==void 0&&typeof i.label!="string"&&v(t,"definition"),r.has(i.value)&&v(t,"definition"),r.add(i.value)}function en(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 Ge(e,t){(!t||typeof t!="object"||Array.isArray(t)||!["text","number","boolean","enum","date"].includes(t.type))&&v(t??{type:"text"},"definition"),en(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"&&Jt(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 tn(e,t,n){if(!e.editable)throw new f.ReportCellEditError("readonly");n&&Ge(e,n);const r=f.parseReportCellInput(e,t);return n?(n.required&&typeof r=="string"&&!r.trim()&&v(n,"required"),r===null||r===""?(n.required&&v(n,"required"),r):(n.type==="number"&&Kt(n,r),n.type==="date"&&Xt(n,r),n.type==="text"&&n.maxLength!==void 0&&[...String(r)].length>n.maxLength&&v(n,"length",n.maxLength),n.type==="enum"&&!n.options.some(i=>Object.is(i.value,r))&&v(n,"choice"),r)):r}class M extends Error{constructor(t){super(`Report calculation: ${t}`),this.code=t,this.name="ReportCalculationError"}}function Y(e){if(!e?.aborted)return;const t=new Error("Calculation cancelled");throw t.name="AbortError",t}async function ie(e,t=1){const n=Math.floor(e.scanned/2048);if(e.scanned+=t,e.scanned>e.maxScanned)throw new M("limit");Y(e.signal),Math.floor(e.scanned/2048)>n&&(await e.yieldToHost(),Y(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 nn(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 rn(e){if(!e)return!1;const t=e.replace(/"[^"]*"|\\.|\[(?![hms]+\])[^\]]*\]/gi,"");return/[ymdhs]/i.test(t)}function on(e){if(e.valueType==="text"||e.valueType==="boolean"||rn(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 an(e,t,n){if(e.seen.has(n))return;e.seen.add(n),e.selected++;const r=t?on(t):null;r===null?e.excluded++:e.values.push(r)}function sn(e,t,n,r){return r.origin?e.table?.id===r.origin.id:`${t}:${n}`===r.grid}function ln(e,t,n){return n.origin?n.origin.columnKeys.indexOf(e.table.columnKeys[t]??""):t}function cn(e,t,n,r){const i=r.origin?be(e)+t:t,a=ln(e,n,r);return i<r.rowStart||i>r.rowEnd||a<r.columnStart||a>r.columnEnd?null:`${r.grid}:${i}:${a}`}function dn(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 mn(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(),Y(r.signal));let c=0;for(const d of a.cells[s]){for(await ie(r);c<l&&(o.get(c)??0)>s;)c++;if(c>=l)break;const h=Math.max(1,Math.min(d?.colSpan??1,l-c)),m=Math.min(a.cells.length,s+Math.max(1,d?.rowSpan??1));h>1&&await ie(r,h-1);for(let p=c;p<c+h;p++)o.set(p,m);const u=cn(e,s,c,n);u&&an(i,d,u),c+=h}}}async function hn(e,t,n){const r={values:[],seen:new Set,excluded:0,selected:0};for(let i=0;i<e.pages.length;i++){await ie(n);const a=e.pages[i];for(let l=0;l<a.components.length;l++){await ie(n);const o=a.components[l];if(!o.grid||!sn(o,i,l,t)||o.table&&o.table.role!=="body")continue;const s=dn(o,t);s&&await mn(o,s,t,n,r)}}return r}function X(e){if(!Number.isFinite(e))throw new M("overflow");return e}function gn(e){let t=0,n=0;for(const r of e){const i=r-n,a=X(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,d=o;for(let h=l;h<s;h++)r[h]=d>=s||c<o&&n[c]<=n[d]?n[c++]:n[d++],h%2048===0&&(await t.yieldToHost(),Y(t.signal))}[n,r]=[r,n]}const i=Math.floor(n.length/2);return n.length%2?n[i]:X(n[i-1]/2+n[i]/2)}function un(e){const t=gn(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 X(t[s]);if(s&&/^(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?$/.test(s))return X(Number(s));throw new M("expression")}function a(o,s){let c=i(s);for(;r<n.length;){const d=n[r],h=d==="+"||d==="-"?1:d==="*"||d==="/"?2:0;if(!h||h<o)break;r++;const m=a(h+1,s+1);if(d==="/"&&m===0)throw new M("division");c=X(d==="+"?c+m:d==="-"?c-m:d==="*"?c*m:c/m)}return c}const l=a(1,0);if(r!==n.length)throw new M("expression");return l}function pn(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 fn(e,t,n={}){const r=pn(n),i={scanned:0,maxScanned:r.maxScanned,signal:n.signal,yieldToHost:n.yieldToHost??(()=>new Promise(s=>setTimeout(s,0)))};Y(i.signal);const a=await hn(e,nn(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=un(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(Y(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 k extends Error{constructor(t,n){super(t),this.path=n,this.code="label-sheet",this.name="LabelSheetError"}}function ne(e){if(e?.aborted){const t=new Error("标签拼版已取消");throw t.name="AbortError",t}}function U(e,t,n=!1){if(!Number.isFinite(e)||e<=0||n&&!Number.isSafeInteger(e))throw new k("应为正有限数字,数量应为安全整数",t);return e}function ke(e,t){if(!Number.isFinite(e)||e<0)throw new k("应为非负有限数字",t);return e}function wn(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"])ke(t?.[r],`$.marginMm.${r}`);for(const r of["horizontal","vertical"])ke(n?.[r],`$.gapMm.${r}`);return{margin:t,gap:n}}function vn(e){const t=e.paper===void 0||e.paper==="a4"?{widthMm:210,heightMm:297}:e.paper;U(t.widthMm,"$.paper.widthMm"),U(t.heightMm,"$.paper.heightMm");const n=U(e.columns,"$.columns",!0),r=U(e.rows,"$.rows",!0),i=n*r;if(i>1e3)throw new k("每张纸不能超过 1000 个位置","$.columns");const{margin:a,gap:l}=wn(e),o=e.startSlot??0,s=e.offsetMm??{x:0,y:0};if(!Number.isSafeInteger(o)||o<0||o>=i)throw new k("起始位置应在首张纸的有效位置内","$.startSlot");if(!Number.isFinite(s.x)||!Number.isFinite(s.y))throw new k("校准偏移应为有限毫米值","$.offsetMm");return{paper:t,columns:n,rows:r,capacity:i,margin:a,gap:l,startSlot:o,offset:s}}function Ye(e){return 1+(e.grid?.cells.reduce((t,n)=>t+n.length+1+n.reduce((r,i)=>r+(i?.children?.reduce((a,l)=>a+Ye(l),0)??0),0),0)??0)}function Mn(e,t,n){if(!y.validateRenderPlan(e).ok)throw new k("标签计划无效","$.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 k("标签、间距、边距及校准偏移超过纸张尺寸;不会自动缩小标签","$.paper");let d=0;for(const[h,m]of e.pages.entries()){if(ne(t.signal),m.layout==="wide"||m.pageWidthMm!==r.pageWidthMm||m.pageHeightMm!==r.pageHeightMm)throw new k("拼版需要尺寸相同的固定标签页面",`$.pages.${h}`);if(d+=m.components.reduce((u,p)=>u+Ye(p),0),d>U(t.maxComponents??25e4,"$.maxComponents",!0))throw new k("拼版组件总量超过预算","$.maxComponents");for(const u of m.components)if(u.leftMm<0||u.topMm<0||u.leftMm+u.widthMm>m.pageWidthMm+1e-6||u.topMm+u.heightMm>m.pageHeightMm+1e-6)throw new k("标签内容超出标签边界",`$.pages.${h}.components`)}}function yn(e,t){ne(t.signal);const n=vn(t),{paper:r,columns:i,capacity:a,margin:l,gap:o,startSlot:s,offset:c}=n,d=e.pages.length?Math.ceil((s+e.pages.length)/a):0;if(d>U(t.maxSheets??1e4,"$.maxSheets",!0))throw new k("拼版纸张数量超过预算","$.maxSheets");U(t.maxComponents??25e4,"$.maxComponents",!0),Mn(e,t,n);const h=f.snapshotReportJson(e,{maxBytes:U(t.maxSnapshotBytes??64e6,"$.maxSnapshotBytes",!0),check:()=>ne(t.signal),error:(u,p)=>new k(p,"$.maxSnapshotBytes")}),m=Array.from({length:d},()=>({pageWidthMm:r.widthMm,pageHeightMm:r.heightMm,components:[],meta:{labelSheet:{columns:i,rows:n.rows,slots:[]}}}));for(const[u,p]of h.pages.entries()){ne(t.signal);const P=s+u,L=P%a,b=m[Math.floor(P/a)],S=l.left+c.x+L%i*(p.pageWidthMm+o.horizontal),I=l.top+c.y+Math.floor(L/i)*(p.pageHeightMm+o.vertical),j={sourcePageIndex:u,slotIndex:L,xMm:S,yMm:I,widthMm:p.pageWidthMm,heightMm:p.pageHeightMm,...p.meta?{sourceMeta:p.meta}:{}};b.meta.labelSheet.slots.push(j),b.components.push(...p.components.map(_=>({..._,leftMm:_.leftMm+S,topMm:_.topMm+I,meta:{..._.meta,labelSheet:j}})))}return{...h,pages:m}}exports.CSS_DPI=g.CSS_DPI;exports.DEFAULT_BORDER_PT=g.DEFAULT_BORDER_PT;exports.DEFAULT_FONT_FAMILY=g.DEFAULT_FONT_FAMILY;exports.DEFAULT_FONT_PT=g.DEFAULT_FONT_PT;exports.DEFAULT_STROKE_COLOR=g.DEFAULT_STROKE_COLOR;exports.DEFAULT_TEXT_COLOR=g.DEFAULT_TEXT_COLOR;exports.LINE_HEIGHT=g.LINE_HEIGHT;exports.MM_PER_INCH=g.MM_PER_INCH;exports.PAPER_SIZES=g.PAPER_SIZES;exports.SCHEMA_VERSION_MACH=g.SCHEMA_VERSION_MACH;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.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.RENDER_PLAN_SCHEMA_VERSION=q.RENDER_PLAN_SCHEMA_VERSION;exports.isImageBackedComponent=q.isImageBackedComponent;exports.isRichText=q.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=me.datasetJsonSchema;exports.validateDatasetRows=me.validateDatasetRows;exports.charWidthEm=O.charWidthEm;exports.createCanvasMeasurer=O.createCanvasMeasurer;exports.createHeuristicMeasurer=O.createHeuristicMeasurer;exports.heuristicMeasurer=O.heuristicMeasurer;exports.measureTextMm=O.measureTextMm;exports.wrapText=O.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.applyReportSourceMetadata=f.applyReportSourceMetadata;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.estimateListLayoutCells=f.estimateListLayoutCells;exports.formatReportCellEdit=f.formatReportCellEdit;exports.getReportCellContext=f.getReportCellContext;exports.getReportEditSession=f.getReportEditSession;exports.hasValidDataExplanation=f.hasValidDataExplanation;exports.isReportDataTarget=f.isReportDataTarget;exports.isReportValueState=f.isReportValueState;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.summarizeReportCellEdits=f.summarizeReportCellEdits;exports.resolveGridLayout=he.resolveGridLayout;exports.OutputFidelityError=W.OutputFidelityError;exports.inspectOutputCapabilities=W.inspectOutputCapabilities;exports.reportOutputDiagnostics=W.reportOutputDiagnostics;exports.OutputAssetError=J.OutputAssetError;exports.resolvePlanAssets=J.resolvePlanAssets;exports.ReportDrillError=K.ReportDrillError;exports.createReportDrillRequest=K.createReportDrillRequest;exports.matchReportDrillActions=K.matchReportDrillActions;exports.resolveReportDrillReturn=K.resolveReportDrillReturn;exports.validateReportDrillActions=K.validateReportDrillActions;exports.ReportParamValidationError=z.ReportParamValidationError;exports.assertReportParams=z.assertReportParams;exports.formatReportDateRange=z.formatReportDateRange;exports.isReportDate=z.isReportDate;exports.isReportMonth=z.isReportMonth;exports.isReportYear=z.isReportYear;exports.parseReportDateRange=z.parseReportDateRange;exports.reportParamsJsonSchema=z.reportParamsJsonSchema;exports.validateReportParamDefinitions=z.validateReportParamDefinitions;exports.validateReportParams=z.validateReportParams;exports.cloneReportTemplate=Z.cloneReportTemplate;exports.createLocalTemplateCatalog=Z.createLocalTemplateCatalog;exports.diffReportTemplates=Z.diffReportTemplates;exports.reviewReportTemplate=Z.reviewReportTemplate;exports.reviewReportTemplateAsync=Z.reviewReportTemplateAsync;exports.collectTemplateOutline=ue.collectTemplateOutline;exports.inspectTemplateFieldUsage=ue.inspectTemplateFieldUsage;exports.templatePathLocation=ue.templatePathLocation;exports.applyReportDocumentStyle=oe.applyReportDocumentStyle;exports.captureTemplateFragment=oe.captureTemplateFragment;exports.insertTemplateFragment=oe.insertTemplateFragment;exports.inspectTemplateFragmentBindings=oe.inspectTemplateFragmentBindings;exports.TreeRowLimitError=pe.TreeRowLimitError;exports.createTreeTable=pe.createTreeTable;exports.validateTreeOptions=pe.validateTreeOptions;exports.LabelSheetError=k;exports.PageBuilder=qe;exports.ReportCalculationError=M;exports.ReportCellFieldError=Ue;exports.ReportTemplateStoreError=N;exports.TemplateBuilder=We;exports.calculateReportSelection=fn;exports.classOf=C;exports.columnsFromContract=Lt;exports.computePageWindow=Oe;exports.createCanvasPager=Pt;exports.createLabelTemplate=Ht;exports.createMemoryTemplateStore=Ut;exports.createProviderReport=Wt;exports.createTableTemplate=_t;exports.createTemplate=At;exports.createTemplateManager=qt;exports.defineLabelReport=Bt;exports.evaluateReportAggregateExpression=Ve;exports.formatReportClipboard=jt;exports.imposeLabelSheets=yn;exports.measurePageSizePx=ae;exports.parseReportCellFieldInput=tn;exports.parseReportClipboard=Vt;exports.planFontSizePx=wt;exports.renderComponent=fe;exports.renderPage=Ne;exports.renderPlan=dt;exports.renderPlanToCanvas=Rt;exports.renderPlanToCanvasAsync=Ct;exports.renderPlanToImages=Et;exports.resolvePaper=ye;exports.validateReportCellFieldDefinition=Ge;