@agile-team/mach-report 2.9.1 → 2.11.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 (115) hide show
  1. package/README.md +11 -7
  2. package/dist/ExcelBindingWizard-CjIiVox-.cjs +1 -0
  3. package/dist/ExcelBindingWizard-Dxm-K5HL.js +1240 -0
  4. package/dist/ParamEditor-D-Hf5xfO.cjs +1 -0
  5. package/dist/ParamEditor-DRGxzxeO.js +381 -0
  6. package/dist/ReportBatchPanel-BYgg0EDB.cjs +1 -0
  7. package/dist/ReportBatchPanel-Bby5yLzU.js +287 -0
  8. package/dist/ReportPreview-DWXROHBP.cjs +6 -0
  9. package/dist/ReportPreview-DiNXhQI0.js +4138 -0
  10. package/dist/ReportTemplateLibrary-C6CO7YCT.cjs +1 -0
  11. package/dist/ReportTemplateLibrary-DfzDXRvr.js +260 -0
  12. package/dist/RuleEditor-C2QsOHOs.cjs +1 -0
  13. package/dist/RuleEditor-D9wQHrkf.js +2024 -0
  14. package/dist/TemplateReviewPanel-BKofGrV9.js +222 -0
  15. package/dist/TemplateReviewPanel-DwtOcLue.cjs +1 -0
  16. package/dist/analytics.cjs +1 -1
  17. package/dist/analytics.d.cts +4 -0
  18. package/dist/analytics.d.ts +4 -0
  19. package/dist/analytics.js +40 -39
  20. package/dist/{assets-ahTRUXRk.cjs → assets-Bu6UohJx.cjs} +1 -1
  21. package/dist/{assets-DDsfEi8R.js → assets-DegqDNqY.js} +1 -1
  22. package/dist/batch-Bt3Fd27Z.cjs +1 -0
  23. package/dist/batch-mRqhhhjt.js +364 -0
  24. package/dist/{capabilities-Cm9hZ3uV.js → capabilities-CK_7hizc.js} +16 -16
  25. package/dist/capabilities-CsZ-pNHR.cjs +1 -0
  26. package/dist/computed-Bvk0W15F.js +521 -0
  27. package/dist/computed-CGV2a809.cjs +1 -0
  28. package/dist/config-B612mw0x.js +525 -0
  29. package/dist/config-BRoLo2oj.cjs +1 -0
  30. package/dist/designer.cjs +2 -2
  31. package/dist/designer.d.cts +695 -50
  32. package/dist/designer.d.ts +695 -50
  33. package/dist/designer.js +2213 -1748
  34. package/dist/index.cjs +8 -8
  35. package/dist/index.d.cts +205 -6
  36. package/dist/index.d.ts +205 -6
  37. package/dist/index.js +808 -1033
  38. package/dist/injection-keys-Db_DyLkm.cjs +1 -0
  39. package/dist/injection-keys-e85udZCp.js +7 -0
  40. package/dist/list-cell-BuYn4tGF.cjs +1 -0
  41. package/dist/list-cell-ClFra1zS.js +173 -0
  42. package/dist/matrix-DVyWiYsd.cjs +1 -0
  43. package/dist/matrix-yZsGnldA.js +227 -0
  44. package/dist/param-validation-BlHHXs6u.js +153 -0
  45. package/dist/param-validation-DCK039V1.cjs +1 -0
  46. package/dist/pdf.cjs +49 -49
  47. package/dist/pdf.d.cts +31 -1
  48. package/dist/pdf.d.ts +31 -1
  49. package/dist/pdf.js +4797 -4650
  50. package/dist/plugin-BDTU4D94.cjs +1 -0
  51. package/dist/plugin-Cd5G2QQn.js +22 -0
  52. package/dist/region-binding-workflow-CXDmt9Bs.js +977 -0
  53. package/dist/region-binding-workflow-DhQvu1co.cjs +3 -0
  54. package/dist/{report-params-B_VCihAh.js → report-params-B44imUd4.js} +1 -1
  55. package/dist/{report-params-CjWrjPl6.cjs → report-params-SJfhKgaX.cjs} +1 -1
  56. package/dist/server/node.d.cts +48 -5
  57. package/dist/server/node.d.ts +48 -5
  58. package/dist/server-node.cjs +1 -1
  59. package/dist/server-node.js +503 -317
  60. package/dist/server.cjs +1 -1
  61. package/dist/server.d.cts +252 -4
  62. package/dist/server.d.ts +252 -4
  63. package/dist/server.js +567 -469
  64. package/dist/style.css +1 -1
  65. package/dist/template-registry-WNXdkiET.js +506 -0
  66. package/dist/template-registry-ukBGlm8N.cjs +1 -0
  67. package/dist/template-review-BXp2oyqg.cjs +1 -0
  68. package/dist/template-review-BdcXSYbx.js +1616 -0
  69. package/dist/tree-BX380Rr7.cjs +1 -0
  70. package/dist/tree-CqcQ99NM.js +172 -0
  71. package/dist/useLocalDraft-C07SYRnC.js +11 -0
  72. package/dist/useLocalDraft-Yiw1wFgI.cjs +1 -0
  73. package/dist/{validate-DWPF7icl.js → validate-7s0yn6ii.js} +26 -26
  74. package/dist/validate-DsRiNw8h.cjs +1 -0
  75. package/dist/vue/async.d.cts +118 -6
  76. package/dist/vue/async.d.ts +118 -6
  77. package/dist/vue/index.d.cts +177 -11
  78. package/dist/vue/index.d.ts +177 -11
  79. package/dist/vue-async.cjs +1 -1
  80. package/dist/vue-async.js +5 -5
  81. package/dist/vue.cjs +1 -1
  82. package/dist/vue.js +116 -113
  83. package/dist/{import-template-CNMLJSQw.js → workbook-session-BKOTwcoq.js} +4290 -4227
  84. package/dist/{import-template-CpxunKVp.cjs → workbook-session-CLYLhZWu.cjs} +17 -17
  85. package/dist/worker.cjs +1 -1
  86. package/dist/worker.d.cts +9 -2
  87. package/dist/worker.d.ts +9 -2
  88. package/dist/worker.js +1 -1
  89. package/dist/xlsx.cjs +4 -2
  90. package/dist/xlsx.d.cts +159 -3
  91. package/dist/xlsx.d.ts +159 -3
  92. package/dist/xlsx.js +354 -192
  93. package/package.json +1 -1
  94. package/dist/ExcelBindingWizard-DiaxvWpQ.cjs +0 -1
  95. package/dist/ExcelBindingWizard-RLJIXKKG.js +0 -816
  96. package/dist/ReportPreview-B5ZNEasW.js +0 -4439
  97. package/dist/ReportPreview-DRtVPUYo.cjs +0 -6
  98. package/dist/RuleEditor-CskN5Fr3.cjs +0 -1
  99. package/dist/RuleEditor-CtJFzKuY.js +0 -1578
  100. package/dist/TemplateReviewPanel-C_Lmzis6.cjs +0 -1
  101. package/dist/TemplateReviewPanel-Cn32OY4_.js +0 -173
  102. package/dist/binding-preview-B5834rml.cjs +0 -2
  103. package/dist/binding-preview-ChXjN5L5.js +0 -649
  104. package/dist/capabilities-DYzWL7KS.cjs +0 -1
  105. package/dist/matrix-CNPDJxED.js +0 -745
  106. package/dist/matrix-Div9Ilh3.cjs +0 -1
  107. package/dist/param-validation-BWNjLcN0.js +0 -116
  108. package/dist/param-validation-CiTxFeZ8.cjs +0 -1
  109. package/dist/plugin-BWwIgZXV.js +0 -25
  110. package/dist/plugin-Dg-J1Rbm.cjs +0 -1
  111. package/dist/template-registry-CHMYZ7SD.cjs +0 -1
  112. package/dist/template-registry-R61AMCr0.js +0 -433
  113. package/dist/template-review-hvWWQFsi.js +0 -1027
  114. package/dist/template-review-jEcOfmGr.cjs +0 -1
  115. package/dist/validate-BDiMqkJC.cjs +0 -1
package/dist/index.cjs CHANGED
@@ -1,9 +1,9 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const L=require("./defaults-xhmcLLrf.cjs"),S=require("./template-review-jEcOfmGr.cjs"),f=require("./style-UgIJSA1F.cjs"),j=require("./render-plan-7xpGrCEl.cjs"),re=require("./validate-BDiMqkJC.cjs"),me=require("./dataset-BkRmwgeJ.cjs"),z=require("./textwrap-CWHyzkBH.cjs"),K=require("./grid-geometry-CZ_cYB6O.cjs"),W=require("./assets-ahTRUXRk.cjs"),_=require("./capabilities-DYzWL7KS.cjs"),Ze=require("./progress-BnLiS5eH.cjs"),Qe=require("./page-window-index-DEjnM6IB.cjs"),F=require("./template-registry-CHMYZ7SD.cjs"),V=require("./param-validation-CiTxFeZ8.cjs"),Pe=require("./number-format-CZ2T_5kF.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 I(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,o=2){return this.add(t,`${f.round(f.mmToPx(n,r),o)}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 tt().add("all",t).add("display",e).add("box-sizing","border-box")}function Ie(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(f.resolveLineHeight(t))).add("text-align",t.align);const r=f.resolveFontSize(t,n);e.add("font-size",`${f.round(r.fontSizePx,2)}px`)}function nt(e,t,n){const r=t.style??{};Ie(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,o,l){const s=e.cell,i=l.createElement("td");i.className=I("cell",o),i.dataset.mrRowIndex=String(e.ri),i.dataset.mrColumnIndex=String(e.ci),i.setAttribute("role",t.table?.role==="header"?"columnheader":"cell"),s.colSpan&&(i.colSpan=s.colSpan),s.rowSpan&&(i.rowSpan=s.rowSpan);const a=f.mergeComponentStyles(t.style,s.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",a.backgroundColor).add("vertical-align",a.verticalAlign??"middle");Ie(c,a,r),c.applyTo(i);const d=l.createElement("div");d.className="mr-cell-content",T("flex").add("position","absolute").mm("left",n,r).mm("right",n,r).mm("top",n,r).mm("bottom",n,r).add("flex-direction","column").add("justify-content",a.verticalAlign==="top"?"flex-start":a.verticalAlign==="bottom"?"flex-end":"center").add("overflow-wrap","anywhere").add("overflow","hidden").applyTo(d),s.text!=null&&d.append(s.text);for(const u of s.children??[])d.appendChild(fe(u,r,o,l));return i.appendChild(d),i}function ot(e,t,n,r){return W.resolveGridStrokes(e,t).map(o=>{const l=`${f.round(o.widthPt*n/72,2)}px solid ${o.color}`,s=r.createElement("div");s.className="mr-grid-edge",s.setAttribute("aria-hidden","true");const i=o.kind==="h";return T("block").add("position","absolute").add("pointer-events","none").mm("left",i?o.from:o.pos,n).mm("top",i?o.pos:o.from,n).mm("width",i?o.to-o.from:0,n).mm("height",i?0:o.to-o.from,n).add(i?"border-top":"border-left",l).applyTo(s),s})}function it(e,t,n,r,o){const l=o.createElement("table");l.className=I("grid",r),l.setAttribute("role","table"),T("block").add("position","relative").add("width","100%").add("height","100%").applyTo(l);const s=K.resolveGridLayout(e,t.widthMm,t.heightMm),i=o.createElement("tbody");T("contents").applyTo(i),l.appendChild(i);const a=e.cells.map(()=>{const d=o.createElement("tr");return d.className=I("row",r),d.setAttribute("role","row"),T("contents").applyTo(d),i.appendChild(d),d});for(const d of s.cells)a[d.ri].appendChild(rt(d,t,e.paddingMm??.5,n,r,o));const c=o.createElement("div");return T("block").add("position","relative").add("width","100%").add("height","100%").applyTo(c),c.append(l,...ot(s,t,n,o)),c}function at(e,t,n,r){const o=r.createElement("div");o.className=I("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(o);for(const l of e.segments||[]){const s=r.createElement("span");s.className=I("segment",n),s.textContent=l.kind==="field"?l.field??"":l.text??"";const i=T("inline");if(l.style){const a=l.style;i.add("color",a.color).add("font-family",a.fontFamily).add("font-weight",a.bold!=null?a.bold?"700":"400":void 0).add("font-style",a.italic!=null?a.italic?"italic":"normal":void 0).add("text-decoration",a.underline!=null?a.underline?"underline":"none":void 0),(a.fontSize!=null||a.fontSizePx!=null)&&i.add("font-size",`${f.round(f.resolveFontSize(a,t).fontSizePx,2)}px`)}i.applyTo(s),o.appendChild(s)}return o}function st(e,t,n,r){if(j.isRichText(e)){const o=r.createElement("div");o.className=I("rich",n),T("block").applyTo(o);for(const l of e.richParagraphs)o.appendChild(at(l,t,n,r));return o}if(Array.isArray(e.lines)&&e.lines.length>0){const o=r.createElement("div");o.className=I("lines",n),T("block").applyTo(o);for(const l of e.lines){const s=r.createElement("div");s.className=I("line",n),s.textContent=l,T("block").add("white-space","pre").add("min-height","1lh").applyTo(s),o.appendChild(s)}return o}return e.text??""}function lt(e,t,n,r){const o=r.createElement("div");o.className=I("text",n);const l=e.style||{};return T("flex").add("width","100%").add("height","100%").add("flex-direction","column").add("justify-content",l.verticalAlign==="middle"?"center":l.verticalAlign==="bottom"?"flex-end":"flex-start").add("overflow-wrap","anywhere").add("overflow","hidden").applyTo(o),o.append(st(e,t,n,r)),o}function ct(e,t,n){const r=n.createElement("img");return r.className=I("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 Me(e,t,n,r){const o=r.createElement("div");o.className=I("shape",n);const l=e.style||{},s=f.resolveStroke(l),i=f.resolveBoxBorders(l),a=`${f.round(s.widthPt*t/72,2)}px solid ${s.color}`,c=T("block");return e.grid?c.add("position","relative"):e.kind==="rect"?(i.top&&c.add("border-top",a),i.right&&c.add("border-right",a),i.bottom&&c.add("border-bottom",a),i.left&&c.add("border-left",a)):e.kind==="ellipse"?(i.inner&&c.add("border",a).add("border-radius","50%"),l.backgroundColor&&c.add("background-color",l.backgroundColor)):e.kind==="line"&&c.add("height","0").add("border-top",a),c.add("box-sizing","border-box").add("width","100%").add("height","100%"),c.applyTo(o),o}function dt(e,t,n){const r=n.createElementNS("http://www.w3.org/2000/svg","svg"),o=f.mmToPx(e.widthMm,t),l=f.mmToPx(e.heightMm,t);r.setAttribute("width",String(Math.max(1,o))),r.setAttribute("height",String(Math.max(1,l))),r.setAttribute("aria-hidden","true"),r.style.overflow="visible",r.style.display="block";const s=n.createElementNS("http://www.w3.org/2000/svg","line");s.setAttribute("x1","0"),s.setAttribute("x2",String(o)),s.setAttribute("y1",e.lineDirection==="up"?String(l):"0"),s.setAttribute("y2",e.lineDirection==="up"?"0":String(l));const i=f.resolveStroke({...e.style,borderColor:e.style?.lineColor??e.style?.borderColor});return s.setAttribute("stroke",i.color),s.setAttribute("stroke-width",String(i.widthPt*t/72)),r.appendChild(s),r}function fe(e,t,n,r){const o=r.createElement("div");o.className=`${I("comp",n)} mr-kind-${e.kind}`;const l=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(nt(l,e,t),l.applyTo(o),j.isImageBackedComponent(e))return o.appendChild(ct(e,n,r)),o;if(e.kind==="text")return o.appendChild(lt(e,t,n,r)),o;if(e.grid){const i=Me(e,t,n,r);return i.appendChild(it(e.grid,e,t,n,r)),o.appendChild(i),o}if(e.kind==="line"&&e.lineDirection)return o.appendChild(dt(e,t,r)),o;if(e.kind==="line"||e.kind==="rect"||e.kind==="ellipse")return o.appendChild(Me(e,t,n,r)),o;const s=r.createElement("div");return s.className=I("unknown",n),T("block").applyTo(s),s.textContent=e.fallbackText??`[${e.kind}]`,s.dataset.mrUnsupported=e.kind,s.setAttribute("role","note"),o.appendChild(s),o}function Ae(e,t,n,r){const o=r.createElement("div");return o.className=I("page",n),T("block","initial").add("position","relative").add("font-family",L.DEFAULT_FONT_FAMILY).add("font-size",`${f.round(f.resolveFontSize(void 0,t).fontSizePx,2)}px`).add("line-height",String(f.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",L.DEFAULT_TEXT_COLOR).add("overflow","hidden").add("box-sizing","border-box").applyTo(o),e.components.forEach((l,s)=>{const i=fe(l,t,n,r);i.dataset.mrComponentIndex=String(s),o.appendChild(i)}),o}function ut(e,t,n={}){const r=n.dpi??96;_.reportOutputDiagnostics(e,"dom",n);const o=t.createElement("div");return o.className=I("root",n),T("block").applyTo(o),o.dataset.schemaVersion=e.schemaVersion,e.pages.forEach(l=>{o.appendChild(Ae(l,r,n,t))}),o}function N(e){if(e?.aborted)throw e.reason??new DOMException("The operation was aborted.","AbortError")}const mt=(e,t)=>(N(t),/^data:image\/(?:png|jpe?g|webp|gif|svg\+xml)[;,]/i.test(e)?new Promise((n,r)=>{const o=new Image,l=()=>{o.onload=null,o.onerror=null,t?.removeEventListener("abort",s)},s=()=>{l(),o.src="",r(t?.reason??new DOMException("The operation was aborted.","AbortError"))};o.onload=()=>{l(),n(o)},o.onerror=()=>{l(),r(new Error("Image could not be decoded for Canvas output."))},t?.addEventListener("abort",s,{once:!0}),o.src=e}):Promise.reject(new TypeError("Canvas imageData must be an image data URL; provide imageLoader for other sources.")));function ft(e,t,n){return N(n),n?new Promise((r,o)=>{const l=()=>o(n.reason??new DOMException("The operation was aborted.","AbortError"));n.addEventListener("abort",l,{once:!0}),Promise.resolve().then(()=>e(t,n)).then(r,o).finally(()=>n.removeEventListener("abort",l))}):e(t)}async function gt(e,t,n){const r=new Map;for(const o of e.components)!j.isImageBackedComponent(o)||r.has(o.imageData)||r.set(o.imageData,await ft(t,o.imageData,n));return N(n),r}function ht(e,t,n,r,o,l){const s=t,i=s.naturalWidth??s.width??o,a=s.naturalHeight??s.height??l;if(i<=0||a<=0)throw new RangeError("Decoded Canvas image dimensions must be positive.");const c=Math.min(o/i,l/a),d=i*c,u=a*c;e.drawImage(t,n+(o-d)/2,r+(l-u)/2,d,u)}function ke(e){return Qe.createPageWindowIndex(e.pageHeightsPx,e.gapPx).window(e.viewportHeightPx,e.scrollTopPx,e.overscan)}const ge=96/25.4;function oe(e,t=96){const n=t/96*ge;return{widthPx:Math.max(1,Math.round(e.pageWidthMm*n)),heightPx:Math.max(1,Math.round(e.pageHeightMm*n))}}function Fe(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 o=oe(e,n),l=Math.round(o.widthPx*t),s=Math.round(o.heightPx*t);if(!Number.isSafeInteger(l)||!Number.isSafeInteger(s)||l*s>r)throw new RangeError("Canvas page exceeds maxCanvasPixels; reduce resolution or split the report.");return{width:l,height:s}}function Le(e,t,n,r){const o=document.createElement("canvas"),{widthPx:l,heightPx:s}=oe(e,n),i=Fe(e,t,n,r);o.width=i.width,o.height=i.height,o.style.width=`${l}px`,o.style.height=`${s}px`;const a=o.getContext("2d");if(!a)throw new Error("当前环境不支持 Canvas 2D(测试需真浏览器,见 e2e/canvas.spec.ts)");return a.scale(t,t),a.fillStyle="#ffffff",a.fillRect(0,0,l,s),{canvas:o,ctx:a}}function pt(e,t=96){return f.resolveFontSize(e,t).fontSizePx}function Ne(e,t,n,r,o,l,s,i="top"){e.font=`${t.italic?"italic ":""}${t.bold?"bold ":""}${t.fontSizePx}px ${s}`,"letterSpacing"in e&&(e.letterSpacing="0px"),e.fillStyle=t.color,e.textBaseline="alphabetic";const a=t.fontSizePx*t.lineHeight,c=t.text===""?[""]:t.text.split(`
2
- `),d=c.length*a;let u=r;i==="middle"?u=r+(l-d)/2:i==="bottom"&&(u=r+l-d),c.forEach((m,g)=>{wt(e,m,t,n,u+g*a+t.fontSizePx*.8,o)}),e.textAlign="left"}function wt(e,t,n,r,o,l){const s=Array.from(t),i=n.letterSpacingPx??0;if(!i){e.textAlign=n.align==="center"?"center":n.align==="right"?"right":"left";const u=n.align==="center"?r+l/2:n.align==="right"?r+l:r;e.fillText(t,u,o);return}const a=e.measureText(t).width+Math.max(0,s.length-1)*i,c=n.align==="center"?r+(l-a)/2:n.align==="right"?r+l-a:r;e.textAlign="left";let d="";s.forEach((u,m)=>{e.fillText(u,c+e.measureText(d).width+m*i,o),d+=u})}function vt(e,t,n,r,o,l,s){for(const i of W.resolveGridStrokes(t,n))e.strokeStyle=i.color,e.lineWidth=f.ptToPx(i.widthPt,s),e.beginPath(),i.kind==="v"?(e.moveTo(r+i.pos*l,o+i.from*l),e.lineTo(r+i.pos*l,o+i.to*l)):(e.moveTo(r+i.from*l,o+i.pos*l),e.lineTo(r+i.to*l,o+i.pos*l)),e.stroke()}function bt(e,t,n,r,o,l){e.beginPath(),t.top&&(e.moveTo(n,r),e.lineTo(n+o,r)),t.right&&(e.moveTo(n+o,r),e.lineTo(n+o,r+l)),t.bottom&&(e.moveTo(n+o,r+l),e.lineTo(n,r+l)),t.left&&(e.moveTo(n,r+l),e.lineTo(n,r)),e.stroke()}function yt(e,t,n,r,o,l,s,i,a,c,d){const u=K.resolveGridLayout(t,l/i,s/i);for(const g of u.cells){const h=g.cell.style?.backgroundColor??n.style?.backgroundColor;h&&(e.fillStyle=h,e.fillRect(r+g.xMm*i,o+g.yMm*i,g.widthMm*i,g.heightMm*i))}vt(e,u,n,r,o,i,a);const m=t.paddingMm??.5;for(const g of u.cells){const h=g.cell.text??"";if(!h)continue;const p=f.mergeComponentStyles(n.style,g.cell.style),y=f.resolveFontSize(p,a),E=Math.max(0,g.widthMm-2*m),C=z.wrapText(h,E,{fontSizePt:y.fontSizePt,bold:p.bold,italic:p.italic,fontFamily:p.fontFamily??c,letterSpacingPt:p.letterSpacing},d).join(`
3
- `);Ne(e,{text:C,fontSizePx:y.fontSizePx,bold:p.bold??!1,italic:p.italic,color:f.resolveTextColor(p,L.DEFAULT_TEXT_COLOR),align:p.align??"left",lineHeight:f.resolveLineHeight(p),letterSpacingPx:f.ptToPx(p.letterSpacing??0,a)},r+(g.xMm+m)*i,o+(g.yMm+m)*i,E*i,Math.max(0,g.heightMm-2*m)*i,p.fontFamily??c,p.verticalAlign??"middle")}}function xt(e,t,n,r,o,l,s,i,a){const c=t.style??{},d=f.resolveFontSize(c,s),u=j.isRichText(t)?t.richParagraphs.map(m=>m.segments.map(g=>g.text??g.field??"").join("")).join(`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const I=require("./defaults-xhmcLLrf.cjs"),Y=require("./list-cell-BuYn4tGF.cjs"),u=require("./style-UgIJSA1F.cjs"),W=require("./render-plan-7xpGrCEl.cjs"),te=require("./validate-DsRiNw8h.cjs"),ae=require("./dataset-BkRmwgeJ.cjs"),$=require("./textwrap-CWHyzkBH.cjs"),f=require("./template-review-BXp2oyqg.cjs"),se=require("./grid-geometry-CZ_cYB6O.cjs"),j=require("./assets-Bu6UohJx.cjs"),O=require("./capabilities-CsZ-pNHR.cjs"),Be=require("./progress-BnLiS5eH.cjs"),We=require("./page-window-index-DEjnM6IB.cjs"),T=require("./template-registry-ukBGlm8N.cjs"),z=require("./param-validation-DCK039V1.cjs"),le=require("./tree-BX380Rr7.cjs"),je={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 S(e,t){return t?.classNames?.[e]??je[e]}class Ue{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,`${u.round(u.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 Ue().add("all",t).add("display",e).add("box-sizing","border-box")}function Te(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(u.resolveLineHeight(t))).add("text-align",t.align);const r=u.resolveFontSize(t,n);e.add("font-size",`${u.round(r.fontSizePx,2)}px`)}function qe(e,t,n){const r=t.style??{};Te(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 Ge(e,t,n,r,i,a){const l=e.cell,o=a.createElement("td");o.className=S("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=u.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");Te(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.text!=null&&d.append(l.text);for(const m of l.children??[])d.appendChild(ce(m,r,i,a));return o.appendChild(d),o}function Ve(e,t,n,r){return j.resolveGridStrokes(e,t).map(i=>{const a=`${u.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 Ye(e,t,n,r,i){const a=i.createElement("table");a.className=S("grid",r),a.setAttribute("role","table"),E("block").add("position","relative").add("width","100%").add("height","100%").applyTo(a);const l=se.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=S("row",r),d.setAttribute("role","row"),E("contents").applyTo(d),o.appendChild(d),d});for(const d of l.cells)s[d.ri].appendChild(Ge(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,...Ve(l,t,n,i)),c}function Xe(e,t,n,r){const i=r.createElement("div");i.className=S("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=S("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("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",`${u.round(u.resolveFontSize(s,t).fontSizePx,2)}px`)}o.applyTo(l),i.appendChild(l)}return i}function Ke(e,t,n,r){if(W.isRichText(e)){const i=r.createElement("div");i.className=S("rich",n),E("block").applyTo(i);for(const a of e.richParagraphs)i.appendChild(Xe(a,t,n,r));return i}if(Array.isArray(e.lines)&&e.lines.length>0){const i=r.createElement("div");i.className=S("lines",n),E("block").applyTo(i);for(const a of e.lines){const l=r.createElement("div");l.className=S("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 Je(e,t,n,r){const i=r.createElement("div");i.className=S("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(Ke(e,t,n,r)),i}function Ze(e,t,n){const r=n.createElement("img");return r.className=S("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 we(e,t,n,r){const i=r.createElement("div");i.className=S("shape",n);const a=e.style||{},l=u.resolveStroke(a),o=u.resolveBoxBorders(a),s=`${u.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 Qe(e,t,n){const r=n.createElementNS("http://www.w3.org/2000/svg","svg"),i=u.mmToPx(e.widthMm,t),a=u.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=u.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 ce(e,t,n,r){const i=r.createElement("div");i.className=`${S("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(qe(a,e,t),a.applyTo(i),W.isImageBackedComponent(e))return i.appendChild(Ze(e,n,r)),i;if(e.kind==="text")return i.appendChild(Je(e,t,n,r)),i;if(e.grid){const o=we(e,t,n,r);return o.appendChild(Ye(e.grid,e,t,n,r)),i.appendChild(o),i}if(e.kind==="line"&&e.lineDirection)return i.appendChild(Qe(e,t,r)),i;if(e.kind==="line"||e.kind==="rect"||e.kind==="ellipse")return i.appendChild(we(e,t,n,r)),i;const l=r.createElement("div");return l.className=S("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 xe(e,t,n,r){const i=r.createElement("div");return i.className=S("page",n),E("block","initial").add("position","relative").add("font-family",I.DEFAULT_FONT_FAMILY).add("font-size",`${u.round(u.resolveFontSize(void 0,t).fontSizePx,2)}px`).add("line-height",String(u.resolveLineHeight(void 0))).add("white-space","pre-wrap").add("direction","ltr").mm("width",e.pageWidthMm,t).mm("height",e.pageHeightMm,t).add("background-color","#fff").add("color",I.DEFAULT_TEXT_COLOR).add("overflow","hidden").add("box-sizing","border-box").applyTo(i),e.components.forEach((a,l)=>{const o=ce(a,t,n,r);o.dataset.mrComponentIndex=String(l),i.appendChild(o)}),i}function et(e,t,n={}){const r=n.dpi??96;O.reportOutputDiagnostics(e,"dom",n);const i=t.createElement("div");return i.className=S("root",n),E("block").applyTo(i),i.dataset.schemaVersion=e.schemaVersion,e.pages.forEach(a=>{i.appendChild(xe(a,r,n,t))}),i}function L(e){if(e?.aborted)throw e.reason??new DOMException("The operation was aborted.","AbortError")}const tt=(e,t)=>(L(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 nt(e,t,n){return L(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 rt(e,t,n){const r=new Map;for(const i of e.components)!W.isImageBackedComponent(i)||r.has(i.imageData)||r.set(i.imageData,await nt(t,i.imageData,n));return L(n),r}function it(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,m=s*c;e.drawImage(t,n+(i-d)/2,r+(a-m)/2,d,m)}function Re(e){return We.createPageWindowIndex(e.pageHeightsPx,e.gapPx).window(e.viewportHeightPx,e.scrollTopPx,e.overscan)}const de=96/25.4;function ne(e,t=96){const n=t/96*de;return{widthPx:Math.max(1,Math.round(e.pageWidthMm*n)),heightPx:Math.max(1,Math.round(e.pageHeightMm*n))}}function Se(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=ne(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 Ce(e,t,n,r){const i=document.createElement("canvas"),{widthPx:a,heightPx:l}=ne(e,n),o=Se(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 ot(e,t=96){return u.resolveFontSize(e,t).fontSizePx}function Pe(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 m=r;o==="middle"?m=r+(a-d)/2:o==="bottom"&&(m=r+a-d),c.forEach((g,h)=>{at(e,g,t,n,m+h*s+t.fontSizePx*.8,i)}),e.textAlign="left"}function at(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 m=n.align==="center"?r+a/2:n.align==="right"?r+a:r;e.fillText(t,m,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((m,g)=>{e.fillText(m,c+e.measureText(d).width+g*o,i),d+=m})}function st(e,t,n,r,i,a,l){for(const o of j.resolveGridStrokes(t,n))e.strokeStyle=o.color,e.lineWidth=u.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 lt(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 ct(e,t,n,r,i,a,l,o,s,c,d){const m=se.resolveGridLayout(t,a/o,l/o);for(const h of m.cells){const w=h.cell.style?.backgroundColor??n.style?.backgroundColor;w&&(e.fillStyle=w,e.fillRect(r+h.xMm*o,i+h.yMm*o,h.widthMm*o,h.heightMm*o))}st(e,m,n,r,i,o,s);const g=t.paddingMm??.5;for(const h of m.cells){const w=h.cell.text??"";if(!w)continue;const b=u.mergeComponentStyles(n.style,h.cell.style),_=u.resolveFontSize(b,s),A=h.cell.indentMm??0,C=Math.max(0,h.widthMm-2*g-A),D=$.wrapText(w,C,{fontSizePt:_.fontSizePt,bold:b.bold,italic:b.italic,fontFamily:b.fontFamily??c,letterSpacingPt:b.letterSpacing},d).join(`
3
+ `);Pe(e,{text:D,fontSizePx:_.fontSizePx,bold:b.bold??!1,italic:b.italic,color:u.resolveTextColor(b,I.DEFAULT_TEXT_COLOR),align:b.align??"left",lineHeight:u.resolveLineHeight(b),letterSpacingPx:u.ptToPx(b.letterSpacing??0,s)},r+(h.xMm+g+A)*o,i+(h.yMm+g)*o,C*o,Math.max(0,h.heightMm-2*g)*o,b.fontFamily??c,b.verticalAlign??"middle")}}function dt(e,t,n,r,i,a,l,o,s){const c=t.style??{},d=u.resolveFontSize(c,l),m=W.isRichText(t)?t.richParagraphs.map(g=>g.segments.map(h=>h.text??h.field??"").join("")).join(`
4
4
  `):t.lines?.length?t.lines.join(`
5
- `):z.wrapText(t.text??"",t.widthMm,{fontSizePt:d.fontSizePt,bold:c.bold,italic:c.italic,fontFamily:c.fontFamily??i,letterSpacingPt:c.letterSpacing},a).join(`
6
- `);Ne(e,{text:u,fontSizePx:d.fontSizePx,bold:c.bold??!1,italic:c.italic,color:f.resolveTextColor(c),align:c.align??"left",lineHeight:f.resolveLineHeight(c),letterSpacingPx:f.ptToPx(c.letterSpacing??0,s)},n,r,o,l,c.fontFamily??i,c.verticalAlign)}function he(e,t,n,r,o,l,s){const i=t.leftMm*n,a=t.topMm*n,c=t.widthMm*n,d=t.heightMm*n,u=t.style??{};if(j.isImageBackedComponent(t)){const m=s?.get(t.imageData);m?ht(e,m,i,a,c,d):Te(e,t,i,a,c,d);return}if(t.grid){yt(e,t.grid,t,i,a,c,d,n,r,o,l);return}switch(t.kind){case"text":{xt(e,t,i,a,c,d,r,o,l);break}case"rect":{const m=f.resolveStroke(u),g=f.resolveBoxBorders(u);u.backgroundColor&&(e.fillStyle=u.backgroundColor,e.fillRect(i,a,c,d)),g.inner&&(e.strokeStyle=m.color,e.lineWidth=f.ptToPx(m.widthPt,r),bt(e,g,i,a,c,d));break}case"line":{const m=f.resolveStroke({...u,borderColor:u.lineColor??u.borderColor});e.strokeStyle=m.color,e.lineWidth=f.ptToPx(m.widthPt,r),e.beginPath();const g=t.lineDirection==="up"?a+d:t.lineDirection==="down"?a:a+d/2,h=t.lineDirection==="up"?a:t.lineDirection==="down"?a+d:a+d/2;e.moveTo(i,g),e.lineTo(i+c,h),e.stroke();break}case"ellipse":{const m=f.resolveStroke(u);e.strokeStyle=m.color,e.lineWidth=f.ptToPx(m.widthPt,r),u.backgroundColor&&(e.fillStyle=u.backgroundColor,e.beginPath(),e.ellipse(i+c/2,a+d/2,c/2,d/2,0,0,Math.PI*2),e.fill()),e.beginPath(),e.ellipse(i+c/2,a+d/2,c/2,d/2,0,0,Math.PI*2),e.stroke();break}default:Te(e,t,i,a,c,d);break}}function Te(e,t,n,r,o,l){e.save(),e.strokeStyle="#94a3b8",e.strokeRect(n,r,o,l),e.fillStyle="#64748b",e.font="12px sans-serif",e.fillText(t.fallbackText??`[${t.kind}]`,n+3,r+14),e.restore()}async function Mt(e,t={}){if(typeof document>"u")throw new Error("renderPlanToImages 需要浏览器环境(SSR/Node 请在客户端钩子中调用)");const{format:n="png",quality:r=.92,...o}=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.");N(t.signal);const l=await W.resolvePlanAssets(e,{...t,format:"canvas"});e=l.plan;const s=[...l.diagnostics,..._.reportOutputDiagnostics(e,"canvas",t)],i=n==="jpeg"?"image/jpeg":"image/png",a=[],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++){N(t.signal);const u=await Oe(e.pages[d],d,o,s);try{a.push(await Tt(u,i,r,t.signal))}finally{u.width=0,u.height=0}await Ze.outputCheckpoint(t,a.length,c-Math.max(0,t.start??0)+1)}return N(t.signal),{blobs:a,diagnostics:s}}function Tt(e,t,n,r){return N(r),new Promise((o,l)=>{const s=()=>l(r?.reason??new DOMException("The operation was aborted.","AbortError"));r?.addEventListener("abort",s,{once:!0});try{e.toBlob(i=>{r?.removeEventListener("abort",s),i?o(i):l(new Error("Canvas encoding failed; no empty image was emitted."))},t,n)}catch(i){r?.removeEventListener("abort",s),l(i)}})}function Et(e,t={}){if(N(t.signal),typeof document>"u")throw new Error("renderPlanToCanvas 需要浏览器环境(SSR 请在客户端钩子中调用)");const n=t.dpr??(typeof devicePixelRatio=="number"?devicePixelRatio:1),r=t.dpi??96,o=r/96*ge,l=t.fontFamily??L.DEFAULT_FONT_FAMILY,s=t.measurer??z.heuristicMeasurer,i=Math.max(0,t.start??0),a=Math.min(e.pages.length-1,t.end??e.pages.length-1),c=[],d=_.reportOutputDiagnostics(e,"canvas",t),u=St(e,i,a);for(const m of u)_.notifyOutputDiagnostic(m,t),d.push(m);if(t.fidelity==="strict"&&u.length)throw new _.OutputFidelityError(d);for(let m=i;m<=a;m++){N(t.signal);const g=e.pages[m],{canvas:h,ctx:p}=Le(g,n,r,t.maxCanvasPixels);for(const y of g.components)he(p,y,o,r,l,s);c.push(h)}return{canvases:c,diagnostics:d}}function St(e,t,n){return n<t?[]:e.pages.slice(t,n+1).flatMap((r,o)=>r.components.flatMap((l,s)=>j.isImageBackedComponent(l)?[{code:"async-image-required",severity:"warning",format:"canvas",pageIndex:t+o,componentIndex:s,kind:l.kind,nid:l.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 输出)");N(t.signal);const n=await W.resolvePlanAssets(e,{...t,format:"canvas"});e=n.plan;const r=[...n.diagnostics,..._.reportOutputDiagnostics(e,"canvas",t)],o=[],l=Math.min(e.pages.length-1,t.end??e.pages.length-1);for(let s=Math.max(0,t.start??0);s<=l;s++)o.push(await Oe(e.pages[s],s,t,r));return{canvases:o,diagnostics:r}}async function Oe(e,t,n,r){const o=n.dpr??(typeof devicePixelRatio=="number"?devicePixelRatio:1),l=n.dpi??96,s=n.fontFamily??L.DEFAULT_FONT_FAMILY,i=await $e(e,t,n,r);N(n.signal);const{canvas:a,ctx:c}=Le(e,o,l,n.maxCanvasPixels);for(const d of e.components)he(c,d,l/25.4,l,s,n.measurer??z.heuristicMeasurer,i);return a}async function $e(e,t,n,r){const o=n.imageLoader??mt;return gt(e,async(l,s)=>{try{return await o(l,s)}catch(i){if(s?.aborted)throw i;const a=e.components.findIndex(u=>u.imageData===l),c=e.components[a],d={code:"image-decode-failed",severity:"warning",format:"canvas",pageIndex:t,componentIndex:a,kind:c.kind,nid:c.nid,message:"Image decoding failed; raster output was cancelled instead of omitting the image."};throw r.push(d),_.notifyOutputDiagnostic(d,n),i}},n.signal)}function Rt(e,t={}){const n=t.dpr??(typeof devicePixelRatio=="number"?devicePixelRatio:1),r=t.dpi??96,o=r/96*ge,l=t.fontFamily??L.DEFAULT_FONT_FAMILY,s=t.measurer??z.heuristicMeasurer,i=t.overscan??1,a=t.gapPx??18,c=t.pagesPerFrame??1,d=e.pages.map(w=>w.pageHeightMm*o),u=Math.max(1,...e.pages.map(w=>w.pageWidthMm*o)),m={start:0,end:-1};let g=null,h=null,p=null,y=null,E=[],C=0,k=[],X=0,G=new AbortController;const be=[];function Ge(){const w=g;w.innerHTML="",h=document.createElement("div"),h.style.cssText=`width:${u}px;margin:0 auto;`,p=document.createElement("div"),y=document.createElement("div"),h.appendChild(p),E=[];const R=Math.min(e.pages.length,3+i*2);for(let B=0;B<R;B++){const x=document.createElement("div");x.style.cssText=`margin:0 auto ${a}px;box-shadow:0 2px 8px rgba(0,0,0,.35);background:#fff;`,h.appendChild(x),E.push(x)}h.appendChild(y),w.appendChild(h)}async function Ye(w,R){const B=X,x=await W.resolvePlanAssets(e,{...t,signal:G.signal,format:"canvas",start:R,end:R});be.push(...x.diagnostics);const A=x.plan.pages[R],ee=await $e(A,R,{...t,signal:G.signal},be);if(B!==X||!g)return;const{widthPx:de,heightPx:ue}=oe(A,r);let H=w.firstElementChild;(!H||H.tagName!=="CANVAS")&&(H=document.createElement("canvas"),w.innerHTML="",w.appendChild(H));const xe=Fe(A,n,r,t.maxCanvasPixels);H.width=xe.width,H.height=xe.height,H.style.width=`${de}px`,H.style.height=`${ue}px`;const U=H.getContext("2d");if(U){U.setTransform(1,0,0,1,0,0),U.scale(n,n),U.fillStyle="#ffffff",U.fillRect(0,0,de,ue);for(const Xe of A.components)he(U,Xe,o,r,l,s,ee);H.dataset.canvasPage=String(R),w.style.height=`${ue}px`,w.style.width=`${de}px`}}function Je(w){X++,m.start=w.start,m.end=w.end,p.style.height=`${w.start*a+d.slice(0,w.start).reduce((x,A)=>x+A,0)}px`;const R=e.pages.length-1-w.end;y.style.height=`${R*a+d.slice(w.end+1).reduce((x,A)=>x+A,0)}px`;const B=w.end-w.start+1;E.forEach((x,A)=>{if(A<B){x.style.display="";const ee=w.start+A;x.style.height=`${d[ee]??0}px`}else x.style.display="none"}),k=[];for(let x=w.start;x<=w.end;x++){const A=E[x-w.start];if(!A)continue;A.firstElementChild?.dataset?.canvasPage!==String(x)&&k.push(x)}ce()}function ce(){C||k.length===0||(C=requestAnimationFrame(()=>{C=0;let w=Math.max(1,c);for(;k.length>0&&w-- >0;){const R=k.shift(),B=E[R-m.start];B&&Ye(B,R).catch(()=>{})}k.length>0&&ce()}))}function Z(){C||(C=requestAnimationFrame(()=>{C=0;const w=g,R=ke({pageHeightsPx:d,viewportHeightPx:w.clientHeight,scrollTopPx:w.scrollTop,overscan:i,gapPx:a});R.start!==m.start||R.end!==m.end?Je(R):ce()}))}let Q=null;return{attach(w){if(typeof document>"u")throw new Error("createCanvasPager 需要浏览器环境(SSR 请在客户端钩子中调用 attach)");N(t.signal),G=new AbortController,t.signal?.addEventListener("abort",ye,{once:!0}),_.reportOutputDiagnostics(e,"canvas",t),g=w,Ge(),w.addEventListener("scroll",Z,{passive:!0}),typeof ResizeObserver<"u"&&(Q=new ResizeObserver(()=>Z()),Q.observe(w)),Z()},destroy(){X++,G.abort(),t.signal?.removeEventListener("abort",ye),C&&cancelAnimationFrame(C),C=0,Q?.disconnect(),Q=null,g?.removeEventListener("scroll",Z),k=[],h?.remove(),g=null},window(){return{...m}}};function ye(){G.abort(t.signal?.reason)}}function pe(e,t,n){let r,o;if(typeof e=="string"){const l=f.PAPER_SIZES[e];if(!l)throw new Error(`未知纸张预设 "${e}"(可用:${Object.keys(f.PAPER_SIZES).join("/")})`);r=l.widthMm,o=l.heightMm}else typeof e=="number"?(r=e,o=t??297):(r=e.widthMm,o=e.heightMm);return n?{widthMm:o,heightMm:r}:{widthMm:r,heightMm:o}}class De{constructor(){this.pages=[],this.pending=null,this.templateParams=void 0}params(t){return this.templateParams=t,this}page(t="a4",n={},r){this.collect();const l=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:s,heightMm:i}=pe(t,typeof n=="number"?n:void 0,l.landscape),a=l.margins??{};return this.pending=new _e(this,{widthMm:s,heightMm:i,marginTopMm:a.marginTopMm??10,marginBottomMm:a.marginBottomMm??10,marginLeftMm:a.marginLeftMm??10,marginRightMm:a.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,pages:this.pages}:{pages:this.pages}}}class _e{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,o={}){return this.components.push({kind:"list",leftMm:n.leftMm??10,topMm:n.topMm??30,widthMm:n.widthMm??180,dataset:t,columns:r,...o}),this}rect(t,n={}){return this.components.push({kind:"rect",...t,style:n}),this}line(t,n,r,o={}){return this.components.push({kind:"line",leftMm:t,topMm:n,widthMm:r,heightMm:.5,style:o}),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,o){return this.components.push({kind:"qrcode",leftMm:r,topMm:o,widthMm:n,heightMm:n,fallbackText:t}),this}buildPage(){return{...this.page,components:this.components}}done(){return this.parent}build(){return this.done().build()}}function Pt(){return new De}function It(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 O(e,t,n=!1){if(!Number.isFinite(e)||(n?e<0:e<=0))throw new Error(`${t} 必须是有限${n?"非负":"正"}数`)}function te(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 O(n,"columnWidthMm"),{layout:t,columnWidthMm:n}}function kt(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(f.PAPER_SIZES,t))throw new Error(`未知纸张预设 "${t}"(可用:${Object.keys(f.PAPER_SIZES).join("/")})`);const n=pe(t,void 0,e.landscape),r=n.widthMm,o=n.heightMm;return O(r,"纸张 widthMm"),O(o,"纸张 heightMm"),{widthMm:r,heightMm:o}}function Ft(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,o]of Object.entries(n))O(o,r,!0);return n}function Lt(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,o=e.titleGapMm===void 0?4:e.titleGapMm;O(r,"titleHeightMm"),O(o,"titleGapMm",!0);const l=e.title!==void 0&&e.title.length>0,s=l?r+o:0;if(s>=t)throw new Error("标题高度与间距占满页面,必须为表格保留可用高度");return{dataset:n,titleHeightMm:r,hasTitle:l,titleSpaceMm:s}}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??{};te(t.align,"listOptions.align",!0),te(t.headerAlign,"listOptions.headerAlign",!1);for(const n of["fontSizePt","rowHeightMm","paddingMm"]){const r=t[n];r!==void 0&&O(r,`listOptions.${n}`,n==="paddingMm")}return t}function Ot(e){let t=0,n=0;for(const[r,o]of e.entries()){if(!o||typeof o.header!="string"||typeof o.field!="string"||!o.field.trim())throw new Error(`columns[${r}] 需要字符串 header 与非空 field`);te(o.align,`columns[${r}].align`,!0),te(o.headerAlign,`columns[${r}].headerAlign`,!1),o.flex!==void 0&&O(o.flex,`columns[${r}].flex`),o.widthMm!==void 0?(O(o.widthMm,`columns[${r}].widthMm`),t+=o.widthMm):n=Math.max(n,o.flex??1)}return{fixedWidthMm:t,maxFlex:n}}function $t(e,t,n,r){const{fixedWidthMm:o,maxFlex:l}=Ot(e.columns);if(t==="page"&&o>r)throw new Error(`固定列宽 ${o}mm 超出页面可用宽度 ${r}mm`);const s=r-o;if(t==="page"&&l>0&&s<=0)throw new Error("固定列占满页面可用宽度,自动列需要正的剩余宽度");const i=l>0?e.columns.reduce((c,d)=>c+(d.widthMm===void 0?(d.flex??1)/l:0),0):0;return{columns:e.columns.map(({widthMm:c,flex:d,...u},m)=>{const g=c??(t==="wide"?n*(d??1):s*((d??1)/l)/i);return O(g,`columns[${m}] 分配后的 widthMm`),{...u,widthMm:g}}),fixedWidthMm:o,maxFlex:l}}function Dt(e){if(!e||typeof e!="object")throw new Error("标准明细模板需要 options 对象");if(!Array.isArray(e.columns)||e.columns.length===0)throw new Error("columns 至少需要一列");const{layout:t,columnWidthMm:n}=At(e),r=kt(e);let o=r.widthMm;const l=r.heightMm,s=Ft(e);let i=o-s.marginLeftMm-s.marginRightMm;const a=l-s.marginTopMm-s.marginBottomMm;if(t==="page"&&i<=0||a<=0)throw new Error("页边距占满纸张,必须保留正的可用宽度和高度");const{dataset:c,titleHeightMm:d,hasTitle:u,titleSpaceMm:m}=Lt(e,a),g=Nt(e),{columns:h,fixedWidthMm:p,maxFlex:y}=$t(e,t,n,i);t==="wide"&&(i=h.reduce((C,k)=>C+k.widthMm,0),O(i,"宽表总列宽"),o=i+s.marginLeftMm+s.marginRightMm,O(o,"宽表总宽度"));const E={widthMm:o,heightMm:l,...s,components:[],...t==="wide"?{layout:t}:{}};return u&&E.components.push({kind:"text",text:e.title,leftMm:s.marginLeftMm,topMm:s.marginTopMm,widthMm:i,heightMm:d,style:{fontSize:16,bold:!0,align:"center",verticalAlign:"middle",...e.titleStyle}}),E.components.push({align:"auto",headerAlign:"center",...g,kind:"list",...t==="wide"?{layout:t}:{},...u?{title:e.title}:{},dataset:c,columns:h,leftMm:s.marginLeftMm,topMm:s.marginTopMm+m,widthMm:t==="wide"||y>0?i:p}),e.params===void 0?{pages:[E]}:{params:e.params,pages:[E]}}function _t(e){return e}class $ extends Error{constructor(t,n){super(n),this.code=t,this.name="ReportTemplateStoreError"}}function D(e){return JSON.parse(JSON.stringify(e))}function P(e){if(!e?.aborted)return;const t=new Error("模板操作已取消");throw t.name="AbortError",t}function Ee(e){const t=e?Number(e.revision):0;if(!Number.isSafeInteger(t)||t<0||t>=Number.MAX_SAFE_INTEGER)throw new $("history","修订号无效或已达上限");return String(t+1)}function zt(e,t={}){const n=async(s,i)=>{P(i);const a=await e.read(s,i);return P(i),a?D(a):void 0},r=async(s,i)=>{const a=await n(s,i.signal);if((a?.revision??null)!==i.expectedRevision)throw new $("conflict","模板已变化,请重新读取后提交");return a},o=async(s,i,a)=>{if(P(i.signal),!await e.compareAndSwap(s.id,i.expectedRevision,D(s),{signal:i.signal,...a?{publication:D(a)}:{}}))throw new $("conflict","模板已被其他请求更新");return D(s)},l=async(s,i,a,c)=>{if(t.beforePublish){P(a.signal);const g=await t.beforePublish({document:F.parseReportTemplate(i),previous:s.published?F.parseReportTemplate(s.published):void 0,signal:a.signal});if(!g||g.ok!==!0)throw new $("review",g?.issues?.find(h=>h.severity==="error")?.message??"模板发布检查未通过");P(a.signal)}const d=Ee(s),u=F.parseReportTemplate({...i,revision:d}),m={revision:d,document:u,publishedAt:(t.now?.()??new Date).toISOString()};return c!==void 0&&(m.restoredFrom=c),o({id:s.id,revision:d,publishedRevision:d,published:u},a,m)};return{list:async s=>{P(s);const i=await e.list(s);return P(s),D(i)},get:async(s,i={})=>{const a=await n(s,i.signal),c=i.draft?a?.draft:a?.published;return c?F.parseReportTemplate(c):void 0},history:async(s,i)=>{P(i);const a=await e.history(s,i);return P(i),D(a)},saveDraft:async(s,i)=>{i={...i},P(i.signal);const a=F.parseReportTemplate(t.migrate?await t.migrate(s):s),c=await r(a.id,i),d=Ee(c);return o({id:a.id,revision:d,draft:{...a,revision:d},...c?.publishedRevision?{publishedRevision:c.publishedRevision,published:c.published}:{}},i)},publish:async(s,i)=>{i={...i};const a=await r(s,i);if(!a)throw new $("missing","模板不存在");if(!a.draft)throw new $("draft","没有可发布的草稿");return l(a,a.draft,i)},rollback:async(s,i,a)=>{a={...a};const c=await r(s,a);if(!c)throw new $("missing","模板不存在");P(a.signal);const d=await e.getVersion(s,i,a.signal);if(!d)throw new $("history","历史修订不存在");return l(c,d.document,a,i)}}}function Ht(){const e=new Map,t=new Map;return{read:async(n,r)=>{P(r);const o=e.get(n);return o?D(o):void 0},list:async n=>(P(n),Array.from(e.values(),({id:r,revision:o,publishedRevision:l})=>({id:r,revision:o,...l?{publishedRevision:l}:{}}))),history:async(n,r)=>(P(r),Array.from(t.get(n)?.values()??[],o=>D(o))),getVersion:async(n,r,o)=>{P(o);const l=t.get(n)?.get(r);return l?D(l):void 0},compareAndSwap:async(n,r,o,l)=>{if(P(l.signal),(e.get(n)?.revision??null)!==r)return!1;if(o.id!==n)throw new $("history","状态 ID 与存储 ID 不一致");const s=D(o),i=l.publication;if(i){const a=t.get(n)??new Map;if(a.has(i.revision)||i.revision!==o.revision||i.document.id!==n)throw new $("history","发布修订不可覆盖,且必须与状态修订和模板 ID 一致");a.set(i.revision,D(i)),t.set(n,a)}return e.set(n,s),!0}}}function ze(e){return!e||typeof e!="object"?!1:[e.pageIndex,e.componentIndex,e.rowIndex,e.columnIndex].every(t=>Number.isInteger(t)&&t>=0)}function He(e,t,n){const r=e.grid;if(!r)return null;const o=r.cells[t];if(!o)return null;const s=K.resolveGridLayout(r,e.widthMm,e.heightMm).cells.filter(a=>a.ri===t).findIndex(a=>a.ci===n),i=o[s];return i?{cell:i,sourceColumnIndex:s}:null}function Bt(e){return e.value!==void 0?e.value:e.rawText??e.text??null}function jt(e,t){return e.valueType?e.valueType:typeof t=="number"?"number":typeof t=="boolean"?"boolean":t===null&&e.numberFormat&&/[0#?]/.test(e.numberFormat)?"number":"text"}function Wt(e,t){if(e.editable===!1)return"cell";if(e.formula!==void 0)return"formula";if(e.children?.length)return"complex";if(t.table&&t.table.role!=="body"&&e.editable!==!0)return"structure"}function Ut(e,t){const n=e.table;if(n)return{id:n.id,rowIndex:n.rowIndex+t.rowIndex,role:n.role,columnKey:n.columnKeys[t.columnIndex]}}function qt(e,t,n){if(e.source)return{...e.source};const r=t.table?.source,o=t.table?.columnKeys[n.columnIndex];if(!(!r||r.rowKey===void 0||o===void 0))return{...r,rowKey:r.rowKey,field:o}}function Be(e,t,n){const r=Bt(n),o=Wt(n,e);return{address:{...t},cell:n,component:e,value:r,valueType:jt(n,r),table:Ut(e,t),source:qt(n,e,t),editable:o===void 0,readOnlyReason:o}}function ie(e,t){if(!ze(t))return null;const n=e.pages[t.pageIndex]?.components[t.componentIndex];if(!n)return null;const r=He(n,t.rowIndex,t.columnIndex);return r?Be(n,t,r.cell):null}function ae(e){const t=new Map;return n=>{if(!ze(n))return null;const r=e.pages[n.pageIndex]?.components[n.componentIndex];if(!r?.grid)return null;let o=t.get(r);if(!o){const s=new Map;o=new Map;for(const i of K.resolveGridLayout(r.grid,r.widthMm,r.heightMm).cells){const a=s.get(i.ri)??0;s.set(i.ri,a+1);const c=r.grid.cells[i.ri]?.[a];c&&o.set(`${i.ri}:${i.ci}`,c)}t.set(r,o)}const l=o.get(`${n.rowIndex}:${n.columnIndex}`);return l?Be(r,n,l):null}}class M extends Error{constructor(t){super(`Invalid report cell edit: ${t}`),this.code=t,this.name="ReportCellEditError"}}function Kt(e,t){let n=e.trim();const r=t&&n.endsWith("%");if(r&&(n=n.slice(0,-1).trim()),/^[+-]?\d{1,3}(?:,\d{3})+(?:\.\d*)?(?:[eE][+-]?\d+)?$/.test(n)&&(n=n.replace(/,/g,"")),!/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/.test(n))throw new M("number");return Number(n)/(r?100:1)}function Vt(e,t){if(e===null||typeof e=="string"&&e.trim()==="")return null;if(typeof e!="string"&&typeof e!="number")throw new M("number");const n=typeof e=="number"?e:Kt(e,Pe.isExcelPercentageFormat(t.cell.numberFormat));if(!Number.isFinite(n)||Number.isInteger(n)&&!Number.isSafeInteger(n))throw new M("number");return n}function Gt(e){if(e===null||typeof e=="string"&&e.trim()==="")return null;if(typeof e=="boolean")return e;const t=String(e).trim().toLowerCase();if(["true","yes","是","1"].includes(t))return!0;if(["false","no","否","0"].includes(t))return!1;throw new M("boolean")}function se(e,t){return e.valueType==="number"?Vt(t,e):e.valueType==="boolean"?Gt(t):t===null?null:String(t)}function Yt(e,t){const n=t.cell.text,o=[["是","否"],["TRUE","FALSE"],["True","False"],["true","false"],["1","0"]].find(l=>l.includes(n??""));return o?o[e?0:1]:String(e)}function J(e,t){return t===null?"":typeof t=="boolean"?Yt(t,e):typeof t=="number"?Pe.formatExcelNumber(t,e.cell.numberFormat):String(t)}function Jt(e,t,n){const r=ie(e,t);if(!r)throw new M("missing");return we(r,n)}function we(e,t){if(!e.editable)throw new M("readonly");const n=se(e,t);return{address:{...e.address},table:e.table,source:e.source,previousValue:e.value,previousText:e.cell.text??"",value:n,text:J(e,n)}}function Xt(e,t){const n=e.table,r=t.table;return!n||!r||n.columnKey===void 0?!1:n.id===r.id&&n.rowIndex===r.rowIndex&&n.role===r.role&&n.columnKey===r.columnKey}function je(e,t,n){const r=e.grid,{rowIndex:o,columnIndex:l}=t.address,s=He(e,o,l),i=[...r.cells],a=[...i[o]],c=J(t,n.value),d={...s.cell,value:n.value,text:c,rawText:c};return a[s.sourceColumnIndex]=d,i[o]=a,{...e,grid:{...r,cells:i}}}function Zt(e,t){const n=e.table?.columnKeys,r=t.table?.columnKey;return n&&r!==void 0?n.flatMap((o,l)=>o===r?[l]:[]):[]}function Qt(e,t,n,r,o,l){const s=t.table,i=o.table;if(!s||!i||s.id!==i.id||s.role!==i.role||!t.grid)return t;const a=i.rowIndex-s.rowIndex;if(a<0||a>=t.grid.cells.length)return t;let c=t;for(const d of Zt(t,o)){const u=ie(e,{pageIndex:n,componentIndex:r,rowIndex:a,columnIndex:d});u?.editable&&Xt(o,u)&&(c=je(c,u,l))}return c}function en(e,t,n,r,o,l){const s=o.address;return o.table?.columnKey!==void 0?Qt(e,t,n,r,o,l):s.pageIndex===n&&s.componentIndex===r?je(t,o,l):t}function We(e,t){const n=t.source;if(!n)return!1;const r=e.source;return!r||["datasetId","rowKey","field","revision","sourceToken"].some(o=>!Object.is(r[o],n[o]))}function tn(e,t){const n=ie(e,t.address);if(!n)throw new M("missing");if(!n.editable)throw new M("readonly");if(We(n,t))throw new M("conflict");if(!Object.is(n.value,t.previousValue)||(n.cell.text??"")!==t.previousText)throw new M("conflict");const r=se(n,t.value),o={...t,value:r,text:J(n,r)};if(Object.is(r,n.value)&&o.text===n.cell.text)return e;const l=e.pages.map((s,i)=>{const a=s.components.map((c,d)=>en(e,c,i,d,n,o));return a.every((c,d)=>c===s.components[d])?s:{...s,components:a}});return{...e,pages:l}}function nn(e){return JSON.stringify([e.pageIndex,e.componentIndex,e.rowIndex,e.columnIndex])}function Se(e){const t=e.table;return t?.columnKey!==void 0?JSON.stringify([t.id,t.role,t.rowIndex,t.columnKey]):nn(e.address)}function rn(e,t){if(!t.length)return e;const n=new Map(t.map(a=>[Se(a),a])),r=new Set(t.flatMap(a=>a.table?[a.table.id]:[])),o=new Set(t.map(a=>`${a.address.pageIndex}:${a.address.componentIndex}`)),l=ae(e);function s(a,c,d){const u=a.grid;if(!u||!o.has(`${c}:${d}`)&&!r.has(a.table?.id??""))return a;const m=new Map,g=new Map;for(const h of K.resolveGridLayout(u,a.widthMm,a.heightMm).cells){const p=g.get(h.ri)??0;g.set(h.ri,p+1);const y=l({pageIndex:c,componentIndex:d,rowIndex:h.ri,columnIndex:h.ci}),E=y&&n.get(Se(y));if(!E||!y.editable)continue;const C=m.get(h.ri)??[...u.cells[h.ri]],k=J(y,E.value);Object.is(y.value,E.value)&&k===y.cell.text||(C[p]={...h.cell,value:E.value,text:k,rawText:k},m.set(h.ri,C))}return m.size?{...a,grid:{...u,cells:u.cells.map((h,p)=>m.get(p)??h)}}:a}const i=e.pages.map((a,c)=>{const d=a.components.map((u,m)=>s(u,c,m));return d.every((u,m)=>u===a.components[m])?a:{...a,components:d}});return i.every((a,c)=>a===e.pages[c])?e:{...e,pages:i}}function le(e){const t=e.source;if(t)return JSON.stringify([t.datasetId,t.rowKey,t.field]);const n=e.table;if(n?.columnKey!==void 0)return JSON.stringify([n.id,n.role,n.rowIndex,n.columnKey]);const r=e.address;return JSON.stringify([r.pageIndex,r.componentIndex,r.rowIndex,r.columnIndex])}function on(e,t,n){if(typeof n!="string"||!n.trim()||!Array.isArray(t))throw new M("missing");if(t.length>1e4)throw new M("limit");const r=new Set,o=ae(e),l=t.map(({address:s,value:i})=>{const a=o(s);if(!a)throw new M("missing");const c=we(a,i),d=le(c);if(r.has(d))throw new M("duplicate");return r.add(d),c});return{requestId:n,edits:l}}function an(e,t){if(t.edits.length>1e4)throw new M("limit");const n=ae(e),r=new Set,o=t.edits.map(l=>{const s=n(l.address);if(!s)throw new M("missing");const i=le(l);if(r.has(i))throw new M("duplicate");if(r.add(i),We(s,l)||!Object.is(s.value,l.previousValue)||(s.cell.text??"")!==l.previousText)throw new M("conflict");return we(s,l.value)});return rn(e,o)}function sn(e){const t=new Map;for(const n of e){const r=le(n),o=t.get(r),l=o?{...n,previousValue:o.previousValue,previousText:o.previousText}:{...n};Object.is(l.previousValue,l.value)?t.delete(r):t.set(r,l)}return[...t.values()]}function ln(e){return e.map(t=>t.map(n=>/[\t\r\n"]/.test(n)?`"${n.replace(/"/g,'""')}"`:n).join(" ")).join(`\r
7
- `)}function cn(e,t){const n=e[e.length-1];e.length>1&&n?.length===1&&n[0]===""&&/[\r\n]$/.test(t)&&e.pop()}function dn(e,t=1e4){if(e.length>4*1024*1024)throw new Error("Clipboard text limit exceeded");const n=[[]];let r="",o=!1,l=!1,s=0;function i(){if(++s>t)throw new Error("Clipboard cell limit exceeded");n[n.length-1].push(r),r="",l=!1}for(let a=0;a<e.length;a++){const c=e[a];if(o){if(c!=='"'){r+=c;continue}if(e[a+1]==='"'){r+='"',a++;continue}o=!1,l=!0;continue}if(c==='"'&&!r&&!l){o=!0;continue}if(c===" "){i();continue}if(c==="\r"||c===`
8
- `){i(),n.push([]),c==="\r"&&e[a+1]===`
9
- `&&a++;continue}if(l)throw new Error("Invalid quoted clipboard value");r+=c}if(o)throw new Error("Unclosed clipboard quote");return i(),cn(n,e),n}function un(e,t,n){if(!n||n.revision===void 0&&n.sourceToken===void 0)return e;const r=new Set(t.edits.flatMap(s=>s.source?[s.source.datasetId]:[]));if(!r.size)return e;function o(s){return!s.datasetId||!r.has(s.datasetId)||(n.revision===void 0||Object.is(n.revision,s.revision))&&(n.sourceToken===void 0||n.sourceToken===s.sourceToken)?s:{...s,...n.revision!==void 0?{revision:n.revision}:{},...n.sourceToken!==void 0?{sourceToken:n.sourceToken}:{}}}const l=e.pages.map(s=>{const i=s.components.map(a=>{const c=a.table?.source?o(a.table.source):void 0,d=a.table&&c!==a.table.source?{...a.table,source:c}:a.table,u=a.grid?.cells.map(g=>{const h=g.map(p=>{if(!p?.source)return p;const y=o(p.source);return y===p.source?p:{...p,source:y}});return h.some((p,y)=>p!==g[y])?h:g}),m=a.grid&&u?.some((g,h)=>g!==a.grid.cells[h])?{...a.grid,cells:u}:a.grid;return d!==a.table||m!==a.grid?{...a,table:d,grid:m}:a});return i.some((a,c)=>a!==s.components[c])?{...s,components:i}:s});return l.some((s,i)=>s!==e.pages[i])?{...e,pages:l}:e}class Ue extends Error{constructor(t,n,r){const o=typeof n.label=="string"?n.label:"单元格",l={definition:`${o}的编辑器配置无效`,type:`${o}的编辑器与数据类型不一致`,required:`${o}不能为空`,min:`${o}不能小于 ${r}`,max:`${o}不能大于 ${r}`,precision:`${o}最多保留 ${r} 位小数`,length:`${o}最多允许 ${r} 个字符`,choice:`${o}请选择有效选项`,date:`${o}请输入有效日期(YYYY-MM-DD)`};super(l[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 qe(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 mn(e){const[t="",n="0"]=String(e).toLowerCase().split("e");return Math.max(0,(t.split(".")[1]?.length??0)-Number(n))}function fn(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&&mn(t)>e.precision&&v(e,"precision",e.precision)}function gn(e,t){qe(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 hn(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 pn(e){[e.min,e.max].some(t=>t!==void 0&&!qe(t))&&v(e,"definition"),e.min!==void 0&&e.max!==void 0&&e.min>e.max&&v(e,"definition")}function wn(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 o of t.options)(!o||typeof o.value!==n||typeof o.value=="number"&&!Number.isFinite(o.value))&&v(t,"definition"),o.label!==void 0&&typeof o.label!="string"&&v(t,"definition"),r.has(o.value)&&v(t,"definition"),r.add(o.value)}function vn(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 Ke(e,t){(!t||typeof t!="object"||Array.isArray(t)||!["text","number","boolean","enum","date"].includes(t.type))&&v(t??{type:"text"},"definition"),vn(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"&&hn(t),t.type==="text"&&t.maxLength!==void 0&&(!Number.isInteger(t.maxLength)||t.maxLength<0)&&v(t,"definition"),t.type==="date"&&pn(t),t.type==="enum"&&wn(e,t)}function bn(e,t,n){if(!e.editable)throw new M("readonly");n&&Ke(e,n);const r=se(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"&&fn(n,r),n.type==="date"&&gn(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(o=>Object.is(o.value,r))&&v(n,"choice"),r)):r}class b extends Error{constructor(t){super(`Report calculation: ${t}`),this.code=t,this.name="ReportCalculationError"}}function q(e){if(!e?.aborted)return;const t=new Error("Calculation cancelled");throw t.name="AbortError",t}async function ne(e,t=1){const n=Math.floor(e.scanned/2048);if(e.scanned+=t,e.scanned>e.maxScanned)throw new b("limit");q(e.signal),Math.floor(e.scanned/2048)>n&&(await e.yieldToHost(),q(e.signal))}function ve(e){return e.table?.role==="header"?-Math.max(1,e.grid?.cells.length??1):e.table?.rowIndex??0}function Ce(e,t,n){if(![t.pageIndex,t.componentIndex,t.rowIndex,t.columnIndex].every(i=>Number.isSafeInteger(i)&&i>=0))throw new b("selection");const r=e.pages[t.pageIndex]?.components[t.componentIndex];if(!r?.grid||t.rowIndex>=r.grid.cells.length)throw new b("selection");const o=r.grid.colWidthsMm?.length??r.grid.cells.reduce((i,a)=>Math.max(i,a.length),1);if(t.columnIndex>=o)throw new b("selection");const l=r.table,s=e.pages[n.pageIndex]?.components[n.componentIndex]?.table;if(l&&s&&l.id===s.id){const i=s.columnKeys.indexOf(l.columnKeys[t.columnIndex]??"");if(i<0)throw new b("selection");return{grid:l.id,row:ve(r)+t.rowIndex,column:i}}return{grid:`${t.pageIndex}:${t.componentIndex}`,row:t.rowIndex,column:t.columnIndex}}function yn(e,t,n){const r=Ce(e,t.anchor,t.anchor),o=Ce(e,t.focus,t.anchor);if(r.grid!==o.grid)throw new b("selection");const l=(Math.abs(r.row-o.row)+1)*(Math.abs(r.column-o.column)+1);if(!Number.isSafeInteger(l)||l>n)throw new b("limit");return{grid:r.grid,rowStart:Math.min(r.row,o.row),rowEnd:Math.max(r.row,o.row),columnStart:Math.min(r.column,o.column),columnEnd:Math.max(r.column,o.column),origin:e.pages[t.anchor.pageIndex].components[t.anchor.componentIndex].table}}function xn(e){if(!e)return!1;const t=e.replace(/"[^"]*"|\\.|\[(?![hms]+\])[^\]]*\]/gi,"");return/[ymdhs]/i.test(t)}function Mn(e){if(e.valueType==="text"||e.valueType==="boolean"||xn(e.numberFormat))return null;const t=e.value;if(typeof t!="number"||!Number.isFinite(t))return null;if(Number.isInteger(t)&&!Number.isSafeInteger(t))throw new b("precision");return t}function Tn(e,t,n){if(e.seen.has(n))return;e.seen.add(n),e.selected++;const r=t?Mn(t):null;r===null?e.excluded++:e.values.push(r)}function En(e,t,n,r){return r.origin?e.table?.id===r.origin.id:`${t}:${n}`===r.grid}function Sn(e,t,n){return n.origin?n.origin.columnKeys.indexOf(e.table.columnKeys[t]??""):t}function Cn(e,t,n,r){const o=r.origin?ve(e)+t:t,l=Sn(e,n,r);return o<r.rowStart||o>r.rowEnd||l<r.columnStart||l>r.columnEnd?null:`${r.grid}:${o}:${l}`}function Rn(e,t){const n=t.origin?ve(e):0,r=Math.max(0,t.rowStart-n),o=Math.min(e.grid.cells.length,t.rowEnd-n+1);return o>r?o:0}async function Pn(e,t,n,r,o){const l=e.grid;if(t>r.maxScanned)throw new b("limit");const s=l.colWidthsMm?.length??l.cells.reduce((a,c)=>Math.max(a,c.length),1);if(s>r.maxScanned)throw new b("limit");const i=new Map;for(let a=0;a<t;a++){a>0&&a%2048===0&&(await r.yieldToHost(),q(r.signal));let c=0;for(const d of l.cells[a]){for(await ne(r);c<s&&(i.get(c)??0)>a;)c++;if(c>=s)break;const u=Math.max(1,Math.min(d?.colSpan??1,s-c)),m=Math.min(l.cells.length,a+Math.max(1,d?.rowSpan??1));u>1&&await ne(r,u-1);for(let h=c;h<c+u;h++)i.set(h,m);const g=Cn(e,a,c,n);g&&Tn(o,d,g),c+=u}}}async function In(e,t,n){const r={values:[],seen:new Set,excluded:0,selected:0};for(let o=0;o<e.pages.length;o++){await ne(n);const l=e.pages[o];for(let s=0;s<l.components.length;s++){await ne(n);const i=l.components[s];if(!i.grid||!En(i,o,s,t)||i.table&&i.table.role!=="body")continue;const a=Rn(i,t);a&&await Pn(i,a,t,n,r)}}return r}function Y(e){if(!Number.isFinite(e))throw new b("overflow");return e}function An(e){let t=0,n=0;for(const r of e){const o=r-n,l=Y(t+o);n=l-t-o,t=l}return t}async function Re(e,t){let n=[...e],r=new Array(e.length);for(let l=1;l<e.length;l*=2){for(let s=0;s<e.length;s+=l*2){const i=Math.min(s+l,e.length),a=Math.min(s+l*2,e.length);let c=s,d=i;for(let u=s;u<a;u++)r[u]=d>=a||c<i&&n[c]<=n[d]?n[c++]:n[d++],u%2048===0&&(await t.yieldToHost(),q(t.signal))}[n,r]=[r,n]}const o=Math.floor(n.length/2);return n.length%2?n[o]:Y(n[o-1]/2+n[o]/2)}function kn(e){const t=An(e);let n=1/0,r=-1/0;for(const o of e)n=Math.min(n,o),r=Math.max(r,o);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 b("expression");const n=e.toUpperCase().match(/(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?|[A-Z_]+|[()+\-*/]|\S/g)??[];if(!n.length||n.length>64)throw new b("expression");let r=0;function o(i){if(i>16)throw new b("expression");const a=n[r++];if(a==="+"||a==="-")return(a==="-"?-1:1)*o(i+1);if(a==="("){const c=l(0,i+1);if(n[r++]!==")")throw new b("expression");return c}if(a&&/^(?:SUM|AVERAGE|AVG|MIN|MAX|COUNT|MEDIAN)$/.test(a)&&Object.prototype.hasOwnProperty.call(t,a))return Y(t[a]);if(a&&/^(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?$/.test(a))return Y(Number(a));throw new b("expression")}function l(i,a){let c=o(a);for(;r<n.length;){const d=n[r],u=d==="+"||d==="-"?1:d==="*"||d==="/"?2:0;if(!u||u<i)break;r++;const m=l(u+1,a+1);if(d==="/"&&m===0)throw new b("division");c=Y(d==="+"?c+m:d==="-"?c-m:d==="*"?c*m:c/m)}return c}const s=l(1,0);if(r!==n.length)throw new b("expression");return s}function Fn(e){const t=e.maxCells??1e5,n=e.maxScannedCells??2e5,r=e.precision??2;if(![t,n].every(o=>Number.isSafeInteger(o)&&o>=1&&o<=2e6))throw new b("limit");if(!Number.isInteger(r)||r<0||r>12)throw new b("precision");return{maxCells:t,maxScanned:n,precision:r}}async function Ln(e,t,n={}){const r=Fn(n),o={scanned:0,maxScanned:r.maxScanned,signal:n.signal,yieldToHost:n.yieldToHost??(()=>new Promise(a=>setTimeout(a,0)))};q(o.signal);const l=await In(e,yn(e,t,r.maxCells),o),s=n.operation??"sum";if(!["sum","average","min","max","count","median","expression"].includes(s))throw new b("expression");let i=null;if(s==="count")i=l.values.length;else if(l.values.length)if(s==="median")i=await Re(l.values,o);else{const a=kn(l.values);s==="expression"?(/\bMEDIAN\b/i.test(n.expression??"")&&(a.MEDIAN=await Re(l.values,o)),i=Ve(n.expression??"",a)):i=a[s.toUpperCase()]}if(q(o.signal),i!==null&&Number.isInteger(i)&&!Number.isSafeInteger(i))throw new b("precision");return{value:i,formatted:i===null?"—":i.toFixed(r.precision),numericCells:l.values.length,excludedCells:l.excluded,selectedCells:l.selected,precision:r.precision}}exports.DEFAULT_BORDER_PT=L.DEFAULT_BORDER_PT;exports.DEFAULT_FONT_FAMILY=L.DEFAULT_FONT_FAMILY;exports.DEFAULT_FONT_PT=L.DEFAULT_FONT_PT;exports.DEFAULT_STROKE_COLOR=L.DEFAULT_STROKE_COLOR;exports.DEFAULT_TEXT_COLOR=L.DEFAULT_TEXT_COLOR;exports.LINE_HEIGHT=L.LINE_HEIGHT;exports.SCHEMA_VERSION_MACH=L.SCHEMA_VERSION_MACH;exports.PaginateCellLimitError=S.PaginateCellLimitError;exports.PaginatePageLimitError=S.PaginatePageLimitError;exports.ReportSourceError=S.ReportSourceError;exports.countTemplatePages=S.countTemplatePages;exports.createReportSource=S.createReportSource;exports.defineReport=S.defineReport;exports.diffReportTemplates=S.diffReportTemplates;exports.estimateListLayoutCells=S.estimateListLayoutCells;exports.evalStyleRule=S.evalStyleRule;exports.formatValue=S.formatValue;exports.paginateTemplate=S.paginateTemplate;exports.paginateTemplatePages=S.paginateTemplatePages;exports.parseDateLocal=S.parseDateLocal;exports.projectListColumns=S.projectListColumns;exports.reviewReportTemplate=S.reviewReportTemplate;exports.toExcelNumberFormat=S.toExcelNumberFormat;exports.toNumber=S.toNumber;exports.CSS_DPI=f.CSS_DPI;exports.MM_PER_INCH=f.MM_PER_INCH;exports.PAPER_SIZES=f.PAPER_SIZES;exports.mergeComponentStyles=f.mergeComponentStyles;exports.mmToPx=f.mmToPx;exports.mmToPxFactor=f.mmToPxFactor;exports.ptToPx=f.ptToPx;exports.pxToMm=f.pxToMm;exports.resolveBoxBorders=f.resolveBoxBorders;exports.resolveFontSize=f.resolveFontSize;exports.resolveLineHeight=f.resolveLineHeight;exports.resolveStroke=f.resolveStroke;exports.resolveTextColor=f.resolveTextColor;exports.round=f.round;exports.RENDER_PLAN_SCHEMA_VERSION=j.RENDER_PLAN_SCHEMA_VERSION;exports.isImageBackedComponent=j.isImageBackedComponent;exports.isRichText=j.isRichText;exports.assertRenderPlan=re.assertRenderPlan;exports.validateComponent=re.validateComponent;exports.validatePage=re.validatePage;exports.validateRenderPlan=re.validateRenderPlan;exports.datasetJsonSchema=me.datasetJsonSchema;exports.validateDatasetRows=me.validateDatasetRows;exports.charWidthEm=z.charWidthEm;exports.createCanvasMeasurer=z.createCanvasMeasurer;exports.createHeuristicMeasurer=z.createHeuristicMeasurer;exports.heuristicMeasurer=z.heuristicMeasurer;exports.measureTextMm=z.measureTextMm;exports.wrapText=z.wrapText;exports.resolveGridLayout=K.resolveGridLayout;exports.OutputAssetError=W.OutputAssetError;exports.resolvePlanAssets=W.resolvePlanAssets;exports.OutputFidelityError=_.OutputFidelityError;exports.inspectOutputCapabilities=_.inspectOutputCapabilities;exports.reportOutputDiagnostics=_.reportOutputDiagnostics;exports.REPORT_TEMPLATE_DOCUMENT_VERSION=F.REPORT_TEMPLATE_DOCUMENT_VERSION;exports.ReportTemplateError=F.ReportTemplateError;exports.createTemplateRegistry=F.createTemplateRegistry;exports.defineReportTemplate=F.defineReportTemplate;exports.parseReportTemplate=F.parseReportTemplate;exports.serializeReportTemplate=F.serializeReportTemplate;exports.validateReportTemplate=F.validateReportTemplate;exports.validateReportTemplateDocument=F.validateReportTemplateDocument;exports.ReportParamValidationError=V.ReportParamValidationError;exports.assertReportParams=V.assertReportParams;exports.isReportDate=V.isReportDate;exports.reportParamsJsonSchema=V.reportParamsJsonSchema;exports.validateReportParamDefinitions=V.validateReportParamDefinitions;exports.validateReportParams=V.validateReportParams;exports.PageBuilder=_e;exports.ReportCalculationError=b;exports.ReportCellEditError=M;exports.ReportCellFieldError=Ue;exports.ReportTemplateStoreError=$;exports.TemplateBuilder=De;exports.applyReportCellEdit=tn;exports.applyReportCellEditBatch=an;exports.applyReportEditResult=un;exports.calculateReportSelection=Ln;exports.classOf=I;exports.columnsFromContract=It;exports.computePageWindow=ke;exports.createCanvasPager=Rt;exports.createMemoryTemplateStore=Ht;exports.createProviderReport=_t;exports.createReportCellEdit=Jt;exports.createReportCellEditBatch=on;exports.createReportCellResolver=ae;exports.createTableTemplate=Dt;exports.createTemplate=Pt;exports.createTemplateManager=zt;exports.evaluateReportAggregateExpression=Ve;exports.formatReportCellEdit=J;exports.formatReportClipboard=ln;exports.getReportCellContext=ie;exports.measurePageSizePx=oe;exports.parseReportCellFieldInput=bn;exports.parseReportCellInput=se;exports.parseReportClipboard=dn;exports.planFontSizePx=pt;exports.renderComponent=fe;exports.renderPage=Ae;exports.renderPlan=ut;exports.renderPlanToCanvas=Et;exports.renderPlanToCanvasAsync=Ct;exports.renderPlanToImages=Mt;exports.reportCellEditKey=le;exports.resolvePaper=pe;exports.summarizeReportCellEdits=sn;exports.validateReportCellFieldDefinition=Ke;
5
+ `):$.wrapText(t.text??"",t.widthMm,{fontSizePt:d.fontSizePt,bold:c.bold,italic:c.italic,fontFamily:c.fontFamily??o,letterSpacingPt:c.letterSpacing},s).join(`
6
+ `);Pe(e,{text:m,fontSizePx:d.fontSizePx,bold:c.bold??!1,italic:c.italic,color:u.resolveTextColor(c),align:c.align??"left",lineHeight:u.resolveLineHeight(c),letterSpacingPx:u.ptToPx(c.letterSpacing??0,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,d=t.heightMm*n,m=t.style??{};if(W.isImageBackedComponent(t)){const g=l?.get(t.imageData);g?it(e,g,o,s,c,d):ve(e,t,o,s,c,d);return}if(t.grid){ct(e,t.grid,t,o,s,c,d,n,r,i,a);return}switch(t.kind){case"text":{dt(e,t,o,s,c,d,r,i,a);break}case"rect":{const g=u.resolveStroke(m),h=u.resolveBoxBorders(m);m.backgroundColor&&(e.fillStyle=m.backgroundColor,e.fillRect(o,s,c,d)),h.inner&&(e.strokeStyle=g.color,e.lineWidth=u.ptToPx(g.widthPt,r),lt(e,h,o,s,c,d));break}case"line":{const g=u.resolveStroke({...m,borderColor:m.lineColor??m.borderColor});e.strokeStyle=g.color,e.lineWidth=u.ptToPx(g.widthPt,r),e.beginPath();const h=t.lineDirection==="up"?s+d:t.lineDirection==="down"?s:s+d/2,w=t.lineDirection==="up"?s:t.lineDirection==="down"?s+d:s+d/2;e.moveTo(o,h),e.lineTo(o+c,w),e.stroke();break}case"ellipse":{const g=u.resolveStroke(m);e.strokeStyle=g.color,e.lineWidth=u.ptToPx(g.widthPt,r),m.backgroundColor&&(e.fillStyle=m.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:ve(e,t,o,s,c,d);break}}function ve(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 mt(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.");L(t.signal);const a=await j.resolvePlanAssets(e,{...t,format:"canvas"});e=a.plan;const l=[...a.diagnostics,...O.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++){L(t.signal);const m=await Ae(e.pages[d],d,i,l);try{s.push(await ut(m,o,r,t.signal))}finally{m.width=0,m.height=0}await Be.outputCheckpoint(t,s.length,c-Math.max(0,t.start??0)+1)}return L(t.signal),{blobs:s,diagnostics:l}}function ut(e,t,n,r){return L(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 gt(e,t={}){if(L(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*de,a=t.fontFamily??I.DEFAULT_FONT_FAMILY,l=t.measurer??$.heuristicMeasurer,o=Math.max(0,t.start??0),s=Math.min(e.pages.length-1,t.end??e.pages.length-1),c=[],d=O.reportOutputDiagnostics(e,"canvas",t),m=ht(e,o,s);for(const g of m)O.notifyOutputDiagnostic(g,t),d.push(g);if(t.fidelity==="strict"&&m.length)throw new O.OutputFidelityError(d);for(let g=o;g<=s;g++){L(t.signal);const h=e.pages[g],{canvas:w,ctx:b}=Ce(h,n,r,t.maxCanvasPixels);for(const _ of h.components)me(b,_,i,r,a,l);c.push(w)}return{canvases:c,diagnostics:d}}function ht(e,t,n){return n<t?[]:e.pages.slice(t,n+1).flatMap((r,i)=>r.components.flatMap((a,l)=>W.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 pt(e,t={}){if(typeof document>"u")throw new Error("renderPlanToCanvasAsync 需要浏览器环境(Node 请使用 PDF 或 XLSX 输出)");L(t.signal);const n=await j.resolvePlanAssets(e,{...t,format:"canvas"});e=n.plan;const r=[...n.diagnostics,...O.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 Ae(e.pages[l],l,t,r));return{canvases:i,diagnostics:r}}async function Ae(e,t,n,r){const i=n.dpr??(typeof devicePixelRatio=="number"?devicePixelRatio:1),a=n.dpi??96,l=n.fontFamily??I.DEFAULT_FONT_FAMILY,o=await Ie(e,t,n,r);L(n.signal);const{canvas:s,ctx:c}=Ce(e,i,a,n.maxCanvasPixels);for(const d of e.components)me(c,d,a/25.4,a,l,n.measurer??$.heuristicMeasurer,o);return s}async function Ie(e,t,n,r){const i=n.imageLoader??tt;return rt(e,async(a,l)=>{try{return await i(a,l)}catch(o){if(l?.aborted)throw o;const s=e.components.findIndex(m=>m.imageData===a),c=e.components[s],d={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(d),O.notifyOutputDiagnostic(d,n),o}},n.signal)}function ft(e,t={}){const n=t.dpr??(typeof devicePixelRatio=="number"?devicePixelRatio:1),r=t.dpi??96,i=r/96*de,a=t.fontFamily??I.DEFAULT_FONT_FAMILY,l=t.measurer??$.heuristicMeasurer,o=t.overscan??1,s=t.gapPx??18,c=t.pagesPerFrame??1,d=e.pages.map(p=>p.pageHeightMm*i),m=Math.max(1,...e.pages.map(p=>p.pageWidthMm*i)),g={start:0,end:-1};let h=null,w=null,b=null,_=null,A=[],C=0,D=[],X=0,G=new AbortController;const he=[];function $e(){const p=h;p.innerHTML="",w=document.createElement("div"),w.style.cssText=`width:${m}px;margin:0 auto;`,b=document.createElement("div"),_=document.createElement("div"),w.appendChild(b),A=[];const x=Math.min(e.pages.length,3+o*2);for(let B=0;B<x;B++){const M=document.createElement("div");M.style.cssText=`margin:0 auto ${s}px;box-shadow:0 2px 8px rgba(0,0,0,.35);background:#fff;`,w.appendChild(M),A.push(M)}w.appendChild(_),p.appendChild(w)}async function _e(p,x){const B=X,M=await j.resolvePlanAssets(e,{...t,signal:G.signal,format:"canvas",start:x,end:x});he.push(...M.diagnostics);const P=M.plan.pages[x],Z=await Ie(P,x,{...t,signal:G.signal},he);if(B!==X||!h)return;const{widthPx:ie,heightPx:oe}=ne(P,r);let H=p.firstElementChild;(!H||H.tagName!=="CANVAS")&&(H=document.createElement("canvas"),p.innerHTML="",p.appendChild(H));const fe=Se(P,n,r,t.maxCanvasPixels);H.width=fe.width,H.height=fe.height,H.style.width=`${ie}px`,H.style.height=`${oe}px`;const U=H.getContext("2d");if(U){U.setTransform(1,0,0,1,0,0),U.scale(n,n),U.fillStyle="#ffffff",U.fillRect(0,0,ie,oe);for(const ze of P.components)me(U,ze,i,r,a,l,Z);H.dataset.canvasPage=String(x),p.style.height=`${oe}px`,p.style.width=`${ie}px`}}function He(p){X++,g.start=p.start,g.end=p.end,b.style.height=`${p.start*s+d.slice(0,p.start).reduce((M,P)=>M+P,0)}px`;const x=e.pages.length-1-p.end;_.style.height=`${x*s+d.slice(p.end+1).reduce((M,P)=>M+P,0)}px`;const B=p.end-p.start+1;A.forEach((M,P)=>{if(P<B){M.style.display="";const Z=p.start+P;M.style.height=`${d[Z]??0}px`}else M.style.display="none"}),D=[];for(let M=p.start;M<=p.end;M++){const P=A[M-p.start];if(!P)continue;P.firstElementChild?.dataset?.canvasPage!==String(M)&&D.push(M)}re()}function re(){C||D.length===0||(C=requestAnimationFrame(()=>{C=0;let p=Math.max(1,c);for(;D.length>0&&p-- >0;){const x=D.shift(),B=A[x-g.start];B&&_e(B,x).catch(()=>{})}D.length>0&&re()}))}function K(){C||(C=requestAnimationFrame(()=>{C=0;const p=h,x=Re({pageHeightsPx:d,viewportHeightPx:p.clientHeight,scrollTopPx:p.scrollTop,overscan:o,gapPx:s});x.start!==g.start||x.end!==g.end?He(x):re()}))}let J=null;return{attach(p){if(typeof document>"u")throw new Error("createCanvasPager 需要浏览器环境(SSR 请在客户端钩子中调用 attach)");L(t.signal),G=new AbortController,t.signal?.addEventListener("abort",pe,{once:!0}),O.reportOutputDiagnostics(e,"canvas",t),h=p,$e(),p.addEventListener("scroll",K,{passive:!0}),typeof ResizeObserver<"u"&&(J=new ResizeObserver(()=>K()),J.observe(p)),K()},destroy(){X++,G.abort(),t.signal?.removeEventListener("abort",pe),C&&cancelAnimationFrame(C),C=0,J?.disconnect(),J=null,h?.removeEventListener("scroll",K),D=[],w?.remove(),h=null},window(){return{...g}}};function pe(){G.abort(t.signal?.reason)}}function ue(e,t,n){let r,i;if(typeof e=="string"){const a=u.PAPER_SIZES[e];if(!a)throw new Error(`未知纸张预设 "${e}"(可用:${Object.keys(u.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 Le{constructor(){this.pages=[],this.pending=null,this.templateParams=void 0}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}=ue(t,typeof n=="number"?n:void 0,a.landscape),s=a.margins??{};return this.pending=new ke(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,pages:this.pages}:{pages:this.pages}}}class ke{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 wt(){return new Le}function vt(e,t={}){return ae.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 k(e,t,n=!1){if(!Number.isFinite(e)||(n?e<0:e<=0))throw new Error(`${t} 必须是有限${n?"非负":"正"}数`)}function Q(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 yt(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 k(n,"columnWidthMm"),{layout:t,columnWidthMm:n}}function bt(e){const t=e.paper===void 0?"a4":e.paper;if(typeof t!="string"&&(typeof t!="object"||t===null)||e.landscape!==void 0&&typeof e.landscape!="boolean")throw new Error("paper 必须是纸张预设名或 { widthMm, heightMm } 对象,landscape 必须是布尔值");if(typeof t=="string"&&!Object.prototype.hasOwnProperty.call(u.PAPER_SIZES,t))throw new Error(`未知纸张预设 "${t}"(可用:${Object.keys(u.PAPER_SIZES).join("/")})`);const n=ue(t,void 0,e.landscape),r=n.widthMm,i=n.heightMm;return k(r,"纸张 widthMm"),k(i,"纸张 heightMm"),{widthMm:r,heightMm:i}}function Mt(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))k(i,r,!0);return n}function Et(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;k(r,"titleHeightMm"),k(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 Tt(e){if(e.listOptions!==void 0&&(!e.listOptions||typeof e.listOptions!="object"||Array.isArray(e.listOptions)))throw new Error("listOptions 必须是列表配置对象");const t=e.listOptions??{};Q(t.align,"listOptions.align",!0),Q(t.headerAlign,"listOptions.headerAlign",!1);for(const n of["fontSizePt","rowHeightMm","paddingMm"]){const r=t[n];r!==void 0&&k(r,`listOptions.${n}`,n==="paddingMm")}return t}function xt(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`);Q(i.align,`columns[${r}].align`,!0),Q(i.headerAlign,`columns[${r}].headerAlign`,!1),i.flex!==void 0&&k(i.flex,`columns[${r}].flex`),i.widthMm!==void 0?(k(i.widthMm,`columns[${r}].widthMm`),t+=i.widthMm):n=Math.max(n,i.flex??1)}return{fixedWidthMm:t,maxFlex:n}}function Rt(e,t,n,r){const{fixedWidthMm:i,maxFlex:a}=xt(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,...m},g)=>{const h=c??(t==="wide"?n*(d??1):l*((d??1)/a)/o);return k(h,`columns[${g}] 分配后的 widthMm`),{...m,widthMm:h}}),fixedWidthMm:i,maxFlex:a}}function St(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}=yt(e),r=bt(e);let i=r.widthMm;const a=r.heightMm,l=Mt(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:m,titleSpaceMm:g}=Et(e,s),h=Tt(e),{columns:w,fixedWidthMm:b,maxFlex:_}=Rt(e,t,n,o);t==="wide"&&(o=w.reduce((C,D)=>C+D.widthMm,0),k(o,"宽表总列宽"),i=o+l.marginLeftMm+l.marginRightMm,k(i,"宽表总宽度"));const A={widthMm:i,heightMm:a,...l,components:[],...t==="wide"?{layout:t}:{}};return m&&A.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}}),A.components.push({align:"auto",headerAlign:"center",...h,kind:"list",...t==="wide"?{layout:t}:{},...m?{title:e.title}:{},dataset:c,columns:w,leftMm:l.marginLeftMm,topMm:l.marginTopMm+g,widthMm:t==="wide"||_>0?o:b}),e.params===void 0?{pages:[A]}:{params:e.params,pages:[A]}}function Ct(e){return e}class F extends Error{constructor(t,n){super(n),this.code=t,this.name="ReportTemplateStoreError"}}function N(e){return JSON.parse(JSON.stringify(e))}function R(e){if(!e?.aborted)return;const t=new Error("模板操作已取消");throw t.name="AbortError",t}function ye(e){const t=e?Number(e.revision):0;if(!Number.isSafeInteger(t)||t<0||t>=Number.MAX_SAFE_INTEGER)throw new F("history","修订号无效或已达上限");return String(t+1)}function Pt(e,t={}){const n=async(l,o)=>{R(o);const s=await e.read(l,o);return R(o),s?N(s):void 0},r=async(l,o)=>{const s=await n(l,o.signal);if((s?.revision??null)!==o.expectedRevision)throw new F("conflict","模板已变化,请重新读取后提交");return s},i=async(l,o,s)=>{if(R(o.signal),!await e.compareAndSwap(l.id,o.expectedRevision,N(l),{signal:o.signal,...s?{publication:N(s)}:{}}))throw new F("conflict","模板已被其他请求更新");return N(l)},a=async(l,o,s,c)=>{if(t.beforePublish){R(s.signal);const h=await t.beforePublish({document:T.parseReportTemplate(o),previous:l.published?T.parseReportTemplate(l.published):void 0,signal:s.signal});if(!h||h.ok!==!0)throw new F("review",h?.issues?.find(w=>w.severity==="error")?.message??"模板发布检查未通过");R(s.signal)}const d=ye(l),m=T.parseReportTemplate({...o,revision:d}),g={revision:d,document:m,publishedAt:(t.now?.()??new Date).toISOString()};return c!==void 0&&(g.restoredFrom=c),i({id:l.id,revision:d,publishedRevision:d,published:m},s,g)};return{list:async l=>{R(l);const o=await e.list(l);return R(l),N(o)},get:async(l,o={})=>{const s=await n(l,o.signal),c=o.draft?s?.draft:s?.published;return c?T.parseReportTemplate(c):void 0},history:async(l,o)=>{R(o);const s=await e.history(l,o);return R(o),N(s)},saveDraft:async(l,o)=>{o={...o},R(o.signal);const s=T.parseReportTemplate(t.migrate?await t.migrate(l):l),c=await r(s.id,o),d=ye(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 F("missing","模板不存在");if(!s.draft)throw new F("draft","没有可发布的草稿");return a(s,s.draft,o)},rollback:async(l,o,s)=>{s={...s};const c=await r(l,s);if(!c)throw new F("missing","模板不存在");R(s.signal);const d=await e.getVersion(l,o,s.signal);if(!d)throw new F("history","历史修订不存在");return a(c,d.document,s,o)}}}function At(){const e=new Map,t=new Map;return{read:async(n,r)=>{R(r);const i=e.get(n);return i?N(i):void 0},list:async n=>(R(n),Array.from(e.values(),({id:r,revision:i,publishedRevision:a})=>({id:r,revision:i,...a?{publishedRevision:a}:{}}))),history:async(n,r)=>(R(r),Array.from(t.get(n)?.values()??[],i=>N(i))),getVersion:async(n,r,i)=>{R(i);const a=t.get(n)?.get(r);return a?N(a):void 0},compareAndSwap:async(n,r,i,a)=>{if(R(a.signal),(e.get(n)?.revision??null)!==r)return!1;if(i.id!==n)throw new F("history","状态 ID 与存储 ID 不一致");const l=N(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 F("history","发布修订不可覆盖,且必须与状态修订和模板 ID 一致");s.set(o.revision,N(o)),t.set(n,s)}return e.set(n,l),!0}}}function It(e,t){const n=T.parseReportTemplate(e);if(t.id===n.id)throw new Error("复制模板应使用新的 ID");const{revision:r,...i}=n;return T.parseReportTemplate({...i,id:t.id,name:t.name})}function Lt(e){if(!Array.isArray(e)||e.length>1e3)throw new RangeError("本地模板目录最多 1000 项");const t=new Map,n=[];for(const r of e){const i=T.parseReportTemplate(r.document);if(t.has(i.id))throw new Error(`模板 ID 重复:${i.id}`);if(r.category!==void 0&&(typeof r.category!="string"||r.category.length>128)||r.tags!==void 0&&(!Array.isArray(r.tags)||r.tags.length>20||r.tags.some(o=>typeof o!="string"||o.length>128)))throw new TypeError("模板分类和标签无效");const{template:a,...l}=i;t.set(i.id,i),n.push({...l,...r.category?{category:r.category}:{},...r.tags?{tags:[...r.tags]}:{}})}return n.sort((r,i)=>r.id<i.id?-1:1),{search:async r=>{be(r.signal);const i=r.limit??30;if(!Number.isSafeInteger(i)||i<1||i>100)throw new RangeError("模板每页数量应为 1–100");const a=r.query?.trim().toLocaleLowerCase()??"",l=n.filter(s=>(!r.category||s.category===r.category)&&(!r.cursor||s.id>r.cursor)&&(!a||[s.id,s.name,s.description,...s.tags??[]].some(c=>c?.toLocaleLowerCase().includes(a)))),o=new Map;for(const s of n)s.category&&o.set(s.category,(o.get(s.category)??0)+1);return JSON.parse(JSON.stringify({items:l.slice(0,i),...l.length>i?{next:l[i-1].id}:{},categories:Array.from(o,([s,c])=>({id:s,label:s,count:c}))}))},get:async(r,i)=>{be(i.signal);const a=t.get(r);return a?T.parseReportTemplate(a):void 0}}}function be(e){if(!e?.aborted)return;const t=new Error("模板目录操作已取消");throw t.name="AbortError",t}function kt(e){return e.map(t=>t.map(n=>/[\t\r\n"]/.test(n)?`"${n.replace(/"/g,'""')}"`:n).join(" ")).join(`\r
7
+ `)}function Dt(e,t){const n=e[e.length-1];e.length>1&&n?.length===1&&n[0]===""&&/[\r\n]$/.test(t)&&e.pop()}function Ft(e,t=1e4){if(e.length>4*1024*1024)throw new Error("Clipboard text limit exceeded");const n=[[]];let r="",i=!1,a=!1,l=0;function o(){if(++l>t)throw new Error("Clipboard cell limit exceeded");n[n.length-1].push(r),r="",a=!1}for(let s=0;s<e.length;s++){const c=e[s];if(i){if(c!=='"'){r+=c;continue}if(e[s+1]==='"'){r+='"',s++;continue}i=!1,a=!0;continue}if(c==='"'&&!r&&!a){i=!0;continue}if(c===" "){o();continue}if(c==="\r"||c===`
8
+ `){o(),n.push([]),c==="\r"&&e[s+1]===`
9
+ `&&s++;continue}if(a)throw new Error("Invalid quoted clipboard value");r+=c}if(i)throw new Error("Unclosed clipboard quote");return o(),Dt(n,e),n}class De 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 De(t,e,n)}function Fe(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 Nt(e){const[t="",n="0"]=String(e).toLowerCase().split("e");return Math.max(0,(t.split(".")[1]?.length??0)-Number(n))}function Ot(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&&Nt(t)>e.precision&&v(e,"precision",e.precision)}function $t(e,t){Fe(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 _t(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 Ht(e){[e.min,e.max].some(t=>t!==void 0&&!Fe(t))&&v(e,"definition"),e.min!==void 0&&e.max!==void 0&&e.min>e.max&&v(e,"definition")}function zt(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 Bt(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 Ne(e,t){(!t||typeof t!="object"||Array.isArray(t)||!["text","number","boolean","enum","date"].includes(t.type))&&v(t??{type:"text"},"definition"),Bt(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"&&_t(t),t.type==="text"&&t.maxLength!==void 0&&(!Number.isInteger(t.maxLength)||t.maxLength<0)&&v(t,"definition"),t.type==="date"&&Ht(t),t.type==="enum"&&zt(e,t)}function Wt(e,t,n){if(!e.editable)throw new f.ReportCellEditError("readonly");n&&Ne(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"&&Ot(n,r),n.type==="date"&&$t(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 y extends Error{constructor(t){super(`Report calculation: ${t}`),this.code=t,this.name="ReportCalculationError"}}function q(e){if(!e?.aborted)return;const t=new Error("Calculation cancelled");throw t.name="AbortError",t}async function ee(e,t=1){const n=Math.floor(e.scanned/2048);if(e.scanned+=t,e.scanned>e.maxScanned)throw new y("limit");q(e.signal),Math.floor(e.scanned/2048)>n&&(await e.yieldToHost(),q(e.signal))}function ge(e){return e.table?.role==="header"?-Math.max(1,e.grid?.cells.length??1):e.table?.rowIndex??0}function Me(e,t,n){if(![t.pageIndex,t.componentIndex,t.rowIndex,t.columnIndex].every(o=>Number.isSafeInteger(o)&&o>=0))throw new y("selection");const r=e.pages[t.pageIndex]?.components[t.componentIndex];if(!r?.grid||t.rowIndex>=r.grid.cells.length)throw new y("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 y("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 y("selection");return{grid:a.id,row:ge(r)+t.rowIndex,column:o}}return{grid:`${t.pageIndex}:${t.componentIndex}`,row:t.rowIndex,column:t.columnIndex}}function jt(e,t,n){const r=Me(e,t.anchor,t.anchor),i=Me(e,t.focus,t.anchor);if(r.grid!==i.grid)throw new y("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 y("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 Ut(e){if(!e)return!1;const t=e.replace(/"[^"]*"|\\.|\[(?![hms]+\])[^\]]*\]/gi,"");return/[ymdhs]/i.test(t)}function qt(e){if(e.valueType==="text"||e.valueType==="boolean"||Ut(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 y("precision");return t}function Gt(e,t,n){if(e.seen.has(n))return;e.seen.add(n),e.selected++;const r=t?qt(t):null;r===null?e.excluded++:e.values.push(r)}function Vt(e,t,n,r){return r.origin?e.table?.id===r.origin.id:`${t}:${n}`===r.grid}function Yt(e,t,n){return n.origin?n.origin.columnKeys.indexOf(e.table.columnKeys[t]??""):t}function Xt(e,t,n,r){const i=r.origin?ge(e)+t:t,a=Yt(e,n,r);return i<r.rowStart||i>r.rowEnd||a<r.columnStart||a>r.columnEnd?null:`${r.grid}:${i}:${a}`}function Kt(e,t){const n=t.origin?ge(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 Jt(e,t,n,r,i){const a=e.grid;if(t>r.maxScanned)throw new y("limit");const l=a.colWidthsMm?.length??a.cells.reduce((s,c)=>Math.max(s,c.length),1);if(l>r.maxScanned)throw new y("limit");const o=new Map;for(let s=0;s<t;s++){s>0&&s%2048===0&&(await r.yieldToHost(),q(r.signal));let c=0;for(const d of a.cells[s]){for(await ee(r);c<l&&(o.get(c)??0)>s;)c++;if(c>=l)break;const m=Math.max(1,Math.min(d?.colSpan??1,l-c)),g=Math.min(a.cells.length,s+Math.max(1,d?.rowSpan??1));m>1&&await ee(r,m-1);for(let w=c;w<c+m;w++)o.set(w,g);const h=Xt(e,s,c,n);h&&Gt(i,d,h),c+=m}}}async function Zt(e,t,n){const r={values:[],seen:new Set,excluded:0,selected:0};for(let i=0;i<e.pages.length;i++){await ee(n);const a=e.pages[i];for(let l=0;l<a.components.length;l++){await ee(n);const o=a.components[l];if(!o.grid||!Vt(o,i,l,t)||o.table&&o.table.role!=="body")continue;const s=Kt(o,t);s&&await Jt(o,s,t,n,r)}}return r}function V(e){if(!Number.isFinite(e))throw new y("overflow");return e}function Qt(e){let t=0,n=0;for(const r of e){const i=r-n,a=V(t+i);n=a-t-i,t=a}return t}async function Ee(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 m=l;m<s;m++)r[m]=d>=s||c<o&&n[c]<=n[d]?n[c++]:n[d++],m%2048===0&&(await t.yieldToHost(),q(t.signal))}[n,r]=[r,n]}const i=Math.floor(n.length/2);return n.length%2?n[i]:V(n[i-1]/2+n[i]/2)}function en(e){const t=Qt(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 Oe(e,t){if(typeof e!="string"||e.length>256)throw new y("expression");const n=e.toUpperCase().match(/(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?|[A-Z_]+|[()+\-*/]|\S/g)??[];if(!n.length||n.length>64)throw new y("expression");let r=0;function i(o){if(o>16)throw new y("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 y("expression");return c}if(s&&/^(?:SUM|AVERAGE|AVG|MIN|MAX|COUNT|MEDIAN)$/.test(s)&&Object.prototype.hasOwnProperty.call(t,s))return V(t[s]);if(s&&/^(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?$/.test(s))return V(Number(s));throw new y("expression")}function a(o,s){let c=i(s);for(;r<n.length;){const d=n[r],m=d==="+"||d==="-"?1:d==="*"||d==="/"?2:0;if(!m||m<o)break;r++;const g=a(m+1,s+1);if(d==="/"&&g===0)throw new y("division");c=V(d==="+"?c+g:d==="-"?c-g:d==="*"?c*g:c/g)}return c}const l=a(1,0);if(r!==n.length)throw new y("expression");return l}function tn(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 y("limit");if(!Number.isInteger(r)||r<0||r>12)throw new y("precision");return{maxCells:t,maxScanned:n,precision:r}}async function nn(e,t,n={}){const r=tn(n),i={scanned:0,maxScanned:r.maxScanned,signal:n.signal,yieldToHost:n.yieldToHost??(()=>new Promise(s=>setTimeout(s,0)))};q(i.signal);const a=await Zt(e,jt(e,t,r.maxCells),i),l=n.operation??"sum";if(!["sum","average","min","max","count","median","expression"].includes(l))throw new y("expression");let o=null;if(l==="count")o=a.values.length;else if(a.values.length)if(l==="median")o=await Ee(a.values,i);else{const s=en(a.values);l==="expression"?(/\bMEDIAN\b/i.test(n.expression??"")&&(s.MEDIAN=await Ee(a.values,i)),o=Oe(n.expression??"",s)):o=s[l.toUpperCase()]}if(q(i.signal),o!==null&&Number.isInteger(o)&&!Number.isSafeInteger(o))throw new y("precision");return{value:o,formatted:o===null?"—":o.toFixed(r.precision),numericCells:a.values.length,excludedCells:a.excluded,selectedCells:a.selected,precision:r.precision}}exports.DEFAULT_BORDER_PT=I.DEFAULT_BORDER_PT;exports.DEFAULT_FONT_FAMILY=I.DEFAULT_FONT_FAMILY;exports.DEFAULT_FONT_PT=I.DEFAULT_FONT_PT;exports.DEFAULT_STROKE_COLOR=I.DEFAULT_STROKE_COLOR;exports.DEFAULT_TEXT_COLOR=I.DEFAULT_TEXT_COLOR;exports.LINE_HEIGHT=I.LINE_HEIGHT;exports.SCHEMA_VERSION_MACH=I.SCHEMA_VERSION_MACH;exports.evalStyleRule=Y.evalStyleRule;exports.formatValue=Y.formatValue;exports.parseDateLocal=Y.parseDateLocal;exports.toExcelNumberFormat=Y.toExcelNumberFormat;exports.toNumber=Y.toNumber;exports.CSS_DPI=u.CSS_DPI;exports.MM_PER_INCH=u.MM_PER_INCH;exports.PAPER_SIZES=u.PAPER_SIZES;exports.mergeComponentStyles=u.mergeComponentStyles;exports.mmToPx=u.mmToPx;exports.mmToPxFactor=u.mmToPxFactor;exports.ptToPx=u.ptToPx;exports.pxToMm=u.pxToMm;exports.resolveBoxBorders=u.resolveBoxBorders;exports.resolveFontSize=u.resolveFontSize;exports.resolveLineHeight=u.resolveLineHeight;exports.resolveStroke=u.resolveStroke;exports.resolveTextColor=u.resolveTextColor;exports.round=u.round;exports.RENDER_PLAN_SCHEMA_VERSION=W.RENDER_PLAN_SCHEMA_VERSION;exports.isImageBackedComponent=W.isImageBackedComponent;exports.isRichText=W.isRichText;exports.assertRenderPlan=te.assertRenderPlan;exports.validateComponent=te.validateComponent;exports.validatePage=te.validatePage;exports.validateRenderPlan=te.validateRenderPlan;exports.datasetJsonSchema=ae.datasetJsonSchema;exports.validateDatasetRows=ae.validateDatasetRows;exports.charWidthEm=$.charWidthEm;exports.createCanvasMeasurer=$.createCanvasMeasurer;exports.createHeuristicMeasurer=$.createHeuristicMeasurer;exports.heuristicMeasurer=$.heuristicMeasurer;exports.measureTextMm=$.measureTextMm;exports.wrapText=$.wrapText;exports.PaginateCellLimitError=f.PaginateCellLimitError;exports.PaginatePageLimitError=f.PaginatePageLimitError;exports.ReportCellEditError=f.ReportCellEditError;exports.ReportSourceError=f.ReportSourceError;exports.applyReportCellEdit=f.applyReportCellEdit;exports.applyReportCellEditBatch=f.applyReportCellEditBatch;exports.applyReportEditResult=f.applyReportEditResult;exports.countTemplatePages=f.countTemplatePages;exports.createReportCellEdit=f.createReportCellEdit;exports.createReportCellEditBatch=f.createReportCellEditBatch;exports.createReportCellResolver=f.createReportCellResolver;exports.createReportEditSession=f.createReportEditSession;exports.createReportSource=f.createReportSource;exports.defineReport=f.defineReport;exports.diffReportTemplates=f.diffReportTemplates;exports.estimateListLayoutCells=f.estimateListLayoutCells;exports.formatReportCellEdit=f.formatReportCellEdit;exports.getReportCellContext=f.getReportCellContext;exports.getReportEditSession=f.getReportEditSession;exports.paginateTemplate=f.paginateTemplate;exports.paginateTemplatePages=f.paginateTemplatePages;exports.parseReportCellInput=f.parseReportCellInput;exports.projectListColumns=f.projectListColumns;exports.registerReportEditSession=f.registerReportEditSession;exports.relocateReportCellEdits=f.relocateReportCellEdits;exports.reportCellEditKey=f.reportCellEditKey;exports.reviewReportTemplate=f.reviewReportTemplate;exports.summarizeReportCellEdits=f.summarizeReportCellEdits;exports.resolveGridLayout=se.resolveGridLayout;exports.OutputAssetError=j.OutputAssetError;exports.resolvePlanAssets=j.resolvePlanAssets;exports.OutputFidelityError=O.OutputFidelityError;exports.inspectOutputCapabilities=O.inspectOutputCapabilities;exports.reportOutputDiagnostics=O.reportOutputDiagnostics;exports.REPORT_TEMPLATE_DOCUMENT_VERSION=T.REPORT_TEMPLATE_DOCUMENT_VERSION;exports.ReportTemplateError=T.ReportTemplateError;exports.createTemplateRegistry=T.createTemplateRegistry;exports.defineReportTemplate=T.defineReportTemplate;exports.parseReportTemplate=T.parseReportTemplate;exports.serializeReportTemplate=T.serializeReportTemplate;exports.validateReportTemplate=T.validateReportTemplate;exports.validateReportTemplateDocument=T.validateReportTemplateDocument;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.TreeRowLimitError=le.TreeRowLimitError;exports.createTreeTable=le.createTreeTable;exports.validateTreeOptions=le.validateTreeOptions;exports.PageBuilder=ke;exports.ReportCalculationError=y;exports.ReportCellFieldError=De;exports.ReportTemplateStoreError=F;exports.TemplateBuilder=Le;exports.calculateReportSelection=nn;exports.classOf=S;exports.cloneReportTemplate=It;exports.columnsFromContract=vt;exports.computePageWindow=Re;exports.createCanvasPager=ft;exports.createLocalTemplateCatalog=Lt;exports.createMemoryTemplateStore=At;exports.createProviderReport=Ct;exports.createTableTemplate=St;exports.createTemplate=wt;exports.createTemplateManager=Pt;exports.evaluateReportAggregateExpression=Oe;exports.formatReportClipboard=kt;exports.measurePageSizePx=ne;exports.parseReportCellFieldInput=Wt;exports.parseReportClipboard=Ft;exports.planFontSizePx=ot;exports.renderComponent=ce;exports.renderPage=xe;exports.renderPlan=et;exports.renderPlanToCanvas=gt;exports.renderPlanToCanvasAsync=pt;exports.renderPlanToImages=mt;exports.resolvePaper=ue;exports.validateReportCellFieldDefinition=Ne;