@agile-team/mach-report 2.13.0 → 2.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -7
- package/THIRD_PARTY_NOTICES.md +3 -1
- package/dist/ExcelBindingWizard-BKH1nGNS.js +1485 -0
- package/dist/ExcelBindingWizard-Bs43BGNp.cjs +1 -0
- package/dist/ParamEditor-Da4akw6V.cjs +1 -0
- package/dist/ParamEditor-DoAhzJsm.js +594 -0
- package/dist/{ReportBatchPanel-CW2HV9I8.js → ReportBatchPanel-BMf6boMA.js} +39 -39
- package/dist/ReportBatchPanel-wP9m9Pj1.cjs +1 -0
- package/dist/ReportPreview-ChV19HBp.js +4619 -0
- package/dist/ReportPreview-DbLvvOUT.cjs +6 -0
- package/dist/{ReportTemplateLibrary-BZB-XWjj.js → ReportTemplateLibrary-C9wutIiT.js} +1 -1
- package/dist/ReportTemplateLibrary-Sxr3eD0J.cjs +1 -0
- package/dist/RuleEditor-C_Clasvd.js +2037 -0
- package/dist/RuleEditor-XhGHK8DE.cjs +1 -0
- package/dist/TemplateOutlinePanel-D6Bkny59.js +96 -0
- package/dist/TemplateOutlinePanel-JTSR53vJ.cjs +1 -0
- package/dist/TemplateReusePanel-Kx35S0Ql.cjs +1 -0
- package/dist/TemplateReusePanel-rVuK1kTz.js +388 -0
- package/dist/TemplateReviewPanel-B0ar9_zf.js +592 -0
- package/dist/TemplateReviewPanel-Dn6X9UmY.cjs +1 -0
- package/dist/analytics.cjs +1 -1
- package/dist/analytics.d.cts +3 -1
- package/dist/analytics.d.ts +3 -1
- package/dist/analytics.js +154 -60
- package/dist/artifact-integrity.json +135 -0
- package/dist/assets-B9ImAi6_.cjs +1 -0
- package/dist/assets-DEaz4qsp.js +124 -0
- package/dist/batch-BaP6pWDE.cjs +1 -0
- package/dist/batch-BfZHN1do.js +220 -0
- package/dist/batch-CGyt-b2W.js +273 -0
- package/dist/batch-CLpELXBl.cjs +1 -0
- package/dist/capabilities-CAh2Nrue.cjs +1 -0
- package/dist/capabilities-DskCHs3V.js +69 -0
- package/dist/codes.d.cts +2 -0
- package/dist/codes.d.ts +2 -0
- package/dist/{computed-Bvk0W15F.js → computed-C-4C2S5h.js} +3 -3
- package/dist/config-BVsJXSqS.js +842 -0
- package/dist/config-D10us76d.cjs +1 -0
- package/dist/data-explanation-B8MZRYVS.js +16 -0
- package/dist/data-explanation-DE55G30w.cjs +1 -0
- package/dist/designer-2bDlcNXQ.js +5136 -0
- package/dist/designer-BT7XCdbW.cjs +2 -0
- package/dist/designer.cjs +1 -2
- package/dist/designer.d.cts +432 -17
- package/dist/designer.d.ts +432 -17
- package/dist/designer.js +21 -4312
- package/dist/drill-ByJviLXS.js +145 -0
- package/dist/drill-DYTxuL3A.cjs +1 -0
- package/dist/font-loader-B_UkxpzC.cjs +1 -0
- package/dist/font-loader-Q3bQjmrI.js +297 -0
- package/dist/index.cjs +8 -8
- package/dist/index.d.cts +239 -5
- package/dist/index.d.ts +239 -5
- package/dist/index.js +939 -893
- package/dist/json-snapshot-DFb2eWkf.js +1416 -0
- package/dist/json-snapshot-WWSGlaHG.cjs +2 -0
- package/dist/licenses/_bwip-js_generic-4.11.4.txt +24 -0
- package/dist/licenses/_fast-csv_format-4.3.5.txt +22 -0
- package/dist/licenses/_fast-csv_parse-4.3.6.txt +22 -0
- package/dist/licenses/_pdf-lib_fontkit-1.1.1.txt +326 -0
- package/dist/licenses/_pdf-lib_standard-fonts-1.0.0.txt +22 -0
- package/dist/licenses/_pdf-lib_upng-1.0.1.txt +22 -0
- package/dist/licenses/_types_node-14.18.63.txt +22 -0
- package/dist/licenses/_types_pako-2.0.3.txt +22 -0
- package/dist/licenses/_types_pegjs-0.10.6.txt +22 -0
- package/dist/licenses/archiver-5.3.2.txt +23 -0
- package/dist/licenses/archiver-utils-2.1.0.txt +23 -0
- package/dist/licenses/archiver-utils-3.0.4.txt +23 -0
- package/dist/licenses/async-3.2.6.txt +20 -0
- package/dist/licenses/balanced-match-1.0.2.txt +22 -0
- package/dist/licenses/base64-js-1.5.1.txt +22 -0
- package/dist/licenses/big-integer-1.6.52.txt +25 -0
- package/dist/licenses/binary-0.3.0.txt +178 -0
- package/dist/licenses/bl-4.1.0.txt +14 -0
- package/dist/licenses/bluebird-3.4.7.txt +22 -0
- package/dist/licenses/brace-expansion-1.1.21.txt +22 -0
- package/dist/licenses/brace-expansion-2.1.7.txt +22 -0
- package/dist/licenses/buffer-5.7.1.txt +22 -0
- package/dist/licenses/buffer-crc32-0.2.13.txt +20 -0
- package/dist/licenses/buffer-indexof-polyfill-1.0.2.txt +23 -0
- package/dist/licenses/buffers-0.1.1.txt +140 -0
- package/dist/licenses/chainsaw-0.1.0.txt +184 -0
- package/dist/licenses/compress-commons-4.1.2.txt +23 -0
- package/dist/licenses/concat-map-0.0.1.txt +19 -0
- package/dist/licenses/core-util-is-1.0.3.txt +20 -0
- package/dist/licenses/crc-32-1.2.2.txt +202 -0
- package/dist/licenses/crc32-stream-4.0.3.txt +23 -0
- package/dist/licenses/dayjs-1.11.23.txt +22 -0
- package/dist/licenses/duplexer2-0.1.4.txt +27 -0
- package/dist/licenses/end-of-stream-1.4.5.txt +22 -0
- package/dist/licenses/exceljs-4.4.0.txt +23 -0
- package/dist/licenses/fast-csv-4.3.6.txt +22 -0
- package/dist/licenses/fast-png-6.4.0.txt +22 -0
- package/dist/licenses/fs-constants-1.0.0.txt +22 -0
- package/dist/licenses/fs.realpath-1.0.0.txt +44 -0
- package/dist/licenses/fstream-1.0.12.txt +16 -0
- package/dist/licenses/glob-7.2.3.txt +22 -0
- package/dist/licenses/graceful-fs-4.2.11.txt +16 -0
- package/dist/licenses/ieee754-1.2.1.txt +12 -0
- package/dist/licenses/immediate-3.0.6.txt +21 -0
- package/dist/licenses/inflight-1.0.6.txt +16 -0
- package/dist/licenses/inherits-2.0.4.txt +17 -0
- package/dist/licenses/iobuffer-5.4.0.txt +23 -0
- package/dist/licenses/isarray-1.0.0.txt +61 -0
- package/dist/licenses/jszip-3.10.2.txt +652 -0
- package/dist/licenses/lazystream-1.0.1.txt +24 -0
- package/dist/licenses/lie-3.3.0.txt +8 -0
- package/dist/licenses/listenercount-1.0.1.txt +6 -0
- package/dist/licenses/lodash.defaults-4.2.0.txt +48 -0
- package/dist/licenses/lodash.difference-4.5.0.txt +48 -0
- package/dist/licenses/lodash.escaperegexp-4.1.2.txt +48 -0
- package/dist/licenses/lodash.flatten-4.4.0.txt +48 -0
- package/dist/licenses/lodash.groupby-4.6.0.txt +48 -0
- package/dist/licenses/lodash.isboolean-3.0.3.txt +23 -0
- package/dist/licenses/lodash.isequal-4.5.0.txt +48 -0
- package/dist/licenses/lodash.isfunction-3.0.9.txt +48 -0
- package/dist/licenses/lodash.isnil-4.0.0.txt +23 -0
- package/dist/licenses/lodash.isplainobject-4.0.6.txt +48 -0
- package/dist/licenses/lodash.isundefined-3.0.1.txt +23 -0
- package/dist/licenses/lodash.union-4.6.0.txt +48 -0
- package/dist/licenses/lodash.uniq-4.5.0.txt +48 -0
- package/dist/licenses/minimatch-3.1.5.txt +16 -0
- package/dist/licenses/minimatch-5.1.9.txt +16 -0
- package/dist/licenses/minimist-1.2.8.txt +19 -0
- package/dist/licenses/mkdirp-0.5.6.txt +22 -0
- package/dist/licenses/node-sql-parser-5.4.0.txt +202 -0
- package/dist/licenses/normalize-path-3.0.0.txt +22 -0
- package/dist/licenses/once-1.4.0.txt +16 -0
- package/dist/licenses/pako-1.0.11.txt +22 -0
- package/dist/licenses/pako-2.2.0.txt +22 -0
- package/dist/licenses/path-is-absolute-1.0.1.txt +22 -0
- package/dist/licenses/pdf-lib-1.17.1.txt +22 -0
- package/dist/licenses/process-nextick-args-2.0.1.txt +20 -0
- package/dist/licenses/readable-stream-2.3.8.txt +48 -0
- package/dist/licenses/readable-stream-3.6.2.txt +48 -0
- package/dist/licenses/readdir-glob-1.1.3.txt +202 -0
- package/dist/licenses/rimraf-2.7.1.txt +16 -0
- package/dist/licenses/safe-buffer-5.1.2.txt +22 -0
- package/dist/licenses/safe-buffer-5.2.1.txt +22 -0
- package/dist/licenses/saxes-5.0.1.txt +397 -0
- package/dist/licenses/setimmediate-1.0.5.txt +21 -0
- package/dist/licenses/string_decoder-1.1.1.txt +49 -0
- package/dist/licenses/string_decoder-1.3.0.txt +49 -0
- package/dist/licenses/tar-stream-2.2.0.txt +22 -0
- package/dist/licenses/tmp-0.2.7.txt +22 -0
- package/dist/licenses/traverse-0.3.9.txt +25 -0
- package/dist/licenses/tslib-1.14.1.txt +13 -0
- package/dist/licenses/unzipper-0.10.14.txt +26 -0
- package/dist/licenses/util-deprecate-1.0.2.txt +25 -0
- package/dist/licenses/uuid-11.1.1.txt +10 -0
- package/dist/licenses/wrappy-1.0.2.txt +16 -0
- package/dist/licenses/xmlchars-2.2.0.txt +19 -0
- package/dist/licenses/zip-stream-4.1.1.txt +23 -0
- package/dist/matrix-CGRGkn5s.js +112 -0
- package/dist/matrix-gEO7ZM_u.cjs +1 -0
- package/dist/media-B7vnpD8k.cjs +1 -0
- package/dist/media-Y90dHK9z.js +70 -0
- package/dist/param-validation-C3HlcLLO.cjs +1 -0
- package/dist/param-validation-Do7Eg8Zv.js +181 -0
- package/dist/pdf-BwNyeGpt.js +36352 -0
- package/dist/pdf-CvvrjPQg.cjs +103 -0
- package/dist/pdf.cjs +1 -101
- package/dist/pdf.d.cts +18 -3
- package/dist/pdf.d.ts +18 -3
- package/dist/pdf.js +9 -36579
- package/dist/plugin-Ca_XZG3l.js +22 -0
- package/dist/{plugin-DzS6pxTA.cjs → plugin-DHO7X8z2.cjs} +1 -1
- package/dist/prepared-CFy9B75C.cjs +1 -0
- package/dist/prepared-ajM-H-9B.js +69 -0
- package/dist/progress-B0ctFpKf.cjs +1 -0
- package/dist/progress-D-OTpEav.js +52 -0
- package/dist/{record-bindings-D-5jQlTj.js → record-bindings-Do_b3h4V.js} +1 -1
- package/dist/{region-binding-workflow-CcUq8W2Q.js → region-binding-workflow-BMhK_TjP.js} +1 -1
- package/dist/{region-binding-workflow-BzfbxRiR.cjs → region-binding-workflow-DIYJdCUr.cjs} +1 -1
- package/dist/{report-params-B44imUd4.js → report-params-B1RzkhJj.js} +1 -1
- package/dist/{report-params-SJfhKgaX.cjs → report-params-WDGrA4oP.cjs} +1 -1
- package/dist/sbom.cdx.json +3982 -0
- package/dist/server/node.d.cts +66 -12
- package/dist/server/node.d.ts +66 -12
- package/dist/server-node.cjs +1 -1
- package/dist/server-node.js +405 -381
- package/dist/server.cjs +1 -1
- package/dist/server.d.cts +878 -15
- package/dist/server.d.ts +878 -15
- package/dist/server.js +1034 -534
- package/dist/sha256-ArEYjaTI.cjs +1 -0
- package/dist/sha256-DPEuJ3nh.js +155 -0
- package/dist/style.css +1 -1
- package/dist/template-bindings-C2SpvsMU.js +58 -0
- package/dist/template-bindings-CEtWyiLX.cjs +1 -0
- package/dist/template-catalog-FJE_c9Qe.cjs +1 -0
- package/dist/template-catalog-j2B1MJlL.js +414 -0
- package/dist/template-fragments-BGbQLGlV.js +187 -0
- package/dist/template-fragments-DcKeiylI.cjs +1 -0
- package/dist/template-outline-BwRV_eRo.cjs +1 -0
- package/dist/template-outline-cnWfT_LK.js +88 -0
- package/dist/{template-registry-BjE1VS6g.js → template-registry-BtaKPELV.js} +364 -201
- package/dist/template-registry-Co1zPq5e.cjs +1 -0
- package/dist/textwrap-CWHyzkBH.cjs +4 -0
- package/dist/textwrap-DE1kgcJB.js +110 -0
- package/dist/{tree-CqcQ99NM.js → tree-CjVZLRw7.js} +1 -1
- package/dist/{useLocalDraft-C07SYRnC.js → useLocalDraft-BnhcxXk_.js} +1 -1
- package/dist/{useLocalDraft-Yiw1wFgI.cjs → useLocalDraft-CioIfDb6.cjs} +1 -1
- package/dist/vue/async.d.cts +190 -15
- package/dist/vue/async.d.ts +190 -15
- package/dist/vue/index.d.cts +274 -24
- package/dist/vue/index.d.ts +274 -24
- package/dist/vue-async.cjs +1 -1
- package/dist/vue-async.js +5 -5
- package/dist/vue.cjs +1 -1
- package/dist/vue.js +90 -81
- package/dist/{workbook-session-DNa2RHNG.cjs → workbook-session-Bjv1YCRK.cjs} +18 -18
- package/dist/{workbook-session-BPb3TMnT.js → workbook-session-BvToI-Fd.js} +5440 -5288
- package/dist/worker.cjs +1 -1
- package/dist/worker.d.cts +66 -12
- package/dist/worker.d.ts +66 -12
- package/dist/worker.js +61 -56
- package/dist/xlsx-node.cjs +34 -34
- package/dist/xlsx-node.js +878 -870
- package/dist/xlsx.cjs +3 -4
- package/dist/xlsx.d.cts +22 -10
- package/dist/xlsx.d.ts +22 -10
- package/dist/xlsx.js +261 -253
- package/package.json +2 -2
- package/dist/ExcelBindingWizard-CeAf4QSE.js +0 -1465
- package/dist/ExcelBindingWizard-y0mT-AHR.cjs +0 -1
- package/dist/ParamEditor-BLaE5q5W.js +0 -522
- package/dist/ParamEditor-MBBC7lUE.cjs +0 -1
- package/dist/ReportBatchPanel-Fp1ePFag.cjs +0 -1
- package/dist/ReportPreview-BN6fk7Wz.cjs +0 -6
- package/dist/ReportPreview-D2Jkyh1U.js +0 -4243
- package/dist/ReportTemplateLibrary-5fk5CQBO.cjs +0 -1
- package/dist/RuleEditor-ChRzNQuF.cjs +0 -1
- package/dist/RuleEditor-DzAmW5YH.js +0 -2024
- package/dist/TemplateReviewPanel-BKofGrV9.js +0 -222
- package/dist/TemplateReviewPanel-DwtOcLue.cjs +0 -1
- package/dist/assets-C2U-e-Sz.cjs +0 -4
- package/dist/assets-Q0wUwNrV.js +0 -217
- package/dist/batch-Bt3Fd27Z.cjs +0 -1
- package/dist/batch-mRqhhhjt.js +0 -364
- package/dist/capabilities-CK_7hizc.js +0 -63
- package/dist/capabilities-CsZ-pNHR.cjs +0 -1
- package/dist/config-Bb7RiIO5.cjs +0 -1
- package/dist/config-XVwG87IA.js +0 -529
- package/dist/matrix-DVyWiYsd.cjs +0 -1
- package/dist/matrix-yZsGnldA.js +0 -227
- package/dist/page-window-index-CIuT4BAv.js +0 -43
- package/dist/page-window-index-DEjnM6IB.cjs +0 -1
- package/dist/param-validation-BlHHXs6u.js +0 -153
- package/dist/param-validation-DCK039V1.cjs +0 -1
- package/dist/plugin-D4wizDXB.js +0 -22
- package/dist/progress-7OSZbFok.js +0 -39
- package/dist/progress-BnLiS5eH.cjs +0 -1
- package/dist/task-events-DQ276fn2.cjs +0 -1
- package/dist/task-events-Dpsvf_t2.js +0 -47
- package/dist/template-registry-D3SjENi6.cjs +0 -1
- package/dist/template-review-DGwWOoCv.cjs +0 -2
- package/dist/template-review-PgEe_Wr9.js +0 -1742
- package/dist/validate-BJ5HIWY8.cjs +0 -1
- package/dist/validate-DbgEM1Hh.js +0 -163
package/dist/index.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const I=require("./defaults-xhmcLLrf.cjs"),j=require("./record-bindings-By_UKZ2g.cjs"),u=require("./style-UgIJSA1F.cjs"),W=require("./render-plan-7xpGrCEl.cjs"),ee=require("./validate-BJ5HIWY8.cjs"),oe=require("./dataset-BkRmwgeJ.cjs"),C=require("./assets-C2U-e-Sz.cjs"),p=require("./template-review-DGwWOoCv.cjs"),ae=require("./grid-geometry-CZ_cYB6O.cjs"),Te=require("./grid-strokes-Cr7DwUux.cjs"),$=require("./capabilities-CsZ-pNHR.cjs"),We=require("./progress-BnLiS5eH.cjs"),je=require("./page-window-index-DEjnM6IB.cjs"),b=require("./template-registry-D3SjENi6.cjs"),H=require("./param-validation-DCK039V1.cjs"),se=require("./tree-BX380Rr7.cjs"),Ue={root:"mr-root",page:"mr-page",comp:"mr-comp",text:"mr-text",lines:"mr-lines",line:"mr-line",rich:"mr-rich",paragraph:"mr-paragraph",segment:"mr-segment",image:"mr-image",shape:"mr-shape",grid:"mr-grid",row:"mr-row",cell:"mr-cell",unknown:"mr-unknown"};function S(e,t){return t?.classNames?.[e]??Ue[e]}class qe{constructor(){this.props=[]}add(t,n){return n==null||n===!1||n===""?this:(this.props.push([t,String(n)]),this)}mm(t,n,r,i=2){return this.add(t,`${u.round(u.mmToPx(n,r),i)}px`)}toString(){let t="";for(const[n,r]of this.props)t+=`${n}:${r};`;return t}applyTo(t){const n=this.toString();n&&(t.style.cssText=n)}}function T(e,t="unset"){return new qe().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(u.resolveLineHeight(t))).add("text-align",t.align);const r=u.resolveFontSize(t,n);e.add("font-size",`${u.round(r.fontSizePx,2)}px`)}function Ge(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 Ve(e,t,n,r,i,o){const s=e.cell,a=o.createElement("td");a.className=S("cell",i),a.dataset.mrRowIndex=String(e.ri),a.dataset.mrColumnIndex=String(e.ci),a.setAttribute("role",t.table?.role==="header"?"columnheader":"cell"),s.colSpan&&(a.colSpan=s.colSpan),s.rowSpan&&(a.rowSpan=s.rowSpan);const l=u.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",l.backgroundColor).add("vertical-align",l.verticalAlign??"middle");Re(c,l,r),c.applyTo(a);const d=o.createElement("div");d.className="mr-cell-content",T("flex").add("position","absolute").mm("left",n+(s.indentMm??0),r).mm("right",n,r).mm("top",n,r).mm("bottom",n,r).add("flex-direction","column").add("justify-content",l.verticalAlign==="top"?"flex-start":l.verticalAlign==="bottom"?"flex-end":"center").add("overflow-wrap","anywhere").add("overflow","hidden").applyTo(d),s.text!=null&&d.append(s.text);for(const m of s.children??[])d.appendChild(le(m,r,i,o));return a.appendChild(d),a}function Ye(e,t,n,r){return Te.resolveGridStrokes(e,t).map(i=>{const o=`${u.round(i.widthPt*n/72,2)}px solid ${i.color}`,s=r.createElement("div");s.className="mr-grid-edge",s.setAttribute("aria-hidden","true");const a=i.kind==="h";return T("block").add("position","absolute").add("pointer-events","none").mm("left",a?i.from:i.pos,n).mm("top",a?i.pos:i.from,n).mm("width",a?i.to-i.from:0,n).mm("height",a?0:i.to-i.from,n).add(a?"border-top":"border-left",o).applyTo(s),s})}function Je(e,t,n,r,i){const o=i.createElement("table");o.className=S("grid",r),o.setAttribute("role","table"),T("block").add("position","relative").add("width","100%").add("height","100%").applyTo(o);const s=ae.resolveGridLayout(e,t.widthMm,t.heightMm),a=i.createElement("tbody");T("contents").applyTo(a),o.appendChild(a);const l=e.cells.map(()=>{const d=i.createElement("tr");return d.className=S("row",r),d.setAttribute("role","row"),T("contents").applyTo(d),a.appendChild(d),d});for(const d of s.cells)l[d.ri].appendChild(Ve(d,t,e.paddingMm??.5,n,r,i));const c=i.createElement("div");return T("block").add("position","relative").add("width","100%").add("height","100%").applyTo(c),c.append(o,...Ye(s,t,n,i)),c}function Ke(e,t,n,r){const i=r.createElement("div");i.className=S("paragraph",n),T("block").add("text-align",e.align).add("line-height",e.lineHeight!=null?String(e.lineHeight):void 0).mm("margin-top",e.spaceBeforeMm??0,t).mm("margin-bottom",e.spaceAfterMm??0,t).mm("text-indent",e.indentMm??0,t).applyTo(i);for(const o of e.segments||[]){const s=r.createElement("span");s.className=S("segment",n),s.textContent=o.kind==="field"?o.field??"":o.text??"";const a=T("inline");if(o.style){const l=o.style;a.add("color",l.color).add("font-family",l.fontFamily).add("font-weight",l.bold!=null?l.bold?"700":"400":void 0).add("font-style",l.italic!=null?l.italic?"italic":"normal":void 0).add("text-decoration",l.underline!=null?l.underline?"underline":"none":void 0),(l.fontSize!=null||l.fontSizePx!=null)&&a.add("font-size",`${u.round(u.resolveFontSize(l,t).fontSizePx,2)}px`)}a.applyTo(s),i.appendChild(s)}return i}function Xe(e,t,n,r){if(W.isRichText(e)){const i=r.createElement("div");i.className=S("rich",n),T("block").applyTo(i);for(const o of e.richParagraphs)i.appendChild(Ke(o,t,n,r));return i}if(Array.isArray(e.lines)&&e.lines.length>0){const i=r.createElement("div");i.className=S("lines",n),T("block").applyTo(i);for(const o of e.lines){const s=r.createElement("div");s.className=S("line",n),s.textContent=o,T("block").add("white-space","pre").add("min-height","1lh").applyTo(s),i.appendChild(s)}return i}return e.text??""}function Ze(e,t,n,r){const i=r.createElement("div");i.className=S("text",n);const o=e.style||{};return T("flex").add("width","100%").add("height","100%").add("flex-direction","column").add("justify-content",o.verticalAlign==="middle"?"center":o.verticalAlign==="bottom"?"flex-end":"flex-start").add("overflow-wrap","anywhere").add("overflow","hidden").applyTo(i),i.append(Xe(e,t,n,r)),i}function Qe(e,t,n){const r=n.createElement("img");return r.className=S("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 fe(e,t,n,r){const i=r.createElement("div");i.className=S("shape",n);const o=e.style||{},s=u.resolveStroke(o),a=u.resolveBoxBorders(o),l=`${u.round(s.widthPt*t/72,2)}px solid ${s.color}`,c=T("block");return e.grid?c.add("position","relative"):e.kind==="rect"?(a.top&&c.add("border-top",l),a.right&&c.add("border-right",l),a.bottom&&c.add("border-bottom",l),a.left&&c.add("border-left",l)):e.kind==="ellipse"?(a.inner&&c.add("border",l).add("border-radius","50%"),o.backgroundColor&&c.add("background-color",o.backgroundColor)):e.kind==="line"&&c.add("height","0").add("border-top",l),c.add("box-sizing","border-box").add("width","100%").add("height","100%"),c.applyTo(i),i}function et(e,t,n){const r=n.createElementNS("http://www.w3.org/2000/svg","svg"),i=u.mmToPx(e.widthMm,t),o=u.mmToPx(e.heightMm,t);r.setAttribute("width",String(Math.max(1,i))),r.setAttribute("height",String(Math.max(1,o))),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(i)),s.setAttribute("y1",e.lineDirection==="up"?String(o):"0"),s.setAttribute("y2",e.lineDirection==="up"?"0":String(o));const a=u.resolveStroke({...e.style,borderColor:e.style?.lineColor??e.style?.borderColor});return s.setAttribute("stroke",a.color),s.setAttribute("stroke-width",String(a.widthPt*t/72)),r.appendChild(s),r}function le(e,t,n,r){const i=r.createElement("div");i.className=`${S("comp",n)} mr-kind-${e.kind}`;const o=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(Ge(o,e,t),o.applyTo(i),W.isImageBackedComponent(e))return i.appendChild(Qe(e,n,r)),i;if(e.kind==="text")return i.appendChild(Ze(e,t,n,r)),i;if(e.grid){const a=fe(e,t,n,r);return a.appendChild(Je(e.grid,e,t,n,r)),i.appendChild(a),i}if(e.kind==="line"&&e.lineDirection)return i.appendChild(et(e,t,r)),i;if(e.kind==="line"||e.kind==="rect"||e.kind==="ellipse")return i.appendChild(fe(e,t,n,r)),i;const s=r.createElement("div");return s.className=S("unknown",n),T("block").applyTo(s),s.textContent=e.fallbackText??`[${e.kind}]`,s.dataset.mrUnsupported=e.kind,s.setAttribute("role","note"),i.appendChild(s),i}function xe(e,t,n,r){const i=r.createElement("div");return i.className=S("page",n),T("block","initial").add("position","relative").add("font-family",I.DEFAULT_FONT_FAMILY).add("font-size",`${u.round(u.resolveFontSize(void 0,t).fontSizePx,2)}px`).add("line-height",String(u.resolveLineHeight(void 0))).add("white-space","pre-wrap").add("direction","ltr").mm("width",e.pageWidthMm,t).mm("height",e.pageHeightMm,t).add("background-color","#fff").add("color",I.DEFAULT_TEXT_COLOR).add("overflow","hidden").add("box-sizing","border-box").applyTo(i),e.components.forEach((o,s)=>{const a=le(o,t,n,r);a.dataset.mrComponentIndex=String(s),i.appendChild(a)}),i}function tt(e,t,n={}){const r=n.dpi??96;$.reportOutputDiagnostics(e,"dom",n);const i=t.createElement("div");return i.className=S("root",n),T("block").applyTo(i),i.dataset.schemaVersion=e.schemaVersion,e.pages.forEach(o=>{i.appendChild(xe(o,r,n,t))}),i}function k(e){if(e?.aborted)throw e.reason??new DOMException("The operation was aborted.","AbortError")}const nt=(e,t)=>(k(t),/^data:image\/(?:png|jpe?g|webp|gif|svg\+xml)[;,]/i.test(e)?new Promise((n,r)=>{const i=new Image,o=()=>{i.onload=null,i.onerror=null,t?.removeEventListener("abort",s)},s=()=>{o(),i.src="",r(t?.reason??new DOMException("The operation was aborted.","AbortError"))};i.onload=()=>{o(),n(i)},i.onerror=()=>{o(),r(new Error("Image could not be decoded for Canvas output."))},t?.addEventListener("abort",s,{once:!0}),i.src=e}):Promise.reject(new TypeError("Canvas imageData must be an image data URL; provide imageLoader for other sources.")));function rt(e,t,n){return k(n),n?new Promise((r,i)=>{const o=()=>i(n.reason??new DOMException("The operation was aborted.","AbortError"));n.addEventListener("abort",o,{once:!0}),Promise.resolve().then(()=>e(t,n)).then(r,i).finally(()=>n.removeEventListener("abort",o))}):e(t)}async function it(e,t,n){const r=new Map;for(const i of e.components)!W.isImageBackedComponent(i)||r.has(i.imageData)||r.set(i.imageData,await rt(t,i.imageData,n));return k(n),r}function ot(e,t,n,r,i,o){const s=t,a=s.naturalWidth??s.width??i,l=s.naturalHeight??s.height??o;if(a<=0||l<=0)throw new RangeError("Decoded Canvas image dimensions must be positive.");const c=Math.min(i/a,o/l),d=a*c,m=l*c;e.drawImage(t,n+(i-d)/2,r+(o-m)/2,d,m)}function Se(e){return je.createPageWindowIndex(e.pageHeightsPx,e.gapPx).window(e.viewportHeightPx,e.scrollTopPx,e.overscan)}const ce=96/25.4;function te(e,t=96){const n=t/96*ce;return{widthPx:Math.max(1,Math.round(e.pageWidthMm*n)),heightPx:Math.max(1,Math.round(e.pageHeightMm*n))}}function Ce(e,t,n,r=64e6){if(!Number.isFinite(t)||t<=0||!Number.isFinite(n)||n<=0)throw new RangeError("Canvas dpr and dpi must be positive finite numbers.");if(!Number.isFinite(r)||r<=0)throw new RangeError("maxCanvasPixels must be positive and finite.");const i=te(e,n),o=Math.round(i.widthPx*t),s=Math.round(i.heightPx*t);if(!Number.isSafeInteger(o)||!Number.isSafeInteger(s)||o*s>r)throw new RangeError("Canvas page exceeds maxCanvasPixels; reduce resolution or split the report.");return{width:o,height:s}}function Pe(e,t,n,r){const i=document.createElement("canvas"),{widthPx:o,heightPx:s}=te(e,n),a=Ce(e,t,n,r);i.width=a.width,i.height=a.height,i.style.width=`${o}px`,i.style.height=`${s}px`;const l=i.getContext("2d");if(!l)throw new Error("当前环境不支持 Canvas 2D(测试需真浏览器,见 e2e/canvas.spec.ts)");return l.scale(t,t),l.fillStyle="#ffffff",l.fillRect(0,0,o,s),{canvas:i,ctx:l}}function at(e,t=96){return u.resolveFontSize(e,t).fontSizePx}function Ae(e,t,n,r,i,o,s,a="top"){e.font=`${t.italic?"italic ":""}${t.bold?"bold ":""}${t.fontSizePx}px ${s}`,"letterSpacing"in e&&(e.letterSpacing="0px"),e.fillStyle=t.color,e.textBaseline="alphabetic";const l=t.fontSizePx*t.lineHeight,c=t.text===""?[""]:t.text.split(`
|
|
2
|
-
`),
|
|
3
|
-
`);
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const k=require("./defaults-xhmcLLrf.cjs"),Y=require("./record-bindings-By_UKZ2g.cjs"),g=require("./style-UgIJSA1F.cjs"),U=require("./render-plan-7xpGrCEl.cjs"),y=require("./template-registry-Co1zPq5e.cjs"),he=require("./dataset-BkRmwgeJ.cjs"),H=require("./textwrap-CWHyzkBH.cjs"),b=require("./json-snapshot-WWSGlaHG.cjs"),ue=require("./grid-geometry-CZ_cYB6O.cjs"),De=require("./grid-strokes-Cr7DwUux.cjs"),B=require("./capabilities-CAh2Nrue.cjs"),Ze=require("./progress-B0ctFpKf.cjs"),Q=require("./assets-B9ImAi6_.cjs"),J=require("./drill-DYTxuL3A.cjs"),W=require("./param-validation-C3HlcLLO.cjs"),ee=require("./template-catalog-FJE_c9Qe.cjs"),ge=require("./data-explanation-DE55G30w.cjs"),pe=require("./template-outline-BwRV_eRo.cjs"),se=require("./template-fragments-DcKeiylI.cjs"),F=require("./batch-BaP6pWDE.cjs"),fe=require("./tree-BX380Rr7.cjs"),Qe={root:"mr-root",page:"mr-page",comp:"mr-comp",text:"mr-text",lines:"mr-lines",line:"mr-line",rich:"mr-rich",paragraph:"mr-paragraph",segment:"mr-segment",image:"mr-image",shape:"mr-shape",grid:"mr-grid",row:"mr-row",cell:"mr-cell",unknown:"mr-unknown"};function P(e,t){return t?.classNames?.[e]??Qe[e]}class et{constructor(){this.props=[]}add(t,n){return n==null||n===!1||n===""?this:(this.props.push([t,String(n)]),this)}mm(t,n,r,i=2){return this.add(t,`${g.round(g.mmToPx(n,r),i)}px`)}toString(){let t="";for(const[n,r]of this.props)t+=`${n}:${r};`;return t}applyTo(t){const n=this.toString();n&&(t.style.cssText=n)}}function T(e,t="unset"){return new et().add("all",t).add("display",e).add("box-sizing","border-box")}function ke(e,t,n){e.add("color",t.color).add("font-family",t.fontFamily).add("font-weight",t.bold!=null?t.bold?"700":"400":void 0).add("font-style",t.italic!=null?t.italic?"italic":"normal":void 0).add("text-decoration",t.underline!=null?t.underline?"underline":"none":void 0).add("letter-spacing",t.letterSpacing!=null?`${t.letterSpacing}pt`:void 0).add("line-height",String(g.resolveLineHeight(t))).add("text-align",t.align);const r=g.resolveFontSize(t,n);e.add("font-size",`${g.round(r.fontSizePx,2)}px`)}function tt(e,t,n){const r=t.style??{};ke(e,r,n),e.add("background-color",r.backgroundColor).add("opacity",r.opacity!=null?String(r.opacity):void 0).add("transform",r.rotateDeg?`rotate(${r.rotateDeg}deg)`:void 0)}function nt(e,t,n,r,i,a){const l=e.cell,o=a.createElement("td");o.className=P("cell",i),o.dataset.mrRowIndex=String(e.ri),o.dataset.mrColumnIndex=String(e.ci),o.setAttribute("role",t.table?.role==="header"?"columnheader":"cell"),l.colSpan&&(o.colSpan=l.colSpan),l.rowSpan&&(o.rowSpan=l.rowSpan);const s=g.mergeComponentStyles(t.style,l.style),c=T("block").add("position","absolute").mm("left",e.xMm,r).mm("top",e.yMm,r).mm("width",e.widthMm,r).mm("height",e.heightMm,r).add("background-color",s.backgroundColor).add("vertical-align",s.verticalAlign??"middle");ke(c,s,r),c.applyTo(o);const m=a.createElement("div");m.className="mr-cell-content",T("flex").add("position","absolute").mm("left",n+(l.indentMm??0),r).mm("right",n,r).mm("top",n,r).mm("bottom",n,r).add("flex-direction","column").add("justify-content",s.verticalAlign==="top"?"flex-start":s.verticalAlign==="bottom"?"flex-end":"center").add("overflow-wrap","anywhere").add("overflow","hidden").applyTo(m),l.text!=null&&m.append(l.text);for(const d of l.children??[])m.appendChild(we(d,r,i,a));return o.appendChild(m),o}function rt(e,t,n,r){return De.resolveGridStrokes(e,t).map(i=>{const a=`${g.round(i.widthPt*n/72,2)}px solid ${i.color}`,l=r.createElement("div");l.className="mr-grid-edge",l.setAttribute("aria-hidden","true");const o=i.kind==="h";return T("block").add("position","absolute").add("pointer-events","none").mm("left",o?i.from:i.pos,n).mm("top",o?i.pos:i.from,n).mm("width",o?i.to-i.from:0,n).mm("height",o?0:i.to-i.from,n).add(o?"border-top":"border-left",a).applyTo(l),l})}function it(e,t,n,r,i){const a=i.createElement("table");a.className=P("grid",r),a.setAttribute("role","table"),T("block").add("position","relative").add("width","100%").add("height","100%").applyTo(a);const l=ue.resolveGridLayout(e,t.widthMm,t.heightMm),o=i.createElement("tbody");T("contents").applyTo(o),a.appendChild(o);const s=e.cells.map(()=>{const m=i.createElement("tr");return m.className=P("row",r),m.setAttribute("role","row"),T("contents").applyTo(m),o.appendChild(m),m});for(const m of l.cells)s[m.ri].appendChild(nt(m,t,e.paddingMm??.5,n,r,i));const c=i.createElement("div");return T("block").add("position","relative").add("width","100%").add("height","100%").applyTo(c),c.append(a,...rt(l,t,n,i)),c}function ot(e,t,n,r){const i=r.createElement("div");i.className=P("paragraph",n),T("block").add("text-align",e.align).add("line-height",e.lineHeight!=null?String(e.lineHeight):void 0).mm("margin-top",e.spaceBeforeMm??0,t).mm("margin-bottom",e.spaceAfterMm??0,t).mm("text-indent",e.indentMm??0,t).applyTo(i);for(const a of e.segments||[]){const l=r.createElement("span");l.className=P("segment",n),l.textContent=a.kind==="field"?a.field??"":a.text??"";const o=T("inline");if(a.style){const s=a.style;o.add("color",s.color).add("font-family",s.fontFamily).add("font-weight",s.bold!=null?s.bold?"700":"400":void 0).add("font-style",s.italic!=null?s.italic?"italic":"normal":void 0).add("text-decoration",s.underline!=null?s.underline?"underline":"none":void 0),(s.fontSize!=null||s.fontSizePx!=null)&&o.add("font-size",`${g.round(g.resolveFontSize(s,t).fontSizePx,2)}px`)}o.applyTo(l),i.appendChild(l)}return i}function at(e,t,n,r){if(U.isRichText(e)){const i=r.createElement("div");i.className=P("rich",n),T("block").applyTo(i);for(const a of e.richParagraphs)i.appendChild(ot(a,t,n,r));return i}if(Array.isArray(e.lines)&&e.lines.length>0){const i=r.createElement("div");i.className=P("lines",n),T("block").applyTo(i);for(const a of e.lines){const l=r.createElement("div");l.className=P("line",n),l.textContent=a,T("block").add("white-space","pre").add("min-height","1lh").applyTo(l),i.appendChild(l)}return i}return e.text??""}function st(e,t,n,r){const i=r.createElement("div");i.className=P("text",n);const a=e.style||{};return T("flex").add("width","100%").add("height","100%").add("flex-direction","column").add("justify-content",a.verticalAlign==="middle"?"center":a.verticalAlign==="bottom"?"flex-end":"flex-start").add("overflow-wrap","anywhere").add("overflow","hidden").applyTo(i),i.append(at(e,t,n,r)),i}function lt(e,t,n){const r=n.createElement("img");return r.className=P("image",t),r.src=e.imageData,T("block").add("width","100%").add("height","100%").add("object-fit","contain").applyTo(r),r.alt=e.kind,r}function Re(e,t,n,r){const i=r.createElement("div");i.className=P("shape",n);const a=e.style||{},l=g.resolveStroke(a),o=g.resolveBoxBorders(a),s=`${g.round(l.widthPt*t/72,2)}px solid ${l.color}`,c=T("block");return e.grid?c.add("position","relative"):e.kind==="rect"?(o.top&&c.add("border-top",s),o.right&&c.add("border-right",s),o.bottom&&c.add("border-bottom",s),o.left&&c.add("border-left",s)):e.kind==="ellipse"?(o.inner&&c.add("border",s).add("border-radius","50%"),a.backgroundColor&&c.add("background-color",a.backgroundColor)):e.kind==="line"&&c.add("height","0").add("border-top",s),c.add("box-sizing","border-box").add("width","100%").add("height","100%"),c.applyTo(i),i}function ct(e,t,n){const r=n.createElementNS("http://www.w3.org/2000/svg","svg"),i=g.mmToPx(e.widthMm,t),a=g.mmToPx(e.heightMm,t);r.setAttribute("width",String(Math.max(1,i))),r.setAttribute("height",String(Math.max(1,a))),r.setAttribute("aria-hidden","true"),r.style.overflow="visible",r.style.display="block";const l=n.createElementNS("http://www.w3.org/2000/svg","line");l.setAttribute("x1","0"),l.setAttribute("x2",String(i)),l.setAttribute("y1",e.lineDirection==="up"?String(a):"0"),l.setAttribute("y2",e.lineDirection==="up"?"0":String(a));const o=g.resolveStroke({...e.style,borderColor:e.style?.lineColor??e.style?.borderColor});return l.setAttribute("stroke",o.color),l.setAttribute("stroke-width",String(o.widthPt*t/72)),r.appendChild(l),r}function we(e,t,n,r){const i=r.createElement("div");i.className=`${P("comp",n)} mr-kind-${e.kind}`;const a=T("block").add("position","absolute").mm("left",e.leftMm,t).mm("top",e.topMm,t).mm("width",e.widthMm,t).mm("height",e.heightMm,t).add("box-sizing","border-box");if(tt(a,e,t),a.applyTo(i),U.isImageBackedComponent(e))return i.appendChild(lt(e,n,r)),i;if(e.kind==="text")return i.appendChild(st(e,t,n,r)),i;if(e.grid){const o=Re(e,t,n,r);return o.appendChild(it(e.grid,e,t,n,r)),i.appendChild(o),i}if(e.kind==="line"&&e.lineDirection)return i.appendChild(ct(e,t,r)),i;if(e.kind==="line"||e.kind==="rect"||e.kind==="ellipse")return i.appendChild(Re(e,t,n,r)),i;const l=r.createElement("div");return l.className=P("unknown",n),T("block").applyTo(l),l.textContent=e.fallbackText??`[${e.kind}]`,l.dataset.mrUnsupported=e.kind,l.setAttribute("role","note"),i.appendChild(l),i}function Fe(e,t,n,r){const i=r.createElement("div");return i.className=P("page",n),T("block","initial").add("position","relative").add("font-family",k.DEFAULT_FONT_FAMILY).add("font-size",`${g.round(g.resolveFontSize(void 0,t).fontSizePx,2)}px`).add("line-height",String(g.resolveLineHeight(void 0))).add("white-space","pre-wrap").add("direction","ltr").mm("width",e.pageWidthMm,t).mm("height",e.pageHeightMm,t).add("background-color","#fff").add("color",k.DEFAULT_TEXT_COLOR).add("overflow","hidden").add("box-sizing","border-box").applyTo(i),e.components.forEach((a,l)=>{const o=we(a,t,n,r);o.dataset.mrComponentIndex=String(l),i.appendChild(o)}),i}function mt(e,t,n={}){const r=n.dpi??96;B.reportOutputDiagnostics(e,"dom",n);const i=t.createElement("div");return i.className=P("root",n),T("block").applyTo(i),i.dataset.schemaVersion=e.schemaVersion,e.pages.forEach(a=>{i.appendChild(Fe(a,r,n,t))}),i}function $(e){if(e?.aborted)throw e.reason??new DOMException("The operation was aborted.","AbortError")}const dt=(e,t)=>($(t),/^data:image\/(?:png|jpe?g|webp|gif|svg\+xml)[;,]/i.test(e)?new Promise((n,r)=>{const i=new Image,a=()=>{i.onload=null,i.onerror=null,t?.removeEventListener("abort",l)},l=()=>{a(),i.src="",r(t?.reason??new DOMException("The operation was aborted.","AbortError"))};i.onload=()=>{a(),n(i)},i.onerror=()=>{a(),r(new Error("Image could not be decoded for Canvas output."))},t?.addEventListener("abort",l,{once:!0}),i.src=e}):Promise.reject(new TypeError("Canvas imageData must be an image data URL; provide imageLoader for other sources.")));function ht(e,t,n){return $(n),n?new Promise((r,i)=>{const a=()=>i(n.reason??new DOMException("The operation was aborted.","AbortError"));n.addEventListener("abort",a,{once:!0}),Promise.resolve().then(()=>e(t,n)).then(r,i).finally(()=>n.removeEventListener("abort",a))}):e(t)}async function ut(e,t,n){const r=new Map;for(const i of e.components)!U.isImageBackedComponent(i)||r.has(i.imageData)||r.set(i.imageData,await ht(t,i.imageData,n));return $(n),r}function gt(e,t,n,r,i,a){const l=t,o=l.naturalWidth??l.width??i,s=l.naturalHeight??l.height??a;if(o<=0||s<=0)throw new RangeError("Decoded Canvas image dimensions must be positive.");const c=Math.min(i/o,a/s),m=o*c,d=s*c;e.drawImage(t,n+(i-m)/2,r+(a-d)/2,m,d)}function $e(e){return J.createPageWindowIndex(e.pageHeightsPx,e.gapPx).window(e.viewportHeightPx,e.scrollTopPx,e.overscan)}const ve=96/25.4;function le(e,t=96){const n=t/96*ve;return{widthPx:Math.max(1,Math.round(e.pageWidthMm*n)),heightPx:Math.max(1,Math.round(e.pageHeightMm*n))}}function Ne(e,t,n,r=64e6){if(!Number.isFinite(t)||t<=0||!Number.isFinite(n)||n<=0)throw new RangeError("Canvas dpr and dpi must be positive finite numbers.");if(!Number.isFinite(r)||r<=0)throw new RangeError("maxCanvasPixels must be positive and finite.");const i=le(e,n),a=Math.round(i.widthPx*t),l=Math.round(i.heightPx*t);if(!Number.isSafeInteger(a)||!Number.isSafeInteger(l)||a*l>r)throw new RangeError("Canvas page exceeds maxCanvasPixels; reduce resolution or split the report.");return{width:a,height:l}}function Oe(e,t,n,r){const i=document.createElement("canvas"),{widthPx:a,heightPx:l}=le(e,n),o=Ne(e,t,n,r);i.width=o.width,i.height=o.height,i.style.width=`${a}px`,i.style.height=`${l}px`;const s=i.getContext("2d");if(!s)throw new Error("当前环境不支持 Canvas 2D(测试需真浏览器,见 e2e/canvas.spec.ts)");return s.scale(t,t),s.fillStyle="#ffffff",s.fillRect(0,0,a,l),{canvas:i,ctx:s}}function pt(e,t=96){return g.resolveFontSize(e,t).fontSizePx}function _e(e,t,n,r,i,a,l,o="top"){e.font=`${t.italic?"italic ":""}${t.bold?"bold ":""}${t.fontSizePx}px ${l}`,"letterSpacing"in e&&(e.letterSpacing="0px"),e.fillStyle=t.color,e.textBaseline="alphabetic";const s=t.fontSizePx*t.lineHeight,c=t.text===""?[""]:t.text.split(`
|
|
2
|
+
`),m=c.length*s;let d=r;o==="middle"?d=r+(a-m)/2:o==="bottom"&&(d=r+a-m),c.forEach((h,u)=>{ft(e,h,t,n,d+u*s+t.fontSizePx*.8,i)}),e.textAlign="left"}function ft(e,t,n,r,i,a){const l=Array.from(t),o=n.letterSpacingPx??0;if(!o){e.textAlign=n.align==="center"?"center":n.align==="right"?"right":"left";const d=n.align==="center"?r+a/2:n.align==="right"?r+a:r;e.fillText(t,d,i);return}const s=e.measureText(t).width+Math.max(0,l.length-1)*o,c=n.align==="center"?r+(a-s)/2:n.align==="right"?r+a-s:r;e.textAlign="left";let m="";l.forEach((d,h)=>{e.fillText(d,c+e.measureText(m).width+h*o,i),m+=d})}function wt(e,t,n,r,i,a,l){for(const o of De.resolveGridStrokes(t,n))e.strokeStyle=o.color,e.lineWidth=g.ptToPx(o.widthPt,l),e.beginPath(),o.kind==="v"?(e.moveTo(r+o.pos*a,i+o.from*a),e.lineTo(r+o.pos*a,i+o.to*a)):(e.moveTo(r+o.from*a,i+o.pos*a),e.lineTo(r+o.to*a,i+o.pos*a)),e.stroke()}function vt(e,t,n,r,i,a){e.beginPath(),t.top&&(e.moveTo(n,r),e.lineTo(n+i,r)),t.right&&(e.moveTo(n+i,r),e.lineTo(n+i,r+a)),t.bottom&&(e.moveTo(n+i,r+a),e.lineTo(n,r+a)),t.left&&(e.moveTo(n,r+a),e.lineTo(n,r)),e.stroke()}function Mt(e,t,n,r,i,a,l,o,s,c,m){const d=ue.resolveGridLayout(t,a/o,l/o);for(const u of d.cells){const p=u.cell.style?.backgroundColor??n.style?.backgroundColor;p&&(e.fillStyle=p,e.fillRect(r+u.xMm*o,i+u.yMm*o,u.widthMm*o,u.heightMm*o))}wt(e,d,n,r,i,o,s);const h=t.paddingMm??.5;for(const u of d.cells){const p=u.cell.text??"";if(!p)continue;const v=g.mergeComponentStyles(n.style,u.cell.style),A=g.resolveFontSize(v,s),R=u.cell.indentMm??0,x=Math.max(0,u.widthMm-2*h-R),L=H.wrapText(p,x,{fontSizePt:A.fontSizePt,bold:v.bold,italic:v.italic,fontFamily:v.fontFamily??c,letterSpacingPt:v.letterSpacing},m).join(`
|
|
3
|
+
`);_e(e,{text:L,fontSizePx:A.fontSizePx,bold:v.bold??!1,italic:v.italic,color:g.resolveTextColor(v,k.DEFAULT_TEXT_COLOR),align:v.align??"left",lineHeight:g.resolveLineHeight(v),letterSpacingPx:g.ptToPx(v.letterSpacing??0,s)},r+(u.xMm+h+R)*o,i+(u.yMm+h)*o,x*o,Math.max(0,u.heightMm-2*h)*o,v.fontFamily??c,v.verticalAlign??"middle")}}function yt(e,t,n,r,i,a,l,o,s){const c=t.style??{},m=g.resolveFontSize(c,l),d=U.isRichText(t)?t.richParagraphs.map(h=>h.segments.map(u=>u.text??u.field??"").join("")).join(`
|
|
4
4
|
`):t.lines?.length?t.lines.join(`
|
|
5
|
-
`):
|
|
6
|
-
`);Ae(e,{text:m,fontSizePx:d.fontSizePx,bold:c.bold??!1,italic:c.italic,color:u.resolveTextColor(c),align:c.align??"left",lineHeight:u.resolveLineHeight(c),letterSpacingPx:u.ptToPx(c.letterSpacing??0,s)},n,r,i,o,c.fontFamily??a,c.verticalAlign)}function de(e,t,n,r,i,o,s){const a=t.leftMm*n,l=t.topMm*n,c=t.widthMm*n,d=t.heightMm*n,m=t.style??{};if(W.isImageBackedComponent(t)){const h=s?.get(t.imageData);h?ot(e,h,a,l,c,d):we(e,t,a,l,c,d);return}if(t.grid){dt(e,t.grid,t,a,l,c,d,n,r,i,o);return}switch(t.kind){case"text":{mt(e,t,a,l,c,d,r,i,o);break}case"rect":{const h=u.resolveStroke(m),g=u.resolveBoxBorders(m);m.backgroundColor&&(e.fillStyle=m.backgroundColor,e.fillRect(a,l,c,d)),g.inner&&(e.strokeStyle=h.color,e.lineWidth=u.ptToPx(h.widthPt,r),ct(e,g,a,l,c,d));break}case"line":{const h=u.resolveStroke({...m,borderColor:m.lineColor??m.borderColor});e.strokeStyle=h.color,e.lineWidth=u.ptToPx(h.widthPt,r),e.beginPath();const g=t.lineDirection==="up"?l+d:t.lineDirection==="down"?l:l+d/2,w=t.lineDirection==="up"?l:t.lineDirection==="down"?l+d:l+d/2;e.moveTo(a,g),e.lineTo(a+c,w),e.stroke();break}case"ellipse":{const h=u.resolveStroke(m);e.strokeStyle=h.color,e.lineWidth=u.ptToPx(h.widthPt,r),m.backgroundColor&&(e.fillStyle=m.backgroundColor,e.beginPath(),e.ellipse(a+c/2,l+d/2,c/2,d/2,0,0,Math.PI*2),e.fill()),e.beginPath(),e.ellipse(a+c/2,l+d/2,c/2,d/2,0,0,Math.PI*2),e.stroke();break}default:we(e,t,a,l,c,d);break}}function we(e,t,n,r,i,o){e.save(),e.strokeStyle="#94a3b8",e.strokeRect(n,r,i,o),e.fillStyle="#64748b",e.font="12px sans-serif",e.fillText(t.fallbackText??`[${t.kind}]`,n+3,r+14),e.restore()}async function ut(e,t={}){if(typeof document>"u")throw new Error("renderPlanToImages 需要浏览器环境(SSR/Node 请在客户端钩子中调用)");const{format:n="png",quality:r=.92,...i}=t;if(n!=="png"&&n!=="jpeg")throw new TypeError("Image format must be png or jpeg.");if(!Number.isFinite(r)||r<0||r>1)throw new RangeError("Image quality must be between 0 and 1.");k(t.signal);const o=await C.resolvePlanAssets(e,{...t,format:"canvas"});e=o.plan;const s=[...o.diagnostics,...$.reportOutputDiagnostics(e,"canvas",t)],a=n==="jpeg"?"image/jpeg":"image/png",l=[],c=Math.min(e.pages.length-1,t.end??e.pages.length-1);for(let d=Math.max(0,t.start??0);d<=c;d++){k(t.signal);const m=await Le(e.pages[d],d,i,s);try{l.push(await ht(m,a,r,t.signal))}finally{m.width=0,m.height=0}await We.outputCheckpoint(t,l.length,c-Math.max(0,t.start??0)+1)}return k(t.signal),{blobs:l,diagnostics:s}}function ht(e,t,n,r){return k(r),new Promise((i,o)=>{const s=()=>o(r?.reason??new DOMException("The operation was aborted.","AbortError"));r?.addEventListener("abort",s,{once:!0});try{e.toBlob(a=>{r?.removeEventListener("abort",s),a?i(a):o(new Error("Canvas encoding failed; no empty image was emitted."))},t,n)}catch(a){r?.removeEventListener("abort",s),o(a)}})}function gt(e,t={}){if(k(t.signal),typeof document>"u")throw new Error("renderPlanToCanvas 需要浏览器环境(SSR 请在客户端钩子中调用)");const n=t.dpr??(typeof devicePixelRatio=="number"?devicePixelRatio:1),r=t.dpi??96,i=r/96*ce,o=t.fontFamily??I.DEFAULT_FONT_FAMILY,s=t.measurer??C.heuristicMeasurer,a=Math.max(0,t.start??0),l=Math.min(e.pages.length-1,t.end??e.pages.length-1),c=[],d=$.reportOutputDiagnostics(e,"canvas",t),m=pt(e,a,l);for(const h of m)$.notifyOutputDiagnostic(h,t),d.push(h);if(t.fidelity==="strict"&&m.length)throw new $.OutputFidelityError(d);for(let h=a;h<=l;h++){k(t.signal);const g=e.pages[h],{canvas:w,ctx:M}=Pe(g,n,r,t.maxCanvasPixels);for(const _ of g.components)de(M,_,i,r,o,s);c.push(w)}return{canvases:c,diagnostics:d}}function pt(e,t,n){return n<t?[]:e.pages.slice(t,n+1).flatMap((r,i)=>r.components.flatMap((o,s)=>W.isImageBackedComponent(o)?[{code:"async-image-required",severity:"warning",format:"canvas",pageIndex:t+i,componentIndex:s,kind:o.kind,nid:o.nid,message:"Use renderPlanToCanvasAsync or renderPlanToImages to decode and include images."}]:[]))}async function ft(e,t={}){if(typeof document>"u")throw new Error("renderPlanToCanvasAsync 需要浏览器环境(Node 请使用 PDF 或 XLSX 输出)");k(t.signal);const n=await C.resolvePlanAssets(e,{...t,format:"canvas"});e=n.plan;const r=[...n.diagnostics,...$.reportOutputDiagnostics(e,"canvas",t)],i=[],o=Math.min(e.pages.length-1,t.end??e.pages.length-1);for(let s=Math.max(0,t.start??0);s<=o;s++)i.push(await Le(e.pages[s],s,t,r));return{canvases:i,diagnostics:r}}async function Le(e,t,n,r){const i=n.dpr??(typeof devicePixelRatio=="number"?devicePixelRatio:1),o=n.dpi??96,s=n.fontFamily??I.DEFAULT_FONT_FAMILY,a=await Ie(e,t,n,r);k(n.signal);const{canvas:l,ctx:c}=Pe(e,i,o,n.maxCanvasPixels);for(const d of e.components)de(c,d,o/25.4,o,s,n.measurer??C.heuristicMeasurer,a);return l}async function Ie(e,t,n,r){const i=n.imageLoader??nt;return it(e,async(o,s)=>{try{return await i(o,s)}catch(a){if(s?.aborted)throw a;const l=e.components.findIndex(m=>m.imageData===o),c=e.components[l],d={code:"image-decode-failed",severity:"warning",format:"canvas",pageIndex:t,componentIndex:l,kind:c.kind,nid:c.nid,message:"Image decoding failed; raster output was cancelled instead of omitting the image."};throw r.push(d),$.notifyOutputDiagnostic(d,n),a}},n.signal)}function wt(e,t={}){const n=t.dpr??(typeof devicePixelRatio=="number"?devicePixelRatio:1),r=t.dpi??96,i=r/96*ce,o=t.fontFamily??I.DEFAULT_FONT_FAMILY,s=t.measurer??C.heuristicMeasurer,a=t.overscan??1,l=t.gapPx??18,c=t.pagesPerFrame??1,d=e.pages.map(f=>f.pageHeightMm*i),m=Math.max(1,...e.pages.map(f=>f.pageWidthMm*i)),h={start:0,end:-1};let g=null,w=null,M=null,_=null,L=[],P=0,F=[],Y=0,G=new AbortController;const he=[];function _e(){const f=g;f.innerHTML="",w=document.createElement("div"),w.style.cssText=`width:${m}px;margin:0 auto;`,M=document.createElement("div"),_=document.createElement("div"),w.appendChild(M),L=[];const R=Math.min(e.pages.length,3+a*2);for(let z=0;z<R;z++){const E=document.createElement("div");E.style.cssText=`margin:0 auto ${l}px;box-shadow:0 2px 8px rgba(0,0,0,.35);background:#fff;`,w.appendChild(E),L.push(E)}w.appendChild(_),f.appendChild(w)}async function Be(f,R){const z=Y,E=await C.resolvePlanAssets(e,{...t,signal:G.signal,format:"canvas",start:R,end:R});he.push(...E.diagnostics);const A=E.plan.pages[R],X=await Ie(A,R,{...t,signal:G.signal},he);if(z!==Y||!g)return;const{widthPx:re,heightPx:ie}=te(A,r);let B=f.firstElementChild;(!B||B.tagName!=="CANVAS")&&(B=document.createElement("canvas"),f.innerHTML="",f.appendChild(B));const pe=Ce(A,n,r,t.maxCanvasPixels);B.width=pe.width,B.height=pe.height,B.style.width=`${re}px`,B.style.height=`${ie}px`;const U=B.getContext("2d");if(U){U.setTransform(1,0,0,1,0,0),U.scale(n,n),U.fillStyle="#ffffff",U.fillRect(0,0,re,ie);for(const ze of A.components)de(U,ze,i,r,o,s,X);B.dataset.canvasPage=String(R),f.style.height=`${ie}px`,f.style.width=`${re}px`}}function He(f){Y++,h.start=f.start,h.end=f.end,M.style.height=`${f.start*l+d.slice(0,f.start).reduce((E,A)=>E+A,0)}px`;const R=e.pages.length-1-f.end;_.style.height=`${R*l+d.slice(f.end+1).reduce((E,A)=>E+A,0)}px`;const z=f.end-f.start+1;L.forEach((E,A)=>{if(A<z){E.style.display="";const X=f.start+A;E.style.height=`${d[X]??0}px`}else E.style.display="none"}),F=[];for(let E=f.start;E<=f.end;E++){const A=L[E-f.start];if(!A)continue;A.firstElementChild?.dataset?.canvasPage!==String(E)&&F.push(E)}ne()}function ne(){P||F.length===0||(P=requestAnimationFrame(()=>{P=0;let f=Math.max(1,c);for(;F.length>0&&f-- >0;){const R=F.shift(),z=L[R-h.start];z&&Be(z,R).catch(()=>{})}F.length>0&&ne()}))}function J(){P||(P=requestAnimationFrame(()=>{P=0;const f=g,R=Se({pageHeightsPx:d,viewportHeightPx:f.clientHeight,scrollTopPx:f.scrollTop,overscan:a,gapPx:l});R.start!==h.start||R.end!==h.end?He(R):ne()}))}let K=null;return{attach(f){if(typeof document>"u")throw new Error("createCanvasPager 需要浏览器环境(SSR 请在客户端钩子中调用 attach)");k(t.signal),G=new AbortController,t.signal?.addEventListener("abort",ge,{once:!0}),$.reportOutputDiagnostics(e,"canvas",t),g=f,_e(),f.addEventListener("scroll",J,{passive:!0}),typeof ResizeObserver<"u"&&(K=new ResizeObserver(()=>J()),K.observe(f)),J()},destroy(){Y++,G.abort(),t.signal?.removeEventListener("abort",ge),P&&cancelAnimationFrame(P),P=0,K?.disconnect(),K=null,g?.removeEventListener("scroll",J),F=[],w?.remove(),g=null},window(){return{...h}}};function ge(){G.abort(t.signal?.reason)}}function me(e,t,n){let r,i;if(typeof e=="string"){const o=u.PAPER_SIZES[e];if(!o)throw new Error(`未知纸张预设 "${e}"(可用:${Object.keys(u.PAPER_SIZES).join("/")})`);r=o.widthMm,i=o.heightMm}else typeof e=="number"?(r=e,i=t??297):(r=e.widthMm,i=e.heightMm);return n?{widthMm:i,heightMm:r}:{widthMm:r,heightMm:i}}class ke{constructor(){this.pages=[],this.pending=null,this.templateParams=void 0}repeat(t){return this.templateRepeat=t,this}params(t){return this.templateParams=t,this}page(t="a4",n={},r){this.collect();const o=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:a}=me(t,typeof n=="number"?n:void 0,o.landscape),l=o.margins??{};return this.pending=new De(this,{widthMm:s,heightMm:a,marginTopMm:l.marginTopMm??10,marginBottomMm:l.marginBottomMm??10,marginLeftMm:l.marginLeftMm??10,marginRightMm:l.marginRightMm??10}),this.pending}collect(){this.pending&&(this.pages.push(this.pending.buildPage()),this.pending=null)}build(){if(this.collect(),this.pages.length===0)throw new Error("模板至少需要一页:先调用 .page() 添加内容");return{...this.templateParams?{params:this.templateParams}:{},...this.templateRepeat?{repeat:this.templateRepeat}:{},pages:this.pages}}}class De{constructor(t,n){this.parent=t,this.page=n,this.components=[]}text(t,n={},r={}){return this.components.push({kind:"text",leftMm:n.leftMm??0,topMm:n.topMm??0,widthMm:n.widthMm??60,heightMm:n.heightMm??8,text:t,style:r}),this}list(t,n,r,i={}){return this.components.push({kind:"list",leftMm:n.leftMm??10,topMm:n.topMm??30,widthMm:n.widthMm??180,dataset:t,columns:r,...i}),this}rect(t,n={}){return this.components.push({kind:"rect",...t,style:n}),this}line(t,n,r,i={}){return this.components.push({kind:"line",leftMm:t,topMm:n,widthMm:r,heightMm:.5,style:i}),this}barcode(t,n){return this.components.push({kind:"barcode",leftMm:n.leftMm??0,topMm:n.topMm??0,widthMm:n.widthMm??40,heightMm:n.heightMm??12,fallbackText:t}),this}qrcode(t,n,r,i){return this.components.push({kind:"qrcode",leftMm:r,topMm:i,widthMm:n,heightMm:n,fallbackText:t}),this}buildPage(){return{...this.page,components:this.components}}done(){return this.parent}build(){return this.done().build()}}function vt(){return new ke}function yt(e,t={}){return oe.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 D(e,t,n=!1){if(!Number.isFinite(e)||(n?e<0:e<=0))throw new Error(`${t} 必须是有限${n?"非负":"正"}数`)}function Z(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 bt(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 D(n,"columnWidthMm"),{layout:t,columnWidthMm:n}}function Mt(e){const t=e.paper===void 0?"a4":e.paper;if(typeof t!="string"&&(typeof t!="object"||t===null)||e.landscape!==void 0&&typeof e.landscape!="boolean")throw new Error("paper 必须是纸张预设名或 { widthMm, heightMm } 对象,landscape 必须是布尔值");if(typeof t=="string"&&!Object.prototype.hasOwnProperty.call(u.PAPER_SIZES,t))throw new Error(`未知纸张预设 "${t}"(可用:${Object.keys(u.PAPER_SIZES).join("/")})`);const n=me(t,void 0,e.landscape),r=n.widthMm,i=n.heightMm;return D(r,"纸张 widthMm"),D(i,"纸张 heightMm"),{widthMm:r,heightMm:i}}function Et(e){if(e.margins!==void 0&&(!e.margins||typeof e.margins!="object"||Array.isArray(e.margins)))throw new Error("margins 必须是页边距对象");const t=e.margins??{},n={marginTopMm:t.marginTopMm===void 0?10:t.marginTopMm,marginBottomMm:t.marginBottomMm===void 0?10:t.marginBottomMm,marginLeftMm:t.marginLeftMm===void 0?10:t.marginLeftMm,marginRightMm:t.marginRightMm===void 0?10:t.marginRightMm};for(const[r,i]of Object.entries(n))D(i,r,!0);return n}function Tt(e,t){const n=e.dataset===void 0?"detail":e.dataset;if(typeof n!="string"||!n.trim())throw new Error("dataset 必须是非空字符串");if(e.title!==void 0&&typeof e.title!="string")throw new Error("title 必须是字符串");const r=e.titleHeightMm===void 0?10:e.titleHeightMm,i=e.titleGapMm===void 0?4:e.titleGapMm;D(r,"titleHeightMm"),D(i,"titleGapMm",!0);const o=e.title!==void 0&&e.title.length>0,s=o?r+i:0;if(s>=t)throw new Error("标题高度与间距占满页面,必须为表格保留可用高度");return{dataset:n,titleHeightMm:r,hasTitle:o,titleSpaceMm:s}}function Rt(e){if(e.listOptions!==void 0&&(!e.listOptions||typeof e.listOptions!="object"||Array.isArray(e.listOptions)))throw new Error("listOptions 必须是列表配置对象");const t=e.listOptions??{};Z(t.align,"listOptions.align",!0),Z(t.headerAlign,"listOptions.headerAlign",!1);for(const n of["fontSizePt","rowHeightMm","paddingMm"]){const r=t[n];r!==void 0&&D(r,`listOptions.${n}`,n==="paddingMm")}return t}function xt(e){let t=0,n=0;for(const[r,i]of e.entries()){if(!i||typeof i.header!="string"||typeof i.field!="string"||!i.field.trim())throw new Error(`columns[${r}] 需要字符串 header 与非空 field`);Z(i.align,`columns[${r}].align`,!0),Z(i.headerAlign,`columns[${r}].headerAlign`,!1),i.flex!==void 0&&D(i.flex,`columns[${r}].flex`),i.widthMm!==void 0?(D(i.widthMm,`columns[${r}].widthMm`),t+=i.widthMm):n=Math.max(n,i.flex??1)}return{fixedWidthMm:t,maxFlex:n}}function St(e,t,n,r){const{fixedWidthMm:i,maxFlex:o}=xt(e.columns);if(t==="page"&&i>r)throw new Error(`固定列宽 ${i}mm 超出页面可用宽度 ${r}mm`);const s=r-i;if(t==="page"&&o>0&&s<=0)throw new Error("固定列占满页面可用宽度,自动列需要正的剩余宽度");const a=o>0?e.columns.reduce((c,d)=>c+(d.widthMm===void 0?(d.flex??1)/o:0),0):0;return{columns:e.columns.map(({widthMm:c,flex:d,...m},h)=>{const g=c??(t==="wide"?n*(d??1):s*((d??1)/o)/a);return D(g,`columns[${h}] 分配后的 widthMm`),{...m,widthMm:g}}),fixedWidthMm:i,maxFlex:o}}function Ct(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}=bt(e),r=Mt(e);let i=r.widthMm;const o=r.heightMm,s=Et(e);let a=i-s.marginLeftMm-s.marginRightMm;const l=o-s.marginTopMm-s.marginBottomMm;if(t==="page"&&a<=0||l<=0)throw new Error("页边距占满纸张,必须保留正的可用宽度和高度");const{dataset:c,titleHeightMm:d,hasTitle:m,titleSpaceMm:h}=Tt(e,l),g=Rt(e),{columns:w,fixedWidthMm:M,maxFlex:_}=St(e,t,n,a);t==="wide"&&(a=w.reduce((P,F)=>P+F.widthMm,0),D(a,"宽表总列宽"),i=a+s.marginLeftMm+s.marginRightMm,D(i,"宽表总宽度"));const L={widthMm:i,heightMm:o,...s,components:[],...t==="wide"?{layout:t}:{}};return m&&L.components.push({kind:"text",text:e.title,leftMm:s.marginLeftMm,topMm:s.marginTopMm,widthMm:a,heightMm:d,style:{fontSize:16,bold:!0,align:"center",verticalAlign:"middle",...e.titleStyle}}),L.components.push({align:"auto",headerAlign:"center",...g,kind:"list",...t==="wide"?{layout:t}:{},...m?{title:e.title}:{},dataset:c,columns:w,leftMm:s.marginLeftMm,topMm:s.marginTopMm+h,widthMm:t==="wide"||_>0?a:M}),e.params===void 0?{pages:[L]}:{params:e.params,pages:[L]}}function Pt(e){if(e.components!==void 0&&e.pages!==void 0)throw new TypeError("标签 components 与 pages 只能选择一种");const{dataset:t,rowKey:n,copies:r,params:i}=e,o=e.pages??[{components:e.components??[]}],s={repeat:{dataset:t,...n===void 0?{}:{rowKey:n},...r===void 0?{}:{copies:r}},...i===void 0?{}:{params:i},pages:o.map(l=>({widthMm:l.widthMm??e.widthMm??80,heightMm:l.heightMm??e.heightMm??55,marginTopMm:0,marginRightMm:0,marginBottomMm:0,marginLeftMm:0,components:l.components,...l.meta===void 0?{}:{meta:l.meta}}))},a=b.validateReportTemplate(s);if(!a.ok)throw new b.ReportTemplateError(a.errors);return JSON.parse(JSON.stringify(s))}function At(e){if(!e||typeof e!="object"||!e.repeat)throw new p.ReportSourceError("config","defineLabelReport 需要带 repeat 的固定标签模板");const t=b.validateReportTemplate(e);if(!t.ok)throw new b.ReportTemplateError(t.errors);return e.repeat.dataset}function ve(e,t){if(!Array.isArray(e))throw new p.ReportSourceError("validate","标签数据应为对象数组;请从业务响应中提取行数组");return{[t]:e}}function Lt(e){const{template:t,rows:n,load:r,dataSchema:i,params:o,pagination:s,dataValidation:a}=e,l=At(t);if(n!==void 0==(r!==void 0)||r!==void 0&&typeof r!="function")throw new p.ReportSourceError("config","标签报表应且只能配置 rows 或 load 其中一种数据来源");const c={template:t,params:o,pagination:s,dataValidation:a,...i===void 0?{}:{dataSchema:{[l]:i}}};return r?p.defineReport({...c,load:r,mapData:d=>ve(d,l)}):{...c,datasets:ve(n,l)}}function It(e){return e}class N extends Error{constructor(t,n){super(n),this.code=t,this.name="ReportTemplateStoreError"}}function O(e){return JSON.parse(JSON.stringify(e))}function x(e){if(!e?.aborted)return;const t=new Error("模板操作已取消");throw t.name="AbortError",t}function ye(e){const t=e?Number(e.revision):0;if(!Number.isSafeInteger(t)||t<0||t>=Number.MAX_SAFE_INTEGER)throw new N("history","修订号无效或已达上限");return String(t+1)}function kt(e,t={}){const n=async(s,a)=>{x(a);const l=await e.read(s,a);return x(a),l?O(l):void 0},r=async(s,a)=>{const l=await n(s,a.signal);if((l?.revision??null)!==a.expectedRevision)throw new N("conflict","模板已变化,请重新读取后提交");return l},i=async(s,a,l)=>{if(x(a.signal),!await e.compareAndSwap(s.id,a.expectedRevision,O(s),{signal:a.signal,...l?{publication:O(l)}:{}}))throw new N("conflict","模板已被其他请求更新");return O(s)},o=async(s,a,l,c)=>{if(t.beforePublish){x(l.signal);const g=await t.beforePublish({document:b.parseReportTemplate(a),previous:s.published?b.parseReportTemplate(s.published):void 0,signal:l.signal});if(!g||g.ok!==!0)throw new N("review",g?.issues?.find(w=>w.severity==="error")?.message??"模板发布检查未通过");x(l.signal)}const d=ye(s),m=b.parseReportTemplate({...a,revision:d}),h={revision:d,document:m,publishedAt:(t.now?.()??new Date).toISOString()};return c!==void 0&&(h.restoredFrom=c),i({id:s.id,revision:d,publishedRevision:d,published:m},l,h)};return{list:async s=>{x(s);const a=await e.list(s);return x(s),O(a)},get:async(s,a={})=>{const l=await n(s,a.signal),c=a.draft?l?.draft:l?.published;return c?b.parseReportTemplate(c):void 0},history:async(s,a)=>{x(a);const l=await e.history(s,a);return x(a),O(l)},saveDraft:async(s,a)=>{a={...a},x(a.signal);const l=b.parseReportTemplate(t.migrate?await t.migrate(s):s),c=await r(l.id,a),d=ye(c);return i({id:l.id,revision:d,draft:{...l,revision:d},...c?.publishedRevision?{publishedRevision:c.publishedRevision,published:c.published}:{}},a)},publish:async(s,a)=>{a={...a};const l=await r(s,a);if(!l)throw new N("missing","模板不存在");if(!l.draft)throw new N("draft","没有可发布的草稿");return o(l,l.draft,a)},rollback:async(s,a,l)=>{l={...l};const c=await r(s,l);if(!c)throw new N("missing","模板不存在");x(l.signal);const d=await e.getVersion(s,a,l.signal);if(!d)throw new N("history","历史修订不存在");return o(c,d.document,l,a)}}}function Dt(){const e=new Map,t=new Map;return{read:async(n,r)=>{x(r);const i=e.get(n);return i?O(i):void 0},list:async n=>(x(n),Array.from(e.values(),({id:r,revision:i,publishedRevision:o})=>({id:r,revision:i,...o?{publishedRevision:o}:{}}))),history:async(n,r)=>(x(r),Array.from(t.get(n)?.values()??[],i=>O(i))),getVersion:async(n,r,i)=>{x(i);const o=t.get(n)?.get(r);return o?O(o):void 0},compareAndSwap:async(n,r,i,o)=>{if(x(o.signal),(e.get(n)?.revision??null)!==r)return!1;if(i.id!==n)throw new N("history","状态 ID 与存储 ID 不一致");const s=O(i),a=o.publication;if(a){const l=t.get(n)??new Map;if(l.has(a.revision)||a.revision!==i.revision||a.document.id!==n)throw new N("history","发布修订不可覆盖,且必须与状态修订和模板 ID 一致");l.set(a.revision,O(a)),t.set(n,l)}return e.set(n,s),!0}}}function Ft(e,t){const n=e.publishedRevision??e.published?.revision;for(const r of[e.draftRevision,n])if(r!==void 0&&(typeof r!="string"||!r.trim()))throw new TypeError("模板生命周期修订应为非空字符串");if(e.draftRevision!==void 0&&e.draftRevision!==t.revision)throw new TypeError("可编辑文档应与草稿修订一致");if(e.published&&(e.published.id!==t.id||e.published.revision!==n))throw new TypeError("发布文档身份或修订不一致");if(!e.published&&n!==void 0&&n!==t.revision)throw new TypeError("发布修订需要对应的独立文档");return{...e.draftRevision===void 0?{}:{draftRevision:e.draftRevision},...n===void 0?{}:{publishedRevision:n}}}function Nt(e,t){const n=b.parseReportTemplate(e);if(t.id===n.id)throw new Error("复制模板应使用新的 ID");const{revision:r,...i}=n;return b.parseReportTemplate({...i,id:t.id,name:t.name})}function Ot(e){if(!Array.isArray(e)||e.length>1e3)throw new RangeError("本地模板目录最多 1000 项");const t=new Map,n=new Map,r=[];for(const i of e){const o=b.parseReportTemplate(i.document);if(t.has(o.id))throw new Error(`模板 ID 重复:${o.id}`);if(i.category!==void 0&&(typeof i.category!="string"||i.category.length>128)||i.tags!==void 0&&(!Array.isArray(i.tags)||i.tags.length>20||i.tags.some(c=>typeof c!="string"||c.length>128)))throw new TypeError("模板分类和标签无效");const s=Ft(i,o),{template:a,...l}=o;t.set(o.id,o),i.published?n.set(o.id,b.parseReportTemplate(i.published)):s.publishedRevision&&n.set(o.id,b.parseReportTemplate(o)),r.push({...l,...s,...i.category?{category:i.category}:{},...i.tags?{tags:[...i.tags]}:{}})}return r.sort((i,o)=>i.id<o.id?-1:1),{search:async i=>{be(i.signal);const o=i.limit??30;if(!Number.isSafeInteger(o)||o<1||o>100)throw new RangeError("模板每页数量应为 1–100");const s=i.query?.trim().toLocaleLowerCase()??"",a=r.filter(c=>(!i.category||c.category===i.category)&&(!i.cursor||c.id>i.cursor)&&(!s||[c.id,c.name,c.description,...c.tags??[]].some(d=>d?.toLocaleLowerCase().includes(s)))),l=new Map;for(const c of r)c.category&&l.set(c.category,(l.get(c.category)??0)+1);return JSON.parse(JSON.stringify({items:a.slice(0,o),...a.length>o?{next:a[o-1].id}:{},categories:Array.from(l,([c,d])=>({id:c,label:c,count:d}))}))},get:async(i,o)=>{be(o.signal);const s=o.mode==="published"?n.get(i):t.get(i);return s?b.parseReportTemplate(s):void 0}}}function be(e){if(!e?.aborted)return;const t=new Error("模板目录操作已取消");throw t.name="AbortError",t}function $t(e){return e.map(t=>t.map(n=>/[\t\r\n"]/.test(n)?`"${n.replace(/"/g,'""')}"`:n).join(" ")).join(`\r
|
|
7
|
-
`)}function
|
|
8
|
-
`){
|
|
9
|
-
`&&l++;continue}if(o)throw new Error("Invalid quoted clipboard value");r+=c}if(i)throw new Error("Unclosed clipboard quote");return a(),_t(n,e),n}class Fe extends Error{constructor(t,n,r){const i=typeof n.label=="string"?n.label:"单元格",o={definition:`${i}的编辑器配置无效`,type:`${i}的编辑器与数据类型不一致`,required:`${i}不能为空`,min:`${i}不能小于 ${r}`,max:`${i}不能大于 ${r}`,precision:`${i}最多保留 ${r} 位小数`,length:`${i}最多允许 ${r} 个字符`,choice:`${i}请选择有效选项`,date:`${i}请输入有效日期(YYYY-MM-DD)`};super(o[t]),this.code=t,this.field=n,this.expected=r,this.name="ReportCellFieldError"}}function v(e,t,n){throw new Fe(t,e,n)}function Ne(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 Ht(e){const[t="",n="0"]=String(e).toLowerCase().split("e");return Math.max(0,(t.split(".")[1]?.length??0)-Number(n))}function zt(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&&Ht(t)>e.precision&&v(e,"precision",e.precision)}function Wt(e,t){Ne(t)||v(e,"date"),e.min!==void 0&&t<e.min&&v(e,"min",e.min),e.max!==void 0&&t>e.max&&v(e,"max",e.max)}function jt(e){[e.min,e.max].some(t=>t!==void 0&&!Number.isFinite(t))&&v(e,"definition"),e.min!==void 0&&e.max!==void 0&&e.min>e.max&&v(e,"definition"),e.precision!==void 0&&(!Number.isInteger(e.precision)||e.precision<0||e.precision>15)&&v(e,"definition")}function Ut(e){[e.min,e.max].some(t=>t!==void 0&&!Ne(t))&&v(e,"definition"),e.min!==void 0&&e.max!==void 0&&e.min>e.max&&v(e,"definition")}function qt(e,t){(!Array.isArray(t.options)||!t.options.length)&&v(t,"definition");const n=e.valueType==="text"?"string":e.valueType,r=new Set;for(const i of t.options)(!i||typeof i.value!==n||typeof i.value=="number"&&!Number.isFinite(i.value))&&v(t,"definition"),i.label!==void 0&&typeof i.label!="string"&&v(t,"definition"),r.has(i.value)&&v(t,"definition"),r.add(i.value)}function Gt(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 Oe(e,t){(!t||typeof t!="object"||Array.isArray(t)||!["text","number","boolean","enum","date"].includes(t.type))&&v(t??{type:"text"},"definition"),Gt(t),(t.type==="number"||t.type==="boolean")&&e.valueType!==t.type&&v(t,"type"),(t.type==="text"||t.type==="date")&&e.valueType!=="text"&&v(t,"type"),t.type==="number"&&jt(t),t.type==="text"&&t.maxLength!==void 0&&(!Number.isInteger(t.maxLength)||t.maxLength<0)&&v(t,"definition"),t.type==="date"&&Ut(t),t.type==="enum"&&qt(e,t)}function Vt(e,t,n){if(!e.editable)throw new p.ReportCellEditError("readonly");n&&Oe(e,n);const r=p.parseReportCellInput(e,t);return n?(n.required&&typeof r=="string"&&!r.trim()&&v(n,"required"),r===null||r===""?(n.required&&v(n,"required"),r):(n.type==="number"&&zt(n,r),n.type==="date"&&Wt(n,r),n.type==="text"&&n.maxLength!==void 0&&[...String(r)].length>n.maxLength&&v(n,"length",n.maxLength),n.type==="enum"&&!n.options.some(i=>Object.is(i.value,r))&&v(n,"choice"),r)):r}class y extends Error{constructor(t){super(`Report calculation: ${t}`),this.code=t,this.name="ReportCalculationError"}}function q(e){if(!e?.aborted)return;const t=new Error("Calculation cancelled");throw t.name="AbortError",t}async function Q(e,t=1){const n=Math.floor(e.scanned/2048);if(e.scanned+=t,e.scanned>e.maxScanned)throw new y("limit");q(e.signal),Math.floor(e.scanned/2048)>n&&(await e.yieldToHost(),q(e.signal))}function ue(e){return e.table?.role==="header"?-Math.max(1,e.grid?.cells.length??1):e.table?.rowIndex??0}function Me(e,t,n){if(![t.pageIndex,t.componentIndex,t.rowIndex,t.columnIndex].every(a=>Number.isSafeInteger(a)&&a>=0))throw new y("selection");const r=e.pages[t.pageIndex]?.components[t.componentIndex];if(!r?.grid||t.rowIndex>=r.grid.cells.length)throw new y("selection");const i=r.grid.colWidthsMm?.length??r.grid.cells.reduce((a,l)=>Math.max(a,l.length),1);if(t.columnIndex>=i)throw new y("selection");const o=r.table,s=e.pages[n.pageIndex]?.components[n.componentIndex]?.table;if(o&&s&&o.id===s.id){const a=s.columnKeys.indexOf(o.columnKeys[t.columnIndex]??"");if(a<0)throw new y("selection");return{grid:o.id,row:ue(r)+t.rowIndex,column:a}}return{grid:`${t.pageIndex}:${t.componentIndex}`,row:t.rowIndex,column:t.columnIndex}}function Yt(e,t,n){const r=Me(e,t.anchor,t.anchor),i=Me(e,t.focus,t.anchor);if(r.grid!==i.grid)throw new y("selection");const o=(Math.abs(r.row-i.row)+1)*(Math.abs(r.column-i.column)+1);if(!Number.isSafeInteger(o)||o>n)throw new y("limit");return{grid:r.grid,rowStart:Math.min(r.row,i.row),rowEnd:Math.max(r.row,i.row),columnStart:Math.min(r.column,i.column),columnEnd:Math.max(r.column,i.column),origin:e.pages[t.anchor.pageIndex].components[t.anchor.componentIndex].table}}function Jt(e){if(!e)return!1;const t=e.replace(/"[^"]*"|\\.|\[(?![hms]+\])[^\]]*\]/gi,"");return/[ymdhs]/i.test(t)}function Kt(e){if(e.valueType==="text"||e.valueType==="boolean"||Jt(e.numberFormat))return null;const t=e.value;if(typeof t!="number"||!Number.isFinite(t))return null;if(Number.isInteger(t)&&!Number.isSafeInteger(t))throw new y("precision");return t}function Xt(e,t,n){if(e.seen.has(n))return;e.seen.add(n),e.selected++;const r=t?Kt(t):null;r===null?e.excluded++:e.values.push(r)}function Zt(e,t,n,r){return r.origin?e.table?.id===r.origin.id:`${t}:${n}`===r.grid}function Qt(e,t,n){return n.origin?n.origin.columnKeys.indexOf(e.table.columnKeys[t]??""):t}function en(e,t,n,r){const i=r.origin?ue(e)+t:t,o=Qt(e,n,r);return i<r.rowStart||i>r.rowEnd||o<r.columnStart||o>r.columnEnd?null:`${r.grid}:${i}:${o}`}function tn(e,t){const n=t.origin?ue(e):0,r=Math.max(0,t.rowStart-n),i=Math.min(e.grid.cells.length,t.rowEnd-n+1);return i>r?i:0}async function nn(e,t,n,r,i){const o=e.grid;if(t>r.maxScanned)throw new y("limit");const s=o.colWidthsMm?.length??o.cells.reduce((l,c)=>Math.max(l,c.length),1);if(s>r.maxScanned)throw new y("limit");const a=new Map;for(let l=0;l<t;l++){l>0&&l%2048===0&&(await r.yieldToHost(),q(r.signal));let c=0;for(const d of o.cells[l]){for(await Q(r);c<s&&(a.get(c)??0)>l;)c++;if(c>=s)break;const m=Math.max(1,Math.min(d?.colSpan??1,s-c)),h=Math.min(o.cells.length,l+Math.max(1,d?.rowSpan??1));m>1&&await Q(r,m-1);for(let w=c;w<c+m;w++)a.set(w,h);const g=en(e,l,c,n);g&&Xt(i,d,g),c+=m}}}async function rn(e,t,n){const r={values:[],seen:new Set,excluded:0,selected:0};for(let i=0;i<e.pages.length;i++){await Q(n);const o=e.pages[i];for(let s=0;s<o.components.length;s++){await Q(n);const a=o.components[s];if(!a.grid||!Zt(a,i,s,t)||a.table&&a.table.role!=="body")continue;const l=tn(a,t);l&&await nn(a,l,t,n,r)}}return r}function V(e){if(!Number.isFinite(e))throw new y("overflow");return e}function on(e){let t=0,n=0;for(const r of e){const i=r-n,o=V(t+i);n=o-t-i,t=o}return t}async function Ee(e,t){let n=[...e],r=new Array(e.length);for(let o=1;o<e.length;o*=2){for(let s=0;s<e.length;s+=o*2){const a=Math.min(s+o,e.length),l=Math.min(s+o*2,e.length);let c=s,d=a;for(let m=s;m<l;m++)r[m]=d>=l||c<a&&n[c]<=n[d]?n[c++]:n[d++],m%2048===0&&(await t.yieldToHost(),q(t.signal))}[n,r]=[r,n]}const i=Math.floor(n.length/2);return n.length%2?n[i]:V(n[i-1]/2+n[i]/2)}function an(e){const t=on(e);let n=1/0,r=-1/0;for(const i of e)n=Math.min(n,i),r=Math.max(r,i);return{SUM:t,AVERAGE:t/e.length,AVG:t/e.length,MIN:n,MAX:r,COUNT:e.length}}function $e(e,t){if(typeof e!="string"||e.length>256)throw new y("expression");const n=e.toUpperCase().match(/(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?|[A-Z_]+|[()+\-*/]|\S/g)??[];if(!n.length||n.length>64)throw new y("expression");let r=0;function i(a){if(a>16)throw new y("expression");const l=n[r++];if(l==="+"||l==="-")return(l==="-"?-1:1)*i(a+1);if(l==="("){const c=o(0,a+1);if(n[r++]!==")")throw new y("expression");return c}if(l&&/^(?:SUM|AVERAGE|AVG|MIN|MAX|COUNT|MEDIAN)$/.test(l)&&Object.prototype.hasOwnProperty.call(t,l))return V(t[l]);if(l&&/^(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?$/.test(l))return V(Number(l));throw new y("expression")}function o(a,l){let c=i(l);for(;r<n.length;){const d=n[r],m=d==="+"||d==="-"?1:d==="*"||d==="/"?2:0;if(!m||m<a)break;r++;const h=o(m+1,l+1);if(d==="/"&&h===0)throw new y("division");c=V(d==="+"?c+h:d==="-"?c-h:d==="*"?c*h:c/h)}return c}const s=o(1,0);if(r!==n.length)throw new y("expression");return s}function sn(e){const t=e.maxCells??1e5,n=e.maxScannedCells??2e5,r=e.precision??2;if(![t,n].every(i=>Number.isSafeInteger(i)&&i>=1&&i<=2e6))throw new y("limit");if(!Number.isInteger(r)||r<0||r>12)throw new y("precision");return{maxCells:t,maxScanned:n,precision:r}}async function ln(e,t,n={}){const r=sn(n),i={scanned:0,maxScanned:r.maxScanned,signal:n.signal,yieldToHost:n.yieldToHost??(()=>new Promise(l=>setTimeout(l,0)))};q(i.signal);const o=await rn(e,Yt(e,t,r.maxCells),i),s=n.operation??"sum";if(!["sum","average","min","max","count","median","expression"].includes(s))throw new y("expression");let a=null;if(s==="count")a=o.values.length;else if(o.values.length)if(s==="median")a=await Ee(o.values,i);else{const l=an(o.values);s==="expression"?(/\bMEDIAN\b/i.test(n.expression??"")&&(l.MEDIAN=await Ee(o.values,i)),a=$e(n.expression??"",l)):a=l[s.toUpperCase()]}if(q(i.signal),a!==null&&Number.isInteger(a)&&!Number.isSafeInteger(a))throw new y("precision");return{value:a,formatted:a===null?"—":a.toFixed(r.precision),numericCells:o.values.length,excludedCells:o.excluded,selectedCells:o.selected,precision:r.precision}}exports.DEFAULT_BORDER_PT=I.DEFAULT_BORDER_PT;exports.DEFAULT_FONT_FAMILY=I.DEFAULT_FONT_FAMILY;exports.DEFAULT_FONT_PT=I.DEFAULT_FONT_PT;exports.DEFAULT_STROKE_COLOR=I.DEFAULT_STROKE_COLOR;exports.DEFAULT_TEXT_COLOR=I.DEFAULT_TEXT_COLOR;exports.LINE_HEIGHT=I.LINE_HEIGHT;exports.SCHEMA_VERSION_MACH=I.SCHEMA_VERSION_MACH;exports.ReportBindingError=j.ReportBindingError;exports.evalStyleRule=j.evalStyleRule;exports.formatValue=j.formatValue;exports.parseDateLocal=j.parseDateLocal;exports.resolveComponentBinding=j.resolveComponentBinding;exports.toExcelNumberFormat=j.toExcelNumberFormat;exports.toNumber=j.toNumber;exports.CSS_DPI=u.CSS_DPI;exports.MM_PER_INCH=u.MM_PER_INCH;exports.PAPER_SIZES=u.PAPER_SIZES;exports.mergeComponentStyles=u.mergeComponentStyles;exports.mmToPx=u.mmToPx;exports.mmToPxFactor=u.mmToPxFactor;exports.ptToPx=u.ptToPx;exports.pxToMm=u.pxToMm;exports.resolveBoxBorders=u.resolveBoxBorders;exports.resolveFontSize=u.resolveFontSize;exports.resolveLineHeight=u.resolveLineHeight;exports.resolveStroke=u.resolveStroke;exports.resolveTextColor=u.resolveTextColor;exports.round=u.round;exports.RENDER_PLAN_SCHEMA_VERSION=W.RENDER_PLAN_SCHEMA_VERSION;exports.isImageBackedComponent=W.isImageBackedComponent;exports.isRichText=W.isRichText;exports.assertRenderPlan=ee.assertRenderPlan;exports.validateComponent=ee.validateComponent;exports.validatePage=ee.validatePage;exports.validateRenderPlan=ee.validateRenderPlan;exports.datasetJsonSchema=oe.datasetJsonSchema;exports.validateDatasetRows=oe.validateDatasetRows;exports.OutputAssetError=C.OutputAssetError;exports.charWidthEm=C.charWidthEm;exports.createCanvasMeasurer=C.createCanvasMeasurer;exports.createHeuristicMeasurer=C.createHeuristicMeasurer;exports.heuristicMeasurer=C.heuristicMeasurer;exports.measureTextMm=C.measureTextMm;exports.resolvePlanAssets=C.resolvePlanAssets;exports.wrapText=C.wrapText;exports.DEFAULT_LABEL_PAGE_LIMIT=p.DEFAULT_LABEL_PAGE_LIMIT;exports.PaginateCellLimitError=p.PaginateCellLimitError;exports.PaginatePageLimitError=p.PaginatePageLimitError;exports.ReportCellEditError=p.ReportCellEditError;exports.ReportSourceError=p.ReportSourceError;exports.applyReportCellEdit=p.applyReportCellEdit;exports.applyReportCellEditBatch=p.applyReportCellEditBatch;exports.applyReportEditResult=p.applyReportEditResult;exports.countTemplatePages=p.countTemplatePages;exports.createReportCellEdit=p.createReportCellEdit;exports.createReportCellEditBatch=p.createReportCellEditBatch;exports.createReportCellResolver=p.createReportCellResolver;exports.createReportEditSession=p.createReportEditSession;exports.createReportSource=p.createReportSource;exports.defineReport=p.defineReport;exports.diffReportTemplates=p.diffReportTemplates;exports.estimateListLayoutCells=p.estimateListLayoutCells;exports.formatReportCellEdit=p.formatReportCellEdit;exports.getReportCellContext=p.getReportCellContext;exports.getReportEditSession=p.getReportEditSession;exports.paginateTemplate=p.paginateTemplate;exports.paginateTemplatePages=p.paginateTemplatePages;exports.parseReportCellInput=p.parseReportCellInput;exports.projectListColumns=p.projectListColumns;exports.registerReportEditSession=p.registerReportEditSession;exports.relocateReportCellEdits=p.relocateReportCellEdits;exports.reportCellEditKey=p.reportCellEditKey;exports.reviewReportTemplate=p.reviewReportTemplate;exports.summarizeReportCellEdits=p.summarizeReportCellEdits;exports.resolveGridLayout=ae.resolveGridLayout;exports.OutputFidelityError=$.OutputFidelityError;exports.inspectOutputCapabilities=$.inspectOutputCapabilities;exports.reportOutputDiagnostics=$.reportOutputDiagnostics;exports.REPORT_TEMPLATE_DOCUMENT_VERSION=b.REPORT_TEMPLATE_DOCUMENT_VERSION;exports.ReportTemplateError=b.ReportTemplateError;exports.createTemplateRegistry=b.createTemplateRegistry;exports.defineReportTemplate=b.defineReportTemplate;exports.parseReportTemplate=b.parseReportTemplate;exports.serializeReportTemplate=b.serializeReportTemplate;exports.validateReportTemplate=b.validateReportTemplate;exports.validateReportTemplateDocument=b.validateReportTemplateDocument;exports.ReportParamValidationError=H.ReportParamValidationError;exports.assertReportParams=H.assertReportParams;exports.formatReportDateRange=H.formatReportDateRange;exports.isReportDate=H.isReportDate;exports.isReportMonth=H.isReportMonth;exports.isReportYear=H.isReportYear;exports.parseReportDateRange=H.parseReportDateRange;exports.reportParamsJsonSchema=H.reportParamsJsonSchema;exports.validateReportParamDefinitions=H.validateReportParamDefinitions;exports.validateReportParams=H.validateReportParams;exports.TreeRowLimitError=se.TreeRowLimitError;exports.createTreeTable=se.createTreeTable;exports.validateTreeOptions=se.validateTreeOptions;exports.PageBuilder=De;exports.ReportCalculationError=y;exports.ReportCellFieldError=Fe;exports.ReportTemplateStoreError=N;exports.TemplateBuilder=ke;exports.calculateReportSelection=ln;exports.classOf=S;exports.cloneReportTemplate=Nt;exports.columnsFromContract=yt;exports.computePageWindow=Se;exports.createCanvasPager=wt;exports.createLabelTemplate=Pt;exports.createLocalTemplateCatalog=Ot;exports.createMemoryTemplateStore=Dt;exports.createProviderReport=It;exports.createTableTemplate=Ct;exports.createTemplate=vt;exports.createTemplateManager=kt;exports.defineLabelReport=Lt;exports.evaluateReportAggregateExpression=$e;exports.formatReportClipboard=$t;exports.measurePageSizePx=te;exports.parseReportCellFieldInput=Vt;exports.parseReportClipboard=Bt;exports.planFontSizePx=at;exports.renderComponent=le;exports.renderPage=xe;exports.renderPlan=tt;exports.renderPlanToCanvas=gt;exports.renderPlanToCanvasAsync=ft;exports.renderPlanToImages=ut;exports.resolvePaper=me;exports.validateReportCellFieldDefinition=Oe;
|
|
5
|
+
`):H.wrapText(t.text??"",t.widthMm,{fontSizePt:m.fontSizePt,bold:c.bold,italic:c.italic,fontFamily:c.fontFamily??o,letterSpacingPt:c.letterSpacing},s).join(`
|
|
6
|
+
`);_e(e,{text:d,fontSizePx:m.fontSizePx,bold:c.bold??!1,italic:c.italic,color:g.resolveTextColor(c),align:c.align??"left",lineHeight:g.resolveLineHeight(c),letterSpacingPx:g.ptToPx(c.letterSpacing??0,l)},n,r,i,a,c.fontFamily??o,c.verticalAlign)}function Me(e,t,n,r,i,a,l){const o=t.leftMm*n,s=t.topMm*n,c=t.widthMm*n,m=t.heightMm*n,d=t.style??{};if(U.isImageBackedComponent(t)){const h=l?.get(t.imageData);h?gt(e,h,o,s,c,m):Se(e,t,o,s,c,m);return}if(t.grid){Mt(e,t.grid,t,o,s,c,m,n,r,i,a);return}switch(t.kind){case"text":{yt(e,t,o,s,c,m,r,i,a);break}case"rect":{const h=g.resolveStroke(d),u=g.resolveBoxBorders(d);d.backgroundColor&&(e.fillStyle=d.backgroundColor,e.fillRect(o,s,c,m)),u.inner&&(e.strokeStyle=h.color,e.lineWidth=g.ptToPx(h.widthPt,r),vt(e,u,o,s,c,m));break}case"line":{const h=g.resolveStroke({...d,borderColor:d.lineColor??d.borderColor});e.strokeStyle=h.color,e.lineWidth=g.ptToPx(h.widthPt,r),e.beginPath();const u=t.lineDirection==="up"?s+m:t.lineDirection==="down"?s:s+m/2,p=t.lineDirection==="up"?s:t.lineDirection==="down"?s+m:s+m/2;e.moveTo(o,u),e.lineTo(o+c,p),e.stroke();break}case"ellipse":{const h=g.resolveStroke(d);e.strokeStyle=h.color,e.lineWidth=g.ptToPx(h.widthPt,r),d.backgroundColor&&(e.fillStyle=d.backgroundColor,e.beginPath(),e.ellipse(o+c/2,s+m/2,c/2,m/2,0,0,Math.PI*2),e.fill()),e.beginPath(),e.ellipse(o+c/2,s+m/2,c/2,m/2,0,0,Math.PI*2),e.stroke();break}default:Se(e,t,o,s,c,m);break}}function Se(e,t,n,r,i,a){e.save(),e.strokeStyle="#94a3b8",e.strokeRect(n,r,i,a),e.fillStyle="#64748b",e.font="12px sans-serif",e.fillText(t.fallbackText??`[${t.kind}]`,n+3,r+14),e.restore()}async function bt(e,t={}){if(typeof document>"u")throw new Error("renderPlanToImages 需要浏览器环境(SSR/Node 请在客户端钩子中调用)");const{format:n="png",quality:r=.92,...i}=t;if(n!=="png"&&n!=="jpeg")throw new TypeError("Image format must be png or jpeg.");if(!Number.isFinite(r)||r<0||r>1)throw new RangeError("Image quality must be between 0 and 1.");$(t.signal);const a=await Q.resolvePlanAssets(e,{...t,format:"canvas"});e=a.plan;const l=[...a.diagnostics,...B.reportOutputDiagnostics(e,"canvas",t)],o=n==="jpeg"?"image/jpeg":"image/png",s=[],c=Math.min(e.pages.length-1,t.end??e.pages.length-1);for(let m=Math.max(0,t.start??0);m<=c;m++){$(t.signal);const d=await Be(e.pages[m],m,i,l);try{s.push(await Et(d,o,r,t.signal))}finally{d.width=0,d.height=0}await Ze.outputCheckpoint(t,s.length,c-Math.max(0,t.start??0)+1)}return $(t.signal),{blobs:s,diagnostics:l}}function Et(e,t,n,r){return $(r),new Promise((i,a)=>{const l=()=>a(r?.reason??new DOMException("The operation was aborted.","AbortError"));r?.addEventListener("abort",l,{once:!0});try{e.toBlob(o=>{r?.removeEventListener("abort",l),o?i(o):a(new Error("Canvas encoding failed; no empty image was emitted."))},t,n)}catch(o){r?.removeEventListener("abort",l),a(o)}})}function Tt(e,t={}){if($(t.signal),typeof document>"u")throw new Error("renderPlanToCanvas 需要浏览器环境(SSR 请在客户端钩子中调用)");const n=t.dpr??(typeof devicePixelRatio=="number"?devicePixelRatio:1),r=t.dpi??96,i=r/96*ve,a=t.fontFamily??k.DEFAULT_FONT_FAMILY,l=t.measurer??H.heuristicMeasurer,o=Math.max(0,t.start??0),s=Math.min(e.pages.length-1,t.end??e.pages.length-1),c=[],m=B.reportOutputDiagnostics(e,"canvas",t),d=xt(e,o,s);for(const h of d)B.notifyOutputDiagnostic(h,t),m.push(h);if(t.fidelity==="strict"&&d.length)throw new B.OutputFidelityError(m);for(let h=o;h<=s;h++){$(t.signal);const u=e.pages[h],{canvas:p,ctx:v}=Oe(u,n,r,t.maxCanvasPixels);for(const A of u.components)Me(v,A,i,r,a,l);c.push(p)}return{canvases:c,diagnostics:m}}function xt(e,t,n){return n<t?[]:e.pages.slice(t,n+1).flatMap((r,i)=>r.components.flatMap((a,l)=>U.isImageBackedComponent(a)?[{code:"async-image-required",severity:"warning",format:"canvas",pageIndex:t+i,componentIndex:l,kind:a.kind,nid:a.nid,message:"Use renderPlanToCanvasAsync or renderPlanToImages to decode and include images."}]:[]))}async function Rt(e,t={}){if(typeof document>"u")throw new Error("renderPlanToCanvasAsync 需要浏览器环境(Node 请使用 PDF 或 XLSX 输出)");$(t.signal);const n=await Q.resolvePlanAssets(e,{...t,format:"canvas"});e=n.plan;const r=[...n.diagnostics,...B.reportOutputDiagnostics(e,"canvas",t)],i=[],a=Math.min(e.pages.length-1,t.end??e.pages.length-1);for(let l=Math.max(0,t.start??0);l<=a;l++)i.push(await Be(e.pages[l],l,t,r));return{canvases:i,diagnostics:r}}async function Be(e,t,n,r){const i=n.dpr??(typeof devicePixelRatio=="number"?devicePixelRatio:1),a=n.dpi??96,l=n.fontFamily??k.DEFAULT_FONT_FAMILY,o=await He(e,t,n,r);$(n.signal);const{canvas:s,ctx:c}=Oe(e,i,a,n.maxCanvasPixels);for(const m of e.components)Me(c,m,a/25.4,a,l,n.measurer??H.heuristicMeasurer,o);return s}async function He(e,t,n,r){const i=n.imageLoader??dt;return ut(e,async(a,l)=>{try{return await i(a,l)}catch(o){if(l?.aborted)throw o;const s=e.components.findIndex(d=>d.imageData===a),c=e.components[s],m={code:"image-decode-failed",severity:"warning",format:"canvas",pageIndex:t,componentIndex:s,kind:c.kind,nid:c.nid,message:"Image decoding failed; raster output was cancelled instead of omitting the image."};throw r.push(m),B.notifyOutputDiagnostic(m,n),o}},n.signal)}function St(e,t={}){const n=t.dpr??(typeof devicePixelRatio=="number"?devicePixelRatio:1),r=t.dpi??96,i=r/96*ve,a=t.fontFamily??k.DEFAULT_FONT_FAMILY,l=t.measurer??H.heuristicMeasurer,o=t.overscan??1,s=t.gapPx??18,c=t.pagesPerFrame??1,m=e.pages.map(f=>f.pageHeightMm*i),d=Math.max(1,...e.pages.map(f=>f.pageWidthMm*i)),h={start:0,end:-1};let u=null,p=null,v=null,A=null,R=[],x=0,L=[],G=0,z=new AbortController;const Ee=[];function Ye(){const f=u;f.innerHTML="",p=document.createElement("div"),p.style.cssText=`width:${d}px;margin:0 auto;`,v=document.createElement("div"),A=document.createElement("div"),p.appendChild(v),R=[];const S=Math.min(e.pages.length,3+o*2);for(let j=0;j<S;j++){const E=document.createElement("div");E.style.cssText=`margin:0 auto ${s}px;box-shadow:0 2px 8px rgba(0,0,0,.35);background:#fff;`,p.appendChild(E),R.push(E)}p.appendChild(A),f.appendChild(p)}async function Ke(f,S){const j=G,E=await Q.resolvePlanAssets(e,{...t,signal:z.signal,format:"canvas",start:S,end:S});Ee.push(...E.diagnostics);const I=E.plan.pages[S],re=await He(I,S,{...t,signal:z.signal},Ee);if(j!==G||!u)return;const{widthPx:me,heightPx:de}=le(I,r);let q=f.firstElementChild;(!q||q.tagName!=="CANVAS")&&(q=document.createElement("canvas"),f.innerHTML="",f.appendChild(q));const xe=Ne(I,n,r,t.maxCanvasPixels);q.width=xe.width,q.height=xe.height,q.style.width=`${me}px`,q.style.height=`${de}px`;const K=q.getContext("2d");if(K){K.setTransform(1,0,0,1,0,0),K.scale(n,n),K.fillStyle="#ffffff",K.fillRect(0,0,me,de);for(const Je of I.components)Me(K,Je,i,r,a,l,re);q.dataset.canvasPage=String(S),f.style.height=`${de}px`,f.style.width=`${me}px`}}function Xe(f){G++,h.start=f.start,h.end=f.end,v.style.height=`${f.start*s+m.slice(0,f.start).reduce((E,I)=>E+I,0)}px`;const S=e.pages.length-1-f.end;A.style.height=`${S*s+m.slice(f.end+1).reduce((E,I)=>E+I,0)}px`;const j=f.end-f.start+1;R.forEach((E,I)=>{if(I<j){E.style.display="";const re=f.start+I;E.style.height=`${m[re]??0}px`}else E.style.display="none"}),L=[];for(let E=f.start;E<=f.end;E++){const I=R[E-f.start];if(!I)continue;I.firstElementChild?.dataset?.canvasPage!==String(E)&&L.push(E)}ce()}function ce(){x||L.length===0||(x=requestAnimationFrame(()=>{x=0;let f=Math.max(1,c);for(;L.length>0&&f-- >0;){const S=L.shift(),j=R[S-h.start];j&&Ke(j,S).catch(()=>{})}L.length>0&&ce()}))}function te(){x||(x=requestAnimationFrame(()=>{x=0;const f=u,S=$e({pageHeightsPx:m,viewportHeightPx:f.clientHeight,scrollTopPx:f.scrollTop,overscan:o,gapPx:s});S.start!==h.start||S.end!==h.end?Xe(S):ce()}))}let ne=null;return{attach(f){if(typeof document>"u")throw new Error("createCanvasPager 需要浏览器环境(SSR 请在客户端钩子中调用 attach)");$(t.signal),z=new AbortController,t.signal?.addEventListener("abort",Te,{once:!0}),B.reportOutputDiagnostics(e,"canvas",t),u=f,Ye(),f.addEventListener("scroll",te,{passive:!0}),typeof ResizeObserver<"u"&&(ne=new ResizeObserver(()=>te()),ne.observe(f)),te()},destroy(){G++,z.abort(),t.signal?.removeEventListener("abort",Te),x&&cancelAnimationFrame(x),x=0,ne?.disconnect(),ne=null,u?.removeEventListener("scroll",te),L=[],p?.remove(),u=null},window(){return{...h}}};function Te(){z.abort(t.signal?.reason)}}function ye(e,t,n){let r,i;if(typeof e=="string"){const a=g.PAPER_SIZES[e];if(!a)throw new Error(`未知纸张预设 "${e}"(可用:${Object.keys(g.PAPER_SIZES).join("/")})`);r=a.widthMm,i=a.heightMm}else typeof e=="number"?(r=e,i=t??297):(r=e.widthMm,i=e.heightMm);return n?{widthMm:i,heightMm:r}:{widthMm:r,heightMm:i}}class ze{constructor(){this.pages=[],this.pending=null,this.templateParams=void 0}repeat(t){return this.templateRepeat=t,this}params(t){return this.templateParams=t,this}page(t="a4",n={},r){this.collect();const a=r!=null&&!("margins"in r)&&!("landscape"in r)&&("marginTopMm"in r||"marginBottomMm"in r||"marginLeftMm"in r||"marginRightMm"in r)?{margins:r}:typeof n=="number"?r??{}:n,{widthMm:l,heightMm:o}=ye(t,typeof n=="number"?n:void 0,a.landscape),s=a.margins??{};return this.pending=new qe(this,{widthMm:l,heightMm:o,marginTopMm:s.marginTopMm??10,marginBottomMm:s.marginBottomMm??10,marginLeftMm:s.marginLeftMm??10,marginRightMm:s.marginRightMm??10}),this.pending}collect(){this.pending&&(this.pages.push(this.pending.buildPage()),this.pending=null)}build(){if(this.collect(),this.pages.length===0)throw new Error("模板至少需要一页:先调用 .page() 添加内容");return{...this.templateParams?{params:this.templateParams}:{},...this.templateRepeat?{repeat:this.templateRepeat}:{},pages:this.pages}}}class qe{constructor(t,n){this.parent=t,this.page=n,this.components=[]}text(t,n={},r={}){return this.components.push({kind:"text",leftMm:n.leftMm??0,topMm:n.topMm??0,widthMm:n.widthMm??60,heightMm:n.heightMm??8,text:t,style:r}),this}list(t,n,r,i={}){return this.components.push({kind:"list",leftMm:n.leftMm??10,topMm:n.topMm??30,widthMm:n.widthMm??180,dataset:t,columns:r,...i}),this}rect(t,n={}){return this.components.push({kind:"rect",...t,style:n}),this}line(t,n,r,i={}){return this.components.push({kind:"line",leftMm:t,topMm:n,widthMm:r,heightMm:.5,style:i}),this}barcode(t,n){return this.components.push({kind:"barcode",leftMm:n.leftMm??0,topMm:n.topMm??0,widthMm:n.widthMm??40,heightMm:n.heightMm??12,fallbackText:t}),this}qrcode(t,n,r,i){return this.components.push({kind:"qrcode",leftMm:r,topMm:i,widthMm:n,heightMm:n,fallbackText:t}),this}buildPage(){return{...this.page,components:this.components}}done(){return this.parent}build(){return this.done().build()}}function Ct(){return new ze}function Pt(e,t={}){return he.validateDatasetRows([],e),e.fields.map(n=>({field:n.field,header:`${n.label??n.field}${n.unit?` (${n.unit})`:""}`,semanticRole:n.semanticRole??(n.type==="number"||n.type==="decimal"?"measure":n.type==="date"?"date":n.enum?"dimension":"text"),...t[n.field]}))}function N(e,t,n=!1){if(!Number.isFinite(e)||(n?e<0:e<=0))throw new Error(`${t} 必须是有限${n?"非负":"正"}数`)}function oe(e,t,n){if(e!==void 0&&!["left","center","right","justify",...n?["auto"]:[]].includes(e))throw new Error(`${t} 必须是 left/center/right/justify${n?"/auto":""}`)}function At(e){const t=e.layout??"page";if(t!=="page"&&t!=="wide")throw new Error("layout 必须是 page 或 wide");if(t==="wide"&&(e.paper!==void 0||e.landscape!==void 0))throw new Error('宽表布局不能同时指定 paper 或 landscape;标准纸型请使用 layout: "page"');if(t!=="wide"&&e.columnWidthMm!==void 0)throw new Error('columnWidthMm 仅适用于 layout: "wide"');const n=e.columnWidthMm??30;return N(n,"columnWidthMm"),{layout:t,columnWidthMm:n}}function Lt(e){const t=e.paper===void 0?"a4":e.paper;if(typeof t!="string"&&(typeof t!="object"||t===null)||e.landscape!==void 0&&typeof e.landscape!="boolean")throw new Error("paper 必须是纸张预设名或 { widthMm, heightMm } 对象,landscape 必须是布尔值");if(typeof t=="string"&&!Object.prototype.hasOwnProperty.call(g.PAPER_SIZES,t))throw new Error(`未知纸张预设 "${t}"(可用:${Object.keys(g.PAPER_SIZES).join("/")})`);const n=ye(t,void 0,e.landscape),r=n.widthMm,i=n.heightMm;return N(r,"纸张 widthMm"),N(i,"纸张 heightMm"),{widthMm:r,heightMm:i}}function It(e){if(e.margins!==void 0&&(!e.margins||typeof e.margins!="object"||Array.isArray(e.margins)))throw new Error("margins 必须是页边距对象");const t=e.margins??{},n={marginTopMm:t.marginTopMm===void 0?10:t.marginTopMm,marginBottomMm:t.marginBottomMm===void 0?10:t.marginBottomMm,marginLeftMm:t.marginLeftMm===void 0?10:t.marginLeftMm,marginRightMm:t.marginRightMm===void 0?10:t.marginRightMm};for(const[r,i]of Object.entries(n))N(i,r,!0);return n}function Dt(e,t){const n=e.dataset===void 0?"detail":e.dataset;if(typeof n!="string"||!n.trim())throw new Error("dataset 必须是非空字符串");if(e.title!==void 0&&typeof e.title!="string")throw new Error("title 必须是字符串");const r=e.titleHeightMm===void 0?10:e.titleHeightMm,i=e.titleGapMm===void 0?4:e.titleGapMm;N(r,"titleHeightMm"),N(i,"titleGapMm",!0);const a=e.title!==void 0&&e.title.length>0,l=a?r+i:0;if(l>=t)throw new Error("标题高度与间距占满页面,必须为表格保留可用高度");return{dataset:n,titleHeightMm:r,hasTitle:a,titleSpaceMm:l}}function kt(e){if(e.listOptions!==void 0&&(!e.listOptions||typeof e.listOptions!="object"||Array.isArray(e.listOptions)))throw new Error("listOptions 必须是列表配置对象");const t=e.listOptions??{};oe(t.align,"listOptions.align",!0),oe(t.headerAlign,"listOptions.headerAlign",!1);for(const n of["fontSizePt","rowHeightMm","paddingMm"]){const r=t[n];r!==void 0&&N(r,`listOptions.${n}`,n==="paddingMm")}return t}function Ft(e){let t=0,n=0;for(const[r,i]of e.entries()){if(!i||typeof i.header!="string"||typeof i.field!="string"||!i.field.trim())throw new Error(`columns[${r}] 需要字符串 header 与非空 field`);oe(i.align,`columns[${r}].align`,!0),oe(i.headerAlign,`columns[${r}].headerAlign`,!1),i.flex!==void 0&&N(i.flex,`columns[${r}].flex`),i.widthMm!==void 0?(N(i.widthMm,`columns[${r}].widthMm`),t+=i.widthMm):n=Math.max(n,i.flex??1)}return{fixedWidthMm:t,maxFlex:n}}function $t(e,t,n,r){const{fixedWidthMm:i,maxFlex:a}=Ft(e.columns);if(t==="page"&&i>r)throw new Error(`固定列宽 ${i}mm 超出页面可用宽度 ${r}mm`);const l=r-i;if(t==="page"&&a>0&&l<=0)throw new Error("固定列占满页面可用宽度,自动列需要正的剩余宽度");const o=a>0?e.columns.reduce((c,m)=>c+(m.widthMm===void 0?(m.flex??1)/a:0),0):0;return{columns:e.columns.map(({widthMm:c,flex:m,...d},h)=>{const u=c??(t==="wide"?n*(m??1):l*((m??1)/a)/o);return N(u,`columns[${h}] 分配后的 widthMm`),{...d,widthMm:u}}),fixedWidthMm:i,maxFlex:a}}function Nt(e){if(!e||typeof e!="object")throw new Error("标准明细模板需要 options 对象");if(!Array.isArray(e.columns)||e.columns.length===0)throw new Error("columns 至少需要一列");const{layout:t,columnWidthMm:n}=At(e),r=Lt(e);let i=r.widthMm;const a=r.heightMm,l=It(e);let o=i-l.marginLeftMm-l.marginRightMm;const s=a-l.marginTopMm-l.marginBottomMm;if(t==="page"&&o<=0||s<=0)throw new Error("页边距占满纸张,必须保留正的可用宽度和高度");const{dataset:c,titleHeightMm:m,hasTitle:d,titleSpaceMm:h}=Dt(e,s),u=kt(e),{columns:p,fixedWidthMm:v,maxFlex:A}=$t(e,t,n,o);t==="wide"&&(o=p.reduce((x,L)=>x+L.widthMm,0),N(o,"宽表总列宽"),i=o+l.marginLeftMm+l.marginRightMm,N(i,"宽表总宽度"));const R={widthMm:i,heightMm:a,...l,components:[],...t==="wide"?{layout:t}:{}};return d&&R.components.push({kind:"text",text:e.title,leftMm:l.marginLeftMm,topMm:l.marginTopMm,widthMm:o,heightMm:m,style:{fontSize:16,bold:!0,align:"center",verticalAlign:"middle",...e.titleStyle}}),R.components.push({align:"auto",headerAlign:"center",...u,kind:"list",...t==="wide"?{layout:t}:{},...d?{title:e.title}:{},dataset:c,columns:p,leftMm:l.marginLeftMm,topMm:l.marginTopMm+h,widthMm:t==="wide"||A>0?o:v}),e.params===void 0?{pages:[R]}:{params:e.params,pages:[R]}}function Ot(e){if(e.components!==void 0&&e.pages!==void 0)throw new TypeError("标签 components 与 pages 只能选择一种");const{dataset:t,rowKey:n,copies:r,params:i}=e,a=e.pages??[{components:e.components??[]}],l={repeat:{dataset:t,...n===void 0?{}:{rowKey:n},...r===void 0?{}:{copies:r}},...i===void 0?{}:{params:i},pages:a.map(s=>({widthMm:s.widthMm??e.widthMm??80,heightMm:s.heightMm??e.heightMm??55,marginTopMm:0,marginRightMm:0,marginBottomMm:0,marginLeftMm:0,components:s.components,...s.meta===void 0?{}:{meta:s.meta}}))},o=y.validateReportTemplate(l);if(!o.ok)throw new y.ReportTemplateError(o.errors);return JSON.parse(JSON.stringify(l))}function _t(e){if(!e||typeof e!="object"||!e.repeat)throw new b.ReportSourceError("config","defineLabelReport 需要带 repeat 的固定标签模板");const t=y.validateReportTemplate(e);if(!t.ok)throw new y.ReportTemplateError(t.errors);return e.repeat.dataset}function Ce(e,t){if(!Array.isArray(e))throw new b.ReportSourceError("validate","标签数据应为对象数组;请从业务响应中提取行数组");return{[t]:e}}function Bt(e){const{template:t,rows:n,load:r,dataSchema:i,params:a,pagination:l,dataValidation:o}=e,s=_t(t);if(n!==void 0==(r!==void 0)||r!==void 0&&typeof r!="function")throw new b.ReportSourceError("config","标签报表应且只能配置 rows 或 load 其中一种数据来源");const c={template:t,params:a,pagination:l,dataValidation:o,...i===void 0?{}:{dataSchema:{[s]:i}}};return r?b.defineReport({...c,load:r,mapData:m=>Ce(m,s)}):{...c,datasets:Ce(n,s)}}function Ht(e){return e}class O extends Error{constructor(t,n){super(n),this.code=t,this.name="ReportTemplateStoreError"}}function _(e){return JSON.parse(JSON.stringify(e))}function C(e){if(!e?.aborted)return;const t=new Error("模板操作已取消");throw t.name="AbortError",t}function Pe(e){const t=e?Number(e.revision):0;if(!Number.isSafeInteger(t)||t<0||t>=Number.MAX_SAFE_INTEGER)throw new O("history","修订号无效或已达上限");return String(t+1)}function zt(e,t={}){const n=async(l,o)=>{C(o);const s=await e.read(l,o);return C(o),s?_(s):void 0},r=async(l,o)=>{const s=await n(l,o.signal);if((s?.revision??null)!==o.expectedRevision)throw new O("conflict","模板已变化,请重新读取后提交");return s},i=async(l,o,s)=>{if(C(o.signal),!await e.compareAndSwap(l.id,o.expectedRevision,_(l),{signal:o.signal,...s?{publication:_(s)}:{}}))throw new O("conflict","模板已被其他请求更新");return _(l)},a=async(l,o,s,c)=>{if(t.beforePublish){C(s.signal);const u=await t.beforePublish({document:y.parseReportTemplate(o),previous:l.published?y.parseReportTemplate(l.published):void 0,signal:s.signal});if(!u||u.ok!==!0)throw new O("review",u?.issues?.find(p=>p.severity==="error")?.message??"模板发布检查未通过");C(s.signal)}const m=Pe(l),d=y.parseReportTemplate({...o,revision:m}),h={revision:m,document:d,publishedAt:(t.now?.()??new Date).toISOString()};return c!==void 0&&(h.restoredFrom=c),i({id:l.id,revision:m,publishedRevision:m,published:d},s,h)};return{list:async l=>{C(l);const o=await e.list(l);return C(l),_(o)},get:async(l,o={})=>{const s=await n(l,o.signal),c=o.draft?s?.draft:s?.published;return c?y.parseReportTemplate(c):void 0},history:async(l,o)=>{C(o);const s=await e.history(l,o);return C(o),_(s)},saveDraft:async(l,o)=>{o={...o},C(o.signal);const s=y.parseReportTemplate(t.migrate?await t.migrate(l):l),c=await r(s.id,o),m=Pe(c);return i({id:s.id,revision:m,draft:{...s,revision:m},...c?.publishedRevision?{publishedRevision:c.publishedRevision,published:c.published}:{}},o)},publish:async(l,o)=>{o={...o};const s=await r(l,o);if(!s)throw new O("missing","模板不存在");if(!s.draft)throw new O("draft","没有可发布的草稿");return a(s,s.draft,o)},rollback:async(l,o,s)=>{s={...s};const c=await r(l,s);if(!c)throw new O("missing","模板不存在");C(s.signal);const m=await e.getVersion(l,o,s.signal);if(!m)throw new O("history","历史修订不存在");return a(c,m.document,s,o)}}}function qt(){const e=new Map,t=new Map;return{read:async(n,r)=>{C(r);const i=e.get(n);return i?_(i):void 0},list:async n=>(C(n),Array.from(e.values(),({id:r,revision:i,publishedRevision:a})=>({id:r,revision:i,...a?{publishedRevision:a}:{}}))),history:async(n,r)=>(C(r),Array.from(t.get(n)?.values()??[],i=>_(i))),getVersion:async(n,r,i)=>{C(i);const a=t.get(n)?.get(r);return a?_(a):void 0},compareAndSwap:async(n,r,i,a)=>{if(C(a.signal),(e.get(n)?.revision??null)!==r)return!1;if(i.id!==n)throw new O("history","状态 ID 与存储 ID 不一致");const l=_(i),o=a.publication;if(o){const s=t.get(n)??new Map;if(s.has(o.revision)||o.revision!==i.revision||o.document.id!==n)throw new O("history","发布修订不可覆盖,且必须与状态修订和模板 ID 一致");s.set(o.revision,_(o)),t.set(n,s)}return e.set(n,l),!0}}}function Wt(e){return e.map(t=>t.map(n=>/[\t\r\n"]/.test(n)?`"${n.replace(/"/g,'""')}"`:n).join(" ")).join(`\r
|
|
7
|
+
`)}function jt(e,t){const n=e[e.length-1];e.length>1&&n?.length===1&&n[0]===""&&/[\r\n]$/.test(t)&&e.pop()}function Ut(e,t=1e4){if(e.length>4*1024*1024)throw new Error("Clipboard text limit exceeded");const n=[[]];let r="",i=!1,a=!1,l=0;function o(){if(++l>t)throw new Error("Clipboard cell limit exceeded");n[n.length-1].push(r),r="",a=!1}for(let s=0;s<e.length;s++){const c=e[s];if(i){if(c!=='"'){r+=c;continue}if(e[s+1]==='"'){r+='"',s++;continue}i=!1,a=!0;continue}if(c==='"'&&!r&&!a){i=!0;continue}if(c===" "){o();continue}if(c==="\r"||c===`
|
|
8
|
+
`){o(),n.push([]),c==="\r"&&e[s+1]===`
|
|
9
|
+
`&&s++;continue}if(a)throw new Error("Invalid quoted clipboard value");r+=c}if(i)throw new Error("Unclosed clipboard quote");return o(),jt(n,e),n}class We extends Error{constructor(t,n,r){const i=typeof n.label=="string"?n.label:"单元格",a={definition:`${i}的编辑器配置无效`,type:`${i}的编辑器与数据类型不一致`,required:`${i}不能为空`,min:`${i}不能小于 ${r}`,max:`${i}不能大于 ${r}`,precision:`${i}最多保留 ${r} 位小数`,length:`${i}最多允许 ${r} 个字符`,choice:`${i}请选择有效选项`,date:`${i}请输入有效日期(YYYY-MM-DD)`};super(a[t]),this.code=t,this.field=n,this.expected=r,this.name="ReportCellFieldError"}}function w(e,t,n){throw new We(t,e,n)}function je(e){if(typeof e!="string"||!/^\d{4}-\d{2}-\d{2}$/.test(e)||e.startsWith("0000-"))return!1;const t=new Date(`${e}T00:00:00.000Z`);return Number.isFinite(t.getTime())&&t.toISOString().slice(0,10)===e}function Vt(e){const[t="",n="0"]=String(e).toLowerCase().split("e");return Math.max(0,(t.split(".")[1]?.length??0)-Number(n))}function Gt(e,t){e.min!==void 0&&t<e.min&&w(e,"min",e.min),e.max!==void 0&&t>e.max&&w(e,"max",e.max),e.precision!==void 0&&Vt(t)>e.precision&&w(e,"precision",e.precision)}function Yt(e,t){je(t)||w(e,"date"),e.min!==void 0&&t<e.min&&w(e,"min",e.min),e.max!==void 0&&t>e.max&&w(e,"max",e.max)}function Kt(e){[e.min,e.max].some(t=>t!==void 0&&!Number.isFinite(t))&&w(e,"definition"),e.min!==void 0&&e.max!==void 0&&e.min>e.max&&w(e,"definition"),e.precision!==void 0&&(!Number.isInteger(e.precision)||e.precision<0||e.precision>15)&&w(e,"definition")}function Xt(e){[e.min,e.max].some(t=>t!==void 0&&!je(t))&&w(e,"definition"),e.min!==void 0&&e.max!==void 0&&e.min>e.max&&w(e,"definition")}function Jt(e,t){(!Array.isArray(t.options)||!t.options.length)&&w(t,"definition");const n=e.valueType==="text"?"string":e.valueType,r=new Set;for(const i of t.options)(!i||typeof i.value!==n||typeof i.value=="number"&&!Number.isFinite(i.value))&&w(t,"definition"),i.label!==void 0&&typeof i.label!="string"&&w(t,"definition"),r.has(i.value)&&w(t,"definition"),r.add(i.value)}function Zt(e){e.required!==void 0&&typeof e.required!="boolean"&&w(e,"definition"),[e.label,e.hint,e.unit].some(t=>t!==void 0&&typeof t!="string")&&w(e,"definition"),e.type==="boolean"&&[e.trueLabel,e.falseLabel].some(t=>t!==void 0&&typeof t!="string")&&w(e,"definition")}function Ue(e,t){(!t||typeof t!="object"||Array.isArray(t)||!["text","number","boolean","enum","date"].includes(t.type))&&w(t??{type:"text"},"definition"),Zt(t),(t.type==="number"||t.type==="boolean")&&e.valueType!==t.type&&w(t,"type"),(t.type==="text"||t.type==="date")&&e.valueType!=="text"&&w(t,"type"),t.type==="number"&&Kt(t),t.type==="text"&&t.maxLength!==void 0&&(!Number.isInteger(t.maxLength)||t.maxLength<0)&&w(t,"definition"),t.type==="date"&&Xt(t),t.type==="enum"&&Jt(e,t)}function Qt(e,t,n){if(!e.editable)throw new F.ReportCellEditError("readonly");n&&Ue(e,n);const r=F.parseReportCellInput(e,t);return n?(n.required&&typeof r=="string"&&!r.trim()&&w(n,"required"),r===null||r===""?(n.required&&w(n,"required"),r):(n.type==="number"&&Gt(n,r),n.type==="date"&&Yt(n,r),n.type==="text"&&n.maxLength!==void 0&&[...String(r)].length>n.maxLength&&w(n,"length",n.maxLength),n.type==="enum"&&!n.options.some(i=>Object.is(i.value,r))&&w(n,"choice"),r)):r}class M extends Error{constructor(t){super(`Report calculation: ${t}`),this.code=t,this.name="ReportCalculationError"}}function X(e){if(!e?.aborted)return;const t=new Error("Calculation cancelled");throw t.name="AbortError",t}async function ae(e,t=1){const n=Math.floor(e.scanned/2048);if(e.scanned+=t,e.scanned>e.maxScanned)throw new M("limit");X(e.signal),Math.floor(e.scanned/2048)>n&&(await e.yieldToHost(),X(e.signal))}function be(e){return e.table?.role==="header"?-Math.max(1,e.grid?.cells.length??1):e.table?.rowIndex??0}function Ae(e,t,n){if(![t.pageIndex,t.componentIndex,t.rowIndex,t.columnIndex].every(o=>Number.isSafeInteger(o)&&o>=0))throw new M("selection");const r=e.pages[t.pageIndex]?.components[t.componentIndex];if(!r?.grid||t.rowIndex>=r.grid.cells.length)throw new M("selection");const i=r.grid.colWidthsMm?.length??r.grid.cells.reduce((o,s)=>Math.max(o,s.length),1);if(t.columnIndex>=i)throw new M("selection");const a=r.table,l=e.pages[n.pageIndex]?.components[n.componentIndex]?.table;if(a&&l&&a.id===l.id){const o=l.columnKeys.indexOf(a.columnKeys[t.columnIndex]??"");if(o<0)throw new M("selection");return{grid:a.id,row:be(r)+t.rowIndex,column:o}}return{grid:`${t.pageIndex}:${t.componentIndex}`,row:t.rowIndex,column:t.columnIndex}}function en(e,t,n){const r=Ae(e,t.anchor,t.anchor),i=Ae(e,t.focus,t.anchor);if(r.grid!==i.grid)throw new M("selection");const a=(Math.abs(r.row-i.row)+1)*(Math.abs(r.column-i.column)+1);if(!Number.isSafeInteger(a)||a>n)throw new M("limit");return{grid:r.grid,rowStart:Math.min(r.row,i.row),rowEnd:Math.max(r.row,i.row),columnStart:Math.min(r.column,i.column),columnEnd:Math.max(r.column,i.column),origin:e.pages[t.anchor.pageIndex].components[t.anchor.componentIndex].table}}function tn(e){if(!e)return!1;const t=e.replace(/"[^"]*"|\\.|\[(?![hms]+\])[^\]]*\]/gi,"");return/[ymdhs]/i.test(t)}function nn(e){if(e.valueType==="text"||e.valueType==="boolean"||tn(e.numberFormat))return null;const t=e.value;if(typeof t!="number"||!Number.isFinite(t))return null;if(Number.isInteger(t)&&!Number.isSafeInteger(t))throw new M("precision");return t}function rn(e,t,n){if(e.seen.has(n))return;e.seen.add(n),e.selected++;const r=t?nn(t):null;r===null?e.excluded++:e.values.push(r)}function on(e,t,n,r){return r.origin?e.table?.id===r.origin.id:`${t}:${n}`===r.grid}function an(e,t,n){return n.origin?n.origin.columnKeys.indexOf(e.table.columnKeys[t]??""):t}function sn(e,t,n,r){const i=r.origin?be(e)+t:t,a=an(e,n,r);return i<r.rowStart||i>r.rowEnd||a<r.columnStart||a>r.columnEnd?null:`${r.grid}:${i}:${a}`}function ln(e,t){const n=t.origin?be(e):0,r=Math.max(0,t.rowStart-n),i=Math.min(e.grid.cells.length,t.rowEnd-n+1);return i>r?i:0}async function cn(e,t,n,r,i){const a=e.grid;if(t>r.maxScanned)throw new M("limit");const l=a.colWidthsMm?.length??a.cells.reduce((s,c)=>Math.max(s,c.length),1);if(l>r.maxScanned)throw new M("limit");const o=new Map;for(let s=0;s<t;s++){s>0&&s%2048===0&&(await r.yieldToHost(),X(r.signal));let c=0;for(const m of a.cells[s]){for(await ae(r);c<l&&(o.get(c)??0)>s;)c++;if(c>=l)break;const d=Math.max(1,Math.min(m?.colSpan??1,l-c)),h=Math.min(a.cells.length,s+Math.max(1,m?.rowSpan??1));d>1&&await ae(r,d-1);for(let p=c;p<c+d;p++)o.set(p,h);const u=sn(e,s,c,n);u&&rn(i,m,u),c+=d}}}async function mn(e,t,n){const r={values:[],seen:new Set,excluded:0,selected:0};for(let i=0;i<e.pages.length;i++){await ae(n);const a=e.pages[i];for(let l=0;l<a.components.length;l++){await ae(n);const o=a.components[l];if(!o.grid||!on(o,i,l,t)||o.table&&o.table.role!=="body")continue;const s=ln(o,t);s&&await cn(o,s,t,n,r)}}return r}function Z(e){if(!Number.isFinite(e))throw new M("overflow");return e}function dn(e){let t=0,n=0;for(const r of e){const i=r-n,a=Z(t+i);n=a-t-i,t=a}return t}async function Le(e,t){let n=[...e],r=new Array(e.length);for(let a=1;a<e.length;a*=2){for(let l=0;l<e.length;l+=a*2){const o=Math.min(l+a,e.length),s=Math.min(l+a*2,e.length);let c=l,m=o;for(let d=l;d<s;d++)r[d]=m>=s||c<o&&n[c]<=n[m]?n[c++]:n[m++],d%2048===0&&(await t.yieldToHost(),X(t.signal))}[n,r]=[r,n]}const i=Math.floor(n.length/2);return n.length%2?n[i]:Z(n[i-1]/2+n[i]/2)}function hn(e){const t=dn(e);let n=1/0,r=-1/0;for(const i of e)n=Math.min(n,i),r=Math.max(r,i);return{SUM:t,AVERAGE:t/e.length,AVG:t/e.length,MIN:n,MAX:r,COUNT:e.length}}function Ve(e,t){if(typeof e!="string"||e.length>256)throw new M("expression");const n=e.toUpperCase().match(/(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?|[A-Z_]+|[()+\-*/]|\S/g)??[];if(!n.length||n.length>64)throw new M("expression");let r=0;function i(o){if(o>16)throw new M("expression");const s=n[r++];if(s==="+"||s==="-")return(s==="-"?-1:1)*i(o+1);if(s==="("){const c=a(0,o+1);if(n[r++]!==")")throw new M("expression");return c}if(s&&/^(?:SUM|AVERAGE|AVG|MIN|MAX|COUNT|MEDIAN)$/.test(s)&&Object.prototype.hasOwnProperty.call(t,s))return Z(t[s]);if(s&&/^(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?$/.test(s))return Z(Number(s));throw new M("expression")}function a(o,s){let c=i(s);for(;r<n.length;){const m=n[r],d=m==="+"||m==="-"?1:m==="*"||m==="/"?2:0;if(!d||d<o)break;r++;const h=a(d+1,s+1);if(m==="/"&&h===0)throw new M("division");c=Z(m==="+"?c+h:m==="-"?c-h:m==="*"?c*h:c/h)}return c}const l=a(1,0);if(r!==n.length)throw new M("expression");return l}function un(e){const t=e.maxCells??1e5,n=e.maxScannedCells??2e5,r=e.precision??2;if(![t,n].every(i=>Number.isSafeInteger(i)&&i>=1&&i<=2e6))throw new M("limit");if(!Number.isInteger(r)||r<0||r>12)throw new M("precision");return{maxCells:t,maxScanned:n,precision:r}}async function gn(e,t,n={}){const r=un(n),i={scanned:0,maxScanned:r.maxScanned,signal:n.signal,yieldToHost:n.yieldToHost??(()=>new Promise(s=>setTimeout(s,0)))};X(i.signal);const a=await mn(e,en(e,t,r.maxCells),i),l=n.operation??"sum";if(!["sum","average","min","max","count","median","expression"].includes(l))throw new M("expression");let o=null;if(l==="count")o=a.values.length;else if(a.values.length)if(l==="median")o=await Le(a.values,i);else{const s=hn(a.values);l==="expression"?(/\bMEDIAN\b/i.test(n.expression??"")&&(s.MEDIAN=await Le(a.values,i)),o=Ve(n.expression??"",s)):o=s[l.toUpperCase()]}if(X(i.signal),o!==null&&Number.isInteger(o)&&!Number.isSafeInteger(o))throw new M("precision");return{value:o,formatted:o===null?"—":o.toFixed(r.precision),numericCells:a.values.length,excludedCells:a.excluded,selectedCells:a.selected,precision:r.precision}}class D extends Error{constructor(t,n){super(t),this.path=n,this.code="label-sheet",this.name="LabelSheetError"}}function ie(e){if(e?.aborted){const t=new Error("标签拼版已取消");throw t.name="AbortError",t}}function V(e,t,n=!1){if(!Number.isFinite(e)||e<=0||n&&!Number.isSafeInteger(e))throw new D("应为正有限数字,数量应为安全整数",t);return e}function Ie(e,t){if(!Number.isFinite(e)||e<0)throw new D("应为非负有限数字",t);return e}function pn(e){const t=typeof e.marginMm=="object"?e.marginMm:{top:e.marginMm??0,left:e.marginMm??0,bottom:e.marginMm??0,right:e.marginMm??0},n=typeof e.gapMm=="object"?e.gapMm:{horizontal:e.gapMm??0,vertical:e.gapMm??0};for(const r of["top","left","bottom","right"])Ie(t?.[r],`$.marginMm.${r}`);for(const r of["horizontal","vertical"])Ie(n?.[r],`$.gapMm.${r}`);return{margin:t,gap:n}}function fn(e){const t=e.paper===void 0||e.paper==="a4"?{widthMm:210,heightMm:297}:e.paper;V(t.widthMm,"$.paper.widthMm"),V(t.heightMm,"$.paper.heightMm");const n=V(e.columns,"$.columns",!0),r=V(e.rows,"$.rows",!0),i=n*r;if(i>1e3)throw new D("每张纸不能超过 1000 个位置","$.columns");const{margin:a,gap:l}=pn(e),o=e.startSlot??0,s=e.offsetMm??{x:0,y:0};if(!Number.isSafeInteger(o)||o<0||o>=i)throw new D("起始位置应在首张纸的有效位置内","$.startSlot");if(!Number.isFinite(s.x)||!Number.isFinite(s.y))throw new D("校准偏移应为有限毫米值","$.offsetMm");return{paper:t,columns:n,rows:r,capacity:i,margin:a,gap:l,startSlot:o,offset:s}}function Ge(e){return 1+(e.grid?.cells.reduce((t,n)=>t+n.length+1+n.reduce((r,i)=>r+(i?.children?.reduce((a,l)=>a+Ge(l),0)??0),0),0)??0)}function wn(e,t,n){if(!y.validateRenderPlan(e).ok)throw new D("标签计划无效","$.plan");const r=e.pages[0];if(!r)return;const{paper:i,columns:a,rows:l,margin:o,gap:s,offset:c}=n;if(o.left+c.x<0||o.top+c.y<0||o.left+c.x+a*r.pageWidthMm+(a-1)*s.horizontal+o.right>i.widthMm+1e-6||o.top+c.y+l*r.pageHeightMm+(l-1)*s.vertical+o.bottom>i.heightMm+1e-6)throw new D("标签、间距、边距及校准偏移超过纸张尺寸;不会自动缩小标签","$.paper");let m=0;for(const[d,h]of e.pages.entries()){if(ie(t.signal),h.layout==="wide"||h.pageWidthMm!==r.pageWidthMm||h.pageHeightMm!==r.pageHeightMm)throw new D("拼版需要尺寸相同的固定标签页面",`$.pages.${d}`);if(m+=h.components.reduce((u,p)=>u+Ge(p),0),m>V(t.maxComponents??25e4,"$.maxComponents",!0))throw new D("拼版组件总量超过预算","$.maxComponents");for(const u of h.components)if(u.leftMm<0||u.topMm<0||u.leftMm+u.widthMm>h.pageWidthMm+1e-6||u.topMm+u.heightMm>h.pageHeightMm+1e-6)throw new D("标签内容超出标签边界",`$.pages.${d}.components`)}}function vn(e,t){ie(t.signal);const n=fn(t),{paper:r,columns:i,capacity:a,margin:l,gap:o,startSlot:s,offset:c}=n,m=e.pages.length?Math.ceil((s+e.pages.length)/a):0;if(m>V(t.maxSheets??1e4,"$.maxSheets",!0))throw new D("拼版纸张数量超过预算","$.maxSheets");V(t.maxComponents??25e4,"$.maxComponents",!0),wn(e,t,n);const d=b.snapshotReportJson(e,{maxBytes:V(t.maxSnapshotBytes??64e6,"$.maxSnapshotBytes",!0),check:()=>ie(t.signal),error:(u,p)=>new D(p,"$.maxSnapshotBytes")}),h=Array.from({length:m},()=>({pageWidthMm:r.widthMm,pageHeightMm:r.heightMm,components:[],meta:{labelSheet:{columns:i,rows:n.rows,slots:[]}}}));for(const[u,p]of d.pages.entries()){ie(t.signal);const v=s+u,A=v%a,R=h[Math.floor(v/a)],x=l.left+c.x+A%i*(p.pageWidthMm+o.horizontal),L=l.top+c.y+Math.floor(A/i)*(p.pageHeightMm+o.vertical),G={sourcePageIndex:u,slotIndex:A,xMm:x,yMm:L,widthMm:p.pageWidthMm,heightMm:p.pageHeightMm,...p.meta?{sourceMeta:p.meta}:{}};R.meta.labelSheet.slots.push(G),R.components.push(...p.components.map(z=>({...z,leftMm:z.leftMm+x,topMm:z.topMm+L,meta:{...z.meta,labelSheet:G}})))}return{...d,pages:h}}exports.DEFAULT_BORDER_PT=k.DEFAULT_BORDER_PT;exports.DEFAULT_FONT_FAMILY=k.DEFAULT_FONT_FAMILY;exports.DEFAULT_FONT_PT=k.DEFAULT_FONT_PT;exports.DEFAULT_STROKE_COLOR=k.DEFAULT_STROKE_COLOR;exports.DEFAULT_TEXT_COLOR=k.DEFAULT_TEXT_COLOR;exports.LINE_HEIGHT=k.LINE_HEIGHT;exports.SCHEMA_VERSION_MACH=k.SCHEMA_VERSION_MACH;exports.ReportBindingError=Y.ReportBindingError;exports.evalStyleRule=Y.evalStyleRule;exports.formatValue=Y.formatValue;exports.parseDateLocal=Y.parseDateLocal;exports.resolveComponentBinding=Y.resolveComponentBinding;exports.toExcelNumberFormat=Y.toExcelNumberFormat;exports.toNumber=Y.toNumber;exports.CSS_DPI=g.CSS_DPI;exports.MM_PER_INCH=g.MM_PER_INCH;exports.PAPER_SIZES=g.PAPER_SIZES;exports.mergeComponentStyles=g.mergeComponentStyles;exports.mmToPx=g.mmToPx;exports.mmToPxFactor=g.mmToPxFactor;exports.ptToPx=g.ptToPx;exports.pxToMm=g.pxToMm;exports.resolveBoxBorders=g.resolveBoxBorders;exports.resolveFontSize=g.resolveFontSize;exports.resolveLineHeight=g.resolveLineHeight;exports.resolveStroke=g.resolveStroke;exports.resolveTextColor=g.resolveTextColor;exports.round=g.round;exports.RENDER_PLAN_SCHEMA_VERSION=U.RENDER_PLAN_SCHEMA_VERSION;exports.isImageBackedComponent=U.isImageBackedComponent;exports.isRichText=U.isRichText;exports.REPORT_TEMPLATE_DOCUMENT_VERSION=y.REPORT_TEMPLATE_DOCUMENT_VERSION;exports.ReportTemplateError=y.ReportTemplateError;exports.assertRenderPlan=y.assertRenderPlan;exports.createTemplateRegistry=y.createTemplateRegistry;exports.defineReportTemplate=y.defineReportTemplate;exports.parseReportTemplate=y.parseReportTemplate;exports.serializeReportTemplate=y.serializeReportTemplate;exports.validateComponent=y.validateComponent;exports.validatePage=y.validatePage;exports.validateRenderPlan=y.validateRenderPlan;exports.validateReportTemplate=y.validateReportTemplate;exports.validateReportTemplateDocument=y.validateReportTemplateDocument;exports.datasetJsonSchema=he.datasetJsonSchema;exports.validateDatasetRows=he.validateDatasetRows;exports.charWidthEm=H.charWidthEm;exports.createCanvasMeasurer=H.createCanvasMeasurer;exports.createHeuristicMeasurer=H.createHeuristicMeasurer;exports.heuristicMeasurer=H.heuristicMeasurer;exports.measureTextMm=H.measureTextMm;exports.wrapText=H.wrapText;exports.DEFAULT_LABEL_PAGE_LIMIT=b.DEFAULT_LABEL_PAGE_LIMIT;exports.PaginateCellLimitError=b.PaginateCellLimitError;exports.PaginatePageLimitError=b.PaginatePageLimitError;exports.ReportSourceError=b.ReportSourceError;exports.applyReportEditResult=b.applyReportEditResult;exports.applyReportSourceMetadata=b.applyReportSourceMetadata;exports.countTemplatePages=b.countTemplatePages;exports.createReportEditSession=b.createReportEditSession;exports.createReportSource=b.createReportSource;exports.defineReport=b.defineReport;exports.estimateListLayoutCells=b.estimateListLayoutCells;exports.getReportEditSession=b.getReportEditSession;exports.paginateTemplate=b.paginateTemplate;exports.paginateTemplatePages=b.paginateTemplatePages;exports.projectListColumns=b.projectListColumns;exports.registerReportEditSession=b.registerReportEditSession;exports.relocateReportCellEdits=b.relocateReportCellEdits;exports.resolveGridLayout=ue.resolveGridLayout;exports.OutputFidelityError=B.OutputFidelityError;exports.inspectOutputCapabilities=B.inspectOutputCapabilities;exports.reportOutputDiagnostics=B.reportOutputDiagnostics;exports.OutputAssetError=Q.OutputAssetError;exports.resolvePlanAssets=Q.resolvePlanAssets;exports.ReportDrillError=J.ReportDrillError;exports.createReportDrillRequest=J.createReportDrillRequest;exports.matchReportDrillActions=J.matchReportDrillActions;exports.resolveReportDrillReturn=J.resolveReportDrillReturn;exports.validateReportDrillActions=J.validateReportDrillActions;exports.ReportParamValidationError=W.ReportParamValidationError;exports.assertReportParams=W.assertReportParams;exports.formatReportDateRange=W.formatReportDateRange;exports.isReportDate=W.isReportDate;exports.isReportMonth=W.isReportMonth;exports.isReportYear=W.isReportYear;exports.parseReportDateRange=W.parseReportDateRange;exports.reportParamsJsonSchema=W.reportParamsJsonSchema;exports.validateReportParamDefinitions=W.validateReportParamDefinitions;exports.validateReportParams=W.validateReportParams;exports.cloneReportTemplate=ee.cloneReportTemplate;exports.createLocalTemplateCatalog=ee.createLocalTemplateCatalog;exports.diffReportTemplates=ee.diffReportTemplates;exports.reviewReportTemplate=ee.reviewReportTemplate;exports.reviewReportTemplateAsync=ee.reviewReportTemplateAsync;exports.hasValidDataExplanation=ge.hasValidDataExplanation;exports.isReportDataTarget=ge.isReportDataTarget;exports.isReportValueState=ge.isReportValueState;exports.collectTemplateOutline=pe.collectTemplateOutline;exports.inspectTemplateFieldUsage=pe.inspectTemplateFieldUsage;exports.templatePathLocation=pe.templatePathLocation;exports.applyReportDocumentStyle=se.applyReportDocumentStyle;exports.captureTemplateFragment=se.captureTemplateFragment;exports.insertTemplateFragment=se.insertTemplateFragment;exports.inspectTemplateFragmentBindings=se.inspectTemplateFragmentBindings;exports.ReportCellEditError=F.ReportCellEditError;exports.applyReportCellEdit=F.applyReportCellEdit;exports.applyReportCellEditBatch=F.applyReportCellEditBatch;exports.createReportCellEdit=F.createReportCellEdit;exports.createReportCellEditBatch=F.createReportCellEditBatch;exports.createReportCellResolver=F.createReportCellResolver;exports.formatReportCellEdit=F.formatReportCellEdit;exports.getReportCellContext=F.getReportCellContext;exports.parseReportCellInput=F.parseReportCellInput;exports.reportCellEditKey=F.reportCellEditKey;exports.summarizeReportCellEdits=F.summarizeReportCellEdits;exports.TreeRowLimitError=fe.TreeRowLimitError;exports.createTreeTable=fe.createTreeTable;exports.validateTreeOptions=fe.validateTreeOptions;exports.LabelSheetError=D;exports.PageBuilder=qe;exports.ReportCalculationError=M;exports.ReportCellFieldError=We;exports.ReportTemplateStoreError=O;exports.TemplateBuilder=ze;exports.calculateReportSelection=gn;exports.classOf=P;exports.columnsFromContract=Pt;exports.computePageWindow=$e;exports.createCanvasPager=St;exports.createLabelTemplate=Ot;exports.createMemoryTemplateStore=qt;exports.createProviderReport=Ht;exports.createTableTemplate=Nt;exports.createTemplate=Ct;exports.createTemplateManager=zt;exports.defineLabelReport=Bt;exports.evaluateReportAggregateExpression=Ve;exports.formatReportClipboard=Wt;exports.imposeLabelSheets=vn;exports.measurePageSizePx=le;exports.parseReportCellFieldInput=Qt;exports.parseReportClipboard=Ut;exports.planFontSizePx=pt;exports.renderComponent=we;exports.renderPage=Fe;exports.renderPlan=mt;exports.renderPlanToCanvas=Tt;exports.renderPlanToCanvasAsync=Rt;exports.renderPlanToImages=bt;exports.resolvePaper=ye;exports.validateReportCellFieldDefinition=Ue;
|