@agile-team/mach-report 2.11.2 → 2.13.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 +30 -5
- package/THIRD_PARTY_NOTICES.md +270 -0
- package/dist/{ExcelBindingWizard-LWX6G1A2.js → ExcelBindingWizard-CeAf4QSE.js} +2 -2
- package/dist/{ExcelBindingWizard-a4kslPHF.cjs → ExcelBindingWizard-y0mT-AHR.cjs} +1 -1
- package/dist/{ReportBatchPanel-B5ClP9tm.js → ReportBatchPanel-CW2HV9I8.js} +1 -1
- package/dist/{ReportBatchPanel-Dc-SDkYA.cjs → ReportBatchPanel-Fp1ePFag.cjs} +1 -1
- package/dist/ReportPreview-BN6fk7Wz.cjs +6 -0
- package/dist/ReportPreview-D2Jkyh1U.js +4243 -0
- package/dist/{RuleEditor-C2QsOHOs.cjs → RuleEditor-ChRzNQuF.cjs} +1 -1
- package/dist/{RuleEditor-D9wQHrkf.js → RuleEditor-DzAmW5YH.js} +1 -1
- package/dist/analytics.d.cts +28 -0
- package/dist/analytics.d.ts +28 -0
- package/dist/assets-C2U-e-Sz.cjs +4 -0
- package/dist/assets-Q0wUwNrV.js +217 -0
- package/dist/code-options-BKXXY7NI.js +18 -0
- package/dist/code-options-BUTChiZZ.cjs +1 -0
- package/dist/codes.cjs +9 -0
- package/dist/codes.d.cts +223 -0
- package/dist/codes.d.ts +223 -0
- package/dist/codes.js +26917 -0
- package/dist/config-Bb7RiIO5.cjs +1 -0
- package/dist/{config-B612mw0x.js → config-XVwG87IA.js} +4 -0
- package/dist/designer.cjs +2 -2
- package/dist/designer.d.cts +283 -0
- package/dist/designer.d.ts +283 -0
- package/dist/designer.js +2852 -2010
- package/dist/grid-strokes-Cr7DwUux.cjs +1 -0
- package/dist/grid-strokes-DyyG1q_o.js +53 -0
- package/dist/index.cjs +7 -7
- package/dist/index.d.cts +105 -1
- package/dist/index.d.ts +105 -1
- package/dist/index.js +488 -439
- package/dist/pdf.cjs +76 -59
- package/dist/pdf.d.cts +51 -0
- package/dist/pdf.d.ts +51 -0
- package/dist/pdf.js +32128 -32048
- package/dist/{plugin-Cd5G2QQn.js → plugin-D4wizDXB.js} +1 -1
- package/dist/{plugin-BDTU4D94.cjs → plugin-DzS6pxTA.cjs} +1 -1
- package/dist/record-bindings-By_UKZ2g.cjs +1 -0
- package/dist/{list-cell-ClFra1zS.js → record-bindings-D-5jQlTj.js} +67 -44
- package/dist/{region-binding-workflow-DhQvu1co.cjs → region-binding-workflow-BzfbxRiR.cjs} +1 -1
- package/dist/{region-binding-workflow-CXDmt9Bs.js → region-binding-workflow-CcUq8W2Q.js} +1 -1
- package/dist/server/node.d.cts +52 -1
- package/dist/server/node.d.ts +52 -1
- package/dist/server-node.cjs +1 -1
- package/dist/server-node.js +239 -210
- package/dist/server.cjs +1 -1
- package/dist/server.d.cts +95 -3
- package/dist/server.d.ts +95 -3
- package/dist/server.js +457 -434
- package/dist/style.css +1 -1
- package/dist/{template-registry-WNXdkiET.js → template-registry-BjE1VS6g.js} +221 -157
- package/dist/template-registry-D3SjENi6.cjs +1 -0
- package/dist/template-review-DGwWOoCv.cjs +2 -0
- package/dist/{template-review-BdcXSYbx.js → template-review-PgEe_Wr9.js} +792 -666
- package/dist/validate-BJ5HIWY8.cjs +1 -0
- package/dist/validate-DbgEM1Hh.js +163 -0
- package/dist/vue/async.d.cts +125 -2
- package/dist/vue/async.d.ts +125 -2
- package/dist/vue/index.d.cts +121 -8
- package/dist/vue/index.d.ts +121 -8
- package/dist/vue-async.cjs +1 -1
- package/dist/vue-async.js +3 -3
- package/dist/vue.cjs +1 -1
- package/dist/vue.js +5 -5
- package/dist/{workbook-session-BKOTwcoq.js → workbook-session-BPb3TMnT.js} +1 -1
- package/dist/{workbook-session-CLYLhZWu.cjs → workbook-session-DNa2RHNG.cjs} +1 -1
- package/dist/worker.cjs +1 -1
- package/dist/worker.d.cts +52 -1
- package/dist/worker.d.ts +52 -1
- package/dist/worker.js +2 -2
- package/dist/xlsx.cjs +1 -1
- package/dist/xlsx.d.cts +40 -0
- package/dist/xlsx.d.ts +40 -0
- package/dist/xlsx.js +3 -3
- package/package.json +16 -3
- package/dist/ReportPreview-DWXROHBP.cjs +0 -6
- package/dist/ReportPreview-DiNXhQI0.js +0 -4138
- package/dist/assets-Bu6UohJx.cjs +0 -1
- package/dist/assets-DegqDNqY.js +0 -160
- package/dist/config-BRoLo2oj.cjs +0 -1
- package/dist/list-cell-BuYn4tGF.cjs +0 -1
- package/dist/template-registry-ukBGlm8N.cjs +0 -1
- package/dist/template-review-BXp2oyqg.cjs +0 -1
- package/dist/textwrap-CWHyzkBH.cjs +0 -4
- package/dist/textwrap-DE1kgcJB.js +0 -110
- package/dist/validate-7s0yn6ii.js +0 -148
- package/dist/validate-DsRiNw8h.cjs +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const G=require("./matrix-DVyWiYsd.cjs"),P=require("./computed-CGV2a809.cjs"),z=require("./render-plan-7xpGrCEl.cjs"),x=require("./validate-BJ5HIWY8.cjs"),I=require("./param-validation-DCK039V1.cjs"),L=require("./tree-BX380Rr7.cjs");function R(e){return e.kind==="list"?e.id:e.nid}function q(e){return e.kind==="list"?!1:e.pageAnchor!==void 0||e.kind==="text"&&typeof e.text=="string"&&/\{(?:page|totalPages)\}/.test(e.text)}function B(e,i){const t=e.filter(n=>i.componentIds.includes(R(n)??""));if(t.filter(n=>n.kind==="list"&&n.cardinality!=="record").length&&t.length!==1)throw new Error("纵向重复区域必须独占流式分段,不能与静态或单记录区域并排");for(const n of t){const a=n.kind==="list"?n.topMm+(n.rowHeightMm??0):n.topMm+n.heightMm;if(n.topMm<i.topMm-.001||a>i.topMm+i.heightMm+.001)throw new Error("流式分段应完整包含其组件的原始纵向范围")}}function X(e,i){if(!i)return e.map(s=>({components:[s]}));const t=new Map(e.map(s=>[R(s),s]));return i.bands.map(s=>({band:s,components:s.componentIds.map(n=>{const a=t.get(n);if(!a)throw new Error(`流式区域引用不存在的组件:${n}`);return a})}))}function C(e,i){if(!i||!Array.isArray(i.bands)||!i.bands.length||i.bands.length>1e4)throw new Error("流式排版应包含 1–10000 个区域");const t=new Set,s=new Set;for(const n of e){if(q(n))continue;const a=R(n);if(!a||t.has(a))throw new Error("流式排版组件应具有唯一标识");t.add(a)}if(Y(e,i,t,s),s.size!==t.size)throw new Error("流式排版必须显式包含每个非锚点组件")}function Y(e,i,t,s){let n=-1/0;for(const a of i.bands){if(!Number.isFinite(a.topMm)||!Number.isFinite(a.heightMm)||a.topMm<0||a.heightMm<=0||a.topMm<n-.001)throw new Error("流式区域应按原始位置排序,尺寸有效且不重叠");if(!Array.isArray(a.componentIds)||!a.componentIds.length)throw new Error("流式区域不能没有组件");for(const o of a.componentIds){if(!t.has(o)||s.has(o))throw new Error(`流式区域组件缺失、重复或包含页锚点:${o}`);s.add(o)}B(e,a),n=a.topMm+a.heightMm}}const Q=new Set(["__proto__","prototype","constructor"]);function y(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function M(e){return typeof e=="string"&&!!e.trim()&&!Q.has(e)}function N(e,i,t,s){for(const n of Object.keys(e))i.includes(n)||s.push({path:`${t}.${n}`,message:"存在未知配置字段"})}function Z(e,i,t){if(e!==void 0){if(!y(e)||!["number","percent","date"].includes(String(e.kind))){t.push({path:i,message:"绑定格式应为 number、percent 或 date"});return}N(e,e.kind==="date"?["kind","pattern"]:e.kind==="number"?["kind","digits","thousands"]:["kind","digits"],i,t),e.digits!==void 0&&(!Number.isInteger(e.digits)||Number(e.digits)<0||Number(e.digits)>100)&&t.push({path:`${i}.digits`,message:"精度应为 0..100 整数"}),e.thousands!==void 0&&typeof e.thousands!="boolean"&&t.push({path:`${i}.thousands`,message:"千分位开关应为布尔值"}),e.pattern!==void 0&&typeof e.pattern!="string"&&t.push({path:`${i}.pattern`,message:"日期格式应为字符串"})}}function ee(e,i,t){const s=e.binding;if(s===void 0)return;const n=`${i}.binding`;if(!y(s)){t.push({path:n,message:"字段绑定应为对象"});return}(!["text","image","barcode","qrcode"].includes(String(e.kind))||e.grid!==void 0)&&t.push({path:n,message:"绑定仅支持独立文本、图片、条码与二维码组件"}),N(s,["field","format","prefix","suffix","emptyText"],n,t),M(s.field)||t.push({path:`${n}.field`,message:"绑定字段应为安全的非空字段名(按字面读取自有字段)"});for(const a of["prefix","suffix","emptyText"])s[a]!==void 0&&typeof s[a]!="string"&&t.push({path:`${n}.${a}`,message:"应为字符串"});Z(s.format,`${n}.format`,t),e.kind==="image"&&["format","prefix","suffix"].some(a=>s[a]!==void 0)&&t.push({path:n,message:"图片绑定直接读取 PNG/JPEG data URL,不支持文本格式或前后缀"})}function te(e,i){if(!y(e)){i.push({path:"$.repeat",message:"逐记录配置应为对象"});return}N(e,["dataset","rowKey","copies"],"$.repeat",i),M(e.dataset)||i.push({path:"$.repeat.dataset",message:"数据集应为安全的非空名称"}),e.rowKey!==void 0&&!M(e.rowKey)&&i.push({path:"$.repeat.rowKey",message:"业务主键应为安全的非空字段名"});const t=e.copies;t!==void 0&&(y(t)?(N(t,["field"],"$.repeat.copies",i),M(t.field)||i.push({path:"$.repeat.copies.field",message:"复制数字段应为安全的非空字段名"})):(!Number.isSafeInteger(t)||Number(t)<1||Number(t)>1e3)&&i.push({path:"$.repeat.copies",message:"每条记录复制数应为 1..1000 整数"}))}function V(e,i,t,s){if(!y(e))return;ee(e,i,s),e.binding!==void 0&&!t&&s.push({path:`${i}.binding`,message:"字段绑定需要模板 repeat 数据集;普通报表请使用列表字段"}),t&&e.kind==="list"&&s.push({path:i,message:"逐记录标签使用固定组件;动态列表请使用普通报表模板"});const n=e.grid;y(n)&&Array.isArray(n.cells)&&n.cells.forEach((a,o)=>{Array.isArray(a)&&a.forEach((f,r)=>{y(f)&&Array.isArray(f.children)&&f.children.forEach((d,h)=>V(d,`${i}.grid.cells.${o}.${r}.children.${h}`,t,s))})})}function D(e,i){const t=e.repeat!==void 0;t&&te(e.repeat,i),Array.isArray(e.pages)&&e.pages.forEach((s,n)=>{if(!y(s))return;const a=`$.pages.${n}`;t&&(s.layout==="wide"||s.flow!==void 0)&&i.push({path:a,message:"逐记录标签仅支持固定尺寸页面,不支持宽表或流式分区"}),Array.isArray(s.components)&&s.components.forEach((o,f)=>{const r=`${a}.components.${f}`;if(V(o,r,t,i),!t||!y(o))return;const{leftMm:d,topMm:h,widthMm:g,heightMm:p}=o;[d,h,g,p,s.widthMm,s.heightMm].every(b=>typeof b=="number"&&Number.isFinite(b))&&(Number(d)<0||Number(h)<0||Number(d)+Number(g)>Number(s.widthMm)+.001||Number(h)+Number(p)>Number(s.heightMm)+.001)&&i.push({path:r,message:"标签组件超出纸张边界,请调整位置或尺寸"})})})}function J(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function v(e,i,t){if(e!==void 0){if(!J(e)){t.push({path:i,message:"条件应为对象"});return}(typeof e.field!="string"||!e.field.trim())&&t.push({path:`${i}.field`,message:"条件需要字段"}),e.numeric!==void 0&&e.numeric!=="number"&&e.numeric!=="decimal"&&t.push({path:`${i}.numeric`,message:"未知条件数值模式"}),[">",">=","<","<=","==","!="].includes(e.op)||t.push({path:`${i}.op`,message:"未知条件运算符"}),typeof e.value!="string"&&!(typeof e.value=="number"&&Number.isFinite(e.value))&&t.push({path:`${i}.value`,message:"条件值应为字符串或有限数字"})}}function j(e,i,t){if(e===void 0)return;if(!Array.isArray(e)||e.length>2048){t.push({path:i,message:"聚合应为数组且最多 2048 项"});return}const s=new Set;e.forEach((n,a)=>{const o=`${i}.${a}`;if(!J(n)){t.push({path:o,message:"聚合应为对象"});return}const f=n.field;typeof f!="string"||!f.trim()||s.has(f)?t.push({path:`${o}.field`,message:"聚合输出字段应非空且唯一"}):s.add(f),n.numeric!==void 0&&n.numeric!=="number"&&n.numeric!=="decimal"&&t.push({path:`${o}.numeric`,message:"数值模式应为 number 或 decimal"}),n.digits!==void 0&&(!Number.isInteger(n.digits)||Number(n.digits)<0||Number(n.digits)>100)&&t.push({path:`${o}.digits`,message:"小数位应为 0–100 的整数"});try{P.createAggregateAccumulator({...n,field:n.valueField??f})}catch(r){t.push({path:o,message:r instanceof Error?r.message:String(r)})}})}function ie(e,i,t){if(e===void 0)return;const s=P.validateComputedFields(e);for(const n of s.errors)t.push({path:i,message:n})}function se(e,i,t){if(e!==void 0)try{G.validateMatrixOptions(e)}catch(s){t.push({path:i,message:s instanceof Error?s.message:String(s)})}}function ne(e,i,t){if(e.tree===void 0)return;const s=`${i}.tree`;try{L.validateTreeOptions(e.tree);const n=e.tree;if(e.matrix||e.detail||e.groupBy||Array.isArray(e.groups)&&e.groups.length||e.rowVisibleWhen)throw new Error("树形布局不能同时配置普通分组、矩阵、主从或行可见条件");if(e.rowKey!==void 0&&e.rowKey!==n.idField)throw new Error("树形 rowKey 应与 idField 一致");if(!Array.isArray(e.columns)||!e.columns.some(a=>a&&a.field===n.labelField&&!a.hidden))throw new Error("树形布局需要可见的标签列");Array.isArray(e.computed)&&L.validateTreeComputed(n,e.computed)}catch(n){t.push({path:s,message:n instanceof Error?n.message:String(n)})}}const T="1.0";class A extends Error{constructor(i){super(`模板校验失败:${i.slice(0,3).map(t=>`${t.path}: ${t.message}`).join("; ")}`),this.errors=i,this.name="ReportTemplateError"}}const ae=new Set(["__proto__","prototype","constructor"]),oe=new Set(["schemaVersion","id","name","revision","description","template"]),fe=new Set(["left","center","right","justify"]),E=2e5,re=64,O=1e7;function m(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function de(e,i,t){const s=Object.getPrototypeOf(e),n=Array.isArray(e);if(n?s!==Array.prototype:s!==Object.prototype&&s!==null)return t.push({path:i,message:"模板对象必须使用普通 JSON 对象原型"}),!1;if(n){const a=Object.keys(e);if(a.length!==e.length||a.some(o=>!/^(0|[1-9]\d*)$/.test(o)||Number(o)>=e.length))return t.push({path:i,message:"模板数组不能包含空位或额外属性"}),!1}return Object.getOwnPropertySymbols(e).length>0?(t.push({path:i,message:"模板不能包含 Symbol 键"}),!1):!0}function he(e,i,t,s){return ae.has(e)?(s.push({path:t,message:"模板不能包含可能污染原型的键"}),!1):i.get||i.set||!i.enumerable?(s.push({path:t,message:"模板不能包含访问器或不可枚举字段"}),!1):!0}function me(e){return e===null||typeof e=="boolean"||typeof e=="number"&&Number.isFinite(e)}function F(e,i){const t=new Set;let s=0,n=0,a=!1;const o=(f,r,d)=>{if(!a){if(++s>E){s===E+1&&i.push({path:r,message:"模板超过 JSON 节点安全上限"});return}if(d>re){i.push({path:r,message:"模板嵌套层级过深"});return}if(typeof f=="string"){n+=f.length,n>O&&(a=!0,i.push({path:r,message:"模板文本超过 1000 万字符的安全上限"}));return}if(!me(f)){if(!f||typeof f!="object"){i.push({path:r,message:"模板只允许 JSON 值,不允许函数、undefined 或非有限数字"});return}if(t.has(f)){i.push({path:r,message:"模板不能包含循环引用"});return}if(de(f,r,i)){t.add(f);for(const[h,g]of Object.entries(Object.getOwnPropertyDescriptors(f))){if(Array.isArray(f)&&h==="length")continue;const p=`${r}.${h}`;if(he(h,g,p,i)&&o(g.value,p,d+1),s>E||a)break}t.delete(f)}}}};o(e,"$",0)}function u(e,i,t,s,n=!1){const a=e[i];a===void 0&&!n||(typeof a!="string"||n&&!a.trim())&&s.push({path:`${t}.${i}`,message:n?"应为非空字符串":"应为字符串"})}function c(e,i,t,s,n=0,a=!1){const o=e[i];o===void 0&&!a||(typeof o!="number"||!Number.isFinite(o)||o<n)&&s.push({path:`${t}.${i}`,message:`应为大于等于 ${n} 的有限数字`})}function $(e,i,t,s){e[i]!==void 0&&typeof e[i]!="boolean"&&s.push({path:`${t}.${i}`,message:"应为布尔值"})}function w(e,i,t,s=!1){e!==void 0&&!fe.has(e)&&!(s&&e==="auto")&&t.push({path:i,message:`未知对齐方式${s?"(支持 auto)":""}`})}function l(e,i,t){if(e!==void 0){if(!m(e)){t.push({path:i,message:"样式应为对象"});return}w(e.align,`${i}.align`,t),e.verticalAlign!==void 0&&!["top","middle","bottom"].includes(e.verticalAlign)&&t.push({path:`${i}.verticalAlign`,message:"未知垂直对齐方式"});for(const s of["fontSize","fontSizePx","lineWidthPt","lineHeight"])c(e,s,i,t);for(const s of["letterSpacing","rotateDeg"])c(e,s,i,t,-1/0);c(e,"opacity",i,t),typeof e.opacity=="number"&&e.opacity>1&&t.push({path:`${i}.opacity`,message:"透明度不能大于 1"});for(const s of["bold","italic","underline","borderTop","borderRight","borderBottom","borderLeft"])$(e,s,i,t);for(const s of["fontFamily","color","backgroundColor","lineColor","borderColor"])u(e,s,i,t)}}function ue(e,i,t){if(e===void 0)return;if(!Array.isArray(e)){t.push({path:i,message:"参数定义应为数组"});return}const s=new Set,n=t.length;e.forEach((a,o)=>{const f=`${i}.${o}`;if(!m(a)){t.push({path:f,message:"参数定义应为对象"});return}u(a,"field",f,t,!0),typeof a.field=="string"&&(s.has(a.field)&&t.push({path:`${f}.field`,message:"参数名重复"}),s.add(a.field)),a.type!==void 0&&!["text","number","date","month","year","dateRange","select"].includes(a.type)&&t.push({path:`${f}.type`,message:"未知参数类型"});for(const r of["label","defaultValue","placeholder"])u(a,r,f,t);$(a,"required",f,t);for(const r of["minLength","maxLength"]){const d=a[r];d!==void 0&&(typeof d!="number"||!Number.isSafeInteger(d)||d<0)&&t.push({path:`${f}.${r}`,message:"长度边界应为非负整数"})}ce(a,f,t),a.options!==void 0&&(Array.isArray(a.options)?a.options.forEach((r,d)=>{const h=`${f}.options.${d}`;if(!m(r))t.push({path:h,message:"选项应为对象"});else for(const g of["label","value"])typeof r[g]!="string"&&t.push({path:`${h}.${g}`,message:"选项标签与值应为字符串(允许空白选项)"})}):t.push({path:`${f}.options`,message:"选项应为数组"}))}),t.length===n&&t.push(...I.validateReportParamDefinitions(e).map(a=>({path:a.path.replace("$.paramDefs",i),message:a.message})))}function ce(e,i,t){for(const a of["min","max"]){const o=e[a];if(o===void 0)continue;I.isReportTemporalBound(e.type,o)||e.type==="number"&&typeof o=="number"&&Number.isFinite(o)||t.push({path:`${i}.${a}`,message:"数字使用有限数字边界,日期/月/年使用对应规范字符串边界"})}const s=typeof e.min=="number"&&typeof e.max=="number"&&e.min>e.max,n=typeof e.min=="string"&&typeof e.max=="string"&&e.min>e.max;(s||n)&&t.push({path:i,message:"最小边界不能大于最大边界"}),typeof e.minLength=="number"&&typeof e.maxLength=="number"&&e.minLength>e.maxLength&&t.push({path:i,message:"最小长度不能大于最大长度"})}function H(e,i,t){if(!Array.isArray(e)||e.length===0){t.push({path:i,message:"列表至少需要一列"});return}e.every(s=>m(s)&&s.hidden===!0)&&t.push({path:i,message:"列表至少需要一列可见列"}),e.forEach((s,n)=>{const a=`${i}.${n}`;if(!m(s)){t.push({path:a,message:"列应为对象"});return}if(x.validateEditableMetadata(s,a,t),$(s,"hidden",a,t),v(s.visibleWhen,`${a}.visibleWhen`,t),typeof s.header!="string"&&t.push({path:`${a}.header`,message:"表头应为字符串(允许空白表头)"}),u(s,"field",a,t,!0),c(s,"widthMm",a,t,Number.MIN_VALUE,!0),l(s.style,`${a}.style`,t),l(s.headerStyle,`${a}.headerStyle`,t),w(s.align,`${a}.align`,t,!0),w(s.headerAlign,`${a}.headerAlign`,t),s.semanticRole!==void 0&&!["identifier","dimension","measure","date","text"].includes(s.semanticRole)&&t.push({path:`${a}.semanticRole`,message:"未知列语义"}),s.format!==void 0)if(!m(s.format)||!["number","percent","date"].includes(s.format.kind))t.push({path:`${a}.format`,message:"未知列格式"});else{const o=s.format.digits;o!==void 0&&(typeof o!="number"||!Number.isInteger(o)||o<0||o>100)&&t.push({path:`${a}.format.digits`,message:"小数位应为 0–100 的整数"}),$(s.format,"thousands",`${a}.format`,t),u(s.format,"pattern",`${a}.format`,t)}s.rules!==void 0&&(Array.isArray(s.rules)?s.rules.forEach((o,f)=>{const r=`${a}.rules.${f}`;if(!m(o)||!m(o.when)){t.push({path:r,message:"条件格式缺少 when 对象"});return}v(o.when,`${r}.when`,t),u(o.when,"field",`${r}.when`,t,!0),[">",">=","<","<=","==","!="].includes(o.when.op)||t.push({path:`${r}.when.op`,message:"未知条件运算符"}),typeof o.when.value!="number"&&typeof o.when.value!="string"&&t.push({path:`${r}.when.value`,message:"条件值应为数字或字符串"}),l(o.style,`${r}.style`,t)}):t.push({path:`${a}.rules`,message:"条件格式应为数组"}))})}function K(e,i,t){if(e!==void 0){if(!m(e)){t.push({path:i,message:"分组应为对象"});return}u(e,"field",i,t,!0);for(const s of["headerTemplate","subtotalLabel"])u(e,s,i,t);for(const s of["headerStyle","subtotalStyle"])l(e[s],`${i}.${s}`,t);$(e,"keepWithNext",i,t),$(e,"repeatHeader",i,t),j(e.aggregates,`${i}.aggregates`,t),e.subtotal!==void 0&&(!Array.isArray(e.subtotal)||e.subtotal.some(s=>typeof s!="string"))&&t.push({path:`${i}.subtotal`,message:"小计字段应为字符串数组"})}}function ge(e,i,t){if(!(e===void 0||typeof e=="boolean")){if(!m(e)){t.push({path:i,message:"合计应为布尔值或对象"});return}u(e,"label",i,t),j(e.aggregates,`${i}.aggregates`,t),l(e.style,`${i}.style`,t),e.fields!==void 0&&(!Array.isArray(e.fields)||e.fields.some(s=>typeof s!="string"))&&t.push({path:`${i}.fields`,message:"合计字段应为字符串数组"})}}function pe(e,i,t,s){const n={kind:"rect",leftMm:0,topMm:0,widthMm:1,heightMm:1,grid:e};if(x.validateComponent(n,t,s,[]),_(n,t,s),!m(e)||!Array.isArray(e.cells))return;const a=e.cells,o=Array.isArray(i)?i.length:0;if(a.length*o>E){s.push({path:t,message:"表头逻辑网格超过 20 万格安全上限"});return}e.cells.length||s.push({path:`${t}.cells`,message:"表头至少需要一行"}),Array.isArray(e.colWidthsMm)&&e.colWidthsMm.length!==o&&s.push({path:`${t}.colWidthsMm`,message:"表头列宽数量应与列表列数一致"}),Array.isArray(e.rowHeightsMm)&&e.rowHeightsMm.length!==e.cells.length&&s.push({path:`${t}.rowHeightsMm`,message:"表头行高数量应与行数一致"}),ye(a,o,t,s)}function ye(e,i,t,s){const n=new Set;e.forEach((a,o)=>{if(!Array.isArray(a))return;let f=0;a.forEach((r,d)=>{for(;n.has(`${o}:${f}`);)f++;const h=m(r)&&typeof r.colSpan=="number"?r.colSpan:1,g=m(r)&&typeof r.rowSpan=="number"?r.rowSpan:1;(f+h>i||o+g>e.length)&&s.push({path:`${t}.cells.${o}.${d}`,message:"表头合并区域超出表头边界"});for(let p=o;p<Math.min(e.length,o+g);p++)for(let b=f;b<Math.min(i,f+h);b++)n.has(`${p}:${b}`)&&s.push({path:`${t}.cells.${o}.${d}`,message:"表头合并区域重叠"}),n.add(`${p}:${b}`);f+=h})})}function le(e,i,t){if(ne(e,i,t),ie(e.computed,`${i}.computed`,t),se(e.matrix,`${i}.matrix`,t),e.matrix&&(e.detail||e.groupBy||Array.isArray(e.groups)&&e.groups.length||e.grandTotal)&&t.push({path:`${i}.matrix`,message:"矩阵请使用自身 totals 汇总,不能同时配置普通分组、总计或主从明细"}),v(e.rowVisibleWhen,`${i}.rowVisibleWhen`,t),e.groups!==void 0&&(!Array.isArray(e.groups)||e.groups.length>16?t.push({path:`${i}.groups`,message:"分组应为数组,最多 16 级"}):e.groups.forEach((a,o)=>K(a,`${i}.groups.${o}`,t))),e.detail===void 0)return;const s=e.detail,n=`${i}.detail`;if(!m(s)){t.push({path:n,message:"主从关联应为对象"});return}for(const a of["dataset","parentKey","foreignKey"])u(s,a,n,t,!0);for(const a of["rowKey","revisionField","sourceTokenField"])u(s,a,n,t,s[a]!==void 0);u(s,"label",n,t),$(s,"header",n,t),c(s,"rowHeightMm",n,t,Number.MIN_VALUE),H(s.columns,`${n}.columns`,t),s.unmatched!==void 0&&s.unmatched!=="error"&&s.unmatched!=="ignore"&&t.push({path:`${n}.unmatched`,message:"未关联明细策略应为 error 或 ignore"})}function $e(e,i,t){for(const s of["leftMm","topMm"])c(e,s,i,t,-1/0,!0);c(e,"widthMm",i,t,Number.MIN_VALUE,!0),u(e,"dataset",i,t,!0),u(e,"title",i,t);for(const s of["rowKey","revisionField","sourceTokenField"])u(e,s,i,t,e[s]!==void 0);e.headerGrid!==void 0&&pe(e.headerGrid,e.columns,`${i}.headerGrid`,t),e.layout!==void 0&&e.layout!=="page"&&e.layout!=="wide"&&t.push({path:`${i}.layout`,message:"布局应为 page 或 wide"}),H(e.columns,`${i}.columns`,t);for(const s of["fontSizePt","rowHeightMm"])c(e,s,i,t,Number.MIN_VALUE);c(e,"paddingMm",i,t);for(const s of["header","headerBold","headerEveryPage","border"])$(e,s,i,t);e.cardinality!==void 0&&e.cardinality!=="record"&&t.push({path:`${i}.cardinality`,message:"单记录区域类型应为 record"}),u(e,"headerBackgroundColor",i,t),w(e.align,`${i}.align`,t,!0),w(e.headerAlign,`${i}.headerAlign`,t),l(e.headerStyle,`${i}.headerStyle`,t),le(e,i,t),K(e.groupBy,`${i}.groupBy`,t),ge(e.grandTotal,`${i}.grandTotal`,t)}function _(e,i,t){l(e.style,`${i}.style`,t);for(const n of["text","rawText","imageData","fallbackText","nid","rkey"])u(e,n,i,t);if(e.lines!==void 0&&(!Array.isArray(e.lines)||e.lines.some(n=>typeof n!="string"))&&t.push({path:`${i}.lines`,message:"文本行应为字符串数组"}),Array.isArray(e.richParagraphs)&&e.richParagraphs.forEach((n,a)=>{if(!m(n))return;const o=`${i}.richParagraphs.${a}`;w(n.align,`${o}.align`,t);for(const f of["lineHeight","spaceBeforeMm","spaceAfterMm","indentMm"])c(n,f,o,t);Array.isArray(n.segments)&&n.segments.forEach((f,r)=>{const d=`${o}.segments.${r}`;if(!m(f)){t.push({path:d,message:"富文本片段应为对象"});return}f.kind!==void 0&&f.kind!=="text"&&f.kind!=="field"&&t.push({path:`${d}.kind`,message:"未知富文本片段类型"});for(const h of["text","field"])u(f,h,d,t);l(f.style,`${d}.style`,t)})}),!m(e.grid))return;const s=e.grid;c(s,"gapMm",`${i}.grid`,t),c(s,"paddingMm",`${i}.grid`,t);for(const n of["colWidthsMm","rowHeightsMm"]){const a=s[n];a!==void 0&&(!Array.isArray(a)||a.some(o=>typeof o!="number"||!Number.isFinite(o)||o<0))&&t.push({path:`${i}.grid.${n}`,message:"网格尺寸应为有限非负数字数组"})}Array.isArray(s.cells)&&s.cells.forEach((n,a)=>{Array.isArray(n)&&n.forEach((o,f)=>{const r=`${i}.grid.cells.${a}.${f}`;if(o!==null){if(!m(o)){t.push({path:r,message:"网格单元格应为对象或 null"});return}for(const d of["text","rawText","numberFormat"])u(o,d,r,t);for(const d of["colSpan","rowSpan"]){const h=o[d];h!==void 0&&(typeof h!="number"||!Number.isInteger(h)||h<=0)&&t.push({path:`${r}.${d}`,message:"跨度应为正整数"})}o.value!==void 0&&o.value!==null&&!["string","number","boolean"].includes(typeof o.value)&&t.push({path:`${r}.value`,message:"Excel 原始值应为字符串、数字、布尔值或 null"}),l(o.style,`${r}.style`,t),o.children!==void 0&&(Array.isArray(o.children)?o.children.forEach((d,h)=>{m(d)&&_(d,`${r}.children.${h}`,t)}):t.push({path:`${r}.children`,message:"嵌套组件应为数组"}))}})})}function be(e,i,t){if(!(e.flow===void 0||!Array.isArray(e.components)))try{C(e.components,e.flow)}catch(s){t.push({path:`${i}.flow`,message:s instanceof Error?s.message:String(s)})}}function U(e){const i=[],t=[];return F(e,i),i.length?{ok:!1,errors:i,warnings:t}:(m(e)?(e.schemaVersion!==void 0&&e.schemaVersion!==z.RENDER_PLAN_SCHEMA_VERSION&&i.push({path:"$.schemaVersion",message:"不支持的模板 schemaVersion"}),ue(e.params,"$.params",i),D(e,i),!Array.isArray(e.pages)||e.pages.length===0?i.push({path:"$.pages",message:"模板至少需要一页"}):e.pages.forEach((s,n)=>{const a=`$.pages.${n}`;if(!m(s)){i.push({path:a,message:"页应为对象"});return}c(s,"widthMm",a,i,Number.MIN_VALUE,!0),c(s,"heightMm",a,i,Number.MIN_VALUE,!0),s.layout!==void 0&&s.layout!=="page"&&s.layout!=="wide"&&i.push({path:`${a}.layout`,message:"布局应为 page 或 wide"}),typeof s.heightMm=="number"&&s.heightMm>=5e3&&i.push({path:`${a}.heightMm`,message:"页高应小于 5000mm"});for(const o of["marginTopMm","marginBottomMm","marginLeftMm","marginRightMm"])c(s,o,a,i);typeof s.widthMm=="number"&&Number(s.marginLeftMm??0)+Number(s.marginRightMm??0)>=s.widthMm&&i.push({path:a,message:"横向页边距占满页面"}),typeof s.heightMm=="number"&&Number(s.marginTopMm??0)+Number(s.marginBottomMm??0)>=s.heightMm&&i.push({path:a,message:"纵向页边距占满页面"}),Array.isArray(s.components)?s.components.forEach((o,f)=>{const r=`${a}.components.${f}`;m(o)&&o.kind==="list"?$e(o,r,i):(x.validateComponent(o,r,i,t),m(o)&&_(o,r,i))}):i.push({path:`${a}.components`,message:"组件应为数组"}),be(s,a,i)})):i.push({path:"$",message:"模板应为对象"}),{ok:i.length===0,errors:i,warnings:t})}function W(e){const i=[],t=[];if(F(e,i),i.length)return{ok:!1,errors:i,warnings:t};if(!m(e))i.push({path:"$",message:"模板文档应为对象"});else{for(const n of Object.keys(e))oe.has(n)||i.push({path:`$.${n}`,message:"模板文档存在未知字段;只保存模板与描述,不保存取数或业务数据"});e.schemaVersion!==T&&i.push({path:"$.schemaVersion",message:"不支持的模板文档版本"});for(const n of["id","name"])u(e,n,"$",i,!0);for(const n of["revision","description"])u(e,n,"$",i);const s=U(e.template);i.push(...s.errors.map(n=>({...n,path:`$.template${n.path.slice(1)}`}))),t.push(...s.warnings.map(n=>({...n,path:`$.template${n.path.slice(1)}`})))}return{ok:i.length===0,errors:i,warnings:t}}function k(e){const i=W(e);if(!i.ok)throw new A(i.errors)}function Ae(e){const i=[];if(F(e,i),i.length)throw new A(i);const t={...e,schemaVersion:e.schemaVersion??T};return k(t),S(t)}function we(e){let i=e;if(typeof e=="string"){if(e.length>O)throw new A([{path:"$",message:"模板 JSON 超过 1000 万字符的导出/导入上限"}]);try{i=JSON.parse(e)}catch{throw new A([{path:"$",message:"模板 JSON 语法无效"}])}}return k(i),S(i)}function Me(e){k(e);const i=JSON.stringify(e,null,2);if(i.length>O)throw new A([{path:"$",message:"模板 JSON 超过 1000 万字符的导出/导入上限"}]);return i}function S(e){return JSON.parse(JSON.stringify(e))}function Ee(e=[]){const i=new Map,t={get:s=>{const n=i.get(s);return n?S(n):void 0},list:()=>Array.from(i.values(),({template:s,...n})=>({...n})),register:(s,n={})=>{if(k(s),i.has(s.id)&&!n.replace)throw new A([{path:"$.id",message:`模板 ID ${s.id} 已注册;更新需显式 replace:true`}]);i.set(s.id,S(s))},remove:s=>i.delete(s)};for(const s of e)t.register(s);return t}exports.REPORT_TEMPLATE_DOCUMENT_VERSION=T;exports.ReportTemplateError=A;exports.createTemplateRegistry=Ee;exports.defineReportTemplate=Ae;exports.parseReportTemplate=we;exports.reportFlowGroups=X;exports.serializeReportTemplate=Me;exports.validateReportPageFlow=C;exports.validateReportTemplate=U;exports.validateReportTemplateDocument=W;exports.validateTemplateRepeat=D;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const re=require("./render-plan-7xpGrCEl.cjs"),je=require("./validate-BJ5HIWY8.cjs"),$t=require("./report-params-SJfhKgaX.cjs"),N=require("./template-registry-D3SjENi6.cjs"),ge=require("./param-validation-DCK039V1.cjs"),be=require("./grid-geometry-CZ_cYB6O.cjs"),Be=require("./number-format-CZ2T_5kF.cjs"),xt=require("./task-events-DQ276fn2.cjs"),ve=require("./dataset-BkRmwgeJ.cjs"),_=require("./defaults-xhmcLLrf.cjs"),G=require("./assets-C2U-e-Sz.cjs"),$=require("./record-bindings-By_UKZ2g.cjs"),Me=require("./computed-CGV2a809.cjs"),He=require("./matrix-DVyWiYsd.cjs"),ne=require("./tree-BX380Rr7.cjs"),F=require("./style-UgIJSA1F.cjs"),St=require("./capabilities-CsZ-pNHR.cjs");function Rt(e,t,r){const n=new Set,o=e.cells.map((a,s)=>{const l=[];let i=0;for(const c of a){for(;n.has(`${s}:${i}`);)i++;const d=c?.colSpan??1,u=c?.rowSpan??1;let f=0;for(let m=i;m<i+d;m++){t.has(m)&&f++;for(let p=s+1;p<s+u;p++)n.add(`${p}:${m}`)}f&&l.push(c?{...c,colSpan:f}:null),i+=d}return l});return{...e,cells:o,colWidthsMm:r}}function De(e){if(!e.columns.some(n=>n.hidden))return e;const t=new Set,r=e.columns.filter((n,o)=>n.hidden?!1:(t.add(o),!0));if(!r.length)throw new Error("列表至少需要一列可见列");return{...e,columns:r,...e.headerGrid?{headerGrid:Rt(e.headerGrid,t,r.map(n=>n.widthMm))}:{}}}function*Et(e){const{page:t}=e;N.validateReportPageFlow(t.components,t.flow);let r=0,n=0;for(const o of N.reportFlowGroups(t.components,t.flow)){e.active();const a=o.band,s=o.components.some(d=>d.kind==="list"&&d.cardinality!=="record"),l=s?0:o.components.reduce((d,u)=>Math.max(d,u.topMm-a.topMm+(u.kind==="list"?e.height(u):u.heightMm)),a.heightMm);let i=Math.max(e.top(),n+a.topMm-r);if(!s&&l>e.bottom()-e.top()+.001)throw new Error(`静态区域 ${a.componentIds.join(",")} 高度超出单页可用范围`);!s&&i+l>e.bottom()+.001&&(e.nextPage(),yield*e.takePages(),e.active(),i=e.top());let c=i+l;for(const d of o.components){const u=i+d.topMm-a.topMm;d.kind==="list"?(yield*e.list(d,u,f=>{c=s?f:Math.max(c,f)}),e.active()):e.append({...d,topMm:u})}n=c,r=a.topMm+a.heightMm}}function Tt(e){return!!(e.computed?.length||e.groups?.length||e.groupBy||e.grandTotal||e.rowVisibleWhen||e.matrix||e.tree||e.detail||e.columns.some(t=>t.rules?.length||t.visibleWhen))}function oe(e){return e.pages.some(t=>t.components.some(r=>r.kind==="list"&&Tt(r)))}const Pt=512,ke=256*1024;function It(){const e=new Map;let t=0,r;return(n,o,a,s)=>{s!==r&&(e.clear(),t=0,r=s);const l=JSON.stringify([n,o,a.fontSizePt,a.fontFamily,a.bold,a.italic,a.letterSpacingPt]),i=e.get(l);if(i)return e.delete(l),e.set(l,i),i.lines.slice();const c=G.wrapText(n,o,a,s),d=l.length+c.reduce((u,f)=>u+f.length,0);if(d<=ke){for(;e.size>=Pt||t+d>ke;){const u=e.keys().next().value;t-=e.get(u).units,e.delete(u)}e.set(l,{lines:c.slice(),units:d}),t+=d}return c}}class j extends Error{constructor(t,r){super(`报表页数超出上限 ${t}(至少 ${r} 页)`),this.limit=t,this.actual=r,this.code="page-limit",this.name="PaginatePageLimitError"}}class W extends Error{constructor(t,r){super(`报表单元格数量超出上限 ${t}(至少 ${r} 格)`),this.limit=t,this.actual=r,this.code="cell-limit",this.name="PaginateCellLimitError"}}const We=1e4,Fe=25e4;function $e(e){if(e?.aborted)throw e.reason??new DOMException("标签生成已取消","AbortError")}function Ve(e,t,r){const n=typeof e.copies=="object"?$.readRecordScalar(t,e.copies.field,r):e.copies??1;if(typeof n!="number"||!Number.isSafeInteger(n)||n<1||n>1e3)throw new $.ReportBindingError(`$.datasets.${r.dataset}[${r.rowIndex}]`,"每条记录复制数必须是 1..1000 的数值型整数",r.rowIndex,typeof e.copies=="object"?e.copies.field:void 0);return n}function Ge(e,t,r){if(e.rowKey===void 0)return;const n=$.readRecordScalar(t,e.rowKey,r);if(typeof n=="string"&&n.trim()||typeof n=="number"&&Number.isFinite(n))return n;throw new $.ReportBindingError(`$.datasets.${r.dataset}[${r.rowIndex}].${e.rowKey}`,"业务主键必须是非空字符串或有限数字",r.rowIndex,e.rowKey)}function Ct(e){const t=r=>1+(r.grid?.cells.reduce((n,o)=>n+1+o.length+o.reduce((a,s)=>a+(s?.children?.reduce((l,i)=>l+t(i),0)??0),0),0)??0);return e.pages.reduce((r,n)=>r+n.components.reduce((o,a)=>o+t(a),0),0)}function kt(e,t,r){const n=e.repeat,o=Object.prototype.hasOwnProperty.call(t,n.dataset)?t[n.dataset]:void 0;if(!Array.isArray(o))throw new $.ReportBindingError(`$.datasets.${n.dataset}`,"逐记录标签数据集缺失,应提供对象数组(允许空数组)");const a=new Set,s=r.maxPages??We,l=Ct(e);let i=0,c=0;for(const[d,u]of o.entries()){if($e(r.signal),!u||typeof u!="object"||Array.isArray(u))throw new $.ReportBindingError(`$.datasets.${n.dataset}[${d}]`,"标签记录应为对象",d);const f={rowIndex:d,dataset:n.dataset},m=Ge(n,u,f);if(m!==void 0){const g=JSON.stringify([typeof m,m]);if(a.has(g))throw new $.ReportBindingError(`$.datasets.${n.dataset}[${d}].${n.rowKey}`,"业务主键重复;请先确认记录来源,避免重复打印标签",d,n.rowKey);a.add(g)}const p=Ve(n,u,f);if(i+=p*e.pages.length,c+=p*l,i>s)throw new j(s,i);if(c>Fe)throw new $.ReportBindingError("$.repeat",`标签组件总量(含网格行、槽位及嵌套组件)超过安全预算 ${Fe},请分批生成`,d)}return o}function Ft(e,t,r){if(!e.binding)return e;const{binding:n,...o}=e,a=$.resolveComponentBinding(n,t.row,t);if(e.kind==="image"){if(!a)return;if(!$.isLabelImageData(a))throw new $.ReportBindingError(`${r}.binding`,"图片字段只接受 PNG/JPEG base64 data URL;业务 URL 应由宿主安全加载后转换",t.rowIndex,n.field);return{...o,imageData:a}}return e.kind==="barcode"||e.kind==="qrcode"?(delete o.imageData,{...o,code:{...o.code,value:a},fallbackText:a}):(delete o.lines,delete o.richParagraphs,{...o,text:a})}function At(e,t,r){if(e.kind!=="text"||e.grid||e.richParagraphs?.length)return e;const n=e.style??{},o=F.resolveFontSize(n).fontSizePt,a=e.text??e.lines?.join(`
|
|
2
|
+
`)??"";if(a.length>16384)throw new $.ReportBindingError(r,"标签文本超过 16384 字符预算,请缩小字段内容",t.rowIndex);const s=t.wrapText(a,e.widthMm,{fontSizePt:o,bold:n.bold,italic:n.italic,fontFamily:n.fontFamily,letterSpacingPt:n.letterSpacing},t.options.measurer??G.heuristicMeasurer),l=s.length*o*F.resolveLineHeight(n)*25.4/72;if(l>e.heightMm+.05)throw new $.ReportBindingError(r,`标签文字需要约 ${l.toFixed(2)}mm 高,超出 ${e.heightMm}mm;请增大文本区域、减少内容或调整字号`,t.rowIndex,e.binding?.field);return{...e,lines:s}}function qe(e,t,r){$e(t.options.signal);const n=Ft(e,t,r);if(!n)return;let o=n.grid;return o&&(o={...o,cells:o.cells.map((a,s)=>a.map((l,i)=>l?.children?.length?{...l,children:l.children.flatMap((c,d)=>{const u=qe(c,t,`${r}.grid.cells.${s}.${i}.children.${d}`);return u?[u]:[]})}:l))}),At(o===n.grid?n:{...n,grid:o},t,r)}function Ot(e,t,r,n,o,a){return{...e,components:e.components.flatMap((s,l)=>{const i=qe(s,r,`$.pages.${t}.components.${l}`);return i?[{...i,meta:{...i.meta,labelSource:{pageIndex:t,componentIndex:l}}}]:[]}),meta:{...e.meta,record:{dataset:r.dataset,rowIndex:r.rowIndex,...a===void 0?{}:{rowKey:a},copyIndex:n,copyCount:o,templatePageIndex:t}}}}function*Kt(e,t,r){const n=[];if(N.validateTemplateRepeat(e,n),n.length)throw new $.ReportBindingError(n[0].path,n[0].message);if(!e.repeat){for(const[l,i]of e.pages.entries())yield{page:i,pageIndex:l};return}const o=e.repeat,a=kt(e,t,r),s=It();for(const[l,i]of a.entries()){const c={row:i,rowIndex:l,dataset:o.dataset,options:r,wrapText:s},d=Ve(o,i,c),u=Ge(o,i,c);for(let f=0;f<d;f++)for(const[m,p]of e.pages.entries())$e(r.signal),yield{page:Ot(p,m,c,f,d,u),pageIndex:m}}}function Lt(e){return{widthMm:e.widthMm,heightMm:e.heightMm,marginTopMm:e.marginTopMm??0,marginBottomMm:e.marginBottomMm??0,marginLeftMm:e.marginLeftMm??0,marginRightMm:e.marginRightMm??0,components:[]}}function ee(e,t){const r=t.heightMm-(e.layout==="wide"?t.marginBottomMm:e.marginBottomMm??t.marginBottomMm);return e.components.reduce((n,o)=>o.kind!=="list"&&o.pageAnchor==="footer"?Math.min(n,o.topMm):n,r)}function J(e){return e.components.reduce((t,r)=>r.kind!=="list"&&r.pageAnchor==="header"?Math.max(t,r.topMm+r.heightMm):t,0)}function _e(e,t){let r=e.textMetrics.get(t);if(!r){const n=F.resolveFontSize(t).fontSizePt;r={measureOptions:{fontSizePt:n,fontFamily:t.fontFamily??_.DEFAULT_FONT_FAMILY,italic:t.italic,bold:t.bold,letterSpacingPt:t.letterSpacing},lineMm:n*(t.lineHeight??_.LINE_HEIGHT)*25.4/72},e.textMetrics.set(t,r)}return r}function Nt(e){if(e===null||typeof e=="string"||typeof e=="boolean"||typeof e=="number"&&Number.isFinite(e))return e}function xe(e,t){const r=e.fontSizePt??_.DEFAULT_FONT_PT,n=e.paddingMm??1,o=e.columns.map(g=>g.align??g.style?.align??e.align??"left"),a=e.columns.map((g,h)=>({...F.mergeComponentStyles({fontSize:r,verticalAlign:"middle"},g.style),align:o[h]==="auto"?"left":o[h]})),s=a.map((g,h)=>o[h]==="auto"?{left:g,center:{...g,align:"center"},right:{...g,align:"right"}}:void 0),l=e.columns.map((g,h)=>g.rules?.map(v=>{const M=s[h];if(M)return{left:F.mergeComponentStyles(M.left,v.style),center:F.mergeComponentStyles(M.center,v.style),right:F.mergeComponentStyles(M.right,v.style)};const y=F.mergeComponentStyles(a[h],v.style);return{left:y,center:y,right:y}})),i=e.columns.map(g=>$.resolveListHeaderStyle(e,g)),c=e.columns.map(g=>g.header);let d=e.rowHeightMm??0;for(let g=0;g<c.length;g++){const h=i[g],v=F.resolveFontSize(h).fontSizePt,M=G.wrapText(c[g],e.columns[g].widthMm-n*2,{fontSizePt:v,fontFamily:h.fontFamily??_.DEFAULT_FONT_FAMILY,italic:h.italic,bold:h.bold,letterSpacingPt:h.letterSpacing},t),y=v*(h.lineHeight??_.LINE_HEIGHT)*25.4/72;d=Math.max(d,Math.max(M.length,1)*y+n*2)}const u=c.map((g,h)=>({text:g,style:i[h]})),f=e.border===!1?{borderTop:!1,borderRight:!1,borderBottom:!1,borderLeft:!1}:{borderBottom:!0,borderLeft:!0,borderRight:!0,borderTop:!0},m=e.columns.map(g=>g.widthMm),p=jt(e.headerGrid,m,{cells:[u],colWidthsMm:m,rowHeightsMm:[d],paddingMm:n});return{fontSizePt:r,paddingMm:n,cellStyles:a,autoStyles:s,ruleStyles:l,textMetrics:new WeakMap,numberFormats:e.columns.map(g=>$.toExcelNumberFormat(g.format)),derivedFields:new Set(e.computed?.map(g=>g.field)),borderStyle:f,headerHeightMm:p.rowHeightsMm.reduce((g,h)=>g+h,0),headerGrid:p,colWidthsMm:m,columns:e.columns}}function jt(e,t,r){if(!e)return r;if(!e.cells.length)throw new Error("自定义列表表头至少需要一行");const n=e.rowHeightsMm??e.cells.map(()=>r.rowHeightsMm[0]);if(n.length!==e.cells.length||n.some(o=>!Number.isFinite(o)||o<=0))throw new Error("自定义列表表头行高无效");return{...e,colWidthsMm:t,rowHeightsMm:n}}function Bt(e,t,r){const n=t.format?.kind==="number"||t.format?.kind==="percent";t.valueType!==void 0?e.valueType=t.valueType:n&&(e.valueType="number"),t.editable!==void 0&&(e.editable=t.editable),(typeof e.value=="number"||e.value==null)&&r!==void 0&&(e.numberFormat=r)}function U(e,t,r){const n=e.columns,o=e.tree?.rows.get(t);let a=e.rowHeightFloorMm;const s=new Array(n.length);for(let l=0;l<n.length;l++){const i=n[l],c=i.visibleWhen&&!$.evalStyleRule(t,i.visibleWhen)?null:t[i.field],d=e.autoStyles[l]?$.resolveListAutoAlignment(c,i.format,i.semanticRole):"left";let u=e.autoStyles[l]?.[d]??e.cellStyles[l];if(i.rules)for(let M=0;M<i.rules.length;M++){const y=i.rules[M];if($.evalStyleRule(t,y.when)){u=e.ruleStyles[l][M][d];break}}const f=i.format?$.formatValue(c,i.format):$.listCellText(c),m=Ht(e,i,o);u=Dt(e,i,u,o);const p=_e(e,u),g=G.wrapText(f,Math.max(1,i.widthMm-e.paddingMm*2-m),p.measureOptions,r);a=Math.max(a,g.length*p.lineMm+e.paddingMm*2);const h=Nt(c),v={text:f,style:u};h!==void 0&&(v.value=h),Bt(v,i,e.numberFormats[l]),Wt(v,i,e,o,m),e.derivedFields.has(i.field)&&(v.derived=!0,v.editable=!1),i.visibleWhen&&c===null&&!$.evalStyleRule(t,i.visibleWhen)&&(v.editable=!1),s[l]=v}return{grid:{cells:[s],colWidthsMm:e.colWidthsMm,rowHeightsMm:[a],paddingMm:e.paddingMm},heightMm:a}}function Ht(e,t,r){return!r||t.field!==e.tree.list.tree.labelField?0:$.listTreeIndent(e.tree.list,t,r,e.paddingMm)}function Dt(e,t,r,n){return!n||t.field!==e.tree.list.tree.labelField||r.align==="left"?r:{...r,align:"left"}}function Wt(e,t,r,n,o=0){n&&(o&&(e.indentMm=o),$.applyListTreeMetadata(e,t,n,r.tree.list))}function ze(e){if(e!=null&&typeof e!="string"&&typeof e!="boolean"&&!(typeof e=="number"&&Number.isFinite(e)))throw new Error("分组字段应为有限 JSON 标量");return JSON.stringify([typeof e,e??null])}function*Je(e,t,r=0){const n=t[r];if(!n){for(const a of e)yield{kind:"row",row:a};return}const o=new Map;for(const a of e){const s=ze(a[n.field]),l=o.get(s);l?l.push(a):o.set(s,[a])}for(const a of o.values())yield{kind:"groupHeader",label:(n.headerTemplate??"{value}").replace(/\{value\}/g,$.listCellText(a[0][n.field])),firstRow:a[0],group:n,depth:r,rows:a},yield*Je(a,t,r+1),(n.subtotal?.length||n.aggregates?.length)&&(yield{kind:"subtotal",label:n.subtotalLabel??"小计",rows:a,group:n,depth:r}),yield{kind:"groupEnd",depth:r}}function Ue(e,t,r,n=[]){const o=[...r.filter(a=>!n.some(s=>s.field===a)).map(a=>({field:a,op:"sum"})),...n];return new Map(o.map(a=>{const s=e.find(i=>i.field===a.field)?.format??{kind:"number",thousands:!0},l=Me.aggregateRows(t,{...a,field:a.valueField??a.field});return[a.field,{text:$.formatValue(l,s),...l===null?{}:{value:l},...typeof l=="number"?{numberFormat:$.toExcelNumberFormat(s)}:{}}]}))}function Xe(e,t){const r=e.findIndex(n=>t.includes(n.field));return r<0?1:r}function z(e,t,r,n,o,a){const s=[],l=Math.max(0,Math.min(a,e.columns.length)),i=F.mergeComponentStyles({fontSize:e.fontSizePt},o);l&&s.push({text:r,colSpan:l,style:{bold:!0,...i}});for(let f=l;f<e.columns.length;f++){const m=e.columns[f],p=n.get(m.field),g=e.autoStyles[f]?.[$.resolveListAutoAlignment(p?.value,m.format)]??e.cellStyles[f];s.push({...p,text:p?.text??"",style:F.mergeComponentStyles(g,o)})}const c={text:r,colSpan:e.columns.length,style:{bold:!0,...i}},d=l?[s]:[[c],s],u=d.map(f=>Vt(e,f,t));return{grid:{cells:d,colWidthsMm:e.colWidthsMm,rowHeightsMm:u,paddingMm:e.paddingMm},heightMm:u.reduce((f,m)=>f+m,0)}}function Vt(e,t,r){let n=e.rowHeightFloorMm,o=0;for(const a of t){let s=0;const l=o+(a.colSpan??1);for(;o<l;o++)s+=e.colWidthsMm[o]??0;const i=_e(e,a.style),c=G.wrapText(a.text??"",s-e.paddingMm*2,i.measureOptions,r);n=Math.max(n,c.length*i.lineMm+e.paddingMm*2)}return n}function Gt(e,t,r){const{templatePage:n,current:o,warnings:a,nextId:s,pushCurrent:l}=r,i=()=>ee(n,o),c=Math.max(o.marginTopMm,J(n)),d=n.layout==="wide"?J(n):c,u={id:r.tableId,columnKeys:e.columns.map(w=>w.field),...e.layout===void 0?{}:{layout:e.layout},...e.title===void 0?{}:{title:e.title}},f=new Map,m=new Map,p={kind:"rect",leftMm:e.leftMm,topMm:0,widthMm:e.widthMm,heightMm:t.headerHeightMm,grid:t.headerGrid,nid:s("listh"),table:{...u,role:"header",rowIndex:-1},style:t.borderStyle,...e.meta?{meta:e.meta}:{}},g=w=>o.components.push({...p,topMm:w});if(r.flow&&e.header!==!1&&t.headerHeightMm>i()-c+.001)throw new Error(`流式列表 ${e.id??e.dataset} 的表头高度超出单页可用范围`);let h=Math.max(r.startTop??e.topMm,c);e.header!==!1&&(g(h),h+=t.headerHeightMm+r.mmPerRow);function v(){const w=Math.max(r.flow||n.layout==="wide"?0:e.topMm,d);return(e.header!==!1&&e.headerEveryPage!==!1?w+t.headerHeightMm:d)+[...m.values()].reduce((S,T)=>S+T.heightMm,0)}function M(){const w=n.layout==="wide"?0:o.marginBottomMm;return Math.min(n.heightMm-w,ee(n,o))-v()}function y(w){if(h+w<=i())return;l(),o.components=[],o.heightMm=n.heightMm,n.layout==="wide"&&(o.marginTopMm=0,o.marginBottomMm=0);const x=Math.max(r.flow||n.layout==="wide"?0:e.topMm,d);e.header!==!1&&e.headerEveryPage!==!1?(g(x),h=x+t.headerHeightMm):h=d;for(const S of m.values())K(S,"listgr","group-header")}function H(w,x,S,T){const P=M();if(r.flow&&w.heightMm>P+.001)throw new Error(`流式列表 ${e.id??e.dataset} 的单行高度超出单页可用范围`);w.heightMm>P&&a.push(`列表 ${e.id??e.dataset} 行高 ${w.heightMm.toFixed(2)}mm 超出单页可用高度 ${P.toFixed(2)}mm,预览与打印可能截断内容`),y(w.heightMm),K(w,x,S,T)}function K(w,x,S,T){const P=w.table?.id??u.id,L=S==="header"?-1:f.get(P)??0;S!=="header"&&f.set(P,L+w.grid.cells.length),o.components.push({kind:"rect",leftMm:e.leftMm,topMm:h,widthMm:e.widthMm,heightMm:w.heightMm,grid:w.grid,nid:s(x),table:{...u,...w.table,role:S,rowIndex:L,...T?{source:T}:{}},style:t.borderStyle,...e.meta?{meta:e.meta}:{}}),h+=w.heightMm}function I(w){w<=M()&&y(w)}return{keepTogether:I,placeGridRow:H,setGroupHeader:(w,x)=>{x?m.set(w,x):m.delete(w)},bottom:()=>h}}function qt(e,t){if(!e.rowKey)return;const r=t[e.rowKey];if((typeof r!="string"||!r.trim())&&!(typeof r=="number"&&Number.isFinite(r)))throw new Error(`数据集 ${e.dataset} 的 ${e.rowKey} 应为稳定的字符串或有限数字主键`);const n=e.revisionField?t[e.revisionField]:void 0,o=e.sourceTokenField?t[e.sourceTokenField]:void 0;if(n!==void 0&&typeof n!="string"&&!(typeof n=="number"&&Number.isFinite(n)))throw new Error("业务修订号应为字符串或有限数字");if(o!==void 0&&typeof o!="string")throw new Error("来源令牌应为字符串");return{datasetId:e.dataset,rowKey:r,...n===void 0?{}:{revision:n},...o===void 0?{}:{sourceToken:o}}}function ae(e,t){const r=new Map;if(!e.rowKey)return r;const n=new Set;for(const o of t){const a=qt(e,o),s=JSON.stringify(a.rowKey);if(n.has(s))throw new Error(`数据集 ${e.dataset} 的业务主键重复:${String(a.rowKey)}`);n.add(s),r.set(o,a)}return r}function _t(e,t,r,n,o){if(!e.grandTotal)return;const a=typeof e.grandTotal=="object"?e.grandTotal:void 0,s=se(e)[0],l=a?.fields??s?.subtotal??[],i=a?.aggregates??s?.aggregates??[];if(l.length===0&&i.length===0){n.warnings.push(`列表 ${e.id??""} 配置了 grandTotal 但未提供合计字段(groupBy.subtotal 或 grandTotal.fields)`);return}const c=z(r,n.measurer,a?.label??"合计",Ue(e.columns,t,l,i),a?.style??{},Xe(e.columns,[...l,...i.map(d=>d.field)]));o.placeGridRow(c,"listgt","grand-total")}function X(e){if(e?.aborted){const t=new Error("报表排版已取消");throw t.name="AbortError",t}}function se(e){const t=e.groups??(e.groupBy?[e.groupBy]:[]);if(t.length>16)throw new Error("列表最多支持 16 级分组");return t}function Se(e){const t=De(e),r=t.columns.reduce((o,a)=>o+a.widthMm,0),n=r>t.widthMm?t.widthMm/r:1;return n===1?t:{...t,columns:t.columns.map(o=>({...o,widthMm:o.widthMm*n}))}}function zt(e,t,r){const n=e.detail;if(!n)return;const o=new Set;for(const c of t){const d=pe(c[n.parentKey]);if(o.has(d))throw new Error("主从明细的主表关联键重复");o.add(d)}const a=r.datasets[n.dataset]??[],s=new Map,l=[];for(const c of a){const d=c[n.foreignKey];if(!Ye(d)&&n.unmatched==="ignore")continue;const u=pe(d);if(!o.has(u)){if(n.unmatched!=="ignore")throw new Error(`明细数据集 ${n.dataset} 存在未关联的业务键`);continue}const f=s.get(u);f?f.push(c):s.set(u,[c]),l.push(c)}const i=Se({...e,id:`${e.id??e.dataset}:detail`,dataset:n.dataset,rowKey:n.rowKey,revisionField:n.revisionField,sourceTokenField:n.sourceTokenField,computed:void 0,columns:n.columns,headerGrid:void 0,rowHeightMm:n.rowHeightMm??e.rowHeightMm,detail:void 0});return{list:i,inter:{...xe(i,r.measurer),rowHeightFloorMm:i.rowHeightMm??0},rows:s,sources:ae(i,l)}}function Ye(e){return typeof e=="string"&&!!e.trim()||typeof e=="number"&&Number.isFinite(e)}function pe(e){if(!Ye(e))throw new Error("主从关联键必须是非空字符串或有限数字");return ze(e)}function*Jt(e,t,r,n,o){if(!r)return;const a=r.rows.get(pe(t[e.detail.parentKey]))??[];if(!a.length)return;const s={id:`${n.tableId}:detail`,columnKeys:r.list.columns.map(l=>l.field),title:e.detail.label};e.detail.label&&o.placeGridRow({...z(r.inter,n.measurer,e.detail.label,new Map,{},r.list.columns.length),table:s},"listdl","group-header"),e.detail.header!==!1&&o.placeGridRow({grid:r.inter.headerGrid,heightMm:r.inter.headerHeightMm,table:s},"listdh","header"),yield*n.takePages();for(const l of a)X(n.signal),o.placeGridRow({...U(r.inter,l,n.measurer),table:s},"listdr","body",r.sources.get(l)),yield*n.takePages()}function Ut(e,t){if(!e.matrix)return{list:e,rows:t};if(e.detail||e.groupBy||e.groups?.length||e.grandTotal)throw new Error("矩阵不能同时配置普通分组、总计或主从明细");const r=He.createMatrixTable(t,e.matrix),n=r.columns.map((a,s)=>({...a,widthMm:s===0?e.matrix.rowWidthMm??40:e.matrix.columnWidthMm??28,editable:!1,align:s===0?"center":"right"})),o={...e,columns:n,headerGrid:void 0,rowKey:void 0,revisionField:void 0,sourceTokenField:void 0};return e.layout==="wide"&&(o.widthMm=n.reduce((a,s)=>a+s.widthMm,0)),{list:o,rows:r.rows}}function Qe(e){if(e.matrix||e.detail||e.groups?.length||e.groupBy||e.rowVisibleWhen)throw new Error("树形布局不能同时配置普通分组、矩阵、主从或行可见条件");if(e.rowKey&&e.rowKey!==e.tree.idField)throw new Error("树形布局的 rowKey 应与 idField 一致");if(!e.columns.some(t=>t.field===e.tree.labelField&&!t.hidden))throw new Error("树形布局需要可见的标签列");ne.validateTreeComputed(e.tree,e.computed)}function Xt(e,t,r){Qe(e);const n=ne.createTreeTable(t,e.tree,{signal:r.signal,computed:e.computed?.length?{fields:e.computed,formula:r.formula}:void 0}),o={...e,rowKey:e.tree.idField},a=ae(o,n.entries.map(i=>i.original)),s=new Map,l=new WeakMap;for(const i of n.entries)s.set(i.row,a.get(i.original)),l.set(i.row,i);return{list:o,rows:n.rows,sources:s,treeRows:l,totalRows:n.leaves}}function Yt(e,t){if(e.cardinality==="record"){if(t.length>1)throw new Error(`单记录区域 ${e.id??e.dataset} 仅允许 0 或 1 行数据`);if(e.tree||e.matrix||e.detail||e.groups?.length||e.groupBy||e.grandTotal||e.rowVisibleWhen)throw new Error("单记录区域不能配置树、矩阵、主从、分组、总计或行过滤");if(!t.length)return{list:{...e,columns:e.columns.map(r=>({...r,editable:!1}))},rows:[{}],sources:new Map}}}function Ze(e,t,r){const n=r.prepared.get(e);if(n)return n;const o=Yt(e,t);if(o)return r.prepared.set(e,o),o;if(e.tree){const i=Xt(e,t,r);return r.prepared.set(e,i),i}let a=e.computed?.length?Me.computeDataset(t,{fields:e.computed,signal:r.signal,formula:r.formula}).rows:t;const s=a===t?void 0:new Map(a.map((i,c)=>[i,t[c]]));e.rowVisibleWhen&&(a=a.filter(i=>$.evalStyleRule(i,e.rowVisibleWhen)));const l=Ut(e,a);if(!e.matrix){const i=ae(e,s?a.map(c=>s.get(c)):a);l.sources=s?new Map(a.map(c=>[c,i.get(s.get(c))])):i}return r.prepared.set(e,l),l}function Qt(e,t,r,n){if(!n.flow)return;const{current:o,templatePage:a}=n,s=Math.max(o.marginTopMm,J(a)),l=Math.max(n.startTop??e.topMm,s),i=(e.header===!1?0:t.headerHeightMm)+(r[0]?U(t,r[0],n.measurer).heightMm:0);l+i<=ee(a,o)+.001||l<=s+.001||(n.pushCurrent(),o.components=[],o.heightMm=a.heightMm,a.layout==="wide"&&(o.marginTopMm=0,o.marginBottomMm=0),n.startTop=Math.max(o.marginTopMm,J(a)))}function*Zt(e,t,r){const n=Ze(e,t,r),o=n.rows;e=n.list,e.layout==="wide"&&(r.current.widthMm=Math.max(r.current.widthMm,e.leftMm+e.widthMm+r.current.marginRightMm));const a=n.sources??ae(e,o),s=Se(e),l=se(s),i={...xe(s,r.measurer),rowHeightFloorMm:s.rowHeightMm??0,...n.treeRows?{tree:{list:s,rows:n.treeRows}}:{}};Qt(s,i,o,r);const c=Gt(s,i,r),d=zt(s,o,r);let u;for(const f of Je(o,l)){if(X(r.signal),f.kind==="row")c.placeGridRow(u??U(i,f.row,r.measurer),"listr","body",a.get(f.row)),u=void 0,yield*r.takePages(),yield*Jt(s,f.row,d,r,c);else if(f.kind==="groupHeader"){const m=z(i,r.measurer,f.label,new Map,f.group.headerStyle??{},s.columns.length);u??=U(i,f.firstRow,r.measurer);const p=l.slice(f.depth+1).reduce((g,h)=>g+z(i,r.measurer,(h.headerTemplate??"{value}").replace(/\{value\}/g,$.listCellText(f.firstRow[h.field])),new Map,h.headerStyle??{},s.columns.length).heightMm,0);f.group.keepWithNext!==!1&&c.keepTogether(m.heightMm+p+u.heightMm),c.placeGridRow(m,"listg","group-header"),f.group.repeatHeader&&c.setGroupHeader(f.depth,m)}else if(f.kind==="subtotal"){const m=f.group.subtotal??[],p=f.group.aggregates??[],g=z(i,r.measurer,f.label,Ue(s.columns,f.rows,m,p),f.group.subtotalStyle??{},Xe(s.columns,[...m,...p.map(h=>h.field)]));c.placeGridRow(g,"listst","subtotal")}else c.setGroupHeader(f.depth);yield*r.takePages()}_t(s,n.totalRows??o,i,r,c),r.finished?.(c.bottom()),yield*r.takePages()}function ie(e){return e.kind!=="list"&&(e.pageAnchor!==void 0||e.kind==="text"&&typeof e.text=="string"&&(e.text.includes("{page}")||e.text.includes("{totalPages}")))}function le(e,t){return{...e,...e.text===void 0?{}:{text:t(e.text)},...e.lines?{lines:e.lines.map(t)}:{},...e.richParagraphs?{richParagraphs:e.richParagraphs.map(r=>({...r,segments:r.segments.map(n=>({...n,...n.text===void 0?{}:{text:t(n.text)}}))}))}:{},...e.grid?{grid:{...e.grid,cells:e.grid.cells.map(r=>r.map(n=>n?{...n,...n.text===void 0?{}:{text:t(n.text)},...n.children?{children:n.children.map(o=>le(o,t))}:{}}:null))}}:{}}}function er(e){let t=!1;for(const r of e.pages)for(const n of r.components)ie(n)&&le(n,o=>(o.includes("{totalPages}")&&(t=!0),o));return t}function tr(e,t,r,n,o,a){const s={pageWidthMm:t.widthMm,pageHeightMm:t.heightMm,...e.layout===void 0?{}:{layout:e.layout},marginTopMm:t.marginTopMm,marginBottomMm:t.marginBottomMm,marginLeftMm:t.marginLeftMm,marginRightMm:t.marginRightMm,components:t.components,...e.meta?{meta:e.meta}:{}},l=i=>{const c=i.replace(/\{page\}/g,String(n));return a===void 0?c:c.replace(/\{totalPages\}/g,String(a))};for(const i of r)s.components.push(le(i,l));if(e.layout==="wide"){const i=s.components.reduce((c,d)=>Math.max(c,d.topMm+d.heightMm),0);s.marginBottomMm=o?e.marginBottomMm??0:0,s.pageHeightMm=Math.max(1,i+s.marginBottomMm)}return s}function Re(e){return e.cells.reduce((t,r)=>t+r.reduce((n,o)=>n+(o?1+(o.children?.reduce((a,s)=>a+et(s),0)??0):0),0),0)}function et(e){return e.grid?Re(e.grid):0}function Ee(e){for(const t of["maxPages","maxCells","knownTotalPages"])if(e[t]!==void 0&&(!Number.isSafeInteger(e[t])||e[t]<1))throw new RangeError(`${t} 应为正安全整数`)}function rr(e,t){const r=Ze(e,t.datasets[e.dataset]??[],t),n=Se(r.list),o={...xe(n,t.measurer),rowHeightFloorMm:n.rowHeightMm??0};return(n.header===!1?0:o.headerHeightMm)+r.rows.reduce((a,s)=>a+U(o,s,t.measurer).heightMm,0)}function*nr(e){const{templatePage:t,current:r}=e,n=new Map(t.components.map((a,s)=>[a,s])),o=(a,s,l)=>{const i=e.datasets[a.dataset];return Array.isArray(i)||e.warnings.push(`数据集 ${a.dataset} 未提供数据,列表 ${a.id??""} 输出为空`),Zt(a,Array.isArray(i)?i:[],{...e,tableId:`${e.tableId}:${n.get(a)}`,startTop:s,finished:l,flow:!!t.flow})};if(t.flow){yield*Et({page:t,active:()=>X(e.signal),top:()=>Math.max(r.marginTopMm,J(t)),bottom:()=>ee(t,r),append:a=>{r.components.push(a)},nextPage:()=>{e.pushCurrent(),r.components=[],r.heightMm=t.heightMm,t.layout==="wide"&&(r.marginTopMm=0,r.marginBottomMm=0)},takePages:e.takePages,height:a=>rr(a,e),list:o});return}for(const a of t.components)ie(a)||(a.kind==="list"?yield*o(a):r.components.push(a))}function*te(e,t,r,n,o,a=new WeakMap){let s=0,l=0,i=0;const c=d=>`${d}_${(++s).toString(36)}`;for(const{pageIndex:d,page:u}of Kt(e,t,r)){X(r.signal);const f=Lt(u),m=u.components.filter(ie);let p=[];const g=(v=!1)=>{if(X(r.signal),r.maxPages!==void 0&&l>=r.maxPages)throw new j(r.maxPages,l+1);if(r.maxCells!==void 0&&(i+=[...f.components,...m].reduce((M,y)=>M+et(y),0),i>r.maxCells))throw new W(r.maxCells,i);p.push(tr(u,f,m,++l,v,o))},h=()=>{const v=p;return p=[],v};yield*nr({templatePage:u,current:f,warnings:n,nextId:c,pushCurrent:g,takePages:h,datasets:t,signal:r.signal,formula:r.formula,prepared:a,measurer:r.measurer??G.heuristicMeasurer,mmPerRow:r.mmPerRow??0,tableId:`table:${d}`}),g(!0),yield*h()}}function or(e,t,r={}){Ee(r);let n=0;for(const o of te(e,t,{...r,onWarning:void 0},[]))n++;return n}function*tt(e,t,r={}){Ee(r);const n=er(e),o=new WeakMap;let a=r.knownTotalPages;if(n&&a===void 0){a=0;for(const i of te(e,t,r,[],void 0,o))a++}const s=[];let l=0;for(const i of te(e,t,r,s,a,o)){for(;l<s.length;l++)r.onWarning?.(s[l]);yield i}}function ce(e,t,r={}){const n=typeof r=="number"?{mmPerRow:r}:r;Ee(n);const o=[],a=[...te(e,t,n,o,n.knownTotalPages)];for(const s of a)s.components=s.components.map(l=>ie(l)?le(l,i=>i.replace(/\{totalPages\}/g,String(a.length))):l);return o.forEach(s=>n.onWarning?.(s)),{plan:{schemaVersion:re.RENDER_PLAN_SCHEMA_VERSION,...oe(e)?{requiresRecalculation:!0}:{},pages:a},warnings:o}}function ar(e){const t=e.columns.find(a=>!a.hidden)?.field;if(!t)return{groups:0,total:0};const r=se(e),n=(a=[],s=[])=>a.includes(t)||s.some(l=>l.field===t),o=typeof e.grandTotal=="object"?e.grandTotal:void 0;return{groups:r.filter(a=>n(a.subtotal,a.aggregates)).length,total:Number(n(o?.fields??r[0]?.subtotal,o?.aggregates??r[0]?.aggregates))}}function sr(e,t,r){Qe(e);const n=ne.flattenTreeInput(t[e.dataset]??[],e.tree,r),o=e.columns.filter(s=>!s.hidden).length,a=e.header===!1?0:e.headerGrid?Re(e.headerGrid):o;return n.length*o+a+ +!!e.grandTotal*2*o}function ir(e,t,r={}){if(e.tree)return sr(e,t,r.signal);if(e.matrix){let i=t[e.dataset]??[];e.computed?.length&&(i=Me.computeDataset(i,{fields:e.computed,...r}).rows),e.rowVisibleWhen&&(i=i.filter(d=>$.evalStyleRule(d,e.rowVisibleWhen)));const c=He.estimateMatrixTable(i,e.matrix);return c.cells+c.columnCount}const n=t[e.dataset]?.length??0,o=e.columns.filter(i=>!i.hidden).length,a=se(e).length,s=ar(e);let l=(n*(1+2*a+s.groups)+ +!!e.grandTotal*(1+s.total))*o;if(l+=e.header===!1?0:e.headerGrid?Re(e.headerGrid):o,e.cardinality==="record"&&n===0&&(l+=o),e.detail){const i=t[e.detail.dataset]?.length??0,c=e.detail.columns.filter(d=>!d.hidden).length;l+=(i+n*(+(e.detail.header!==!1)+ +!!e.detail.label))*c}if(!Number.isSafeInteger(l))throw new RangeError("报表单元格估算超出安全整数预算");return l}function rt(e){return!e||typeof e!="object"?!1:[e.pageIndex,e.componentIndex,e.rowIndex,e.columnIndex].every(t=>Number.isInteger(t)&&t>=0)}function nt(e,t,r){const n=e.grid;if(!n)return null;const o=n.cells[t];if(!o)return null;const s=be.resolveGridLayout(n,e.widthMm,e.heightMm).cells.filter(i=>i.ri===t).findIndex(i=>i.ci===r),l=o[s];return l?{cell:l,sourceColumnIndex:s}:null}function lr(e){return e.value!==void 0?e.value:e.rawText??e.text??null}function cr(e,t){return e.valueType?e.valueType:typeof t=="number"?"number":typeof t=="boolean"?"boolean":t===null&&e.numberFormat&&/[0#?]/.test(e.numberFormat)?"number":"text"}function dr(e,t){if(e.derived)return"derived";if(e.editable===!1)return"cell";if(e.formula!==void 0)return"formula";if(e.children?.length)return"complex";if(t.table&&t.table.role!=="body"&&e.editable!==!0)return"structure"}function ur(e,t){const r=e.table;if(r)return{id:r.id,rowIndex:r.rowIndex+t.rowIndex,role:r.role,columnKey:r.columnKeys[t.columnIndex]}}function fr(e,t,r){if(e.derived)return;if(e.source)return{...e.source};const n=t.table?.source,o=t.table?.columnKeys[r.columnIndex];if(!(!n||n.rowKey===void 0||o===void 0))return{...n,rowKey:n.rowKey,field:o}}function ot(e,t,r){const n=lr(r),o=dr(r,e);return{address:{...t},cell:r,component:e,value:n,valueType:cr(r,n),table:ur(e,t),source:fr(r,e,t),editable:o===void 0,readOnlyReason:o}}function de(e,t){if(!rt(t))return null;const r=e.pages[t.pageIndex]?.components[t.componentIndex];if(!r)return null;const n=nt(r,t.rowIndex,t.columnIndex);return n?ot(r,t,n.cell):null}function B(e){const t=new Map;return r=>{if(!rt(r))return null;const n=e.pages[r.pageIndex]?.components[r.componentIndex];if(!n?.grid)return null;let o=t.get(n);if(!o){const s=new Map;o=new Map;for(const l of be.resolveGridLayout(n.grid,n.widthMm,n.heightMm).cells){const i=s.get(l.ri)??0;s.set(l.ri,i+1);const c=n.grid.cells[l.ri]?.[i];c&&o.set(`${l.ri}:${l.ci}`,c)}t.set(n,o)}const a=o.get(`${r.rowIndex}:${r.columnIndex}`);return a?ot(n,r,a):null}}class b extends Error{constructor(t){super(`Invalid report cell edit: ${t}`),this.code=t,this.name="ReportCellEditError"}}function mr(e,t){let r=e.trim();const n=t&&r.endsWith("%");if(n&&(r=r.slice(0,-1).trim()),/^[+-]?\d{1,3}(?:,\d{3})+(?:\.\d*)?(?:[eE][+-]?\d+)?$/.test(r)&&(r=r.replace(/,/g,"")),!/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/.test(r))throw new b("number");return Number(r)/(n?100:1)}function gr(e,t){if(e===null||typeof e=="string"&&e.trim()==="")return null;if(typeof e!="string"&&typeof e!="number")throw new b("number");const r=typeof e=="number"?e:mr(e,Be.isExcelPercentageFormat(t.cell.numberFormat));if(!Number.isFinite(r)||Number.isInteger(r)&&!Number.isSafeInteger(r))throw new b("number");return r}function pr(e){if(e===null||typeof e=="string"&&e.trim()==="")return null;if(typeof e=="boolean")return e;const t=String(e).trim().toLowerCase();if(["true","yes","是","1"].includes(t))return!0;if(["false","no","否","0"].includes(t))return!1;throw new b("boolean")}function Te(e,t){return e.valueType==="number"?gr(t,e):e.valueType==="boolean"?pr(t):t===null?null:String(t)}function hr(e,t){const r=t.cell.text,o=[["是","否"],["TRUE","FALSE"],["True","False"],["true","false"],["1","0"]].find(a=>a.includes(r??""));return o?o[e?0:1]:String(e)}function q(e,t){return t===null?"":typeof t=="boolean"?hr(t,e):typeof t=="number"?Be.formatExcelNumber(t,e.cell.numberFormat):String(t)}function wr(e,t,r){const n=de(e,t);if(!n)throw new b("missing");return Y(n,r)}function Y(e,t){if(!e.editable)throw new b("readonly");const r=Te(e,t);return{address:{...e.address},table:e.table,source:e.source,previousValue:e.value,previousText:e.cell.text??"",value:r,text:q(e,r)}}function yr(e,t){const r=e.table,n=t.table;return!r||!n||r.columnKey===void 0?!1:r.id===n.id&&r.rowIndex===n.rowIndex&&r.role===n.role&&r.columnKey===n.columnKey}function at(e,t,r){const n=e.grid,{rowIndex:o,columnIndex:a}=t.address,s=nt(e,o,a),l=[...n.cells],i=[...l[o]],c=q(t,r.value),d={...s.cell,value:r.value,text:c,rawText:c};return i[s.sourceColumnIndex]=d,l[o]=i,{...e,grid:{...n,cells:l}}}function br(e,t){const r=e.table?.columnKeys,n=t.table?.columnKey;return r&&n!==void 0?r.flatMap((o,a)=>o===n?[a]:[]):[]}function vr(e,t,r,n,o,a){const s=t.table,l=o.table;if(!s||!l||s.id!==l.id||s.role!==l.role||!t.grid)return t;const i=l.rowIndex-s.rowIndex;if(i<0||i>=t.grid.cells.length)return t;let c=t;for(const d of br(t,o)){const u=de(e,{pageIndex:r,componentIndex:n,rowIndex:i,columnIndex:d});u?.editable&&yr(o,u)&&(c=at(c,u,a))}return c}function Mr(e,t,r,n,o,a){const s=o.address;return o.table?.columnKey!==void 0?vr(e,t,r,n,o,a):s.pageIndex===r&&s.componentIndex===n?at(t,o,a):t}function Pe(e,t){const r=t.source;if(!r)return!1;const n=e.source;return!n||["datasetId","rowKey","field","revision","sourceToken"].some(o=>!Object.is(n[o],r[o]))}function $r(e,t){const r=de(e,t.address);if(!r)throw new b("missing");if(!r.editable)throw new b("readonly");if(Pe(r,t))throw new b("conflict");if(!Object.is(r.value,t.previousValue)||(r.cell.text??"")!==t.previousText)throw new b("conflict");const n=Te(r,t.value),o={...t,value:n,text:q(r,n)};if(Object.is(n,r.value)&&o.text===r.cell.text)return e;const a=e.pages.map((s,l)=>{const i=s.components.map((c,d)=>Mr(e,c,l,d,r,o));return i.every((c,d)=>c===s.components[d])?s:{...s,components:i}});return{...e,pages:a}}function st(e,t,r){if(!r||r.revision===void 0&&r.sourceToken===void 0)return e;const n=new Set(t.edits.flatMap(s=>s.source?[s.source.datasetId]:[]));if(!n.size)return e;function o(s){return!s.datasetId||!n.has(s.datasetId)||(r.revision===void 0||Object.is(r.revision,s.revision))&&(r.sourceToken===void 0||r.sourceToken===s.sourceToken)?s:{...s,...r.revision!==void 0?{revision:r.revision}:{},...r.sourceToken!==void 0?{sourceToken:r.sourceToken}:{}}}const a=e.pages.map(s=>{const l=s.components.map(i=>{const c=i.table?.source?o(i.table.source):void 0,d=i.table&&c!==i.table.source?{...i.table,source:c}:i.table,u=i.grid?.cells.map(m=>{const p=m.map(g=>{if(!g?.source)return g;const h=o(g.source);return h===g.source?g:{...g,source:h}});return p.some((g,h)=>g!==m[h])?p:m}),f=i.grid&&u?.some((m,p)=>m!==i.grid.cells[p])?{...i.grid,cells:u}:i.grid;return d!==i.table||f!==i.grid?{...i,table:d,grid:f}:i});return l.some((i,c)=>i!==s.components[c])?{...s,components:l}:s});return a.some((s,l)=>s!==e.pages[l])?{...e,pages:a}:e}function xr(e){return JSON.stringify([e.pageIndex,e.componentIndex,e.rowIndex,e.columnIndex])}function Ae(e){const t=e.table;return t?.columnKey!==void 0?JSON.stringify([t.id,t.role,t.rowIndex,t.columnKey]):xr(e.address)}function Sr(e,t){if(!t.length)return e;const r=new Map(t.map(i=>[Ae(i),i])),n=new Set(t.flatMap(i=>i.table?[i.table.id]:[])),o=new Set(t.map(i=>`${i.address.pageIndex}:${i.address.componentIndex}`)),a=B(e);function s(i,c,d){const u=i.grid;if(!u||!o.has(`${c}:${d}`)&&!n.has(i.table?.id??""))return i;const f=new Map,m=new Map;for(const p of be.resolveGridLayout(u,i.widthMm,i.heightMm).cells){const g=m.get(p.ri)??0;m.set(p.ri,g+1);const h=a({pageIndex:c,componentIndex:d,rowIndex:p.ri,columnIndex:p.ci}),v=h&&r.get(Ae(h));if(!v||!h.editable)continue;const M=f.get(p.ri)??[...u.cells[p.ri]],y=q(h,v.value);Object.is(h.value,v.value)&&y===h.cell.text||(M[g]={...p.cell,value:v.value,text:y,rawText:y},f.set(p.ri,M))}return f.size?{...i,grid:{...u,cells:u.cells.map((p,g)=>f.get(g)??p)}}:i}const l=e.pages.map((i,c)=>{const d=i.components.map((u,f)=>s(u,c,f));return d.every((u,f)=>u===i.components[f])?i:{...i,components:d}});return l.every((i,c)=>i===e.pages[c])?e:{...e,pages:l}}function O(e){const t=e.source;if(t)return JSON.stringify([t.datasetId,t.rowKey,t.field]);const r=e.table;if(r?.columnKey!==void 0)return JSON.stringify([r.id,r.role,r.rowIndex,r.columnKey]);const n=e.address;return JSON.stringify([n.pageIndex,n.componentIndex,n.rowIndex,n.columnIndex])}function Rr(e,t,r){if(typeof r!="string"||!r.trim()||!Array.isArray(t))throw new b("missing");if(t.length>1e4)throw new b("limit");const n=new Set,o=B(e),a=t.map(({address:s,value:l})=>{const i=o(s);if(!i)throw new b("missing");const c=Y(i,l),d=O(c);if(n.has(d))throw new b("duplicate");return n.add(d),c});return{requestId:r,edits:a}}function Er(e,t){if(t.edits.length>1e4)throw new b("limit");const r=B(e),n=new Set,o=t.edits.map(a=>{const s=r(a.address);if(!s)throw new b("missing");const l=O(a);if(n.has(l))throw new b("duplicate");if(n.add(l),Pe(s,a)||!Object.is(s.value,a.previousValue)||(s.cell.text??"")!==a.previousText)throw new b("conflict");return Y(s,a.value)});return Sr(e,o)}function Tr(e){const t=new Map;for(const r of e){const n=O(r),o=t.get(n),a=o?{...r,previousValue:o.previousValue,previousText:o.previousText}:{...r};Object.is(a.previousValue,a.value)?t.delete(n):t.set(n,a)}return[...t.values()]}function V(e,t){for(let r=0;r<t.length;r++){const n=t.charCodeAt(r);e.first=Math.imul(e.first^n,16777619),e.second=Math.imul(e.second,33)^n,e.count++}}function Pr(e,t,r){const n=Object.getOwnPropertyDescriptor(e,t);if(!n||n.get||n.set)throw new b("conflict");V(r,`${t.length}:${t}`),it(n.value,r)}function Ir(e,t){if(Object.getOwnPropertyDescriptor(e,"toJSON"))throw new b("conflict");if(t.active.has(e))throw new b("conflict");if(t.active.add(e),e instanceof Date)V(t,`date:${Date.prototype.getTime.call(e)};`);else{const r=Object.getPrototypeOf(e);if(!Array.isArray(e)&&r!==Object.prototype&&r!==null)throw new b("conflict");const n=Object.keys(e);V(t,`${Array.isArray(e)?"array":"object"}:${Array.isArray(e)?e.length:n.length}:{`),n.forEach(o=>Pr(e,o,t)),V(t,"}")}t.active.delete(e)}function it(e,t){if(++t.nodes>1e6)throw new b("limit");if(e===null){V(t,"null;");return}if(typeof e=="object"){Ir(e,t);return}if(typeof e=="function"||typeof e=="symbol")throw new b("conflict");const r=String(e);V(t,`${typeof e}:${r.length}:${r};`)}function Oe(e){const t={first:2166136261,second:5381,count:0,nodes:0,active:new Set};return it(e,t),`${t.count}:${t.first>>>0}:${t.second>>>0}`}function he(e,t,r){if(++r.nodes>1e6)throw new b("limit");if(typeof e=="string"&&(r.text+=e.length,r.text>32*1024*1024))throw new b("limit");if(e===null||typeof e!="object")return e;if(t.has(e))throw new b("conflict");if(e instanceof Date)return new Date(Date.prototype.getTime.call(e));t.add(e);const n=Array.isArray(e)?e.map(o=>he(o,t,r)):Object.fromEntries(Object.entries(e).map(([o,a])=>[o,he(a,t,r)]));return t.delete(e),n}function Cr(e){return he(e,new Set,{nodes:0,text:0})}function lt(e){const t=[];for(const r of e.template.pages)for(const n of r.components)n.kind==="list"&&(t.push(n.tree?{...n,rowKey:n.tree.idField}:n),n.detail&&t.push({...n.detail,relation:{detail:n.detail,parentRows:e.datasets[n.dataset]??[]}}));return t}function Ke(e){return JSON.stringify([e.datasetId,e.rowKey])}function ct(e){const t=new Map,r=new Set;return e.forEach((n,o)=>{for(const a of lt(n)){if(!a.rowKey)continue;const s=a.relation,l=s?new Set(s.parentRows.map(i=>JSON.stringify(i[s.detail.parentKey]))):void 0;(n.datasets[a.dataset]??[]).forEach((i,c)=>{if(s&&!l.has(JSON.stringify(i[s.detail.foreignKey])))return;const d=i[a.rowKey];if(typeof d!="string"&&typeof d!="number")return;const u=`${o}:${a.dataset}:${c}:${a.rowKey}`;if(r.has(u))return;r.add(u);const f=Ke({datasetId:a.dataset,rowKey:d}),m=t.get(f)??[];m.push({partIndex:o,dataset:a.dataset,rowIndex:c,row:i,binding:a}),t.set(f,m)})}}),n=>{const o=t.get(Ke(n));if(!o?.length)throw new b("missing");if(new Set(o.map(a=>`${a.partIndex}:${a.dataset}`)).size!==o.length)throw new b("conflict");return o}}function dt(e,t){const r=e.map(o=>({...o,datasets:{...o.datasets}})),n=new Set;for(const{row:o,field:a,value:s}of t){const l=r[o.partIndex],i=`${o.partIndex}:${o.dataset}`;n.has(i)||(l.datasets[o.dataset]=[...l.datasets[o.dataset]],n.add(i)),l.datasets[o.dataset][o.rowIndex]={...l.datasets[o.dataset][o.rowIndex],[a]:s}}return r}function kr(e,t,r){const n=[],o=new Set;return e.forEach((a,s)=>{for(const l of lt(a))t.has(l.dataset)&&(a.datasets[l.dataset]??[]).forEach((i,c)=>{const d={partIndex:s,dataset:l.dataset,rowIndex:c,row:i,binding:l};for(const[u,f]of[[l.revisionField,r.revision],[l.sourceTokenField,r.sourceToken]]){if(!u||f===void 0)continue;const m=`${s}:${l.dataset}:${c}:${u}`;o.has(m)||(o.add(m),n.push({row:d,field:u,value:f}))}})}),n}function ut(e){const t=new Map,r=B(e);return e.pages.forEach((n,o)=>n.components.forEach((a,s)=>{if(!(!a.grid||a.table?.role!=="body"))for(let l=0;l<a.grid.cells.length;l++)for(let i=0;i<a.table.columnKeys.length;i++){const c=r({pageIndex:o,componentIndex:s,rowIndex:l,columnIndex:i});c?.source&&c.editable&&t.set(O(c),c)}})),t}function Fr(e,t,r){const n=ut(e),o=B(e);return t.map(a=>{const s=a.source?n.get(O(a)):o(a.address);if(!s||O(s)!==O(a))throw new b("missing");return{address:{...s.address},value:a[r]}})}async function ft(e,t,r={}){const n=[],o={...r,knownTotalPages:void 0};for(const a of tt(e,t,o))n.push(a),n.length%8===0&&await new Promise(s=>setTimeout(s,0));if(r.signal?.aborted){const a=new Error("报表重算已取消");throw a.name="AbortError",a}return{schemaVersion:re.RENDER_PLAN_SCHEMA_VERSION,...oe(e)?{requiresRecalculation:!0}:{},pages:n}}const we=new WeakMap;function Ar(e){return we.get(e)}function Q(e){if(e?.aborted){const t=new Error("报表重算已取消");throw t.name="AbortError",t}}function mt(e,t){return e[t]===void 0?"":e[t]}function Or(e,t){if(t.edits.length>1e4)throw new b("limit");const r=B(e),n=new Set,o=[],a=t.edits.map(s=>{const l=r(s.address);if(!l?.source)throw new b("missing");const i=O(s);if(n.has(i))throw new b("duplicate");if(n.add(i),Pe(l,s)||!Object.is(l.value,s.previousValue)||(l.cell.text??"")!==s.previousText)throw new b("conflict");return o.push(l),Y(l,s.value)});return{batch:{requestId:t.requestId,edits:a},contexts:o}}function Kr(e,t){const r=ct(e);return t.flatMap(n=>{if(!n.source)throw new b("missing");return r(n.source).map(o=>{if(!Object.is(mt(o.row,n.source.field),n.previousValue))throw new b("conflict");if(o.binding.rowKey===n.source.field)throw new b("readonly");return{row:o,field:n.source.field,value:n.value}})})}function me(e,t,r){const n={...e,value:t,source:{...e.source,...r?.revision===void 0?{}:{revision:r.revision},...r?.sourceToken===void 0?{}:{sourceToken:r.sourceToken}}};return n.cell={...e.cell,value:n.value,text:q(n,n.value)},n}function Lr(e,t,r){if(!r||r.revision===void 0&&r.sourceToken===void 0)return[...e];const n=new Set(t.edits.flatMap(o=>o.source?[o.source.datasetId]:[]));return dt(e,kr(e,n,r))}function Ie(e,t){let r=t.parts;const n=t.rebuild,o=Oe(r);let a=e,s;const l=new Map;function i(u){if(u!==a)throw new b("conflict");if(s)return s;if(Oe(r)!==o)throw new b("conflict");return Cr(r)}async function c(u,f,m,p={}){Q(p.signal),f={requestId:f.requestId,edits:f.edits.map(y=>({...y,address:{...y.address},source:y.source?{...y.source}:void 0,table:y.table?{...y.table}:void 0}))},m=m.map(y=>({...y,address:{...y.address},source:y.source?{...y.source}:void 0,table:y.table?{...y.table}:void 0,cell:{...y.cell}})),await new Promise(y=>setTimeout(y,0)),Q(p.signal);const g=i(u),h=dt(g,Kr(g,f.edits)),v=await n(h,p.signal);Q(p.signal);let M=!1;return{plan:v,commit(y){if(Q(p.signal),M||a!==u)throw new b("conflict");if(y?.conflicts?.length)throw new b("conflict");const H=Lr(h,f,y),K=st(v,f,y);if(y){const I=new Set(f.edits.map(C=>C.source.datasetId));for(const[C,w]of l)I.has(w.source.datasetId)&&l.set(C,me(w,w.value,y))}return m.forEach((I,C)=>l.set(O(I),me(I,f.edits[C].value,y))),M=!0,s=H,r=void 0,a=K,we.set(a,d),a}}}const d={get plan(){return a},async prepare(u,f,m){const p=Or(u,f);return c(u,p.batch,p.contexts,m)},async prepareHistory(u,f,m,p,g){if(!p.trim()||f.length>1e4)throw new b("limit");const h=i(u),v=ct(h),M=ut(u),y=new Set,K=f.map(w=>{if(!w.source)throw new b("missing");const x=O(w);if(y.has(x))throw new b("duplicate");y.add(x);const S=M.get(x)??l.get(x);if(!S?.source)throw new b("missing");const T=v(S.source)[0];return me(S,mt(T.row,S.source.field))}).map((w,x)=>({context:w,edit:Y(w,f[x][m])})).filter(({edit:w})=>!Object.is(w.previousValue,w.value)),I={requestId:p,edits:K.map(({edit:w})=>w)},C=K.map(({context:w})=>w);return{batch:I,contexts:C,prepared:await c(u,I,C,g)}}};return we.set(e,d),d}function Nr(e){const t=ce(e.template,e.datasets,e.pagination).plan;return Ie(t,{parts:[{template:e.template,datasets:e.datasets}],rebuild:(r,n)=>ft(r[0].template,r[0].datasets,{...e.pagination,signal:n})})}function Ce(e,t,r={}){const n=new Map;for(const a of e.pages)for(const s of a.components){if(s.kind!=="list"||s.tree?.input!=="nested")continue;const l=n.get(s.dataset);if(l&&(l.childrenField??"children")!==(s.tree.childrenField??"children"))throw new Error("同一数据集的嵌套树应使用相同 childrenField");n.set(s.dataset,s.tree)}if(!n.size)return t;const o={...t};for(const[a,s]of n){const l=Math.min(s.maxRows??1e5,r.maxRows??1/0);o[a]=ne.flattenTreeInput(t[a]??[],{...s,maxRows:l},r.signal)}return o}function gt(e,t,r={}){return Object.values(Ce(e,t,r)).reduce((n,o)=>n+o.length,0)}function jr(e,t,r){const n=ve.datasetJsonSchema(r),o=e?.pages.flatMap(l=>l.components).find(l=>l.kind==="list"&&l.dataset===t&&l.tree?.input==="nested");if(!o||o.kind!=="list"||!o.tree)return n;const a=n.items,s=o.tree.childrenField??"children";return{...n,items:{$ref:"#/$defs/treeNode"},$defs:{treeNode:{...a,properties:{...a.properties,[s]:{anyOf:[{type:"null"},{type:"array",items:{$ref:"#/$defs/treeNode"}}]}}}}}}function Br(e){if(!("mapData"in e))return e;const{load:t,mapData:r,...n}=e;return{...n,load:async o=>{const a=await t(o);A(o.signal);try{return r(a,o)}catch(s){throw new R("validate",`报表 ${o.reportId} 数据映射失败`,s)}}}}class R extends Error{constructor(t,r,n){super(r),this.name="ReportSourceError",this.code=t,this.cause=n}}function ue(e){const t=new Error("报表加载已取消");return t.name="AbortError",Object.defineProperty(t,"cause",{value:e.reason}),t}function A(e){if(e?.aborted)throw ue(e)}function ye(e,t){return t?new Promise((r,n)=>{const o=()=>t.removeEventListener("abort",a),a=()=>{o(),n(ue(t))};t.addEventListener("abort",a,{once:!0}),t.aborted&&a(),Promise.resolve(e).then(s=>{o(),r(s)},s=>{o(),n(s)})}):Promise.resolve(e)}function Hr(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new R("validate",`报表 ${t} 的数据集应为对象`);for(const[r,n]of Object.entries(e))if(!Array.isArray(n)||n.some(o=>!o||typeof o!="object"||Array.isArray(o)))throw new R("validate",`报表 ${t} 的数据集 ${r} 应为对象数组`)}async function Dr(e,t,r){const{reportId:n,signal:o}=t;try{const a=await ye(e(t),o);A(o);const s=N.validateReportTemplate(a);if(!s.ok)throw new R("validate",`报表 ${n} 模板校验失败:${s.errors.slice(0,3).map(l=>`${l.path}: ${l.message}`).join("; ")}`);return r.push(...s.warnings.map(l=>`${n}: ${l.path}: ${l.message}`)),a}catch(a){throw o?.aborted?ue(o):a instanceof R?a:a instanceof N.ReportTemplateError?new R("validate",`报表 ${n} 模板校验失败:${a.message}`,a):new R("fetch",`报表 ${n} 模板加载失败:${a instanceof Error?a.message:String(a)}`,a)}}async function Wr(e,t,r,n){const o=t.signal;let a;try{if(e.load)a=await ye(e.load(t),o);else if(e.provider){const s=await ye(e.provider.query(t),o);A(o),Vr(s,r),a=s.datasets,n?.(r,s)}else a=e.datasets??{}}catch(s){throw o?.aborted?ue(o):s instanceof R?s:new R("fetch",`报表 ${r} 取数失败:${s instanceof Error?s.message:String(s)}`,s)}return A(o),a}function Vr(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new R("validate",`报表 ${t} Provider 应返回 datasets 结果对象`);for(const r of["revision","sourceToken"])if(e[r]!==void 0&&typeof e[r]!="string")throw new R("validate",`报表 ${t} Provider ${r} 应为字符串`);if(e.diagnostics!==void 0&&(!Array.isArray(e.diagnostics)||e.diagnostics.some(r=>!r||typeof r.code!="string"||typeof r.message!="string"||!["info","warning","error"].includes(r.severity))))throw new R("validate",`报表 ${t} Provider diagnostics 不符合结构化诊断契约`)}function Gr(e,t,r,n,o){try{t=Ce(n,t,{maxRows:e.dataValidation?.maxRows,signal:o})}catch(a){throw new R("validate",`报表 ${r} 树形数据无效:${a instanceof Error?a.message:String(a)}`,a)}for(const[a,s]of Object.entries(e.dataSchema??{})){let l;try{l=ve.validateDatasetRows(Object.prototype.hasOwnProperty.call(t,a)?t[a]:void 0,s,{...e.dataValidation,path:`$.datasets.${a}`})}catch(i){throw new R("config",`报表 ${r} 数据集 ${a} 字段契约配置无效`,i)}if(!l.ok)throw new R("validate",`报表 ${r} 数据集 ${a} 不符合字段契约:${l.issues[0]?.message}`,{issues:l.issues})}}function pt(e,t){if(!e.repeat)return!1;const r=Object.prototype.hasOwnProperty.call(t,e.repeat.dataset)?t[e.repeat.dataset]:void 0;return Array.isArray(r)&&r.length===0}function ht(e){const t=r=>r.grid?.cells.reduce((n,o)=>n+o.reduce((a,s)=>a+(s?1+(s.children?.reduce((l,i)=>l+t(i),0)??0):0),0),0)??0;return e.pages.reduce((r,n)=>r+n.components.reduce((o,a)=>o+t(a),0),0)}function wt(e,t,r,n){return{...e,signal:n??e?.signal,...t===void 0?{}:{maxPages:Math.max(1,Math.min(t,e?.maxPages??t))},...r===void 0?{}:{maxCells:Math.max(1,Math.min(r,e?.maxCells??r))}}}function qr(e,t,r,n,o,a){const s=o.maxPages===void 0?void 0:o.maxPages-o.usedPages,l=o.maxCells===void 0?void 0:o.maxCells-o.usedCells;try{if(s!==void 0&&s<1&&e.pages.length&&!pt(e,t))throw new j(0,1);const i=wt(r.pagination,s,l,a),c=ce(e,t,i),d=ht(c.plan);if(l!==void 0&&d>l)throw new W(l,d);return{...c,cells:d}}catch(i){let c=i;throw i instanceof j&&o.maxPages!==void 0&&i.limit===s&&(c=new j(o.maxPages,o.usedPages+i.actual)),i instanceof W&&o.maxCells!==void 0&&(c=new W(o.maxCells,o.usedCells+i.actual)),new R("validate",`报表 ${n} 排版失败:${c instanceof Error?c.message:String(c)}`,c)}}function yt(e,t,r,n){const o=new Map,a=s=>{let l=o.get(s);return l===void 0&&(l=JSON.stringify([r,n,s]),o.set(s,l)),l};for(const s of t.pages)e.push({...s,...s.meta?{meta:{...s.meta,reportScope:JSON.stringify([r,n])}}:{},components:s.components.map(l=>l.table?{...l,table:{...l.table,id:a(l.table.id)}}:l)})}async function _r(e,t,r,n,o){const a=[];let s=0;for(const[c,d]of e.entries()){A(o);const u=n.maxPages===void 0?void 0:n.maxPages-a.length,f=n.maxCells===void 0?void 0:n.maxCells-s;if(u!==void 0&&u<1&&d.template.pages.length&&!pt(d.template,d.datasets))throw new j(n.maxPages,a.length+1);const m=await ft(d.template,d.datasets,wt(t[c]?.pagination,u,f,o));if(s+=ht(m),n.maxCells!==void 0&&s>n.maxCells)throw new W(n.maxCells,s);yt(a,m,c,r[c])}const l={schemaVersion:re.RENDER_PLAN_SCHEMA_VERSION,...e.some(c=>oe(c.template))?{requiresRecalculation:!0}:{},pages:a},i=je.validateRenderPlan(l);if(!i.ok)throw new R("validate",`重算渲染计划校验失败:${i.errors[0]?.message}`);return l}function zr(e,t={}){if(t.maxPages!==void 0&&(!Number.isSafeInteger(t.maxPages)||t.maxPages<1))throw new R("config","maxPages 应为正安全整数");if(t.maxCells!==void 0&&(!Number.isSafeInteger(t.maxCells)||t.maxCells<1))throw new R("config","maxCells 应为正安全整数");function r(o){const a=Object.prototype.hasOwnProperty.call(e,o)?e[o]:void 0;if(!a)throw new R("config",`未注册报表 ${o}`);return a}return Object.assign(async({reportIds:o,params:a,signal:s,onWarning:l,onQueryResult:i,...c})=>{A(s);const d=xt.createReportTaskReporter({...c,signal:s}),u=[...o],f={...a};if(u.length===0)throw new R("config","缺少报表 ID");const m=u.map(r),p=d.runSync("validate",()=>m.map(w=>ge.assertReportParams(w.params??(typeof w.template=="function"?[]:w.template.params)??[],f))),g=[],h=[];let v=0;const M=[];for(const[w,x]of m.entries()){A(s);const S=u[w],T={reportId:S,params:p[w],signal:s},P=typeof x.template=="function"?await d.run("query",()=>Dr(x.template,T,M),S):x.template;T.params=d.runSync("validate",()=>ge.assertReportParams(x.params??P.params??[],T.params),S);const L=await d.run("query",()=>Wr(x,T,S,i),S);d.runSync("validate",()=>{Hr(L,S),t.onDatasets?.(S,L,P),Gr(x,L,S,P,s)},S),A(s);const fe=d.runSync("layout",()=>qr(P,L,x,S,{maxPages:t.maxPages,usedPages:g.length,maxCells:t.maxCells,usedCells:v},s),S);v+=fe.cells,h.push({template:P,datasets:L}),yt(g,fe.plan,w,S),M.push(...fe.warnings.map(Mt=>`${S}: ${Mt}`))}A(s);const y={schemaVersion:re.RENDER_PLAN_SCHEMA_VERSION,...h.some(w=>oe(w.template))?{requiresRecalculation:!0}:{},pages:g},H=d.runSync("validate",()=>{const w=je.validateRenderPlan(y);if(!w.ok)throw new R("validate",`渲染计划校验失败:${w.errors.slice(0,3).map(x=>`${x.path}: ${x.message}`).join("; ")}`);return w});M.push(...H.warnings.map(w=>`${w.path}: ${w.message}`));const K=m.map(w=>({...w,pagination:{...w.pagination}})),I={maxPages:t.maxPages,maxCells:t.maxCells};try{Ie(y,{parts:h,rebuild:(w,x)=>_r(w,K,u,I,x)})}catch{M.push("来源数据无法建立本地重算口径;当前预览仅支持计划内编辑,请使用可序列化模板数据启用规则重算")}const C=l??t.onWarning??(w=>console.warn("[mach-report]",w));for(const w of M)A(s),C(w);return A(s),y},{getParamDefs:o=>$t.getReportParamDefs(e,o)})}function Le(e){if(e===void 0)return;const t=typeof e=="string"?e:JSON.stringify(e);return t.length>160?t.slice(0,157)+"…":t}function Jr(e){return/\.(?:repeat|binding)(?:\.|$)/.test(e)?/\.format(?:\.|$)/.test(e)?"format":"binding":/\.tree\.(?:idField|parentField|childrenField|labelField|input)$/.test(e)?"binding":/\.tree\.parentValues$/.test(e)?"calculation":/\.tree\.indentMm$/.test(e)?"format":/\.(?:computed|computeOptions|groups|groupBy|aggregates|grandTotal)(?:\.|\[|$)/.test(e)?"calculation":/\.(?:dataset|field|rowKey|revisionField|sourceTokenField|foreignKey|parentKey)$/.test(e)?"binding":/\.(?:style|headerStyle|format|rules|align|headerAlign|semanticRole|unit)(?:\.|\[|$)/.test(e)?"format":e.startsWith("$.template")?"structure":"metadata"}function Ne(e){const t=new Map;for(const r of e){if(!r||typeof r!="object"||!("field"in r)||typeof r.field!="string"||t.has(r.field))return;t.set(r.field,r)}return t}function Ur(e,t,r){return!e.startsWith("$.template.params")||t==="moved"?!1:/\.(?:type|required|min|max|minLength|maxLength|options|defaultValue)(?:\[|$)/.test(e)?!0:t!=="added"?!1:Array.isArray(r)?r.some(n=>!!n&&typeof n=="object"&&"required"in n&&n.required===!0):!!r&&typeof r=="object"&&"required"in r&&r.required===!0}function bt(e,t,r={}){const n=N.parseReportTemplate(e),o=N.parseReportTemplate(t),a=r.maxChanges??500;if(!Number.isSafeInteger(a)||a<1||a>1e4)throw new RangeError("maxChanges must be between 1 and 10000");const s={changes:[],totalChanges:0,breakingChanges:0,truncated:!1};function l(d,u,f,m){const p=Jr(u),g=d!=="moved"&&(p==="binding"||u==="$.id"||d==="removed"&&p==="structure"||Ur(u,d,m));s.totalChanges++,g&&s.breakingChanges++,s.changes.length<a&&s.changes.push({kind:d,category:p,path:u,before:Le(f),after:Le(m),breaking:g})}function i(d,u,f){const m=Ne(d),p=Ne(u);if(!m||!p)return!1;const g=new Map(u.map((h,v)=>[h.field,v]));Array.from(m).forEach(([h,v],M)=>{const y=`${f}[${JSON.stringify(h)}]`;p.has(h)?(g.get(h)!==M&&l("moved",y,M,g.get(h)),c(v,p.get(h),y)):l("removed",y,v,void 0)});for(const[h,v]of p)m.has(h)||l("added",`${f}[${JSON.stringify(h)}]`,void 0,v);return!0}function c(d,u,f){if(!(Object.is(d,u)||f==="$.revision")){if(d===void 0||u===void 0){l(d===void 0?"added":"removed",f,d,u);return}if(Array.isArray(d)&&Array.isArray(u)){if((f.endsWith(".columns")||f.endsWith(".params"))&&i(d,u,f))return;for(let m=0;m<Math.max(d.length,u.length);m++)c(d[m],u[m],`${f}[${m}]`)}else if(d&&u&&typeof d=="object"&&typeof u=="object"&&!Array.isArray(d)&&!Array.isArray(u)){const m=d,p=u;for(const g of new Set([...Object.keys(m),...Object.keys(p)]))c(m[g],p[g],`${f}.${g}`)}else l("modified",f,d,u)}}return c(n,o,"$"),s.truncated=s.totalChanges>s.changes.length,s}function k(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function E(e,t,r){typeof e=="string"?r.push({field:e,path:t}):Array.isArray(e)&&e.forEach((n,o)=>E(n,`${t}[${o}]`,r))}function D(e,t,r){if(Array.isArray(e)){e.forEach((n,o)=>D(n,`${t}[${o}]`,r));return}if(k(e))for(const[n,o]of Object.entries(e))["field","weightField"].includes(n)?E(o,`${t}.${n}`,r):n!=="value"&&n!=="style"&&D(o,`${t}.${n}`,r)}function Z(e,t,r){Array.isArray(e)&&e.forEach((n,o)=>{k(n)&&(typeof n.field=="string"&&n.valueField!==void 0&&n.valueField!==n.field&&r.summaries.add(n.field),E(n.valueField??n.field,`${t}[${o}].valueField`,r.fields),E(n.weightField,`${t}[${o}].weightField`,r.fields))})}function Xr(e,t,r){for(const o of["rowKey","revisionField","sourceTokenField"])E(e[o],`${t}.${o}`,r.fields);if(!e.matrix&&Array.isArray(e.columns)&&e.columns.forEach((o,a)=>{k(o)&&(typeof o.field=="string"&&r.fields.push({field:o.field,path:`${t}.columns[${a}].field`,summary:!0}),D(o.rules,`${t}.columns[${a}].rules`,r.fields),D(o.visibleWhen,`${t}.columns[${a}].visibleWhen`,r.fields))}),D(e.rowVisibleWhen,`${t}.rowVisibleWhen`,r.fields),Array.isArray(e.computed)&&e.computed.forEach((o,a)=>{k(o)&&(typeof o.field=="string"&&r.generated.add(o.field),D(o.expression,`${t}.computed[${a}].expression`,r.fields),E(o.dependsOn,`${t}.computed[${a}].dependsOn`,r.fields),E(o.groupBy,`${t}.computed[${a}].groupBy`,r.fields))}),(Array.isArray(e.groups)?e.groups:e.groupBy?[e.groupBy]:[]).forEach((o,a)=>{k(o)&&(E(o.field,`${t}.groups[${a}].field`,r.fields),E(o.subtotal,`${t}.groups[${a}].subtotal`,r.fields),Z(o.aggregates,`${t}.groups[${a}].aggregates`,r))}),k(e.grandTotal)&&(E(e.grandTotal.fields,`${t}.grandTotal.fields`,r.fields),Z(e.grandTotal.aggregates,`${t}.grandTotal.aggregates`,r)),k(e.matrix)&&(E(e.matrix.rowFields,`${t}.matrix.rowFields`,r.fields),E(e.matrix.columnFields,`${t}.matrix.columnFields`,r.fields),Z(e.matrix.measures,`${t}.matrix.measures`,r)),k(e.tree)){for(const o of["idField","parentField","labelField"])E(e.tree[o],`${t}.tree.${o}`,r.fields);Z(e.tree.aggregates,`${t}.tree.aggregates`,r)}k(e.detail)&&E(e.detail.parentKey,`${t}.detail.parentKey`,r.fields)}function vt(e){const t=[],r=e.repeat,n=r?{dataset:r.dataset,path:"$.template.repeat",fields:[],generated:new Set,summaries:new Set}:void 0;n&&r&&(E(r.rowKey,"$.template.repeat.rowKey",n.fields),typeof r.copies=="object"&&E(r.copies.field,"$.template.repeat.copies.field",n.fields),t.push(n));function o(a,s){if(Array.isArray(a)){a.forEach((l,i)=>o(l,`${s}[${i}]`));return}if(k(a)){if(n&&k(a.binding)&&E(a.binding.field,`${s}.binding.field`,n.fields),typeof a.dataset=="string"&&Array.isArray(a.columns)){const l={dataset:a.dataset,path:s,fields:[],generated:new Set,summaries:new Set};Xr(a,s,l),typeof a.foreignKey=="string"&&E(a.foreignKey,`${s}.foreignKey`,l.fields),t.push(l)}for(const[l,i]of Object.entries(a))o(i,`${s}.${l}`)}}return o(e,"$.template"),t}function Yr(e,t,r){for(const n of vt(e)){const o=Object.prototype.hasOwnProperty.call(t,n.dataset)?t[n.dataset]:void 0;if(!o){r.push({code:"dataset",severity:"error",path:`${n.path}.dataset`,message:`未声明数据集 ${n.dataset}`});continue}const a=new Set(o.fields.map(s=>s.field));n.fields.forEach(({field:s,path:l,summary:i})=>{!a.has(s)&&!n.generated.has(s)&&!(i&&n.summaries.has(s))&&r.push({code:"field",severity:"error",path:l,field:s,message:`数据集 ${n.dataset} 缺少字段 ${s}`})})}}function Qr(e,t,r,n){const o=r.maxSampleRows??1e3;let a;try{a=Ce(t,e.datasets,{maxRows:o})}catch(i){return n.push({code:"sample",severity:"error",path:"$.fixtures",fixture:e.name,message:i instanceof Error?i.message:String(i)}),!1}const s=Object.values(a).reduce((i,c)=>i+c.length,0);if(s>o)return n.push({code:"sample",severity:"error",path:"$.fixtures",fixture:e.name,message:`样例 ${s} 行超过预算 ${o},请显式选择验收样例`}),!1;const l=new Set(vt(t).map(i=>i.dataset));for(const[i,c]of Object.entries(r.dataSchemas??{}).filter(([d])=>l.has(d)))try{const d=ve.validateDatasetRows(a[i],c,{path:`$.datasets.${i}`,maxRows:o});if(n.push(...d.issues.map(u=>({...u,code:"sample",severity:"error",fixture:e.name}))),!d.ok)return!1}catch(d){return n.push({code:"dataset",severity:"error",path:`$.dataSchemas.${i}`,message:String(d)}),!1}return!0}function Zr(e,t){const r=e.pages[t.pageIndex]?.components[t.componentIndex]?.meta?.labelSource;if(r&&typeof r=="object"&&"pageIndex"in r&&"componentIndex"in r&&typeof r.pageIndex=="number"&&typeof r.componentIndex=="number")return{path:`$.template.pages[${r.pageIndex}].components[${r.componentIndex}]`,pageIndex:r.pageIndex,componentIndex:r.componentIndex};const n=e.pages[t.pageIndex]?.meta?.record;if(n&&typeof n=="object"&&"templatePageIndex"in n&&typeof n.templatePageIndex=="number")return{path:`$.template.pages[${n.templatePageIndex}].components[${t.componentIndex}]`,pageIndex:n.templatePageIndex,componentIndex:t.componentIndex}}function en(e,t,r){const n=Zr(t,r);if(n)return n;const o=t.pages[r.pageIndex]?.components[r.componentIndex],a=/^table:(\d+):(\d+)(?::|$)/.exec(o?.table?.id??"");if(a)return{path:`$.template.pages[${a[1]}].components[${a[2]}]`,pageIndex:Number(a[1]),componentIndex:Number(a[2])};for(const[s,l]of e.pages.entries()){const i=l.components.findIndex(c=>c===o||o?.nid!==void 0&&"nid"in c&&c.nid===o.nid);if(i>=0)return{path:`$.template.pages[${s}].components[${i}]`,pageIndex:s,componentIndex:i}}return{path:"$.template"}}function tn(e,t,r,n,o){const a=ge.validateReportParams(e.template.params??[],t.params??{});if(o.issues.push(...a.issues.map(s=>({...s,code:"params",severity:"error",fixture:t.name,path:s.path.replace(/^\$\.params/,`$.fixtures[${r}].params`)}))),!!a.ok&&Qr(t,e.template,n,o.issues))try{const{plan:s,warnings:l}=ce(e.template,t.datasets,{maxPages:n.maxPages??100,maxCells:n.maxCells??25e4}),i=(n.formats??["pdf","xlsx"]).flatMap(c=>St.inspectOutputCapabilities(s,c));o.issues.push(...l.map(c=>({code:"layout",severity:"warning",path:"$.template",fixture:t.name,message:c}))),o.issues.push(...i.map(c=>({code:"output",severity:n.strictOutputs?"error":"warning",...en(e.template,s,c),fixture:t.name,message:`${c.format}: ${c.message}`,diagnostic:c}))),o.samples.push({name:t.name,pages:s.pages.length,rows:gt(e.template,t.datasets),diagnostics:i})}catch(s){o.issues.push({code:"layout",severity:"error",path:"$.template",fixture:t.name,message:s instanceof Error?s.message:String(s)})}}function rn(e,t={}){const r={ok:!1,issues:[],samples:[]};try{for(const[o,a]of[["maxPages",t.maxPages],["maxCells",t.maxCells],["maxSampleRows",t.maxSampleRows]])if(a!==void 0&&(!Number.isSafeInteger(a)||a<1))throw new RangeError(`${o} must be a positive safe integer`);if((t.fixtures?.length??0)>20)throw new RangeError("At most 20 review fixtures are allowed");const n=N.parseReportTemplate(e);t.previous&&(r.changes=bt(t.previous,n),r.changes.breakingChanges&&!t.allowBreakingChanges&&r.issues.push({code:"compatibility",severity:"error",path:"$.template",message:`${r.changes.breakingChanges} 项字段或结构变更需要明确确认兼容性`})),t.dataSchemas&&Yr(n.template,t.dataSchemas,r.issues);for(const[o,a]of(t.fixtures??[]).entries())tn(n,a,o,t,r);t.fixtures?.length||r.issues.push({code:"sample",severity:"warning",path:"$.fixtures",message:"未提供验收样例,仅完成结构和字段检查,尚未验证排版与输出"})}catch(n){r.issues.push({code:"template",severity:"error",path:"$",message:n instanceof Error?n.message:String(n)})}return r.ok=r.issues.every(n=>n.severity!=="error"),r}exports.DEFAULT_LABEL_PAGE_LIMIT=We;exports.PaginateCellLimitError=W;exports.PaginatePageLimitError=j;exports.ReportCellEditError=b;exports.ReportSourceError=R;exports.applyReportCellEdit=$r;exports.applyReportCellEditBatch=Er;exports.applyReportEditResult=st;exports.countTemplatePages=or;exports.createReportCellEdit=wr;exports.createReportCellEditBatch=Rr;exports.createReportCellResolver=B;exports.createReportEditSession=Nr;exports.createReportSource=zr;exports.defineReport=Br;exports.diffReportTemplates=bt;exports.estimateListLayoutCells=ir;exports.formatReportCellEdit=q;exports.getReportCellContext=de;exports.getReportEditSession=Ar;exports.paginateTemplate=ce;exports.paginateTemplatePages=tt;exports.parseReportCellInput=Te;exports.projectListColumns=De;exports.registerReportEditSession=Ie;exports.relocateReportCellEdits=Fr;exports.reportCellEditKey=O;exports.reviewReportTemplate=rn;exports.summarizeReportCellEdits=Tr;exports.templateDatasetJsonSchema=jr;exports.templateDatasetRowCount=gt;
|