@agile-team/mach-report 2.6.1 → 2.8.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 +59 -8
- package/dist/ReportPreview-BKKDAv8e.js +4481 -0
- package/dist/ReportPreview-E3cm67Tk.cjs +6 -0
- package/dist/{assets-NVA_sftu.js → assets-B9qJku3V.js} +54 -57
- package/dist/assets-RZan7EyL.cjs +1 -0
- package/dist/capabilities-joSutDF8.js +63 -0
- package/dist/capabilities-xGTpnPjJ.cjs +1 -0
- package/dist/designer.cjs +1 -1
- package/dist/designer.d.cts +922 -753
- package/dist/designer.d.ts +922 -753
- package/dist/designer.js +490 -234
- package/dist/index.cjs +8 -8
- package/dist/index.d.cts +128 -3
- package/dist/index.d.ts +128 -3
- package/dist/index.js +971 -699
- package/dist/pdf.cjs +30 -30
- package/dist/pdf.d.cts +11 -3
- package/dist/pdf.d.ts +11 -3
- package/dist/pdf.js +1501 -1500
- package/dist/{plugin-Ds10VnQO.js → plugin-PCgxBVB2.js} +1 -1
- package/dist/{plugin-BqBkn_kI.cjs → plugin-mAfvgSey.cjs} +1 -1
- package/dist/progress-DD964VAB.js +102 -0
- package/dist/progress-KvhwXZ1Q.cjs +1 -0
- package/dist/{report-source-B9bENO0F.js → report-source-BXHNy_AD.js} +337 -332
- package/dist/report-source-CCAvFE3t.cjs +1 -0
- package/dist/server/node.d.cts +26 -3
- package/dist/server/node.d.ts +26 -3
- package/dist/server-node.cjs +1 -1
- package/dist/server-node.js +125 -92
- package/dist/server.cjs +1 -1
- package/dist/server.d.cts +28 -3
- package/dist/server.d.ts +28 -3
- package/dist/server.js +172 -164
- package/dist/style.css +1 -1
- package/dist/task-events-DQ276fn2.cjs +1 -0
- package/dist/task-events-Dpsvf_t2.js +47 -0
- package/dist/vue/async.d.cts +1553 -2083
- package/dist/vue/async.d.ts +1553 -2083
- package/dist/vue/index.d.cts +2465 -3310
- package/dist/vue/index.d.ts +2465 -3310
- package/dist/vue-async.cjs +1 -1
- package/dist/vue-async.js +3 -3
- package/dist/vue.cjs +1 -1
- package/dist/vue.js +159 -132
- package/dist/worker.cjs +1 -1
- package/dist/worker.d.cts +26 -3
- package/dist/worker.d.ts +26 -3
- package/dist/worker.js +110 -85
- package/dist/xlsx.cjs +14 -14
- package/dist/xlsx.d.cts +11 -3
- package/dist/xlsx.d.ts +11 -3
- package/dist/xlsx.js +656 -652
- package/package.json +2 -2
- package/dist/ReportPreview-Dk-28QAi.js +0 -2946
- package/dist/ReportPreview-FSvcBLjH.cjs +0 -6
- package/dist/assets-66UBlhES.cjs +0 -1
- package/dist/capabilities-CNjIirfo.js +0 -36
- package/dist/capabilities-D4xeVYSR.cjs +0 -1
- package/dist/grid-geometry-BNptEcMm.js +0 -65
- package/dist/grid-geometry-CZ_cYB6O.cjs +0 -1
- package/dist/report-source-BbNkkBDy.cjs +0 -1
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
"use strict";var zn=Object.create;var Ot=Object.defineProperty;var On=Object.getOwnPropertyDescriptor;var An=Object.getOwnPropertyNames;var Ln=Object.getPrototypeOf,qn=Object.prototype.hasOwnProperty;var Wn=(t,n,r,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(let a of An(n))!qn.call(t,a)&&a!==r&&Ot(t,a,{get:()=>n[a],enumerable:!(o=On(n,a))||o.enumerable});return t};var st=(t,n,r)=>(r=t!=null?zn(Ln(t)):{},Wn(n||!t||!t.__esModule?Ot(r,"default",{value:t,enumerable:!0}):r,t));const e=require("vue"),W=require("@agile-team/mach-report"),jt=require("./page-window-index-DEjnM6IB.cjs"),Kt=require("./render-plan-CckPEQyf.cjs"),ue=require("./_plugin-vue_export-helper-BHFhmbuH.cjs"),ve=require("./plugin-BqBkn_kI.cjs"),Hn=require("./grid-geometry-CZ_cYB6O.cjs");function pt(t){return t==null?[]:Array.isArray(t)?t.map(String).filter(n=>n!==""):String(t).split(",").map(n=>n.trim()).filter(n=>n!=="")}function jn(t){return pt(t).join(",")}class Te extends Error{constructor(n){super(n),this.name="PlanLoadError"}}function Kn(t={}){const{baseUrl:n="",headers:r,credentials:o,timeoutMs:a=3e4}=t,s=n.replace(/\/+$/,"");return async({url:i,method:f,params:C,signal:h})=>{let l=`${s}${i}`;if(C&&Object.keys(C).length>0){const k=l.indexOf("#"),A=k>=0?l.slice(k):"",R=k>=0?l.slice(0,k):l,d=R.indexOf("?"),g=d>=0?R.slice(0,d):R,w=new URLSearchParams(d>=0?R.slice(d+1):"");for(const[P,D]of Object.entries(C))w.set(P,D);l=`${g}?${w}${A}`}const u=(k,A)=>{const R=new Te(k);return Object.defineProperty(R,"cause",{value:A,configurable:!0,writable:!0}),R};if(h?.aborted)throw u(`请求已取消: ${i}`,h.reason);const m=new AbortController;let p;const E=()=>{m.signal.aborted||(p="external",m.abort(h?.reason))};h?.addEventListener("abort",E,{once:!0});const v=setTimeout(()=>{m.signal.aborted||(p="timeout",m.abort())},a);try{const k=await fetch(l,{method:f.toUpperCase(),headers:{Accept:"application/json",...r},credentials:o,signal:m.signal});if(!k.ok)throw new Te(`HTTP ${k.status} ${i}`);return await k.json()}catch(k){throw p==="timeout"?u(`请求超时(${a}ms): ${i}`,k):p==="external"?u(`请求已取消: ${i}`,k):k instanceof Te?k:u(`请求失败(${i}): ${k instanceof Error?k.message:String(k)}`,k)}finally{clearTimeout(v),h?.removeEventListener("abort",E)}}}function Ut(t,n,r={}){const o=r.pxPerMm??3.7795275590551185,a=e.computed(()=>Math.max(0,e.unref(r.gapPx)??18)),s=e.ref(0),i=e.ref(800),f=e.computed(()=>{const k=t.value?.pages??[];return jt.createPageWindowIndex(k.map(A=>A.pageHeightMm*o),a.value)}),C=e.computed(()=>{let k=0;for(const A of t.value?.pages??[])k=Math.max(k,A.pageWidthMm*o);return{w:k,h:f.value.totalHeightPx}}),h=e.computed(()=>f.value.window(i.value/n.value,s.value/n.value,e.unref(r.overscan)??1)),l=e.computed(()=>{const k=t.value;if(!k)return[];const{start:A,end:R}=h.value;return k.pages.slice(A,R+1).map((d,g)=>({page:d,index:A+g}))});let u=0,m=!1;function p(k){k&&(s.value=k.scrollTop,i.value=k.clientHeight||800)}function E(k,A){return R=>{u||m||(u=requestAnimationFrame(()=>{if(u=0,m||(p(R),A.value<=0))return;const d=Math.max(0,R.scrollTop+32)/n.value;k.value=Math.min(A.value,f.value.pageAt(d)+1)}))}}function v(){m=!0,u&&cancelAnimationFrame(u),u=0}return e.onScopeDispose(v),{contentSize:C,windowRange:h,visiblePages:l,makeScrollHandler:E,refreshViewport:p,pageOffsetPx:k=>f.value.offsetAt(k),destroy:v}}function Gt(t){const n=e.ref(1),r=e.ref("fit");let o=0;function a(){o&&cancelAnimationFrame(o),o=0}function s(){a(),o=requestAnimationFrame(()=>{if(o=0,r.value!=="fit")return;const f=t();!f?.viewport||f.viewport.clientWidth<=48||!Number.isFinite(f.pageWidthPx)||(n.value=Math.min(1,(f.viewport.clientWidth-48)/Math.max(1,f.pageWidthPx)))})}function i(f){if(f==="fit")r.value="fit",s();else{if(!Number.isFinite(f))return;a(),r.value="raw",n.value=Math.min(3,Math.max(.3,f/100))}}return e.getCurrentScope()&&e.onScopeDispose(a),{zoom:n,zoomMode:r,applyFitZoom:s,setZoom:i}}const Le=8;function qe(){return new Promise(t=>setTimeout(t,0))}function ze(t){return`p${t.pageWidthMm}x${t.pageHeightMm}`.replace(/[.+]/g,"_")}function gt(t){const n=new Map;return t.pages.forEach(a=>{n.has(ze(a))||n.set(ze(a),a)}),`<!doctype html><html><head><meta charset="utf-8"><style>${`.mr-page{margin:0 auto;page-break-after:always;}
|
|
2
|
-
.mr-page tr{break-inside:avoid;page-break-inside:avoid;}
|
|
3
|
-
.mr-comp{break-inside:avoid;page-break-inside:avoid;}
|
|
4
|
-
${[...n.values()].map(a=>`@page ${ze(a)}{size:${a.pageWidthMm}mm ${a.pageHeightMm}mm;margin:0;}`).join(`
|
|
5
|
-
`)}
|
|
6
|
-
body{margin:0;background:#fff;}`}</style></head><body>`}function vt(t){const n=W.renderPage(t,96,{},document);return n.style.page=ze(t),n.outerHTML}function ht(t){return{head:gt(t),pageChunks:t.pages.map(vt)}}async function Un(t,n={}){const r={schemaVersion:"mach-report-batch-print",pages:t.flatMap(i=>i.pages)};if(r.pages.length===0)return;const o=gt(r),a=document.createElement("iframe");a.style.cssText="position:fixed;right:0;bottom:0;width:0;height:0;border:0;visibility:hidden;",document.body.appendChild(a);let s=!1;try{const i=a.contentDocument;i.open(),i.write(o);for(let f=0;f<r.pages.length;f++)i.write(vt(r.pages[f])),f%Le===Le-1&&(n.onProgress?.(f+1,r.pages.length),await qe());i.write("</body></html>"),i.close(),await qe(),n.onProgress?.(r.pages.length,r.pages.length),s=!0,a.contentWindow?.focus(),a.contentWindow?.print()}catch(i){n.onError?.(i instanceof Error?`批量打印失败: ${i.message}`:"批量打印失败")}finally{s?setTimeout(()=>a.remove(),6e4):a.remove()}}function Jt(t){const{head:n,pageChunks:r}=ht(t);return{html:`${`<!doctype html><html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40"><head><meta charset="utf-8"><!--[if gte mso 9]><xml><w:WordDocument><w:View>Print</w:View><w:Zoom>100</w:Zoom></w:WordDocument></xml><![endif]-->${n.replace(/^<!doctype html><html><head>/,"")}`}${r.join("")}</body></html>`,filename:"mach-report.doc"}}function Zt(t,n){let r=null,o=!1,a=!1,s=0;const i=new Map,f=new Map;let C=null,h=null,l=null,u=null,m=null;function p(b,y){return!a&&t.value===b&&s===y}function E(){if(a)return;const b=[...i.values()].reverse().find(y=>p(y.plan,y.epoch))?.format??null;b!==C&&(C=b,n.onBusy?.(b))}function v(b,y,F){const T={};return i.set(T,{plan:b,epoch:y,format:F}),E(),T}function k(b){i.delete(b),E()}function A(){for(const[b,y]of f)p(y.plan,y.epoch)||(b.close(),f.delete(b))}function R(){s++,g(),E(),A()}const d=e.watch(t,R,{flush:"sync"});function g(){r?.remove(),r=null}function w(){a=!0,s++,d(),g(),A(),i.clear(),n.onPrinting?.(!1)}function P(b,y){const F=URL.createObjectURL(b);setTimeout(()=>URL.revokeObjectURL(F),1e4);const T=document.createElement("a");T.href=F,T.download=y,T.click()}async function D(){if(o)return;const b=t.value;if(a||!b||b.pages.length===0)return;const y=s;o=!0,n.onPrinting?.(!0),g();const F=gt(b);r=document.createElement("iframe"),r.style.cssText="position:fixed;right:0;bottom:0;width:0;height:0;border:0;visibility:hidden;",document.body.appendChild(r);const T=r;try{const q=T.contentDocument;q.open(),q.write(F);for(let z=0;z<b.pages.length;z++)if(q.write(vt(b.pages[z])),z%Le===Le-1&&await qe(),T!==r)return;if(q.write("</body></html>"),q.close(),await qe(),!p(b,y)||T!==r)return;T.contentWindow?.focus(),T.contentWindow?.print()}catch{T===r&&g(),p(b,y)&&n.onError("调用打印失败,请改用导出 PDF","print")}finally{o=!1,a||n.onPrinting?.(!1)}}function N(b,y){if(h?.plan===b&&h.epoch===y)return h.promise;const F=Promise.resolve().then(()=>{if(!p(b,y))throw new Error("报表已切换或卸载");return n.getPdfExporter()(b,T=>{p(b,y)&&n.onWarning?.(T)})}).finally(()=>{h?.promise===F&&(h=null)});return h={plan:b,epoch:y,promise:F},F}async function B(){const b=t.value;if(a||!b||b.pages.length===0)return;const y=s;if(l?.plan===b&&l.epoch===y)return l.promise;const F=v(b,y,"PDF"),T=(async()=>{try{const q=await N(b,y);if(!p(b,y))return;P(new Blob([q],{type:"application/pdf"}),"mach-report.pdf")}catch(q){p(b,y)&&n.onError(q instanceof Error?`PDF 导出失败: ${q.message}`:"PDF 导出失败","pdf")}finally{k(F),l?.token===F&&(l=null)}})();return l={plan:b,epoch:y,promise:T,token:F},T}async function $(){const b=t.value;if(a||!b||b.pages.length===0)return;const y=s;if(u?.plan===b&&u.epoch===y)return u.promise;const F={...n.getXlsxOptions?.()},T=v(b,y,"Excel"),q=(async()=>{try{const{renderPlanToXlsx:z}=await import("@agile-team/mach-report/xlsx");if(!p(b,y))return;const{buffer:M,warnings:ee}=await z(b,F);if(!p(b,y)||(ee.length>0&&n.onWarning?.(`Excel 导出有 ${ee.length} 条提示:${ee.slice(0,2).join(";")}`),!p(b,y)))return;P(new Blob([M],{type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}),"mach-report.xlsx")}catch(z){p(b,y)&&n.onError(z instanceof Error?`Excel 导出失败: ${z.message}`:"Excel 导出失败","export")}finally{k(T),u?.token===T&&(u=null)}})();return u={plan:b,epoch:y,promise:q,token:T},q}async function I(){const b=t.value;if(a||!b||b.pages.length===0)return;const y=s;if(m?.plan===b&&m.epoch===y)return m.promise;const F=v(b,y,"图片"),T=(async()=>{try{const{blobs:q}=await W.renderPlanToImages(b,{dpr:Math.min(2,typeof devicePixelRatio=="number"?devicePixelRatio:1)});if(!p(b,y))return;q.forEach((z,M)=>{P(z,q.length>1?`mach-report-page-${M+1}.png`:"mach-report.png")})}catch(q){p(b,y)&&n.onError(q instanceof Error?`图片导出失败: ${q.message}`:"图片导出失败","export")}finally{k(F),m?.token===F&&(m=null)}})();return m={plan:b,epoch:y,promise:T,token:F},T}function L(){const b=t.value;if(!(a||!b||b.pages.length===0))try{const{html:y,filename:F}=Jt(b);P(new Blob([y],{type:"application/msword;charset=utf-8"}),F)}catch(y){n.onError(y instanceof Error?`Word 导出失败: ${y.message}`:"Word 导出失败","export")}}async function H(b){const y=t.value;if(!(a||!y||y.pages.length===0)){if(b==="pdf"){await B();return}if(b==="xlsx"||b==="excel"){await $();return}if(b==="png"||b==="image"){await I();return}if(b==="word"||b==="doc"){L();return}if(b!=="html"){n.onError(`不支持的导出格式:${b}`,"export");return}try{const{head:F,pageChunks:T}=ht(y),q=`${F}${T.join("")}</body></html>`;P(new Blob([q],{type:"text/html;charset=utf-8"}),"mach-report.html")}catch(F){n.onError(F instanceof Error?`HTML 导出失败: ${F.message}`:"HTML 导出失败","export")}}}function K(){const b=t.value;if(a||!b||b.pages.length===0)return;const y=s,F=window.open("","_blank");if(!F){n.onError("浏览器拦截了弹窗,请允许弹窗后重试","pdf");return}f.set(F,{plan:b,epoch:y});const T=v(b,y,"PDF");N(b,y).then(q=>{if(!p(b,y)||F.closed){f.delete(F)&&F.close();return}const z=URL.createObjectURL(new Blob([q],{type:"application/pdf"}));setTimeout(()=>URL.revokeObjectURL(z),6e4);const M=F.document;M.title="PDF 预览",M.documentElement.style.height="100%",M.body.style.cssText="margin:0;height:100%;";const ee=M.createElement("iframe");ee.title="PDF 预览",ee.style.cssText="display:block;width:100%;height:100%;border:0;",ee.src=z,M.body.replaceChildren(ee),f.delete(F)}).catch(q=>{F.close(),f.delete(F),p(b,y)&&n.onError(q instanceof Error?`PDF 预览失败: ${q.message}`:"PDF 预览失败","pdf")}).finally(()=>k(T))}return{print:D,exportAs:H,exportImages:I,exportWord:L,openPdfWindow:K,invalidatePending:R,releasePrintFrame:g,dispose:w}}const Yt="mrp-hit";function Gn(t){t.querySelectorAll(`mark.${Yt}`).forEach(r=>{const o=r.parentNode;if(o){for(;r.firstChild;)o.insertBefore(r.firstChild,r);r.remove(),o.normalize()}})}function Jn(t,n){const r=n.trim();if(!r)return 0;const o=r.toLowerCase(),a=document.createTreeWalker(t,NodeFilter.SHOW_TEXT,{acceptNode(f){const C=f.parentElement;return!C||C.closest("mark")||/^(SCRIPT|STYLE)$/.test(C.tagName)?NodeFilter.FILTER_REJECT:(f.nodeValue??"").toLowerCase().includes(o)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT}}),s=[];for(let f=a.nextNode();f;f=a.nextNode())s.push(f);let i=0;for(const f of s){const C=f.nodeValue??"",h=C.toLowerCase(),l=f.parentElement;if(!l)continue;const u=document.createDocumentFragment();let m=0,p=h.indexOf(o);for(;p>=0;){p>m&&u.appendChild(document.createTextNode(C.slice(m,p)));const E=document.createElement("mark");E.className=Yt,E.textContent=C.slice(p,p+r.length),u.appendChild(E),i++,m=p+r.length,p=h.indexOf(o,m)}m<C.length&&u.appendChild(document.createTextNode(C.slice(m))),l.replaceChild(u,f)}return i}const Zn=new Set(["line","rect","ellipse","chart"]);function*Yn(t){for(const n of t.cells??[])for(const r of n??[])yield r?.text??"",yield*r?.children??[]}function*Xn(t){if(Kt.isRichText(t))for(const n of t.richParagraphs)for(const r of n.segments??[])yield(r.kind==="field"?r.field:r.text)??"";else t.lines?.length?yield*t.lines:yield t.text??""}function*Qn(t){const n=[t.values()];for(;n.length>0;){const r=n[n.length-1].next();if(r.done){n.pop();continue}const o=r.value;if(typeof o=="string"){yield o;continue}yield"",!Kt.isImageBackedComponent(o)&&(o.kind==="text"?n.push(Xn(o)):o.grid?n.push(Yn(o.grid)):Zn.has(o.kind)||(yield o.fallbackText??""))}}function*_n(t){for(let n=0;n<t.pages.length;n++){for(const r of Qn(t.pages[n].components))yield{text:r,pageIndex:n};yield{text:"",pageIndex:n}}}function eo(t,n){const r=t.toLowerCase();let o=0;for(let a=r.indexOf(n);a>=0;a=r.indexOf(n,a+n.length))o++;return o}function to(t){const{plan:n,gotoPage:r,highlight:o,clearHighlights:a}=t,s=e.ref(!1),i=e.ref(""),f=e.ref(0),C=e.ref(0),h=e.ref(!1);let l=[];const u=e.computed(()=>{if(C.value===0)return null;const g=f.value;let w=0,P=l.length-1;for(;w<P;){const N=w+P>>>1;l[N].cumulative<=g?w=N+1:P=N}const D=l[w];return D?{pageIndex:D.pageIndex,occurrence:g-(l[w-1]?.cumulative??0)}:null});let m=null,p=null,E=0;function v(){E++,m&&clearTimeout(m),p&&clearTimeout(p),m=p=null,h.value=!1}function k(g){i.value=g,f.value=0,C.value=0,l=[],h.value=!1;const w=g.trim().toLowerCase(),P=n.value;if(!w||!P)return;h.value=!0;const D=E,N=_n(P),B=[];let $=0;function I(){if(p=null,D!==E||P!==n.value)return;const L=performance.now();let H=0;for(;H<5e3&&performance.now()-L<4;){const K=N.next();if(K.done){l=B,C.value=$,h.value=!1,l[0]&&r(l[0].pageIndex+1);return}const b=eo(K.value.text,w);if(b>0){$+=b;const y=B[B.length-1];y?.pageIndex===K.value.pageIndex?y.cumulative=$:B.push({pageIndex:K.value.pageIndex,cumulative:$})}H++}p=setTimeout(I,0)}I()}function A(g){if(v(),i.value=g,f.value=C.value=0,l=[],!g.trim()){k("");return}h.value=!0,m=setTimeout(()=>{m=null,k(g)},Math.max(0,e.unref(t.debounceMs)??200))}function R(g){const w=C.value;if(w===0||h.value)return;f.value=(f.value+g+w)%w;const P=u.value;P&&r(P.pageIndex+1)}function d(){v(),i.value="",f.value=C.value=0,l=[]}return e.watch(n,d,{flush:"sync"}),e.onScopeDispose(d),{visible:s,query:i,matchIndex:f,matchCount:C,activeMatch:u,searching:h,toggle:()=>{s.value=!s.value},onInput:A,onNav:R,apply:g=>{i.value.trim()&&o(g,i.value.trim())},clear:g=>{a(g)},reset:d}}function no(t,n){const r=e.computed(()=>{if(t.value)return!0;if(typeof location>"u")return!1;try{return new URLSearchParams(location.search).get("mrp-debug")==="1"}catch{return!1}}),o=e.computed(()=>!r.value||!n.plan.value?0:Math.round(JSON.stringify(n.plan.value).length/1024)),a=e.computed(()=>!r.value||!n.plan.value?null:{pages:n.pageCount.value,window:`${n.windowRange.value.start}-${n.windowRange.value.end}`,zoom:`${Math.round(n.zoom.value*100)}%`,loadMs:`${n.loadMs.value}ms`,planKB:o.value});return{enabled:r,debugStats:a}}function oo(t,n){const{thumbsRoot:r,visible:o,renderThumbCanvas:a}=n,s=e.ref(0),i=e.ref(800),f=e.computed(()=>(t.value?.pages??[]).map(R=>Math.round(R.pageHeightMm/R.pageWidthMm*116))),C=e.computed(()=>jt.createPageWindowIndex(f.value.map(R=>R+20),8)),h=e.computed(()=>C.value.window(i.value,s.value,1)),l=e.computed(()=>{if(!o.value)return[];const{start:R,end:d}=h.value;return f.value.slice(R,d+1).map((g,w)=>({index:R+w,height:g}))});let u=0,m=0,p=!1;function E(){const R=r.value;R&&(s.value=R.scrollTop,i.value=R.clientHeight||800)}function v(){p||m||(m=requestAnimationFrame(()=>{m=0,E()}))}function k(){if(l.value,u&&cancelAnimationFrame(u),u=0,p||!o.value||!t.value||!r.value)return;E();const R=l.value,d=t.value,g=r.value;let w=0;function P(){if(u=0,!(p||!o.value||t.value!==d||r.value!==g)){for(let D=0;w<R.length&&D<2;D++,w++){const N=R[w].index,B=g.querySelector(`[data-thumb="${N+1}"]`);if(!B||B.childElementCount>0)continue;const $=a(N);$&&($.style.width="100%",$.style.height="100%",$.style.display="block",B.appendChild($))}w<R.length&&(u=requestAnimationFrame(P))}}u=requestAnimationFrame(P)}function A(){p=!0,u&&cancelAnimationFrame(u),m&&cancelAnimationFrame(m),u=m=0}return e.onScopeDispose(A),{schedule:k,destroy:A,onScroll:v,windowRange:h,visibleThumbs:l}}function ro(){const t=e.shallowRef(0);return{loadMs:t,start(){return typeof performance<"u"?performance.now():0},end(n){t.value=n?Math.round(performance.now()-n):0}}}function ao(t){const n=e.ref(null),r=e.ref(null);function o(){n.value?.focus(),n.value?.select()}e.watch(t.visible,i=>{i&&e.nextTick(o)});function a(){t.close(),e.nextTick(()=>r.value?.focus())}function s(i){i.isComposing||i.keyCode===229||i.key!=="Enter"&&i.key!=="Escape"||(i.preventDefault(),i.stopPropagation(),i.key==="Escape"?a():t.navigate(i.shiftKey?-1:1))}return{input:n,toggle:r,focus:o,close:a,onKeydown:s}}const lo=["aria-label"],so={class:"mrp-title"},io=["disabled"],co={class:"mrp-pageinfo"},uo=["disabled"],fo=["disabled"],mo={key:2,class:"mrp-search"},po=["placeholder","aria-label","value"],go={key:0,class:"mrp-search-count",role:"status"},vo=["disabled","aria-label"],ho=["disabled","aria-label"],bo=["aria-label"],yo=["aria-label","aria-pressed"],wo=["aria-pressed"],xo=["disabled"],Eo=["disabled"],ko=["disabled"],Co=["disabled"],Po=["disabled"],So=["disabled"],Bo=["disabled"],$o=["aria-label","aria-expanded"],Ro=e.defineComponent({__name:"ReportToolbar",props:{pageCount:{},currentPage:{},zoomMode:{},zoom:{},showExport:{type:Boolean},showPrint:{type:Boolean},showPdfWindow:{type:Boolean},messages:{},search:{},thumbsVisible:{type:Boolean},showImport:{type:Boolean},showSearch:{type:Boolean},showThumbnails:{type:Boolean},showZoom:{type:Boolean},exportFormats:{},showSettings:{type:Boolean},settingsOpen:{type:Boolean},busy:{type:Boolean}},emits:["goto","zoom","export","print","pdf-window","search-input","search-nav","search-toggle","thumbs-toggle","import-excel","settings-toggle"],setup(t,{expose:n,emit:r}){const o=t,a=r,s=ao({visible:()=>o.search.visible,navigate:h=>a("search-nav",h),close:()=>{o.search.visible&&a("search-toggle")}}),{input:i,toggle:f}=s;n({focusSearch:s.focus});function C(h,l,u){return h.replace("{cur}",String(l)).replace("{total}",String(u))}return(h,l)=>(e.openBlock(),e.createElementBlock("div",{class:"mrp-toolbar",role:"toolbar","aria-label":t.messages.title},[e.createElementVNode("span",so,e.toDisplayString(t.messages.title),1),t.pageCount>0?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createElementVNode("button",{class:"mrp-nav",type:"button",disabled:t.currentPage<=1,onClick:l[0]||(l[0]=u=>h.$emit("goto",t.currentPage-1))},e.toDisplayString(t.messages.prevPage),9,io),e.createElementVNode("span",co,e.toDisplayString(C(t.messages.pageInfo,t.currentPage,t.pageCount)),1),e.createElementVNode("button",{class:"mrp-nav",type:"button",disabled:t.currentPage>=t.pageCount,onClick:l[1]||(l[1]=u=>h.$emit("goto",t.currentPage+1))},e.toDisplayString(t.messages.nextPage),9,uo)],64)):e.createCommentVNode("",!0),l[23]||(l[23]=e.createElementVNode("span",{class:"mrp-spacer"},null,-1)),t.showImport?(e.openBlock(),e.createElementBlock("button",{key:1,class:"mrp-nav mrp-import-excel",type:"button",disabled:t.busy,onClick:l[2]||(l[2]=u=>h.$emit("import-excel"))},e.toDisplayString(t.messages.importExcel??"导入 Excel 模板"),9,fo)):e.createCommentVNode("",!0),t.showSearch!==!1&&t.search.visible?(e.openBlock(),e.createElementBlock("div",mo,[e.createElementVNode("input",{ref_key:"searchInputRef",ref:i,class:"mrp-search-input",type:"text",placeholder:t.messages.searchPlaceholder,"aria-label":t.messages.search??t.messages.searchPlaceholder,value:t.search.query,onInput:l[3]||(l[3]=u=>h.$emit("search-input",u.target.value)),onKeydown:l[4]||(l[4]=(...u)=>e.unref(s).onKeydown&&e.unref(s).onKeydown(...u))},null,40,po),t.search.query?(e.openBlock(),e.createElementBlock("span",go,e.toDisplayString(t.search.searching?t.messages.searching??"搜索中…":C(t.messages.matchInfo,t.search.matchCount>0?t.search.matchIndex+1:0,t.search.matchCount)),1)):e.createCommentVNode("",!0),e.createElementVNode("button",{class:"mrp-nav",type:"button",disabled:t.search.matchCount===0,"aria-label":t.messages.prevSearchMatch,onClick:l[5]||(l[5]=u=>h.$emit("search-nav",-1))},e.toDisplayString(t.messages.prevMatch),9,vo),e.createElementVNode("button",{class:"mrp-nav",type:"button",disabled:t.search.matchCount===0,"aria-label":t.messages.nextSearchMatch,onClick:l[6]||(l[6]=u=>h.$emit("search-nav",1))},e.toDisplayString(t.messages.nextMatch),9,ho),e.createElementVNode("button",{class:"mrp-nav mrp-search-close",type:"button","aria-label":t.messages.closeSearch,onClick:l[7]||(l[7]=(...u)=>e.unref(s).close&&e.unref(s).close(...u))},"×",8,bo)])):e.createCommentVNode("",!0),t.showSearch!==!1?(e.openBlock(),e.createElementBlock("button",{key:3,ref_key:"searchToggleRef",ref:f,class:e.normalizeClass(["mrp-nav",{"mrp-active":t.search.visible}]),type:"button",title:"Ctrl+F","aria-label":t.messages.search??t.messages.searchPlaceholder,"aria-pressed":t.search.visible,onClick:l[8]||(l[8]=u=>h.$emit("search-toggle"))},[...l[21]||(l[21]=[e.createElementVNode("svg",{width:"13",height:"13",viewBox:"0 0 20 20",fill:"none","aria-hidden":"true"},[e.createElementVNode("circle",{cx:"8.5",cy:"8.5",r:"5.5",stroke:"currentColor","stroke-width":"1.6"}),e.createElementVNode("path",{d:"m13 13 4 4",stroke:"currentColor","stroke-width":"1.6","stroke-linecap":"round"})],-1)])],10,yo)):e.createCommentVNode("",!0),t.showThumbnails!==!1?(e.openBlock(),e.createElementBlock("button",{key:4,class:e.normalizeClass(["mrp-nav",{"mrp-active":t.thumbsVisible}]),type:"button","aria-pressed":t.thumbsVisible,onClick:l[9]||(l[9]=u=>h.$emit("thumbs-toggle"))}," ▦ "+e.toDisplayString(t.messages.thumbnails),11,wo)):e.createCommentVNode("",!0),t.showZoom!==!1?(e.openBlock(),e.createElementBlock("button",{key:5,class:e.normalizeClass(["mrp-nav",{"mrp-active":t.zoomMode==="fit"}]),type:"button",onClick:l[10]||(l[10]=u=>h.$emit("zoom","fit"))},e.toDisplayString(t.messages.fitWidth),3)):e.createCommentVNode("",!0),t.showZoom!==!1?(e.openBlock(),e.createElementBlock("button",{key:6,class:e.normalizeClass(["mrp-nav",{"mrp-active":t.zoomMode==="raw"&&Math.round(t.zoom*100)===100}]),type:"button",onClick:l[11]||(l[11]=u=>h.$emit("zoom",100))}," 100% ",2)):e.createCommentVNode("",!0),t.showZoom!==!1?(e.openBlock(),e.createElementBlock("button",{key:7,class:e.normalizeClass(["mrp-nav",{"mrp-active":t.zoomMode==="raw"&&Math.round(t.zoom*100)===150}]),type:"button",onClick:l[12]||(l[12]=u=>h.$emit("zoom",150))}," 150% ",2)):e.createCommentVNode("",!0),t.showExport&&(!t.exportFormats||t.exportFormats.includes("html"))?(e.openBlock(),e.createElementBlock("button",{key:8,class:"mrp-nav",type:"button",disabled:t.busy,onClick:l[13]||(l[13]=u=>h.$emit("export","html"))},e.toDisplayString(t.messages.exportHtml),9,xo)):e.createCommentVNode("",!0),t.showExport&&(!t.exportFormats||t.exportFormats.includes("pdf"))?(e.openBlock(),e.createElementBlock("button",{key:9,class:"mrp-nav",type:"button",disabled:t.busy,onClick:l[14]||(l[14]=u=>h.$emit("export","pdf"))},e.toDisplayString(t.messages.exportPdf),9,Eo)):e.createCommentVNode("",!0),t.showExport&&(!t.exportFormats||t.exportFormats.includes("xlsx"))?(e.openBlock(),e.createElementBlock("button",{key:10,class:"mrp-nav",type:"button",disabled:t.busy,onClick:l[15]||(l[15]=u=>h.$emit("export","xlsx"))},e.toDisplayString(t.messages.exportExcel),9,ko)):e.createCommentVNode("",!0),t.showExport&&(!t.exportFormats||t.exportFormats.includes("png"))?(e.openBlock(),e.createElementBlock("button",{key:11,class:"mrp-nav",type:"button",disabled:t.busy,onClick:l[16]||(l[16]=u=>h.$emit("export","png"))},e.toDisplayString(t.messages.exportImage),9,Co)):e.createCommentVNode("",!0),t.showExport&&(!t.exportFormats||t.exportFormats.includes("word"))?(e.openBlock(),e.createElementBlock("button",{key:12,class:"mrp-nav",type:"button",disabled:t.busy,onClick:l[17]||(l[17]=u=>h.$emit("export","word"))},e.toDisplayString(t.messages.exportWord),9,Po)):e.createCommentVNode("",!0),t.showPrint?(e.openBlock(),e.createElementBlock("button",{key:13,class:"mrp-nav",type:"button",disabled:t.busy,onClick:l[18]||(l[18]=u=>h.$emit("print"))},e.toDisplayString(t.messages.print),9,So)):e.createCommentVNode("",!0),t.showPdfWindow?(e.openBlock(),e.createElementBlock("button",{key:14,class:"mrp-nav",type:"button",disabled:t.busy,onClick:l[19]||(l[19]=u=>h.$emit("pdf-window"))},e.toDisplayString(t.messages.pdfWindow),9,Bo)):e.createCommentVNode("",!0),t.showSettings?(e.openBlock(),e.createElementBlock("button",{key:15,class:"mrp-nav mrp-settings-toggle",type:"button","aria-label":t.messages.settings,"aria-haspopup":"dialog","aria-expanded":!!t.settingsOpen,onClick:l[20]||(l[20]=u=>h.$emit("settings-toggle"))},[l[22]||(l[22]=e.createStaticVNode('<svg width="14" height="14" viewBox="0 0 20 20" fill="none" aria-hidden="true" data-v-249cf7b0><path d="M3 5h14M3 10h14M3 15h14" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" data-v-249cf7b0></path><circle cx="7" cy="5" r="2" fill="var(--mrp-toolbar-bg)" stroke="currentColor" stroke-width="1.5" data-v-249cf7b0></circle><circle cx="13" cy="10" r="2" fill="var(--mrp-toolbar-bg)" stroke="currentColor" stroke-width="1.5" data-v-249cf7b0></circle><circle cx="8" cy="15" r="2" fill="var(--mrp-toolbar-bg)" stroke="currentColor" stroke-width="1.5" data-v-249cf7b0></circle></svg>',1)),e.createTextVNode(" "+e.toDisplayString(t.messages.settings),1)],8,$o)):e.createCommentVNode("",!0)],8,lo))}}),Xt=ue._export_sfc(Ro,[["__scopeId","data-v-249cf7b0"]]),Io=["aria-label"],Do={class:"mrp-settings-header"},No=["aria-label"],Mo={class:"mrp-settings-content"},Vo={key:0},Fo={class:"mrp-settings-option"},To=["checked","disabled"],zo={class:"mrp-settings-option"},Oo=["value","disabled"],Ao={key:0},Lo=["checked","disabled","onChange"],qo={key:1,class:"mrp-settings-note"},Wo={key:2,class:"mrp-settings-note"},Ho=["disabled"],jo=e.defineComponent({__name:"ReportSettings",props:{available:{},enabled:{},messages:{},persistedEditing:{type:Boolean},busy:{type:Boolean},interaction:{}},emits:["change","reset","close","interaction"],setup(t,{emit:n}){const r=t,o=n,a=e.ref(null),s=e.ref(null);let i=null;const f=e.computed(()=>[{label:r.messages.settingsDisplay,tools:[["search",r.messages.search],["thumbnails",r.messages.thumbnails],["zoom",r.messages.zoom]]},{label:r.messages.settingsExport,tools:[["html",r.messages.exportHtml],["pdf",r.messages.exportPdf],["xlsx",r.messages.exportExcel],["png",r.messages.exportImage],["word",r.messages.exportWord],["print",r.messages.print],["pdfWindow",r.messages.pdfWindow]]},{label:r.messages.settingsData,tools:[["editing",r.messages.editCell],["import",r.messages.importExcel]]}].map(l=>({...l,tools:l.tools.map(([u,m])=>({key:u,label:m}))})));function C(l,u){const m=l.target,p=m.checked;m.checked=r.enabled[u],o("change",u,p)}function h(l){if(l.key==="Escape"){l.preventDefault(),o("close");return}if(l.key!=="Tab")return;const u=a.value?.querySelectorAll("a[href],button:not(:disabled),input:not(:disabled),textarea:not(:disabled),select:not(:disabled),[tabindex='0']"),m=u?.[0],p=u?.[u.length-1];l.shiftKey&&document.activeElement===m&&(l.preventDefault(),p?.focus()),!l.shiftKey&&document.activeElement===p&&(l.preventDefault(),m?.focus())}return e.onMounted(()=>{i=document.activeElement instanceof HTMLElement?document.activeElement:null,s.value?.focus()}),e.onUnmounted(()=>i?.focus()),(l,u)=>(e.openBlock(),e.createElementBlock("div",{class:"mrp-settings-backdrop",onClick:u[4]||(u[4]=e.withModifiers(m=>l.$emit("close"),["self"])),onKeydown:h},[e.createElementVNode("section",{ref_key:"panel",ref:a,class:"mrp-settings-panel",role:"dialog","aria-modal":"true","aria-label":t.messages.settings},[e.createElementVNode("header",Do,[e.createElementVNode("div",null,[e.createElementVNode("strong",null,e.toDisplayString(t.messages.settings),1),e.createElementVNode("p",null,e.toDisplayString(t.messages.settingsLocal),1)]),e.createElementVNode("button",{ref_key:"closeButton",ref:s,class:"mrp-settings-close",type:"button","aria-label":t.messages.settingsClose,onClick:u[0]||(u[0]=m=>l.$emit("close"))},"×",8,No)]),e.createElementVNode("div",Mo,[e.renderSlot(l.$slots,"default",{},void 0,!0),t.interaction?(e.openBlock(),e.createElementBlock("fieldset",Vo,[e.createElementVNode("legend",null,e.toDisplayString(t.messages.settingsPanes),1),e.createElementVNode("label",Fo,[e.createElementVNode("span",null,e.toDisplayString(t.messages.freezeHeaders),1),e.createElementVNode("input",{type:"checkbox",checked:t.interaction.freezeHeaders,disabled:t.busy,onChange:u[1]||(u[1]=m=>l.$emit("interaction",{freezeHeaders:m.target.checked}))},null,40,To)]),e.createElementVNode("label",zo,[e.createElementVNode("span",null,e.toDisplayString(t.messages.frozenColumns),1),e.createElementVNode("input",{class:"mrp-frozen-count",type:"number",min:"0",max:"20",value:t.interaction.frozenColumns??0,disabled:t.busy,onChange:u[2]||(u[2]=m=>l.$emit("interaction",{frozenColumns:Math.max(0,Math.min(20,Number(m.target.value)||0))}))},null,40,Oo)])])):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,m=>(e.openBlock(),e.createElementBlock("fieldset",{key:m.label},[e.createElementVNode("legend",null,e.toDisplayString(m.label),1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.tools,p=>(e.openBlock(),e.createElementBlock("label",{key:p.key,class:e.normalizeClass(["mrp-settings-option",{"mrp-settings-unavailable":!t.available[p.key]}])},[e.createElementVNode("span",null,[e.createTextVNode(e.toDisplayString(p.label),1),t.available[p.key]?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("small",Ao,e.toDisplayString(t.messages.settingsUnavailable),1))]),e.createElementVNode("input",{type:"checkbox",checked:t.enabled[p.key],disabled:t.busy||!t.available[p.key],onChange:E=>C(E,p.key)},null,40,Lo)],2))),128))]))),128)),t.available.editing?(e.openBlock(),e.createElementBlock("p",qo,e.toDisplayString(t.persistedEditing?t.messages.editingSaved:t.messages.editingLocal),1)):e.createCommentVNode("",!0),t.available.import?(e.openBlock(),e.createElementBlock("p",Wo,e.toDisplayString(t.messages.importLocal),1)):e.createCommentVNode("",!0)]),e.createElementVNode("footer",null,[e.createElementVNode("button",{type:"button",disabled:t.busy,onClick:u[3]||(u[3]=m=>l.$emit("reset"))},e.toDisplayString(t.messages.settingsReset),9,Ho)])],8,Io)],32))}}),Ko=ue._export_sfc(jo,[["__scopeId","data-v-b0efd4aa"]]),Uo={class:"mrp-empty",role:"status"},Go={key:0},Jo=e.defineComponent({__name:"ReportEmpty",props:{title:{},description:{}},setup(t){return(n,r)=>(e.openBlock(),e.createElementBlock("div",Uo,[r[0]||(r[0]=e.createStaticVNode('<svg class="mrp-empty-art" viewBox="0 0 160 112" fill="none" aria-hidden="true" data-v-07e9cb82><ellipse cx="80" cy="100" rx="54" ry="7" fill="currentColor" opacity=".05" data-v-07e9cb82></ellipse><rect x="34" y="15" width="92" height="78" rx="9" fill="currentColor" opacity=".04" data-v-07e9cb82></rect><rect x="42" y="9" width="76" height="78" rx="7" fill="var(--mrp-toolbar-bg, #fff)" stroke="currentColor" stroke-opacity=".2" stroke-width="1.5" data-v-07e9cb82></rect><path d="M55 27H105M55 42H105M55 57H85M55 72H76M71 27V72M89 27V57" stroke="currentColor" stroke-opacity=".15" stroke-width="1.5" stroke-linecap="round" data-v-07e9cb82></path><circle cx="112" cy="76" r="16" fill="var(--mrp-toolbar-bg, #fff)" stroke="currentColor" stroke-opacity=".35" stroke-width="2" data-v-07e9cb82></circle><path d="M124 88L137 101M106 76H118" stroke="currentColor" stroke-opacity=".45" stroke-width="3" stroke-linecap="round" data-v-07e9cb82></path><circle cx="27" cy="38" r="3" fill="currentColor" opacity=".12" data-v-07e9cb82></circle><circle cx="132" cy="24" r="2" fill="currentColor" opacity=".2" data-v-07e9cb82></circle></svg>',1)),e.createElementVNode("strong",null,e.toDisplayString(t.title),1),t.description?(e.openBlock(),e.createElementBlock("p",Go,e.toDisplayString(t.description),1)):e.createCommentVNode("",!0)]))}}),At=ue._export_sfc(Jo,[["__scopeId","data-v-07e9cb82"]]);class oe extends Error{constructor(n,r,o){super(r),this.name="MachReportError",this.code=n,this.cause=o}}function Qt(t){return t instanceof oe?{code:t.code,cause:t.cause}:{code:"render",cause:t}}function _t(t){if(t instanceof oe)return t;if(t instanceof W.ReportParamValidationError)return new oe("param",t.message,t);if(t instanceof W.ReportSourceError)return new oe(t.code,t.message,t.cause);if(t instanceof Error){const n={params:"param",config:"config",validate:"validate",fetch:"fetch"},r=t.code;if(typeof r=="string"&&Object.prototype.hasOwnProperty.call(n,r))return new oe(n[r],t.message,t)}return new oe("fetch",t instanceof Error?t.message:"预览加载失败",t)}let Zo=0;function Yo(){return`mrp-params-${++Zo}`}function en(t,n,r){const o=(Array.isArray(n)?n.find(a=>a?.field===t.field)?.label:void 0)??t.field;return t.code==="required"?r.paramRequired.replace("{label}",o):(r.paramInvalid??"{label}:{message}").replace("{label}",o).replace("{message}",t.message)}function Xo(t){const n=e.ref({}),r=e.ref(!1);function o(){const f={};for(const C of Array.isArray(t.defs.value)?t.defs.value:[])typeof C?.field=="string"&&Object.defineProperty(f,C.field,{value:t.params()[C.field]??C.defaultValue??"",writable:!0,enumerable:!0,configurable:!0});n.value=f,r.value=!1}o(),e.watch(t.defs,o),e.watch(t.reportIds,o),e.watch(()=>JSON.stringify(t.params()),o);const a=e.computed(()=>W.validateReportParams(t.defs.value,{...t.params(),...n.value})),s=e.computed(()=>!r.value&&a.value.issues.length>0&&a.value.issues.every(f=>f.code==="required"));function i(){const f=a.value;if(!f.ok){const l=f.issues[0];return{quiet:s.value,error:new oe(l.code==="definition"?"config":"param",en(l,t.defs.value,t.messages()),{issues:f.issues})}}const C={...f.values},h=new Set(t.defs.value.filter(l=>l.defaultValue!==void 0).map(l=>l.field));for(const[l,u]of Object.entries(C))u===""&&!h.has(l)&&delete C[l];return{params:C,quiet:!1}}return{values:n,attempted:r,validation:a,pendingRequired:s,reset:o,query:i}}const Qo={class:"mrp-params-title"},_o={class:"mrp-params-grid"},er=["id"],tr={key:0,class:"mrp-param-star"},nr=["value","aria-labelledby","aria-invalid","aria-describedby","aria-required","onChange"],or=["disabled","hidden"],rr=["value"],ar=["type","placeholder","value","min","max","step","aria-labelledby","aria-invalid","aria-describedby","aria-required","onInput"],lr=["id"],sr={class:"mrp-params-actions"},ir=e.defineComponent({__name:"ReportParamPanel",props:{defs:{},modelValue:{},messages:{},attempted:{type:Boolean},issues:{}},emits:["update:modelValue","query","reset"],setup(t,{expose:n,emit:r}){const o=t,a=r,s=e.ref({...o.modelValue}),i=e.ref(null),f=Yo();e.watch(()=>o.modelValue,p=>{s.value={...p}});const C=e.computed(()=>o.issues??W.validateReportParams(o.defs,s.value).issues),h=e.computed(()=>(Array.isArray(o.defs)?o.defs:[]).filter(p=>p&&typeof p.field=="string").map((p,E)=>({def:p,id:`${f}-${E}`,label:p.label??p.field,value:s.value[p.field]??"",error:o.attempted?C.value.find(v=>v.field===p.field):void 0})));function l(p,E){s.value={...s.value,[p]:E},a("update:modelValue",{...s.value})}function u(p){p.isComposing||a("query")}function m(){i.value?.querySelector('[aria-invalid="true"]')?.focus()}return n({focusInvalid:m}),(p,E)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:i,class:"mrp-params"},[e.createElementVNode("span",Qo,e.toDisplayString(t.messages.paramsTitle),1),e.createElementVNode("div",_o,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,v=>(e.openBlock(),e.createElementBlock("label",{key:v.id,class:e.normalizeClass(["mrp-param",{"mrp-param-missing":!!v.error}])},[e.createElementVNode("span",{id:`${v.id}-label`,class:"mrp-param-label"},[e.createTextVNode(e.toDisplayString(v.label),1),v.def.required?(e.openBlock(),e.createElementBlock("i",tr,"*")):e.createCommentVNode("",!0)],8,er),(v.def.type??"text")==="select"?(e.openBlock(),e.createElementBlock("select",{key:0,class:"mrp-param-input",value:v.value,"aria-labelledby":`${v.id}-label`,"aria-invalid":v.error?!0:void 0,"aria-describedby":v.error?`${v.id}-error`:void 0,"aria-required":v.def.required||void 0,onChange:k=>l(v.def.field,k.target.value),onKeydown:e.withKeys(u,["enter"])},[e.createElementVNode("option",{value:"",disabled:v.def.required,hidden:v.def.required},e.toDisplayString(v.def.placeholder??(t.messages.paramSelectPlaceholder??"请选择{label}").replace("{label}",v.label)),9,or),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(v.def.options??[],k=>(e.openBlock(),e.createElementBlock("option",{key:k.value,value:k.value},e.toDisplayString(k.label),9,rr))),128))],40,nr)):(e.openBlock(),e.createElementBlock("input",{key:1,class:"mrp-param-input",type:v.def.type==="number"?"number":v.def.type==="date"?"date":"text",placeholder:v.def.placeholder??(t.messages.paramTextPlaceholder??"请输入{label}").replace("{label}",v.label),value:v.value,min:v.def.min,max:v.def.max,step:v.def.type==="number"?"any":void 0,"aria-labelledby":`${v.id}-label`,"aria-invalid":v.error?!0:void 0,"aria-describedby":v.error?`${v.id}-error`:void 0,"aria-required":v.def.required||void 0,onInput:k=>l(v.def.field,k.target.value),onKeydown:e.withKeys(u,["enter"])},null,40,ar)),v.error?(e.openBlock(),e.createElementBlock("small",{key:2,id:`${v.id}-error`,class:"mrp-param-error",role:"status"},e.toDisplayString(e.unref(en)(v.error,t.defs,t.messages)),9,lr)):e.createCommentVNode("",!0)],2))),128))]),e.createElementVNode("div",sr,[e.createElementVNode("button",{class:"mrp-nav mrp-param-query",type:"button",onClick:E[0]||(E[0]=v=>p.$emit("query"))},e.toDisplayString(t.messages.query),1),e.createElementVNode("button",{class:"mrp-nav",type:"button",onClick:E[1]||(E[1]=v=>p.$emit("reset"))},e.toDisplayString(t.messages.reset),1)])],512))}}),tn=ue._export_sfc(ir,[["__scopeId","data-v-156737bc"]]),cr={class:"mrp-edit-bar"},ur=["disabled"],dr=["disabled"],fr={class:"mrp-changes"},mr=["aria-label"],pr={key:0},gr={key:1},vr=["onClick"],hr=["title"],br=["title"],yr=["disabled"],wr={key:0,role:"status"},xr={key:1,role:"status"},Er={key:2,class:"mrp-conflicts",open:""},kr=e.defineComponent({__name:"ReportEditBar",props:{differences:{},conflicts:{},messages:{},saving:{type:Boolean},canUndo:{type:Boolean},canRedo:{type:Boolean},busy:{type:Boolean},persisted:{type:Boolean}},emits:["undo","redo","restore","locate"],setup(t){function n(r){return r.source?`${r.source.rowKey} · ${r.source.field}`:`${r.address.pageIndex+1} / ${r.address.rowIndex+1}:${r.address.columnIndex+1}`}return(r,o)=>(e.openBlock(),e.createElementBlock("div",cr,[e.createElementVNode("button",{type:"button",disabled:t.busy||t.saving||!t.canUndo,onClick:o[0]||(o[0]=a=>r.$emit("undo"))},e.toDisplayString(t.messages.undo),9,ur),e.createElementVNode("button",{type:"button",disabled:t.busy||t.saving||!t.canRedo,onClick:o[1]||(o[1]=a=>r.$emit("redo"))},e.toDisplayString(t.messages.redo),9,dr),e.createElementVNode("details",fr,[e.createElementVNode("summary",null,e.toDisplayString(t.messages.changes)+" · "+e.toDisplayString(t.messages.changesCount?.replace("{count}",String(t.differences.length))),1),e.createElementVNode("section",{"aria-label":t.messages.changes},[t.differences.length?(e.openBlock(),e.createElementBlock("ol",gr,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.differences,(a,s)=>(e.openBlock(),e.createElementBlock("li",{key:s},[e.createElementVNode("button",{type:"button",onClick:i=>r.$emit("locate",a)},e.toDisplayString(n(a)),9,vr),e.createElementVNode("span",null,[e.createElementVNode("s",{title:t.messages.changesBefore},e.toDisplayString(a.previousText||"∅"),9,hr),o[3]||(o[3]=e.createTextVNode(" → ",-1)),e.createElementVNode("strong",{title:t.messages.changesAfter},e.toDisplayString(a.text||"∅"),9,br)])]))),128))])):(e.openBlock(),e.createElementBlock("p",pr,e.toDisplayString(t.messages.changesEmpty),1))],8,mr)]),e.createElementVNode("button",{type:"button",disabled:t.busy||t.saving||!t.differences.length,onClick:o[2]||(o[2]=a=>r.$emit("restore"))},e.toDisplayString(t.messages.restoreChanges),9,yr),t.saving?(e.openBlock(),e.createElementBlock("span",wr,e.toDisplayString(t.messages.saving),1)):t.differences.length&&!t.conflicts.length?(e.openBlock(),e.createElementBlock("span",xr,e.toDisplayString(t.persisted?t.messages.editSaved:t.messages.editingLocal),1)):e.createCommentVNode("",!0),t.conflicts.length?(e.openBlock(),e.createElementBlock("details",Er,[e.createElementVNode("summary",null,e.toDisplayString(t.messages.conflicts)+" · "+e.toDisplayString(t.conflicts.length),1),e.createElementVNode("ul",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.conflicts,(a,s)=>(e.openBlock(),e.createElementBlock("li",{key:s},e.toDisplayString(a.message),1))),128))])])):e.createCommentVNode("",!0)]))}}),Cr=ue._export_sfc(kr,[["__scopeId","data-v-df1c7b86"]]),Pr=["aria-label"],Sr={key:0,class:"mrp-section-tabs"},Br=["disabled","onClick"],$r=["aria-label","placeholder","disabled"],Rr=["disabled"],Ir=e.defineComponent({__name:"ReportNavigation",props:{sections:{},currentPage:{},messages:{},busy:{type:Boolean}},emits:["goto","locate"],setup(t,{emit:n}){const r=n,o=e.ref("");return(a,s)=>(e.openBlock(),e.createElementBlock("nav",{class:"mrp-section-nav","aria-label":t.messages.sections},[t.sections.length>1?(e.openBlock(),e.createElementBlock("div",Sr,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.sections,(i,f)=>(e.openBlock(),e.createElementBlock("button",{key:f,type:"button",class:e.normalizeClass({active:t.currentPage>=i.pageIndex+1&&(!t.sections[f+1]||t.currentPage<=t.sections[f+1].pageIndex)}),disabled:t.busy,onClick:C=>r("goto",i.pageIndex+1)},e.toDisplayString(i.label),11,Br))),128))])):e.createCommentVNode("",!0),e.createElementVNode("form",{onSubmit:s[1]||(s[1]=e.withModifiers(i=>r("locate",o.value.trim()),["prevent"]))},[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":s[0]||(s[0]=i=>o.value=i),type:"text","aria-label":t.messages.locateField,placeholder:t.messages.locateFieldPlaceholder,disabled:t.busy},null,8,$r),[[e.vModelText,o.value]]),e.createElementVNode("button",{type:"submit",disabled:t.busy||!o.value.trim()},e.toDisplayString(t.messages.locateField),9,Rr)],32)],8,Pr))}}),Dr=ue._export_sfc(Ir,[["__scopeId","data-v-ef8815ec"]]),Nr={class:"mrp-import-summary"},Mr={key:0},Vr={key:0},Fr=e.defineComponent({__name:"ReportImportSummary",props:{result:{},messages:{}},setup(t){return(n,r)=>(e.openBlock(),e.createElementBlock("details",Nr,[e.createElementVNode("summary",null,[e.createTextVNode(e.toDisplayString(t.messages.importSummary)+" · "+e.toDisplayString(t.messages.importPreserved?.replace("{sheets}",String(t.result.sheets.length)))+" ",1),t.result.warnings.length?(e.openBlock(),e.createElementBlock("span",Mr," · "+e.toDisplayString(t.result.warnings.length)+" "+e.toDisplayString(t.messages.importWarnings),1)):e.createCommentVNode("",!0)]),e.createElementVNode("p",null,e.toDisplayString(t.messages.importReadOnly),1),e.createElementVNode("ul",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.result.sheets,o=>(e.openBlock(),e.createElementBlock("li",{key:o.index},e.toDisplayString(o.name)+" · "+e.toDisplayString(o.range)+" · "+e.toDisplayString(o.rowCount)+" × "+e.toDisplayString(o.columnCount),1))),128))]),t.result.warnings.length?(e.openBlock(),e.createElementBlock("ul",Vr,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.result.warnings,(o,a)=>(e.openBlock(),e.createElementBlock("li",{key:a},e.toDisplayString(o),1))),128))])):e.createCommentVNode("",!0)]))}}),Tr=ue._export_sfc(Fr,[["__scopeId","data-v-54f275e8"]]),nn={title:"报表预览",prevPage:"‹ 上一页",nextPage:"下一页 ›",pageInfo:"{cur} / {total}",fitWidth:"适宽",exportHtml:"导出 HTML",exportPdf:"导出 PDF",exportExcel:"导出 Excel",exportImage:"导出图片",exportWord:"导出 Word",exporting:"正在生成 {format}…",print:"打印",pdfWindow:"PDF 窗口",loading:"报表渲染中…",empty:"暂无预览数据",errorPrefix:"",retry:"重试",pdfFontUnavailable:"PDF 字体尚未就绪,请联系管理员检查字体配置;预览及其它导出仍可使用。",searchPlaceholder:"搜索报表内容",matchInfo:"{cur}/{total}",prevMatch:"‹",nextMatch:"›",thumbnails:"缩略图",paramsTitle:"查询条件",query:"查 询",reset:"重 置",paramRequired:"请填写{label}",paramInvalid:"{label}:{message}",paramPrompt:"请先完善查询条件",paramPromptDescription:"填写必填条件后点击查询,即可生成报表。",paramSelectPlaceholder:"请选择{label}",paramTextPlaceholder:"请输入{label}",searching:"搜索中…",importExcel:"导入 Excel 模板",importing:"正在导入 Excel…",editCell:"编辑单元格",editingHint:"双击单元格编辑 · Enter 确认 · Esc 取消",saving:"正在保存修改…",editInvalidNumber:"请输入有效数字;清空表示无值",editInvalidBoolean:"请输入 true / false、是 / 否或 1 / 0",editConflict:"该单元格已变化,请重新打开编辑",settings:"设置",settingsDisplay:"阅读工具",settingsExport:"导出与打印",settingsData:"数据操作",settingsUnavailable:"需由接入方配置启用",settingsReset:"恢复默认",settingsClose:"关闭设置",search:"内容搜索",closeSearch:"关闭搜索",prevSearchMatch:"上一个匹配",nextSearchMatch:"下一个匹配",zoom:"缩放工具",settingsLocal:"按需启用工具,仅作用于当前预览。",editingLocal:"修改为本地草稿;不会自动写入业务数据库。",editingSaved:"修改将通过接入方配置的保存回调提交。",importLocal:"导入仅生成本地预览,不自动替换业务数据。",emptyDescription:"当前查询没有明细,请调整查询条件后重试。",undo:"撤销",redo:"重做",restoreChanges:"恢复来源值",changes:"修改明细",changesCount:"{count} 处修改",changesEmpty:"尚无修改",changesBefore:"来源值",changesAfter:"当前值",editAtomicRequired:"批量保存需要接入方提供原子 saveBatch 回调;本次未写入任何单元格。",clipboardLimit:"单次最多粘贴 10000 个单元格,请分批处理。",preferencesError:"偏好存储不可用,设置仍在当前预览中生效。",freezeHeaders:"冻结表头",frozenColumns:"冻结前列",sections:"工作表与章节",locateField:"定位字段",locateFieldPlaceholder:"输入字段标识,Enter 定位",locateFieldMissing:"未找到该字段,请核对字段标识。",importSummary:"Excel 导入摘要",importPreserved:"已导入 {sheets} 个工作表,保留内容、合并和样式。",importWarnings:"兼容性提示",importReadOnly:"公式、日期及受保护单元格保持只读;公式不重算。",conflicts:"保存冲突",editReadOnly:"选区包含只读或无权限单元格,本次修改未应用。",editMissing:"选区超出报表范围或缺少业务来源,请重新选择。",editDuplicate:"选区包含同一业务字段的重复单元格,请缩小选区。",clipboardInvalid:"剪贴板内容无法识别,请使用矩形表格文本重新粘贴。",editSaved:"修改已通过保存回调确认",settingsPanes:"冻结窗格"},on={shellBg:"#525659",shellFg:"#e8e8e8",toolbarBg:"#323639",toolbarBorder:"#22252a",toolbarFg:"#e8e8e8",btnFg:"#cfcfcf",btnBorder:"#4a4d52",btnHoverBg:"#414549",btnHoverFg:"#ffffff",btnActiveBg:"#2d5fb8"};function rn(t={}){return{...t,defaults:t.defaults??{},presets:t.presets??{}}}function zr(t){return t}const ce={showExport:!0,showPrint:!0,showPdfWindow:!0,showSettings:!0,showParams:!0,gapPx:18,pdfFontUrl:"/simhei.ttf",logger:console},Or={warn:()=>{},info:()=>{}};function Oe(t,n){return{...t,...n,theme:{...t?.theme,...n?.theme},messages:{...t?.messages,...n?.messages},preview:{...t?.preview,...n?.preview},xlsx:{...t?.xlsx,...n?.xlsx},toolbar:{...t?.toolbar,...n?.toolbar},interaction:{...t?.interaction,...n?.interaction}}}function Ar(t){return{showExport:t.showExport??ce.showExport,showPrint:t.showPrint??ce.showPrint,showPdfWindow:t.showPdfWindow??ce.showPdfWindow,showSettings:t.showSettings??ce.showSettings,showParams:t.showParams??ce.showParams,gapPx:t.gapPx??ce.gapPx}}function an(t,n){const r=n?t?.presets?.[n]:t?.defaultPreset?t?.presets?.[t.defaultPreset]:void 0,o=Oe(t?.defaults,r);return{...Ar(o),pdfFontUrl:o.pdfFontUrl??ce.pdfFontUrl,theme:{...on,...o.theme},messages:{...nn,...o.messages},logger:o.logger??ce.logger,preview:{overscanPages:Lt(o.preview?.overscanPages,1,10,!0),searchDebounceMs:Lt(o.preview?.searchDebounceMs,200,2e3)},xlsx:{...o.xlsx},editable:o.editable??!1,excelImport:o.excelImport??!1,toolbar:{...o.toolbar},interaction:{...o.interaction},preferences:o.preferences,assets:o.assets}}function Lt(t,n,r,o=!1){if(t==null||!Number.isFinite(t))return n;const a=Math.max(0,Math.min(r,t));return o?Math.floor(a):a}function ln(t){const n={};return t.shellBg!=null&&(n["--mrp-shell-bg"]=t.shellBg),t.shellFg!=null&&(n["--mrp-shell-fg"]=t.shellFg),t.toolbarBg!=null&&(n["--mrp-toolbar-bg"]=t.toolbarBg),t.toolbarBorder!=null&&(n["--mrp-toolbar-border"]=t.toolbarBorder),t.toolbarFg!=null&&(n["--mrp-toolbar-fg"]=t.toolbarFg),t.btnFg!=null&&(n["--mrp-btn-fg"]=t.btnFg),t.btnBorder!=null&&(n["--mrp-btn-border"]=t.btnBorder),t.btnHoverBg!=null&&(n["--mrp-btn-hover-bg"]=t.btnHoverBg),t.btnHoverFg!=null&&(n["--mrp-btn-hover-fg"]=t.btnHoverFg),t.btnActiveBg!=null&&(n["--mrp-btn-active-bg"]=t.btnActiveBg),n}function Lr(t){const n=e.inject(ve.MACH_REPORT_CONFIG_KEY,null),r=e.computed(()=>{const o=n?.value??null,a="defaults"in t||"presets"in t||"defaultPreset"in t?rn(t):{defaults:t,presets:{}};if(!o)return a;const s={...o.presets,...a.presets};for(const i of Object.keys(s))s[i]=Oe(Oe(o.presets[i],a.defaults),a.presets[i]);return{defaults:Oe(o.defaults,a.defaults),presets:s,defaultPreset:a.defaultPreset??o.defaultPreset}});e.provide(ve.MACH_REPORT_CONFIG_KEY,r)}function sn(){return e.inject(ve.MACH_REPORT_CONFIG_KEY,e.computed(()=>null))}const qt=new Map,ge=new Map,qr=15e3;function ft(t,n){return Object.assign(new Error(t),{cause:n})}function Se(t,n){return`PDF 字体 ${JSON.stringify(t)}:${n}。请部署支持报表文字的字体文件,并将 pdfFontUrl 配置为可访问的字体 URL;西文报表可设为空串`}function We(t){if(t?.reason instanceof Error&&t.reason.name==="AbortError")return t.reason;const n=ft("PDF 字体检查已取消",t?.reason);return n.name="AbortError",n}async function Wr(t,n){let r=!1;const o=setTimeout(()=>{r=!0,n.abort()},qr);try{const a=await fetch(t,{method:"HEAD",signal:n.signal});if(n.signal.aborted)throw We(n.signal);if(a.status===405||a.status===501||a.type==="opaque")return{status:"unverified",fontUrl:t,message:`PDF 字体 ${JSON.stringify(t)} 无法通过 HEAD 检查验证;仍可尝试导出,届时会加载并校验字体`};if(!a.ok){const i=new Error(`字体请求返回 HTTP ${a.status}`);return{status:"error",fontUrl:t,message:Se(t,i.message),cause:i}}const s=a.headers.get("content-type")??"";if(/text\/html|application\/xhtml\+xml/i.test(s)){const i=new Error("字体 URL 返回 HTML 页面(可能是 SPA 路由回退),不是字体文件");return{status:"error",fontUrl:t,message:Se(t,i.message),cause:i}}if(/^text\//i.test(s)||/(?:\/|\+)json(?:\s*;|$)/i.test(s)){const i=new Error(`字体 URL 返回 ${s} 文本响应,不是字体文件`);return{status:"error",fontUrl:t,message:Se(t,i.message),cause:i}}return{status:"available",fontUrl:t,message:"PDF 字体资源可达;文字覆盖范围将在实际导出时校验"}}catch(a){if(n.signal.aborted&&!r)throw We(n.signal);return{status:"error",fontUrl:t,message:Se(t,r?"字体检查超时,请检查网络或字体服务":"字体检查失败,请检查网络、字体服务或跨域访问配置"),cause:a}}finally{clearTimeout(o)}}function Hr(t,n){if(n?.aborted)return Promise.reject(We(n));if(!t)return Promise.resolve({status:"disabled",fontUrl:t,message:"已停用自定义 PDF 字体;内置字体用于西文,其他文字会在导出时校验"});const r=qt.get(t);if(r)return Promise.resolve(r);let o=ge.get(t);if(!o){const s=new AbortController;o={controller:s,promise:Wr(t,s),subscribers:0};const i=o;ge.set(t,i),i.promise=i.promise.then(f=>(!s.signal.aborted&&f.status==="available"&&qt.set(t,f),f)).finally(()=>{ge.get(t)===i&&ge.delete(t)})}const a=o;return a.subscribers++,new Promise((s,i)=>{let f=!1;const C=()=>f?!1:(f=!0,a.subscribers--,n?.removeEventListener("abort",h),!0),h=()=>{C()&&(a.subscribers===0&&(ge.get(t)===a&&ge.delete(t),a.controller.abort()),i(We(n)))};n?.addEventListener("abort",h,{once:!0}),a.promise.then(l=>{C()&&s(l)},l=>{C()&&i(l)}),n?.aborted&&h()})}function cn(t={fontUrl:"/simhei.ttf"}){let n=null;const r=async(o,a)=>{n||(n=await import("@agile-team/mach-report/pdf"));let s=null;if(t.fontUrl)try{if(s=await n.loadFontWithCache(t.fontUrl,{strict:!0}),!s?.byteLength)throw new Error("字体文件为空或加载失败")}catch(u){const m=u instanceof Error?u.message:String(u);throw ft(Se(t.fontUrl,m),u)}let i;try{i=await n.renderPlanToPdf(o,s?{customFontBytes:s}:{})}catch(u){if(!s)throw u;const m=u instanceof Error?u.message:String(u);throw ft(`PDF 生成失败:${m}。当前字体 URL 为 ${JSON.stringify(t.fontUrl)};请确认该文件是有效字体,或重新配置 pdfFontUrl`,u)}const{bytes:f,unsupportedTextCount:C,pageErrors:h,fidelityWarnings:l}=i;if(C>0)throw new Error(`PDF 中有 ${C} 行文字无法编码;请部署支持所用文字的字体并配置 pdfFontUrl`);if(h.length>0)throw new Error(`PDF 有 ${h.length} 页渲染失败:${h[0]}`);return l.length>0&&a?.(`PDF 有 ${l.length} 处版式降级:${l.slice(0,2).join(";")}`),f};return r.checkFont=o=>Hr(t.fontUrl,o),r}function re(t){return JSON.parse(JSON.stringify(t))}class jr extends Error{constructor(n){super(n.map(r=>r.message).join(";")),this.conflicts=n,this.name="ReportEditConflictError"}}function Kr(){return globalThis.crypto?.randomUUID?.()??`mr-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}function Ur(t){const n=e.shallowRef([]),r=e.shallowRef([]),o=e.shallowRef([]),a=e.shallowRef([]),s=e.shallowRef(!1),i=e.computed(()=>W.summarizeReportCellEdits(n.value)),f=e.computed(()=>!!t.options.value&&!s.value&&!t.blocked()&&r.value.length>0),C=e.computed(()=>!!t.options.value&&!s.value&&!t.blocked()&&o.value.length>0);let h=null,l=null,u=0,m=null;function p(){h?.abort(),h=null,s.value=!1,l=null}function E(){u++,p(),m=null,n.value=[],r.value=[],o.value=[],a.value=[]}function v(){const B=t.options.value;return B?typeof B=="object"?B:{}:null}function k(B,$,I){if(!t.options.value||t.blocked())throw new W.ReportCellEditError("readonly");const L=W.createReportCellResolver(B);for(const H of $.edits){const K=L(H.address);if(!K?.editable||I.canEdit?.(K)===!1)throw new W.ReportCellEditError("readonly");if(I.requireSource&&!K.source)throw new W.ReportCellEditError("missing")}}async function A(B,$,I){if($.saveBatch)return $.saveBatch(re(B),I);if($.save&&B.edits.length>1)throw new W.ReportCellEditError("atomic");if(B.edits[0])return $.save?.(re(B.edits[0]),I)}async function R(B,$,I){for(const L of B.edits){const H=await $.validate?.(re(L),I);if(H)throw new Error(H);if(I.signal.aborted)return}}function d(B,$,I,L){t.plan.value=W.applyReportEditResult(W.applyReportCellEditBatch(B,$),$,I),n.value=[...n.value,...$.edits],L==="edit"&&(r.value=[...r.value,$.edits],o.value=[]),a.value=[],m=null;const H=u;for(const K of $.edits){if(u!==H)break;t.onChange(re(K))}}async function g(B,$){const I=t.plan.value,L=v();if(!I||!L||t.blocked())return!1;const H=new AbortController,K=u;h=H,s.value=!0;const b=()=>h===H&&!H.signal.aborted&&t.plan.value===I&&t.options.value!==!1;try{const y=W.createReportCellEditBatch(I,B,Kr());if(y.edits=y.edits.filter(z=>!Object.is(z.previousValue,z.value)),!y.edits.length)return!0;const F=JSON.stringify([$,y.edits]);m?.plan===I&&m.signature===F?y.requestId=m.requestId:m={plan:I,signature:F,requestId:y.requestId},k(I,y,L);const T={signal:H.signal,requestId:y.requestId,action:$};if(await R(y,L,T),!b())return!1;k(I,y,L);const q=await A(y,L,T);if(!b())return!1;if(q?.conflicts?.length)throw a.value=re(q.conflicts),new jr(q.conflicts);return k(I,y,L),d(I,y,q,$),K===u}catch(y){return b()&&t.onError(t.errorMessage?.(y)??(y instanceof Error?y.message:"Cell edit failed"),y),!1}finally{h===H&&(h=null,s.value=!1)}}async function w(B,$="edit"){if(l)return l;const I=g(B,$);l=I;const L=await I;return l===I&&(l=null),L}async function P(){const B=u,$=r.value[r.value.length-1];return!$||s.value||!await w($.map(I=>({address:I.address,value:I.previousValue})),"undo")||B!==u?!1:(r.value=r.value.slice(0,-1),o.value=[...o.value,$],!0)}async function D(){const B=u,$=o.value[o.value.length-1];return!$||s.value||!await w($.map(I=>({address:I.address,value:I.value})),"redo")||B!==u?!1:(o.value=o.value.slice(0,-1),r.value=[...r.value,$],!0)}async function N(){const B=u;return!i.value.length||s.value||!await w(i.value.map($=>({address:$.address,value:$.previousValue})),"restore")||B!==u?!1:(r.value=[],o.value=[],!0)}return{changes:n,differences:i,conflicts:a,saving:s,canUndo:f,canRedo:C,apply:w,undo:P,redo:D,restore:N,cancel:p,reset:E}}function Ae(t){const n=t.closest(".mrp-page-holder"),r=t.closest("[data-mr-component-index]");if(!n||!r)return null;const o={pageIndex:Number(n.dataset.page)-1,componentIndex:Number(r.dataset.mrComponentIndex),rowIndex:Number(t.dataset.mrRowIndex),columnIndex:Number(t.dataset.mrColumnIndex)};return Object.values(o).every(a=>Number.isInteger(a)&&a>=0)?o:null}function Gr(t,n,r){const o=t.ownerDocument.createElement("textarea");return o.className="mrp-cell-editor",o.setAttribute("aria-label",n),o.value=r==null?"":String(r),o.style.cssText="position:absolute;inset:0;width:100%;height:100%;min-height:20px;box-sizing:border-box;z-index:10;resize:none;margin:0;padding:2px 4px;border:2px solid #2563eb;outline:none;background:#fff;color:#111;font:inherit;line-height:1.25;white-space:pre-wrap;",t.appendChild(o),o}function Jr(t){const n=e.shallowRef(null),r=Ur(t),{saving:o,changes:a}=r;let s=null;function i(){const E=n.value;n.value=null,r.cancel(),s=null,E?.input.remove()}function f(){i(),r.reset()}function C(E){return n.value===E&&t.plan.value===E.plan}async function h(E){return await r.apply([{address:E.address,value:E.input.value}])?(n.value=null,E.input.remove(),!0):(n.value===E&&(E.input.disabled=!1,E.input.setAttribute("aria-invalid","true"),E.input.focus()),!1)}async function l(){if(s)return s;const E=n.value;if(!E)return!0;if(!C(E))return i(),!1;E.input.disabled=!0;const v=h(E);s=v;const k=await v;return s===v&&(s=null),k}function u(E){if(E.stopPropagation(),!E.isComposing&&(E.key==="Escape"&&(E.preventDefault(),i()),E.key==="Enter"&&!E.shiftKey||E.key==="Tab")){E.preventDefault();const v=n.value?.address;l().then(k=>{k&&v&&t.onNavigate?.(v,E.key,E.shiftKey)})}}async function m(E){if(!t.options.value||t.blocked()||!await l()||!E.isConnected)return;const v=t.plan.value,k=Ae(E);if(!v||!k||!t.options.value||t.blocked())return;const A=typeof t.options.value=="object"?t.options.value:{};try{const R=W.getReportCellContext(v,k);if(!R?.editable||A.canEdit?.(R)===!1)return;const d=Gr(E,t.label(),R.value);n.value={plan:v,address:k,input:d},d.addEventListener("keydown",u),d.addEventListener("blur",()=>{o.value||l()}),d.focus(),d.select()}catch(R){t.onError(R instanceof Error?R.message:"无法编辑单元格",R)}}async function p(E){const v=E.target;if(!(v instanceof Element)||v.closest(".mrp-cell-editor"))return;const k=v.closest("td[data-mr-row-index]");k&&await m(k)}return e.watch(t.options,(E,v)=>{(!E||E!==v)&&i()},{flush:"sync"}),e.watch(t.plan,()=>{n.value&&t.plan.value!==n.value.plan&&(n.value.input.remove(),n.value=null)},{flush:"sync"}),e.onScopeDispose(f),{...r,active:n,saving:o,changes:a,cancel:i,reset:f,commit:l,onDoubleClick:p,editCell:m,getChanges:()=>re(a.value)}}const He=["html","pdf","xlsx","png","word"],mt=["search","thumbnails","zoom",...He,"print","pdfWindow","editing","import"];function Zr(t){return{load:n=>JSON.parse(t.getItem(n)??"null"),save:(n,r)=>t.setItem(n,JSON.stringify(r)),remove:n=>t.removeItem(n)}}function Yr(t,n,r,o){const a=e.ref({});let s=0,i=0,f=Promise.resolve();const C=e.computed(()=>Object.fromEntries(mt.map(m=>[m,t.value[m]&&(a.value[m]??n.value[m]??!0)])));function h(m,p){t.value[m]&&(i++,a.value={...a.value,[m]:p},l())}function l(){const m=r?.value;if(!m)return;const p={...a.value};f=f.then(()=>m.adapter.save(m.key,p)).catch(E=>{o?.(E)})}function u(){i++,a.value={},l()}return r&&e.watch(r,async m=>{const p=++s,E=i;if(a.value={},!!m)try{const v=await m.adapter.load(m.key);if(p!==s||E!==i||!v||typeof v!="object")return;a.value=Object.fromEntries(mt.flatMap(k=>typeof v[k]=="boolean"?[[k,v[k]]]:[]))}catch(v){p===s&&o?.(v)}},{immediate:!0}),e.onScopeDispose(()=>{s++}),{enabled:C,setEnabled:h,reset:u}}function un(t){return t.table.role==="header"?-Math.max(1,t.grid?.cells.length??1):t.table.rowIndex}function ae(t,n,r=n){const o=t.pages[n.pageIndex]?.components[n.componentIndex],a=o?.table,s=t.pages[r.pageIndex]?.components[r.componentIndex]?.table;return a&&s&&a.id===s.id?{grid:a.id,row:un(o)+n.rowIndex,column:s.columnKeys.indexOf(a.columnKeys[n.columnIndex]??"")}:{grid:`${n.pageIndex}:${n.componentIndex}`,row:n.rowIndex,column:n.columnIndex}}function Wt(t,n){const r=t.pages[n.pageIndex]?.components[n.componentIndex]?.table;if(!r)return(a,s)=>({...n,rowIndex:a,columnIndex:s});const o=new Map;return t.pages.forEach((a,s)=>a.components.forEach((i,f)=>{i.table?.id!==r.id||!i.grid||i.grid.cells.forEach((C,h)=>{const l=un(i)+h;o.set(l,[...o.get(l)??[],{address:{pageIndex:s,componentIndex:f,rowIndex:h,columnIndex:0},keys:i.table.columnKeys}])})})),(a,s)=>{const i=r.columnKeys[s];if(i===void 0)return null;const f=o.get(a)?.find(C=>C.keys.includes(i));return f?{...f.address,columnIndex:f.keys.indexOf(i)}:null}}function Xr(t,n){return t.pageIndex===n.pageIndex&&t.componentIndex===n.componentIndex}function it(t,n){return Xr(t,n)&&t.rowIndex===n.rowIndex&&t.columnIndex===n.columnIndex}function ct(t){return`[data-page="${t.pageIndex+1}"] [data-mr-component-index="${t.componentIndex}"] td[data-mr-row-index="${t.rowIndex}"][data-mr-column-index="${t.columnIndex}"]`}function Qr(t,n,r){const{anchor:o,focus:a}=r,s=ae(t,o),i=ae(t,a,o),f=ae(t,n,o);return f.grid===s.grid&&f.row>=Math.min(s.row,i.row)&&f.row<=Math.max(s.row,i.row)&&f.column>=Math.min(s.column,i.column)&&f.column<=Math.max(s.column,i.column)}function _r(t){const n=e.shallowRef(null);function r(){const d=n.value,g=t.plan.value,w=new Set(t.differences().map(P=>JSON.stringify(P.address)));t.root.value?.querySelectorAll("td[data-mr-row-index]").forEach(P=>{const D=Ae(P);if(!D)return;const N=!!d&&!!t.plan.value&&Qr(t.plan.value,D,d);P.closest("table")?.setAttribute("role","grid");const B=g?.pages[D.pageIndex]?.components[D.componentIndex]?.table;P.setAttribute("role",B?.role==="header"?"columnheader":"gridcell"),P.classList.toggle("mrp-cell-selected",N),P.classList.toggle("mrp-cell-focus",!!d&&it(D,d.focus)),P.classList.toggle("mrp-cell-modified",w.has(JSON.stringify(D))),P.setAttribute("aria-selected",String(N)),P.tabIndex=d&&it(D,d.focus)?0:-1})}async function o(d,g=!1){if(!t.plan.value||!W.getReportCellContext(t.plan.value,d))return!1;const w=n.value,P=g&&w&&ae(t.plan.value,w.anchor).grid===ae(t.plan.value,d,w.anchor).grid;n.value={anchor:P?w.anchor:{...d},focus:{...d}},t.root.value?.querySelector(ct(d))||t.gotoPage(d.pageIndex+1),await e.nextTick(),r();const D=t.root.value?.querySelector(ct(d));return D?.focus({preventScroll:!0}),D?.scrollIntoView?.({block:"nearest",inline:"nearest"}),!!D}function a(d){const g=d.target;if(!(g instanceof Element)||g.closest("textarea,input,button,select"))return;const w=g.closest("td[data-mr-row-index]"),P=w&&Ae(w);if(!P||t.busy()||!t.plan.value||!W.getReportCellContext(t.plan.value,P))return;const D=n.value,N=d.shiftKey&&D&&ae(t.plan.value,D.anchor).grid===ae(t.plan.value,P,D.anchor).grid;n.value={anchor:N?D.anchor:{...P},focus:{...P}},r(),w.focus({preventScroll:!0})}function s(d){const g=t.plan.value?.pages[d.pageIndex]?.components[d.componentIndex];return g?.grid?Hn.resolveGridLayout(g.grid,g.widthMm,g.heightMm).cells.map(w=>({...d,rowIndex:w.ri,columnIndex:w.ci})):[]}function i(d,g,w){const P=s(d),D=w?-1:1;if(g==="Tab")return P[P.findIndex($=>it($,d))+D];const N=g==="ArrowUp"||g==="ArrowDown"||g==="Enter",B=g==="ArrowUp"||g==="ArrowLeft"?-1:D;return P.filter($=>N?$.columnIndex===d.columnIndex&&($.rowIndex-d.rowIndex)*B>0:$.rowIndex===d.rowIndex&&($.columnIndex-d.columnIndex)*B>0).sort(($,I)=>N?($.rowIndex-I.rowIndex)*B:($.columnIndex-I.columnIndex)*B)[0]}function f(d,g,w){if(g==="ArrowLeft"||g==="ArrowRight")return;const P=t.plan.value;if(!P.pages[d.pageIndex]?.components[d.componentIndex]?.table)return;const N=g==="ArrowUp"||w?-1:1;for(let B=d.pageIndex;B>=0&&B<P.pages.length;B+=N){const $=P.pages[B].components,I=B===d.pageIndex?d.componentIndex+N:N===1?0:$.length-1;for(let L=I;L>=0&&L<$.length;L+=N){const H=C(d,{...d,pageIndex:B,componentIndex:L},g,N);if(H)return H}}}function C(d,g,w,P){const D=t.plan.value,N=D.pages[d.pageIndex].components[d.componentIndex].table,B=D.pages[g.pageIndex].components[g.componentIndex]?.table;if(B?.id!==N.id||B.role==="header"&&N.role!=="header"&&(P>0||N.rowIndex+d.rowIndex>0))return;const $=s(g),I=w==="Tab"?$:$.filter(L=>L.columnIndex===d.columnIndex);return P===1?I[0]:I[I.length-1]}function h(d,g,w=!1,P=!1,D=!1){const N=i(d,g,w)??f(d,g,w);return N?(o(N,P),!0):((g!=="Tab"||!D)&&o(d),!1)}function l(d){const g=n.value;if(t.busy()||d.target instanceof Element&&d.target.closest("textarea,input,select"))return!1;if(!g)return m(d);const w=d.key,P=d.ctrlKey||d.metaKey;if(P&&w.toLowerCase()==="z")return d.preventDefault(),d.shiftKey?t.redo():t.undo(),!0;if(P&&w.toLowerCase()==="y")return d.preventDefault(),t.redo(),!0;if(u(d,g.focus))return!0;if(!["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Tab","Enter"].includes(w))return!1;const D=h(g.focus,w,w==="Tab"&&d.shiftKey,d.shiftKey&&w!=="Tab",!0);return w==="Tab"&&!D?!1:(d.preventDefault(),!0)}function u(d,g){if(!t.enabled()||!t.plan.value||d.key!=="F2"&&!(d.key==="Enter"&&W.getReportCellContext(t.plan.value,g)?.editable))return!1;const w=t.root.value?.querySelector(ct(g));return w&&(d.preventDefault(),t.edit(w)),!0}function m(d){if(!["ArrowDown","ArrowRight","ArrowUp","ArrowLeft","Enter"].includes(d.key))return!1;const g=t.root.value?.querySelector("td[data-mr-row-index]"),w=g&&Ae(g);return w?(d.preventDefault(),o(w),!0):!1}function p(){const d=n.value,g=t.plan.value;if(!d||!g)return"";const w=[],P=ae(g,d.anchor),D=ae(g,d.focus,d.anchor),N=Wt(g,d.anchor),B=W.createReportCellResolver(g),$=Math.min(P.column,D.column),I=Math.max(P.column,D.column);if((Math.abs(P.row-D.row)+1)*(I-$+1)>1e4)return t.error(new W.ReportCellEditError("limit")),"";for(let L=Math.min(P.row,D.row);L<=Math.max(P.row,D.row);L++){const H=[];for(let K=$;K<=I;K++){const b=N(L,K);H.push(b?B(b)?.cell.text??"":"")}w.push(H)}return W.formatReportClipboard(w)}function E(d){!n.value||d.target instanceof Element&&d.target.closest("textarea,input")||(d.clipboardData?.setData("text/plain",p()),d.preventDefault())}async function v(d){const g=n.value;if(!g||!t.enabled()||t.busy())return!1;try{let w;try{w=W.parseReportClipboard(d)}catch(I){throw new W.ReportCellEditError(I instanceof Error&&I.message.includes("limit")?"limit":"clipboard")}const P=t.plan.value,D=ae(P,g.anchor),N=ae(P,g.focus,g.anchor),B=Wt(P,g.anchor),$=w.flatMap((I,L)=>I.map((H,K)=>{const b=B(Math.min(D.row,N.row)+L,Math.min(D.column,N.column)+K);if(!b)throw new W.ReportCellEditError("missing");return{address:b,value:H}}));return await t.apply($)}catch(w){return t.error(w),!1}}function k(d){if(!n.value||!t.enabled()||d.target instanceof Element&&d.target.closest("textarea,input"))return;const g=d.clipboardData?.getData("text/plain");g!==void 0&&(d.preventDefault(),v(g))}async function A(d){const g=t.plan.value;if(!g)return!1;const w=W.createReportCellResolver(g);for(let P=0;P<g.pages.length;P++){const D=g.pages[P];for(let N=0;N<D.components.length;N++)for(const B of s({pageIndex:P,componentIndex:N,rowIndex:0,columnIndex:0})){const $=w(B),I=$?.source;if((I?.field??$?.table?.columnKey)===d.field&&!(d.datasetId!==void 0&&I?.datasetId!==d.datasetId)&&!(d.rowKey!==void 0&&I?.rowKey!==d.rowKey))return o(B)}}return!1}function R(){n.value=null,r()}return{selection:n,refresh:r,reset:R,focusCell:o,focusField:A,navigate:h,onClick:a,onKeydown:l,onCopy:E,onPaste:k,copySelection:p,pasteSelection:v}}function ea(t){let n=0,r=!1;function o(){const s=t.viewport.value,i=t.root.value,f=t.plan.value;if(!s||!i||!f)return;const C=t.options(),h=Math.max(0,Math.min(20,Math.floor(C.frozenColumns??0)));if(!C.freezeHeaders&&h===0&&!r)return;const l=t.zoom.value||1,u=s.getBoundingClientRect();i.querySelectorAll("[data-mr-component-index]").forEach(m=>{const p=m.closest("[data-page]"),E=Number(p?.dataset.page)-1,v=f.pages[E]?.components[Number(m.dataset.mrComponentIndex)];if(!v?.grid||!p)return;m.style.transform="",m.style.zIndex="";const k=m.getBoundingClientRect(),A=p.getBoundingClientRect().bottom,R=Math.max(0,(u.left-k.left)/l),d=C.freezeHeaders?Math.max(0,Math.min((u.top-k.top)/l,(A-k.bottom)/l)):0;R>0&&h>0&&(m.style.zIndex="1"),v.table?.role==="header"&&d>0&&(m.style.transform=`translateY(${d}px)`,m.style.zIndex="5"),m.querySelectorAll(".mrp-cell-frozen").forEach(w=>{w.style.transform="",w.style.zIndex="",w.classList.remove("mrp-cell-frozen")});const g=Array.from({length:h},(w,P)=>`td[data-mr-column-index="${P}"]`);!v.table&&C.freezeHeaders&&g.push('td[data-mr-row-index="0"]'),g.length&&m.querySelectorAll(g.join(",")).forEach(w=>{const P=Number(w.dataset.mrColumnIndex)<h,D=!v.table&&Number(w.dataset.mrRowIndex)===0&&!!C.freezeHeaders,N=P?R:0,B=D?d:0;w.style.transform=N||B?`translate(${N}px, ${B}px)`:"",w.classList.toggle("mrp-cell-frozen",!!(N||B)),w.style.zIndex=N||B?D?"7":"6":""})}),r=!!C.freezeHeaders||h>0}function a(){n||(n=requestAnimationFrame(()=>{n=0,o()}))}return e.onScopeDispose(()=>{n&&cancelAnimationFrame(n)}),{refresh:o,schedule:a}}async function Ht(t,n,r,o){if(!n?.assetRenderers||!Object.keys(n.assetRenderers).length)return t;try{return(await W.resolvePlanAssets(t,{...n,signal:r,format:"dom",onDiagnostic:s=>{r.aborted||(n.onDiagnostic?.(s),o(s.message))}})).plan}catch(a){throw r.aborted?a:new oe("render",a instanceof Error?a.message:"Report asset preparation failed",a)}}const ta={key:6,class:"mrp-edit-hint",role:"status"},na={key:8,class:"mrp-export-notice mrp-export-warning",role:"status"},oa={class:"mrp-main"},ra={key:0,class:"mrp-state"},aa={key:1,class:"mrp-state mrp-error"},la=["data-page"],sa=["aria-label","aria-current","onClick"],ia=["data-thumb"],ca={class:"mrp-thumb-no"},ua={class:"mrp-overlay"},da={key:9,class:"mrp-debug","aria-hidden":"true"},Fe=96/25.4,ut="mach-report:ui",dt="mach-report:ui:wide",fa=e.defineComponent({__name:"ReportPreview",props:{reportId:{type:[String,Array],default:null},params:{type:Object,default:()=>({})},height:{type:String,default:"100vh"},autoLoad:{type:Boolean,default:!0},showExport:{type:Boolean,default:void 0},showPrint:{type:Boolean,default:void 0},showPdfWindow:{type:Boolean,default:void 0},showSettings:{type:Boolean,default:void 0},toolbar:{type:Object,default:void 0},interaction:{type:Object,default:void 0},preferences:{type:Object,default:void 0},assets:{type:Object,default:void 0},emptyState:{type:[Boolean,Object],default:!1},gapPx:{type:Number,default:void 0},messages:{type:Object,default:void 0},preset:{type:String,default:void 0},debug:{type:Boolean,default:!1},paramDefs:{type:Array,default:void 0},showParams:{type:Boolean,default:void 0},editable:{type:[Boolean,Object],default:void 0},excelImport:{type:[Boolean,Object],default:void 0},fetcher:{type:Function,default:null}},emits:["loaded","error","warning","cell-edit","template-import","preferences-change"],setup(t,{expose:n,emit:r}){e.useCssVars(c=>({v02f88d9f:$.value+"px"}));const o=t,a=r,s=e.shallowRef(null),i=e.ref(!1),f=e.ref(""),C=e.shallowRef(null),h=e.ref(null),l=e.ref(!1),u=e.shallowRef(Object.freeze({status:"unchecked",fontUrl:""})),m=e.ref(null),p=e.ref(1),E=e.ref(null),v=e.ref(null),k=e.ref(null),A=e.ref(!1),R=e.ref(!1),d=e.ref(!1),g=e.shallowRef(null),w=e.ref({}),P=e.ref(null),D=e.ref(null),N=ro(),B=e.computed(()=>!!s.value?.pages.length&&s.value.pages.every(c=>c.layout==="wide")),$=e.computed(()=>Math.max(0,yt.value));let I=ut;const L=e.inject(ve.MACH_REPORT_FETCHER_KEY,null),H=e.inject(ve.MACH_REPORT_PDF_EXPORTER_KEY,null),K=e.computed(()=>pt(o.reportId)),b=e.computed(()=>o.fetcher??L),y=e.computed(()=>s.value?.pages.length??0),F=e.computed(()=>Object.freeze({loading:i.value,hasPlan:y.value>0,pageCount:y.value,currentPage:p.value,exporting:h.value,printing:l.value,canExport:!i.value&&!R.value&&!V.saving.value&&y.value>0&&h.value===null,canPrint:!i.value&&!R.value&&!V.saving.value&&y.value>0&&!l.value,error:C.value,pdfFont:u.value,editing:V.active.value!==null,saving:V.saving.value,importing:R.value,dirty:V.differences.value.length>0,canUndo:V.canUndo.value,canRedo:V.canRedo.value,changeCount:V.differences.value.length,selection:U.selection.value?re(U.selection.value):null}));function T(c,x,S){C.value=Object.freeze({message:c,code:x,cause:S}),a("error",c,{code:x,cause:S})}const q=sn(),z=e.computed(()=>an(q.value,o.preset)),M=e.computed(()=>({...z.value.messages,...o.messages})),ee=e.computed(()=>o.showExport??z.value.showExport),fn=e.computed(()=>o.showPrint??z.value.showPrint),Be=e.computed(()=>o.showPdfWindow??z.value.showPdfWindow),je=e.computed(()=>o.showSettings??z.value.showSettings),de=e.computed(()=>({...z.value.toolbar,...o.toolbar})),$e=e.computed(()=>({...z.value.interaction,...o.interaction,...w.value})),mn=e.computed(()=>o.preferences??z.value.preferences),bt=e.computed(()=>o.assets??z.value.assets),yt=e.computed(()=>o.gapPx??(B.value?0:z.value.gapPx)),pn=e.computed(()=>o.showParams??z.value.showParams),he=e.computed(()=>o.editable??z.value.editable),wt=e.computed(()=>o.excelImport??z.value.excelImport),xt=e.computed(()=>({search:de.value.search!==!1,thumbnails:de.value.thumbnails!==!1,zoom:de.value.zoom!==!1,...Object.fromEntries(He.map(c=>[c,ee.value&&(de.value.exportFormats?.includes(c)??!0)])),print:fn.value,pdfWindow:Be.value,editing:!!he.value,import:!!wt.value})),Ke=Yr(xt,e.computed(()=>({editing:de.value.editing,import:de.value.excelImport})),mn,()=>a("warning",M.value.preferencesError??"Preferences storage unavailable")),Y=Ke.enabled,gn=e.computed(()=>He.filter(c=>Y.value[c])),Re=e.computed(()=>Y.value.editing?he.value:!1),Ie=e.computed(()=>Y.value.import?wt.value:!1),Et=e.computed(()=>typeof he.value=="object"&&(typeof he.value.save=="function"||typeof he.value.saveBatch=="function")),Ue=e.computed(()=>typeof o.emptyState=="object"?o.emptyState:{});async function vn(c,x){c==="editing"&&!x&&!await V.commit()||(Ke.setEnabled(c,x),a("preferences-change",Object.freeze({...Y.value})))}async function hn(){await V.commit()&&(Ke.reset(),w.value={},a("preferences-change",Object.freeze({...Y.value})))}async function bn(){if(d.value){d.value=!1;return}!await V.commit()||le||!je.value||(d.value=!0)}function kt(c){return c instanceof W.ReportCellEditError?{number:M.value.editInvalidNumber,boolean:M.value.editInvalidBoolean,conflict:M.value.editConflict,atomic:M.value.editAtomicRequired,limit:M.value.clipboardLimit,readonly:M.value.editReadOnly,missing:M.value.editMissing,duplicate:M.value.editDuplicate,clipboard:M.value.clipboardInvalid}[c.code]??c.message:c instanceof Error?c.message:"单元格保存失败"}const V=Jr({plan:s,options:Re,blocked:()=>i.value||R.value||h.value!==null||l.value,label:()=>M.value.editCell??"编辑单元格",errorMessage:kt,onChange:c=>{C.value=null,m.value=null,a("cell-edit",c)},onError:(c,x)=>{m.value={kind:"error",message:c},T(c,"edit",x)},onNavigate:(c,x,S)=>U.navigate(c,x,S)}),U=_r({plan:s,root:E,enabled:()=>!!Re.value,busy:()=>i.value||R.value||V.saving.value||!!h.value||l.value,differences:()=>V.differences.value,gotoPage:se,edit:V.editCell,apply:V.apply,undo:V.undo,redo:V.redo,error:c=>{const x=kt(c);m.value={kind:"error",message:x},T(x,"edit",c)}}),yn=e.computed(()=>{if(g.value)return g.value.sheets.map(x=>({label:x.name,pageIndex:x.pageStart}));const c=new Set;return s.value?.pages.flatMap((x,S)=>x.components.flatMap(G=>{const O=G.table;return!O?.title||c.has(O.id)?[]:(c.add(O.id),[{label:O.title,pageIndex:S}])}))??[]});async function wn(c){c&&!await U.focusField({field:c})&&(m.value={kind:"warning",message:M.value.locateFieldMissing??"Field not found"})}let Ct=null,Ge=null;function Pt(){if(H)return H;const c=z.value.pdfFontUrl;return(!Ge||Ct!==c)&&(Ct=c,Ge=cn({fontUrl:c})),Ge}let De=0,be=null,Ne=null,le=!1;function Je(){De++,be?.abort(),be=null}async function Ze(){if(le)throw new oe("config","报表预览已卸载");Je();const c=De,x=new AbortController;be=x;const S=z.value.pdfFontUrl;u.value=Object.freeze({status:"checking",fontUrl:S});try{const G=Pt(),O=G.checkFont?await G.checkFont(x.signal):{status:"unverified",fontUrl:"",message:"自定义 PDF 导出器未提供字体预检查;字体由宿主确认"};return!le&&c===De&&!x.signal.aborted&&(u.value=Object.freeze({...O})),O}catch(G){if(x.signal.aborted)throw G;const O={status:"error",fontUrl:S,message:G instanceof Error?G.message:"PDF 字体检查失败",cause:G};return!le&&c===De&&(u.value=Object.freeze(O)),O}finally{be===x&&(be=null)}}function xn(){Ze().catch(()=>{})}e.watch([s,()=>z.value.pdfFontUrl,ee,Be],()=>{const c=u.value.fontUrl===z.value.pdfFontUrl;c&&u.value.status==="available"||(Je(),(!c||u.value.status==="checking")&&(u.value=Object.freeze({status:"unchecked",fontUrl:z.value.pdfFontUrl})),!le&&y.value>0&&(ee.value||Be.value)&&Ze().catch(()=>{}))},{immediate:!0});const Ye=e.computed(()=>{try{return{defs:o.paramDefs??b.value?.getParamDefs?.(K.value)??[],error:null}}catch(c){return{defs:[],error:new oe("config",c instanceof Error?c.message:"查询参数配置无效",c)}}}),Xe=e.computed(()=>Ye.value.defs),ye=Xo({defs:Xe,reportIds:K,params:()=>o.params,messages:()=>M.value}),{values:we,attempted:Me,pendingRequired:St}=ye,Bt=e.ref(null);function En(){Me.value=!0,ye.validation.value.ok||e.nextTick(()=>Bt.value?.focusInvalid()),me()}function kn(){ye.reset(),f.value="",C.value=null}const Cn=e.computed(()=>({height:o.height,...ln(z.value.theme)})),{zoom:te,zoomMode:xe,applyFitZoom:$t,setZoom:Ee}=Gt(()=>({viewport:v.value,pageWidthPx:Qe.contentSize.value.w||210*Fe})),Qe=Ut(s,te,{pxPerMm:Fe,gapPx:yt,overscan:e.computed(()=>z.value.preview.overscanPages)}),{contentSize:_e,windowRange:ke,visiblePages:et,makeScrollHandler:Pn,refreshViewport:tt}=Qe,Sn=Pn(p,y),nt=ea({root:E,viewport:v,plan:s,zoom:te,options:()=>$e.value});e.watch([$e,te],()=>nt.schedule(),{flush:"post"});function ot(c){Ee(c*100)}function fe(){R.value=!1,V.reset(),U.reset(),g.value=null,Rt(),s.value=null,p.value=1,j.reset()}let J=0,ne=null;function Bn(){if(Ye.value.error){const x=Ye.value.error;return fe(),f.value=x.message,T(x.message,x.code,x.cause),null}const c=ye.query();return c.params?c.params:(fe(),f.value=c.quiet?"":c.error.message,c.quiet||(Me.value=!0,T(c.error.message,c.error.code,c.error.cause)),null)}async function me(){if(le)return;const c=++J;R.value=!1,ne?.abort(),ne=null;const x=b.value;if(i.value=!1,C.value=null,K.value.length===0){f.value="缺少报表 ID",fe(),T(f.value,"param");return}if(!x){f.value="未提供渲染数据源 fetcher",fe(),T(f.value,"config");return}const S=Bn();if(!S)return;i.value=!0,f.value="",m.value=null,fe();const G=N.start(),O=new AbortController;ne=O;const X=new Set;function _(Z){c!==J||O.signal.aborted||X.has(Z)||(X.add(Z),z.value.logger.warn("[mach-report] 报表告警:",Z),a("warning",Z))}try{let Z=await x({reportIds:K.value,params:S,signal:O.signal,onWarning:_});if(c!==J)return;const Q=W.validateRenderPlan(Z);if(!Q.ok){const Ve=Q.errors.slice(0,3).map(zt=>`${zt.path}: ${zt.message}`).join("; ");throw new oe("validate",`渲染计划校验失败(${Q.errors.length} 处): ${Ve}`)}if(Q.warnings.forEach(Ve=>_(`${Ve.path}: ${Ve.message}`)),c!==J||O.signal.aborted||(Z=await Ht(Z,bt.value,O.signal,_),c!==J||O.signal.aborted))return;s.value=Z,p.value=1,N.end(G),v.value&&(v.value.scrollTop=0,v.value.scrollLeft=0);const Pe=B.value?dt:ut;Pe!==I&&(I=Pe,lt()),xe.value==="fit"&&$t(),a("loaded",Z.pages.length)}catch(Z){if(c!==J)return;const Q=_t(Z);f.value=Q.message;const Pe=Qt(Q);T(Q.message,Pe.code,Pe.cause)}finally{c===J&&(i.value=!1),ne===O&&(ne=null)}}function se(c){if(le||y.value<=0)return;const x=Math.max(1,Math.min(y.value,c));p.value=x;const S=v.value;S&&(S.scrollTop=Qe.pageOffsetPx(x-1)*te.value,tt(S))}const Ce=Zt(s,{getPdfExporter:Pt,getXlsxOptions:()=>z.value.xlsx,onError:(c,x)=>{m.value={kind:"error",message:c},T(c,x??"print")},onWarning:c=>{m.value={kind:"warning",message:c},a("warning",c)},onBusy:c=>{h.value=c,c?m.value={kind:"progress",message:M.value.exporting.replace("{format}",c)}:m.value?.kind==="progress"&&(m.value=null)},onPrinting:c=>{l.value=c}}),{releasePrintFrame:Rt,dispose:$n}=Ce;async function It(){i.value||R.value||V.active.value&&!await V.commit()||(C.value=null,await Ce.print())}async function Dt(c){i.value||R.value||V.active.value&&!await V.commit()||(C.value=null,await Ce.exportAs(c))}function Nt(){if(i.value||R.value||V.active.value){m.value={kind:"warning",message:M.value.editingHint??"请先确认单元格修改"};return}C.value=null,Ce.openPdfWindow()}async function Rn(c,x={}){le||(we.value={...we.value,...c},x.reload!==!1&&(Me.value=!0,await me()))}const Mt={reload:me,print:It,exportAs:Dt,openPdfWindow:Nt,gotoPage:se,setParams:Rn,checkPdfFont:Ze,importExcel:Vt,getPlan:In,getChanges:V.getChanges,undo:V.undo,redo:V.redo,restoreChanges:V.restore,getDifferences:()=>re(V.differences.value),getSelection:()=>U.selection.value?re(U.selection.value):null,focusCell:U.focusCell,focusField:U.focusField,copySelection:U.copySelection,pasteSelection:U.pasteSelection,get state(){return F.value}};e.provide(ve.MACH_REPORT_CONTROLLER_KEY,Mt);function In(){return s.value?re(s.value):null}function Dn(c){const x=typeof Ie.value=="object"?Ie.value:{};return{...x,...c,limits:{...x.limits,...c?.limits}}}async function Vt(c,x){if(le)throw new oe("config","报表预览已卸载");const S=++J;ne?.abort(),ne=null,i.value=!1,V.cancel(),Ce.invalidatePending(),R.value=!0;const G=new AbortController;ne=G,C.value=null,m.value={kind:"progress",message:M.value.importing??"正在导入 Excel…"};try{const{importExcelTemplate:O}=await import("@agile-team/mach-report/xlsx");if(S!==J)return null;const X=await O(c,Dn(x));if(S!==J)return null;let _=W.paginateTemplate(re(X.template),{}).plan;const Z=W.validateRenderPlan(_);if(!Z.ok)throw new Error(Z.errors.map(Q=>Q.message).slice(0,3).join("; "));_=await Ht(_,bt.value,G.signal,Q=>{S===J&&a("warning",Q)});for(const Q of X.warnings){if(S!==J)return null;a("warning",Q)}return S!==J?null:(V.reset(),U.reset(),Rt(),j.reset(),s.value=_,g.value={sheets:re(X.sheets),warnings:[...X.warnings]},p.value=1,f.value="",m.value=X.warnings.length?{kind:"warning",message:X.warnings.join(";")}:null,v.value&&(v.value.scrollTop=0,v.value.scrollLeft=0),I=B.value?dt:ut,lt(),a("template-import",X),S===J&&a("loaded",_.pages.length),X)}catch(O){if(S!==J)return null;const X=new oe("import",O instanceof Error?O.message:"Excel 模板导入失败",O);throw m.value={kind:"error",message:X.message},T(X.message,"import",O),X}finally{S===J&&(R.value=!1),ne===G&&(ne=null)}}function Nn(c){const x=c.target,S=x.files?.[0];x.value="",S&&Vt(S).catch(()=>{})}const j=to({plan:s,gotoPage:se,debounceMs:e.computed(()=>z.value.preview.searchDebounceMs),highlight:Jn,clearHighlights:Gn});e.watch(()=>Y.value.search,c=>{c||(j.reset(),j.visible.value=!1)});function Mn(c){!c.ctrlKey||!Y.value.zoom||(c.preventDefault(),ot(te.value*(c.deltaY<0?1.1:1/1.1)))}function Vn(c){if(!U.onKeydown(c)&&!(c.target instanceof Element&&c.target.closest("input,textarea,select,[contenteditable='true']"))){if(Y.value.search&&(c.ctrlKey||c.metaKey)&&c.key.toLowerCase()==="f"){c.preventDefault(),j.visible.value||j.toggle(),e.nextTick(()=>D.value?.focusSearch());return}switch(c.key){case"PageDown":c.preventDefault(),se(p.value+1);break;case"PageUp":c.preventDefault(),se(p.value-1);break;case"Home":c.preventDefault(),se(1);break;case"End":c.preventDefault(),se(y.value);break;case"+":case"=":c.preventDefault(),Y.value.zoom&&ot(te.value*1.1);break;case"-":c.preventDefault(),Y.value.zoom&&ot(te.value/1.1);break}}}function Fn(){try{localStorage.setItem(I,JSON.stringify({zoomMode:xe.value==="fit"?"fit":Math.round(te.value*100)}))}catch{}}e.watch([xe,te],Fn);let rt="";const Ft=new WeakMap;function Tt(c=!1){const x=j.activeMatch.value;if(!B.value||!x)return;const S=`${j.query.value}:${j.matchIndex.value}:${x.pageIndex}`;if(!c&&S===rt)return;const O=E.value?.querySelector(`[data-page="${x.pageIndex+1}"]`)?.querySelectorAll("mark.mrp-hit")[x.occurrence];O&&(O.scrollIntoView?.({block:"nearest",inline:"nearest"}),rt=S)}e.watch([s,()=>j.activeMatch.value,()=>j.matchIndex.value,()=>j.query.value,et,E],()=>{const c=s.value;if(!c)return;const x=j.activeMatch.value;j.matchIndex.value,x||(rt=""),et.value;const S=E.value;if(!S)return;S.querySelectorAll(".mrp-page-holder").forEach(O=>{const X=Number(O.dataset.page??0)-1,_=c.pages[X];if(!_||O.childElementCount>0&&Ft.get(O)===_){if(O.firstElementChild){const Q=O.firstElementChild;j.clear(Q),j.apply(Q)}return}O.style.width=`${_.pageWidthMm*Fe}px`;const Z=W.renderPage(_,96,{},document);j.apply(Z),O.replaceChildren(Z),Ft.set(O,_)}),Tt(),U.refresh(),nt.refresh()},{flush:"post",immediate:!0}),e.watch(()=>U.selection.value,()=>{U.refresh()},{flush:"post"}),e.watch(()=>j.query.value,c=>{c||E.value?.querySelectorAll(".mrp-page-holder").forEach(x=>{j.clear(x)})});const ie=oo(s,{thumbsRoot:k,visible:A,renderThumbCanvas:c=>{try{const x=s.value.pages[c],S=Math.min(.2,116/Math.max(1,x.pageWidthMm*Fe)),{canvases:G}=W.renderPlanToCanvas(s.value,{start:c,end:c,dpr:S});return G[0]??null}catch{return null}}});e.watchEffect(()=>{ie.schedule()},{flush:"post"});const Tn=e.computed(()=>o.debug),{debugStats:pe}=no(Tn,{plan:s,pageCount:y,windowRange:ke,zoom:te,loadMs:N.loadMs});function at(){tt(v.value),ie.schedule(),xe.value==="fit"&&$t(),Tt(!0)}function lt(){Ee(I===dt?100:"fit");try{const c=JSON.parse(localStorage.getItem(I)??"{}");c.zoomMode==="fit"?Ee("fit"):typeof c.zoomMode=="number"&&Ee(c.zoomMode)}catch{}}return e.onMounted(()=>{window.addEventListener("resize",at),typeof ResizeObserver<"u"&&v.value&&(Ne=new ResizeObserver(at),Ne.observe(v.value)),tt(v.value),lt(),o.autoLoad&&me()}),e.onUnmounted(()=>{le=!0,V.reset(),R.value=!1,Je(),J++,ne?.abort(),ne=null,window.removeEventListener("resize",at),Ne?.disconnect(),Ne=null,ie.destroy(),j.reset(),$n()}),e.watch(()=>[JSON.stringify(K.value),JSON.stringify(o.params),b.value],()=>{if(o.autoLoad){me();return}J++,ne?.abort(),ne=null,i.value=!1,f.value="",C.value=null,m.value=null,fe()}),n({...Mt,state:F}),(c,x)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["mach-report-preview",{"mrp-wide-report":B.value}]),style:e.normalizeStyle(Cn.value)},[pn.value&&Xe.value.length>0?(e.openBlock(),e.createBlock(tn,{key:0,ref_key:"paramPanelRef",ref:Bt,defs:Xe.value,modelValue:e.unref(we),"onUpdate:modelValue":x[0]||(x[0]=S=>e.isRef(we)?we.value=S:null),messages:M.value,attempted:e.unref(Me),issues:e.unref(ye).validation.value.issues,onQuery:En,onReset:kn},null,8,["defs","modelValue","messages","attempted","issues"])):e.createCommentVNode("",!0),e.createVNode(Xt,{ref_key:"toolbarRef",ref:D,"page-count":y.value,"current-page":p.value,"zoom-mode":e.unref(xe),zoom:e.unref(te),"show-export":ee.value,"show-print":e.unref(Y).print,"show-pdf-window":e.unref(Y).pdfWindow,"show-search":e.unref(Y).search,"show-thumbnails":e.unref(Y).thumbnails,"show-zoom":e.unref(Y).zoom,"export-formats":gn.value,"show-settings":je.value,"settings-open":d.value,messages:M.value,search:{visible:e.unref(j).visible.value,query:e.unref(j).query.value,matchIndex:e.unref(j).matchIndex.value,matchCount:e.unref(j).matchCount.value,searching:e.unref(j).searching.value},"thumbs-visible":A.value,"show-import":!!Ie.value,busy:i.value||R.value||e.unref(V).saving.value,onGoto:se,onZoom:e.unref(Ee),onExport:x[1]||(x[1]=S=>Dt(S)),onPrint:It,onPdfWindow:Nt,onSearchInput:e.unref(j).onInput,onSearchNav:e.unref(j).onNav,onSearchToggle:e.unref(j).toggle,onThumbsToggle:x[2]||(x[2]=S=>A.value=!A.value),onImportExcel:x[3]||(x[3]=S=>P.value?.click()),onSettingsToggle:bn},null,8,["page-count","current-page","zoom-mode","zoom","show-export","show-print","show-pdf-window","show-search","show-thumbnails","show-zoom","export-formats","show-settings","settings-open","messages","search","thumbs-visible","show-import","busy","onZoom","onSearchInput","onSearchNav","onSearchToggle"]),d.value&&je.value?(e.openBlock(),e.createBlock(Ko,{key:1,available:xt.value,enabled:e.unref(Y),messages:M.value,"persisted-editing":Et.value,interaction:$e.value,busy:i.value||R.value||e.unref(V).saving.value||!!h.value||l.value,onInteraction:x[4]||(x[4]=S=>w.value={...w.value,...S}),onChange:vn,onReset:hn,onClose:x[5]||(x[5]=S=>d.value=!1)},{default:e.withCtx(()=>[e.renderSlot(c.$slots,"settings",{},void 0,!0)]),_:3},8,["available","enabled","messages","persisted-editing","interaction","busy"])):e.createCommentVNode("",!0),y.value>0&&$e.value.navigation!==!1?(e.openBlock(),e.createBlock(Dr,{key:2,sections:yn.value,"current-page":p.value,messages:M.value,busy:i.value||R.value||e.unref(V).saving.value,onGoto:se,onLocate:wn},null,8,["sections","current-page","messages","busy"])):e.createCommentVNode("",!0),g.value?(e.openBlock(),e.createBlock(Tr,{key:3,result:g.value,messages:M.value},null,8,["result","messages"])):e.createCommentVNode("",!0),Re.value&&y.value>0?(e.openBlock(),e.createBlock(Cr,{key:4,differences:e.unref(V).differences.value,conflicts:e.unref(V).conflicts.value,messages:M.value,saving:e.unref(V).saving.value,"can-undo":e.unref(V).canUndo.value,"can-redo":e.unref(V).canRedo.value,persisted:Et.value,busy:!!h.value||l.value,onUndo:e.unref(V).undo,onRedo:e.unref(V).redo,onRestore:e.unref(V).restore,onLocate:x[6]||(x[6]=S=>e.unref(U).focusCell(S.address))},null,8,["differences","conflicts","messages","saving","can-undo","can-redo","persisted","busy","onUndo","onRedo","onRestore"])):e.createCommentVNode("",!0),Ie.value?(e.openBlock(),e.createElementBlock("input",{key:5,ref_key:"importInputRef",ref:P,class:"mrp-import-input",type:"file",accept:".xlsx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",hidden:"",onChange:Nn},null,544)):e.createCommentVNode("",!0),Re.value&&y.value>0?(e.openBlock(),e.createElementBlock("div",ta,e.toDisplayString(e.unref(V).saving.value?M.value.saving:M.value.editingHint),1)):e.createCommentVNode("",!0),m.value?(e.openBlock(),e.createElementBlock("div",{key:7,class:e.normalizeClass(["mrp-export-notice",`mrp-export-${m.value.kind}`]),role:"alert"},e.toDisplayString(m.value.message),3)):e.createCommentVNode("",!0),u.value.status==="error"&&(ee.value||Be.value)?(e.openBlock(),e.createElementBlock("div",na,[e.createTextVNode(e.toDisplayString(M.value.pdfFontUnavailable)+" ",1),e.createElementVNode("button",{type:"button",onClick:xn},e.toDisplayString(M.value.retry),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",oa,[e.createElementVNode("div",{ref_key:"viewportRef",ref:v,class:"mrp-body",tabindex:"0",onWheel:Mn,onKeydown:Vn,onDblclick:x[7]||(x[7]=(...S)=>e.unref(V).onDoubleClick&&e.unref(V).onDoubleClick(...S)),onClick:x[8]||(x[8]=(...S)=>e.unref(U).onClick&&e.unref(U).onClick(...S)),onCopy:x[9]||(x[9]=(...S)=>e.unref(U).onCopy&&e.unref(U).onCopy(...S)),onPaste:x[10]||(x[10]=(...S)=>e.unref(U).onPaste&&e.unref(U).onPaste(...S)),onScrollPassive:x[11]||(x[11]=S=>{e.unref(Sn)(S.target),e.unref(nt).schedule()})},[i.value?(e.openBlock(),e.createElementBlock("div",ra,e.toDisplayString(M.value.loading),1)):f.value?(e.openBlock(),e.createElementBlock("div",aa,[e.createTextVNode(e.toDisplayString(f.value)+" ",1),e.createElementVNode("button",{class:"mrp-retry",type:"button",onClick:me},e.toDisplayString(M.value.retry),1)])):!s.value||y.value===0?(e.openBlock(),e.createBlock(At,{key:2,title:e.unref(St)?M.value.paramPrompt??M.value.paramsTitle:M.value.empty,description:e.unref(St)?M.value.paramPromptDescription:Ue.value.description??M.value.emptyDescription},null,8,["title","description"])):(e.openBlock(),e.createElementBlock("div",{key:3,class:"mrp-scale",style:e.normalizeStyle({width:`${e.unref(_e).w*e.unref(te)}px`,height:`${e.unref(_e).h*e.unref(te)}px`})},[e.createElementVNode("div",{ref_key:"containerRef",ref:E,class:"mrp-scale-inner",style:e.normalizeStyle({transform:`scale(${e.unref(te)})`,transformOrigin:"top left",width:`${e.unref(_e).w}px`})},[e.unref(ke).padTopPx>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mrp-spacer-top",style:e.normalizeStyle({height:`${e.unref(ke).padTopPx}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(et),S=>(e.openBlock(),e.createElementBlock("div",{key:S.index,class:"mrp-page-holder","data-page":S.index+1},null,8,la))),128)),e.unref(ke).padBottomPx>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"mrp-spacer-bottom",style:e.normalizeStyle({height:`${e.unref(ke).padBottomPx}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)],4)],4)),!i.value&&!f.value&&s.value&&y.value>0&&t.emptyState?(e.openBlock(),e.createBlock(At,{key:4,title:Ue.value.title??M.value.empty,description:Ue.value.description??M.value.emptyDescription},null,8,["title","description"])):e.createCommentVNode("",!0)],544),e.unref(Y).thumbnails&&A.value&&y.value>0?(e.openBlock(),e.createElementBlock("aside",{key:0,ref_key:"thumbsRef",ref:k,class:"mrp-thumbs",onScrollPassive:x[12]||(x[12]=(...S)=>e.unref(ie).onScroll&&e.unref(ie).onScroll(...S))},[e.unref(ie).windowRange.value.padTopPx>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mrp-thumb-spacer",style:e.normalizeStyle({height:`${e.unref(ie).windowRange.value.padTopPx}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(ie).visibleThumbs.value,S=>(e.openBlock(),e.createElementBlock("button",{key:S.index,class:e.normalizeClass(["mrp-thumb",{"mrp-thumb-active":S.index+1===p.value}]),type:"button","aria-label":`${M.value.thumbnails} · ${M.value.pageInfo.replace("{cur}",String(S.index+1)).replace("{total}",String(y.value))}`,"aria-current":S.index+1===p.value?"page":void 0,style:e.normalizeStyle({height:`${S.height+20}px`}),onClick:G=>se(S.index+1)},[e.createElementVNode("span",{class:"mrp-thumb-box","data-thumb":S.index+1,style:e.normalizeStyle({height:`${S.height}px`})},null,12,ia),e.createElementVNode("span",ca,e.toDisplayString(S.index+1),1)],14,sa))),128)),e.unref(ie).windowRange.value.padBottomPx>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"mrp-thumb-spacer",style:e.normalizeStyle({height:`${e.unref(ie).windowRange.value.padBottomPx}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)],544)):e.createCommentVNode("",!0)]),e.createElementVNode("div",ua,[e.renderSlot(c.$slots,"default",{},void 0,!0)]),e.unref(pe)?(e.openBlock(),e.createElementBlock("div",da,[x[13]||(x[13]=e.createElementVNode("div",null,"mach-report debug",-1)),e.createElementVNode("div",null,"pages: "+e.toDisplayString(e.unref(pe).pages)+" | window: ["+e.toDisplayString(e.unref(pe).window)+"]",1),e.createElementVNode("div",null,"zoom: "+e.toDisplayString(e.unref(pe).zoom)+" | load: "+e.toDisplayString(e.unref(pe).loadMs),1),e.createElementVNode("div",null,"plan: "+e.toDisplayString(e.unref(pe).planKB)+"KB",1)])):e.createCommentVNode("",!0)],6))}}),dn=ue._export_sfc(fa,[["__scopeId","data-v-dfdeb309"]]),ma=Object.freeze(Object.defineProperty({__proto__:null,default:dn},Symbol.toStringTag,{value:"Module"}));exports.DEFAULT_MESSAGES=nn;exports.DEFAULT_THEME=on;exports.MachReportError=oe;exports.PlanLoadError=Te;exports.REPORT_EXPORT_FORMATS=He;exports.REPORT_PREVIEW_TOOLS=mt;exports.ReportParamPanel=tn;exports.ReportPreview=dn;exports.ReportPreview$1=ma;exports.ReportToolbar=Xt;exports.SILENT_LOGGER=Or;exports.buildPrintDocument=ht;exports.buildWordHtml=Jt;exports.cloneReportSnapshot=re;exports.createDefaultPdfExporter=cn;exports.createFetchRequest=Kn;exports.createReportStoragePreferences=Zr;exports.defineMachReportConfig=rn;exports.defineMachReportPreset=zr;exports.joinReportIds=jn;exports.normalizeReportIds=pt;exports.normalizeReportLoadError=_t;exports.printPlans=Un;exports.provideMachReportConfig=Lr;exports.resolveConfig=an;exports.themeToCssVars=ln;exports.toErrorDetail=Qt;exports.useMachReportConfig=sn;exports.usePageWindow=Ut;exports.usePrintExport=Zt;exports.useZoom=Gt;
|
package/dist/assets-66UBlhES.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";const h=require("./style-CpwiOPyB.cjs"),I=["borderTop","borderRight","borderBottom","borderLeft","borderColor","lineColor","lineWidthPt"];function M(t,e){const r=h.resolveBoxBorders(e.style),n=r.inner?[...t.edges]:[];r.top&&n.push({kind:"h",pos:0,from:0,to:e.widthMm}),r.bottom&&n.push({kind:"h",pos:e.heightMm,from:0,to:e.widthMm}),r.left&&n.push({kind:"v",pos:0,from:0,to:e.heightMm}),r.right&&n.push({kind:"v",pos:e.widthMm,from:0,to:e.heightMm});const o=h.resolveStroke(e.style);return n.map(s=>({...s,...o}))}function k(t,e,r){const n=t.get(e);(!n||r.widthPt>n.widthPt)&&t.set(e,r)}function w(t,e,r,n,o,s){const i=r<e.rows.length?e.rows[r].pos:e.rows[e.rows.length-1].pos+e.rows[e.rows.length-1].size;for(let c=n;c<o;c++){const d=e.columns[c];k(t,`h:${r}:${c}`,{kind:"h",pos:i,from:d.pos,to:d.pos+d.size,...s})}}function b(t,e,r,n,o,s){const i=r<e.columns.length?e.columns[r].pos:e.columns[e.columns.length-1].pos+e.columns[e.columns.length-1].size;for(let c=n;c<o;c++){const d=e.rows[c];k(t,`v:${r}:${c}`,{kind:"v",pos:i,from:d.pos,to:d.pos+d.size,...s})}}function v(t,e,r,n){const o=Math.min(e.columns.length,r.ci+(r.cell.colSpan??1)),s=Math.min(e.rows.length,r.ri+(r.cell.rowSpan??1)),i=h.mergeComponentStyles(n,r.cell.style),c=h.resolveBoxBorders(i),d=h.resolveStroke(i);c.top&&w(t,e,r.ri,r.ci,o,d),c.bottom&&w(t,e,s,r.ci,o,d),c.left&&b(t,e,r.ci,r.ri,s,d),c.right&&b(t,e,o,r.ri,s,d)}function A(t){const e=[...t.values()].sort((n,o)=>n.kind.localeCompare(o.kind)||n.pos-o.pos||n.from-o.from),r=[];for(const n of e){const o=r[r.length-1];o&&o.kind===n.kind&&o.pos===n.pos&&Math.abs(o.to-n.from)<1e-6&&o.color===n.color&&o.widthPt===n.widthPt?o.to=n.to:r.push({...n})}return r}function S(t,e){if(!t.cells.some(({cell:s})=>I.some(i=>s.style?.[i]!==void 0)))return M(t,e);const r=new Map,n=new Set,o=t.columns.length;for(const s of t.cells){v(r,t,s,e.style);const i=Math.min(t.rows.length,s.ri+(s.cell.rowSpan??1)),c=Math.min(o,s.ci+(s.cell.colSpan??1));for(let d=s.ri;d<i;d++)for(let a=s.ci;a<c;a++)n.add(d*o+a)}for(let s=0;s<t.rows.length;s++)for(let i=0;i<o;i++)n.has(s*o+i)||v(r,t,{ri:s,ci:i,cell:{}},e.style);return A(r)}class f extends Error{constructor(e,r){super(e.message),this.name="OutputAssetError",this.diagnostic=e,this.cause=r}}function p(t){if(t.aborted)throw t.reason??new DOMException("The operation was aborted.","AbortError")}function P(t,e){return p(e),new Promise((r,n)=>{const o=()=>n(e.reason??new DOMException("The operation was aborted.","AbortError"));e.addEventListener("abort",o,{once:!0}),Promise.resolve(t).then(r,n).finally(()=>e.removeEventListener("abort",o))})}function y(t){const e={maxAssets:1e3,maxImageBytes:33554432,maxTotalImageBytes:134217728,maxDurationMs:3e4,...t.assetBudget};for(const[r,n]of Object.entries(e))if(!Number.isSafeInteger(n)||n<=0||n>2147483647)throw new RangeError(`${r} must be a positive safe integer at most 2147483647.`);return e}function B(t){const e=/^data:image\/[a-z0-9.+-]+(;base64)?,(.*)$/is.exec(t);if(!e)throw new TypeError("Asset renderers must return an image data URL.");return e[1]?Math.ceil(e[2].length*3/4):new TextEncoder().encode(decodeURIComponent(e[2])).byteLength}function u(t,e,r,n,o){const s={code:r,message:n,severity:"warning",format:t.options.format??"dom",pageIndex:e.pageIndex,componentIndex:e.componentIndex,componentPath:e.componentPath,kind:e.component.kind,nid:e.component.nid};if(t.diagnostics.push(s),t.options.onDiagnostic?.(s),t.options.assetFailure!=="placeholder")throw new f(s,o)}async function D(t,e,r){const n=t.options.assetRenderers?.[e.kind];if(e.imageData||!n)return e.imageData;if(++t.rendered>t.budget.maxAssets)return u(t,r,"asset-budget-exceeded","Output exceeded the asset count budget.");let o;try{if(t.active=r,o=await P(n({...r,signal:t.signal}),t.signal),p(t.signal),o.length>t.budget.maxImageBytes*4+1024)return u(t,r,"asset-budget-exceeded","Output exceeded the image payload byte budget.");const s=B(o);if(s>t.budget.maxImageBytes||t.bytes+s>t.budget.maxTotalImageBytes)return u(t,r,"asset-budget-exceeded","Output exceeded the encoded image byte budget.");t.bytes+=s}catch(s){if(t.signal.aborted||s instanceof f)throw s;return u(t,r,"asset-render-failed",`Asset renderer failed for ${e.kind}; output was not silently omitted.`,s)}return o}function O(t,e){const r=t.active;if(!r){e.abort(new Error("Asset rendering exceeded maxDurationMs."));return}const n={code:"asset-budget-exceeded",message:"Asset rendering exceeded maxDurationMs.",severity:"warning",format:t.options.format??"dom",pageIndex:r.pageIndex,componentIndex:r.componentIndex,componentPath:r.componentPath,kind:r.component.kind,nid:r.component.nid};t.diagnostics.push(n);try{t.options.onDiagnostic?.(n)}catch(o){e.abort(o);return}e.abort(new f(n))}async function T(t,e,r,n,o){if(!e?.children?.length)return e;const s=[];for(const[i,c]of e.children.entries())s.push(await x(t,c,{...r,component:c,componentPath:[...n,i]},o));return s.some((i,c)=>i!==e.children[c])?{...e,children:s}:e}async function x(t,e,r,n){if(p(t.signal),n.has(e))throw new TypeError("Cyclic grid children cannot be rendered.");let o=t.cache.get(e);o||(o=D(t,e,r),t.cache.set(e,o));const s=await o;let i=e.grid;if(i){const c=new Set(n).add(e),d=[];for(const[a,m]of i.cells.entries()){const g=[];for(const[l,E]of m.entries())g.push(await T(t,E,r,[...r.componentPath,a,l],c));d.push(g)}d.some((a,m)=>a.some((g,l)=>g!==i.cells[m][l]))&&(i={...i,cells:d})}return s!==e.imageData||i!==e.grid?{...e,imageData:s,grid:i}:e}async function C(t,e={}){const r=y(e);if(e.signal?.aborted)throw e.signal.reason??new DOMException("The operation was aborted.","AbortError");const n=new AbortController,o=()=>n.abort(e.signal?.reason);if(e.signal?.addEventListener("abort",o,{once:!0}),!e.assetRenderers||!Object.keys(e.assetRenderers).length)return e.signal?.removeEventListener("abort",o),{plan:t,diagnostics:[]};const s={options:e,signal:n.signal,diagnostics:[],rendered:0,bytes:0,budget:r,cache:new WeakMap},i=setTimeout(()=>O(s,n),r.maxDurationMs);try{const c=[];for(const[d,a]of t.pages.entries()){if(d<(e.start??0)||d>(e.end??t.pages.length-1)){c.push(a);continue}const m=[];for(const[g,l]of a.components.entries())m.push(await x(s,l,{component:l,pageIndex:d,componentIndex:g,componentPath:[]},new Set));c.push(m.some((g,l)=>g!==a.components[l])?{...a,components:m}:a)}return{plan:c.some((d,a)=>d!==t.pages[a])?{...t,pages:c}:t,diagnostics:s.diagnostics}}finally{clearTimeout(i),e.signal?.removeEventListener("abort",o)}}exports.OutputAssetError=f;exports.resolveGridStrokes=S;exports.resolvePlanAssets=C;
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { b as k, i as m } from "./render-plan-uzZYYSy1.js";
|
|
2
|
-
const v = /* @__PURE__ */ new Set(["text", "rect", "line", "ellipse"]), D = /* @__PURE__ */ new Set(["image", "chart", "barcode", "qrcode"]);
|
|
3
|
-
function S(e, t) {
|
|
4
|
-
if (!e.grid) {
|
|
5
|
-
if (m(e))
|
|
6
|
-
return t === "xlsx" ? { code: "unsupported-component", message: "XLSX data export omits image-backed components; use PDF or PNG for visual output." } : t === "pdf" && !/^data:image\/(png|jpe?g);base64,/i.test(e.imageData) ? { code: "unsupported-image-format", message: "PDF accepts PNG or JPEG data URLs; convert this image before exporting." } : void 0;
|
|
7
|
-
if (D.has(e.kind)) return { code: "missing-image", message: `${e.kind} requires imageData or a renderer adapter before output.` };
|
|
8
|
-
if (!v.has(e.kind)) return { code: "unsupported-component", message: `Unsupported component kind: ${e.kind}.` };
|
|
9
|
-
if (t === "xlsx" && e.kind !== "text") return { code: "unsupported-component", message: `XLSX data export omits ${e.kind} geometry.` };
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
function d(e, t, i, n, s) {
|
|
13
|
-
return { ...s, severity: "warning", format: t, pageIndex: i, componentIndex: n, kind: e.kind, nid: e.nid };
|
|
14
|
-
}
|
|
15
|
-
function l(e, t, i, n, s, r, o) {
|
|
16
|
-
if (o.has(e)) return;
|
|
17
|
-
const f = new Set(o).add(e), a = S(e, t);
|
|
18
|
-
a && r.push({ ...d(e, t, i, n, a), componentPath: s }), k(e) && t !== "dom" && r.push(d(e, t, i, n, { code: "rich-text-flattened", message: "Rich text is exported as plain text; inline styles are not preserved." }));
|
|
19
|
-
for (const [u, p] of (e.grid?.cells ?? []).entries()) for (const [c, g] of p.entries())
|
|
20
|
-
if (g?.children?.length && t !== "dom")
|
|
21
|
-
r.push({ ...d(e, t, i, n, { code: "nested-components-omitted", message: "Nested grid components are omitted; cell text is preserved." }), componentPath: [...s, u, c] });
|
|
22
|
-
else if (t === "dom")
|
|
23
|
-
for (const [h, x] of (g?.children ?? []).entries()) l(x, t, i, n, [...s, u, c, h], r, f);
|
|
24
|
-
}
|
|
25
|
-
function b(e, t) {
|
|
26
|
-
const i = [];
|
|
27
|
-
return e.pages.forEach((n, s) => n.components.forEach((r, o) => l(r, t, s, o, [], i, /* @__PURE__ */ new Set()))), i;
|
|
28
|
-
}
|
|
29
|
-
function E(e, t, i) {
|
|
30
|
-
const n = b(e, t);
|
|
31
|
-
return n.forEach((s) => i.onDiagnostic?.(s)), n;
|
|
32
|
-
}
|
|
33
|
-
export {
|
|
34
|
-
b as i,
|
|
35
|
-
E as r
|
|
36
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";const l=require("./render-plan-CckPEQyf.cjs"),m=new Set(["text","rect","line","ellipse"]),v=new Set(["image","chart","barcode","qrcode"]);function S(e,t){if(!e.grid){if(l.isImageBackedComponent(e))return t==="xlsx"?{code:"unsupported-component",message:"XLSX data export omits image-backed components; use PDF or PNG for visual output."}:t==="pdf"&&!/^data:image\/(png|jpe?g);base64,/i.test(e.imageData)?{code:"unsupported-image-format",message:"PDF accepts PNG or JPEG data URLs; convert this image before exporting."}:void 0;if(v.has(e.kind))return{code:"missing-image",message:`${e.kind} requires imageData or a renderer adapter before output.`};if(!m.has(e.kind))return{code:"unsupported-component",message:`Unsupported component kind: ${e.kind}.`};if(t==="xlsx"&&e.kind!=="text")return{code:"unsupported-component",message:`XLSX data export omits ${e.kind} geometry.`}}}function d(e,t,i,n,s){return{...s,severity:"warning",format:t,pageIndex:i,componentIndex:n,kind:e.kind,nid:e.nid}}function p(e,t,i,n,s,r,o){if(o.has(e))return;const h=new Set(o).add(e),u=S(e,t);u&&r.push({...d(e,t,i,n,u),componentPath:s}),l.isRichText(e)&&t!=="dom"&&r.push(d(e,t,i,n,{code:"rich-text-flattened",message:"Rich text is exported as plain text; inline styles are not preserved."}));for(const[a,x]of(e.grid?.cells??[]).entries())for(const[c,g]of x.entries())if(g?.children?.length&&t!=="dom")r.push({...d(e,t,i,n,{code:"nested-components-omitted",message:"Nested grid components are omitted; cell text is preserved."}),componentPath:[...s,a,c]});else if(t==="dom")for(const[k,D]of(g?.children??[]).entries())p(D,t,i,n,[...s,a,c,k],r,h)}function f(e,t){const i=[];return e.pages.forEach((n,s)=>n.components.forEach((r,o)=>p(r,t,s,o,[],i,new Set))),i}function b(e,t,i){const n=f(e,t);return n.forEach(s=>i.onDiagnostic?.(s)),n}exports.inspectOutputCapabilities=f;exports.reportOutputDiagnostics=b;
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
function W(s, p) {
|
|
2
|
-
const i = s.length;
|
|
3
|
-
if (i === 0) return [];
|
|
4
|
-
const d = s.reduce((c, r) => c + r, 0), a = d > 0 && p > 0 ? p / d : 1, e = [];
|
|
5
|
-
let f = 0;
|
|
6
|
-
for (let c = 0; c < i; c++) {
|
|
7
|
-
const r = Math.max(0, s[c] * a);
|
|
8
|
-
e.push({ pos: f, size: r }), f += r;
|
|
9
|
-
}
|
|
10
|
-
return e;
|
|
11
|
-
}
|
|
12
|
-
function C(s, p, i) {
|
|
13
|
-
return s?.length ? W(s, p) : Array.from({ length: i }, (d, a) => ({
|
|
14
|
-
pos: p * a / i,
|
|
15
|
-
size: p / i
|
|
16
|
-
}));
|
|
17
|
-
}
|
|
18
|
-
function b(s, p, i) {
|
|
19
|
-
const d = s.cells ?? [], a = Math.max(d.length, 1), e = s.colWidthsMm?.length ?? Math.max(1, ...d.map((t) => Array.isArray(t) ? t.length : 0)), f = C(s.colWidthsMm, p, e), c = (t) => t <= 0 ? 0 : t >= e ? f[f.length - 1].pos + f[f.length - 1].size : f[t].pos, r = C(s.rowHeightsMm, i, a), m = (t) => t <= 0 ? 0 : t >= a ? r[r.length - 1].pos + r[r.length - 1].size : r[t].pos, M = /* @__PURE__ */ new Set(), S = (t, n) => `${t}:${n}`, x = [], v = /* @__PURE__ */ new Set(), A = /* @__PURE__ */ new Set(), $ = (t, n) => `v${t}:${n}`, k = (t, n) => `h${t}:${n}`;
|
|
20
|
-
d.forEach((t, n) => {
|
|
21
|
-
if (!Array.isArray(t)) return;
|
|
22
|
-
let o = 0;
|
|
23
|
-
for (const u of t) {
|
|
24
|
-
for (; o < e && M.has(S(n, o)); ) o++;
|
|
25
|
-
if (o >= e) break;
|
|
26
|
-
const K = Math.max(1, Math.min(u?.colSpan ?? 1, e - o)), P = Math.max(1, u?.rowSpan ?? 1), g = Math.min(a, n + P), w = Math.min(e, o + K);
|
|
27
|
-
for (let l = n; l < g; l++)
|
|
28
|
-
for (let h = o; h < w; h++)
|
|
29
|
-
M.add(S(l, h));
|
|
30
|
-
for (let l = o + 1; l < w; l++)
|
|
31
|
-
for (let h = n; h < g; h++) v.add($(l, h));
|
|
32
|
-
for (let l = n + 1; l < g; l++)
|
|
33
|
-
for (let h = o; h < w; h++) A.add(k(l, h));
|
|
34
|
-
const E = c(o), B = m(n);
|
|
35
|
-
x.push({
|
|
36
|
-
ri: n,
|
|
37
|
-
ci: o,
|
|
38
|
-
cell: u ?? {},
|
|
39
|
-
xMm: E,
|
|
40
|
-
yMm: B,
|
|
41
|
-
widthMm: c(w) - E,
|
|
42
|
-
heightMm: m(g) - B
|
|
43
|
-
}), o = w;
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
const y = [];
|
|
47
|
-
for (let t = 1; t < e; t++) {
|
|
48
|
-
let n = -1;
|
|
49
|
-
for (let o = 0; o <= a; o++) {
|
|
50
|
-
const u = o < a && !v.has($(t, o));
|
|
51
|
-
u && n < 0 && (n = o), !u && n >= 0 && (y.push({ kind: "v", pos: c(t), from: m(n), to: m(o) }), n = -1);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
for (let t = 1; t < a; t++) {
|
|
55
|
-
let n = -1;
|
|
56
|
-
for (let o = 0; o <= e; o++) {
|
|
57
|
-
const u = o < e && !A.has(k(t, o));
|
|
58
|
-
u && n < 0 && (n = o), !u && n >= 0 && (y.push({ kind: "h", pos: m(t), from: c(n), to: c(o) }), n = -1);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
return { columns: f, rows: r, cells: x, edges: y };
|
|
62
|
-
}
|
|
63
|
-
export {
|
|
64
|
-
b as r
|
|
65
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";function L(s,i){const d=s.length;if(d===0)return[];const p=s.reduce((c,r)=>c+r,0),a=p>0&&i>0?i/p:1,e=[];let f=0;for(let c=0;c<d;c++){const r=Math.max(0,s[c]*a);e.push({pos:f,size:r}),f+=r}return e}function C(s,i,d){return s?.length?L(s,i):Array.from({length:d},(p,a)=>({pos:i*a/d,size:i/d}))}function P(s,i,d){const p=s.cells??[],a=Math.max(p.length,1),e=s.colWidthsMm?.length??Math.max(1,...p.map(t=>Array.isArray(t)?t.length:0)),f=C(s.colWidthsMm,i,e),c=t=>t<=0?0:t>=e?f[f.length-1].pos+f[f.length-1].size:f[t].pos,r=C(s.rowHeightsMm,d,a),m=t=>t<=0?0:t>=a?r[r.length-1].pos+r[r.length-1].size:r[t].pos,M=new Set,S=(t,n)=>`${t}:${n}`,v=[],x=new Set,A=new Set,$=(t,n)=>`v${t}:${n}`,k=(t,n)=>`h${t}:${n}`;p.forEach((t,n)=>{if(!Array.isArray(t))return;let o=0;for(const u of t){for(;o<e&&M.has(S(n,o));)o++;if(o>=e)break;const G=Math.max(1,Math.min(u?.colSpan??1,e-o)),K=Math.max(1,u?.rowSpan??1),g=Math.min(a,n+K),w=Math.min(e,o+G);for(let l=n;l<g;l++)for(let h=o;h<w;h++)M.add(S(l,h));for(let l=o+1;l<w;l++)for(let h=n;h<g;h++)x.add($(l,h));for(let l=n+1;l<g;l++)for(let h=o;h<w;h++)A.add(k(l,h));const E=c(o),B=m(n);v.push({ri:n,ci:o,cell:u??{},xMm:E,yMm:B,widthMm:c(w)-E,heightMm:m(g)-B}),o=w}});const y=[];for(let t=1;t<e;t++){let n=-1;for(let o=0;o<=a;o++){const u=o<a&&!x.has($(t,o));u&&n<0&&(n=o),!u&&n>=0&&(y.push({kind:"v",pos:c(t),from:m(n),to:m(o)}),n=-1)}}for(let t=1;t<a;t++){let n=-1;for(let o=0;o<=e;o++){const u=o<e&&!A.has(k(t,o));u&&n<0&&(n=o),!u&&n>=0&&(y.push({kind:"h",pos:m(t),from:c(n),to:c(o)}),n=-1)}}return{columns:f,rows:r,cells:v,edges:y}}exports.resolveGridLayout=P;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";const k=require("./render-plan-CckPEQyf.cjs"),F=require("./textwrap-CnGsEum6.cjs"),v=require("./style-CpwiOPyB.cjs"),oe=require("./validate-DfHPD8wX.cjs"),ae=require("./report-params-CjWrjPl6.cjs"),B=require("./template-registry-DWExx0gU.cjs"),j=require("./param-validation-CiTxFeZ8.cjs");function K(e){if(!e||e.kind==="date")return;const t=e.digits;if(!(t!==void 0&&(!Number.isInteger(t)||t<0||t>100))){if(e.kind==="percent"){const n=t??2;return`0${n?`.${"0".repeat(n)}`:""}%`}return t===void 0?e.thousands?"#,##0.###############":void 0:`${e.thousands?"#,##0":"0"}${t?`.${"0".repeat(t)}`:""}`}}function G(e){const t=/^(\d{4})[-/](\d{1,2})[-/](\d{1,2})$/.exec(e.trim());if(t){const r=new Date(Number(t[1]),Number(t[2])-1,Number(t[3]));return Number.isNaN(r.getTime())?null:r}const n=new Date(e);return Number.isNaN(n.getTime())?null:n}function C(e,t){return e.toLocaleString("en-US",{minimumFractionDigits:t,maximumFractionDigits:t})}function ie(e,t){const n=r=>String(r).padStart(2,"0");return t.replace(/YYYY/g,String(e.getFullYear())).replace(/MM/g,n(e.getMonth()+1)).replace(/DD/g,n(e.getDate())).replace(/hh/g,n(e.getHours())).replace(/mm/g,n(e.getMinutes())).replace(/ss/g,n(e.getSeconds()))}function se(e,t,n){return n!=null?t?C(e,n):e.toFixed(n):t?C(e):String(e)}function N(e){const t=typeof e=="number"?e:Number(String(e).replace(/,/g,""));return Number.isFinite(t)?t:null}function _(e,t){if(e==null||e===""||!t)return String(e??"");switch(t.kind){case"number":{const n=N(e);return n==null?String(e):se(n,t.thousands===!0,t.digits)}case"percent":{const n=N(e);return n==null?String(e):`${C(n*100,t.digits??2)}%`}case"date":{const n=t.pattern??"YYYY-MM-DD",r=e instanceof Date?e:G(String(e));return r?ie(r,n):String(e)}default:return String(e)}}function Y(e,t){const n=e[t.field];if(n==null||n==="")return!1;if(typeof t.value=="number"){const a=N(n);if(a==null)return!1;switch(t.op){case">":return a>t.value;case">=":return a>=t.value;case"<":return a<t.value;case"<=":return a<=t.value;case"==":return a===t.value;case"!=":return a!==t.value}}const r=String(n),o=String(t.value);switch(t.op){case"==":return r===o;case"!=":return r!==o;case">":return r>o;case">=":return r>=o;case"<":return r<o;case"<=":return r<=o}return!1}const me=["text","number","boolean","date","decimal"],ce=new Set(["__proto__","prototype","constructor"]);function x(e){throw new Error(`数据契约无效:${e}`)}function V(e){(!e||!Array.isArray(e.fields)||!e.fields.length||e.fields.length>2048)&&x("fields 应包含 1–2048 个字段");const t=new Set;for(const n of e.fields)(!n||typeof n.field!="string"||!n.field.trim()||ce.has(n.field)||t.has(n.field))&&x("字段名应安全、非空且唯一"),t.add(n.field),me.includes(n.type)||x(`未知字段类型 ${n.type}`),ge(n),de(n),ue(n);le(e,t)}function ue(e){e.enum!==void 0&&(!Array.isArray(e.enum)||!e.enum.length||e.enum.some(t=>!J(t,e.type)))&&x("enum 应为匹配字段类型的非空标量数组")}function le(e,t){e.rowKey!==void 0&&((typeof e.rowKey!="string"||!e.rowKey.trim()||!t.has(e.rowKey))&&x("rowKey 应为引用已声明字段的非空字符串"),e.fields.find(n=>n.field===e.rowKey)?.type==="boolean"&&x("布尔字段不能作为业务主键"))}function de(e){for(const t of["label","unit"])e[t]!==void 0&&typeof e[t]!="string"&&x(`${t} 应为字符串`);for(const t of["required","nullable"])e[t]!==void 0&&typeof e[t]!="boolean"&&x(`${t} 应为布尔值`);e.semanticRole!==void 0&&!["identifier","dimension","measure","date","text"].includes(e.semanticRole)&&x("未知字段语义")}function ge(e){for(const t of["min","max","minLength","maxLength"]){const n=e[t];n!==void 0&&(!Number.isFinite(n)||t.includes("Length")&&(!Number.isInteger(n)||n<0))&&x(`${t} 无效`)}e.min!==void 0&&e.max!==void 0&&e.min>e.max&&x("min 不能超过 max"),e.minLength!==void 0&&e.maxLength!==void 0&&e.minLength>e.maxLength&&x("minLength 不能超过 maxLength"),e.type!=="number"&&(e.min!==void 0||e.max!==void 0)&&x("min/max 仅适用于 number,精确小数文本需业务校验"),["number","boolean"].includes(e.type)&&(e.minLength!==void 0||e.maxLength!==void 0)&&x("长度约束仅适用于文本类型")}function fe(e){const t=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e);if(!t)return!1;const n=Number(t[1]),r=Number(t[2]),o=Number(t[3]),a=n%4===0&&(n%100!==0||n%400===0);return n>0&&r>=1&&r<=12&&o>=1&&o<=[31,a?29:28,31,30,31,30,31,31,30,31,30,31][r-1]}function J(e,t){return t==="number"?typeof e=="number"&&Number.isFinite(e):t==="boolean"?typeof e=="boolean":typeof e!="string"?!1:t==="date"?fe(e):t==="decimal"?e.length<=1e4&&/^-?(?:0|[1-9]\d*)(?:\.\d+)?$/.test(e):!0}function he(e,t){if(e==null)return t.required||e===null&&t.nullable===!1?{code:"required",message:"缺少必需字段值"}:void 0;if(!J(e,t.type))return{code:"type",message:`值应为 ${t.type},不会自动转换原始值`};if(t.enum&&!t.enum.includes(e))return{code:"enum",message:"值不在允许的枚举中"};if(typeof e=="number"&&(t.min!==void 0&&e<t.min||t.max!==void 0&&e>t.max))return{code:"range",message:"数值超出范围"};if(typeof e=="string"&&!pe(e,t))return{code:"range",message:"文本长度超出范围"}}function pe(e,t){if(t.minLength===void 0&&t.maxLength===void 0)return!0;let n=0;for(const r of e)n++;return(t.minLength===void 0||n>=t.minLength)&&(t.maxLength===void 0||n<=t.maxLength)}function H(e,t){const n=e??t;if(!Number.isInteger(n)||n<1)throw new Error("数据校验预算应为正整数");return n}function ye(e,t,n){const r=Object.prototype.hasOwnProperty.call(e,t)?e[t]:void 0;if((typeof r!="string"||!r.trim())&&!(typeof r=="number"&&Number.isFinite(r)))return"业务主键应为非空字符串或有限数字";const o=JSON.stringify([typeof r,r]);if(n.has(o))return"业务主键重复";n.add(o)}function U(e,t,n={}){V(t);const r=n.path??"$.rows",o=[],a=H(n.maxIssues,100);if(!Array.isArray(e))return{ok:!1,issues:[{code:"row",path:r,message:"数据集应为对象数组"}]};if(e.length>H(n.maxRows,1e5)||e.length*t.fields.length>H(n.maxCells,2e6))return{ok:!1,issues:[{code:"budget",path:r,message:"数据校验超出行数或单元格预算"}]};const i=new Set;for(let s=0;s<e.length&&o.length<a;s++){const l=e[s];if(!l||typeof l!="object"||Array.isArray(l)){o.push({code:"row",path:`${r}[${s}]`,rowIndex:s,message:"行应为对象"});continue}we(l,t,s,r,i,o,a)}return{ok:o.length===0,issues:o}}function we(e,t,n,r,o,a,i){for(const s of t.fields){if(a.length>=i)return;const l=he(Object.prototype.hasOwnProperty.call(e,s.field)?e[s.field]:void 0,s);l&&a.push({...l,rowIndex:n,field:s.field,path:`${r}[${n}].${s.field}`})}if(t.rowKey&&a.length<i){const s=ye(e,t.rowKey,o);s&&a.push({code:"row-key",path:`${r}[${n}].${t.rowKey}`,message:s,rowIndex:n,field:t.rowKey})}}function be(e){return V(e),{$schema:"https://json-schema.org/draft/2020-12/schema",type:"array",items:{type:"object",properties:Object.fromEntries(e.fields.map(n=>[n.field,Me(n,n.field===e.rowKey)])),required:e.fields.filter(n=>n.required||n.field===e.rowKey).map(n=>n.field),additionalProperties:!0},...e.rowKey?{"x-report-rowKey":e.rowKey}:{}}}function Me(e,t){const n=!t&&e.nullable!==!1&&!e.required;return{type:n?[q(e.type),"null"]:q(e.type),...e.label?{title:e.label}:{},...e.type==="date"?{format:"date"}:{},...e.type==="decimal"?{pattern:"^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$"}:{},...e.enum?{enum:n?[...e.enum,null]:[...e.enum]}:{},...e.min===void 0?{}:{minimum:e.min},...e.max===void 0?{}:{maximum:e.max},...Se(e,t),...t&&e.type==="text"?{pattern:"\\S"}:{},...e.unit?{"x-report-unit":e.unit}:{},...e.semanticRole?{"x-report-semanticRole":e.semanticRole}:{}}}function Se(e,t){const n={};return(e.minLength!==void 0||t&&e.type!=="number")&&(n.minLength=Math.max(e.minLength??0,t?1:0)),e.type==="decimal"?n.maxLength=Math.min(e.maxLength??1e4,1e4):e.maxLength!==void 0&&(n.maxLength=e.maxLength),n}function q(e){return e==="text"||e==="date"||e==="decimal"?"string":e}class L extends Error{constructor(t,n){super(`报表页数超出上限 ${t}(至少 ${n} 页)`),this.limit=t,this.actual=n,this.code="page-limit",this.name="PaginatePageLimitError"}}function xe(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 ve(e,t){return t.heightMm-(e.layout==="wide"?t.marginBottomMm:e.marginBottomMm??t.marginBottomMm)}function Q(e){if(e==null)return"";if(typeof e=="string")return e;if(typeof e=="number")return String(e);if(typeof e=="boolean")return e?"是":"否";if(e instanceof Date)return e.toISOString().slice(0,10);try{return JSON.stringify(e)}catch{return String(e)}}function X(e,t){let n=e.textMetrics.get(t);if(!n){const r=v.resolveFontSize(t).fontSizePt;n={measureOptions:{fontSizePt:r,fontFamily:t.fontFamily??k.DEFAULT_FONT_FAMILY,italic:t.italic,bold:t.bold,letterSpacingPt:t.letterSpacing},lineMm:r*(t.lineHeight??k.LINE_HEIGHT)*25.4/72},e.textMetrics.set(t,n)}return n}function Z(e,t,n){return n==="identifier"||n==="dimension"||n==="date"?"center":n==="measure"?"right":n==="text"?"left":t?.kind==="number"||t?.kind==="percent"?"right":t?.kind==="date"||e instanceof Date||typeof e=="boolean"?"center":typeof e=="number"&&Number.isFinite(e)?"right":"left"}function Pe(e){if(e===null||typeof e=="string"||typeof e=="boolean"||typeof e=="number"&&Number.isFinite(e))return e}function $e(e,t){const n=e.fontSizePt??k.DEFAULT_FONT_PT,r=e.paddingMm??1,o=e.columns.map(m=>m.align??m.style?.align??e.align??"left"),a=e.columns.map((m,c)=>({...v.mergeComponentStyles({fontSize:n,verticalAlign:"middle"},m.style),align:o[c]==="auto"?"left":o[c]})),i=a.map((m,c)=>o[c]==="auto"?{left:m,center:{...m,align:"center"},right:{...m,align:"right"}}:void 0),s=e.columns.map((m,c)=>m.rules?.map(M=>{const h=i[c];if(h)return{left:v.mergeComponentStyles(h.left,M.style),center:v.mergeComponentStyles(h.center,M.style),right:v.mergeComponentStyles(h.right,M.style)};const S=v.mergeComponentStyles(a[c],M.style);return{left:S,center:S,right:S}})),l=e.columns.map(m=>{let c=v.mergeComponentStyles({fontSize:n,bold:e.headerBold??!0,align:"center",verticalAlign:"middle",backgroundColor:e.headerBackgroundColor},m.style);return e.headerAlign!==void 0&&(c.align=e.headerAlign),c=v.mergeComponentStyles(c,e.headerStyle),m.headerAlign!==void 0&&(c.align=m.headerAlign),v.mergeComponentStyles(c,m.headerStyle)}),d=e.columns.map(m=>m.header);let u=e.rowHeightMm??0;for(let m=0;m<d.length;m++){const c=l[m],M=v.resolveFontSize(c).fontSizePt,h=F.wrapText(d[m],e.columns[m].widthMm-r*2,{fontSizePt:M,fontFamily:c.fontFamily??k.DEFAULT_FONT_FAMILY,italic:c.italic,bold:c.bold,letterSpacingPt:c.letterSpacing},t),S=M*(c.lineHeight??k.LINE_HEIGHT)*25.4/72;u=Math.max(u,Math.max(h.length,1)*S+r*2)}const g=d.map((m,c)=>({text:m,style:l[c]})),b=e.border===!1?{borderTop:!1,borderRight:!1,borderBottom:!1,borderLeft:!1}:{borderBottom:!0,borderLeft:!0,borderRight:!0,borderTop:!0},y=e.columns.map(m=>m.widthMm),f=ke(e.headerGrid,y,{cells:[g],colWidthsMm:y,rowHeightsMm:[u],paddingMm:r});return{fontSizePt:n,paddingMm:r,cellStyles:a,autoStyles:i,ruleStyles:s,textMetrics:new WeakMap,numberFormats:e.columns.map(m=>K(m.format)),borderStyle:b,headerHeightMm:f.rowHeightsMm.reduce((m,c)=>m+c,0),headerGrid:f,colWidthsMm:y,columns:e.columns}}function ke(e,t,n){if(!e)return n;if(!e.cells.length)throw new Error("自定义列表表头至少需要一行");const r=e.rowHeightsMm??e.cells.map(()=>n.rowHeightsMm[0]);if(r.length!==e.cells.length||r.some(o=>!Number.isFinite(o)||o<=0))throw new Error("自定义列表表头行高无效");return{...e,colWidthsMm:t,rowHeightsMm:r}}function Re(e,t,n){const r=t.format?.kind==="number"||t.format?.kind==="percent";t.valueType!==void 0?e.valueType=t.valueType:r&&(e.valueType="number"),t.editable!==void 0&&(e.editable=t.editable),(typeof e.value=="number"||e.value==null)&&n!==void 0&&(e.numberFormat=n)}function W(e,t,n){const r=e.columns;let o=e.rowHeightFloorMm;const a=new Array(r.length);for(let i=0;i<r.length;i++){const s=r[i],l=t[s.field],d=e.autoStyles[i]?Z(l,s.format,s.semanticRole):"left";let u=e.autoStyles[i]?.[d]??e.cellStyles[i];if(s.rules)for(let c=0;c<s.rules.length;c++){const M=s.rules[c];if(Y(t,M.when)){u=e.ruleStyles[i][c][d];break}}const g=s.format?_(l,s.format):Q(l),b=X(e,u),y=F.wrapText(g,s.widthMm-e.paddingMm*2,b.measureOptions,n);o=Math.max(o,y.length*b.lineMm+e.paddingMm*2);const f=Pe(l),m={text:g,style:u};f!==void 0&&(m.value=f),Re(m,s,e.numberFormats[i]),a[i]=m}return{grid:{cells:[a],colWidthsMm:e.colWidthsMm,rowHeightsMm:[o],paddingMm:e.paddingMm},heightMm:o}}function*Te(e,t){if(!t){for(const r of e)yield{kind:"row",row:r};return}const n=new Map;for(const r of e){const o=Q(r[t.field]),a=n.get(o);a?a.push(r):n.set(o,[r])}for(const[r,o]of n){yield{kind:"groupHeader",label:(t.headerTemplate??"{value}").replace(/\{value\}/g,r),firstRow:o[0]};for(const a of o)yield{kind:"row",row:a};t.subtotal?.length&&(yield{kind:"subtotal",label:t.subtotalLabel??"小计",rows:o})}}function Le(e,t){let n=0;for(const r of e){const o=typeof r[t]=="number"?r[t]:Number(r[t]);Number.isFinite(o)&&(n+=o)}return n}function ee(e,t,n){return new Map(n.map(r=>{const o=e.find(i=>i.field===r)?.format??{kind:"number",thousands:!0},a=Le(t,r);return[r,{text:_(a,o),value:a,numberFormat:K(o)}]}))}function te(e,t){const n=e.findIndex(r=>t.includes(r.field));return n>0?n:1}function I(e,t,n,r,o,a){const i=[],s=Math.max(1,Math.min(a,e.columns.length)),l=v.mergeComponentStyles({fontSize:e.fontSizePt},o);i.push({text:n,colSpan:s,style:{bold:!0,...l}});for(let g=s;g<e.columns.length;g++){const b=e.columns[g],y=r.get(b.field),f=e.autoStyles[g]?.[Z(y?.value,b.format)]??e.cellStyles[g];i.push({...y,text:y?.text??"",style:v.mergeComponentStyles(f,o)})}let d=e.rowHeightFloorMm,u=0;for(const g of i){let b=0;const y=u+(g.colSpan??1);for(;u<y;u++)b+=e.colWidthsMm[u]??0;const f=X(e,g.style),m=F.wrapText(g.text??"",b-e.paddingMm*2,f.measureOptions,t);d=Math.max(d,m.length*f.lineMm+e.paddingMm*2)}return{grid:{cells:[i],colWidthsMm:e.colWidthsMm,rowHeightsMm:[d],paddingMm:e.paddingMm},heightMm:d}}function Ee(e,t,n){const{templatePage:r,current:o,warnings:a,nextId:i,pushCurrent:s}=n,l=()=>ve(r,o),d=o.marginTopMm,u={id:n.tableId,columnKeys:e.columns.map(p=>p.field),...e.layout===void 0?{}:{layout:e.layout},...e.title===void 0?{}:{title:e.title}};let g=0;const b={kind:"rect",leftMm:e.leftMm,topMm:0,widthMm:e.widthMm,heightMm:t.headerHeightMm,grid:t.headerGrid,nid:i("listh"),table:{...u,role:"header",rowIndex:-1},style:t.borderStyle},y=p=>o.components.push({...b,topMm:p});let f=e.topMm;y(f),f+=t.headerHeightMm+n.mmPerRow;function m(){const p=r.layout==="wide"?0:e.topMm;return e.headerEveryPage!==!1?p+t.headerHeightMm:r.layout==="wide"?0:d}function c(){const p=r.layout==="wide"?0:o.marginBottomMm;return r.heightMm-p-m()}function M(p){if(f+p<=l())return;s(),o.components=[],o.heightMm=r.heightMm,r.layout==="wide"&&(o.marginTopMm=0,o.marginBottomMm=0);const $=r.layout==="wide"?0:e.topMm;e.headerEveryPage!==!1?(y($),f=$+t.headerHeightMm):f=r.layout==="wide"?0:d}function h(p,$,R,E){const T=c();p.heightMm>T&&a.push(`列表 ${e.id??e.dataset} 行高 ${p.heightMm.toFixed(2)}mm 超出单页可用高度 ${T.toFixed(2)}mm,预览与打印可能截断内容`),M(p.heightMm),o.components.push({kind:"rect",leftMm:e.leftMm,topMm:f,widthMm:e.widthMm,heightMm:p.heightMm,grid:p.grid,nid:i($),table:{...u,role:R,rowIndex:g++,...E?{source:E}:{}},style:t.borderStyle}),f+=p.heightMm}function S(p){p<=c()&&M(p)}return{keepTogether:S,placeGridRow:h}}function Ne(e,t){if(!e.rowKey)return;const n=t[e.rowKey];if((typeof n!="string"||!n.trim())&&!(typeof n=="number"&&Number.isFinite(n)))throw new Error(`数据集 ${e.dataset} 的 ${e.rowKey} 应为稳定的字符串或有限数字主键`);const r=e.revisionField?t[e.revisionField]:void 0,o=e.sourceTokenField?t[e.sourceTokenField]:void 0;if(r!==void 0&&typeof r!="string"&&!(typeof r=="number"&&Number.isFinite(r)))throw new Error("业务修订号应为字符串或有限数字");if(o!==void 0&&typeof o!="string")throw new Error("来源令牌应为字符串");return{datasetId:e.dataset,rowKey:n,...r===void 0?{}:{revision:r},...o===void 0?{}:{sourceToken:o}}}function Fe(e,t){const n=new Map;if(!e.rowKey)return n;const r=new Set;for(const o of t){const a=Ne(e,o),i=JSON.stringify(a.rowKey);if(r.has(i))throw new Error(`数据集 ${e.dataset} 的业务主键重复:${String(a.rowKey)}`);r.add(i),n.set(o,a)}return n}function Ae(e,t,n,r,o){if(!e.grandTotal)return;const a=typeof e.grandTotal=="object"?e.grandTotal:void 0,i=a?.fields??e.groupBy?.subtotal??[];if(i.length===0){r.warnings.push(`列表 ${e.id??""} 配置了 grandTotal 但未提供合计字段(groupBy.subtotal 或 grandTotal.fields)`);return}const s=I(n,r.measurer,a?.label??"合计",ee(e.columns,t,i),a?.style??{},te(e.columns,i));o.placeGridRow(s,"listgt","grand-total")}function De(e,t,n){const r=Fe(e,t),o=e.columns.reduce((u,g)=>u+g.widthMm,0),a=o>e.widthMm?e.widthMm/o:1,i=a===1?e:{...e,columns:e.columns.map(u=>({...u,widthMm:u.widthMm*a}))},s={...$e(i,n.measurer),rowHeightFloorMm:i.rowHeightMm??0},l=Ee(i,s,n);let d;for(const u of Te(t,i.groupBy))if(u.kind==="row")l.placeGridRow(d??W(s,u.row,n.measurer),"listr","body",r.get(u.row)),d=void 0;else if(u.kind==="groupHeader"){const g=I(s,n.measurer,u.label,new Map,i.groupBy?.headerStyle??{},i.columns.length);d=W(s,u.firstRow,n.measurer),i.groupBy?.keepWithNext!==!1&&l.keepTogether(g.heightMm+d.heightMm),l.placeGridRow(g,"listg","group-header")}else{const g=i.groupBy?.subtotal??[],b=I(s,n.measurer,u.label,ee(i.columns,u.rows,g),i.groupBy?.subtotalStyle??{},te(i.columns,g));l.placeGridRow(b,"listst","subtotal")}Ae(i,t,s,n,l)}function z(e){return e.kind==="text"&&typeof e.text=="string"&&(e.text.includes("{page}")||e.text.includes("{totalPages}"))}function He(e,t,n,r,o,a){const i={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};r.push(i);for(const s of n){const l={...s,text:String(s.text??"").replace(/\{page\}/g,String(r.length))};i.components.push(l),l.text.includes("{totalPages}")&&o.push(l)}if(e.layout==="wide"){const s=i.components.reduce((l,d)=>Math.max(l,d.topMm+d.heightMm),0);i.marginBottomMm=a?e.marginBottomMm??0:0,i.pageHeightMm=Math.max(1,s+i.marginBottomMm)}}function ne(e,t,n={}){const r=typeof n=="number"?{mmPerRow:n}:n;if(r.maxPages!==void 0&&(!Number.isSafeInteger(r.maxPages)||r.maxPages<1))throw new RangeError("maxPages 应为正安全整数");const o=[],a=[],i=[];let s=0;const l=d=>`${d}_${(++s).toString(36)}`;for(const[d,u]of e.pages.entries()){const g=xe(u),b=u.components.filter(z),y=(f=!1)=>{if(r.maxPages!==void 0&&a.length>=r.maxPages)throw new L(r.maxPages,a.length+1);He(u,g,b,a,i,f)};for(const[f,m]of u.components.entries()){if(z(m))continue;if(m.kind!=="list"){g.components.push(m);continue}const c=t[m.dataset];Array.isArray(c)||o.push(`数据集 ${m.dataset} 未提供数据,列表 ${m.id??""} 输出为空`),De(m,Array.isArray(c)?c:[],{templatePage:u,current:g,warnings:o,nextId:l,pushCurrent:y,measurer:r.measurer??F.heuristicMeasurer,mmPerRow:r.mmPerRow??0,tableId:`table:${d}:${f}`})}y(!0)}for(const d of i)d.text=d.text.replace(/\{totalPages\}/g,String(a.length));return{plan:{schemaVersion:k.RENDER_PLAN_SCHEMA_VERSION,pages:a},warnings:o}}function Ce(e){if(!("mapData"in e))return e;const{load:t,mapData:n,...r}=e;return{...r,load:async o=>{const a=await t(o);P(o.signal);try{return n(a,o)}catch(i){throw new w("validate",`报表 ${o.reportId} 数据映射失败`,i)}}}}class w extends Error{constructor(t,n,r){super(n),this.name="ReportSourceError",this.code=t,this.cause=r}}function A(e){const t=new Error("报表加载已取消");return t.name="AbortError",Object.defineProperty(t,"cause",{value:e.reason}),t}function P(e){if(e?.aborted)throw A(e)}function O(e,t){return t?new Promise((n,r)=>{const o=()=>t.removeEventListener("abort",a),a=()=>{o(),r(A(t))};t.addEventListener("abort",a,{once:!0}),t.aborted&&a(),Promise.resolve(e).then(i=>{o(),n(i)},i=>{o(),r(i)})}):Promise.resolve(e)}function Ie(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new w("validate",`报表 ${t} 的数据集应为对象`);for(const[n,r]of Object.entries(e))if(!Array.isArray(r)||r.some(o=>!o||typeof o!="object"||Array.isArray(o)))throw new w("validate",`报表 ${t} 的数据集 ${n} 应为对象数组`)}async function Oe(e,t,n){const{reportId:r,signal:o}=t;try{const a=await O(e(t),o);P(o);const i=B.validateReportTemplate(a);if(!i.ok)throw new w("validate",`报表 ${r} 模板校验失败:${i.errors.slice(0,3).map(s=>`${s.path}: ${s.message}`).join("; ")}`);return n.push(...i.warnings.map(s=>`${r}: ${s.path}: ${s.message}`)),a}catch(a){throw o?.aborted?A(o):a instanceof w?a:a instanceof B.ReportTemplateError?new w("validate",`报表 ${r} 模板校验失败:${a.message}`,a):new w("fetch",`报表 ${r} 模板加载失败:${a instanceof Error?a.message:String(a)}`,a)}}async function Ke(e,t,n,r,o){const a=t.signal;let i;try{if(e.load)i=await O(e.load(t),a);else if(e.provider){const s=await O(e.provider.query(t),a);P(a),_e(s,n),i=s.datasets,r?.(n,s)}else i=e.datasets??{}}catch(s){throw a?.aborted?A(a):s instanceof w?s:new w("fetch",`报表 ${n} 取数失败:${s instanceof Error?s.message:String(s)}`,s)}return P(a),Ie(i,n),o?.(n,i),Be(e,i,n),i}function _e(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new w("validate",`报表 ${t} Provider 应返回 datasets 结果对象`);for(const n of["revision","sourceToken"])if(e[n]!==void 0&&typeof e[n]!="string")throw new w("validate",`报表 ${t} Provider ${n} 应为字符串`);if(e.diagnostics!==void 0&&(!Array.isArray(e.diagnostics)||e.diagnostics.some(n=>!n||typeof n.code!="string"||typeof n.message!="string"||!["info","warning","error"].includes(n.severity))))throw new w("validate",`报表 ${t} Provider diagnostics 不符合结构化诊断契约`)}function Be(e,t,n){for(const[r,o]of Object.entries(e.dataSchema??{})){let a;try{a=U(Object.prototype.hasOwnProperty.call(t,r)?t[r]:void 0,o,{...e.dataValidation,path:`$.datasets.${r}`})}catch(i){throw new w("config",`报表 ${n} 数据集 ${r} 字段契约配置无效`,i)}if(!a.ok)throw new w("validate",`报表 ${n} 数据集 ${r} 不符合字段契约:${a.issues[0]?.message}`,{issues:a.issues})}}function je(e,t,n,r,o){const a=o?o.maxPages-o.usedPages:void 0;try{if(a!==void 0&&a<1&&e.pages.length)throw new L(0,1);const i=a===void 0?n.pagination:{...n.pagination,maxPages:Math.max(1,Math.min(a,n.pagination?.maxPages??a))};return ne(e,t,i)}catch(i){const s=i instanceof L&&o&&i.limit===a?new L(o.maxPages,o.usedPages+i.actual):i;throw new w("validate",`报表 ${r} 排版失败:${s instanceof Error?s.message:String(s)}`,s)}}function qe(e,t,n,r){const o=new Map,a=i=>{let s=o.get(i);return s===void 0&&(s=JSON.stringify([n,r,i]),o.set(i,s)),s};for(const i of t.pages)e.push({...i,components:i.components.map(s=>s.table?{...s,table:{...s.table,id:a(s.table.id)}}:s)})}function We(e,t={}){if(t.maxPages!==void 0&&(!Number.isSafeInteger(t.maxPages)||t.maxPages<1))throw new w("config","maxPages 应为正安全整数");function n(o){const a=Object.prototype.hasOwnProperty.call(e,o)?e[o]:void 0;if(!a)throw new w("config",`未注册报表 ${o}`);return a}return Object.assign(async({reportIds:o,params:a,signal:i,onWarning:s,onQueryResult:l})=>{P(i);const d=[...o],u={...a};if(d.length===0)throw new w("config","缺少报表 ID");const g=d.map(n),b=g.map(h=>j.assertReportParams(h.params??(typeof h.template=="function"?[]:h.template.params)??[],u)),y=[],f=[];for(const[h,S]of g.entries()){P(i);const p=d[h],$={reportId:p,params:b[h],signal:i},R=typeof S.template=="function"?await Oe(S.template,$,f):S.template;$.params=j.assertReportParams(S.params??R.params??[],$.params);const E=await Ke(S,$,p,l,t.onDatasets?(D,re)=>t.onDatasets(D,re,R):void 0);P(i);const T=je(R,E,S,p,t.maxPages===void 0?void 0:{maxPages:t.maxPages,usedPages:y.length});qe(y,T.plan,h,p),f.push(...T.warnings.map(D=>`${p}: ${D}`))}P(i);const m={schemaVersion:k.RENDER_PLAN_SCHEMA_VERSION,pages:y},c=oe.validateRenderPlan(m);if(!c.ok)throw new w("validate",`渲染计划校验失败:${c.errors.slice(0,3).map(h=>`${h.path}: ${h.message}`).join("; ")}`);f.push(...c.warnings.map(h=>`${h.path}: ${h.message}`));const M=s??t.onWarning??(h=>console.warn("[mach-report]",h));for(const h of f)P(i),M(h);return P(i),m},{getParamDefs:o=>ae.getReportParamDefs(e,o)})}exports.PaginatePageLimitError=L;exports.ReportSourceError=w;exports.createReportSource=We;exports.datasetJsonSchema=be;exports.defineReport=Ce;exports.evalStyleRule=Y;exports.formatValue=_;exports.paginateTemplate=ne;exports.parseDateLocal=G;exports.toExcelNumberFormat=K;exports.toNumber=N;exports.validateDatasetRows=U;
|