@agile-team/mach-report 2.8.3 → 2.9.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.
- package/README.md +28 -10
- package/dist/ExcelBindingWizard-DiaxvWpQ.cjs +1 -0
- package/dist/ExcelBindingWizard-RLJIXKKG.js +816 -0
- package/dist/{ReportPreview-DRBAUkxj.js → ReportPreview-B5ZNEasW.js} +23 -22
- package/dist/ReportPreview-DRtVPUYo.cjs +6 -0
- package/dist/RuleEditor-N4qnMZ-Z.cjs +1 -0
- package/dist/RuleEditor-ynnUEK0s.js +1575 -0
- package/dist/TemplateReviewPanel-C_Lmzis6.cjs +1 -0
- package/dist/TemplateReviewPanel-Cn32OY4_.js +173 -0
- package/dist/{_plugin-vue_export-helper-DPbiz14D.js → _plugin-vue_export-helper-8SL1F89S.js} +2 -2
- package/dist/analytics.cjs +1 -1
- package/dist/analytics.d.cts +188 -5
- package/dist/analytics.d.ts +188 -5
- package/dist/analytics.js +68 -202
- package/dist/{assets-B9qJku3V.js → assets-DDsfEi8R.js} +3 -3
- package/dist/{assets-RZan7EyL.cjs → assets-ahTRUXRk.cjs} +1 -1
- package/dist/binding-preview-B5834rml.cjs +2 -0
- package/dist/binding-preview-ChXjN5L5.js +649 -0
- package/dist/{capabilities-joSutDF8.js → capabilities-Cm9hZ3uV.js} +5 -5
- package/dist/{capabilities-xGTpnPjJ.cjs → capabilities-DYzWL7KS.cjs} +1 -1
- package/dist/dataset-BkRmwgeJ.cjs +1 -0
- package/dist/dataset-H5pFuQGU.js +121 -0
- package/dist/defaults-DXhiM1ZD.js +10 -0
- package/dist/defaults-xhmcLLrf.cjs +1 -0
- package/dist/designer.cjs +2 -1
- package/dist/designer.d.cts +1391 -6
- package/dist/designer.d.ts +1391 -6
- package/dist/designer.js +2636 -673
- package/dist/grid-geometry-BNptEcMm.js +65 -0
- package/dist/grid-geometry-CZ_cYB6O.cjs +1 -0
- package/dist/import-template-CNMLJSQw.js +23030 -0
- package/dist/import-template-CpxunKVp.cjs +29 -0
- package/dist/index.cjs +7 -7
- package/dist/index.d.cts +202 -3
- package/dist/index.d.ts +202 -3
- package/dist/index.js +554 -535
- package/dist/matrix-CNPDJxED.js +745 -0
- package/dist/matrix-Div9Ilh3.cjs +1 -0
- package/dist/pdf.cjs +46 -46
- package/dist/pdf.d.cts +2 -0
- package/dist/pdf.d.ts +2 -0
- package/dist/pdf.js +17 -16
- package/dist/{plugin-BurDDMcd.js → plugin-BWwIgZXV.js} +1 -1
- package/dist/{plugin-DSFu51Ua.cjs → plugin-Dg-J1Rbm.cjs} +1 -1
- package/dist/progress-7OSZbFok.js +39 -0
- package/dist/progress-BnLiS5eH.cjs +1 -0
- package/dist/render-plan-7xpGrCEl.cjs +1 -0
- package/dist/render-plan-Ck6koX9L.js +13 -0
- package/dist/server/node.d.cts +62 -0
- package/dist/server/node.d.ts +62 -0
- package/dist/server-node.cjs +1 -1
- package/dist/server-node.js +373 -145
- package/dist/server.cjs +1 -1
- package/dist/server.d.cts +311 -0
- package/dist/server.d.ts +311 -0
- package/dist/server.js +590 -186
- package/dist/{style-Dv5o_x6b.js → style-CQ1PK8ZB.js} +5 -5
- package/dist/style-UgIJSA1F.cjs +1 -0
- package/dist/style.css +1 -1
- package/dist/template-registry-CHMYZ7SD.cjs +1 -0
- package/dist/template-registry-R61AMCr0.js +433 -0
- package/dist/template-review-hvWWQFsi.js +1027 -0
- package/dist/template-review-jEcOfmGr.cjs +1 -0
- package/dist/textwrap-CWHyzkBH.cjs +4 -0
- package/dist/{textwrap-DOl04hCQ.js → textwrap-DE1kgcJB.js} +1 -1
- package/dist/{validate-DfHPD8wX.cjs → validate-BDiMqkJC.cjs} +1 -1
- package/dist/{validate-S6CgIm5d.js → validate-DWPF7icl.js} +13 -13
- package/dist/vue/async.d.cts +186 -0
- package/dist/vue/async.d.ts +186 -0
- package/dist/vue/index.d.cts +271 -3
- package/dist/vue/index.d.ts +271 -3
- package/dist/vue-async.cjs +1 -1
- package/dist/vue-async.js +3 -3
- package/dist/vue.cjs +1 -1
- package/dist/vue.js +4 -4
- package/dist/worker.cjs +1 -1
- package/dist/worker.d.cts +2 -0
- package/dist/worker.d.ts +2 -0
- package/dist/worker.js +1 -1
- package/dist/xlsx.cjs +2 -30
- package/dist/xlsx.d.cts +268 -0
- package/dist/xlsx.d.ts +268 -0
- package/dist/xlsx.js +220 -23440
- package/package.json +1 -1
- package/dist/ReportPreview-DjGeWHY-.cjs +0 -6
- package/dist/progress-DD964VAB.js +0 -102
- package/dist/progress-KvhwXZ1Q.cjs +0 -1
- package/dist/render-plan-CckPEQyf.cjs +0 -1
- package/dist/render-plan-uzZYYSy1.js +0 -19
- package/dist/report-source-BXHNy_AD.js +0 -755
- package/dist/report-source-CCAvFE3t.cjs +0 -1
- package/dist/style-CpwiOPyB.cjs +0 -1
- package/dist/template-registry-DWExx0gU.cjs +0 -1
- package/dist/template-registry-NpOakidD.js +0 -354
- package/dist/textwrap-CnGsEum6.cjs +0 -4
package/dist/index.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const x=require("./render-plan-CckPEQyf.cjs"),F=require("./report-source-CCAvFE3t.cjs"),f=require("./style-CpwiOPyB.cjs"),ne=require("./validate-DfHPD8wX.cjs"),_=require("./textwrap-CnGsEum6.cjs"),j=require("./progress-KvhwXZ1Q.cjs"),W=require("./assets-RZan7EyL.cjs"),$=require("./capabilities-xGTpnPjJ.cjs"),Je=require("./page-window-index-DEjnM6IB.cjs"),D=require("./template-registry-DWExx0gU.cjs"),V=require("./param-validation-CiTxFeZ8.cjs"),Ce=require("./number-format-CZ2T_5kF.cjs"),Xe={root:"mr-root",page:"mr-page",comp:"mr-comp",text:"mr-text",lines:"mr-lines",line:"mr-line",rich:"mr-rich",paragraph:"mr-paragraph",segment:"mr-segment",image:"mr-image",shape:"mr-shape",grid:"mr-grid",row:"mr-row",cell:"mr-cell",unknown:"mr-unknown"};function P(e,t){return t?.classNames?.[e]??Xe[e]}class Ze{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 E(e,t="unset"){return new Ze().add("all",t).add("display",e).add("box-sizing","border-box")}function Re(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 Qe(e,t,n){const r=t.style??{};Re(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 et(e,t,n,r,o,s){const l=e.cell,i=s.createElement("td");i.className=P("cell",o),i.dataset.mrRowIndex=String(e.ri),i.dataset.mrColumnIndex=String(e.ci),i.setAttribute("role",t.table?.role==="header"?"columnheader":"cell"),l.colSpan&&(i.colSpan=l.colSpan),l.rowSpan&&(i.rowSpan=l.rowSpan);const a=f.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",a.backgroundColor).add("vertical-align",a.verticalAlign??"middle");Re(c,a,r),c.applyTo(i);const d=s.createElement("div");d.className="mr-cell-content",E("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),l.text!=null&&d.append(l.text);for(const u of l.children??[])d.appendChild(ue(u,r,o,s));return i.appendChild(d),i}function tt(e,t,n,r){return W.resolveGridStrokes(e,t).map(o=>{const s=`${f.round(o.widthPt*n/72,2)}px solid ${o.color}`,l=r.createElement("div");l.className="mr-grid-edge",l.setAttribute("aria-hidden","true");const i=o.kind==="h";return E("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",s).applyTo(l),l})}function nt(e,t,n,r,o){const s=o.createElement("table");s.className=P("grid",r),s.setAttribute("role","table"),E("block").add("position","relative").add("width","100%").add("height","100%").applyTo(s);const l=j.resolveGridLayout(e,t.widthMm,t.heightMm),i=o.createElement("tbody");E("contents").applyTo(i),s.appendChild(i);const a=e.cells.map(()=>{const d=o.createElement("tr");return d.className=P("row",r),d.setAttribute("role","row"),E("contents").applyTo(d),i.appendChild(d),d});for(const d of l.cells)a[d.ri].appendChild(et(d,t,e.paddingMm??.5,n,r,o));const c=o.createElement("div");return E("block").add("position","relative").add("width","100%").add("height","100%").applyTo(c),c.append(s,...tt(l,t,n,o)),c}function rt(e,t,n,r){const o=r.createElement("div");o.className=P("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(o);for(const s of e.segments||[]){const l=r.createElement("span");l.className=P("segment",n),l.textContent=s.kind==="field"?s.field??"":s.text??"";const i=E("inline");if(s.style){const a=s.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(l),o.appendChild(l)}return o}function ot(e,t,n,r){if(x.isRichText(e)){const o=r.createElement("div");o.className=P("rich",n),E("block").applyTo(o);for(const s of e.richParagraphs)o.appendChild(rt(s,t,n,r));return o}if(Array.isArray(e.lines)&&e.lines.length>0){const o=r.createElement("div");o.className=P("lines",n),E("block").applyTo(o);for(const s of e.lines){const l=r.createElement("div");l.className=P("line",n),l.textContent=s,E("block").add("white-space","pre").add("min-height","1lh").applyTo(l),o.appendChild(l)}return o}return e.text??""}function it(e,t,n,r){const o=r.createElement("div");o.className=P("text",n);const s=e.style||{};return E("flex").add("width","100%").add("height","100%").add("flex-direction","column").add("justify-content",s.verticalAlign==="middle"?"center":s.verticalAlign==="bottom"?"flex-end":"flex-start").add("overflow-wrap","anywhere").add("overflow","hidden").applyTo(o),o.append(ot(e,t,n,r)),o}function at(e,t,n){const r=n.createElement("img");return r.className=P("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 ye(e,t,n,r){const o=r.createElement("div");o.className=P("shape",n);const s=e.style||{},l=f.resolveStroke(s),i=f.resolveBoxBorders(s),a=`${f.round(l.widthPt*t/72,2)}px solid ${l.color}`,c=E("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%"),s.backgroundColor&&c.add("background-color",s.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 st(e,t,n){const r=n.createElementNS("http://www.w3.org/2000/svg","svg"),o=f.mmToPx(e.widthMm,t),s=f.mmToPx(e.heightMm,t);r.setAttribute("width",String(Math.max(1,o))),r.setAttribute("height",String(Math.max(1,s))),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(o)),l.setAttribute("y1",e.lineDirection==="up"?String(s):"0"),l.setAttribute("y2",e.lineDirection==="up"?"0":String(s));const i=f.resolveStroke({...e.style,borderColor:e.style?.lineColor??e.style?.borderColor});return l.setAttribute("stroke",i.color),l.setAttribute("stroke-width",String(i.widthPt*t/72)),r.appendChild(l),r}function ue(e,t,n,r){const o=r.createElement("div");o.className=`${P("comp",n)} mr-kind-${e.kind}`;const s=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(s,e,t),s.applyTo(o),x.isImageBackedComponent(e))return o.appendChild(at(e,n,r)),o;if(e.kind==="text")return o.appendChild(it(e,t,n,r)),o;if(e.grid){const i=ye(e,t,n,r);return i.appendChild(nt(e.grid,e,t,n,r)),o.appendChild(i),o}if(e.kind==="line"&&e.lineDirection)return o.appendChild(st(e,t,r)),o;if(e.kind==="line"||e.kind==="rect"||e.kind==="ellipse")return o.appendChild(ye(e,t,n,r)),o;const l=r.createElement("div");return l.className=P("unknown",n),E("block").applyTo(l),l.textContent=e.fallbackText??`[${e.kind}]`,l.dataset.mrUnsupported=e.kind,l.setAttribute("role","note"),o.appendChild(l),o}function Pe(e,t,n,r){const o=r.createElement("div");return o.className=P("page",n),E("block","initial").add("position","relative").add("font-family",x.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",x.DEFAULT_TEXT_COLOR).add("overflow","hidden").add("box-sizing","border-box").applyTo(o),e.components.forEach((s,l)=>{const i=ue(s,t,n,r);i.dataset.mrComponentIndex=String(l),o.appendChild(i)}),o}function lt(e,t,n={}){const r=n.dpi??96;$.reportOutputDiagnostics(e,"dom",n);const o=t.createElement("div");return o.className=P("root",n),E("block").applyTo(o),o.dataset.schemaVersion=e.schemaVersion,e.pages.forEach(s=>{o.appendChild(Pe(s,r,n,t))}),o}function N(e){if(e?.aborted)throw e.reason??new DOMException("The operation was aborted.","AbortError")}const ct=(e,t)=>(N(t),/^data:image\/(?:png|jpe?g|webp|gif|svg\+xml)[;,]/i.test(e)?new Promise((n,r)=>{const o=new Image,s=()=>{o.onload=null,o.onerror=null,t?.removeEventListener("abort",l)},l=()=>{s(),o.src="",r(t?.reason??new DOMException("The operation was aborted.","AbortError"))};o.onload=()=>{s(),n(o)},o.onerror=()=>{s(),r(new Error("Image could not be decoded for Canvas output."))},t?.addEventListener("abort",l,{once:!0}),o.src=e}):Promise.reject(new TypeError("Canvas imageData must be an image data URL; provide imageLoader for other sources.")));function dt(e,t,n){return N(n),n?new Promise((r,o)=>{const s=()=>o(n.reason??new DOMException("The operation was aborted.","AbortError"));n.addEventListener("abort",s,{once:!0}),Promise.resolve().then(()=>e(t,n)).then(r,o).finally(()=>n.removeEventListener("abort",s))}):e(t)}async function ut(e,t,n){const r=new Map;for(const o of e.components)!x.isImageBackedComponent(o)||r.has(o.imageData)||r.set(o.imageData,await dt(t,o.imageData,n));return N(n),r}function mt(e,t,n,r,o,s){const l=t,i=l.naturalWidth??l.width??o,a=l.naturalHeight??l.height??s;if(i<=0||a<=0)throw new RangeError("Decoded Canvas image dimensions must be positive.");const c=Math.min(o/i,s/a),d=i*c,u=a*c;e.drawImage(t,n+(o-d)/2,r+(s-u)/2,d,u)}function Ie(e){return Je.createPageWindowIndex(e.pageHeightsPx,e.gapPx).window(e.viewportHeightPx,e.scrollTopPx,e.overscan)}const me=96/25.4;function re(e,t=96){const n=t/96*me;return{widthPx:Math.max(1,Math.round(e.pageWidthMm*n)),heightPx:Math.max(1,Math.round(e.pageHeightMm*n))}}function Ae(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=re(e,n),s=Math.round(o.widthPx*t),l=Math.round(o.heightPx*t);if(!Number.isSafeInteger(s)||!Number.isSafeInteger(l)||s*l>r)throw new RangeError("Canvas page exceeds maxCanvasPixels; reduce resolution or split the report.");return{width:s,height:l}}function ke(e,t,n,r){const o=document.createElement("canvas"),{widthPx:s,heightPx:l}=re(e,n),i=Ae(e,t,n,r);o.width=i.width,o.height=i.height,o.style.width=`${s}px`,o.style.height=`${l}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,s,l),{canvas:o,ctx:a}}function ft(e,t=96){return f.resolveFontSize(e,t).fontSizePx}function Fe(e,t,n,r,o,s,l,i="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 a=t.fontSizePx*t.lineHeight,c=t.text===""?[""]:t.text.split(`
|
|
2
|
-
`),d=c.length*a;let u=r;i==="middle"?u=r+(
|
|
3
|
-
`);
|
|
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(`
|
|
4
4
|
`):t.lines?.length?t.lines.join(`
|
|
5
|
-
`):
|
|
6
|
-
`);Fe(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,l)},n,r,o,s,c.fontFamily??i,c.verticalAlign)}function fe(e,t,n,r,o,s,l){const i=t.leftMm*n,a=t.topMm*n,c=t.widthMm*n,d=t.heightMm*n,u=t.style??{};if(x.isImageBackedComponent(t)){const m=l?.get(t.imageData);m?mt(e,m,i,a,c,d):xe(e,t,i,a,c,d);return}if(t.grid){wt(e,t.grid,t,i,a,c,d,n,r,o,s);return}switch(t.kind){case"text":{vt(e,t,i,a,c,d,r,o,s);break}case"rect":{const m=f.resolveStroke(u),h=f.resolveBoxBorders(u);u.backgroundColor&&(e.fillStyle=u.backgroundColor,e.fillRect(i,a,c,d)),h.inner&&(e.strokeStyle=m.color,e.lineWidth=f.ptToPx(m.widthPt,r),pt(e,h,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 h=t.lineDirection==="up"?a+d:t.lineDirection==="down"?a:a+d/2,g=t.lineDirection==="up"?a:t.lineDirection==="down"?a+d:a+d/2;e.moveTo(i,h),e.lineTo(i+c,g),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:xe(e,t,i,a,c,d);break}}function xe(e,t,n,r,o,s){e.save(),e.strokeStyle="#94a3b8",e.strokeRect(n,r,o,s),e.fillStyle="#64748b",e.font="12px sans-serif",e.fillText(t.fallbackText??`[${t.kind}]`,n+3,r+14),e.restore()}async function bt(e,t={}){if(typeof document>"u")throw new Error("renderPlanToImages 需要浏览器环境(SSR/Node 请在客户端钩子中调用)");const{format:n="png",quality:r=.92,...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 s=await W.resolvePlanAssets(e,{...t,format:"canvas"});e=s.plan;const l=[...s.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 Ne(e.pages[d],d,o,l);try{a.push(await yt(u,i,r,t.signal))}finally{u.width=0,u.height=0}await j.outputCheckpoint(t,a.length,c-Math.max(0,t.start??0)+1)}return N(t.signal),{blobs:a,diagnostics:l}}function yt(e,t,n,r){return N(r),new Promise((o,s)=>{const l=()=>s(r?.reason??new DOMException("The operation was aborted.","AbortError"));r?.addEventListener("abort",l,{once:!0});try{e.toBlob(i=>{r?.removeEventListener("abort",l),i?o(i):s(new Error("Canvas encoding failed; no empty image was emitted."))},t,n)}catch(i){r?.removeEventListener("abort",l),s(i)}})}function xt(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*me,s=t.fontFamily??x.DEFAULT_FONT_FAMILY,l=t.measurer??_.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=Mt(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 h=e.pages[m],{canvas:g,ctx:p}=ke(h,n,r,t.maxCanvasPixels);for(const y of h.components)fe(p,y,o,r,s,l);c.push(g)}return{canvases:c,diagnostics:d}}function Mt(e,t,n){return n<t?[]:e.pages.slice(t,n+1).flatMap((r,o)=>r.components.flatMap((s,l)=>x.isImageBackedComponent(s)?[{code:"async-image-required",severity:"warning",format:"canvas",pageIndex:t+o,componentIndex:l,kind:s.kind,nid:s.nid,message:"Use renderPlanToCanvasAsync or renderPlanToImages to decode and include images."}]:[]))}async function Tt(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=[],s=Math.min(e.pages.length-1,t.end??e.pages.length-1);for(let l=Math.max(0,t.start??0);l<=s;l++)o.push(await Ne(e.pages[l],l,t,r));return{canvases:o,diagnostics:r}}async function Ne(e,t,n,r){const o=n.dpr??(typeof devicePixelRatio=="number"?devicePixelRatio:1),s=n.dpi??96,l=n.fontFamily??x.DEFAULT_FONT_FAMILY,i=await Le(e,t,n,r);N(n.signal);const{canvas:a,ctx:c}=ke(e,o,s,n.maxCanvasPixels);for(const d of e.components)fe(c,d,s/25.4,s,l,n.measurer??_.heuristicMeasurer,i);return a}async function Le(e,t,n,r){const o=n.imageLoader??ct;return ut(e,async(s,l)=>{try{return await o(s,l)}catch(i){if(l?.aborted)throw i;const a=e.components.findIndex(u=>u.imageData===s),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 Et(e,t={}){const n=t.dpr??(typeof devicePixelRatio=="number"?devicePixelRatio:1),r=t.dpi??96,o=r/96*me,s=t.fontFamily??x.DEFAULT_FONT_FAMILY,l=t.measurer??_.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 h=null,g=null,p=null,y=null,S=[],C=0,k=[],J=0,q=new AbortController;const we=[];function Ve(){const w=h;w.innerHTML="",g=document.createElement("div"),g.style.cssText=`width:${u}px;margin:0 auto;`,p=document.createElement("div"),y=document.createElement("div"),g.appendChild(p),S=[];const R=Math.min(e.pages.length,3+i*2);for(let B=0;B<R;B++){const M=document.createElement("div");M.style.cssText=`margin:0 auto ${a}px;box-shadow:0 2px 8px rgba(0,0,0,.35);background:#fff;`,g.appendChild(M),S.push(M)}g.appendChild(y),w.appendChild(g)}async function qe(w,R){const B=J,M=await W.resolvePlanAssets(e,{...t,signal:q.signal,format:"canvas",start:R,end:R});we.push(...M.diagnostics);const I=M.plan.pages[R],Q=await Le(I,R,{...t,signal:q.signal},we);if(B!==J||!h)return;const{widthPx:ce,heightPx:de}=re(I,r);let z=w.firstElementChild;(!z||z.tagName!=="CANVAS")&&(z=document.createElement("canvas"),w.innerHTML="",w.appendChild(z));const be=Ae(I,n,r,t.maxCanvasPixels);z.width=be.width,z.height=be.height,z.style.width=`${ce}px`,z.style.height=`${de}px`;const U=z.getContext("2d");if(U){U.setTransform(1,0,0,1,0,0),U.scale(n,n),U.fillStyle="#ffffff",U.fillRect(0,0,ce,de);for(const Ye of I.components)fe(U,Ye,o,r,s,l,Q);z.dataset.canvasPage=String(R),w.style.height=`${de}px`,w.style.width=`${ce}px`}}function Ge(w){J++,m.start=w.start,m.end=w.end,p.style.height=`${w.start*a+d.slice(0,w.start).reduce((M,I)=>M+I,0)}px`;const R=e.pages.length-1-w.end;y.style.height=`${R*a+d.slice(w.end+1).reduce((M,I)=>M+I,0)}px`;const B=w.end-w.start+1;S.forEach((M,I)=>{if(I<B){M.style.display="";const Q=w.start+I;M.style.height=`${d[Q]??0}px`}else M.style.display="none"}),k=[];for(let M=w.start;M<=w.end;M++){const I=S[M-w.start];if(!I)continue;I.firstElementChild?.dataset?.canvasPage!==String(M)&&k.push(M)}le()}function le(){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=S[R-m.start];B&&qe(B,R).catch(()=>{})}k.length>0&&le()}))}function X(){C||(C=requestAnimationFrame(()=>{C=0;const w=h,R=Ie({pageHeightsPx:d,viewportHeightPx:w.clientHeight,scrollTopPx:w.scrollTop,overscan:i,gapPx:a});R.start!==m.start||R.end!==m.end?Ge(R):le()}))}let Z=null;return{attach(w){if(typeof document>"u")throw new Error("createCanvasPager 需要浏览器环境(SSR 请在客户端钩子中调用 attach)");N(t.signal),q=new AbortController,t.signal?.addEventListener("abort",ve,{once:!0}),$.reportOutputDiagnostics(e,"canvas",t),h=w,Ve(),w.addEventListener("scroll",X,{passive:!0}),typeof ResizeObserver<"u"&&(Z=new ResizeObserver(()=>X()),Z.observe(w)),X()},destroy(){J++,q.abort(),t.signal?.removeEventListener("abort",ve),C&&cancelAnimationFrame(C),C=0,Z?.disconnect(),Z=null,h?.removeEventListener("scroll",X),k=[],g?.remove(),h=null},window(){return{...m}}};function ve(){q.abort(t.signal?.reason)}}function he(e,t,n){let r,o;if(typeof e=="string"){const s=f.PAPER_SIZES[e];if(!s)throw new Error(`未知纸张预设 "${e}"(可用:${Object.keys(f.PAPER_SIZES).join("/")})`);r=s.widthMm,o=s.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 Oe{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 s=r!=null&&!("margins"in r)&&!("landscape"in r)&&("marginTopMm"in r||"marginBottomMm"in r||"marginLeftMm"in r||"marginRightMm"in r)?{margins:r}:typeof n=="number"?r??{}:n,{widthMm:l,heightMm:i}=he(t,typeof n=="number"?n:void 0,s.landscape),a=s.margins??{};return this.pending=new $e(this,{widthMm:l,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 St(){return new Oe}function Ct(e,t={}){return F.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 L(e,t,n=!1){if(!Number.isFinite(e)||(n?e<0:e<=0))throw new Error(`${t} 必须是有限${n?"非负":"正"}数`)}function ee(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 Rt(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 L(n,"columnWidthMm"),{layout:t,columnWidthMm:n}}function Pt(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=he(t,void 0,e.landscape),r=n.widthMm,o=n.heightMm;return L(r,"纸张 widthMm"),L(o,"纸张 heightMm"),{widthMm:r,heightMm:o}}function It(e){if(e.margins!==void 0&&(!e.margins||typeof e.margins!="object"||Array.isArray(e.margins)))throw new Error("margins 必须是页边距对象");const t=e.margins??{},n={marginTopMm:t.marginTopMm===void 0?10:t.marginTopMm,marginBottomMm:t.marginBottomMm===void 0?10:t.marginBottomMm,marginLeftMm:t.marginLeftMm===void 0?10:t.marginLeftMm,marginRightMm:t.marginRightMm===void 0?10:t.marginRightMm};for(const[r,o]of Object.entries(n))L(o,r,!0);return n}function At(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;L(r,"titleHeightMm"),L(o,"titleGapMm",!0);const s=e.title!==void 0&&e.title.length>0,l=s?r+o:0;if(l>=t)throw new Error("标题高度与间距占满页面,必须为表格保留可用高度");return{dataset:n,titleHeightMm:r,hasTitle:s,titleSpaceMm:l}}function kt(e){if(e.listOptions!==void 0&&(!e.listOptions||typeof e.listOptions!="object"||Array.isArray(e.listOptions)))throw new Error("listOptions 必须是列表配置对象");const t=e.listOptions??{};ee(t.align,"listOptions.align",!0),ee(t.headerAlign,"listOptions.headerAlign",!1);for(const n of["fontSizePt","rowHeightMm","paddingMm"]){const r=t[n];r!==void 0&&L(r,`listOptions.${n}`,n==="paddingMm")}return t}function Ft(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`);ee(o.align,`columns[${r}].align`,!0),ee(o.headerAlign,`columns[${r}].headerAlign`,!1),o.flex!==void 0&&L(o.flex,`columns[${r}].flex`),o.widthMm!==void 0?(L(o.widthMm,`columns[${r}].widthMm`),t+=o.widthMm):n=Math.max(n,o.flex??1)}return{fixedWidthMm:t,maxFlex:n}}function Nt(e,t,n,r){const{fixedWidthMm:o,maxFlex:s}=Ft(e.columns);if(t==="page"&&o>r)throw new Error(`固定列宽 ${o}mm 超出页面可用宽度 ${r}mm`);const l=r-o;if(t==="page"&&s>0&&l<=0)throw new Error("固定列占满页面可用宽度,自动列需要正的剩余宽度");const i=s>0?e.columns.reduce((c,d)=>c+(d.widthMm===void 0?(d.flex??1)/s:0),0):0;return{columns:e.columns.map(({widthMm:c,flex:d,...u},m)=>{const h=c??(t==="wide"?n*(d??1):l*((d??1)/s)/i);return L(h,`columns[${m}] 分配后的 widthMm`),{...u,widthMm:h}}),fixedWidthMm:o,maxFlex:s}}function Lt(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}=Rt(e),r=Pt(e);let o=r.widthMm;const s=r.heightMm,l=It(e);let i=o-l.marginLeftMm-l.marginRightMm;const a=s-l.marginTopMm-l.marginBottomMm;if(t==="page"&&i<=0||a<=0)throw new Error("页边距占满纸张,必须保留正的可用宽度和高度");const{dataset:c,titleHeightMm:d,hasTitle:u,titleSpaceMm:m}=At(e,a),h=kt(e),{columns:g,fixedWidthMm:p,maxFlex:y}=Nt(e,t,n,i);t==="wide"&&(i=g.reduce((C,k)=>C+k.widthMm,0),L(i,"宽表总列宽"),o=i+l.marginLeftMm+l.marginRightMm,L(o,"宽表总宽度"));const S={widthMm:o,heightMm:s,...l,components:[],...t==="wide"?{layout:t}:{}};return u&&S.components.push({kind:"text",text:e.title,leftMm:l.marginLeftMm,topMm:l.marginTopMm,widthMm:i,heightMm:d,style:{fontSize:16,bold:!0,align:"center",verticalAlign:"middle",...e.titleStyle}}),S.components.push({align:"auto",headerAlign:"center",...h,kind:"list",...t==="wide"?{layout:t}:{},...u?{title:e.title}:{},dataset:c,columns:g,leftMm:l.marginLeftMm,topMm:l.marginTopMm+m,widthMm:t==="wide"||y>0?i:p}),e.params===void 0?{pages:[S]}:{params:e.params,pages:[S]}}function Ot(e){return e}class H extends Error{constructor(t,n){super(n),this.code=t,this.name="ReportTemplateStoreError"}}function O(e){return JSON.parse(JSON.stringify(e))}function A(e){if(!e?.aborted)return;const t=new Error("模板操作已取消");throw t.name="AbortError",t}function Me(e){const t=e?Number(e.revision):0;if(!Number.isSafeInteger(t)||t<0||t>=Number.MAX_SAFE_INTEGER)throw new H("history","修订号无效或已达上限");return String(t+1)}function $t(e,t={}){const n=async(l,i)=>{A(i);const a=await e.read(l,i);return A(i),a?O(a):void 0},r=async(l,i)=>{const a=await n(l,i.signal);if((a?.revision??null)!==i.expectedRevision)throw new H("conflict","模板已变化,请重新读取后提交");return a},o=async(l,i,a)=>{if(A(i.signal),!await e.compareAndSwap(l.id,i.expectedRevision,O(l),{signal:i.signal,...a?{publication:O(a)}:{}}))throw new H("conflict","模板已被其他请求更新");return O(l)},s=(l,i,a,c)=>{const d=Me(l),u=D.parseReportTemplate({...i,revision:d}),m={revision:d,document:u,publishedAt:(t.now?.()??new Date).toISOString()};return c!==void 0&&(m.restoredFrom=c),o({id:l.id,revision:d,publishedRevision:d,published:u},a,m)};return{list:async l=>{A(l);const i=await e.list(l);return A(l),O(i)},get:async(l,i={})=>{const a=await n(l,i.signal),c=i.draft?a?.draft:a?.published;return c?D.parseReportTemplate(c):void 0},history:async(l,i)=>{A(i);const a=await e.history(l,i);return A(i),O(a)},saveDraft:async(l,i)=>{A(i.signal);const a=D.parseReportTemplate(t.migrate?await t.migrate(l):l),c=await r(a.id,i),d=Me(c);return o({id:a.id,revision:d,draft:{...a,revision:d},...c?.publishedRevision?{publishedRevision:c.publishedRevision,published:c.published}:{}},i)},publish:async(l,i)=>{const a=await r(l,i);if(!a)throw new H("missing","模板不存在");if(!a.draft)throw new H("draft","没有可发布的草稿");return s(a,a.draft,i)},rollback:async(l,i,a)=>{const c=await r(l,a);if(!c)throw new H("missing","模板不存在");A(a.signal);const d=await e.getVersion(l,i,a.signal);if(!d)throw new H("history","历史修订不存在");return s(c,d.document,a,i)}}}function Dt(){const e=new Map,t=new Map;return{read:async(n,r)=>{A(r);const o=e.get(n);return o?O(o):void 0},list:async n=>(A(n),Array.from(e.values(),({id:r,revision:o,publishedRevision:s})=>({id:r,revision:o,...s?{publishedRevision:s}:{}}))),history:async(n,r)=>(A(r),Array.from(t.get(n)?.values()??[],o=>O(o))),getVersion:async(n,r,o)=>{A(o);const s=t.get(n)?.get(r);return s?O(s):void 0},compareAndSwap:async(n,r,o,s)=>{if(A(s.signal),(e.get(n)?.revision??null)!==r)return!1;if(o.id!==n)throw new H("history","状态 ID 与存储 ID 不一致");const l=O(o),i=s.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 H("history","发布修订不可覆盖,且必须与状态修订和模板 ID 一致");a.set(i.revision,O(i)),t.set(n,a)}return e.set(n,l),!0}}}function De(e){return!e||typeof e!="object"?!1:[e.pageIndex,e.componentIndex,e.rowIndex,e.columnIndex].every(t=>Number.isInteger(t)&&t>=0)}function _e(e,t,n){const r=e.grid;if(!r)return null;const o=r.cells[t];if(!o)return null;const l=j.resolveGridLayout(r,e.widthMm,e.heightMm).cells.filter(a=>a.ri===t).findIndex(a=>a.ci===n),i=o[l];return i?{cell:i,sourceColumnIndex:l}:null}function _t(e){return e.value!==void 0?e.value:e.rawText??e.text??null}function zt(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 Ht(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 Bt(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 jt(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 ze(e,t,n){const r=_t(n),o=Ht(n,e);return{address:{...t},cell:n,component:e,value:r,valueType:zt(n,r),table:Bt(e,t),source:jt(n,e,t),editable:o===void 0,readOnlyReason:o}}function oe(e,t){if(!De(t))return null;const n=e.pages[t.pageIndex]?.components[t.componentIndex];if(!n)return null;const r=_e(n,t.rowIndex,t.columnIndex);return r?ze(n,t,r.cell):null}function ie(e){const t=new Map;return n=>{if(!De(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 l=new Map;o=new Map;for(const i of j.resolveGridLayout(r.grid,r.widthMm,r.heightMm).cells){const a=l.get(i.ri)??0;l.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 s=o.get(`${n.rowIndex}:${n.columnIndex}`);return s?ze(r,n,s):null}}class T extends Error{constructor(t){super(`Invalid report cell edit: ${t}`),this.code=t,this.name="ReportCellEditError"}}function Wt(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 T("number");return Number(n)/(r?100:1)}function Ut(e,t){if(e===null||typeof e=="string"&&e.trim()==="")return null;if(typeof e!="string"&&typeof e!="number")throw new T("number");const n=typeof e=="number"?e:Wt(e,Ce.isExcelPercentageFormat(t.cell.numberFormat));if(!Number.isFinite(n)||Number.isInteger(n)&&!Number.isSafeInteger(n))throw new T("number");return n}function Kt(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 T("boolean")}function ae(e,t){return e.valueType==="number"?Ut(t,e):e.valueType==="boolean"?Kt(t):t===null?null:String(t)}function Vt(e,t){const n=t.cell.text,o=[["是","否"],["TRUE","FALSE"],["True","False"],["true","false"],["1","0"]].find(s=>s.includes(n??""));return o?o[e?0:1]:String(e)}function Y(e,t){return t===null?"":typeof t=="boolean"?Vt(t,e):typeof t=="number"?Ce.formatExcelNumber(t,e.cell.numberFormat):String(t)}function qt(e,t,n){const r=oe(e,t);if(!r)throw new T("missing");return ge(r,n)}function ge(e,t){if(!e.editable)throw new T("readonly");const n=ae(e,t);return{address:{...e.address},table:e.table,source:e.source,previousValue:e.value,previousText:e.cell.text??"",value:n,text:Y(e,n)}}function Gt(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 He(e,t,n){const r=e.grid,{rowIndex:o,columnIndex:s}=t.address,l=_e(e,o,s),i=[...r.cells],a=[...i[o]],c=Y(t,n.value),d={...l.cell,value:n.value,text:c,rawText:c};return a[l.sourceColumnIndex]=d,i[o]=a,{...e,grid:{...r,cells:i}}}function Yt(e,t){const n=e.table?.columnKeys,r=t.table?.columnKey;return n&&r!==void 0?n.flatMap((o,s)=>o===r?[s]:[]):[]}function Jt(e,t,n,r,o,s){const l=t.table,i=o.table;if(!l||!i||l.id!==i.id||l.role!==i.role||!t.grid)return t;const a=i.rowIndex-l.rowIndex;if(a<0||a>=t.grid.cells.length)return t;let c=t;for(const d of Yt(t,o)){const u=oe(e,{pageIndex:n,componentIndex:r,rowIndex:a,columnIndex:d});u?.editable&&Gt(o,u)&&(c=He(c,u,s))}return c}function Xt(e,t,n,r,o,s){const l=o.address;return o.table?.columnKey!==void 0?Jt(e,t,n,r,o,s):l.pageIndex===n&&l.componentIndex===r?He(t,o,s):t}function Be(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 Zt(e,t){const n=oe(e,t.address);if(!n)throw new T("missing");if(!n.editable)throw new T("readonly");if(Be(n,t))throw new T("conflict");if(!Object.is(n.value,t.previousValue)||(n.cell.text??"")!==t.previousText)throw new T("conflict");const r=ae(n,t.value),o={...t,value:r,text:Y(n,r)};if(Object.is(r,n.value)&&o.text===n.cell.text)return e;const s=e.pages.map((l,i)=>{const a=l.components.map((c,d)=>Xt(e,c,i,d,n,o));return a.every((c,d)=>c===l.components[d])?l:{...l,components:a}});return{...e,pages:s}}function Qt(e){return JSON.stringify([e.pageIndex,e.componentIndex,e.rowIndex,e.columnIndex])}function Te(e){const t=e.table;return t?.columnKey!==void 0?JSON.stringify([t.id,t.role,t.rowIndex,t.columnKey]):Qt(e.address)}function en(e,t){if(!t.length)return e;const n=new Map(t.map(a=>[Te(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}`)),s=ie(e);function l(a,c,d){const u=a.grid;if(!u||!o.has(`${c}:${d}`)&&!r.has(a.table?.id??""))return a;const m=new Map,h=new Map;for(const g of j.resolveGridLayout(u,a.widthMm,a.heightMm).cells){const p=h.get(g.ri)??0;h.set(g.ri,p+1);const y=s({pageIndex:c,componentIndex:d,rowIndex:g.ri,columnIndex:g.ci}),S=y&&n.get(Te(y));if(!S||!y.editable)continue;const C=m.get(g.ri)??[...u.cells[g.ri]],k=Y(y,S.value);Object.is(y.value,S.value)&&k===y.cell.text||(C[p]={...g.cell,value:S.value,text:k,rawText:k},m.set(g.ri,C))}return m.size?{...a,grid:{...u,cells:u.cells.map((g,p)=>m.get(p)??g)}}:a}const i=e.pages.map((a,c)=>{const d=a.components.map((u,m)=>l(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 se(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 tn(e,t,n){if(typeof n!="string"||!n.trim()||!Array.isArray(t))throw new T("missing");if(t.length>1e4)throw new T("limit");const r=new Set,o=ie(e),s=t.map(({address:l,value:i})=>{const a=o(l);if(!a)throw new T("missing");const c=ge(a,i),d=se(c);if(r.has(d))throw new T("duplicate");return r.add(d),c});return{requestId:n,edits:s}}function nn(e,t){if(t.edits.length>1e4)throw new T("limit");const n=ie(e),r=new Set,o=t.edits.map(s=>{const l=n(s.address);if(!l)throw new T("missing");const i=se(s);if(r.has(i))throw new T("duplicate");if(r.add(i),Be(l,s)||!Object.is(l.value,s.previousValue)||(l.cell.text??"")!==s.previousText)throw new T("conflict");return ge(l,s.value)});return en(e,o)}function rn(e){const t=new Map;for(const n of e){const r=se(n),o=t.get(r),s=o?{...n,previousValue:o.previousValue,previousText:o.previousText}:{...n};Object.is(s.previousValue,s.value)?t.delete(r):t.set(r,s)}return[...t.values()]}function on(e){return e.map(t=>t.map(n=>/[\t\r\n"]/.test(n)?`"${n.replace(/"/g,'""')}"`:n).join(" ")).join(`\r
|
|
7
|
-
`)}function
|
|
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
8
|
`){i(),n.push([]),c==="\r"&&e[a+1]===`
|
|
9
|
-
`&&a++;continue}if(s)throw new Error("Invalid quoted clipboard value");r+=c}if(o)throw new Error("Unclosed clipboard quote");return i(),an(n,e),n}function ln(e,t,n){if(!n||n.revision===void 0&&n.sourceToken===void 0)return e;const r=new Set(t.edits.flatMap(l=>l.source?[l.source.datasetId]:[]));if(!r.size)return e;function o(l){return!l.datasetId||!r.has(l.datasetId)||(n.revision===void 0||Object.is(n.revision,l.revision))&&(n.sourceToken===void 0||n.sourceToken===l.sourceToken)?l:{...l,...n.revision!==void 0?{revision:n.revision}:{},...n.sourceToken!==void 0?{sourceToken:n.sourceToken}:{}}}const s=e.pages.map(l=>{const i=l.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(h=>{const g=h.map(p=>{if(!p?.source)return p;const y=o(p.source);return y===p.source?p:{...p,source:y}});return g.some((p,y)=>p!==h[y])?g:h}),m=a.grid&&u?.some((h,g)=>h!==a.grid.cells[g])?{...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!==l.components[c])?{...l,components:i}:l});return s.some((l,i)=>l!==e.pages[i])?{...e,pages:s}:e}class je extends Error{constructor(t,n,r){const o=typeof n.label=="string"?n.label:"单元格",s={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(s[t]),this.code=t,this.field=n,this.expected=r,this.name="ReportCellFieldError"}}function v(e,t,n){throw new je(t,e,n)}function We(e){if(typeof e!="string"||!/^\d{4}-\d{2}-\d{2}$/.test(e)||e.startsWith("0000-"))return!1;const t=new Date(`${e}T00:00:00.000Z`);return Number.isFinite(t.getTime())&&t.toISOString().slice(0,10)===e}function cn(e){const[t="",n="0"]=String(e).toLowerCase().split("e");return Math.max(0,(t.split(".")[1]?.length??0)-Number(n))}function dn(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&&cn(t)>e.precision&&v(e,"precision",e.precision)}function un(e,t){We(t)||v(e,"date"),e.min!==void 0&&t<e.min&&v(e,"min",e.min),e.max!==void 0&&t>e.max&&v(e,"max",e.max)}function mn(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 fn(e){[e.min,e.max].some(t=>t!==void 0&&!We(t))&&v(e,"definition"),e.min!==void 0&&e.max!==void 0&&e.min>e.max&&v(e,"definition")}function hn(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 gn(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 Ue(e,t){(!t||typeof t!="object"||Array.isArray(t)||!["text","number","boolean","enum","date"].includes(t.type))&&v(t??{type:"text"},"definition"),gn(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"&&mn(t),t.type==="text"&&t.maxLength!==void 0&&(!Number.isInteger(t.maxLength)||t.maxLength<0)&&v(t,"definition"),t.type==="date"&&fn(t),t.type==="enum"&&hn(e,t)}function pn(e,t,n){if(!e.editable)throw new T("readonly");n&&Ue(e,n);const r=ae(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"&&dn(n,r),n.type==="date"&&un(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 K(e){if(!e?.aborted)return;const t=new Error("Calculation cancelled");throw t.name="AbortError",t}async function te(e,t=1){const n=Math.floor(e.scanned/2048);if(e.scanned+=t,e.scanned>e.maxScanned)throw new b("limit");K(e.signal),Math.floor(e.scanned/2048)>n&&(await e.yieldToHost(),K(e.signal))}function pe(e){return e.table?.role==="header"?-Math.max(1,e.grid?.cells.length??1):e.table?.rowIndex??0}function Ee(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 s=r.table,l=e.pages[n.pageIndex]?.components[n.componentIndex]?.table;if(s&&l&&s.id===l.id){const i=l.columnKeys.indexOf(s.columnKeys[t.columnIndex]??"");if(i<0)throw new b("selection");return{grid:s.id,row:pe(r)+t.rowIndex,column:i}}return{grid:`${t.pageIndex}:${t.componentIndex}`,row:t.rowIndex,column:t.columnIndex}}function wn(e,t,n){const r=Ee(e,t.anchor,t.anchor),o=Ee(e,t.focus,t.anchor);if(r.grid!==o.grid)throw new b("selection");const s=(Math.abs(r.row-o.row)+1)*(Math.abs(r.column-o.column)+1);if(!Number.isSafeInteger(s)||s>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 vn(e){if(!e)return!1;const t=e.replace(/"[^"]*"|\\.|\[(?![hms]+\])[^\]]*\]/gi,"");return/[ymdhs]/i.test(t)}function bn(e){if(e.valueType==="text"||e.valueType==="boolean"||vn(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 yn(e,t,n){if(e.seen.has(n))return;e.seen.add(n),e.selected++;const r=t?bn(t):null;r===null?e.excluded++:e.values.push(r)}function xn(e,t,n,r){return r.origin?e.table?.id===r.origin.id:`${t}:${n}`===r.grid}function Mn(e,t,n){return n.origin?n.origin.columnKeys.indexOf(e.table.columnKeys[t]??""):t}function Tn(e,t,n,r){const o=r.origin?pe(e)+t:t,s=Mn(e,n,r);return o<r.rowStart||o>r.rowEnd||s<r.columnStart||s>r.columnEnd?null:`${r.grid}:${o}:${s}`}function En(e,t){const n=t.origin?pe(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 Sn(e,t,n,r,o){const s=e.grid;if(t>r.maxScanned)throw new b("limit");const l=s.colWidthsMm?.length??s.cells.reduce((a,c)=>Math.max(a,c.length),1);if(l>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(),K(r.signal));let c=0;for(const d of s.cells[a]){for(await te(r);c<l&&(i.get(c)??0)>a;)c++;if(c>=l)break;const u=Math.max(1,Math.min(d?.colSpan??1,l-c)),m=Math.min(s.cells.length,a+Math.max(1,d?.rowSpan??1));u>1&&await te(r,u-1);for(let g=c;g<c+u;g++)i.set(g,m);const h=Tn(e,a,c,n);h&&yn(o,d,h),c+=u}}}async function Cn(e,t,n){const r={values:[],seen:new Set,excluded:0,selected:0};for(let o=0;o<e.pages.length;o++){await te(n);const s=e.pages[o];for(let l=0;l<s.components.length;l++){await te(n);const i=s.components[l];if(!i.grid||!xn(i,o,l,t)||i.table&&i.table.role!=="body")continue;const a=En(i,t);a&&await Sn(i,a,t,n,r)}}return r}function G(e){if(!Number.isFinite(e))throw new b("overflow");return e}function Rn(e){let t=0,n=0;for(const r of e){const o=r-n,s=G(t+o);n=s-t-o,t=s}return t}async function Se(e,t){let n=[...e],r=new Array(e.length);for(let s=1;s<e.length;s*=2){for(let l=0;l<e.length;l+=s*2){const i=Math.min(l+s,e.length),a=Math.min(l+s*2,e.length);let c=l,d=i;for(let u=l;u<a;u++)r[u]=d>=a||c<i&&n[c]<=n[d]?n[c++]:n[d++],u%2048===0&&(await t.yieldToHost(),K(t.signal))}[n,r]=[r,n]}const o=Math.floor(n.length/2);return n.length%2?n[o]:G(n[o-1]/2+n[o]/2)}function Pn(e){const t=Rn(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 Ke(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=s(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 G(t[a]);if(a&&/^(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?$/.test(a))return G(Number(a));throw new b("expression")}function s(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=s(u+1,a+1);if(d==="/"&&m===0)throw new b("division");c=G(d==="+"?c+m:d==="-"?c-m:d==="*"?c*m:c/m)}return c}const l=s(1,0);if(r!==n.length)throw new b("expression");return l}function In(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 An(e,t,n={}){const r=In(n),o={scanned:0,maxScanned:r.maxScanned,signal:n.signal,yieldToHost:n.yieldToHost??(()=>new Promise(a=>setTimeout(a,0)))};K(o.signal);const s=await Cn(e,wn(e,t,r.maxCells),o),l=n.operation??"sum";if(!["sum","average","min","max","count","median","expression"].includes(l))throw new b("expression");let i=null;if(l==="count")i=s.values.length;else if(s.values.length)if(l==="median")i=await Se(s.values,o);else{const a=Pn(s.values);l==="expression"?(/\bMEDIAN\b/i.test(n.expression??"")&&(a.MEDIAN=await Se(s.values,o)),i=Ke(n.expression??"",a)):i=a[l.toUpperCase()]}if(K(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:s.values.length,excludedCells:s.excluded,selectedCells:s.selected,precision:r.precision}}exports.DEFAULT_BORDER_PT=x.DEFAULT_BORDER_PT;exports.DEFAULT_FONT_FAMILY=x.DEFAULT_FONT_FAMILY;exports.DEFAULT_FONT_PT=x.DEFAULT_FONT_PT;exports.DEFAULT_STROKE_COLOR=x.DEFAULT_STROKE_COLOR;exports.DEFAULT_TEXT_COLOR=x.DEFAULT_TEXT_COLOR;exports.LINE_HEIGHT=x.LINE_HEIGHT;exports.RENDER_PLAN_SCHEMA_VERSION=x.RENDER_PLAN_SCHEMA_VERSION;exports.SCHEMA_VERSION_MACH=x.SCHEMA_VERSION_MACH;exports.isImageBackedComponent=x.isImageBackedComponent;exports.isRichText=x.isRichText;exports.PaginatePageLimitError=F.PaginatePageLimitError;exports.ReportSourceError=F.ReportSourceError;exports.createReportSource=F.createReportSource;exports.datasetJsonSchema=F.datasetJsonSchema;exports.defineReport=F.defineReport;exports.evalStyleRule=F.evalStyleRule;exports.formatValue=F.formatValue;exports.paginateTemplate=F.paginateTemplate;exports.parseDateLocal=F.parseDateLocal;exports.toExcelNumberFormat=F.toExcelNumberFormat;exports.toNumber=F.toNumber;exports.validateDatasetRows=F.validateDatasetRows;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.assertRenderPlan=ne.assertRenderPlan;exports.validateComponent=ne.validateComponent;exports.validatePage=ne.validatePage;exports.validateRenderPlan=ne.validateRenderPlan;exports.charWidthEm=_.charWidthEm;exports.createCanvasMeasurer=_.createCanvasMeasurer;exports.createHeuristicMeasurer=_.createHeuristicMeasurer;exports.heuristicMeasurer=_.heuristicMeasurer;exports.measureTextMm=_.measureTextMm;exports.wrapText=_.wrapText;exports.resolveGridLayout=j.resolveGridLayout;exports.OutputAssetError=W.OutputAssetError;exports.resolvePlanAssets=W.resolvePlanAssets;exports.OutputFidelityError=$.OutputFidelityError;exports.inspectOutputCapabilities=$.inspectOutputCapabilities;exports.reportOutputDiagnostics=$.reportOutputDiagnostics;exports.REPORT_TEMPLATE_DOCUMENT_VERSION=D.REPORT_TEMPLATE_DOCUMENT_VERSION;exports.ReportTemplateError=D.ReportTemplateError;exports.createTemplateRegistry=D.createTemplateRegistry;exports.defineReportTemplate=D.defineReportTemplate;exports.parseReportTemplate=D.parseReportTemplate;exports.serializeReportTemplate=D.serializeReportTemplate;exports.validateReportTemplate=D.validateReportTemplate;exports.validateReportTemplateDocument=D.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=T;exports.ReportCellFieldError=je;exports.ReportTemplateStoreError=H;exports.TemplateBuilder=Oe;exports.applyReportCellEdit=Zt;exports.applyReportCellEditBatch=nn;exports.applyReportEditResult=ln;exports.calculateReportSelection=An;exports.classOf=P;exports.columnsFromContract=Ct;exports.computePageWindow=Ie;exports.createCanvasPager=Et;exports.createMemoryTemplateStore=Dt;exports.createProviderReport=Ot;exports.createReportCellEdit=qt;exports.createReportCellEditBatch=tn;exports.createReportCellResolver=ie;exports.createTableTemplate=Lt;exports.createTemplate=St;exports.createTemplateManager=$t;exports.evaluateReportAggregateExpression=Ke;exports.formatReportCellEdit=Y;exports.formatReportClipboard=on;exports.getReportCellContext=oe;exports.measurePageSizePx=re;exports.parseReportCellFieldInput=pn;exports.parseReportCellInput=ae;exports.parseReportClipboard=sn;exports.planFontSizePx=ft;exports.renderComponent=ue;exports.renderPage=Pe;exports.renderPlan=lt;exports.renderPlanToCanvas=xt;exports.renderPlanToCanvasAsync=Tt;exports.renderPlanToImages=bt;exports.reportCellEditKey=se;exports.resolvePaper=he;exports.summarizeReportCellEdits=rn;exports.validateReportCellFieldDefinition=Ue;
|
|
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;
|