@agile-team/mach-report 1.1.2 → 1.2.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 CHANGED
@@ -39,16 +39,18 @@ app.use(machReportPlugin); // 零配置:同源直连 jh4j 端点
39
39
  <MachReportPreview temp-id="CK_TEMPLATE_001" :params="{ id: '9' }" height="calc(100vh - 206px)" />
40
40
  ```
41
41
 
42
+ 零配置适用于同源且浏览器请求已带鉴权的部署;宿主通过请求拦截器加 token 时,请传入宿主 `request`。中文 PDF 需部署支持中文的字体并配置 `pdfFontUrl`,缺字时导出会报错,避免下载不完整文件。完整验收边界见[对标与实用化验收](https://github.com/ChenyCHENYU/MachReport/blob/main/docs/comparison-and-acceptance.md)。
43
+
42
44
  ## 核心能力
43
45
 
44
46
  | 域 | 能力 |
45
47
  |---|---|
46
48
  | **报表语义** | 分组小计 / 总合计(防孤行)、页码占位符 `{page}/{totalPages}`、列格式化(千分位 / 日期 / 百分比)、条件格式规则 |
47
- | **模板体系** | DSL / JSON / jh4j 存量导入三来源;多模板拼接;公共页眉页脚;参数面板(声明式查询条件) |
48
- | **渲染性能** | 5k 行分页 ~57ms;页级虚拟化;transform 缩放零重排;Canvas 窗口化分页器(内存 O(窗口)) |
49
- | **导出出口** | PDF 前端矢量直出(字体子集化 + 缓存)、Excel 真表格、**Word 可编辑 .doc**、**图片 PNG/JPEG**(每页一张)、打印(named pages / 流式分块)——全部零后端 |
49
+ | **模板体系** | DSL / JSON / jh4j 存量导入三来源;多模板拼接;公共页眉页脚;参数面板(声明式查询条件)。存量导入的富文本、图片类和子报表可能降级,需按模板验收 |
50
+ | **渲染性能** | 页级虚拟化;transform 缩放;Canvas 窗口化分页器;内部性能预算见下文 |
51
+ | **导出出口** | PDF 前端矢量直出、Excel 真表格、Word 兼容 HTML `.doc`、图片 PNG/JPEG(每页一张)、逐页打印;复杂版式以 PDF 验收 |
50
52
  | **预览交互** | 搜索(跳页 + 高亮)、Ctrl+滚轮 / 键盘缩放翻页、缩略图侧栏、缩放记忆、调试面板 `?mrp-debug=1` |
51
- | **工程健壮性** | 加载竞态代际令牌、结构化错误码、请求超时、批量打印合并文档、渲染计划规模告警 |
53
+ | **工程健壮性** | 加载竞态代际令牌、结构化错误码、请求超时、批量打印合并文档、渲染计划规模告警、导出保真提示 |
52
54
 
53
55
  <details>
54
56
  <summary><b>单包架构说明(为什么只有一个包)</b></summary>
@@ -205,16 +207,9 @@ jh4j gridPlan ──(契约兼容消费) ├
205
207
  </details>
206
208
 
207
209
  <details>
208
- <summary><b>性能实测</b></summary>
210
+ <summary><b>性能预算与比较边界</b></summary>
209
211
 
210
- | 指标 | jh4j 现状(实测感知) | MachReport 实测 |
211
- |---|---|---|
212
- | 分页 5,000 行(139 页) | 秒级(全量 DOM) | **~57ms**(单测预算门锁定) |
213
- | 100 页含千行明细首屏 | 秒级 | < 300ms(虚拟化 + Canvas 窗口化) |
214
- | 缩放 / 翻页 | 触发重排 | < 16ms(transform 矩阵变换) |
215
- | Canvas 大报表内存 | — | **O(窗口)**(A4@dpr2 ≈14MB/页,全量渲染不可行) |
216
- | 打印 / PDF 导出 | 后端往返 1-3s | < 500ms(前端矢量直出 + 字体子集化缓存) |
217
- | 引擎主入口体积 | 随 jh4j 整包 | ~27KB min(零依赖可摇树) |
212
+ `perf-budget.test.ts` 是内部回归门槛:5,000 行分页 < 600ms、DOM 渲染 < 120ms/页、1,000 页窗口计算 100 次 < 50ms(测试环境口径)。它不含网关取数、真实字体加载、打印机或浏览器下载耗时。与 jh4j / FineReport 的性能比较需使用相同模板、数据、机器和网络做端到端测量;方法见[验收文档](https://github.com/ChenyCHENYU/MachReport/blob/main/docs/comparison-and-acceptance.md)。
218
213
 
219
214
  </details>
220
215
 
@@ -306,4 +301,4 @@ Source-available © ChenyCHENYU (Agile Team). 使用需事先取得书面授权
306
301
  </div>
307
302
 
308
303
 
309
- **v1.1.0** · 单包零依赖 · 质量门禁全绿 · 语义化版本演进
304
+ **v1.2.0** · 单包多入口 · 类型、单测与浏览器验证 · 语义化版本演进
@@ -0,0 +1,6 @@
1
+ "use strict";var ot=Object.create;var Pe=Object.defineProperty;var rt=Object.getOwnPropertyDescriptor;var at=Object.getOwnPropertyNames;var lt=Object.getPrototypeOf,st=Object.prototype.hasOwnProperty;var it=(t,n,l,a)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of at(n))!st.call(t,r)&&r!==l&&Pe(t,r,{get:()=>n[r],enumerable:!(a=rt(n,r))||a.enumerable});return t};var xe=(t,n,l)=>(l=t!=null?ot(lt(t)):{},it(n||!t||!t.__esModule?Pe(l,"default",{value:t,enumerable:!0}):l,t));const e=require("vue"),O=require("@agile-team/mach-report"),W=require("./plugin-C4qpbdMJ.cjs");function Be(t,n,l={}){const a=l.pxPerMm??3.7795275590551185,r=e.computed(()=>Math.max(0,e.unref(l.gapPx)??18)),o=e.ref(0),i=e.ref(800),p=e.computed(()=>(t.value?.pages??[]).map(P=>P.pageHeightMm*a)),c=e.computed(()=>{const P=t.value?.pages??[];let w=0,k=0;for(const C of P)w+=C.pageHeightMm*a+r.value,k=Math.max(k,C.pageWidthMm*a);return{w:k,h:w}}),f=e.computed(()=>O.computePageWindow({pageHeightsPx:p.value,viewportHeightPx:i.value/n.value,scrollTopPx:o.value/n.value,overscan:1,gapPx:r.value})),m=e.computed(()=>{const P=t.value;if(!P)return[];const{start:w,end:k}=f.value;return k<w?[]:P.pages.slice(w,k+1).map((C,R)=>({page:C,index:w+R}))});function v(P,w){let k=0;return C=>{k||(k=requestAnimationFrame(()=>{if(k=0,o.value=C.scrollTop,i.value=C.clientHeight||800,w.value<=0)return;const R=C.querySelectorAll(".mrp-page-holder");if(!R.length)return;const u=C.getBoundingClientRect().top+56;let h=1;R.forEach(d=>{d.getBoundingClientRect().top<=u&&(h=Number(d.dataset.page??1))}),P.value=Math.max(1,Math.min(w.value,h))}))}}return{contentSize:c,windowRange:f,visiblePages:m,makeScrollHandler:v,refreshViewport(P){P&&(i.value=P.clientHeight||800)}}}function $e(t){const n=e.ref(1),l=e.ref("fit");function a(){requestAnimationFrame(()=>{const o=t();!o||!o.viewport||(n.value=Math.min(1,Math.max(.3,(o.viewport.clientWidth-48)/Math.max(1,o.pageWidthPx))))})}function r(o){o==="fit"?(l.value="fit",a()):(l.value="raw",n.value=o/100)}return{zoom:n,zoomMode:l,applyFitZoom:a,setZoom:r}}const _=8;function ee(){return new Promise(t=>setTimeout(t,0))}function Q(t){return`p${Math.round(t.pageWidthMm)}x${Math.round(t.pageHeightMm)}`}function ce(t){const n=new Map;return t.pages.forEach(r=>{n.has(Q(r))||n.set(Q(r),r)}),`<!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(r=>`@page ${Q(r)}{size:${Math.round(r.pageWidthMm)}mm ${Math.round(r.pageHeightMm)}mm;margin:0;}`).join(`
5
+ `)}
6
+ body{margin:0;background:#fff;}`}</style></head><body>`}function de(t){const n=O.renderPage(t,96,{},document);return n.style.page=Q(t),n.outerHTML}function me(t){return{head:ce(t),pageChunks:t.pages.map(de)}}async function ut(t,n={}){const l={schemaVersion:"mach-report-batch-print",pages:t.flatMap(i=>i.pages)};if(l.pages.length===0)return;const a=ce(l),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);let o=!1;try{const i=r.contentDocument;i.open(),i.write(a);for(let p=0;p<l.pages.length;p++)i.write(de(l.pages[p])),p%_===_-1&&(n.onProgress?.(p+1,l.pages.length),await ee());i.write("</body></html>"),i.close(),await ee(),n.onProgress?.(l.pages.length,l.pages.length),o=!0,r.contentWindow?.focus(),r.contentWindow?.print()}catch(i){n.onError?.(i instanceof Error?`批量打印失败: ${i.message}`:"批量打印失败")}finally{o?setTimeout(()=>r.remove(),6e4):r.remove()}}function Me(t){const{head:n,pageChunks:l}=me(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>/,"")}`}${l.join("")}</body></html>`,filename:"mach-report.doc"}}function Se(t,n){let l=null,a=!1,r=null,o=null,i=null;function p(){l?.remove(),l=null}function c(u,h){const d=URL.createObjectURL(u),g=document.createElement("a");g.href=d,g.download=h,g.click(),setTimeout(()=>URL.revokeObjectURL(d),1e4)}async function f(){if(a)return;const u=t.value;if(!u||u.pages.length===0)return;a=!0,p();const h=ce(u);l=document.createElement("iframe"),l.style.cssText="position:fixed;right:0;bottom:0;width:0;height:0;border:0;visibility:hidden;",document.body.appendChild(l);const d=l;try{const g=d.contentDocument;g.open(),g.write(h);for(let b=0;b<u.pages.length;b++)if(g.write(de(u.pages[b])),b%_===_-1&&await ee(),d!==l)return;g.write("</body></html>"),g.close(),await ee(),d.contentWindow?.focus(),d.contentWindow?.print()}catch{n.onError("调用打印失败,请改用导出 PDF")}finally{a=!1}}function m(u){if(r?.plan===u)return r.promise;const h=n.getPdfExporter()(u,n.onWarning).finally(()=>{r?.promise===h&&(r=null)});return r={plan:u,promise:h},h}async function v(){const u=t.value;if(!u||u.pages.length===0)return;if(o?.plan===u)return o.promise;n.onBusy?.("PDF");const h={},d=(async()=>{try{const g=await m(u);if(t.value!==u)return;c(new Blob([g],{type:"application/pdf"}),"mach-report.pdf")}catch(g){n.onError(g instanceof Error?`PDF 导出失败: ${g.message}`:"PDF 导出失败","pdf")}finally{n.onBusy?.(null),o?.token===h&&(o=null)}})();return o={plan:u,promise:d,token:h},d}async function P(){const u=t.value;if(!(!u||u.pages.length===0)){n.onBusy?.("Excel");try{const{renderPlanToXlsx:h}=await import("@agile-team/mach-report/xlsx"),{buffer:d,warnings:g}=await h(u);if(t.value!==u)return;g.length>0&&n.onWarning?.(`Excel 有 ${g.length} 处内容未导出:${g.slice(0,2).join(";")}`),c(new Blob([d],{type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}),"mach-report.xlsx")}catch(h){n.onError(h instanceof Error?`Excel 导出失败: ${h.message}`:"Excel 导出失败","export")}finally{n.onBusy?.(null)}}}async function w(){const u=t.value;if(!u||u.pages.length===0)return;if(i?.plan===u)return i.promise;n.onBusy?.("图片");const h={},d=(async()=>{try{const{blobs:g}=await O.renderPlanToImages(u,{dpr:Math.min(2,typeof devicePixelRatio=="number"?devicePixelRatio:1)});if(t.value!==u)return;g.forEach((b,B)=>{c(b,g.length>1?`mach-report-page-${B+1}.png`:"mach-report.png")})}catch(g){n.onError(g instanceof Error?`图片导出失败: ${g.message}`:"图片导出失败","export")}finally{n.onBusy?.(null),i?.token===h&&(i=null)}})();return i={plan:u,promise:d,token:h},d}function k(){const u=t.value;if(!(!u||u.pages.length===0))try{const{html:h,filename:d}=Me(u);c(new Blob([h],{type:"application/msword;charset=utf-8"}),d)}catch(h){n.onError(h instanceof Error?`Word 导出失败: ${h.message}`:"Word 导出失败","export")}}function C(u){const h=t.value;if(!h||h.pages.length===0)return;if(u==="pdf"){v();return}if(u==="xlsx"||u==="excel"){P();return}if(u==="png"||u==="image"){w();return}if(u==="word"||u==="doc"){k();return}if(u!=="html"){n.onError(`不支持的导出格式:${u}`,"export");return}const{head:d,pageChunks:g}=me(h),b=`${d}${g.join("")}</body></html>`;c(new Blob([b],{type:"text/html;charset=utf-8"}),"mach-report.html")}function R(){const u=t.value;if(!u||u.pages.length===0)return;const h=window.open("","_blank");if(!h){n.onError("浏览器拦截了弹窗,请允许弹窗后重试");return}m(u).then(d=>{if(t.value!==u){h.close();return}const g=URL.createObjectURL(new Blob([d],{type:"application/pdf"})),b=h.document;b.title="PDF 预览",b.documentElement.style.height="100%",b.body.style.cssText="margin:0;height:100%;";const B=b.createElement("iframe");B.title="PDF 预览",B.style.cssText="display:block;width:100%;height:100%;border:0;",B.src=g,b.body.replaceChildren(B),setTimeout(()=>URL.revokeObjectURL(g),6e4)}).catch(d=>{h.close(),n.onError(d instanceof Error?`PDF 预览失败: ${d.message}`:"PDF 预览失败","pdf")})}return{print:f,exportAs:C,exportImages:w,exportWord:k,openPdfWindow:R,releasePrintFrame:p}}const Re="mrp-hit";function ct(t){t.querySelectorAll(`mark.${Re}`).forEach(l=>{const a=l.parentNode;if(a){for(;l.firstChild;)a.insertBefore(l.firstChild,l);l.remove(),a.normalize()}})}function dt(t,n){const l=n.trim();if(!l)return 0;const a=l.toLowerCase(),r=document.createTreeWalker(t,NodeFilter.SHOW_TEXT,{acceptNode(p){const c=p.parentElement;return!c||c.closest("mark")||/^(SCRIPT|STYLE)$/.test(c.tagName)?NodeFilter.FILTER_REJECT:(p.nodeValue??"").toLowerCase().includes(a)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT}}),o=[];for(let p=r.nextNode();p;p=r.nextNode())o.push(p);let i=0;for(const p of o){const c=p.nodeValue??"",f=c.toLowerCase(),m=p.parentElement;if(!m)continue;const v=document.createDocumentFragment();let P=0,w=f.indexOf(a);for(;w>=0;){w>P&&v.appendChild(document.createTextNode(c.slice(P,w)));const k=document.createElement("mark");k.className=Re,k.textContent=c.slice(w,w+l.length),v.appendChild(k),i++,P=w+l.length,w=f.indexOf(a,P)}P<c.length&&v.appendChild(document.createTextNode(c.slice(P))),m.replaceChild(v,p)}return i}function ke(t,n){let l=0,a=t.toLowerCase().indexOf(n);for(;a>=0;)l++,a=t.toLowerCase().indexOf(n,a+n.length);return l}function mt(t){const{plan:n,gotoPage:l,highlight:a,clearHighlights:r}=t,o=t.debounceMs??200,i=e.ref(!1),p=e.ref(""),c=e.ref(""),f=e.ref(0);let m=null;const v=e.computed(()=>{const d=p.value.trim().toLowerCase(),g=n.value;if(!d||!g)return[];const b=[];return g.pages.forEach((B,G)=>{for(const D of B.components)if(D.grid){for(const z of D.grid.cells??[])for(const A of z??[])if(typeof A?.text=="string")for(let Z=0;Z<ke(A.text,d);Z++)b.push(G)}else if(D.kind==="text"&&typeof D.text=="string")for(let z=0;z<ke(D.text,d);z++)b.push(G)}),b}),P=e.computed(()=>v.value.length);function w(d){if(c.value=d,m&&clearTimeout(m),d.trim()===""){m=null,p.value="",f.value=0;return}m=setTimeout(()=>{m=null,p.value=c.value,f.value=0;const g=v.value[0];g!=null&&l(g+1)},o)}function k(d){const g=v.value.length;g!==0&&(f.value=(f.value+d+g)%g,l(v.value[f.value]+1))}function C(){i.value=!i.value}function R(d){const g=p.value.trim();g&&a(d,g)}function u(d){r(d)}function h(){c.value="",p.value="",f.value=0,m&&clearTimeout(m),m=null}return{visible:i,query:p,matchIndex:f,matchCount:P,toggle:C,onInput:w,onNav:k,apply:R,clear:u,reset:h}}function pt(t,n){const l=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}}),a=e.computed(()=>!l.value||!n.plan.value?0:Math.round(JSON.stringify(n.plan.value).length/1024)),r=e.computed(()=>!l.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:a.value});return{enabled:l,debugStats:r}}function ft(t,n){const{thumbsRoot:l,visible:a,renderThumbCanvas:r}=n;let o=null;function i(f,m){if(!t.value||f.childElementCount>0)return;const v=r(m);v&&(v.style.width="100%",v.style.height="100%",v.style.display="block",f.appendChild(v))}return{schedule:()=>{!a.value||!t.value||!l.value||typeof IntersectionObserver>"u"||(o?.disconnect(),o=new IntersectionObserver(f=>{for(const m of f){if(!m.isIntersecting)continue;const v=m.target;i(v,Number(v.dataset.thumb??1)-1),o?.unobserve(v)}},{root:l.value,rootMargin:"200px"}),l.value.querySelectorAll("[data-thumb]").forEach(f=>{o.observe(f)}))},destroy:()=>{o?.disconnect(),o=null}}}function gt(){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}}}const vt={class:"mrp-toolbar"},ht={class:"mrp-title"},yt=["disabled"],wt={class:"mrp-pageinfo"},bt=["disabled"],Et={key:1,class:"mrp-search"},Pt=["placeholder","value"],xt={key:0,class:"mrp-search-count"},kt=["disabled"],Ct=["disabled"],Bt=e.defineComponent({__name:"ReportToolbar",props:{pageCount:{},currentPage:{},zoomMode:{},zoom:{},showExport:{type:Boolean},showPrint:{type:Boolean},showPdfWindow:{type:Boolean},messages:{},search:{},thumbsVisible:{type:Boolean}},emits:["goto","zoom","export","print","pdf-window","search-input","search-nav","search-toggle","thumbs-toggle"],setup(t){const n=t,l=e.ref(null);e.watch(()=>n.search.visible,r=>{r&&e.nextTick(()=>l.value?.focus())});function a(r,o,i){return r.replace("{cur}",String(o)).replace("{total}",String(i))}return(r,o)=>(e.openBlock(),e.createElementBlock("div",vt,[e.createElementVNode("span",ht,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:o[0]||(o[0]=i=>r.$emit("goto",t.currentPage-1))},e.toDisplayString(t.messages.prevPage),9,yt),e.createElementVNode("span",wt,e.toDisplayString(a(t.messages.pageInfo,t.currentPage,t.pageCount)),1),e.createElementVNode("button",{class:"mrp-nav",type:"button",disabled:t.currentPage>=t.pageCount,onClick:o[1]||(o[1]=i=>r.$emit("goto",t.currentPage+1))},e.toDisplayString(t.messages.nextPage),9,bt)],64)):e.createCommentVNode("",!0),o[17]||(o[17]=e.createElementVNode("span",{class:"mrp-spacer"},null,-1)),t.search.visible?(e.openBlock(),e.createElementBlock("div",Et,[e.createElementVNode("input",{ref_key:"searchInputRef",ref:l,class:"mrp-search-input",type:"text",placeholder:t.messages.searchPlaceholder,value:t.search.query,onInput:o[2]||(o[2]=i=>r.$emit("search-input",i.target.value))},null,40,Pt),t.search.query?(e.openBlock(),e.createElementBlock("span",xt,e.toDisplayString(a(t.messages.matchInfo,t.search.matchIndex+1,t.search.matchCount)),1)):e.createCommentVNode("",!0),e.createElementVNode("button",{class:"mrp-nav",type:"button",disabled:t.search.matchCount===0,onClick:o[3]||(o[3]=i=>r.$emit("search-nav",-1))},e.toDisplayString(t.messages.prevMatch),9,kt),e.createElementVNode("button",{class:"mrp-nav",type:"button",disabled:t.search.matchCount===0,onClick:o[4]||(o[4]=i=>r.$emit("search-nav",1))},e.toDisplayString(t.messages.nextMatch),9,Ct)])):e.createCommentVNode("",!0),e.createElementVNode("button",{class:e.normalizeClass(["mrp-nav",{"mrp-active":t.search.visible}]),type:"button",title:"Ctrl+F",onClick:o[5]||(o[5]=i=>r.$emit("search-toggle"))}," 🔍 ",2),e.createElementVNode("button",{class:e.normalizeClass(["mrp-nav",{"mrp-active":t.thumbsVisible}]),type:"button",onClick:o[6]||(o[6]=i=>r.$emit("thumbs-toggle"))}," ▦ "+e.toDisplayString(t.messages.thumbnails),3),e.createElementVNode("button",{class:e.normalizeClass(["mrp-nav",{"mrp-active":t.zoomMode==="fit"}]),type:"button",onClick:o[7]||(o[7]=i=>r.$emit("zoom","fit"))},e.toDisplayString(t.messages.fitWidth),3),e.createElementVNode("button",{class:e.normalizeClass(["mrp-nav",{"mrp-active":t.zoomMode==="raw"&&Math.round(t.zoom*100)===100}]),type:"button",onClick:o[8]||(o[8]=i=>r.$emit("zoom",100))}," 100% ",2),e.createElementVNode("button",{class:e.normalizeClass(["mrp-nav",{"mrp-active":t.zoomMode==="raw"&&Math.round(t.zoom*100)===150}]),type:"button",onClick:o[9]||(o[9]=i=>r.$emit("zoom",150))}," 150% ",2),t.showExport?(e.openBlock(),e.createElementBlock("button",{key:2,class:"mrp-nav",type:"button",onClick:o[10]||(o[10]=i=>r.$emit("export","html"))},e.toDisplayString(t.messages.exportHtml),1)):e.createCommentVNode("",!0),t.showExport?(e.openBlock(),e.createElementBlock("button",{key:3,class:"mrp-nav",type:"button",onClick:o[11]||(o[11]=i=>r.$emit("export","pdf"))},e.toDisplayString(t.messages.exportPdf),1)):e.createCommentVNode("",!0),t.showExport?(e.openBlock(),e.createElementBlock("button",{key:4,class:"mrp-nav",type:"button",onClick:o[12]||(o[12]=i=>r.$emit("export","xlsx"))},e.toDisplayString(t.messages.exportExcel),1)):e.createCommentVNode("",!0),t.showExport?(e.openBlock(),e.createElementBlock("button",{key:5,class:"mrp-nav",type:"button",onClick:o[13]||(o[13]=i=>r.$emit("export","png"))},e.toDisplayString(t.messages.exportImage),1)):e.createCommentVNode("",!0),t.showExport?(e.openBlock(),e.createElementBlock("button",{key:6,class:"mrp-nav",type:"button",onClick:o[14]||(o[14]=i=>r.$emit("export","word"))},e.toDisplayString(t.messages.exportWord),1)):e.createCommentVNode("",!0),t.showPrint?(e.openBlock(),e.createElementBlock("button",{key:7,class:"mrp-nav",type:"button",onClick:o[15]||(o[15]=i=>r.$emit("print"))},e.toDisplayString(t.messages.print),1)):e.createCommentVNode("",!0),t.showPdfWindow?(e.openBlock(),e.createElementBlock("button",{key:8,class:"mrp-nav",type:"button",onClick:o[16]||(o[16]=i=>r.$emit("pdf-window"))},e.toDisplayString(t.messages.pdfWindow),1)):e.createCommentVNode("",!0)]))}}),pe=(t,n)=>{const l=t.__vccOpts||t;for(const[a,r]of n)l[a]=r;return l},Te=pe(Bt,[["__scopeId","data-v-48cc0980"]]),$t={class:"mrp-params"},Mt={class:"mrp-params-title"},St={class:"mrp-params-grid"},Rt={class:"mrp-param-label"},Tt={key:0,class:"mrp-param-star"},Nt=["value","onChange"],Dt={value:"",disabled:"",hidden:""},Vt=["value"],Ft=["type","placeholder","value","onInput"],It={class:"mrp-params-actions"},Wt=e.defineComponent({__name:"ReportParamPanel",props:{defs:{},modelValue:{},messages:{},attempted:{type:Boolean}},emits:["update:modelValue","query","reset"],setup(t,{emit:n}){const l=t,a=n,r=e.ref({...l.modelValue});e.watch(()=>l.modelValue,c=>{r.value={...c}});const o=e.computed(()=>l.defs.map(c=>({def:c,label:c.label??c.field,value:r.value[c.field]??""})));function i(c,f){r.value={...r.value,[c]:f},a("update:modelValue",{...r.value})}function p(c){const f=l.defs.find(m=>m.field===c);return l.attempted&&f?.required===!0&&!(r.value[c]??"").trim()}return(c,f)=>(e.openBlock(),e.createElementBlock("div",$t,[e.createElementVNode("span",Mt,e.toDisplayString(t.messages.paramsTitle),1),e.createElementVNode("div",St,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,m=>(e.openBlock(),e.createElementBlock("label",{key:m.def.field,class:e.normalizeClass(["mrp-param",{"mrp-param-missing":p(m.def.field)}])},[e.createElementVNode("span",Rt,[e.createTextVNode(e.toDisplayString(m.label),1),m.def.required?(e.openBlock(),e.createElementBlock("i",Tt,"*")):e.createCommentVNode("",!0)]),(m.def.type??"text")==="select"?(e.openBlock(),e.createElementBlock("select",{key:0,class:"mrp-param-input",value:m.value,onChange:v=>i(m.def.field,v.target.value),onKeydown:f[0]||(f[0]=e.withKeys(v=>c.$emit("query"),["enter"]))},[e.createElementVNode("option",Dt,e.toDisplayString(m.def.placeholder??`请选择${m.label}`),1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.def.options??[],v=>(e.openBlock(),e.createElementBlock("option",{key:v.value,value:v.value},e.toDisplayString(v.label),9,Vt))),128))],40,Nt)):(e.openBlock(),e.createElementBlock("input",{key:1,class:"mrp-param-input",type:m.def.type==="number"?"number":m.def.type==="date"?"date":"text",placeholder:m.def.placeholder??`请输入${m.label}`,value:m.value,onInput:v=>i(m.def.field,v.target.value),onKeydown:f[1]||(f[1]=e.withKeys(v=>c.$emit("query"),["enter"]))},null,40,Ft))],2))),128))]),e.createElementVNode("div",It,[e.createElementVNode("button",{class:"mrp-nav mrp-param-query",type:"button",onClick:f[2]||(f[2]=m=>c.$emit("query"))},e.toDisplayString(t.messages.query),1),e.createElementVNode("button",{class:"mrp-nav",type:"button",onClick:f[3]||(f[3]=m=>c.$emit("reset"))},e.toDisplayString(t.messages.reset),1)])]))}}),Ne=pe(Wt,[["__scopeId","data-v-aafce92d"]]),De={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:"重试",searchPlaceholder:"搜索报表内容",matchInfo:"{cur}/{total}",prevMatch:"‹",nextMatch:"›",thumbnails:"缩略图",paramsTitle:"查询条件",query:"查 询",reset:"重 置",paramRequired:"请填写{label}"},Ve={shellBg:"#525659",shellFg:"#e8e8e8",toolbarBg:"#323639",toolbarBorder:"#22252a",toolbarFg:"#e8e8e8",btnFg:"#cfcfcf",btnBorder:"#4a4d52",btnHoverBg:"#414549",btnHoverFg:"#ffffff",btnActiveBg:"#2d5fb8"};function zt(t){return t}function Lt(t){return t}const I={showExport:!0,showPrint:!0,showPdfWindow:!0,showParams:!0,gapPx:18,pdfFontUrl:"/simhei.ttf",logger:console},Ht={warn:()=>{},info:()=>{}};function Fe(t,n){const l=n?t?.presets?.[n]:t?.defaultPreset?t?.presets?.[t.defaultPreset]:void 0,a={...t?.defaults,...l};return{showExport:a.showExport??I.showExport,showPrint:a.showPrint??I.showPrint,showPdfWindow:a.showPdfWindow??I.showPdfWindow,showParams:a.showParams??I.showParams,gapPx:a.gapPx??I.gapPx,pdfFontUrl:a.pdfFontUrl??I.pdfFontUrl,theme:{...Ve,...a.theme},messages:{...De,...a.messages},logger:a.logger??I.logger}}function Ie(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 Ot(t){const n=e.inject(W.MACH_REPORT_CONFIG_KEY,null),l=e.computed(()=>{const a=n?.value??null,r="defaults"in t&&"presets"in t?t:{defaults:t,presets:{}};return a?{defaults:{...a.defaults,...r.defaults},presets:{...a.presets,...r.presets},defaultPreset:r.defaultPreset??a.defaultPreset}:r});e.provide(W.MACH_REPORT_CONFIG_KEY,l)}function We(){return e.inject(W.MACH_REPORT_CONFIG_KEY,e.computed(()=>null))}function ze(t={fontUrl:"/simhei.ttf"}){let n=null;return async(l,a)=>{n||(n=await import("@agile-team/mach-report/pdf"));const r=t.fontUrl?await n.loadFontWithCache(t.fontUrl):null,{bytes:o,unsupportedTextCount:i,pageErrors:p,fidelityWarnings:c}=await n.renderPlanToPdf(l,r?{customFontBytes:r}:{});if(i>0)throw new Error(`PDF 中有 ${i} 行文字无法编码;请部署支持所用文字的字体并配置 pdfFontUrl`);if(p.length>0)throw new Error(`PDF 有 ${p.length} 页渲染失败:${p[0]}`);return c.length>0&&a?.(`PDF 有 ${c.length} 处版式降级:${c.slice(0,2).join(";")}`),o}}class j extends Error{constructor(n,l,a){super(l),this.name="MachReportError",this.code=n,this.cause=a}}function Le(t){return t instanceof j?{code:t.code,cause:t.cause}:{code:"render",cause:t}}const At={class:"mrp-main"},qt={key:0,class:"mrp-state"},Ut={key:1,class:"mrp-state mrp-error"},Kt={key:2,class:"mrp-state"},jt=["data-page"],Gt=["onClick"],Zt=["data-thumb"],Yt={class:"mrp-thumb-no"},Jt={class:"mrp-overlay"},Xt={key:2,class:"mrp-debug","aria-hidden":"true"},X=96/25.4,Ce="mach-report:ui",Qt=e.defineComponent({__name:"ReportPreview",props:{tempId:{type:[String,Array],default:null},furnitureTempId:{type:String,default:""},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},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},fetcher:{type:Function,default:null}},emits:["loaded","error","warning"],setup(t,{expose:n,emit:l}){e.useCssVars(s=>({a2716f8c:C.value+"px"}));const a=t,r=l,o=e.shallowRef(null),i=e.ref(!1),p=e.ref(""),c=e.ref(null),f=e.ref(1),m=e.ref(null),v=e.ref(null),P=e.ref(null),w=e.ref(!1),k=gt(),C=e.computed(()=>Math.max(0,A.value)),R=e.inject(W.MACH_REPORT_FETCHER_KEY,null),u=e.inject(W.MACH_REPORT_PDF_EXPORTER_KEY,null),h=e.computed(()=>W.normalizeTempIds(a.tempId)),d=e.computed(()=>o.value?.pages.length??0),g=We(),b=e.computed(()=>Fe(g.value,a.preset)),B=e.computed(()=>({...b.value.messages,...a.messages})),G=e.computed(()=>a.showExport??b.value.showExport),D=e.computed(()=>a.showPrint??b.value.showPrint),z=e.computed(()=>a.showPdfWindow??b.value.showPdfWindow),A=e.computed(()=>a.gapPx??b.value.gapPx),Z=e.computed(()=>a.showParams??b.value.showParams);let fe=null,te=null;function Oe(){if(u)return u;const s=b.value.pdfFontUrl;return(!te||fe!==s)&&(fe=s,te=ze({fontUrl:s})),te}const V=e.computed(()=>a.paramDefs??[]),F=e.ref({}),ne=e.ref(!1);function Y(s){const y={};for(const E of s)y[E.field]=a.params[E.field]??E.defaultValue??"";F.value=y,ne.value=!1}Y(V.value),e.watch(V,s=>Y(s)),e.watch(()=>JSON.stringify(a.params),()=>Y(V.value));const Ae=e.computed(()=>{const s={...a.params};for(const[y,E]of Object.entries(F.value))E===""?delete s[y]:s[y]=E;return s});function qe(){return V.value.filter(s=>s.required===!0&&!(F.value[s.field]??"").trim())}function Ue(){ne.value=!0;const s=qe();if(s.length>0){const y=s[0].label??s[0].field,E=B.value.paramRequired.replace("{label}",y);p.value=E,r("error",E,{code:"param"});return}N()}function Ke(){Y(V.value)}const je=e.computed(()=>({height:a.height,...Ie(b.value.theme)})),{zoom:S,zoomMode:L,applyFitZoom:ge,setZoom:oe}=$e(()=>({viewport:v.value,pageWidthPx:(o.value?.pages[0]?.pageWidthMm??210)*X})),Ge=Be(o,S,{pxPerMm:X,gapPx:A}),{contentSize:re,windowRange:q,visiblePages:Ze,makeScrollHandler:Ye,refreshViewport:ve}=Ge,Je=Ye(f,d);function ae(s){L.value="raw",S.value=Math.min(3,Math.max(.3,s))}function le(){he(),o.value=null,f.value=1,$.reset()}let J=0;async function N(){const s=++J,y=a.fetcher??R;if(h.value.length===0){p.value="缺少报表模板 ID",le(),r("error",p.value,{code:"param"});return}if(!y){p.value="未提供渲染数据源 fetcher",le(),r("error",p.value,{code:"config"});return}i.value=!0,p.value="",c.value=null,le();const E=k.start();try{const x=await y({tempIds:h.value,furnitureTempId:a.furnitureTempId||void 0,params:{...Ae.value}});if(s!==J)return;const M=O.validateRenderPlan(x);if(!M.ok){const U=M.errors.slice(0,3).map(K=>`${K.path}: ${K.message}`).join("; ");throw new j("validate",`渲染计划校验失败(${M.errors.length} 处): ${U}`)}M.warnings.length>0&&b.value.logger.warn("[mach-report] 渲染计划告警:",M.warnings),o.value=x,f.value=1,k.end(E),v.value&&(v.value.scrollTop=0),L.value==="fit"&&ge(),r("loaded",x.pages.length)}catch(x){if(s!==J)return;const M=x instanceof j?x:new j("fetch",x instanceof Error?x.message:"预览加载失败",x);p.value=M.message,r("error",M.message,Le(M))}finally{s===J&&(i.value=!1)}}function T(s){if(d.value<=0)return;const y=Math.max(1,Math.min(d.value,s));f.value=y;const E=v.value;if(!E)return;let x=0;for(let M=0;M<y-1;M++)x+=(o.value?.pages[M]?.pageHeightMm??0)*X+C.value;E.scrollTop=x*S.value}const{print:se,exportAs:ie,openPdfWindow:ue,releasePrintFrame:he}=Se(o,{getPdfExporter:Oe,onError:(s,y)=>{c.value={kind:"error",message:s},r("error",s,{code:y??"print"})},onWarning:s=>{c.value={kind:"warning",message:s},r("warning",s)},onBusy:s=>{s?c.value={kind:"progress",message:B.value.exporting.replace("{format}",s)}:c.value?.kind==="progress"&&(c.value=null)}});function ye(s,y={}){F.value={...F.value,...s},y.reload!==!1&&N()}const Xe={reload:N,print:se,exportAs:ie,openPdfWindow:ue,gotoPage:T,setParams:ye};e.provide(W.MACH_REPORT_CONTROLLER_KEY,Xe);const $=mt({plan:o,gotoPage:T,highlight:dt,clearHighlights:ct});function Qe(s){s.ctrlKey&&(s.preventDefault(),ae(S.value*(s.deltaY<0?1.1:1/1.1)))}function _e(s){if((s.ctrlKey||s.metaKey)&&s.key.toLowerCase()==="f"){s.preventDefault(),$.visible.value||$.toggle();return}switch(s.key){case"PageDown":s.preventDefault(),T(f.value+1);break;case"PageUp":s.preventDefault(),T(f.value-1);break;case"Home":s.preventDefault(),T(1);break;case"End":s.preventDefault(),T(d.value);break;case"+":case"=":s.preventDefault(),ae(S.value*1.1);break;case"-":s.preventDefault(),ae(S.value/1.1);break}}function et(){try{localStorage.setItem(Ce,JSON.stringify({zoomMode:L.value==="fit"?"fit":Math.round(S.value*100)}))}catch{}}e.watch([L,S],et),e.watchEffect(()=>{const s=o.value;if(!s)return;const y=m.value;if(!y)return;y.querySelectorAll(".mrp-page-holder").forEach(x=>{const M=Number(x.dataset.page??0)-1,U=s.pages[M];if(!U||x.childElementCount>0){if(x.firstElementChild){const Ee=x.firstElementChild;$.clear(Ee),$.apply(Ee)}return}x.style.width=`${U.pageWidthMm*X}px`;const K=O.renderPage(U,96,{},document);$.apply(K),x.appendChild(K)})},{flush:"post"}),e.watch(()=>$.query.value,s=>{s||m.value?.querySelectorAll(".mrp-page-holder").forEach(y=>{$.clear(y)})});const we=ft(o,{thumbsRoot:P,visible:w,renderThumbCanvas:s=>{try{const{canvases:y}=O.renderPlanToCanvas(o.value,{start:s,end:s,dpr:.2});return y[0]??null}catch{return null}}});e.watchEffect(()=>{we.schedule()},{flush:"post"});const tt=e.computed(()=>a.debug),{debugStats:H}=pt(tt,{plan:o,pageCount:d,windowRange:q,zoom:S,loadMs:k.loadMs});function be(){ve(v.value),L.value==="fit"&&ge()}function nt(){try{const s=JSON.parse(localStorage.getItem(Ce)??"{}");s.zoomMode==="fit"?oe("fit"):typeof s.zoomMode=="number"&&oe(s.zoomMode)}catch{}}return e.onMounted(()=>{window.addEventListener("resize",be),ve(v.value),nt(),a.autoLoad&&N()}),e.onUnmounted(()=>{window.removeEventListener("resize",be),we.destroy(),$.reset(),he()}),e.watch(()=>[a.tempId,a.furnitureTempId,JSON.stringify(a.params)],()=>{a.autoLoad&&N()}),e.watch(()=>a.fetcher??R,()=>{a.autoLoad&&N()}),n({reload:N,print:se,exportAs:ie,openPdfWindow:ue,gotoPage:T,setParams:ye}),(s,y)=>(e.openBlock(),e.createElementBlock("div",{class:"mach-report-preview",style:e.normalizeStyle(je.value)},[Z.value&&V.value.length>0?(e.openBlock(),e.createBlock(Ne,{key:0,defs:V.value,modelValue:F.value,"onUpdate:modelValue":y[0]||(y[0]=E=>F.value=E),messages:B.value,attempted:ne.value,onQuery:Ue,onReset:Ke},null,8,["defs","modelValue","messages","attempted"])):e.createCommentVNode("",!0),e.createVNode(Te,{"page-count":d.value,"current-page":f.value,"zoom-mode":e.unref(L),zoom:e.unref(S),"show-export":G.value,"show-print":D.value,"show-pdf-window":z.value,messages:B.value,search:{visible:e.unref($).visible.value,query:e.unref($).query.value,matchIndex:e.unref($).matchIndex.value,matchCount:e.unref($).matchCount.value},"thumbs-visible":w.value,onGoto:T,onZoom:e.unref(oe),onExport:y[1]||(y[1]=E=>e.unref(ie)(E)),onPrint:e.unref(se),onPdfWindow:e.unref(ue),onSearchInput:e.unref($).onInput,onSearchNav:e.unref($).onNav,onSearchToggle:e.unref($).toggle,onThumbsToggle:y[2]||(y[2]=E=>w.value=!w.value)},null,8,["page-count","current-page","zoom-mode","zoom","show-export","show-print","show-pdf-window","messages","search","thumbs-visible","onZoom","onPrint","onPdfWindow","onSearchInput","onSearchNav","onSearchToggle"]),c.value?(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["mrp-export-notice",`mrp-export-${c.value.kind}`]),role:"alert"},e.toDisplayString(c.value.message),3)):e.createCommentVNode("",!0),e.createElementVNode("div",At,[e.createElementVNode("div",{ref_key:"viewportRef",ref:v,class:"mrp-body",tabindex:"0",onWheel:Qe,onKeydown:_e,onScrollPassive:y[3]||(y[3]=E=>e.unref(Je)(E.target))},[i.value?(e.openBlock(),e.createElementBlock("div",qt,e.toDisplayString(B.value.loading),1)):p.value?(e.openBlock(),e.createElementBlock("div",Ut,[e.createTextVNode(e.toDisplayString(p.value)+" ",1),e.createElementVNode("button",{class:"mrp-retry",type:"button",onClick:N},e.toDisplayString(B.value.retry),1)])):!o.value||d.value===0?(e.openBlock(),e.createElementBlock("div",Kt,e.toDisplayString(B.value.empty),1)):(e.openBlock(),e.createElementBlock("div",{key:3,class:"mrp-scale",style:e.normalizeStyle({width:`${e.unref(re).w*e.unref(S)}px`,height:`${e.unref(re).h*e.unref(S)}px`})},[e.createElementVNode("div",{ref_key:"containerRef",ref:m,class:"mrp-scale-inner",style:e.normalizeStyle({transform:`scale(${e.unref(S)})`,transformOrigin:"top left",width:`${e.unref(re).w}px`})},[e.unref(q).padTopPx>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mrp-spacer-top",style:e.normalizeStyle({height:`${e.unref(q).padTopPx}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(Ze),E=>(e.openBlock(),e.createElementBlock("div",{key:E.index,class:"mrp-page-holder","data-page":E.index+1},null,8,jt))),128)),e.unref(q).padBottomPx>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"mrp-spacer-bottom",style:e.normalizeStyle({height:`${e.unref(q).padBottomPx}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)],4)],4))],544),w.value&&d.value>0?(e.openBlock(),e.createElementBlock("aside",{key:0,ref_key:"thumbsRef",ref:P,class:"mrp-thumbs"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value?.pages??[],(E,x)=>(e.openBlock(),e.createElementBlock("div",{key:x,class:e.normalizeClass(["mrp-thumb",{"mrp-thumb-active":x+1===f.value}]),onClick:M=>T(x+1)},[e.createElementVNode("div",{class:"mrp-thumb-box","data-thumb":x+1,style:e.normalizeStyle({height:`${Math.round(E.pageHeightMm/E.pageWidthMm*116)}px`})},null,12,Zt),e.createElementVNode("span",Yt,e.toDisplayString(x+1),1)],10,Gt))),128))],512)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Jt,[e.renderSlot(s.$slots,"default",{},void 0,!0)]),e.unref(H)?(e.openBlock(),e.createElementBlock("div",Xt,[y[4]||(y[4]=e.createElementVNode("div",null,"mach-report debug",-1)),e.createElementVNode("div",null,"pages: "+e.toDisplayString(e.unref(H).pages)+" | window: ["+e.toDisplayString(e.unref(H).window)+"]",1),e.createElementVNode("div",null,"zoom: "+e.toDisplayString(e.unref(H).zoom)+" | load: "+e.toDisplayString(e.unref(H).loadMs),1),e.createElementVNode("div",null,"plan: "+e.toDisplayString(e.unref(H).planKB)+"KB",1)])):e.createCommentVNode("",!0)],4))}}),He=pe(Qt,[["__scopeId","data-v-a0054844"]]),_t=Object.freeze(Object.defineProperty({__proto__:null,default:He},Symbol.toStringTag,{value:"Module"}));exports.DEFAULT_MESSAGES=De;exports.DEFAULT_THEME=Ve;exports.MachReportError=j;exports.ReportParamPanel=Ne;exports.ReportPreview=He;exports.ReportPreview$1=_t;exports.ReportToolbar=Te;exports.SILENT_LOGGER=Ht;exports.buildPrintDocument=me;exports.buildWordHtml=Me;exports.createDefaultPdfExporter=ze;exports.defineMachReportConfig=zt;exports.defineMachReportPreset=Lt;exports.printPlans=ut;exports.provideMachReportConfig=Ot;exports.resolveConfig=Fe;exports.themeToCssVars=Ie;exports.toErrorDetail=Le;exports.useMachReportConfig=We;exports.usePageWindow=Be;exports.usePrintExport=Se;exports.useZoom=$e;