@agile-team/mach-report 2.22.0 → 2.23.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 +7 -6
- package/dist/{ExcelBindingWizard-CZyppD7I.js → ExcelBindingWizard-D4FLind-.js} +3 -3
- package/dist/{ExcelBindingWizard-CW79I6Gl.cjs → ExcelBindingWizard-D4RS5Bpg.cjs} +1 -1
- package/dist/{ParamEditor-CiYCJI0b.cjs → ParamEditor-C-6C9rd2.cjs} +1 -1
- package/dist/{ParamEditor-DQit-Gdf.js → ParamEditor-CASZt-Ma.js} +2 -2
- package/dist/{ReportBatchPanel-DKTpV7MU.js → ReportBatchPanel-Bq7t8a5r.js} +2 -2
- package/dist/{ReportBatchPanel-Db6TAfG5.cjs → ReportBatchPanel-YVj5IO5y.cjs} +1 -1
- package/dist/ReportLabelStudio-Cqhita1b.cjs +1 -0
- package/dist/{ReportLabelStudio-BYnRqmje.js → ReportLabelStudio-Dj7GXhuv.js} +295 -292
- package/dist/ReportParamPanel-DZbFVmDL.cjs +1 -0
- package/dist/{ReportParamPanel-BHSKVL8k.js → ReportParamPanel-Dgmqro1Y.js} +93 -79
- package/dist/ReportPreview-DeWzG8jQ.js +6257 -0
- package/dist/ReportPreview-FFIryrIr.cjs +6 -0
- package/dist/{ReportTemplateLibrary-DEXH07ND.cjs → ReportTemplateLibrary-BaWodmpm.cjs} +1 -1
- package/dist/{ReportTemplateLibrary-BZuKn0YK.js → ReportTemplateLibrary-DdAAAD2I.js} +1 -1
- package/dist/{RuleEditor-CIQn547x.js → RuleEditor-D2UwQGF6.js} +59 -59
- package/dist/{RuleEditor-zSUmPjKa.cjs → RuleEditor-DcT9xI1v.cjs} +1 -1
- package/dist/TemplateOutlinePanel-CUHFFiNM.cjs +1 -0
- package/dist/{TemplateOutlinePanel-D0PgOSQE.js → TemplateOutlinePanel-DrT7XN0m.js} +2 -2
- package/dist/{TemplateReusePanel-BKlAEF8-.js → TemplateReusePanel-4eejkNqi.js} +2 -2
- package/dist/{TemplateReusePanel-DAy_Hwqz.cjs → TemplateReusePanel-DZMyiX5I.cjs} +1 -1
- package/dist/{TemplateReviewPanel-div-EH_m.js → TemplateReviewPanel-BIhNLeNw.js} +2 -2
- package/dist/{TemplateReviewPanel-CowmHaQQ.cjs → TemplateReviewPanel-DnYImiXu.cjs} +1 -1
- package/dist/analytics.cjs +1 -1
- package/dist/analytics.js +26 -26
- package/dist/artifact-integrity.json +106 -104
- package/dist/assets-D2gHc4Mz.cjs +1 -0
- package/dist/assets-T_gDeFaz.js +132 -0
- package/dist/auto-4pK9HePf.cjs +1 -0
- package/dist/auto-CTIJ6PnR.js +257 -0
- package/dist/capabilities-DiBj4Qgl.cjs +1 -0
- package/dist/capabilities-pg7j7VLT.js +106 -0
- package/dist/charts-Cjw5AYkg.cjs +1 -0
- package/dist/{charts-Dlv8j2AG.js → charts-CxJZ0XaY.js} +1 -1
- package/dist/computed-DK6BruFz.cjs +1 -0
- package/dist/{computed-C8NRZQss.js → computed-f3pOqWLX.js} +381 -301
- package/dist/data-bar-CeZuFmYl.cjs +1 -0
- package/dist/{data-bar-8baGYEZ9.js → data-bar-IkI6VvMQ.js} +1 -1
- package/dist/designer-DhrE7jzw.js +7169 -0
- package/dist/designer-IAZu6kBX.cjs +2 -0
- package/dist/designer.cjs +1 -1
- package/dist/designer.d.cts +98 -45
- package/dist/designer.d.ts +98 -45
- package/dist/designer.js +3 -3
- package/dist/dom-ChE5D-L-.cjs +1 -0
- package/dist/dom-JWrchIre.js +452 -0
- package/dist/dom-cell-address-DLD1mkTB.cjs +1 -0
- package/dist/dom-cell-address-Fn-8nk7D.js +11 -0
- package/dist/{encoding-ncQAvyOv.cjs → encoding-BefcaHdp.cjs} +1 -1
- package/dist/{encoding-DbnhbwI8.js → encoding-CL6rXEkR.js} +2 -2
- package/dist/{font-loader-Di0lQKFf.js → font-loader-BT5baV-o.js} +1 -1
- package/dist/{font-loader-BB372_XN.cjs → font-loader-Ga51c2VC.cjs} +1 -1
- package/dist/grid-strokes-Be24LGuV.cjs +1 -0
- package/dist/grid-strokes-EoY66L2f.js +53 -0
- package/dist/index.cjs +8 -8
- package/dist/index.d.cts +6 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +944 -1259
- package/dist/json-snapshot-1tvQNzQE.cjs +2 -0
- package/dist/{json-snapshot-DvQbZlD7.js → json-snapshot-OqkPyUk5.js} +763 -776
- package/dist/matrix-B8QWbsGM.cjs +1 -0
- package/dist/matrix-C6e_r_vp.js +302 -0
- package/dist/{pdf-CARdBcuw.cjs → pdf-HiEeXe9H.cjs} +42 -42
- package/dist/{pdf-DmlnL5eB.js → pdf-aobetCsy.js} +20 -20
- package/dist/pdf.cjs +1 -1
- package/dist/pdf.js +2 -2
- package/dist/{plugin-AcAQ2m9X.cjs → plugin-BFANt-i8.cjs} +1 -1
- package/dist/{plugin-w5Nyt08U.js → plugin-DeYYAL6F.js} +1 -1
- package/dist/{prefill-BXBxx5We.js → prefill-Dk4C6S5R.js} +21 -21
- package/dist/prefill-DsUD5OoK.cjs +1 -0
- package/dist/prepared-DCIxhKFo.js +94 -0
- package/dist/prepared-Dv-XM3i1.cjs +1 -0
- package/dist/progress-ByiOxUD3.js +250 -0
- package/dist/progress-WomPRP3B.cjs +1 -0
- package/dist/{protocol-C9ZaylID.cjs → protocol-B9YgfQ_d.cjs} +1 -1
- package/dist/{protocol-fjaeKkjf.js → protocol-DxeUKGYG.js} +3 -3
- package/dist/record-bindings-DatJZv_e.js +200 -0
- package/dist/record-bindings-MBxbeBsi.cjs +1 -0
- package/dist/{region-binding-workflow-aA8nxmkZ.js → region-binding-workflow-DjrXuR1q.js} +2 -2
- package/dist/{region-binding-workflow-BiJQ7NU6.cjs → region-binding-workflow-l7NGfagJ.cjs} +2 -2
- package/dist/report-encoding-worker.cjs +1 -1
- package/dist/report-encoding-worker.js +1 -1
- package/dist/rich-text-layout-Ciwa6D2o.js +52 -0
- package/dist/rich-text-layout-DK7A_a5r.cjs +3 -0
- package/dist/{runtime-BTtpjF3D.js → runtime-75Y5Oq5B.js} +52 -51
- package/dist/runtime-DKlGd_D4.cjs +1 -0
- package/dist/sbom.cdx.json +1 -1
- package/dist/server-node.cjs +5 -5
- package/dist/server-node.js +1642 -1586
- package/dist/server.cjs +1 -1
- package/dist/server.js +24 -24
- package/dist/style.css +1 -1
- package/dist/{template-catalog-JSxSqk5y.js → template-catalog--cjxzgH7.js} +17 -17
- package/dist/template-catalog-CoT7jm_6.cjs +1 -0
- package/dist/{template-fragments-D2JFj7Du.js → template-fragments-CPpGpQoz.js} +12 -12
- package/dist/template-fragments-GVjpew_q.cjs +1 -0
- package/dist/template-registry-DI59PXVK.cjs +1 -0
- package/dist/{template-registry-Do1Uav2Z.js → template-registry-O0hNIOfB.js} +17 -17
- package/dist/{template-serialization-CU4n_Miu.js → template-serialization-CWmHq7lX.js} +1 -1
- package/dist/{template-serialization-CgqBo6s-.cjs → template-serialization-CqQY4zDg.cjs} +1 -1
- package/dist/{textwrap-CkGjRFT3.js → textwrap-BIjtEWmq.js} +1 -1
- package/dist/textwrap-Cy7o1hIR.cjs +4 -0
- package/dist/vue/async.d.cts +24 -0
- package/dist/vue/async.d.ts +24 -0
- package/dist/vue/index.d.cts +25 -1
- package/dist/vue/index.d.ts +25 -1
- package/dist/vue-async.cjs +1 -1
- package/dist/vue-async.js +3 -3
- package/dist/vue.cjs +1 -1
- package/dist/vue.js +52 -47
- package/dist/{workbook-session-BvEBRRMz.cjs → workbook-session-C6-SrnCT.cjs} +4 -4
- package/dist/{workbook-session-f0wVlzst.js → workbook-session-C9ZmCBwY.js} +15 -16
- package/dist/worker.cjs +1 -1
- package/dist/worker.js +4 -4
- package/dist/xlsx.cjs +4 -4
- package/dist/xlsx.js +184 -179
- package/package.json +1 -1
- package/dist/ReportLabelStudio-B0i9ohQj.cjs +0 -1
- package/dist/ReportParamPanel-lngONOEz.cjs +0 -1
- package/dist/ReportPreview-BDgKssYR.js +0 -5887
- package/dist/ReportPreview-Dw-4icG6.cjs +0 -6
- package/dist/TemplateOutlinePanel-B5SfGYVN.cjs +0 -1
- package/dist/assets-CxHunY_9.js +0 -232
- package/dist/assets-vbjAGgk8.cjs +0 -1
- package/dist/auto-DcUHlKob.cjs +0 -1
- package/dist/auto-moShblh1.js +0 -240
- package/dist/charts-aCtoswXq.cjs +0 -1
- package/dist/component-tree-1_QCiQJX.js +0 -67
- package/dist/component-tree-BjZIp6w9.cjs +0 -1
- package/dist/computed-4TnxzgIh.cjs +0 -1
- package/dist/data-bar-YltqGTaC.cjs +0 -1
- package/dist/designer-B7jJeAeG.js +0 -6914
- package/dist/designer-BWQVpJeN.cjs +0 -2
- package/dist/grid-geometry-D3SJgWFv.js +0 -136
- package/dist/grid-geometry-D8ReblRV.cjs +0 -1
- package/dist/json-snapshot-nyV63AbB.cjs +0 -2
- package/dist/matrix-0hywp0-F.cjs +0 -1
- package/dist/matrix-Dy-tyY7E.js +0 -381
- package/dist/prefill-DUvejVt1.cjs +0 -1
- package/dist/prepared-YXy-fVLw.cjs +0 -1
- package/dist/prepared-rXCKqdHY.js +0 -88
- package/dist/progress-B0ctFpKf.cjs +0 -1
- package/dist/progress-Hc2vxoCs.js +0 -52
- package/dist/record-bindings-Ct1HkPrc.cjs +0 -1
- package/dist/record-bindings-VZGS-Qd8.js +0 -155
- package/dist/rich-text-layout-K48VHUoW.cjs +0 -3
- package/dist/rich-text-layout-wxBhnAS7.js +0 -102
- package/dist/runtime-Dq0LUsyS.cjs +0 -1
- package/dist/template-catalog-CLAM4w7H.cjs +0 -1
- package/dist/template-fragments-Ca25Jt7e.cjs +0 -1
- package/dist/template-outline-CDWXptuj.js +0 -88
- package/dist/template-outline-K4jGhATu.cjs +0 -1
- package/dist/template-registry-CWnuGqyP.cjs +0 -1
- package/dist/textwrap-OTOUMr4f.cjs +0 -4
package/dist/index.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("./grid-geometry-D8ReblRV.cjs"),K=require("./record-bindings-Ct1HkPrc.cjs"),G=require("./component-tree-BjZIp6w9.cjs"),E=require("./template-registry-CWnuGqyP.cjs"),ve=require("./dataset-IrlXbUvh.cjs"),B=require("./textwrap-OTOUMr4f.cjs"),u=require("./json-snapshot-nyV63AbB.cjs"),Je=require("./data-bar-YltqGTaC.cjs"),de=require("./rich-text-layout-K48VHUoW.cjs"),D=require("./assets-vbjAGgk8.cjs"),be=require("./progress-B0ctFpKf.cjs"),H=require("./prefill-DUvejVt1.cjs"),k=require("./param-validation-C-8sRJLq.cjs"),Ye=require("./matrix-0hywp0-F.cjs"),Ee=require("./computed-4TnxzgIh.cjs"),ne=require("./template-catalog-CLAM4w7H.cjs"),Re=require("./template-outline-K4jGhATu.cjs"),me=require("./template-fragments-Ca25Jt7e.cjs"),Te=require("./template-serialization-CgqBo6s-.cjs");function ye(e,t,n){let r=0,o=e.length;for(;r<o;){const i=r+o>>>1;n(e[i])<t?r=i+1:o=i}return r}function Ke(e){if(![e.leftMm,e.topMm,e.widthMm,e.heightMm].every(Number.isFinite)||e.widthMm<0||e.heightMm<0)throw new RangeError("Preview viewport must have finite coordinates and nonnegative dimensions.");return e}function vt(e){const t=e.rows.map(()=>[]);for(const n of e.cells){const r=Math.min(t.length,n.ri+(n.cell.rowSpan??1));for(let o=n.ri;o<r;o++)t[o].push(n)}for(const n of t)n.sort((r,o)=>r.xMm-o.xMm);return{cells(n){Ke(n);const r=new Set,o=n.topMm+n.heightMm,i=n.leftMm+n.widthMm;let l=ye(e.rows,n.topMm,s=>s.pos+s.size);for(;l<t.length&&e.rows[l].pos<=o;){const s=t[l++];let a=ye(s,n.leftMm,c=>c.xMm+c.widthMm);for(;a<s.length&&s[a].xMm<=i;)r.add(s[a++])}return[...r].sort((s,a)=>s.ri-a.ri||s.ci-a.ci)}}}function Et(e){const t=["h","v"].map(n=>e.filter(r=>r.kind===n).sort((r,o)=>r.pos-o.pos));return n=>{const r=[];return t.forEach((o,i)=>{const l=i===0?n.topMm:n.leftMm,s=l+(i===0?n.heightMm:n.widthMm),a=i===0?n.leftMm:n.topMm,c=a+(i===0?n.widthMm:n.heightMm);let d=ye(o,l,m=>m.pos);for(;d<o.length&&o[d].pos<=s;){const m=o[d++];m.to>=a&&m.from<=c&&r.push(m)}}),r}}function Rt(){const e=[];return{mount(t){e.push(Ct(t))},update(t,n,r){Ke(t);let o=!1;for(const i of e)o=i.update(t,i.component===n?r:void 0)||o;return o}}}function Tt(e,t){const n=Math.max(8,e.widthMm/4),r=Math.max(8,e.heightMm/4);return{leftMm:e.leftMm-t.leftMm-n,topMm:e.topMm-t.topMm-r,widthMm:e.widthMm+2*n,heightMm:e.heightMm+2*r}}function xt(e,t,n){let r=t.get(n);return r||(r=e.table.ownerDocument.createElement("tr"),r.className=e.rowClass,r.setAttribute("role","row"),r.setAttribute("aria-rowindex",String(n+1)),r.style.cssText="all:unset;display:contents;box-sizing:border-box",t.set(n,r)),r}function St(e,t,n,r){const o=new Set(t),i=new Set(t.map(s=>s.ri));for(const[s,a]of n)o.has(s)||(a.remove(),n.delete(s));for(const[s,a]of r)i.has(s)||(a.remove(),r.delete(s));for(const s of t){let a=n.get(s);a||(a=e.drawCell(s),a.setAttribute("aria-colindex",String(s.ci+1)),n.set(s,a));const c=xt(e,r,s.ri);a.parentElement!==c&&c.appendChild(a)}const l=new Map;for(const s of t){const a=l.get(s.ri)??[];a.push(n.get(s)),l.set(s.ri,a)}for(const[s,a]of l)Fe(r.get(s),a);Fe(e.body,[...i].sort((s,a)=>s-a).map(s=>r.get(s)))}function Fe(e,t){let n=e.firstElementChild;for(const r of t)r===n?n=n.nextElementSibling:e.insertBefore(r,n)}function Ct(e){const t=h.resolveGridLayout(e.grid,e.component.widthMm,e.component.heightMm),n=new Map(t.cells.map(c=>[`${c.ri}:${c.ci}`,c])),r=vt(t),o=new Map,i=new Map,l=Et(de.resolveGridStrokes(t,e.component));e.table.setAttribute("aria-rowcount",String(t.rows.length)),e.table.setAttribute("aria-colcount",String(t.columns.length));let s="",a="";return{component:e.component,update(c,d){const m=Tt(c,e.component),p=r.cells(m),g=d&&n.get(`${d.rowIndex}:${d.columnIndex}`);g&&!p.includes(g)&&p.push(g),p.sort((y,U)=>y.ri-U.ri||y.ci-U.ci);const f=p.map(y=>`${y.ri}:${y.ci}`).join(";"),P=l(m),S=P.map(y=>`${y.kind}:${y.pos}:${y.from}:${y.to}`).join(";"),M=f!==s,R=S!==a;return M&&(s=f,St(e,p,o,i)),R&&(a=S,e.edgeHost.replaceChildren(...e.drawEdges(P))),M||R}}}const Xe=new WeakMap,Pt={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 $(e,t){return t?.classNames?.[e]??Pt[e]}class At{constructor(){this.props=[]}add(t,n){return n==null||n===!1||n===""?this:(this.props.push([t,String(n)]),this)}mm(t,n,r,o=2){return this.add(t,`${h.round(h.mmToPx(n,r),o)}px`)}toString(){let t="";for(const[n,r]of this.props)t+=`${n}:${r};`;return t}applyTo(t){const n=this.toString();n&&(t.style.cssText=n)}}function x(e,t="unset"){return new At().add("all",t).add("display",e).add("box-sizing","border-box")}function Ze(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(h.resolveLineHeight(t))).add("text-align",t.align);const r=h.resolveFontSize(t,n);e.add("font-size",`${h.round(r.fontSizePx,2)}px`)}function $t(e,t,n){const r=t.style??{};Ze(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 _e(e,t,n,r,o,i){const l=e.cell,s=i.createElement("td");s.className=$("cell",o),s.dataset.mrRowIndex=String(e.ri),s.dataset.mrColumnIndex=String(e.ci),s.setAttribute("role",t.table?.role==="header"?"columnheader":"cell"),l.colSpan&&(s.colSpan=l.colSpan),l.rowSpan&&(s.rowSpan=l.rowSpan);const a=h.mergeComponentStyles(t.style,l.style),c=x("block").add("position","absolute").mm("left",e.xMm,r).mm("top",e.yMm,r).mm("width",e.widthMm,r).mm("height",e.heightMm,r).add("background-color",a.backgroundColor).add("vertical-align",a.verticalAlign??"middle");Ze(c,a,r),c.applyTo(s);const d=Je.dataBarBox(l.dataBar,e.widthMm,e.heightMm,n);if(d){const p=i.createElement("div");p.className="mr-cell-data-bar",p.setAttribute("aria-hidden","true"),x("block").add("position","absolute").mm("left",d.x,r).mm("top",d.y,r).mm("width",d.width,r).mm("height",d.height,r).add("background-color",d.color).add("opacity","0.35").add("pointer-events","none").applyTo(p),s.appendChild(p)}const m=i.createElement("div");m.className="mr-cell-content",x("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",a.verticalAlign==="top"?"flex-start":a.verticalAlign==="bottom"?"flex-end":"center").add("overflow-wrap","anywhere").add("overflow","hidden").applyTo(m),l.richParagraphs?.length?m.appendChild(et({...t,kind:"text",richParagraphs:l.richParagraphs},r,o,i)):l.text!=null&&m.append(l.text);for(const p of l.children??[])m.appendChild(xe(p,r,o,i));return s.insertBefore(m,s.firstChild),s}function Ot(e,t,n,r){return Qe(de.resolveGridStrokes(e,t),n,r)}function Qe(e,t,n){return e.map(r=>{const o=`${h.round(r.widthPt*t/72,2)}px solid ${r.color}`,i=n.createElement("div");i.className="mr-grid-edge",i.setAttribute("aria-hidden","true");const l=r.kind==="h";return x("block").add("position","absolute").add("pointer-events","none").mm("left",l?r.from:r.pos,t).mm("top",l?r.pos:r.from,t).mm("width",l?r.to-r.from:0,t).mm("height",l?0:r.to-r.from,t).add(l?"border-top":"border-left",o).applyTo(i),i})}function Dt(e,t,n,r,o){const i=o.createElement("table");i.className=$("grid",r),i.setAttribute("role","table"),x("block").add("position","relative").add("width","100%").add("height","100%").applyTo(i);const l=o.createElement("tbody");x("contents").applyTo(l),i.appendChild(l);const s=t.style?.rotateDeg?void 0:Xe.get(r);if(s){const m=o.createElement("div");x("block").add("position","relative").add("width","100%").add("height","100%").applyTo(m);const p=o.createElement("div");return x("contents").applyTo(p),p.setAttribute("aria-hidden","true"),s.mount({grid:e,component:t,table:i,rowClass:$("row",r),body:l,edgeHost:p,drawCell:g=>_e(g,t,e.paddingMm??.5,n,{...r},o),drawEdges:g=>Qe(g,n,o)}),m.append(i,p),m}const a=h.resolveGridLayout(e,t.widthMm,t.heightMm),c=e.cells.map(()=>{const m=o.createElement("tr");return m.className=$("row",r),m.setAttribute("role","row"),x("contents").applyTo(m),l.appendChild(m),m});for(const m of a.cells)c[m.ri].appendChild(_e(m,t,e.paddingMm??.5,n,r,o));const d=o.createElement("div");return x("block").add("position","relative").add("width","100%").add("height","100%").applyTo(d),d.append(i,...Ot(a,t,n,o)),d}function kt(e,t,n,r){const o=r.createElement("div");o.className=$("paragraph",n),x("block").add("text-align",e.align).add("line-height",e.lineHeight!=null?String(e.lineHeight):void 0).mm("margin-top",e.spaceBeforeMm??0,t).mm("margin-bottom",e.spaceAfterMm??0,t).mm("text-indent",e.indentMm??0,t).applyTo(o);for(const i of e.segments||[]){const l=r.createElement("span");l.className=$("segment",n),l.textContent=i.kind==="field"?i.field??"":i.text??"";const s=x("inline");if(i.style){const a=i.style;s.add("color",a.color).add("background-color",a.backgroundColor).add("font-family",a.fontFamily).add("line-height",a.lineHeight).add("letter-spacing",a.letterSpacing==null?void 0:`${a.letterSpacing*t/72}px`).add("font-weight",a.bold!=null?a.bold?"700":"400":void 0).add("font-style",a.italic!=null?a.italic?"italic":"normal":void 0).add("text-decoration",a.underline!=null?a.underline?"underline":"none":void 0),(a.fontSize!=null||a.fontSizePx!=null)&&s.add("font-size",`${h.round(h.resolveFontSize(a,t).fontSizePx,2)}px`)}s.applyTo(l),o.appendChild(l)}return o}function et(e,t,n,r){if(G.isRichText(e)){const o=r.createElement("div");o.className=$("rich",n),x("block").applyTo(o);for(const i of e.richParagraphs)o.appendChild(kt(i,t,n,r));return o}if(Array.isArray(e.lines)&&e.lines.length>0){const o=r.createElement("div");o.className=$("lines",n),x("block").applyTo(o);for(const i of e.lines){const l=r.createElement("div");l.className=$("line",n),l.textContent=i,x("block").add("white-space","pre").add("min-height","1lh").applyTo(l),o.appendChild(l)}return o}return e.text??""}function Lt(e,t,n,r){const o=r.createElement("div");o.className=$("text",n);const i=e.style||{};return x("flex").add("width","100%").add("height","100%").add("flex-direction","column").add("justify-content",i.verticalAlign==="middle"?"center":i.verticalAlign==="bottom"?"flex-end":"flex-start").add("overflow-wrap","anywhere").add("overflow","hidden").applyTo(o),o.append(et(e,t,n,r)),o}function It(e,t,n){const r=n.createElement("img");return r.className=$("image",t),r.src=e.imageData,x("block").add("width","100%").add("height","100%").add("object-fit","contain").applyTo(r),r.alt=e.kind,r}function je(e,t,n,r){const o=r.createElement("div");o.className=$("shape",n);const i=e.style||{},l=h.resolveStroke(i),s=h.resolveBoxBorders(i),a=`${h.round(l.widthPt*t/72,2)}px solid ${l.color}`,c=x("block");return e.grid?c.add("position","relative"):e.kind==="rect"?(s.top&&c.add("border-top",a),s.right&&c.add("border-right",a),s.bottom&&c.add("border-bottom",a),s.left&&c.add("border-left",a)):e.kind==="ellipse"?(s.inner&&c.add("border",a).add("border-radius","50%"),i.backgroundColor&&c.add("background-color",i.backgroundColor)):e.kind==="line"&&c.add("height","0").add("border-top",a),c.add("box-sizing","border-box").add("width","100%").add("height","100%"),c.applyTo(o),o}function Nt(e,t,n){const r=n.createElementNS("http://www.w3.org/2000/svg","svg"),o=h.mmToPx(e.widthMm,t),i=h.mmToPx(e.heightMm,t);r.setAttribute("width",String(Math.max(1,o))),r.setAttribute("height",String(Math.max(1,i))),r.setAttribute("aria-hidden","true"),r.style.overflow="visible",r.style.display="block";const l=n.createElementNS("http://www.w3.org/2000/svg","line");l.setAttribute("x1","0"),l.setAttribute("x2",String(o)),l.setAttribute("y1",e.lineDirection==="up"?String(i):"0"),l.setAttribute("y2",e.lineDirection==="up"?"0":String(i));const s=h.resolveStroke({...e.style,borderColor:e.style?.lineColor??e.style?.borderColor});return l.setAttribute("stroke",s.color),l.setAttribute("stroke-width",String(s.widthPt*t/72)),r.appendChild(l),r}function xe(e,t,n,r){const o=r.createElement("div");o.className=`${$("comp",n)} mr-kind-${e.kind}`;const i=x("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($t(i,e,t),i.applyTo(o),G.isImageBackedComponent(e))return o.appendChild(It(e,n,r)),o;if(e.kind==="text")return o.appendChild(Lt(e,t,n,r)),o;if(e.grid){const s=je(e,t,n,r);return s.appendChild(Dt(e.grid,e,t,n,r)),o.appendChild(s),o}if(e.kind==="line"&&e.lineDirection)return o.appendChild(Nt(e,t,r)),o;if(e.kind==="line"||e.kind==="rect"||e.kind==="ellipse")return o.appendChild(je(e,t,n,r)),o;const l=r.createElement("div");return l.className=$("unknown",n),x("block").applyTo(l),l.textContent=e.fallbackText??`[${e.kind}]`,l.dataset.mrUnsupported=e.kind,l.setAttribute("role","note"),o.appendChild(l),o}function Se(e,t,n,r){const o=r.createElement("div");return o.className=$("page",n),x("block","initial").add("position","relative").add("font-family",h.DEFAULT_FONT_FAMILY).add("font-size",`${h.round(h.resolveFontSize(void 0,t).fontSizePx,2)}px`).add("line-height",String(h.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",h.DEFAULT_TEXT_COLOR).add("overflow","hidden").add("box-sizing","border-box").applyTo(o),e.components.forEach((i,l)=>{const s=xe(i,t,n,r);s.dataset.mrComponentIndex=String(l),o.appendChild(s)}),o}function Ft(e,t,n={}){const r=n.dpi??96;D.reportOutputDiagnostics(e,"dom",n);const o=t.createElement("div");return o.className=$("root",n),x("block").applyTo(o),o.dataset.schemaVersion=e.schemaVersion,e.pages.forEach(i=>{o.appendChild(Se(i,r,n,t))}),o}function _t(e,t,n,r){const o={...n},i=Rt();return Xe.set(o,i),{element:Se(e,t,o,r),update(s,a){return i.update(s,a&&e.components[a.componentIndex],a)}}}function Ce(e,t,n,r,o,i,l,s="top"){e.font=`${t.italic?"italic ":""}${t.bold?"bold ":""}${t.fontSizePx}px ${l}`,"letterSpacing"in e&&(e.letterSpacing="0px"),e.fillStyle=t.color,e.textBaseline="alphabetic";const a=t.fontSizePx*t.lineHeight,c=t.text===""?[""]:t.text.split(`
|
|
2
|
-
`),
|
|
3
|
-
`),M={x:r+(t.xMm+
|
|
4
|
-
`):
|
|
5
|
-
`);Ce(e,{text:m,fontSizePx:d.fontSizePx,bold:c.bold??!1,italic:c.italic,underline:c.underline,color:h.resolveTextColor(c),align:c.align??"left",lineHeight:h.resolveLineHeight(c),letterSpacingPx:h.ptToPx(c.letterSpacing??0,l)},n,r,o,i,c.fontFamily??s,c.verticalAlign)}function he(e,t,n,r,o,i,l){const s=t.leftMm*n,a=t.topMm*n,c=t.widthMm*n,d=t.heightMm*n,m=t.style??{};if(G.isImageBackedComponent(t)){const p=l?.get(t.imageData);p?Vt(e,p,s,a,c,d):ze(e,t,s,a,c,d);return}if(t.grid){Jt(e,t.grid,t,s,a,c,d,n,r,o,i,l);return}switch(t.kind){case"text":{Kt(e,t,s,a,c,d,r,o,i);break}case"rect":{const p=h.resolveStroke(m),g=h.resolveBoxBorders(m);m.backgroundColor&&(e.fillStyle=m.backgroundColor,e.fillRect(s,a,c,d)),g.inner&&(e.strokeStyle=p.color,e.lineWidth=h.ptToPx(p.widthPt,r),Gt(e,g,s,a,c,d));break}case"line":{const p=h.resolveStroke({...m,borderColor:m.lineColor??m.borderColor});e.strokeStyle=p.color,e.lineWidth=h.ptToPx(p.widthPt,r),e.beginPath();const g=t.lineDirection==="up"?a+d:t.lineDirection==="down"?a:a+d/2,f=t.lineDirection==="up"?a:t.lineDirection==="down"?a+d:a+d/2;e.moveTo(s,g),e.lineTo(s+c,f),e.stroke();break}case"ellipse":{const p=h.resolveStroke(m);e.strokeStyle=p.color,e.lineWidth=h.ptToPx(p.widthPt,r),m.backgroundColor&&(e.fillStyle=m.backgroundColor,e.beginPath(),e.ellipse(s+c/2,a+d/2,c/2,d/2,0,0,Math.PI*2),e.fill()),e.beginPath(),e.ellipse(s+c/2,a+d/2,c/2,d/2,0,0,Math.PI*2),e.stroke();break}default:ze(e,t,s,a,c,d);break}}function ze(e,t,n,r,o,i){e.save(),e.strokeStyle="#94a3b8",e.strokeRect(n,r,o,i),e.fillStyle="#64748b",e.font="12px sans-serif",e.fillText(t.fallbackText??`[${t.kind}]`,n+3,r+14),e.restore()}async function Xt(e,t={}){if(typeof document>"u")throw new Error("renderPlanToImages 需要浏览器环境(SSR/Node 请在客户端钩子中调用)");const{format:n="png",quality:r=.92,...o}=t;if(n!=="png"&&n!=="jpeg")throw new TypeError("Image format must be png or jpeg.");if(!Number.isFinite(r)||r<0||r>1)throw new RangeError("Image quality must be between 0 and 1.");N(t.signal);const i=await D.resolvePlanAssets(e,{...t,format:"canvas"});e=i.plan;const l=[...i.diagnostics,...D.reportOutputDiagnostics(e,"canvas",t)],s=n==="jpeg"?"image/jpeg":"image/png",a=[],c=Math.min(e.pages.length-1,t.end??e.pages.length-1);for(let d=Math.max(0,t.start??0);d<=c;d++){N(t.signal);const m=await it(e.pages[d],d,o,l);try{a.push(await Zt(m,s,r,t.signal))}finally{m.width=0,m.height=0}await be.outputCheckpoint(t,a.length,c-Math.max(0,t.start??0)+1)}return N(t.signal),{blobs:a,diagnostics:l}}function Zt(e,t,n,r){return N(r),new Promise((o,i)=>{const l=()=>i(r?.reason??new DOMException("The operation was aborted.","AbortError"));r?.addEventListener("abort",l,{once:!0});try{e.toBlob(s=>{r?.removeEventListener("abort",l),s?o(s):i(new Error("Canvas encoding failed; no empty image was emitted."))},t,n)}catch(s){r?.removeEventListener("abort",l),i(s)}})}function Qt(e,t={}){if(N(t.signal),typeof document>"u")throw new Error("renderPlanToCanvas 需要浏览器环境(SSR 请在客户端钩子中调用)");const n=t.dpr??(typeof devicePixelRatio=="number"?devicePixelRatio:1),r=t.dpi??96,o=r/96*Ae,i=t.fontFamily??h.DEFAULT_FONT_FAMILY,l=t.measurer??B.heuristicMeasurer,s=Math.max(0,t.start??0),a=Math.min(e.pages.length-1,t.end??e.pages.length-1),c=[],d=D.reportOutputDiagnostics(e,"canvas",t),m=en(e,s,a);for(const p of m)D.notifyOutputDiagnostic(p,t),d.push(p);if(t.fidelity==="strict"&&m.length)throw new D.OutputFidelityError(d);for(let p=s;p<=a;p++){N(t.signal);const g=e.pages[p],{canvas:f,ctx:P}=ot(g,n,r,t.maxCanvasPixels);for(const S of g.components)he(P,S,o,r,i,l);c.push(f)}return{canvases:c,diagnostics:d}}function en(e,t,n){return n<t?[]:e.pages.slice(t,n+1).flatMap((r,o)=>[...Pe(r)].map(({component:i,componentIndex:l,componentPath:s})=>({code:"async-image-required",severity:"warning",format:"canvas",pageIndex:t+o,componentIndex:l,componentPath:s,kind:i.kind,nid:i.nid,message:"Use renderPlanToCanvasAsync or renderPlanToImages to decode and include images."})))}async function tn(e,t={}){if(typeof document>"u")throw new Error("renderPlanToCanvasAsync 需要浏览器环境(Node 请使用 PDF 或 XLSX 输出)");N(t.signal);const n=await D.resolvePlanAssets(e,{...t,format:"canvas"});e=n.plan;const r=[...n.diagnostics,...D.reportOutputDiagnostics(e,"canvas",t)],o=[],i=Math.min(e.pages.length-1,t.end??e.pages.length-1);for(let l=Math.max(0,t.start??0);l<=i;l++)o.push(await it(e.pages[l],l,t,r));return{canvases:o,diagnostics:r}}async function it(e,t,n,r){const o=n.dpr??(typeof devicePixelRatio=="number"?devicePixelRatio:1),i=n.dpi??96,l=n.fontFamily??h.DEFAULT_FONT_FAMILY,s=await at(e,t,n,r);N(n.signal);const{canvas:a,ctx:c}=ot(e,o,i,n.maxCanvasPixels);for(const d of e.components)he(c,d,i/25.4,i,l,n.measurer??B.heuristicMeasurer,s);return a}async function at(e,t,n,r){const o=n.imageLoader??Bt;return Ut(e,async(i,l)=>{try{return await o(i,l)}catch(s){if(l?.aborted)throw s;const a=[...Pe(e)].find(({component:g})=>g.imageData===i),{component:c,componentIndex:d,componentPath:m}=a,p={code:"image-decode-failed",severity:"warning",format:"canvas",pageIndex:t,componentIndex:d,componentPath:m,kind:c.kind,nid:c.nid,message:"Image decoding failed; raster output was cancelled instead of omitting the image."};throw r.push(p),D.notifyOutputDiagnostic(p,n),s}},n.signal)}function nn(e,t={}){const n=t.dpr??(typeof devicePixelRatio=="number"?devicePixelRatio:1),r=t.dpi??96,o=r/96*Ae,i=t.fontFamily??h.DEFAULT_FONT_FAMILY,l=t.measurer??B.heuristicMeasurer,s=t.overscan??1,a=t.gapPx??18,c=t.pagesPerFrame??1,d=e.pages.map(b=>b.pageHeightMm*o),m=Math.max(1,...e.pages.map(b=>b.pageWidthMm*o)),p={start:0,end:-1};let g=null,f=null,P=null,S=null,M=[],R=0,y=[],U=0,V=new AbortController;const Le=[];function wt(){const b=g;b.innerHTML="",f=document.createElement("div"),f.style.cssText=`width:${m}px;margin:0 auto;`,P=document.createElement("div"),S=document.createElement("div"),f.appendChild(P),M=[];const O=Math.min(e.pages.length,3+s*2);for(let W=0;W<O;W++){const C=document.createElement("div");C.style.cssText=`margin:0 auto ${a}px;box-shadow:0 2px 8px rgba(0,0,0,.35);background:#fff;`,f.appendChild(C),M.push(C)}f.appendChild(S),b.appendChild(f)}async function bt(b,O){const W=U,C=await D.resolvePlanAssets(e,{...t,signal:V.signal,format:"canvas",start:O,end:O});Le.push(...C.diagnostics);const L=C.plan.pages[O],ae=await at(L,O,{...t,signal:V.signal},Le);if(W!==U||!g)return;const{widthPx:ue,heightPx:we}=pe(L,r);let q=b.firstElementChild;(!q||q.tagName!=="CANVAS")&&(q=document.createElement("canvas"),b.innerHTML="",b.appendChild(q));const Ne=rt(L,n,r,t.maxCanvasPixels);q.width=Ne.width,q.height=Ne.height,q.style.width=`${ue}px`,q.style.height=`${we}px`;const X=q.getContext("2d");if(X){X.setTransform(1,0,0,1,0,0),X.scale(n,n),X.fillStyle="#ffffff",X.fillRect(0,0,ue,we);for(const Mt of L.components)he(X,Mt,o,r,i,l,ae);q.dataset.canvasPage=String(O),b.style.height=`${we}px`,b.style.width=`${ue}px`}}function yt(b){U++,p.start=b.start,p.end=b.end,P.style.height=`${b.start*a+d.slice(0,b.start).reduce((C,L)=>C+L,0)}px`;const O=e.pages.length-1-b.end;S.style.height=`${O*a+d.slice(b.end+1).reduce((C,L)=>C+L,0)}px`;const W=b.end-b.start+1;M.forEach((C,L)=>{if(L<W){C.style.display="";const ae=b.start+L;C.style.height=`${d[ae]??0}px`}else C.style.display="none"}),y=[];for(let C=b.start;C<=b.end;C++){const L=M[C-b.start];if(!L)continue;L.firstElementChild?.dataset?.canvasPage!==String(C)&&y.push(C)}fe()}function fe(){R||y.length===0||(R=requestAnimationFrame(()=>{R=0;let b=Math.max(1,c);for(;y.length>0&&b-- >0;){const O=y.shift(),W=M[O-p.start];W&&bt(W,O).catch(()=>{})}y.length>0&&fe()}))}function oe(){R||(R=requestAnimationFrame(()=>{R=0;const b=g,O=nt({pageHeightsPx:d,viewportHeightPx:b.clientHeight,scrollTopPx:b.scrollTop,overscan:s,gapPx:a});O.start!==p.start||O.end!==p.end?yt(O):fe()}))}let ie=null;return{attach(b){if(typeof document>"u")throw new Error("createCanvasPager 需要浏览器环境(SSR 请在客户端钩子中调用 attach)");N(t.signal),V=new AbortController,t.signal?.addEventListener("abort",Ie,{once:!0}),D.reportOutputDiagnostics(e,"canvas",t),g=b,wt(),b.addEventListener("scroll",oe,{passive:!0}),typeof ResizeObserver<"u"&&(ie=new ResizeObserver(()=>oe()),ie.observe(b)),oe()},destroy(){U++,V.abort(),t.signal?.removeEventListener("abort",Ie),R&&cancelAnimationFrame(R),R=0,ie?.disconnect(),ie=null,g?.removeEventListener("scroll",oe),y=[],f?.remove(),g=null},window(){return{...p}}};function Ie(){V.abort(t.signal?.reason)}}function $e(e,t,n){let r,o;if(typeof e=="string"){const i=h.PAPER_SIZES[e];if(!i)throw new Error(`未知纸张预设 "${e}"(可用:${Object.keys(h.PAPER_SIZES).join("/")})`);r=i.widthMm,o=i.heightMm}else typeof e=="number"?(r=e,o=t??297):(r=e.widthMm,o=e.heightMm);return n?{widthMm:o,heightMm:r}:{widthMm:r,heightMm:o}}class st{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 i=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:s}=$e(t,typeof n=="number"?n:void 0,i.landscape),a=i.margins??{};return this.pending=new lt(this,{widthMm:l,heightMm:s,marginTopMm:a.marginTopMm??10,marginBottomMm:a.marginBottomMm??10,marginLeftMm:a.marginLeftMm??10,marginRightMm:a.marginRightMm??10}),this.pending}collect(){this.pending&&(this.pages.push(this.pending.buildPage()),this.pending=null)}build(){if(this.collect(),this.pages.length===0)throw new Error("模板至少需要一页:先调用 .page() 添加内容");return{...this.templateParams?{params:this.templateParams}:{},...this.templateRepeat?{repeat:this.templateRepeat}:{},pages:this.pages}}}class lt{constructor(t,n){this.parent=t,this.page=n,this.components=[]}text(t,n={},r={}){return this.components.push({kind:"text",leftMm:n.leftMm??0,topMm:n.topMm??0,widthMm:n.widthMm??60,heightMm:n.heightMm??8,text:t,style:r}),this}list(t,n,r,o={}){return this.components.push({kind:"list",leftMm:n.leftMm??10,topMm:n.topMm??30,widthMm:n.widthMm??180,dataset:t,columns:r,...o}),this}rect(t,n={}){return this.components.push({kind:"rect",...t,style:n}),this}line(t,n,r,o={}){return this.components.push({kind:"line",leftMm:t,topMm:n,widthMm:r,heightMm:.5,style:o}),this}barcode(t,n){return this.components.push({kind:"barcode",leftMm:n.leftMm??0,topMm:n.topMm??0,widthMm:n.widthMm??40,heightMm:n.heightMm??12,fallbackText:t}),this}qrcode(t,n,r,o){return this.components.push({kind:"qrcode",leftMm:r,topMm:o,widthMm:n,heightMm:n,fallbackText:t}),this}buildPage(){return{...this.page,components:this.components}}done(){return this.parent}build(){return this.done().build()}}function rn(){return new st}function on(e,t={}){return ve.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"),...n.format?{format:{...n.format}}:{},...t[n.field]}))}function F(e,t,n=!1){if(!Number.isFinite(e)||(n?e<0:e<=0))throw new Error(`${t} 必须是有限${n?"非负":"正"}数`)}function le(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 an(e){const t=e.layout??"page";if(t!=="page"&&t!=="wide")throw new Error("layout 必须是 page 或 wide");if(t==="wide"&&(e.paper!==void 0||e.landscape!==void 0))throw new Error('宽表布局不能同时指定 paper 或 landscape;标准纸型请使用 layout: "page"');if(t!=="wide"&&e.columnWidthMm!==void 0)throw new Error('columnWidthMm 仅适用于 layout: "wide"');const n=e.columnWidthMm??30;return F(n,"columnWidthMm"),{layout:t,columnWidthMm:n}}function sn(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(h.PAPER_SIZES,t))throw new Error(`未知纸张预设 "${t}"(可用:${Object.keys(h.PAPER_SIZES).join("/")})`);const n=$e(t,void 0,e.landscape),r=n.widthMm,o=n.heightMm;return F(r,"纸张 widthMm"),F(o,"纸张 heightMm"),{widthMm:r,heightMm:o}}function ln(e){if(e.margins!==void 0&&(!e.margins||typeof e.margins!="object"||Array.isArray(e.margins)))throw new Error("margins 必须是页边距对象");const t=e.margins??{},n={marginTopMm:t.marginTopMm===void 0?10:t.marginTopMm,marginBottomMm:t.marginBottomMm===void 0?10:t.marginBottomMm,marginLeftMm:t.marginLeftMm===void 0?10:t.marginLeftMm,marginRightMm:t.marginRightMm===void 0?10:t.marginRightMm};for(const[r,o]of Object.entries(n))F(o,r,!0);return n}function cn(e,t){const n=e.dataset===void 0?"detail":e.dataset;if(typeof n!="string"||!n.trim())throw new Error("dataset 必须是非空字符串");if(e.title!==void 0&&typeof e.title!="string")throw new Error("title 必须是字符串");const r=e.titleHeightMm===void 0?10:e.titleHeightMm,o=e.titleGapMm===void 0?4:e.titleGapMm;F(r,"titleHeightMm"),F(o,"titleGapMm",!0);const i=e.title!==void 0&&e.title.length>0,l=i?r+o:0;if(l>=t)throw new Error("标题高度与间距占满页面,必须为表格保留可用高度");return{dataset:n,titleHeightMm:r,hasTitle:i,titleSpaceMm:l}}function dn(e){if(e.listOptions!==void 0&&(!e.listOptions||typeof e.listOptions!="object"||Array.isArray(e.listOptions)))throw new Error("listOptions 必须是列表配置对象");const t=e.listOptions??{};le(t.align,"listOptions.align",!0),le(t.headerAlign,"listOptions.headerAlign",!1);for(const n of["fontSizePt","rowHeightMm","paddingMm"]){const r=t[n];r!==void 0&&F(r,`listOptions.${n}`,n==="paddingMm")}return t}function mn(e){let t=0,n=0;for(const[r,o]of e.entries()){if(!o||typeof o.header!="string"||typeof o.field!="string"||!o.field.trim())throw new Error(`columns[${r}] 需要字符串 header 与非空 field`);le(o.align,`columns[${r}].align`,!0),le(o.headerAlign,`columns[${r}].headerAlign`,!1),o.flex!==void 0&&F(o.flex,`columns[${r}].flex`),o.widthMm!==void 0?(F(o.widthMm,`columns[${r}].widthMm`),t+=o.widthMm):n=Math.max(n,o.flex??1)}return{fixedWidthMm:t,maxFlex:n}}function pn(e,t,n,r){const{fixedWidthMm:o,maxFlex:i}=mn(e.columns);if(t==="page"&&o>r)throw new Error(`固定列宽 ${o}mm 超出页面可用宽度 ${r}mm`);const l=r-o;if(t==="page"&&i>0&&l<=0)throw new Error("固定列占满页面可用宽度,自动列需要正的剩余宽度");const s=i>0?e.columns.reduce((c,d)=>c+(d.widthMm===void 0?(d.flex??1)/i:0),0):0;return{columns:e.columns.map(({widthMm:c,flex:d,...m},p)=>{const g=c??(t==="wide"?n*(d??1):l*((d??1)/i)/s);return F(g,`columns[${p}] 分配后的 widthMm`),{...m,widthMm:g}}),fixedWidthMm:o,maxFlex:i}}function hn(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}=an(e),r=sn(e);let o=r.widthMm;const i=r.heightMm,l=ln(e);let s=o-l.marginLeftMm-l.marginRightMm;const a=i-l.marginTopMm-l.marginBottomMm;if(t==="page"&&s<=0||a<=0)throw new Error("页边距占满纸张,必须保留正的可用宽度和高度");const{dataset:c,titleHeightMm:d,hasTitle:m,titleSpaceMm:p}=cn(e,a),g=dn(e),{columns:f,fixedWidthMm:P,maxFlex:S}=pn(e,t,n,s);t==="wide"&&(s=f.reduce((R,y)=>R+y.widthMm,0),F(s,"宽表总列宽"),o=s+l.marginLeftMm+l.marginRightMm,F(o,"宽表总宽度"));const M={widthMm:o,heightMm:i,...l,components:[],...t==="wide"?{layout:t}:{}};return m&&M.components.push({kind:"text",text:e.title,leftMm:l.marginLeftMm,topMm:l.marginTopMm,widthMm:s,heightMm:d,style:{fontSize:16,bold:!0,align:"center",verticalAlign:"middle",...e.titleStyle}}),M.components.push({align:"auto",headerAlign:"center",...g,kind:"list",...t==="wide"?{layout:t}:{},...m?{title:e.title}:{},dataset:c,columns:f,leftMm:l.marginLeftMm,topMm:l.marginTopMm+p,widthMm:t==="wide"||S>0?s:P}),e.params===void 0?{pages:[M]}:{params:e.params,pages:[M]}}function gn(e){if(e.components!==void 0&&e.pages!==void 0)throw new TypeError("标签 components 与 pages 只能选择一种");const{dataset:t,rowKey:n,copies:r,params:o}=e,i=e.pages??[{components:e.components??[]}],l={repeat:{dataset:t,...n===void 0?{}:{rowKey:n},...r===void 0?{}:{copies:r}},...o===void 0?{}:{params:o},pages:i.map(a=>({widthMm:a.widthMm??e.widthMm??80,heightMm:a.heightMm??e.heightMm??55,marginTopMm:0,marginRightMm:0,marginBottomMm:0,marginLeftMm:0,components:a.components,...a.meta===void 0?{}:{meta:a.meta}}))},s=E.validateReportTemplate(l);if(!s.ok)throw new E.ReportTemplateError(s.errors);return JSON.parse(JSON.stringify(l))}function fn(e){if(!e||typeof e!="object"||!e.repeat)throw new u.ReportSourceError("config","defineLabelReport 需要带 repeat 的固定标签模板");const t=E.validateReportTemplate(e);if(!t.ok)throw new E.ReportTemplateError(t.errors);return e.repeat.dataset}function Be(e,t){if(!Array.isArray(e))throw new u.ReportSourceError("validate","标签数据应为对象数组;请从业务响应中提取行数组");return{[t]:e}}function un(e){const{template:t,rows:n,load:r,dataSchema:o,params:i,pagination:l,dataValidation:s}=e,a=fn(t);if(n!==void 0==(r!==void 0)||r!==void 0&&typeof r!="function")throw new u.ReportSourceError("config","标签报表应且只能配置 rows 或 load 其中一种数据来源");const c={template:t,params:i,pagination:l,dataValidation:s,...o===void 0?{}:{dataSchema:{[a]:o}}};return r?u.defineReport({...c,load:r,mapData:d=>Be(d,a)}):{...c,datasets:Be(n,a)}}function wn(e){return e}class z extends Error{constructor(t,n){super(n),this.code=t,this.name="ReportTemplateMigrationError"}}function He(e){let t=e;if(typeof t=="string"){if(t.length>1e7)throw new z("result","模板迁移输入超过预算");try{t=JSON.parse(t)}catch{throw new z("result","模板 JSON 语法无效")}}const n=u.snapshotReportJson(t,{maxBytes:1e7,error:(r,o)=>new z("result",o)});if(!n||typeof n!="object"||Array.isArray(n))throw new z("result","模板迁移应返回文档对象");return n}function bn(e){if(!Array.isArray(e)||e.length>32)throw new z("definition","模板迁移最多声明 32 步");const t=new Map;for(const n of e){if(!n||![n.from,n.to].every(r=>typeof r=="string"&&r.trim()&&r.length<=64)||n.from===n.to||t.has(n.from)||typeof n.migrate!="function"||n.from===E.REPORT_TEMPLATE_DOCUMENT_VERSION)throw new z("definition","迁移起点应唯一,不得从当前版本降级");t.set(n.from,{...n})}for(const n of t.keys()){const r=new Set;let o=n;for(;t.has(o);){if(r.has(o))throw new z("definition","模板迁移链存在循环");r.add(o),o=t.get(o).to}if(o!==E.REPORT_TEMPLATE_DOCUMENT_VERSION)throw new z("definition","每条迁移链应到达当前模板版本")}return t}function ct(e=[]){const t=bn(e);return async n=>{let r=He(n);const o=[];for(;r.schemaVersion!==E.REPORT_TEMPLATE_DOCUMENT_VERSION;){const i=typeof r.schemaVersion=="string"?t.get(r.schemaVersion):void 0;if(!i)throw new z("unsupported","未声明此模板版本的迁移路径");const l=r.id,s=He(await i.migrate(r));if(s.schemaVersion!==i.to||typeof l=="string"&&s.id!==l)throw new z("result","迁移结果版本不匹配或改变了模板身份");o.push({from:i.from,to:i.to}),r=s}return{document:E.parseReportTemplate(r),steps:o}}}class _ extends Error{constructor(t,n){super(n),this.code=t,this.name="ReportTemplateStoreError"}}function j(e){return JSON.parse(JSON.stringify(e))}function A(e){if(!e?.aborted)return;const t=new Error("模板操作已取消");throw t.name="AbortError",t}function Ue(e){const t=e?Number(e.revision):0;if(!Number.isSafeInteger(t)||t<0||t>=Number.MAX_SAFE_INTEGER)throw new _("history","修订号无效或已达上限");return String(t+1)}function yn(e,t={}){const n=t.migrations?ct(t.migrations):void 0,r=async a=>n?(await n(a)).document:E.parseReportTemplate(a),o=async(a,c)=>{A(c);const d=await e.read(a,c);return A(c),d?j(d):void 0},i=async(a,c)=>{const d=await o(a,c.signal);if((d?.revision??null)!==c.expectedRevision)throw new _("conflict","模板已变化,请重新读取后提交");return d},l=async(a,c,d)=>{if(A(c.signal),!await e.compareAndSwap(a.id,c.expectedRevision,j(a),{signal:c.signal,...d?{publication:j(d)}:{}}))throw new _("conflict","模板已被其他请求更新");return j(a)},s=async(a,c,d,m)=>{if(t.beforePublish){A(d.signal);const P=a.published?await r(a.published):void 0;A(d.signal);const S=await t.beforePublish({document:E.parseReportTemplate(c),previous:P,signal:d.signal});if(!S||S.ok!==!0)throw new _("review",S?.issues?.find(M=>M.severity==="error")?.message??"模板发布检查未通过");A(d.signal)}const p=Ue(a),g=E.parseReportTemplate({...c,revision:p}),f={revision:p,document:g,publishedAt:(t.now?.()??new Date).toISOString()};return m!==void 0&&(f.restoredFrom=m),l({id:a.id,revision:p,publishedRevision:p,published:g},d,f)};return{list:async a=>{A(a);const c=await e.list(a);return A(a),j(c)},get:async(a,c={})=>{const d=await o(a,c.signal),m=c.draft?d?.draft:d?.published,p=m?await r(m):void 0;return A(c.signal),p},history:async(a,c)=>{A(c);const d=await e.history(a,c);return A(c),j(d)},saveDraft:async(a,c)=>{c={...c},A(c.signal);const d=await r(t.migrate?await t.migrate(a):a),m=await i(d.id,c),p=Ue(m);return l({id:d.id,revision:p,draft:{...d,revision:p},...m?.publishedRevision?{publishedRevision:m.publishedRevision,published:m.published}:{}},c)},publish:async(a,c)=>{c={...c};const d=await i(a,c);if(!d)throw new _("missing","模板不存在");if(!d.draft)throw new _("draft","没有可发布的草稿");return s(d,await r(d.draft),c)},rollback:async(a,c,d)=>{d={...d};const m=await i(a,d);if(!m)throw new _("missing","模板不存在");A(d.signal);const p=await e.getVersion(a,c,d.signal);if(!p)throw new _("history","历史修订不存在");return s(m,await r(p.document),d,c)}}}function Mn(){const e=new Map,t=new Map;return{read:async(n,r)=>{A(r);const o=e.get(n);return o?j(o):void 0},list:async n=>(A(n),Array.from(e.values(),({id:r,revision:o,publishedRevision:i})=>({id:r,revision:o,...i?{publishedRevision:i}:{}}))),history:async(n,r)=>(A(r),Array.from(t.get(n)?.values()??[],o=>j(o))),getVersion:async(n,r,o)=>{A(o);const i=t.get(n)?.get(r);return i?j(i):void 0},compareAndSwap:async(n,r,o,i)=>{if(A(i.signal),(e.get(n)?.revision??null)!==r)return!1;if(o.id!==n)throw new _("history","状态 ID 与存储 ID 不一致");const l=j(o),s=i.publication;if(s){const a=t.get(n)??new Map;if(a.has(s.revision)||s.revision!==o.revision||s.document.id!==n)throw new _("history","发布修订不可覆盖,且必须与状态修订和模板 ID 一致");a.set(s.revision,j(s)),t.set(n,a)}return e.set(n,l),!0}}}class w extends Error{constructor(t,n,r="$",o){super(n),this.code=t,this.path=r,this.extensionId=o,this.name="ReportComponentExtensionError"}}const vn=new Set(["__proto__","constructor","prototype"]);function ee(e,t="$",n={nodes:0,units:0},r=0){if(++n.nodes>2048||r>16)throw new w("binding","Component extension JSON exceeds its depth/node budget.",t);if(n.units>64*1024)throw new w("binding","Component extension JSON exceeds 64 Ki UTF-16 units.",t);if(e===null||typeof e=="boolean"||typeof e=="number"&&Number.isFinite(e))return e;if(typeof e=="string"){if(n.units+=e.length,n.units>64*1024)throw new w("binding","Component extension JSON exceeds 64 Ki UTF-16 units.",t);return e}if(!e||typeof e!="object")throw new w("binding","Component extension values must be finite JSON data.",t);const o=Object.getPrototypeOf(e);if(Array.isArray(e))return En(e,t,n,r);if(o!==Object.prototype&&o!==null)throw new w("binding","Component extension values must be plain JSON objects.",t);return Rn(e,t,n,r)}function Oe(e,t,n){const r=Object.getOwnPropertyDescriptor(e,t);if(typeof t!="string"||vn.has(t)||!r?.enumerable||r.get||r.set)throw new w("binding","Component extension JSON contains an unsafe key or accessor.",n);return r.value}function En(e,t,n,r){if(Object.getPrototypeOf(e)!==Array.prototype||e.length>2048||Reflect.ownKeys(e).length!==e.length+1)throw new w("binding","Component extension arrays must be plain dense JSON arrays.",t);return Object.freeze(Array.from({length:e.length},(o,i)=>ee(Oe(e,String(i),`${t}[${i}]`),`${t}[${i}]`,n,r+1)))}function Rn(e,t,n,r){const o=Reflect.ownKeys(e);if(o.length>2048)throw new w("binding","Component extension JSON exceeds its node budget.",t);const i=o.map(l=>{const s=`${t}.${String(l)}`,a=Oe(e,l,s);return n.units+=String(l).length,[l,ee(a,s,n,r+1)]});return Object.freeze(Object.fromEntries(i))}function re(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new w("binding","Expected a component extension object.",t);return e}function ge(e,t,n){for(const r of Object.keys(e))if(!t.includes(r))throw new w("binding","Unknown component extension property.",`${n}.${r}`)}function Me(e,t,n=160){if(typeof e!="string"||!e.trim()||e.length>n)throw new w("definition","Component extension labels must be bounded nonempty strings.",t)}function dt(e,t){if(typeof e!="string"||!/^[a-z][a-z\d_.-]{0,127}$/i.test(e))throw new w("definition","Invalid component extension id.","$.id");if(typeof t!="string"||t.length>64||!/^\d+\.\d+\.\d+(?:-[\da-z.-]+)?(?:\+[\da-z.-]+)?$/i.test(t))throw new w("definition","Component extension version must be explicit semantic version text.","$.version",e)}function De(e,t,n){if(!(e===null&&!t.required)){if(typeof e!==t.type||typeof e=="number"&&!Number.isFinite(e))throw new w("binding",`Expected ${t.type} component property.`,n);if(t.options&&!t.options.some(r=>Object.is(r,e)))throw new w("binding","Component property is outside its declared options.",n);if(typeof e=="number"&&(e<(t.min??-1/0)||e>(t.max??1/0)))throw new w("binding","Component property is outside its declared range.",n);if(typeof e=="string"&&e.length>(t.maxLength??64*1024))throw new w("binding","Component property exceeds maxLength.",n)}}function Tn(e,t){const n=re(e,t);ge(n,["label","type","required","default","options","min","max","maxLength"],t);const r=n;if(Me(r.label,`${t}.label`),!["string","number","boolean"].includes(r.type))throw new w("definition","Unknown component property type.",t);if(r.required!==void 0&&typeof r.required!="boolean")throw new w("definition","Component property required must be boolean.",t);xn(r,t),r.default!==void 0&&De(r.default,r,`${t}.default`)}function xn(e,t){for(const n of["min","max"])if(e[n]!==void 0&&(e.type!=="number"||!Number.isFinite(e[n])))throw new w("definition","Numeric property bounds must be finite numbers.",t);if((e.min??-1/0)>(e.max??1/0))throw new w("definition","Component property min exceeds max.",t);if(e.maxLength!==void 0&&(e.type!=="string"||!Number.isSafeInteger(e.maxLength)||e.maxLength<0||e.maxLength>64*1024))throw new w("definition","Invalid component property maxLength.",t);if(e.options!==void 0){if(!Array.isArray(e.options)||!e.options.length||e.options.length>64)throw new w("definition","Component property options must contain 1 to 64 values.",t);for(const n of e.options)De(n,{...e,options:void 0},`${t}.options`)}}function Sn(e){const t=Object.getPrototypeOf(e);if(t!==Object.prototype&&t!==null)throw new w("definition","Component extension metadata must be a plain object.");const n=Reflect.ownKeys(e).filter(o=>o!=="load").map(o=>[o,Oe(e,o,`$.${String(o)}`)]),r=ee(Object.fromEntries(n));if(ge(r,["id","version","kind","label","description","properties"],"$"),dt(r.id,r.version),Me(r.label,"$.label"),!["image","chart","barcode","qrcode"].includes(r.kind))throw new w("definition","Extension kind must use the existing image-backed output pipeline.","$.kind");if(r.description!==void 0&&Me(r.description,"$.description",2048),r.properties!==void 0){const o=re(r.properties,"$.properties");if(Object.keys(o).length>64)throw new w("definition","Component extension supports at most 64 properties.","$.properties");for(const[i,l]of Object.entries(o))Tn(l,`$.properties.${i}`)}return r}function mt(e,t){const n=re(ee(t??{}),"$.props"),r={};for(const o of Object.keys(n))if(!Object.prototype.hasOwnProperty.call(e.properties??{},o))throw new w("binding","Unknown component property.",`$.props.${o}`,e.id);for(const[o,i]of Object.entries(e.properties??{})){const l=Object.prototype.hasOwnProperty.call(n,o)?n[o]:i.default;if(l===void 0){if(i.required)throw new w("binding","Required component property is missing.",`$.props.${o}`,e.id);continue}De(l,i,`$.props.${o}`),r[o]=l}return Object.freeze(r)}const J="componentExtension";function Cn(e){const t=Object.getOwnPropertyDescriptor(e,"meta")?.value,n=t&&Object.getOwnPropertyDescriptor(t,J);if(n){if(n.get||n.set)throw new w("binding","Component extension binding cannot be an accessor.",`$.meta.${J}`);return n.value}}function Pn(e,t){const n=re(ee(Cn(t)),`$.meta.${J}`);ge(n,["id","version","props","binding"],`$.meta.${J}`),dt(n.id,n.version);const r=e.get(n.id);if(!r)throw new w("binding","Component extension is not registered in this runtime.",`$.meta.${J}.id`,n.id);if(r.metadata.version!==n.version||r.metadata.kind!==t.kind)throw new w("binding","Component extension version or image kind does not match its registration.",`$.meta.${J}`,r.metadata.id);const o=Object.freeze({id:r.metadata.id,version:r.metadata.version,props:mt(r.metadata,n.props),...n.binding===void 0?{}:{binding:n.binding}});return{entry:r,extension:o}}function Ve(e){return e.released??=Promise.resolve().then(()=>e.renderer?.dispose?.())}function Z(e){if(e)throw new w("disposed","Component registry has been disposed.")}function An(e){if(!e||typeof e!="object")throw new w("definition","Component extension definition must be an object.");if(Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)throw new w("definition","Component extension definition must be a plain object.");const t=Object.getOwnPropertyDescriptor(e,"load");if(!t||t.get||t.set||typeof t.value!="function")throw new w("definition","Component extension needs a trusted runtime loader.","$.load");return{metadata:Sn(e),load:t.value}}function $n(e,t){if(!(e&&typeof e.render=="function"&&(e.dispose===void 0||typeof e.dispose=="function"))){if(e&&typeof e.dispose=="function")try{Promise.resolve(e.dispose()).catch(()=>{})}catch{}throw new w("load","Component loader must return render and optional dispose methods.","$.load",t)}}function On(e,t){const n=new AbortController,r=()=>n.abort(e.reason),o=()=>n.abort(t.reason);return e.aborted?r():e.addEventListener("abort",r,{once:!0}),t.aborted?o():t.addEventListener("abort",o,{once:!0}),{signal:n.signal,dispose(){e.removeEventListener("abort",r),t.removeEventListener("abort",o)}}}function Dn(e){if(!Array.isArray(e)||e.length>128)throw new w("definition","Register at most 128 component extensions.");const t=new Map,n=new AbortController;let r=!1,o;for(const a of e){const c=An(a),d=c.metadata.id;if(t.has(d))throw new w("definition","Component extension id is already registered.","$.id",d);t.set(d,c)}function i(a){return Z(r),a.pending||(a.pending=Promise.resolve().then(()=>(Z(r),a.load(n.signal))).then(async c=>($n(c,a.metadata.id),a.renderer=c,r&&(await Ve(a),Z(r)),c)).catch(c=>{throw a.pending=void 0,c instanceof w?c:Object.assign(new w("load","Component extension loader failed.","$.load",a.metadata.id),{cause:c})})),a.pending}const l=async a=>{Z(r);const{entry:c,extension:d}=Pn(t,a.component),m=On(a.signal,n.signal);try{const p=await be.waitForOutput(i(c),m.signal);return await be.waitForOutput(p.render({...a,signal:m.signal,extension:d}),m.signal)}finally{m.dispose()}},s={assets:Object.freeze({get assetRegistry(){return s}}),describe(a){return Z(r),Object.freeze([...t.values()].map(c=>c.metadata).filter(c=>!a||c.kind===a))},hasExtension(a,c,d){const m=t.get(a)?.metadata;return!r&&m?.version===c&&m.kind===d},rendererFor(a){const c=Object.getOwnPropertyDescriptor(a,"meta")?.value;return c&&Object.prototype.hasOwnProperty.call(c,J)?l:void 0},createComponent(a,c={}){Z(r);const d=t.get(a);if(!d)throw new w("binding","Component extension is not registered in this runtime.","$.id",a);const m=re(ee(c),"$");ge(m,["props","binding"],"$");const p={id:a,version:d.metadata.version,props:mt(d.metadata,m.props),...m.binding===void 0?{}:{binding:m.binding}};return{kind:d.metadata.kind,meta:{[J]:Object.freeze(p)}}},dispose(){return o||(r=!0,n.abort(new w("disposed","Component registry has been disposed.")),o=Promise.allSettled([...t.values()].filter(a=>a.renderer).map(Ve)).then(a=>{const c=a.find(d=>d.status==="rejected");if(c?.status==="rejected")throw c.reason}),o)}};return s}function kn(e){return e.map(t=>t.map(n=>/[\t\r\n"]/.test(n)?`"${n.replace(/"/g,'""')}"`:n).join(" ")).join(`\r
|
|
6
|
-
`)}function
|
|
7
|
-
`){s(),n.push([]),
|
|
8
|
-
`&&a++;continue}if(i)throw new Error("Invalid quoted clipboard value");r+=c}if(o)throw new Error("Unclosed clipboard quote");return s(),Ln(n,e),n}class pt extends Error{constructor(t,n,r){const o=typeof n.label=="string"?n.label:"单元格",i={definition:`${o}的编辑器配置无效`,type:`${o}的编辑器与数据类型不一致`,required:`${o}不能为空`,min:`${o}不能小于 ${r}`,max:`${o}不能大于 ${r}`,precision:`${o}最多保留 ${r} 位小数`,length:`${o}最多允许 ${r} 个字符`,choice:`${o}请选择有效选项`,date:`${o}请输入有效日期(YYYY-MM-DD)`};super(i[t]),this.code=t,this.field=n,this.expected=r,this.name="ReportCellFieldError"}}function v(e,t,n){throw new pt(t,e,n)}function ht(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 Nn(e){const[t="",n="0"]=String(e).toLowerCase().split("e");return Math.max(0,(t.split(".")[1]?.length??0)-Number(n))}function Fn(e,t){e.min!==void 0&&t<e.min&&v(e,"min",e.min),e.max!==void 0&&t>e.max&&v(e,"max",e.max),e.precision!==void 0&&Nn(t)>e.precision&&v(e,"precision",e.precision)}function _n(e,t){ht(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 jn(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 zn(e){[e.min,e.max].some(t=>t!==void 0&&!ht(t))&&v(e,"definition"),e.min!==void 0&&e.max!==void 0&&e.min>e.max&&v(e,"definition")}function Bn(e,t){(!Array.isArray(t.options)||!t.options.length)&&v(t,"definition");const n=e.valueType==="text"?"string":e.valueType,r=new Set;for(const o of t.options)(!o||typeof o.value!==n||typeof o.value=="number"&&!Number.isFinite(o.value))&&v(t,"definition"),o.label!==void 0&&typeof o.label!="string"&&v(t,"definition"),r.has(o.value)&&v(t,"definition"),r.add(o.value)}function Hn(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 gt(e,t){(!t||typeof t!="object"||Array.isArray(t)||!["text","number","boolean","enum","date"].includes(t.type))&&v(t??{type:"text"},"definition"),Hn(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"&&jn(t),t.type==="text"&&t.maxLength!==void 0&&(!Number.isInteger(t.maxLength)||t.maxLength<0)&&v(t,"definition"),t.type==="date"&&zn(t),t.type==="enum"&&Bn(e,t)}function Un(e,t,n){if(!e.editable)throw new u.ReportCellEditError("readonly");n&>(e,n);const r=u.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"&&Fn(n,r),n.type==="date"&&_n(n,r),n.type==="text"&&n.maxLength!==void 0&&[...String(r)].length>n.maxLength&&v(n,"length",n.maxLength),n.type==="enum"&&!n.options.some(o=>Object.is(o.value,r))&&v(n,"choice"),r)):r}class T 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 ce(e,t=1){const n=Math.floor(e.scanned/2048);if(e.scanned+=t,e.scanned>e.maxScanned)throw new T("limit");Q(e.signal),Math.floor(e.scanned/2048)>n&&(await e.yieldToHost(),Q(e.signal))}function ke(e){return e.table?.role==="header"?-Math.max(1,e.grid?.cells.length??1):e.table?.rowIndex??0}function qe(e,t,n){if(![t.pageIndex,t.componentIndex,t.rowIndex,t.columnIndex].every(s=>Number.isSafeInteger(s)&&s>=0))throw new T("selection");const r=e.pages[t.pageIndex]?.components[t.componentIndex];if(!r?.grid||t.rowIndex>=r.grid.cells.length)throw new T("selection");const o=r.grid.colWidthsMm?.length??r.grid.cells.reduce((s,a)=>Math.max(s,a.length),1);if(t.columnIndex>=o)throw new T("selection");const i=r.table,l=e.pages[n.pageIndex]?.components[n.componentIndex]?.table;if(i&&l&&i.id===l.id){const s=l.columnKeys.indexOf(i.columnKeys[t.columnIndex]??"");if(s<0)throw new T("selection");return{grid:i.id,row:ke(r)+t.rowIndex,column:s}}return{grid:`${t.pageIndex}:${t.componentIndex}`,row:t.rowIndex,column:t.columnIndex}}function Vn(e,t,n){const r=qe(e,t.anchor,t.anchor),o=qe(e,t.focus,t.anchor);if(r.grid!==o.grid)throw new T("selection");const i=(Math.abs(r.row-o.row)+1)*(Math.abs(r.column-o.column)+1);if(!Number.isSafeInteger(i)||i>n)throw new T("limit");return{grid:r.grid,rowStart:Math.min(r.row,o.row),rowEnd:Math.max(r.row,o.row),columnStart:Math.min(r.column,o.column),columnEnd:Math.max(r.column,o.column),origin:e.pages[t.anchor.pageIndex].components[t.anchor.componentIndex].table}}function qn(e){if(!e)return!1;const t=e.replace(/"[^"]*"|\\.|\[(?![hms]+\])[^\]]*\]/gi,"");return/[ymdhs]/i.test(t)}function Wn(e){if(e.valueType==="text"||e.valueType==="boolean"||qn(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 T("precision");return t}function Gn(e,t,n){if(e.seen.has(n))return;e.seen.add(n),e.selected++;const r=t?Wn(t):null;r===null?e.excluded++:e.values.push(r)}function Jn(e,t,n,r){return r.origin?e.table?.id===r.origin.id:`${t}:${n}`===r.grid}function Yn(e,t,n){return n.origin?n.origin.columnKeys.indexOf(e.table.columnKeys[t]??""):t}function Kn(e,t,n,r){const o=r.origin?ke(e)+t:t,i=Yn(e,n,r);return o<r.rowStart||o>r.rowEnd||i<r.columnStart||i>r.columnEnd?null:`${r.grid}:${o}:${i}`}function Xn(e,t){const n=t.origin?ke(e):0,r=Math.max(0,t.rowStart-n),o=Math.min(e.grid.cells.length,t.rowEnd-n+1);return o>r?o:0}async function Zn(e,t,n,r,o){const i=e.grid;if(t>r.maxScanned)throw new T("limit");const l=i.colWidthsMm?.length??i.cells.reduce((a,c)=>Math.max(a,c.length),1);if(l>r.maxScanned)throw new T("limit");const s=new Map;for(let a=0;a<t;a++){a>0&&a%2048===0&&(await r.yieldToHost(),Q(r.signal));let c=0;for(const d of i.cells[a]){for(await ce(r);c<l&&(s.get(c)??0)>a;)c++;if(c>=l)break;const m=Math.max(1,Math.min(d?.colSpan??1,l-c)),p=Math.min(i.cells.length,a+Math.max(1,d?.rowSpan??1));m>1&&await ce(r,m-1);for(let f=c;f<c+m;f++)s.set(f,p);const g=Kn(e,a,c,n);g&&Gn(o,d,g),c+=m}}}async function Qn(e,t,n){const r={values:[],seen:new Set,excluded:0,selected:0};for(let o=0;o<e.pages.length;o++){await ce(n);const i=e.pages[o];for(let l=0;l<i.components.length;l++){await ce(n);const s=i.components[l];if(!s.grid||!Jn(s,o,l,t)||s.table&&s.table.role!=="body")continue;const a=Xn(s,t);a&&await Zn(s,a,t,n,r)}}return r}function te(e){if(!Number.isFinite(e))throw new T("overflow");return e}function er(e){let t=0,n=0;for(const r of e){const o=r-n,i=te(t+o);n=i-t-o,t=i}return t}async function We(e,t){let n=[...e],r=new Array(e.length);for(let i=1;i<e.length;i*=2){for(let l=0;l<e.length;l+=i*2){const s=Math.min(l+i,e.length),a=Math.min(l+i*2,e.length);let c=l,d=s;for(let m=l;m<a;m++)r[m]=d>=a||c<s&&n[c]<=n[d]?n[c++]:n[d++],m%2048===0&&(await t.yieldToHost(),Q(t.signal))}[n,r]=[r,n]}const o=Math.floor(n.length/2);return n.length%2?n[o]:te(n[o-1]/2+n[o]/2)}function tr(e){const t=er(e);let n=1/0,r=-1/0;for(const o of e)n=Math.min(n,o),r=Math.max(r,o);return{SUM:t,AVERAGE:t/e.length,AVG:t/e.length,MIN:n,MAX:r,COUNT:e.length}}function ft(e,t){if(typeof e!="string"||e.length>256)throw new T("expression");const n=e.toUpperCase().match(/(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?|[A-Z_]+|[()+\-*/]|\S/g)??[];if(!n.length||n.length>64)throw new T("expression");let r=0;function o(s){if(s>16)throw new T("expression");const a=n[r++];if(a==="+"||a==="-")return(a==="-"?-1:1)*o(s+1);if(a==="("){const c=i(0,s+1);if(n[r++]!==")")throw new T("expression");return c}if(a&&/^(?:SUM|AVERAGE|AVG|MIN|MAX|COUNT|MEDIAN)$/.test(a)&&Object.prototype.hasOwnProperty.call(t,a))return te(t[a]);if(a&&/^(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?$/.test(a))return te(Number(a));throw new T("expression")}function i(s,a){let c=o(a);for(;r<n.length;){const d=n[r],m=d==="+"||d==="-"?1:d==="*"||d==="/"?2:0;if(!m||m<s)break;r++;const p=i(m+1,a+1);if(d==="/"&&p===0)throw new T("division");c=te(d==="+"?c+p:d==="-"?c-p:d==="*"?c*p:c/p)}return c}const l=i(1,0);if(r!==n.length)throw new T("expression");return l}function nr(e){const t=e.maxCells??1e5,n=e.maxScannedCells??2e5,r=e.precision??2;if(![t,n].every(o=>Number.isSafeInteger(o)&&o>=1&&o<=2e6))throw new T("limit");if(!Number.isInteger(r)||r<0||r>12)throw new T("precision");return{maxCells:t,maxScanned:n,precision:r}}async function rr(e,t,n={}){const r=nr(n),o={scanned:0,maxScanned:r.maxScanned,signal:n.signal,yieldToHost:n.yieldToHost??(()=>new Promise(a=>setTimeout(a,0)))};Q(o.signal);const i=await Qn(e,Vn(e,t,r.maxCells),o),l=n.operation??"sum";if(!["sum","average","min","max","count","median","expression"].includes(l))throw new T("expression");let s=null;if(l==="count")s=i.values.length;else if(i.values.length)if(l==="median")s=await We(i.values,o);else{const a=tr(i.values);l==="expression"?(/\bMEDIAN\b/i.test(n.expression??"")&&(a.MEDIAN=await We(i.values,o)),s=ft(n.expression??"",a)):s=a[l.toUpperCase()]}if(Q(o.signal),s!==null&&Number.isInteger(s)&&!Number.isSafeInteger(s))throw new T("precision");return{value:s,formatted:s===null?"—":s.toFixed(r.precision),numericCells:i.values.length,excludedCells:i.excluded,selectedCells:i.selected,precision:r.precision}}class I extends Error{constructor(t,n){super(t),this.path=n,this.code="label-sheet",this.name="LabelSheetError"}}function se(e){if(e?.aborted){const t=new Error("标签拼版已取消");throw t.name="AbortError",t}}function Y(e,t,n=!1){if(!Number.isFinite(e)||e<=0||n&&!Number.isSafeInteger(e))throw new I("应为正有限数字,数量应为安全整数",t);return e}function Ge(e,t){if(!Number.isFinite(e)||e<0)throw new I("应为非负有限数字",t);return e}function or(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"])Ge(t?.[r],`$.marginMm.${r}`);for(const r of["horizontal","vertical"])Ge(n?.[r],`$.gapMm.${r}`);return{margin:t,gap:n}}function ir(e){const t=e.paper===void 0||e.paper==="a4"?{widthMm:210,heightMm:297}:e.paper;Y(t.widthMm,"$.paper.widthMm"),Y(t.heightMm,"$.paper.heightMm");const n=Y(e.columns,"$.columns",!0),r=Y(e.rows,"$.rows",!0),o=n*r;if(o>1e3)throw new I("每张纸不能超过 1000 个位置","$.columns");const{margin:i,gap:l}=or(e),s=e.startSlot??0,a=e.offsetMm??{x:0,y:0};if(!Number.isSafeInteger(s)||s<0||s>=o)throw new I("起始位置应在首张纸的有效位置内","$.startSlot");if(!Number.isFinite(a.x)||!Number.isFinite(a.y))throw new I("校准偏移应为有限毫米值","$.offsetMm");return{paper:t,columns:n,rows:r,capacity:o,margin:i,gap:l,startSlot:s,offset:a}}function ut(e){return 1+(e.grid?.cells.reduce((t,n)=>t+n.length+1+n.reduce((r,o)=>r+(o?.children?.reduce((i,l)=>i+ut(l),0)??0),0),0)??0)}function ar(e,t,n){if(!E.validateRenderPlan(e).ok)throw new I("标签计划无效","$.plan");const r=e.pages[0];if(!r)return;const{paper:o,columns:i,rows:l,margin:s,gap:a,offset:c}=n;if(s.left+c.x<0||s.top+c.y<0||s.left+c.x+i*r.pageWidthMm+(i-1)*a.horizontal+s.right>o.widthMm+1e-6||s.top+c.y+l*r.pageHeightMm+(l-1)*a.vertical+s.bottom>o.heightMm+1e-6)throw new I("标签、间距、边距及校准偏移超过纸张尺寸;不会自动缩小标签","$.paper");let d=0;for(const[m,p]of e.pages.entries()){if(se(t.signal),p.layout==="wide"||p.pageWidthMm!==r.pageWidthMm||p.pageHeightMm!==r.pageHeightMm)throw new I("拼版需要尺寸相同的固定标签页面",`$.pages.${m}`);if(d+=p.components.reduce((g,f)=>g+ut(f),0),d>Y(t.maxComponents??25e4,"$.maxComponents",!0))throw new I("拼版组件总量超过预算","$.maxComponents");for(const g of p.components)if(g.leftMm<0||g.topMm<0||g.leftMm+g.widthMm>p.pageWidthMm+1e-6||g.topMm+g.heightMm>p.pageHeightMm+1e-6)throw new I("标签内容超出标签边界",`$.pages.${m}.components`)}}function sr(e,t){se(t.signal);const n=ir(t),{paper:r,columns:o,capacity:i,margin:l,gap:s,startSlot:a,offset:c}=n,d=e.pages.length?Math.ceil((a+e.pages.length)/i):0;if(d>Y(t.maxSheets??1e4,"$.maxSheets",!0))throw new I("拼版纸张数量超过预算","$.maxSheets");Y(t.maxComponents??25e4,"$.maxComponents",!0),ar(e,t,n);const m=u.snapshotReportJson(e,{maxBytes:Y(t.maxSnapshotBytes??64e6,"$.maxSnapshotBytes",!0),check:()=>se(t.signal),error:(g,f)=>new I(f,"$.maxSnapshotBytes")}),p=Array.from({length:d},()=>({pageWidthMm:r.widthMm,pageHeightMm:r.heightMm,components:[],meta:{labelSheet:{columns:o,rows:n.rows,slots:[]}}}));for(const[g,f]of m.pages.entries()){se(t.signal);const P=a+g,S=P%i,M=p[Math.floor(P/i)],R=l.left+c.x+S%o*(f.pageWidthMm+s.horizontal),y=l.top+c.y+Math.floor(S/o)*(f.pageHeightMm+s.vertical),U={sourcePageIndex:g,slotIndex:S,xMm:R,yMm:y,widthMm:f.pageWidthMm,heightMm:f.pageHeightMm,...f.meta?{sourceMeta:f.meta}:{}};M.meta.labelSheet.slots.push(U),M.components.push(...f.components.map(V=>({...V,leftMm:V.leftMm+R,topMm:V.topMm+y,meta:{...V.meta,labelSheet:U}})))}return{...m,pages:p}}function lr(e){if(!e||!["today","yesterday","month-start","month-end"].includes(e.preset))throw new TypeError("未知日期默认值");const t=e.now instanceof Date?e.now.getTime():e.now;if(typeof t!="number"||!Number.isFinite(t)||!Number.isFinite(new Date(t).getTime()))throw new TypeError("日期默认值需要有效的业务时钟");if(typeof e.timeZone!="string"||!e.timeZone.trim())throw new TypeError("日期默认值需要显式业务时区");if(e.offsetDays!==void 0&&(!Number.isSafeInteger(e.offsetDays)||Math.abs(e.offsetDays)>3660))throw new RangeError("日期偏移应为 -3660 到 3660 的整数");const n=new Intl.DateTimeFormat("en-CA",{timeZone:e.timeZone,year:"numeric",month:"2-digit",day:"2-digit",calendar:"iso8601",numberingSystem:"latn"}).formatToParts(t),r=i=>Number(n.find(l=>l.type===i)?.value),o=new Date(0);if(o.setUTCFullYear(r("year"),r("month")-1,r("day")),o.setUTCHours(0,0,0,0),e.preset==="yesterday"&&o.setUTCDate(o.getUTCDate()-1),e.preset==="month-start"&&o.setUTCDate(1),e.preset==="month-end"&&o.setUTCMonth(o.getUTCMonth()+1,0),o.setUTCDate(o.getUTCDate()+(e.offsetDays??0)),o.getUTCFullYear()<1||o.getUTCFullYear()>9999)throw new RangeError("业务日期超出 0001–9999 范围");return o.toISOString().slice(0,10)}function cr(e,t){const n=JSON.parse(JSON.stringify(e));function r(o){if(!o||typeof o!="object")return;if(Array.isArray(o)){o.forEach(r);return}const i=o,l=i.meta?.contextKey;if(i.kind==="text"&&typeof l=="string"&&Object.prototype.hasOwnProperty.call(t,l)){const s=t[l];if(typeof s!="string")throw new TypeError("Report template context values must be strings");i.text=s,delete i.lines,delete i.rawText,delete i.richParagraphs}Object.values(i).forEach(r)}return r(n.pages),n}exports.CSS_DPI=h.CSS_DPI;exports.DEFAULT_BORDER_PT=h.DEFAULT_BORDER_PT;exports.DEFAULT_FONT_FAMILY=h.DEFAULT_FONT_FAMILY;exports.DEFAULT_FONT_PT=h.DEFAULT_FONT_PT;exports.DEFAULT_STROKE_COLOR=h.DEFAULT_STROKE_COLOR;exports.DEFAULT_TEXT_COLOR=h.DEFAULT_TEXT_COLOR;exports.LINE_HEIGHT=h.LINE_HEIGHT;exports.MM_PER_INCH=h.MM_PER_INCH;exports.PAPER_SIZES=h.PAPER_SIZES;exports.SCHEMA_VERSION_MACH=h.SCHEMA_VERSION_MACH;exports.mergeComponentStyles=h.mergeComponentStyles;exports.mmToPx=h.mmToPx;exports.mmToPxFactor=h.mmToPxFactor;exports.ptToPx=h.ptToPx;exports.pxToMm=h.pxToMm;exports.resolveBoxBorders=h.resolveBoxBorders;exports.resolveFontSize=h.resolveFontSize;exports.resolveGridLayout=h.resolveGridLayout;exports.resolveLineHeight=h.resolveLineHeight;exports.resolveStroke=h.resolveStroke;exports.resolveTextColor=h.resolveTextColor;exports.round=h.round;exports.ReportBindingError=K.ReportBindingError;exports.evalStyleRule=K.evalStyleRule;exports.formatValue=K.formatValue;exports.parseDateLocal=K.parseDateLocal;exports.resolveComponentBinding=K.resolveComponentBinding;exports.toExcelNumberFormat=K.toExcelNumberFormat;exports.toNumber=K.toNumber;exports.RENDER_PLAN_SCHEMA_VERSION=G.RENDER_PLAN_SCHEMA_VERSION;exports.isImageBackedComponent=G.isImageBackedComponent;exports.isRichText=G.isRichText;exports.REPORT_TEMPLATE_DOCUMENT_VERSION=E.REPORT_TEMPLATE_DOCUMENT_VERSION;exports.ReportTemplateError=E.ReportTemplateError;exports.assertRenderPlan=E.assertRenderPlan;exports.createTemplateRegistry=E.createTemplateRegistry;exports.defineReportTemplate=E.defineReportTemplate;exports.inspectReportTemplateCompatibility=E.inspectReportTemplateCompatibility;exports.parseReportTemplate=E.parseReportTemplate;exports.serializeReportTemplate=E.serializeReportTemplate;exports.validateComponent=E.validateComponent;exports.validatePage=E.validatePage;exports.validateRenderPlan=E.validateRenderPlan;exports.validateReportTemplate=E.validateReportTemplate;exports.validateReportTemplateDocument=E.validateReportTemplateDocument;exports.datasetJsonSchema=ve.datasetJsonSchema;exports.validateDatasetRows=ve.validateDatasetRows;exports.charWidthEm=B.charWidthEm;exports.createCanvasMeasurer=B.createCanvasMeasurer;exports.createHeuristicMeasurer=B.createHeuristicMeasurer;exports.heuristicMeasurer=B.heuristicMeasurer;exports.measureTextMm=B.measureTextMm;exports.wrapText=B.wrapText;exports.DEFAULT_LABEL_PAGE_LIMIT=u.DEFAULT_LABEL_PAGE_LIMIT;exports.PaginateCellLimitError=u.PaginateCellLimitError;exports.PaginateChartComponentLimitError=u.PaginateChartComponentLimitError;exports.PaginatePageLimitError=u.PaginatePageLimitError;exports.ReportCellEditError=u.ReportCellEditError;exports.ReportSourceError=u.ReportSourceError;exports.ReportValidationError=u.ReportValidationError;exports.applyReportCellEdit=u.applyReportCellEdit;exports.applyReportCellEditBatch=u.applyReportCellEditBatch;exports.applyReportEditResult=u.applyReportEditResult;exports.applyReportSourceMetadata=u.applyReportSourceMetadata;exports.assertReportValidation=u.assertReportValidation;exports.countTemplatePages=u.countTemplatePages;exports.createReportCellEdit=u.createReportCellEdit;exports.createReportCellEditBatch=u.createReportCellEditBatch;exports.createReportCellResolver=u.createReportCellResolver;exports.createReportEditSession=u.createReportEditSession;exports.createReportSource=u.createReportSource;exports.defineReport=u.defineReport;exports.estimateListLayoutCells=u.estimateListLayoutCells;exports.explainDatasetField=u.explainDatasetField;exports.formatReportCellEdit=u.formatReportCellEdit;exports.getReportCellContext=u.getReportCellContext;exports.getReportEditSession=u.getReportEditSession;exports.hasValidDataExplanation=u.hasValidDataExplanation;exports.isReportDataTarget=u.isReportDataTarget;exports.isReportValueState=u.isReportValueState;exports.paginateTemplate=u.paginateTemplate;exports.paginateTemplatePages=u.paginateTemplatePages;exports.parseReportCellInput=u.parseReportCellInput;exports.projectListColumns=u.projectListColumns;exports.registerReportEditSession=u.registerReportEditSession;exports.relocateReportCellEdits=u.relocateReportCellEdits;exports.reportCellEditKey=u.reportCellEditKey;exports.summarizeReportCellEdits=u.summarizeReportCellEdits;exports.validateReportDataset=u.validateReportDataset;exports.OutputAssetError=D.OutputAssetError;exports.OutputFidelityError=D.OutputFidelityError;exports.inspectOutputCapabilities=D.inspectOutputCapabilities;exports.reportOutputDiagnostics=D.reportOutputDiagnostics;exports.resolvePlanAssets=D.resolvePlanAssets;exports.ReportDataError=H.ReportDataError;exports.ReportDrillError=H.ReportDrillError;exports.compareReportData=H.compareReportData;exports.createReportDrillRequest=H.createReportDrillRequest;exports.createReportPrefill=H.createReportPrefill;exports.matchReportDrillActions=H.matchReportDrillActions;exports.reportDataSnapshotFromPlan=H.reportDataSnapshotFromPlan;exports.reportPrefillInputs=H.reportPrefillInputs;exports.resolveReportDrillReturn=H.resolveReportDrillReturn;exports.validateReportDrillActions=H.validateReportDrillActions;exports.ReportParamValidationError=k.ReportParamValidationError;exports.assertReportParams=k.assertReportParams;exports.formatReportCascaderPath=k.formatReportCascaderPath;exports.formatReportDateRange=k.formatReportDateRange;exports.formatReportNumberRange=k.formatReportNumberRange;exports.formatReportParamSelection=k.formatReportParamSelection;exports.isReportDate=k.isReportDate;exports.isReportMonth=k.isReportMonth;exports.isReportYear=k.isReportYear;exports.parseReportCascaderPath=k.parseReportCascaderPath;exports.parseReportDateRange=k.parseReportDateRange;exports.parseReportNumberRange=k.parseReportNumberRange;exports.parseReportParamSelection=k.parseReportParamSelection;exports.reportParamsJsonSchema=k.reportParamsJsonSchema;exports.validateReportParamDefinitions=k.validateReportParamDefinitions;exports.validateReportParams=k.validateReportParams;exports.createReportChartData=Ye.createReportChartData;exports.validateReportChartBinding=Ye.validateReportChartBinding;exports.compileReportPredicate=Ee.compileReportPredicate;exports.evaluateReportPredicate=Ee.evaluateReportPredicate;exports.reportPredicateFields=Ee.reportPredicateFields;exports.cloneReportTemplate=ne.cloneReportTemplate;exports.createLocalTemplateCatalog=ne.createLocalTemplateCatalog;exports.diffReportTemplates=ne.diffReportTemplates;exports.reviewReportTemplate=ne.reviewReportTemplate;exports.reviewReportTemplateAsync=ne.reviewReportTemplateAsync;exports.collectTemplateOutline=Re.collectTemplateOutline;exports.inspectTemplateFieldUsage=Re.inspectTemplateFieldUsage;exports.templatePathLocation=Re.templatePathLocation;exports.applyReportDocumentStyle=me.applyReportDocumentStyle;exports.captureTemplateFragment=me.captureTemplateFragment;exports.insertTemplateFragment=me.insertTemplateFragment;exports.inspectTemplateFragmentBindings=me.inspectTemplateFragmentBindings;exports.TreeRowLimitError=Te.TreeRowLimitError;exports.createTreeTable=Te.createTreeTable;exports.validateTreeOptions=Te.validateTreeOptions;exports.LabelSheetError=I;exports.PageBuilder=lt;exports.ReportCalculationError=T;exports.ReportCellFieldError=pt;exports.ReportComponentExtensionError=w;exports.ReportTemplateMigrationError=z;exports.ReportTemplateStoreError=_;exports.TemplateBuilder=st;exports.bindReportTemplateContext=cr;exports.calculateReportSelection=rr;exports.classOf=$;exports.columnsFromContract=on;exports.computePageWindow=nt;exports.createCanvasPager=nn;exports.createLabelTemplate=gn;exports.createMemoryTemplateStore=Mn;exports.createPageViewportRenderer=_t;exports.createProviderReport=wn;exports.createReportComponentRegistry=Dn;exports.createTableTemplate=hn;exports.createTemplate=rn;exports.createTemplateManager=yn;exports.createTemplateMigrator=ct;exports.defineLabelReport=un;exports.evaluateReportAggregateExpression=ft;exports.formatReportClipboard=kn;exports.imposeLabelSheets=sr;exports.measurePageSizePx=pe;exports.parseReportCellFieldInput=Un;exports.parseReportClipboard=In;exports.planFontSizePx=qt;exports.renderComponent=xe;exports.renderPage=Se;exports.renderPlan=Ft;exports.renderPlanToCanvas=Qt;exports.renderPlanToCanvasAsync=tn;exports.renderPlanToImages=Xt;exports.reportDateDefault=lr;exports.resolvePaper=$e;exports.validateReportCellFieldDefinition=gt;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("./progress-WomPRP3B.cjs"),U=require("./record-bindings-MBxbeBsi.cjs"),v=require("./template-registry-DI59PXVK.cjs"),ye=require("./dataset-IrlXbUvh.cjs"),_=require("./textwrap-Cy7o1hIR.cjs"),w=require("./json-snapshot-1tvQNzQE.cjs"),J=require("./dom-ChE5D-L-.cjs"),ot=require("./data-bar-CeZuFmYl.cjs"),it=require("./rich-text-layout-DK7A_a5r.cjs"),H=require("./capabilities-DiBj4Qgl.cjs"),ee=require("./assets-D2gHc4Mz.cjs"),at=require("./grid-strokes-Be24LGuV.cjs"),j=require("./prefill-DsUD5OoK.cjs"),A=require("./param-validation-C-8sRJLq.cjs"),te=require("./computed-DK6BruFz.cjs"),ne=require("./template-catalog-CoT7jm_6.cjs"),me=require("./template-fragments-GVjpew_q.cjs"),be=require("./template-serialization-CqQY4zDg.cjs");function ve(e,t,n,r,o,i,c,s="top"){e.font=`${t.italic?"italic ":""}${t.bold?"bold ":""}${t.fontSizePx}px ${c}`,"letterSpacing"in e&&(e.letterSpacing="0px"),e.fillStyle=t.color,e.textBaseline="alphabetic";const a=t.fontSizePx*t.lineHeight,l=t.text===""?[""]:t.text.split(`
|
|
2
|
+
`),m=l.length*a;let p=r;s==="middle"?p=r+(i-m)/2:s==="bottom"&&(p=r+i-m),l.forEach((d,u)=>{const f=p+u*a+t.fontSizePx*.8;st(e,d,t,n,f,o),t.underline&&d&<(e,d,t,n,f,o)}),e.textAlign="left"}function st(e,t,n,r,o,i){const c=Array.from(t),s=n.letterSpacingPx??0;if(!s){e.textAlign=n.align==="center"?"center":n.align==="right"?"right":"left";const p=n.align==="center"?r+i/2:n.align==="right"?r+i:r;e.fillText(t,p,o);return}const a=e.measureText(t).width+Math.max(0,c.length-1)*s,l=n.align==="center"?r+(i-a)/2:n.align==="right"?r+i-a:r;e.textAlign="left";let m="";c.forEach((p,d)=>{e.fillText(p,l+e.measureText(m).width+d*s,o),m+=p})}function lt(e,t,n,r,o,i){const c=e.measureText(t).width+Math.max(0,Array.from(t).length-1)*(n.letterSpacingPx??0),s=n.align==="center"?r+(i-c)/2:n.align==="right"?r+i-c:r;e.strokeStyle=n.color,e.lineWidth=Math.max(.5,n.fontSizePx/20),e.beginPath(),e.moveTo(s,o+1),e.lineTo(s+c,o+1),e.stroke()}function _e(e,t,n,r,o){const i=r/72,c=s=>{e.font=`${s.italic?"italic ":""}${s.bold?"bold ":""}${g.resolveFontSize(s,r).fontSizePx}px ${s.fontFamily??o}`,"letterSpacing"in e&&(e.letterSpacing="0px")};it.drawRichText(t,{x:n.x/i,yTop:-n.y/i,width:n.width/i,height:n.height/i},{measure(s,a){return c(a),e.measureText(s).width/i+(a.letterSpacing??0)},draw(s,a,l,m,p){const d=g.resolveFontSize(a,r).fontSizePx,u=-m*i-d*.8;a.backgroundColor&&(e.fillStyle=a.backgroundColor,e.fillRect(l*i,u,p*i,d*g.resolveLineHeight(a))),ve(e,{text:s,fontSizePx:d,bold:!!a.bold,italic:a.italic,underline:a.underline,color:g.resolveTextColor(a),align:"left",lineHeight:g.resolveLineHeight(a),letterSpacingPx:(a.letterSpacing??0)*i},l*i,u,p*i,d,a.fontFamily??o)}})}function L(e){if(e?.aborted)throw e.reason??new DOMException("The operation was aborted.","AbortError")}const ct=(e,t)=>(L(t),/^data:image\/(?:png|jpe?g|webp|gif|svg\+xml)[;,]/i.test(e)?new Promise((n,r)=>{const o=new Image,i=()=>{o.onload=null,o.onerror=null,t?.removeEventListener("abort",c)},c=()=>{i(),o.src="",r(t?.reason??new DOMException("The operation was aborted.","AbortError"))};o.onload=()=>{i(),n(o)},o.onerror=()=>{i(),r(new Error("Image could not be decoded for Canvas output."))},t?.addEventListener("abort",c,{once:!0}),o.src=e}):Promise.reject(new TypeError("Canvas imageData must be an image data URL; provide imageLoader for other sources.")));function mt(e,t,n){return L(n),n?new Promise((r,o)=>{const i=()=>o(n.reason??new DOMException("The operation was aborted.","AbortError"));n.addEventListener("abort",i,{once:!0}),Promise.resolve().then(()=>e(t,n)).then(r,o).finally(()=>n.removeEventListener("abort",i))}):e(t)}function*Me(e){function*t(n,r,o,i){if(i.has(n))throw new TypeError("Cyclic grid children cannot be rendered.");g.isImageBackedComponent(n)&&(yield{component:n,componentIndex:r,componentPath:o});const c=new Set(i).add(n);for(const[s,a]of(n.grid?.cells??[]).entries())for(const[l,m]of a.entries())for(const[p,d]of(m?.children??[]).entries())yield*t(d,r,[...o,s,l,p],c)}for(const[n,r]of e.components.entries())yield*t(r,n,[],new Set)}async function dt(e,t,n){const r=new Map;for(const{component:o}of Me(e))!g.isImageBackedComponent(o)||r.has(o.imageData)||r.set(o.imageData,await mt(t,o.imageData,n));return L(n),r}function pt(e,t,n,r,o,i){const c=t,s=c.naturalWidth??c.width??o,a=c.naturalHeight??c.height??i;if(s<=0||a<=0)throw new RangeError("Decoded Canvas image dimensions must be positive.");const l=Math.min(o/s,i/a),m=s*l,p=a*l;e.drawImage(t,n+(o-m)/2,r+(i-p)/2,m,p)}function je(e){return j.createPageWindowIndex(e.pageHeightsPx,e.gapPx).window(e.viewportHeightPx,e.scrollTopPx,e.overscan)}const Re=96/25.4;function de(e,t=96){const n=t/96*Re;return{widthPx:Math.max(1,Math.round(e.pageWidthMm*n)),heightPx:Math.max(1,Math.round(e.pageHeightMm*n))}}function Be(e,t,n,r=64e6){if(!Number.isFinite(t)||t<=0||!Number.isFinite(n)||n<=0)throw new RangeError("Canvas dpr and dpi must be positive finite numbers.");if(!Number.isFinite(r)||r<=0)throw new RangeError("maxCanvasPixels must be positive and finite.");const o=de(e,n),i=Math.round(o.widthPx*t),c=Math.round(o.heightPx*t);if(!Number.isSafeInteger(i)||!Number.isSafeInteger(c)||i*c>r)throw new RangeError("Canvas page exceeds maxCanvasPixels; reduce resolution or split the report.");return{width:i,height:c}}function ze(e,t,n,r){const o=document.createElement("canvas"),{widthPx:i,heightPx:c}=de(e,n),s=Be(e,t,n,r);o.width=s.width,o.height=s.height,o.style.width=`${i}px`,o.style.height=`${c}px`;const a=o.getContext("2d");if(!a)throw new Error("当前环境不支持 Canvas 2D(测试需真浏览器,见 e2e/canvas.spec.ts)");return a.scale(t,t),a.fillStyle="#ffffff",a.fillRect(0,0,i,c),{canvas:o,ctx:a}}function gt(e,t=96){return g.resolveFontSize(e,t).fontSizePx}function ut(e,t,n,r,o,i,c){for(const s of at.resolveGridStrokes(t,n))e.strokeStyle=s.color,e.lineWidth=g.ptToPx(s.widthPt,c),e.beginPath(),s.kind==="v"?(e.moveTo(r+s.pos*i,o+s.from*i),e.lineTo(r+s.pos*i,o+s.to*i)):(e.moveTo(r+s.from*i,o+s.pos*i),e.lineTo(r+s.to*i,o+s.pos*i)),e.stroke()}function ft(e,t,n,r,o,i){e.beginPath(),t.top&&(e.moveTo(n,r),e.lineTo(n+o,r)),t.right&&(e.moveTo(n+o,r),e.lineTo(n+o,r+i)),t.bottom&&(e.moveTo(n+o,r+i),e.lineTo(n,r+i)),t.left&&(e.moveTo(n,r+i),e.lineTo(n,r)),e.stroke()}function ht(e,t,n,r,o,i,c,s,a,l,m,p){const d=g.resolveGridLayout(t,i/s,c/s);for(const u of d.cells){const f=u.cell.style?.backgroundColor??n.style?.backgroundColor;f&&(e.fillStyle=f,e.fillRect(r+u.xMm*s,o+u.yMm*s,u.widthMm*s,u.heightMm*s))}ut(e,d,n,r,o,s,a);for(const u of d.cells)wt(e,u,n,r,o,s,a,l,m,p)}function wt(e,t,n,r,o,i,c,s,a,l){const m=n.grid?.paddingMm??.5,p=t.cell.text??"",d=g.mergeComponentStyles(n.style,t.cell.style),u=g.resolveFontSize(d,c),f=t.cell.indentMm??0,x=Math.max(0,t.widthMm-2*m-f),C=_.wrapText(p,x,{fontSizePt:u.fontSizePt,bold:d.bold,italic:d.italic,fontFamily:d.fontFamily??s,letterSpacingPt:d.letterSpacing},a).join(`
|
|
3
|
+
`),M={x:r+(t.xMm+m+f)*i,y:o+(t.yMm+m)*i,width:x*i,height:Math.max(0,t.heightMm-2*m)*i};e.save(),e.beginPath(),e.rect(M.x,M.y,M.width,M.height),e.clip(),t.cell.richParagraphs?.length?_e(e,{...n,richParagraphs:t.cell.richParagraphs,style:{verticalAlign:"middle",...d}},M,c,s):ve(e,{text:C,fontSizePx:u.fontSizePx,bold:d.bold??!1,italic:d.italic,underline:d.underline,color:g.resolveTextColor(d,g.DEFAULT_TEXT_COLOR),align:d.align??"left",lineHeight:g.resolveLineHeight(d),letterSpacingPx:g.ptToPx(d.letterSpacing??0,c)},r+(t.xMm+m+f)*i,o+(t.yMm+m)*i,x*i,Math.max(0,t.heightMm-2*m)*i,d.fontFamily??s,d.verticalAlign??"middle");for(const P of t.cell.children??[])pe(e,{...P,leftMm:P.leftMm+M.x/i,topMm:P.topMm+M.y/i},i,c,s,a,l);e.restore();const E=ot.dataBarBox(t.cell.dataBar,t.widthMm,t.heightMm,m);E&&(e.save(),e.globalAlpha*=.35,e.fillStyle=E.color,e.fillRect(r+(t.xMm+E.x)*i,o+(t.yMm+E.y)*i,E.width*i,E.height*i),e.restore())}function yt(e,t,n,r,o,i,c,s,a){const l=t.style??{},m=g.resolveFontSize(l,c);if(g.isRichText(t)){_e(e,t,{x:n,y:r,width:o,height:i},c,s);return}const p=t.lines?.length?t.lines.join(`
|
|
4
|
+
`):_.wrapText(t.text??"",t.widthMm,{fontSizePt:m.fontSizePt,bold:l.bold,italic:l.italic,fontFamily:l.fontFamily??s,letterSpacingPt:l.letterSpacing},a).join(`
|
|
5
|
+
`);ve(e,{text:p,fontSizePx:m.fontSizePx,bold:l.bold??!1,italic:l.italic,underline:l.underline,color:g.resolveTextColor(l),align:l.align??"left",lineHeight:g.resolveLineHeight(l),letterSpacingPx:g.ptToPx(l.letterSpacing??0,c)},n,r,o,i,l.fontFamily??s,l.verticalAlign)}function pe(e,t,n,r,o,i,c){const s=t.leftMm*n,a=t.topMm*n,l=t.widthMm*n,m=t.heightMm*n,p=t.style??{};if(g.isImageBackedComponent(t)){const d=c?.get(t.imageData);d?pt(e,d,s,a,l,m):Ae(e,t,s,a,l,m);return}if(t.grid){ht(e,t.grid,t,s,a,l,m,n,r,o,i,c);return}switch(t.kind){case"text":{yt(e,t,s,a,l,m,r,o,i);break}case"rect":{const d=g.resolveStroke(p),u=g.resolveBoxBorders(p);p.backgroundColor&&(e.fillStyle=p.backgroundColor,e.fillRect(s,a,l,m)),u.inner&&(e.strokeStyle=d.color,e.lineWidth=g.ptToPx(d.widthPt,r),ft(e,u,s,a,l,m));break}case"line":{const d=g.resolveStroke({...p,borderColor:p.lineColor??p.borderColor});e.strokeStyle=d.color,e.lineWidth=g.ptToPx(d.widthPt,r),e.beginPath();const u=t.lineDirection==="up"?a+m:t.lineDirection==="down"?a:a+m/2,f=t.lineDirection==="up"?a:t.lineDirection==="down"?a+m:a+m/2;e.moveTo(s,u),e.lineTo(s+l,f),e.stroke();break}case"ellipse":{const d=g.resolveStroke(p);e.strokeStyle=d.color,e.lineWidth=g.ptToPx(d.widthPt,r),p.backgroundColor&&(e.fillStyle=p.backgroundColor,e.beginPath(),e.ellipse(s+l/2,a+m/2,l/2,m/2,0,0,Math.PI*2),e.fill()),e.beginPath(),e.ellipse(s+l/2,a+m/2,l/2,m/2,0,0,Math.PI*2),e.stroke();break}default:Ae(e,t,s,a,l,m);break}}function Ae(e,t,n,r,o,i){e.save(),e.strokeStyle="#94a3b8",e.strokeRect(n,r,o,i),e.fillStyle="#64748b",e.font="12px sans-serif",e.fillText(t.fallbackText??`[${t.kind}]`,n+3,r+14),e.restore()}async function bt(e,t={}){if(typeof document>"u")throw new Error("renderPlanToImages 需要浏览器环境(SSR/Node 请在客户端钩子中调用)");const{format:n="png",quality:r=.92,...o}=t;if(n!=="png"&&n!=="jpeg")throw new TypeError("Image format must be png or jpeg.");if(!Number.isFinite(r)||r<0||r>1)throw new RangeError("Image quality must be between 0 and 1.");L(t.signal);const i=await ee.resolvePlanAssets(e,{...t,format:"canvas"});e=i.plan;const c=[...i.diagnostics,...H.reportOutputDiagnostics(e,"canvas",t)],s=n==="jpeg"?"image/jpeg":"image/png",a=[],l=Math.min(e.pages.length-1,t.end??e.pages.length-1);for(let m=Math.max(0,t.start??0);m<=l;m++){L(t.signal);const p=await He(e.pages[m],m,o,c);try{a.push(await vt(p,s,r,t.signal))}finally{p.width=0,p.height=0}await g.outputCheckpoint(t,a.length,l-Math.max(0,t.start??0)+1)}return L(t.signal),{blobs:a,diagnostics:c}}function vt(e,t,n,r){return L(r),new Promise((o,i)=>{const c=()=>i(r?.reason??new DOMException("The operation was aborted.","AbortError"));r?.addEventListener("abort",c,{once:!0});try{e.toBlob(s=>{r?.removeEventListener("abort",c),s?o(s):i(new Error("Canvas encoding failed; no empty image was emitted."))},t,n)}catch(s){r?.removeEventListener("abort",c),i(s)}})}function Mt(e,t={}){if(L(t.signal),typeof document>"u")throw new Error("renderPlanToCanvas 需要浏览器环境(SSR 请在客户端钩子中调用)");const n=t.dpr??(typeof devicePixelRatio=="number"?devicePixelRatio:1),r=t.dpi??96,o=r/96*Re,i=t.fontFamily??g.DEFAULT_FONT_FAMILY,c=t.measurer??_.heuristicMeasurer,s=Math.max(0,t.start??0),a=Math.min(e.pages.length-1,t.end??e.pages.length-1),l=[],m=H.reportOutputDiagnostics(e,"canvas",t),p=Rt(e,s,a);for(const d of p)H.notifyOutputDiagnostic(d,t),m.push(d);if(t.fidelity==="strict"&&p.length)throw new H.OutputFidelityError(m);for(let d=s;d<=a;d++){L(t.signal);const u=e.pages[d],{canvas:f,ctx:x}=ze(u,n,r,t.maxCanvasPixels);for(const C of u.components)pe(x,C,o,r,i,c);l.push(f)}return{canvases:l,diagnostics:m}}function Rt(e,t,n){return n<t?[]:e.pages.slice(t,n+1).flatMap((r,o)=>[...Me(r)].map(({component:i,componentIndex:c,componentPath:s})=>({code:"async-image-required",severity:"warning",format:"canvas",pageIndex:t+o,componentIndex:c,componentPath:s,kind:i.kind,nid:i.nid,message:"Use renderPlanToCanvasAsync or renderPlanToImages to decode and include images."})))}async function Et(e,t={}){if(typeof document>"u")throw new Error("renderPlanToCanvasAsync 需要浏览器环境(Node 请使用 PDF 或 XLSX 输出)");L(t.signal);const n=await ee.resolvePlanAssets(e,{...t,format:"canvas"});e=n.plan;const r=[...n.diagnostics,...H.reportOutputDiagnostics(e,"canvas",t)],o=[],i=Math.min(e.pages.length-1,t.end??e.pages.length-1);for(let c=Math.max(0,t.start??0);c<=i;c++)o.push(await He(e.pages[c],c,t,r));return{canvases:o,diagnostics:r}}async function He(e,t,n,r){const o=n.dpr??(typeof devicePixelRatio=="number"?devicePixelRatio:1),i=n.dpi??96,c=n.fontFamily??g.DEFAULT_FONT_FAMILY,s=await Ue(e,t,n,r);L(n.signal);const{canvas:a,ctx:l}=ze(e,o,i,n.maxCanvasPixels);for(const m of e.components)pe(l,m,i/25.4,i,c,n.measurer??_.heuristicMeasurer,s);return a}async function Ue(e,t,n,r){const o=n.imageLoader??ct;return dt(e,async(i,c)=>{try{return await o(i,c)}catch(s){if(c?.aborted)throw s;const a=[...Me(e)].find(({component:u})=>u.imageData===i),{component:l,componentIndex:m,componentPath:p}=a,d={code:"image-decode-failed",severity:"warning",format:"canvas",pageIndex:t,componentIndex:m,componentPath:p,kind:l.kind,nid:l.nid,message:"Image decoding failed; raster output was cancelled instead of omitting the image."};throw r.push(d),H.notifyOutputDiagnostic(d,n),s}},n.signal)}function Tt(e,t={}){const n=t.dpr??(typeof devicePixelRatio=="number"?devicePixelRatio:1),r=t.dpi??96,o=r/96*Re,i=t.fontFamily??g.DEFAULT_FONT_FAMILY,c=t.measurer??_.heuristicMeasurer,s=t.overscan??1,a=t.gapPx??18,l=t.pagesPerFrame??1,m=e.pages.map(y=>y.pageHeightMm*o),p=Math.max(1,...e.pages.map(y=>y.pageWidthMm*o)),d={start:0,end:-1};let u=null,f=null,x=null,C=null,M=[],E=0,P=[],G=0,B=new AbortController;const xe=[];function et(){const y=u;y.innerHTML="",f=document.createElement("div"),f.style.cssText=`width:${p}px;margin:0 auto;`,x=document.createElement("div"),C=document.createElement("div"),f.appendChild(x),M=[];const O=Math.min(e.pages.length,3+s*2);for(let q=0;q<O;q++){const T=document.createElement("div");T.style.cssText=`margin:0 auto ${a}px;box-shadow:0 2px 8px rgba(0,0,0,.35);background:#fff;`,f.appendChild(T),M.push(T)}f.appendChild(C),y.appendChild(f)}async function tt(y,O){const q=G,T=await ee.resolvePlanAssets(e,{...t,signal:B.signal,format:"canvas",start:O,end:O});xe.push(...T.diagnostics);const $=T.plan.pages[O],ae=await Ue($,O,{...t,signal:B.signal},xe);if(q!==G||!u)return;const{widthPx:fe,heightPx:he}=de($,r);let z=y.firstElementChild;(!z||z.tagName!=="CANVAS")&&(z=document.createElement("canvas"),y.innerHTML="",y.appendChild(z));const Oe=Be($,n,r,t.maxCanvasPixels);z.width=Oe.width,z.height=Oe.height,z.style.width=`${fe}px`,z.style.height=`${he}px`;const K=z.getContext("2d");if(K){K.setTransform(1,0,0,1,0,0),K.scale(n,n),K.fillStyle="#ffffff",K.fillRect(0,0,fe,he);for(const rt of $.components)pe(K,rt,o,r,i,c,ae);z.dataset.canvasPage=String(O),y.style.height=`${he}px`,y.style.width=`${fe}px`}}function nt(y){G++,d.start=y.start,d.end=y.end,x.style.height=`${y.start*a+m.slice(0,y.start).reduce((T,$)=>T+$,0)}px`;const O=e.pages.length-1-y.end;C.style.height=`${O*a+m.slice(y.end+1).reduce((T,$)=>T+$,0)}px`;const q=y.end-y.start+1;M.forEach((T,$)=>{if($<q){T.style.display="";const ae=y.start+$;T.style.height=`${m[ae]??0}px`}else T.style.display="none"}),P=[];for(let T=y.start;T<=y.end;T++){const $=M[T-y.start];if(!$)continue;$.firstElementChild?.dataset?.canvasPage!==String(T)&&P.push(T)}ue()}function ue(){E||P.length===0||(E=requestAnimationFrame(()=>{E=0;let y=Math.max(1,l);for(;P.length>0&&y-- >0;){const O=P.shift(),q=M[O-d.start];q&&tt(q,O).catch(()=>{})}P.length>0&&ue()}))}function oe(){E||(E=requestAnimationFrame(()=>{E=0;const y=u,O=je({pageHeightsPx:m,viewportHeightPx:y.clientHeight,scrollTopPx:y.scrollTop,overscan:s,gapPx:a});O.start!==d.start||O.end!==d.end?nt(O):ue()}))}let ie=null;return{attach(y){if(typeof document>"u")throw new Error("createCanvasPager 需要浏览器环境(SSR 请在客户端钩子中调用 attach)");L(t.signal),B=new AbortController,t.signal?.addEventListener("abort",Pe,{once:!0}),H.reportOutputDiagnostics(e,"canvas",t),u=y,et(),y.addEventListener("scroll",oe,{passive:!0}),typeof ResizeObserver<"u"&&(ie=new ResizeObserver(()=>oe()),ie.observe(y)),oe()},destroy(){G++,B.abort(),t.signal?.removeEventListener("abort",Pe),E&&cancelAnimationFrame(E),E=0,ie?.disconnect(),ie=null,u?.removeEventListener("scroll",oe),P=[],f?.remove(),u=null},window(){return{...d}}};function Pe(){B.abort(t.signal?.reason)}}function Ee(e,t,n){let r,o;if(typeof e=="string"){const i=g.PAPER_SIZES[e];if(!i)throw new Error(`未知纸张预设 "${e}"(可用:${Object.keys(g.PAPER_SIZES).join("/")})`);r=i.widthMm,o=i.heightMm}else typeof e=="number"?(r=e,o=t??297):(r=e.widthMm,o=e.heightMm);return n?{widthMm:o,heightMm:r}:{widthMm:r,heightMm:o}}class qe{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 i=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:c,heightMm:s}=Ee(t,typeof n=="number"?n:void 0,i.landscape),a=i.margins??{};return this.pending=new Ve(this,{widthMm:c,heightMm:s,marginTopMm:a.marginTopMm??10,marginBottomMm:a.marginBottomMm??10,marginLeftMm:a.marginLeftMm??10,marginRightMm:a.marginRightMm??10}),this.pending}collect(){this.pending&&(this.pages.push(this.pending.buildPage()),this.pending=null)}build(){if(this.collect(),this.pages.length===0)throw new Error("模板至少需要一页:先调用 .page() 添加内容");return{...this.templateParams?{params:this.templateParams}:{},...this.templateRepeat?{repeat:this.templateRepeat}:{},pages:this.pages}}}class Ve{constructor(t,n){this.parent=t,this.page=n,this.components=[]}text(t,n={},r={}){return this.components.push({kind:"text",leftMm:n.leftMm??0,topMm:n.topMm??0,widthMm:n.widthMm??60,heightMm:n.heightMm??8,text:t,style:r}),this}list(t,n,r,o={}){return this.components.push({kind:"list",leftMm:n.leftMm??10,topMm:n.topMm??30,widthMm:n.widthMm??180,dataset:t,columns:r,...o}),this}rect(t,n={}){return this.components.push({kind:"rect",...t,style:n}),this}line(t,n,r,o={}){return this.components.push({kind:"line",leftMm:t,topMm:n,widthMm:r,heightMm:.5,style:o}),this}barcode(t,n){return this.components.push({kind:"barcode",leftMm:n.leftMm??0,topMm:n.topMm??0,widthMm:n.widthMm??40,heightMm:n.heightMm??12,fallbackText:t}),this}qrcode(t,n,r,o){return this.components.push({kind:"qrcode",leftMm:r,topMm:o,widthMm:n,heightMm:n,fallbackText:t}),this}buildPage(){return{...this.page,components:this.components}}done(){return this.parent}build(){return this.done().build()}}function St(){return new qe}function Ct(e,t={}){return ye.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"),...n.format?{format:{...n.format}}:{},...t[n.field]}))}function I(e,t,n=!1){if(!Number.isFinite(e)||(n?e<0:e<=0))throw new Error(`${t} 必须是有限${n?"非负":"正"}数`)}function le(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 xt(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 I(n,"columnWidthMm"),{layout:t,columnWidthMm:n}}function Pt(e){const t=e.paper===void 0?"a4":e.paper;if(typeof t!="string"&&(typeof t!="object"||t===null)||e.landscape!==void 0&&typeof e.landscape!="boolean")throw new Error("paper 必须是纸张预设名或 { widthMm, heightMm } 对象,landscape 必须是布尔值");if(typeof t=="string"&&!Object.prototype.hasOwnProperty.call(g.PAPER_SIZES,t))throw new Error(`未知纸张预设 "${t}"(可用:${Object.keys(g.PAPER_SIZES).join("/")})`);const n=Ee(t,void 0,e.landscape),r=n.widthMm,o=n.heightMm;return I(r,"纸张 widthMm"),I(o,"纸张 heightMm"),{widthMm:r,heightMm:o}}function Ot(e){if(e.margins!==void 0&&(!e.margins||typeof e.margins!="object"||Array.isArray(e.margins)))throw new Error("margins 必须是页边距对象");const t=e.margins??{},n={marginTopMm:t.marginTopMm===void 0?10:t.marginTopMm,marginBottomMm:t.marginBottomMm===void 0?10:t.marginBottomMm,marginLeftMm:t.marginLeftMm===void 0?10:t.marginLeftMm,marginRightMm:t.marginRightMm===void 0?10:t.marginRightMm};for(const[r,o]of Object.entries(n))I(o,r,!0);return n}function At(e,t){const n=e.dataset===void 0?"detail":e.dataset;if(typeof n!="string"||!n.trim())throw new Error("dataset 必须是非空字符串");if(e.title!==void 0&&typeof e.title!="string")throw new Error("title 必须是字符串");const r=e.titleHeightMm===void 0?10:e.titleHeightMm,o=e.titleGapMm===void 0?4:e.titleGapMm;I(r,"titleHeightMm"),I(o,"titleGapMm",!0);const i=e.title!==void 0&&e.title.length>0,c=i?r+o:0;if(c>=t)throw new Error("标题高度与间距占满页面,必须为表格保留可用高度");return{dataset:n,titleHeightMm:r,hasTitle:i,titleSpaceMm:c}}function $t(e){if(e.listOptions!==void 0&&(!e.listOptions||typeof e.listOptions!="object"||Array.isArray(e.listOptions)))throw new Error("listOptions 必须是列表配置对象");const t=e.listOptions??{};le(t.align,"listOptions.align",!0),le(t.headerAlign,"listOptions.headerAlign",!1);for(const n of["fontSizePt","rowHeightMm","paddingMm"]){const r=t[n];r!==void 0&&I(r,`listOptions.${n}`,n==="paddingMm")}return t}function Dt(e){let t=0,n=0;for(const[r,o]of e.entries()){if(!o||typeof o.header!="string"||typeof o.field!="string"||!o.field.trim())throw new Error(`columns[${r}] 需要字符串 header 与非空 field`);le(o.align,`columns[${r}].align`,!0),le(o.headerAlign,`columns[${r}].headerAlign`,!1),o.flex!==void 0&&I(o.flex,`columns[${r}].flex`),o.widthMm!==void 0?(I(o.widthMm,`columns[${r}].widthMm`),t+=o.widthMm):n=Math.max(n,o.flex??1)}return{fixedWidthMm:t,maxFlex:n}}function Lt(e,t,n,r){const{fixedWidthMm:o,maxFlex:i}=Dt(e.columns);if(t==="page"&&o>r)throw new Error(`固定列宽 ${o}mm 超出页面可用宽度 ${r}mm`);const c=r-o;if(t==="page"&&i>0&&c<=0)throw new Error("固定列占满页面可用宽度,自动列需要正的剩余宽度");const s=i>0?e.columns.reduce((l,m)=>l+(m.widthMm===void 0?(m.flex??1)/i:0),0):0;return{columns:e.columns.map(({widthMm:l,flex:m,...p},d)=>{const u=l??(t==="wide"?n*(m??1):c*((m??1)/i)/s);return I(u,`columns[${d}] 分配后的 widthMm`),{...p,widthMm:u}}),fixedWidthMm:o,maxFlex:i}}function It(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}=xt(e),r=Pt(e);let o=r.widthMm;const i=r.heightMm,c=Ot(e);let s=o-c.marginLeftMm-c.marginRightMm;const a=i-c.marginTopMm-c.marginBottomMm;if(t==="page"&&s<=0||a<=0)throw new Error("页边距占满纸张,必须保留正的可用宽度和高度");const{dataset:l,titleHeightMm:m,hasTitle:p,titleSpaceMm:d}=At(e,a),u=$t(e),{columns:f,fixedWidthMm:x,maxFlex:C}=Lt(e,t,n,s);t==="wide"&&(s=f.reduce((E,P)=>E+P.widthMm,0),I(s,"宽表总列宽"),o=s+c.marginLeftMm+c.marginRightMm,I(o,"宽表总宽度"));const M={widthMm:o,heightMm:i,...c,components:[],...t==="wide"?{layout:t}:{}};return p&&M.components.push({kind:"text",text:e.title,leftMm:c.marginLeftMm,topMm:c.marginTopMm,widthMm:s,heightMm:m,style:{fontSize:16,bold:!0,align:"center",verticalAlign:"middle",...e.titleStyle}}),M.components.push({align:"auto",headerAlign:"center",...u,kind:"list",...t==="wide"?{layout:t}:{},...p?{title:e.title}:{},dataset:l,columns:f,leftMm:c.marginLeftMm,topMm:c.marginTopMm+d,widthMm:t==="wide"||C>0?s:x}),e.params===void 0?{pages:[M]}:{params:e.params,pages:[M]}}function Ft(e){if(e.components!==void 0&&e.pages!==void 0)throw new TypeError("标签 components 与 pages 只能选择一种");const{dataset:t,rowKey:n,copies:r,params:o}=e,i=e.pages??[{components:e.components??[]}],c={repeat:{dataset:t,...n===void 0?{}:{rowKey:n},...r===void 0?{}:{copies:r}},...o===void 0?{}:{params:o},pages:i.map(a=>({widthMm:a.widthMm??e.widthMm??80,heightMm:a.heightMm??e.heightMm??55,marginTopMm:0,marginRightMm:0,marginBottomMm:0,marginLeftMm:0,components:a.components,...a.meta===void 0?{}:{meta:a.meta}}))},s=v.validateReportTemplate(c);if(!s.ok)throw new v.ReportTemplateError(s.errors);return JSON.parse(JSON.stringify(c))}function Nt(e){if(!e||typeof e!="object"||!e.repeat)throw new w.ReportSourceError("config","defineLabelReport 需要带 repeat 的固定标签模板");const t=v.validateReportTemplate(e);if(!t.ok)throw new v.ReportTemplateError(t.errors);return e.repeat.dataset}function $e(e,t){if(!Array.isArray(e))throw new w.ReportSourceError("validate","标签数据应为对象数组;请从业务响应中提取行数组");return{[t]:e}}function kt(e){const{template:t,rows:n,load:r,dataSchema:o,params:i,pagination:c,dataValidation:s}=e,a=Nt(t);if(n!==void 0==(r!==void 0)||r!==void 0&&typeof r!="function")throw new w.ReportSourceError("config","标签报表应且只能配置 rows 或 load 其中一种数据来源");const l={template:t,params:i,pagination:c,dataValidation:s,...o===void 0?{}:{dataSchema:{[a]:o}}};return r?w.defineReport({...l,load:r,mapData:m=>$e(m,a)}):{...l,datasets:$e(n,a)}}function _t(e){return e}class k extends Error{constructor(t,n){super(n),this.code=t,this.name="ReportTemplateMigrationError"}}function De(e){let t=e;if(typeof t=="string"){if(t.length>1e7)throw new k("result","模板迁移输入超过预算");try{t=JSON.parse(t)}catch{throw new k("result","模板 JSON 语法无效")}}const n=w.snapshotReportJson(t,{maxBytes:1e7,error:(r,o)=>new k("result",o)});if(!n||typeof n!="object"||Array.isArray(n))throw new k("result","模板迁移应返回文档对象");return n}function jt(e){if(!Array.isArray(e)||e.length>32)throw new k("definition","模板迁移最多声明 32 步");const t=new Map;for(const n of e){if(!n||![n.from,n.to].every(r=>typeof r=="string"&&r.trim()&&r.length<=64)||n.from===n.to||t.has(n.from)||typeof n.migrate!="function"||n.from===v.REPORT_TEMPLATE_DOCUMENT_VERSION)throw new k("definition","迁移起点应唯一,不得从当前版本降级");t.set(n.from,{...n})}for(const n of t.keys()){const r=new Set;let o=n;for(;t.has(o);){if(r.has(o))throw new k("definition","模板迁移链存在循环");r.add(o),o=t.get(o).to}if(o!==v.REPORT_TEMPLATE_DOCUMENT_VERSION)throw new k("definition","每条迁移链应到达当前模板版本")}return t}function We(e=[]){const t=jt(e);return async n=>{let r=De(n);const o=[];for(;r.schemaVersion!==v.REPORT_TEMPLATE_DOCUMENT_VERSION;){const i=typeof r.schemaVersion=="string"?t.get(r.schemaVersion):void 0;if(!i)throw new k("unsupported","未声明此模板版本的迁移路径");const c=r.id,s=De(await i.migrate(r));if(s.schemaVersion!==i.to||typeof c=="string"&&s.id!==c)throw new k("result","迁移结果版本不匹配或改变了模板身份");o.push({from:i.from,to:i.to}),r=s}return{document:v.parseReportTemplate(r),steps:o}}}class F extends Error{constructor(t,n){super(n),this.code=t,this.name="ReportTemplateStoreError"}}function N(e){return JSON.parse(JSON.stringify(e))}function S(e){if(!e?.aborted)return;const t=new Error("模板操作已取消");throw t.name="AbortError",t}function Le(e){const t=e?Number(e.revision):0;if(!Number.isSafeInteger(t)||t<0||t>=Number.MAX_SAFE_INTEGER)throw new F("history","修订号无效或已达上限");return String(t+1)}function Bt(e,t={}){const n=t.migrations?We(t.migrations):void 0,r=async a=>n?(await n(a)).document:v.parseReportTemplate(a),o=async(a,l)=>{S(l);const m=await e.read(a,l);return S(l),m?N(m):void 0},i=async(a,l)=>{const m=await o(a,l.signal);if((m?.revision??null)!==l.expectedRevision)throw new F("conflict","模板已变化,请重新读取后提交");return m},c=async(a,l,m)=>{if(S(l.signal),!await e.compareAndSwap(a.id,l.expectedRevision,N(a),{signal:l.signal,...m?{publication:N(m)}:{}}))throw new F("conflict","模板已被其他请求更新");return N(a)},s=async(a,l,m,p)=>{if(t.beforePublish){S(m.signal);const x=a.published?await r(a.published):void 0;S(m.signal);const C=await t.beforePublish({document:v.parseReportTemplate(l),previous:x,signal:m.signal});if(!C||C.ok!==!0)throw new F("review",C?.issues?.find(M=>M.severity==="error")?.message??"模板发布检查未通过");S(m.signal)}const d=Le(a),u=v.parseReportTemplate({...l,revision:d}),f={revision:d,document:u,publishedAt:(t.now?.()??new Date).toISOString()};return p!==void 0&&(f.restoredFrom=p),c({id:a.id,revision:d,publishedRevision:d,published:u},m,f)};return{list:async a=>{S(a);const l=await e.list(a);return S(a),N(l)},get:async(a,l={})=>{const m=await o(a,l.signal),p=l.draft?m?.draft:m?.published,d=p?await r(p):void 0;return S(l.signal),d},history:async(a,l)=>{S(l);const m=await e.history(a,l);return S(l),N(m)},saveDraft:async(a,l)=>{l={...l},S(l.signal);const m=await r(t.migrate?await t.migrate(a):a),p=await i(m.id,l),d=Le(p);return c({id:m.id,revision:d,draft:{...m,revision:d},...p?.publishedRevision?{publishedRevision:p.publishedRevision,published:p.published}:{}},l)},publish:async(a,l)=>{l={...l};const m=await i(a,l);if(!m)throw new F("missing","模板不存在");if(!m.draft)throw new F("draft","没有可发布的草稿");return s(m,await r(m.draft),l)},rollback:async(a,l,m)=>{m={...m};const p=await i(a,m);if(!p)throw new F("missing","模板不存在");S(m.signal);const d=await e.getVersion(a,l,m.signal);if(!d)throw new F("history","历史修订不存在");return s(p,await r(d.document),m,l)}}}function zt(){const e=new Map,t=new Map;return{read:async(n,r)=>{S(r);const o=e.get(n);return o?N(o):void 0},list:async n=>(S(n),Array.from(e.values(),({id:r,revision:o,publishedRevision:i})=>({id:r,revision:o,...i?{publishedRevision:i}:{}}))),history:async(n,r)=>(S(r),Array.from(t.get(n)?.values()??[],o=>N(o))),getVersion:async(n,r,o)=>{S(o);const i=t.get(n)?.get(r);return i?N(i):void 0},compareAndSwap:async(n,r,o,i)=>{if(S(i.signal),(e.get(n)?.revision??null)!==r)return!1;if(o.id!==n)throw new F("history","状态 ID 与存储 ID 不一致");const c=N(o),s=i.publication;if(s){const a=t.get(n)??new Map;if(a.has(s.revision)||s.revision!==o.revision||s.document.id!==n)throw new F("history","发布修订不可覆盖,且必须与状态修订和模板 ID 一致");a.set(s.revision,N(s)),t.set(n,a)}return e.set(n,c),!0}}}class h extends Error{constructor(t,n,r="$",o){super(n),this.code=t,this.path=r,this.extensionId=o,this.name="ReportComponentExtensionError"}}const Ht=new Set(["__proto__","constructor","prototype"]);function X(e,t="$",n={nodes:0,units:0},r=0){if(++n.nodes>2048||r>16)throw new h("binding","Component extension JSON exceeds its depth/node budget.",t);if(n.units>64*1024)throw new h("binding","Component extension JSON exceeds 64 Ki UTF-16 units.",t);if(e===null||typeof e=="boolean"||typeof e=="number"&&Number.isFinite(e))return e;if(typeof e=="string"){if(n.units+=e.length,n.units>64*1024)throw new h("binding","Component extension JSON exceeds 64 Ki UTF-16 units.",t);return e}if(!e||typeof e!="object")throw new h("binding","Component extension values must be finite JSON data.",t);const o=Object.getPrototypeOf(e);if(Array.isArray(e))return Ut(e,t,n,r);if(o!==Object.prototype&&o!==null)throw new h("binding","Component extension values must be plain JSON objects.",t);return qt(e,t,n,r)}function Te(e,t,n){const r=Object.getOwnPropertyDescriptor(e,t);if(typeof t!="string"||Ht.has(t)||!r?.enumerable||r.get||r.set)throw new h("binding","Component extension JSON contains an unsafe key or accessor.",n);return r.value}function Ut(e,t,n,r){if(Object.getPrototypeOf(e)!==Array.prototype||e.length>2048||Reflect.ownKeys(e).length!==e.length+1)throw new h("binding","Component extension arrays must be plain dense JSON arrays.",t);return Object.freeze(Array.from({length:e.length},(o,i)=>X(Te(e,String(i),`${t}[${i}]`),`${t}[${i}]`,n,r+1)))}function qt(e,t,n,r){const o=Reflect.ownKeys(e);if(o.length>2048)throw new h("binding","Component extension JSON exceeds its node budget.",t);const i=o.map(c=>{const s=`${t}.${String(c)}`,a=Te(e,c,s);return n.units+=String(c).length,[c,X(a,s,n,r+1)]});return Object.freeze(Object.fromEntries(i))}function re(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new h("binding","Expected a component extension object.",t);return e}function ge(e,t,n){for(const r of Object.keys(e))if(!t.includes(r))throw new h("binding","Unknown component extension property.",`${n}.${r}`)}function we(e,t,n=160){if(typeof e!="string"||!e.trim()||e.length>n)throw new h("definition","Component extension labels must be bounded nonempty strings.",t)}function Je(e,t){if(typeof e!="string"||!/^[a-z][a-z\d_.-]{0,127}$/i.test(e))throw new h("definition","Invalid component extension id.","$.id");if(typeof t!="string"||t.length>64||!/^\d+\.\d+\.\d+(?:-[\da-z.-]+)?(?:\+[\da-z.-]+)?$/i.test(t))throw new h("definition","Component extension version must be explicit semantic version text.","$.version",e)}function Se(e,t,n){if(!(e===null&&!t.required)){if(typeof e!==t.type||typeof e=="number"&&!Number.isFinite(e))throw new h("binding",`Expected ${t.type} component property.`,n);if(t.options&&!t.options.some(r=>Object.is(r,e)))throw new h("binding","Component property is outside its declared options.",n);if(typeof e=="number"&&(e<(t.min??-1/0)||e>(t.max??1/0)))throw new h("binding","Component property is outside its declared range.",n);if(typeof e=="string"&&e.length>(t.maxLength??64*1024))throw new h("binding","Component property exceeds maxLength.",n)}}function Vt(e,t){const n=re(e,t);ge(n,["label","type","required","default","options","min","max","maxLength"],t);const r=n;if(we(r.label,`${t}.label`),!["string","number","boolean"].includes(r.type))throw new h("definition","Unknown component property type.",t);if(r.required!==void 0&&typeof r.required!="boolean")throw new h("definition","Component property required must be boolean.",t);Wt(r,t),r.default!==void 0&&Se(r.default,r,`${t}.default`)}function Wt(e,t){for(const n of["min","max"])if(e[n]!==void 0&&(e.type!=="number"||!Number.isFinite(e[n])))throw new h("definition","Numeric property bounds must be finite numbers.",t);if((e.min??-1/0)>(e.max??1/0))throw new h("definition","Component property min exceeds max.",t);if(e.maxLength!==void 0&&(e.type!=="string"||!Number.isSafeInteger(e.maxLength)||e.maxLength<0||e.maxLength>64*1024))throw new h("definition","Invalid component property maxLength.",t);if(e.options!==void 0){if(!Array.isArray(e.options)||!e.options.length||e.options.length>64)throw new h("definition","Component property options must contain 1 to 64 values.",t);for(const n of e.options)Se(n,{...e,options:void 0},`${t}.options`)}}function Jt(e){const t=Object.getPrototypeOf(e);if(t!==Object.prototype&&t!==null)throw new h("definition","Component extension metadata must be a plain object.");const n=Reflect.ownKeys(e).filter(o=>o!=="load").map(o=>[o,Te(e,o,`$.${String(o)}`)]),r=X(Object.fromEntries(n));if(ge(r,["id","version","kind","label","description","properties"],"$"),Je(r.id,r.version),we(r.label,"$.label"),!["image","chart","barcode","qrcode"].includes(r.kind))throw new h("definition","Extension kind must use the existing image-backed output pipeline.","$.kind");if(r.description!==void 0&&we(r.description,"$.description",2048),r.properties!==void 0){const o=re(r.properties,"$.properties");if(Object.keys(o).length>64)throw new h("definition","Component extension supports at most 64 properties.","$.properties");for(const[i,c]of Object.entries(o))Vt(c,`$.properties.${i}`)}return r}function Ge(e,t){const n=re(X(t??{}),"$.props"),r={};for(const o of Object.keys(n))if(!Object.prototype.hasOwnProperty.call(e.properties??{},o))throw new h("binding","Unknown component property.",`$.props.${o}`,e.id);for(const[o,i]of Object.entries(e.properties??{})){const c=Object.prototype.hasOwnProperty.call(n,o)?n[o]:i.default;if(c===void 0){if(i.required)throw new h("binding","Required component property is missing.",`$.props.${o}`,e.id);continue}Se(c,i,`$.props.${o}`),r[o]=c}return Object.freeze(r)}const V="componentExtension";function Gt(e){const t=Object.getOwnPropertyDescriptor(e,"meta")?.value,n=t&&Object.getOwnPropertyDescriptor(t,V);if(n){if(n.get||n.set)throw new h("binding","Component extension binding cannot be an accessor.",`$.meta.${V}`);return n.value}}function Kt(e,t){const n=re(X(Gt(t)),`$.meta.${V}`);ge(n,["id","version","props","binding"],`$.meta.${V}`),Je(n.id,n.version);const r=e.get(n.id);if(!r)throw new h("binding","Component extension is not registered in this runtime.",`$.meta.${V}.id`,n.id);if(r.metadata.version!==n.version||r.metadata.kind!==t.kind)throw new h("binding","Component extension version or image kind does not match its registration.",`$.meta.${V}`,r.metadata.id);const o=Object.freeze({id:r.metadata.id,version:r.metadata.version,props:Ge(r.metadata,n.props),...n.binding===void 0?{}:{binding:n.binding}});return{entry:r,extension:o}}function Ie(e){return e.released??=Promise.resolve().then(()=>e.renderer?.dispose?.())}function Y(e){if(e)throw new h("disposed","Component registry has been disposed.")}function Yt(e){if(!e||typeof e!="object")throw new h("definition","Component extension definition must be an object.");if(Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)throw new h("definition","Component extension definition must be a plain object.");const t=Object.getOwnPropertyDescriptor(e,"load");if(!t||t.get||t.set||typeof t.value!="function")throw new h("definition","Component extension needs a trusted runtime loader.","$.load");return{metadata:Jt(e),load:t.value}}function Zt(e,t){if(!(e&&typeof e.render=="function"&&(e.dispose===void 0||typeof e.dispose=="function"))){if(e&&typeof e.dispose=="function")try{Promise.resolve(e.dispose()).catch(()=>{})}catch{}throw new h("load","Component loader must return render and optional dispose methods.","$.load",t)}}function Xt(e,t){const n=new AbortController,r=()=>n.abort(e.reason),o=()=>n.abort(t.reason);return e.aborted?r():e.addEventListener("abort",r,{once:!0}),t.aborted?o():t.addEventListener("abort",o,{once:!0}),{signal:n.signal,dispose(){e.removeEventListener("abort",r),t.removeEventListener("abort",o)}}}function Qt(e){if(!Array.isArray(e)||e.length>128)throw new h("definition","Register at most 128 component extensions.");const t=new Map,n=new AbortController;let r=!1,o;for(const a of e){const l=Yt(a),m=l.metadata.id;if(t.has(m))throw new h("definition","Component extension id is already registered.","$.id",m);t.set(m,l)}function i(a){return Y(r),a.pending||(a.pending=Promise.resolve().then(()=>(Y(r),a.load(n.signal))).then(async l=>(Zt(l,a.metadata.id),a.renderer=l,r&&(await Ie(a),Y(r)),l)).catch(l=>{throw a.pending=void 0,l instanceof h?l:Object.assign(new h("load","Component extension loader failed.","$.load",a.metadata.id),{cause:l})})),a.pending}const c=async a=>{Y(r);const{entry:l,extension:m}=Kt(t,a.component),p=Xt(a.signal,n.signal);try{const d=await g.waitForOutput(i(l),p.signal);return await g.waitForOutput(d.render({...a,signal:p.signal,extension:m}),p.signal)}finally{p.dispose()}},s={assets:Object.freeze({get assetRegistry(){return s}}),describe(a){return Y(r),Object.freeze([...t.values()].map(l=>l.metadata).filter(l=>!a||l.kind===a))},hasExtension(a,l,m){const p=t.get(a)?.metadata;return!r&&p?.version===l&&p.kind===m},rendererFor(a){const l=Object.getOwnPropertyDescriptor(a,"meta")?.value;return l&&Object.prototype.hasOwnProperty.call(l,V)?c:void 0},createComponent(a,l={}){Y(r);const m=t.get(a);if(!m)throw new h("binding","Component extension is not registered in this runtime.","$.id",a);const p=re(X(l),"$");ge(p,["props","binding"],"$");const d={id:a,version:m.metadata.version,props:Ge(m.metadata,p.props),...p.binding===void 0?{}:{binding:p.binding}};return{kind:m.metadata.kind,meta:{[V]:Object.freeze(d)}}},dispose(){return o||(r=!0,n.abort(new h("disposed","Component registry has been disposed.")),o=Promise.allSettled([...t.values()].filter(a=>a.renderer).map(Ie)).then(a=>{const l=a.find(m=>m.status==="rejected");if(l?.status==="rejected")throw l.reason}),o)}};return s}function en(e){return e.map(t=>t.map(n=>/[\t\r\n"]/.test(n)?`"${n.replace(/"/g,'""')}"`:n).join(" ")).join(`\r
|
|
6
|
+
`)}function tn(e,t){const n=e[e.length-1];e.length>1&&n?.length===1&&n[0]===""&&/[\r\n]$/.test(t)&&e.pop()}function nn(e,t=1e4){if(e.length>4*1024*1024)throw new Error("Clipboard text limit exceeded");const n=[[]];let r="",o=!1,i=!1,c=0;function s(){if(++c>t)throw new Error("Clipboard cell limit exceeded");n[n.length-1].push(r),r="",i=!1}for(let a=0;a<e.length;a++){const l=e[a];if(o){if(l!=='"'){r+=l;continue}if(e[a+1]==='"'){r+='"',a++;continue}o=!1,i=!0;continue}if(l==='"'&&!r&&!i){o=!0;continue}if(l===" "){s();continue}if(l==="\r"||l===`
|
|
7
|
+
`){s(),n.push([]),l==="\r"&&e[a+1]===`
|
|
8
|
+
`&&a++;continue}if(i)throw new Error("Invalid quoted clipboard value");r+=l}if(o)throw new Error("Unclosed clipboard quote");return s(),tn(n,e),n}class Ke extends Error{constructor(t,n,r){const o=typeof n.label=="string"?n.label:"单元格",i={definition:`${o}的编辑器配置无效`,type:`${o}的编辑器与数据类型不一致`,required:`${o}不能为空`,min:`${o}不能小于 ${r}`,max:`${o}不能大于 ${r}`,precision:`${o}最多保留 ${r} 位小数`,length:`${o}最多允许 ${r} 个字符`,choice:`${o}请选择有效选项`,date:`${o}请输入有效日期(YYYY-MM-DD)`};super(i[t]),this.code=t,this.field=n,this.expected=r,this.name="ReportCellFieldError"}}function b(e,t,n){throw new Ke(t,e,n)}function Ye(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 rn(e){const[t="",n="0"]=String(e).toLowerCase().split("e");return Math.max(0,(t.split(".")[1]?.length??0)-Number(n))}function on(e,t){e.min!==void 0&&t<e.min&&b(e,"min",e.min),e.max!==void 0&&t>e.max&&b(e,"max",e.max),e.precision!==void 0&&rn(t)>e.precision&&b(e,"precision",e.precision)}function an(e,t){Ye(t)||b(e,"date"),e.min!==void 0&&t<e.min&&b(e,"min",e.min),e.max!==void 0&&t>e.max&&b(e,"max",e.max)}function sn(e){[e.min,e.max].some(t=>t!==void 0&&!Number.isFinite(t))&&b(e,"definition"),e.min!==void 0&&e.max!==void 0&&e.min>e.max&&b(e,"definition"),e.precision!==void 0&&(!Number.isInteger(e.precision)||e.precision<0||e.precision>15)&&b(e,"definition")}function ln(e){[e.min,e.max].some(t=>t!==void 0&&!Ye(t))&&b(e,"definition"),e.min!==void 0&&e.max!==void 0&&e.min>e.max&&b(e,"definition")}function cn(e,t){(!Array.isArray(t.options)||!t.options.length)&&b(t,"definition");const n=e.valueType==="text"?"string":e.valueType,r=new Set;for(const o of t.options)(!o||typeof o.value!==n||typeof o.value=="number"&&!Number.isFinite(o.value))&&b(t,"definition"),o.label!==void 0&&typeof o.label!="string"&&b(t,"definition"),r.has(o.value)&&b(t,"definition"),r.add(o.value)}function mn(e){e.required!==void 0&&typeof e.required!="boolean"&&b(e,"definition"),[e.label,e.hint,e.unit].some(t=>t!==void 0&&typeof t!="string")&&b(e,"definition"),e.type==="boolean"&&[e.trueLabel,e.falseLabel].some(t=>t!==void 0&&typeof t!="string")&&b(e,"definition")}function Ze(e,t){(!t||typeof t!="object"||Array.isArray(t)||!["text","number","boolean","enum","date"].includes(t.type))&&b(t??{type:"text"},"definition"),mn(t),(t.type==="number"||t.type==="boolean")&&e.valueType!==t.type&&b(t,"type"),(t.type==="text"||t.type==="date")&&e.valueType!=="text"&&b(t,"type"),t.type==="number"&&sn(t),t.type==="text"&&t.maxLength!==void 0&&(!Number.isInteger(t.maxLength)||t.maxLength<0)&&b(t,"definition"),t.type==="date"&&ln(t),t.type==="enum"&&cn(e,t)}function dn(e,t,n){if(!e.editable)throw new w.ReportCellEditError("readonly");n&&Ze(e,n);const r=w.parseReportCellInput(e,t);return n?(n.required&&typeof r=="string"&&!r.trim()&&b(n,"required"),r===null||r===""?(n.required&&b(n,"required"),r):(n.type==="number"&&on(n,r),n.type==="date"&&an(n,r),n.type==="text"&&n.maxLength!==void 0&&[...String(r)].length>n.maxLength&&b(n,"length",n.maxLength),n.type==="enum"&&!n.options.some(o=>Object.is(o.value,r))&&b(n,"choice"),r)):r}class R extends Error{constructor(t){super(`Report calculation: ${t}`),this.code=t,this.name="ReportCalculationError"}}function Z(e){if(!e?.aborted)return;const t=new Error("Calculation cancelled");throw t.name="AbortError",t}async function ce(e,t=1){const n=Math.floor(e.scanned/2048);if(e.scanned+=t,e.scanned>e.maxScanned)throw new R("limit");Z(e.signal),Math.floor(e.scanned/2048)>n&&(await e.yieldToHost(),Z(e.signal))}function Ce(e){return e.table?.role==="header"?-Math.max(1,e.grid?.cells.length??1):e.table?.rowIndex??0}function Fe(e,t,n){if(![t.pageIndex,t.componentIndex,t.rowIndex,t.columnIndex].every(s=>Number.isSafeInteger(s)&&s>=0))throw new R("selection");const r=e.pages[t.pageIndex]?.components[t.componentIndex];if(!r?.grid||t.rowIndex>=r.grid.cells.length)throw new R("selection");const o=r.grid.colWidthsMm?.length??r.grid.cells.reduce((s,a)=>Math.max(s,a.length),1);if(t.columnIndex>=o)throw new R("selection");const i=r.table,c=e.pages[n.pageIndex]?.components[n.componentIndex]?.table;if(i&&c&&i.id===c.id){const s=c.columnKeys.indexOf(i.columnKeys[t.columnIndex]??"");if(s<0)throw new R("selection");return{grid:i.id,row:Ce(r)+t.rowIndex,column:s}}return{grid:`${t.pageIndex}:${t.componentIndex}`,row:t.rowIndex,column:t.columnIndex}}function pn(e,t,n){const r=Fe(e,t.anchor,t.anchor),o=Fe(e,t.focus,t.anchor);if(r.grid!==o.grid)throw new R("selection");const i=(Math.abs(r.row-o.row)+1)*(Math.abs(r.column-o.column)+1);if(!Number.isSafeInteger(i)||i>n)throw new R("limit");return{grid:r.grid,rowStart:Math.min(r.row,o.row),rowEnd:Math.max(r.row,o.row),columnStart:Math.min(r.column,o.column),columnEnd:Math.max(r.column,o.column),origin:e.pages[t.anchor.pageIndex].components[t.anchor.componentIndex].table}}function gn(e){if(!e)return!1;const t=e.replace(/"[^"]*"|\\.|\[(?![hms]+\])[^\]]*\]/gi,"");return/[ymdhs]/i.test(t)}function un(e){if(e.valueType==="text"||e.valueType==="boolean"||gn(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 R("precision");return t}function fn(e,t,n){if(e.seen.has(n))return;e.seen.add(n),e.selected++;const r=t?un(t):null;r===null?e.excluded++:e.values.push(r)}function hn(e,t,n,r){return r.origin?e.table?.id===r.origin.id:`${t}:${n}`===r.grid}function wn(e,t,n){return n.origin?n.origin.columnKeys.indexOf(e.table.columnKeys[t]??""):t}function yn(e,t,n,r){const o=r.origin?Ce(e)+t:t,i=wn(e,n,r);return o<r.rowStart||o>r.rowEnd||i<r.columnStart||i>r.columnEnd?null:`${r.grid}:${o}:${i}`}function bn(e,t){const n=t.origin?Ce(e):0,r=Math.max(0,t.rowStart-n),o=Math.min(e.grid.cells.length,t.rowEnd-n+1);return o>r?o:0}async function vn(e,t,n,r,o){const i=e.grid;if(t>r.maxScanned)throw new R("limit");const c=i.colWidthsMm?.length??i.cells.reduce((a,l)=>Math.max(a,l.length),1);if(c>r.maxScanned)throw new R("limit");const s=new Map;for(let a=0;a<t;a++){a>0&&a%2048===0&&(await r.yieldToHost(),Z(r.signal));let l=0;for(const m of i.cells[a]){for(await ce(r);l<c&&(s.get(l)??0)>a;)l++;if(l>=c)break;const p=Math.max(1,Math.min(m?.colSpan??1,c-l)),d=Math.min(i.cells.length,a+Math.max(1,m?.rowSpan??1));p>1&&await ce(r,p-1);for(let f=l;f<l+p;f++)s.set(f,d);const u=yn(e,a,l,n);u&&fn(o,m,u),l+=p}}}async function Mn(e,t,n){const r={values:[],seen:new Set,excluded:0,selected:0};for(let o=0;o<e.pages.length;o++){await ce(n);const i=e.pages[o];for(let c=0;c<i.components.length;c++){await ce(n);const s=i.components[c];if(!s.grid||!hn(s,o,c,t)||s.table&&s.table.role!=="body")continue;const a=bn(s,t);a&&await vn(s,a,t,n,r)}}return r}function Q(e){if(!Number.isFinite(e))throw new R("overflow");return e}function Rn(e){let t=0,n=0;for(const r of e){const o=r-n,i=Q(t+o);n=i-t-o,t=i}return t}async function Ne(e,t){let n=[...e],r=new Array(e.length);for(let i=1;i<e.length;i*=2){for(let c=0;c<e.length;c+=i*2){const s=Math.min(c+i,e.length),a=Math.min(c+i*2,e.length);let l=c,m=s;for(let p=c;p<a;p++)r[p]=m>=a||l<s&&n[l]<=n[m]?n[l++]:n[m++],p%2048===0&&(await t.yieldToHost(),Z(t.signal))}[n,r]=[r,n]}const o=Math.floor(n.length/2);return n.length%2?n[o]:Q(n[o-1]/2+n[o]/2)}function En(e){const t=Rn(e);let n=1/0,r=-1/0;for(const o of e)n=Math.min(n,o),r=Math.max(r,o);return{SUM:t,AVERAGE:t/e.length,AVG:t/e.length,MIN:n,MAX:r,COUNT:e.length}}function Xe(e,t){if(typeof e!="string"||e.length>256)throw new R("expression");const n=e.toUpperCase().match(/(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?|[A-Z_]+|[()+\-*/]|\S/g)??[];if(!n.length||n.length>64)throw new R("expression");let r=0;function o(s){if(s>16)throw new R("expression");const a=n[r++];if(a==="+"||a==="-")return(a==="-"?-1:1)*o(s+1);if(a==="("){const l=i(0,s+1);if(n[r++]!==")")throw new R("expression");return l}if(a&&/^(?:SUM|AVERAGE|AVG|MIN|MAX|COUNT|MEDIAN)$/.test(a)&&Object.prototype.hasOwnProperty.call(t,a))return Q(t[a]);if(a&&/^(?:\d+(?:\.\d*)?|\.\d+)(?:E[+-]?\d+)?$/.test(a))return Q(Number(a));throw new R("expression")}function i(s,a){let l=o(a);for(;r<n.length;){const m=n[r],p=m==="+"||m==="-"?1:m==="*"||m==="/"?2:0;if(!p||p<s)break;r++;const d=i(p+1,a+1);if(m==="/"&&d===0)throw new R("division");l=Q(m==="+"?l+d:m==="-"?l-d:m==="*"?l*d:l/d)}return l}const c=i(1,0);if(r!==n.length)throw new R("expression");return c}function Tn(e){const t=e.maxCells??1e5,n=e.maxScannedCells??2e5,r=e.precision??2;if(![t,n].every(o=>Number.isSafeInteger(o)&&o>=1&&o<=2e6))throw new R("limit");if(!Number.isInteger(r)||r<0||r>12)throw new R("precision");return{maxCells:t,maxScanned:n,precision:r}}async function Sn(e,t,n={}){const r=Tn(n),o={scanned:0,maxScanned:r.maxScanned,signal:n.signal,yieldToHost:n.yieldToHost??(()=>new Promise(a=>setTimeout(a,0)))};Z(o.signal);const i=await Mn(e,pn(e,t,r.maxCells),o),c=n.operation??"sum";if(!["sum","average","min","max","count","median","expression"].includes(c))throw new R("expression");let s=null;if(c==="count")s=i.values.length;else if(i.values.length)if(c==="median")s=await Ne(i.values,o);else{const a=En(i.values);c==="expression"?(/\bMEDIAN\b/i.test(n.expression??"")&&(a.MEDIAN=await Ne(i.values,o)),s=Xe(n.expression??"",a)):s=a[c.toUpperCase()]}if(Z(o.signal),s!==null&&Number.isInteger(s)&&!Number.isSafeInteger(s))throw new R("precision");return{value:s,formatted:s===null?"—":s.toFixed(r.precision),numericCells:i.values.length,excludedCells:i.excluded,selectedCells:i.selected,precision:r.precision}}class D extends Error{constructor(t,n){super(t),this.path=n,this.code="label-sheet",this.name="LabelSheetError"}}function se(e){if(e?.aborted){const t=new Error("标签拼版已取消");throw t.name="AbortError",t}}function W(e,t,n=!1){if(!Number.isFinite(e)||e<=0||n&&!Number.isSafeInteger(e))throw new D("应为正有限数字,数量应为安全整数",t);return e}function ke(e,t){if(!Number.isFinite(e)||e<0)throw new D("应为非负有限数字",t);return e}function Cn(e){const t=typeof e.marginMm=="object"?e.marginMm:{top:e.marginMm??0,left:e.marginMm??0,bottom:e.marginMm??0,right:e.marginMm??0},n=typeof e.gapMm=="object"?e.gapMm:{horizontal:e.gapMm??0,vertical:e.gapMm??0};for(const r of["top","left","bottom","right"])ke(t?.[r],`$.marginMm.${r}`);for(const r of["horizontal","vertical"])ke(n?.[r],`$.gapMm.${r}`);return{margin:t,gap:n}}function xn(e){const t=e.paper===void 0||e.paper==="a4"?{widthMm:210,heightMm:297}:e.paper;W(t.widthMm,"$.paper.widthMm"),W(t.heightMm,"$.paper.heightMm");const n=W(e.columns,"$.columns",!0),r=W(e.rows,"$.rows",!0),o=n*r;if(o>1e3)throw new D("每张纸不能超过 1000 个位置","$.columns");const{margin:i,gap:c}=Cn(e),s=e.startSlot??0,a=e.offsetMm??{x:0,y:0};if(!Number.isSafeInteger(s)||s<0||s>=o)throw new D("起始位置应在首张纸的有效位置内","$.startSlot");if(!Number.isFinite(a.x)||!Number.isFinite(a.y))throw new D("校准偏移应为有限毫米值","$.offsetMm");return{paper:t,columns:n,rows:r,capacity:o,margin:i,gap:c,startSlot:s,offset:a}}function Qe(e){return 1+(e.grid?.cells.reduce((t,n)=>t+n.length+1+n.reduce((r,o)=>r+(o?.children?.reduce((i,c)=>i+Qe(c),0)??0),0),0)??0)}function Pn(e,t,n){if(!v.validateRenderPlan(e).ok)throw new D("标签计划无效","$.plan");const r=e.pages[0];if(!r)return;const{paper:o,columns:i,rows:c,margin:s,gap:a,offset:l}=n;if(s.left+l.x<0||s.top+l.y<0||s.left+l.x+i*r.pageWidthMm+(i-1)*a.horizontal+s.right>o.widthMm+1e-6||s.top+l.y+c*r.pageHeightMm+(c-1)*a.vertical+s.bottom>o.heightMm+1e-6)throw new D("标签、间距、边距及校准偏移超过纸张尺寸;不会自动缩小标签","$.paper");let m=0;for(const[p,d]of e.pages.entries()){if(se(t.signal),d.layout==="wide"||d.pageWidthMm!==r.pageWidthMm||d.pageHeightMm!==r.pageHeightMm)throw new D("拼版需要尺寸相同的固定标签页面",`$.pages.${p}`);if(m+=d.components.reduce((u,f)=>u+Qe(f),0),m>W(t.maxComponents??25e4,"$.maxComponents",!0))throw new D("拼版组件总量超过预算","$.maxComponents");for(const u of d.components)if(u.leftMm<0||u.topMm<0||u.leftMm+u.widthMm>d.pageWidthMm+1e-6||u.topMm+u.heightMm>d.pageHeightMm+1e-6)throw new D("标签内容超出标签边界",`$.pages.${p}.components`)}}function On(e,t){se(t.signal);const n=xn(t),{paper:r,columns:o,capacity:i,margin:c,gap:s,startSlot:a,offset:l}=n,m=e.pages.length?Math.ceil((a+e.pages.length)/i):0;if(m>W(t.maxSheets??1e4,"$.maxSheets",!0))throw new D("拼版纸张数量超过预算","$.maxSheets");W(t.maxComponents??25e4,"$.maxComponents",!0),Pn(e,t,n);const p=w.snapshotReportJson(e,{maxBytes:W(t.maxSnapshotBytes??64e6,"$.maxSnapshotBytes",!0),check:()=>se(t.signal),error:(u,f)=>new D(f,"$.maxSnapshotBytes")}),d=Array.from({length:m},()=>({pageWidthMm:r.widthMm,pageHeightMm:r.heightMm,components:[],meta:{labelSheet:{columns:o,rows:n.rows,slots:[]}}}));for(const[u,f]of p.pages.entries()){se(t.signal);const x=a+u,C=x%i,M=d[Math.floor(x/i)],E=c.left+l.x+C%o*(f.pageWidthMm+s.horizontal),P=c.top+l.y+Math.floor(C/o)*(f.pageHeightMm+s.vertical),G={sourcePageIndex:u,slotIndex:C,xMm:E,yMm:P,widthMm:f.pageWidthMm,heightMm:f.pageHeightMm,...f.meta?{sourceMeta:f.meta}:{}};M.meta.labelSheet.slots.push(G),M.components.push(...f.components.map(B=>({...B,leftMm:B.leftMm+E,topMm:B.topMm+P,meta:{...B.meta,labelSheet:G}})))}return{...p,pages:d}}function An(e){if(!e||!["today","yesterday","month-start","month-end"].includes(e.preset))throw new TypeError("未知日期默认值");const t=e.now instanceof Date?e.now.getTime():e.now;if(typeof t!="number"||!Number.isFinite(t)||!Number.isFinite(new Date(t).getTime()))throw new TypeError("日期默认值需要有效的业务时钟");if(typeof e.timeZone!="string"||!e.timeZone.trim())throw new TypeError("日期默认值需要显式业务时区");if(e.offsetDays!==void 0&&(!Number.isSafeInteger(e.offsetDays)||Math.abs(e.offsetDays)>3660))throw new RangeError("日期偏移应为 -3660 到 3660 的整数");const n=new Intl.DateTimeFormat("en-CA",{timeZone:e.timeZone,year:"numeric",month:"2-digit",day:"2-digit",calendar:"iso8601",numberingSystem:"latn"}).formatToParts(t),r=i=>Number(n.find(c=>c.type===i)?.value),o=new Date(0);if(o.setUTCFullYear(r("year"),r("month")-1,r("day")),o.setUTCHours(0,0,0,0),e.preset==="yesterday"&&o.setUTCDate(o.getUTCDate()-1),e.preset==="month-start"&&o.setUTCDate(1),e.preset==="month-end"&&o.setUTCMonth(o.getUTCMonth()+1,0),o.setUTCDate(o.getUTCDate()+(e.offsetDays??0)),o.getUTCFullYear()<1||o.getUTCFullYear()>9999)throw new RangeError("业务日期超出 0001–9999 范围");return o.toISOString().slice(0,10)}function $n(e,t){const n=JSON.parse(JSON.stringify(e));function r(o){if(!o||typeof o!="object")return;if(Array.isArray(o)){o.forEach(r);return}const i=o,c=i.meta?.contextKey;if(i.kind==="text"&&typeof c=="string"&&Object.prototype.hasOwnProperty.call(t,c)){const s=t[c];if(typeof s!="string")throw new TypeError("Report template context values must be strings");i.text=s,delete i.lines,delete i.rawText,delete i.richParagraphs}Object.values(i).forEach(r)}return r(n.pages),n}exports.CSS_DPI=g.CSS_DPI;exports.DEFAULT_BORDER_PT=g.DEFAULT_BORDER_PT;exports.DEFAULT_FONT_FAMILY=g.DEFAULT_FONT_FAMILY;exports.DEFAULT_FONT_PT=g.DEFAULT_FONT_PT;exports.DEFAULT_STROKE_COLOR=g.DEFAULT_STROKE_COLOR;exports.DEFAULT_TEXT_COLOR=g.DEFAULT_TEXT_COLOR;exports.LINE_HEIGHT=g.LINE_HEIGHT;exports.MM_PER_INCH=g.MM_PER_INCH;exports.PAPER_SIZES=g.PAPER_SIZES;exports.RENDER_PLAN_SCHEMA_VERSION=g.RENDER_PLAN_SCHEMA_VERSION;exports.SCHEMA_VERSION_MACH=g.SCHEMA_VERSION_MACH;exports.isImageBackedComponent=g.isImageBackedComponent;exports.isRichText=g.isRichText;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.resolveGridLayout=g.resolveGridLayout;exports.resolveLineHeight=g.resolveLineHeight;exports.resolveStroke=g.resolveStroke;exports.resolveTextColor=g.resolveTextColor;exports.round=g.round;exports.PaginateCellLimitError=U.PaginateCellLimitError;exports.PaginateChartComponentLimitError=U.PaginateChartComponentLimitError;exports.PaginatePageLimitError=U.PaginatePageLimitError;exports.ReportBindingError=U.ReportBindingError;exports.evalStyleRule=U.evalStyleRule;exports.formatValue=U.formatValue;exports.parseDateLocal=U.parseDateLocal;exports.resolveComponentBinding=U.resolveComponentBinding;exports.toExcelNumberFormat=U.toExcelNumberFormat;exports.toNumber=U.toNumber;exports.REPORT_TEMPLATE_DOCUMENT_VERSION=v.REPORT_TEMPLATE_DOCUMENT_VERSION;exports.ReportTemplateError=v.ReportTemplateError;exports.assertRenderPlan=v.assertRenderPlan;exports.createTemplateRegistry=v.createTemplateRegistry;exports.defineReportTemplate=v.defineReportTemplate;exports.inspectReportTemplateCompatibility=v.inspectReportTemplateCompatibility;exports.parseReportTemplate=v.parseReportTemplate;exports.serializeReportTemplate=v.serializeReportTemplate;exports.validateComponent=v.validateComponent;exports.validatePage=v.validatePage;exports.validateRenderPlan=v.validateRenderPlan;exports.validateReportTemplate=v.validateReportTemplate;exports.validateReportTemplateDocument=v.validateReportTemplateDocument;exports.datasetJsonSchema=ye.datasetJsonSchema;exports.validateDatasetRows=ye.validateDatasetRows;exports.charWidthEm=_.charWidthEm;exports.createCanvasMeasurer=_.createCanvasMeasurer;exports.createHeuristicMeasurer=_.createHeuristicMeasurer;exports.heuristicMeasurer=_.heuristicMeasurer;exports.measureTextMm=_.measureTextMm;exports.wrapText=_.wrapText;exports.DEFAULT_LABEL_PAGE_LIMIT=w.DEFAULT_LABEL_PAGE_LIMIT;exports.ReportCellEditError=w.ReportCellEditError;exports.ReportSourceError=w.ReportSourceError;exports.ReportValidationError=w.ReportValidationError;exports.applyReportCellEdit=w.applyReportCellEdit;exports.applyReportCellEditBatch=w.applyReportCellEditBatch;exports.applyReportEditResult=w.applyReportEditResult;exports.applyReportSourceMetadata=w.applyReportSourceMetadata;exports.assertReportValidation=w.assertReportValidation;exports.countTemplatePages=w.countTemplatePages;exports.createReportCellEdit=w.createReportCellEdit;exports.createReportCellEditBatch=w.createReportCellEditBatch;exports.createReportCellResolver=w.createReportCellResolver;exports.createReportEditSession=w.createReportEditSession;exports.createReportSource=w.createReportSource;exports.defineReport=w.defineReport;exports.estimateListLayoutCells=w.estimateListLayoutCells;exports.explainDatasetField=w.explainDatasetField;exports.formatReportCellEdit=w.formatReportCellEdit;exports.getReportCellContext=w.getReportCellContext;exports.getReportEditSession=w.getReportEditSession;exports.hasValidDataExplanation=w.hasValidDataExplanation;exports.isReportDataTarget=w.isReportDataTarget;exports.isReportValueState=w.isReportValueState;exports.paginateTemplate=w.paginateTemplate;exports.paginateTemplatePages=w.paginateTemplatePages;exports.parseReportCellInput=w.parseReportCellInput;exports.projectListColumns=w.projectListColumns;exports.registerReportEditSession=w.registerReportEditSession;exports.relocateReportCellEdits=w.relocateReportCellEdits;exports.reportCellEditKey=w.reportCellEditKey;exports.summarizeReportCellEdits=w.summarizeReportCellEdits;exports.validateReportDataset=w.validateReportDataset;exports.classOf=J.classOf;exports.collectTemplateOutline=J.collectTemplateOutline;exports.createPageViewportRenderer=J.createPageViewportRenderer;exports.inspectTemplateFieldUsage=J.inspectTemplateFieldUsage;exports.renderComponent=J.renderComponent;exports.renderPage=J.renderPage;exports.renderPlan=J.renderPlan;exports.templatePathLocation=J.templatePathLocation;exports.OutputFidelityError=H.OutputFidelityError;exports.inspectOutputCapabilities=H.inspectOutputCapabilities;exports.reportOutputDiagnostics=H.reportOutputDiagnostics;exports.OutputAssetError=ee.OutputAssetError;exports.resolvePlanAssets=ee.resolvePlanAssets;exports.ReportDataError=j.ReportDataError;exports.ReportDrillError=j.ReportDrillError;exports.compareReportData=j.compareReportData;exports.createReportDrillRequest=j.createReportDrillRequest;exports.createReportPrefill=j.createReportPrefill;exports.matchReportDrillActions=j.matchReportDrillActions;exports.reportDataSnapshotFromPlan=j.reportDataSnapshotFromPlan;exports.reportPrefillInputs=j.reportPrefillInputs;exports.resolveReportDrillReturn=j.resolveReportDrillReturn;exports.validateReportDrillActions=j.validateReportDrillActions;exports.ReportParamValidationError=A.ReportParamValidationError;exports.assertReportParams=A.assertReportParams;exports.formatReportCascaderPath=A.formatReportCascaderPath;exports.formatReportDateRange=A.formatReportDateRange;exports.formatReportNumberRange=A.formatReportNumberRange;exports.formatReportParamSelection=A.formatReportParamSelection;exports.isReportDate=A.isReportDate;exports.isReportMonth=A.isReportMonth;exports.isReportYear=A.isReportYear;exports.parseReportCascaderPath=A.parseReportCascaderPath;exports.parseReportDateRange=A.parseReportDateRange;exports.parseReportNumberRange=A.parseReportNumberRange;exports.parseReportParamSelection=A.parseReportParamSelection;exports.reportParamsJsonSchema=A.reportParamsJsonSchema;exports.validateReportParamDefinitions=A.validateReportParamDefinitions;exports.validateReportParams=A.validateReportParams;exports.compileReportPredicate=te.compileReportPredicate;exports.createReportChartData=te.createReportChartData;exports.evaluateReportPredicate=te.evaluateReportPredicate;exports.reportPredicateFields=te.reportPredicateFields;exports.validateReportChartBinding=te.validateReportChartBinding;exports.cloneReportTemplate=ne.cloneReportTemplate;exports.createLocalTemplateCatalog=ne.createLocalTemplateCatalog;exports.diffReportTemplates=ne.diffReportTemplates;exports.reviewReportTemplate=ne.reviewReportTemplate;exports.reviewReportTemplateAsync=ne.reviewReportTemplateAsync;exports.applyReportDocumentStyle=me.applyReportDocumentStyle;exports.captureTemplateFragment=me.captureTemplateFragment;exports.insertTemplateFragment=me.insertTemplateFragment;exports.inspectTemplateFragmentBindings=me.inspectTemplateFragmentBindings;exports.TreeRowLimitError=be.TreeRowLimitError;exports.createTreeTable=be.createTreeTable;exports.validateTreeOptions=be.validateTreeOptions;exports.LabelSheetError=D;exports.PageBuilder=Ve;exports.ReportCalculationError=R;exports.ReportCellFieldError=Ke;exports.ReportComponentExtensionError=h;exports.ReportTemplateMigrationError=k;exports.ReportTemplateStoreError=F;exports.TemplateBuilder=qe;exports.bindReportTemplateContext=$n;exports.calculateReportSelection=Sn;exports.columnsFromContract=Ct;exports.computePageWindow=je;exports.createCanvasPager=Tt;exports.createLabelTemplate=Ft;exports.createMemoryTemplateStore=zt;exports.createProviderReport=_t;exports.createReportComponentRegistry=Qt;exports.createTableTemplate=It;exports.createTemplate=St;exports.createTemplateManager=Bt;exports.createTemplateMigrator=We;exports.defineLabelReport=kt;exports.evaluateReportAggregateExpression=Xe;exports.formatReportClipboard=en;exports.imposeLabelSheets=On;exports.measurePageSizePx=de;exports.parseReportCellFieldInput=dn;exports.parseReportClipboard=nn;exports.planFontSizePx=gt;exports.renderPlanToCanvas=Mt;exports.renderPlanToCanvasAsync=Et;exports.renderPlanToImages=bt;exports.reportDateDefault=An;exports.resolvePaper=Ee;exports.validateReportCellFieldDefinition=Ze;
|
package/dist/index.d.cts
CHANGED
|
@@ -317,7 +317,7 @@ export declare function createPageViewportRenderer(page: PlanPage, dpi: number,
|
|
|
317
317
|
componentIndex: number;
|
|
318
318
|
rowIndex: number;
|
|
319
319
|
columnIndex: number;
|
|
320
|
-
}): boolean;
|
|
320
|
+
}, frozen?: PreviewFrozenPanes): boolean;
|
|
321
321
|
};
|
|
322
322
|
|
|
323
323
|
export declare function createProviderReport(definition: Omit<ReportDefinition, "load" | "datasets"> & {
|
|
@@ -1174,6 +1174,11 @@ export declare interface PlanTableFragment {
|
|
|
1174
1174
|
};
|
|
1175
1175
|
}
|
|
1176
1176
|
|
|
1177
|
+
declare interface PreviewFrozenPanes {
|
|
1178
|
+
frozenColumns?: number;
|
|
1179
|
+
freezeHeaders?: boolean;
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1177
1182
|
/** Hides physical columns and projects merged headers using the same geometry in every output. */
|
|
1178
1183
|
export declare function projectListColumns(list: ListComponent): ListComponent;
|
|
1179
1184
|
|
package/dist/index.d.ts
CHANGED
|
@@ -317,7 +317,7 @@ export declare function createPageViewportRenderer(page: PlanPage, dpi: number,
|
|
|
317
317
|
componentIndex: number;
|
|
318
318
|
rowIndex: number;
|
|
319
319
|
columnIndex: number;
|
|
320
|
-
}): boolean;
|
|
320
|
+
}, frozen?: PreviewFrozenPanes): boolean;
|
|
321
321
|
};
|
|
322
322
|
|
|
323
323
|
export declare function createProviderReport(definition: Omit<ReportDefinition, "load" | "datasets"> & {
|
|
@@ -1174,6 +1174,11 @@ export declare interface PlanTableFragment {
|
|
|
1174
1174
|
};
|
|
1175
1175
|
}
|
|
1176
1176
|
|
|
1177
|
+
declare interface PreviewFrozenPanes {
|
|
1178
|
+
frozenColumns?: number;
|
|
1179
|
+
freezeHeaders?: boolean;
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1177
1182
|
/** Hides physical columns and projects merged headers using the same geometry in every output. */
|
|
1178
1183
|
export declare function projectListColumns(list: ListComponent): ListComponent;
|
|
1179
1184
|
|