@agile-team/mach-report 1.2.2 → 2.1.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.
Files changed (88) hide show
  1. package/LICENSE +2 -4
  2. package/LICENSING.md +15 -0
  3. package/README.md +240 -92
  4. package/dist/ReportPreview-Dwdsyk9b.js +1558 -0
  5. package/dist/ReportPreview-VHAIfsz1.cjs +6 -0
  6. package/dist/index.cjs +5 -5
  7. package/dist/index.d.cts +738 -14
  8. package/dist/index.d.ts +738 -14
  9. package/dist/index.js +858 -805
  10. package/dist/pdf.cjs +47 -47
  11. package/dist/pdf.d.cts +155 -6
  12. package/dist/pdf.d.ts +155 -6
  13. package/dist/pdf.js +3542 -3466
  14. package/dist/plugin-Bl00j_CP.cjs +1 -0
  15. package/dist/plugin-DVScnZ4C.js +25 -0
  16. package/dist/report-params-BB85g7mg.js +10 -0
  17. package/dist/report-params-D1NeY-eR.cjs +1 -0
  18. package/dist/sql.cjs +65 -64
  19. package/dist/sql.d.cts +109 -5
  20. package/dist/sql.d.ts +109 -5
  21. package/dist/sql.js +7947 -7922
  22. package/dist/style-CFZ-HE2s.cjs +3 -0
  23. package/dist/{style-6ihHKVCM.js → style-DnmtG7Gl.js} +69 -81
  24. package/dist/style.css +1 -1
  25. package/dist/vue/async.d.cts +769 -335
  26. package/dist/vue/async.d.ts +769 -335
  27. package/dist/vue/index.d.cts +1321 -14
  28. package/dist/vue/index.d.ts +1321 -14
  29. package/dist/vue-async.cjs +1 -1
  30. package/dist/vue-async.js +11 -12
  31. package/dist/vue.cjs +1 -1
  32. package/dist/vue.js +130 -50
  33. package/dist/xlsx.cjs +20 -20
  34. package/dist/xlsx.d.cts +2292 -5
  35. package/dist/xlsx.d.ts +2292 -5
  36. package/dist/xlsx.js +5452 -5443
  37. package/package.json +7 -13
  38. package/dist/ReportPreview-CJLvkTVn.cjs +0 -6
  39. package/dist/ReportPreview-mZiGtf0L.js +0 -1231
  40. package/dist/builder/template-builder.d.ts +0 -69
  41. package/dist/compat/jh4j-template.d.ts +0 -12
  42. package/dist/defaults.d.ts +0 -27
  43. package/dist/format.d.ts +0 -48
  44. package/dist/layout/paginate.d.ts +0 -97
  45. package/dist/layout/textwrap.d.ts +0 -36
  46. package/dist/manager/api.d.ts +0 -45
  47. package/dist/manager/index.d.ts +0 -2
  48. package/dist/manager/types.d.ts +0 -50
  49. package/dist/manager.cjs +0 -1
  50. package/dist/manager.d.cts +0 -5
  51. package/dist/manager.d.ts +0 -5
  52. package/dist/manager.js +0 -104
  53. package/dist/pdf/font-loader.d.ts +0 -6
  54. package/dist/pdf/index.d.ts +0 -2
  55. package/dist/pdf/render-pdf.d.ts +0 -25
  56. package/dist/plugin-C4qpbdMJ.cjs +0 -1
  57. package/dist/plugin-DcmAPK_K.js +0 -85
  58. package/dist/render/canvas.d.ts +0 -76
  59. package/dist/render/dom.d.ts +0 -10
  60. package/dist/render/grid-geometry.d.ts +0 -41
  61. package/dist/render/style.d.ts +0 -33
  62. package/dist/render/window.d.ts +0 -23
  63. package/dist/schema/render-plan.d.ts +0 -96
  64. package/dist/schema/validate.d.ts +0 -15
  65. package/dist/sql/ast-check.d.ts +0 -14
  66. package/dist/sql/compile.d.ts +0 -31
  67. package/dist/sql/expr.d.ts +0 -21
  68. package/dist/sql/index.d.ts +0 -4
  69. package/dist/sql/tokenizer.d.ts +0 -25
  70. package/dist/style-Xq08-IsV.cjs +0 -3
  71. package/dist/units.d.ts +0 -11
  72. package/dist/vue/ReportParamPanel.d.ts +0 -19
  73. package/dist/vue/ReportPreview.d.ts +0 -209
  74. package/dist/vue/ReportToolbar.d.ts +0 -42
  75. package/dist/vue/adapters.d.ts +0 -40
  76. package/dist/vue/composables/useHighlight.d.ts +0 -8
  77. package/dist/vue/composables/usePageWindow.d.ts +0 -25
  78. package/dist/vue/composables/usePrintExport.d.ts +0 -40
  79. package/dist/vue/composables/useReportSearch.d.ts +0 -73
  80. package/dist/vue/composables/useZoom.d.ts +0 -15
  81. package/dist/vue/config.d.ts +0 -108
  82. package/dist/vue/controller.d.ts +0 -29
  83. package/dist/vue/errors.d.ts +0 -16
  84. package/dist/vue/injection-keys.d.ts +0 -14
  85. package/dist/vue/local-adapter.d.ts +0 -12
  86. package/dist/vue/pdf-exporter.d.ts +0 -13
  87. package/dist/vue/plugin.d.ts +0 -354
  88. package/dist/xlsx/render-xlsx.d.ts +0 -20
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@agile-team/mach-report",
3
- "version": "1.2.2",
4
- "description": "MachReport 报表引擎单包:RenderPlan 模型 + 分页 + DOM/Canvas/PDF 渲染 + 动态 SQL + 管理端 API + Vue 3 契约组件(零运行时依赖;./vue 为框架子路径,vue 为可选 peer)",
3
+ "version": "2.1.0",
4
+ "description": "独立的 TypeScript 报表引擎:模板分页、DOM/Canvas/PDF/Excel 输出与 Vue 3 预览组件",
5
5
  "type": "module",
6
6
  "sideEffects": [
7
7
  "**/*.css",
@@ -40,16 +40,6 @@
40
40
  "default": "./dist/sql.cjs"
41
41
  }
42
42
  },
43
- "./manager": {
44
- "import": {
45
- "types": "./dist/manager.d.ts",
46
- "default": "./dist/manager.js"
47
- },
48
- "require": {
49
- "types": "./dist/manager.d.cts",
50
- "default": "./dist/manager.cjs"
51
- }
52
- },
53
43
  "./vue": {
54
44
  "import": {
55
45
  "types": "./dist/vue/index.d.ts",
@@ -89,7 +79,8 @@
89
79
  "node": ">=18.0.0"
90
80
  },
91
81
  "files": [
92
- "dist"
82
+ "dist",
83
+ "LICENSING.md"
93
84
  ],
94
85
  "peerDependencies": {
95
86
  "vue": "^3.2.0"
@@ -99,6 +90,9 @@
99
90
  "optional": true
100
91
  }
101
92
  },
93
+ "dependencies": {
94
+ "@types/node": "^22.12.0"
95
+ },
102
96
  "devDependencies": {
103
97
  "@pdf-lib/fontkit": "^1.1.1",
104
98
  "@vitejs/plugin-vue": "^6.0.9",
@@ -1,6 +0,0 @@
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;