@agile-team/mach-report 1.0.0 → 1.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.
@@ -62,7 +62,7 @@ function w(r = { fontUrl: "/simhei.ttf" }) {
62
62
  return a;
63
63
  };
64
64
  }
65
- const R = "mach-report/fetcher", b = "mach-report/pdf-exporter", y = "mach-report/config", A = "mach-report/controller", U = d(() => import("./ReportPreview-BZ0GyQHJ.js").then((r) => r.l)), C = {
65
+ const R = "mach-report/fetcher", b = "mach-report/pdf-exporter", y = "mach-report/config", A = "mach-report/controller", U = d(() => import("./ReportPreview-Do-x4E3Z.js").then((r) => r.m)), C = {
66
66
  install(r, e = {}) {
67
67
  const o = e.fetcher ?? P({
68
68
  request: e.request ?? E({ baseUrl: e.baseUrl }),
@@ -1 +1 @@
1
- "use strict";var O=Object.create;var E=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var y=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty;var U=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of b(e))!F.call(r,n)&&n!==t&&E(r,n,{get:()=>e[n],enumerable:!(o=A(e,n))||o.enumerable});return r};var M=(r,e,t)=>(t=r!=null?O(y(r)):{},U(e||!r||!r.__esModule?E(t,"default",{value:r,enumerable:!0}):t,r));const R=require("vue");function m(r){return r==null?[]:Array.isArray(r)?r.map(String).filter(e=>e!==""):String(r).split(",").map(e=>e.trim()).filter(e=>e!=="")}function j(r){return m(r).join(",")}class s extends Error{constructor(e){super(e),this.name="PlanLoadError"}}function P(r={}){const{baseUrl:e="",headers:t,credentials:o,timeoutMs:n=3e4}=r;return async({url:c,method:i,params:a})=>{const h=a&&Object.keys(a).length>0?`?${new URLSearchParams(a)}`:"",l=new AbortController,f=setTimeout(()=>l.abort(),n);let d;try{d=await fetch(`${e}${c}${h}`,{method:i.toUpperCase(),headers:{Accept:"application/json",...t},credentials:o,signal:l.signal})}catch(u){throw u instanceof DOMException&&u.name==="AbortError"?new s(`请求超时(${n}ms): ${c}`):new s(`请求失败(${c}): ${u instanceof Error?u.message:String(u)}`)}finally{clearTimeout(f)}if(!d.ok)throw new s(`HTTP ${d.status} ${c}`);return d.json()}}function p(r){const{request:e,baseUrl:t=""}=r;return async({tempIds:o,furnitureTempId:n,params:c})=>{if(o.length===0)throw new s("缺少报表模板 ID");const i={tempId:o.join(",")};n&&(i.furnitureTempId=n);for(const[l,f]of Object.entries(c||{}))l&&f!=null&&f!==""&&(i[l]=String(f));const a=await e({url:`${t}/report/codePrintReport/gridPlan`,method:"get",params:i});if(a&&a.code!=null&&a.code!==200)throw new s(String(a.message||"预览加载失败"));const h=a?.data?.pages;return{schemaVersion:"jh4j-compatible",pages:Array.isArray(h)?h:[]}}}function _(r={fontUrl:"/simhei.ttf"}){let e=null;return async t=>{e||(e=await import("@agile-team/mach-report/pdf"));const o=r.fontUrl?await e.loadFontWithCache(r.fontUrl):null,{bytes:n}=await e.renderPlanToPdf(t,o?{customFontBytes:o}:{});return n}}const T="mach-report/fetcher",g="mach-report/pdf-exporter",w="mach-report/config",$="mach-report/controller",C=R.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./ReportPreview-B3auzZDn.cjs")).then(r=>r.ReportPreview$1)),H={install(r,e={}){const t=e.fetcher??p({request:e.request??P({baseUrl:e.baseUrl}),baseUrl:e.baseUrl});r.provide(T,t);const o=e.pdfFontUrl??e.config?.defaults?.pdfFontUrl??"/simhei.ttf";r.provide(g,e.pdfExporter??_({fontUrl:o})),r.provide(w,R.computed(()=>e.config??null)),e.globalComponent!==!1&&r.component("MachReportPreview",C)}};exports.MACH_REPORT_CONFIG_KEY=w;exports.MACH_REPORT_CONTROLLER_KEY=$;exports.MACH_REPORT_FETCHER_KEY=T;exports.MACH_REPORT_PDF_EXPORTER_KEY=g;exports.MachReportPreview=C;exports.PlanLoadError=s;exports.createDefaultPdfExporter=_;exports.createFetchRequest=P;exports.createJh4jGridPlanFetcher=p;exports.joinTempIds=j;exports.machReportPlugin=H;exports.normalizeTempIds=m;
1
+ "use strict";var O=Object.create;var E=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var y=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty;var U=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of b(e))!F.call(r,n)&&n!==t&&E(r,n,{get:()=>e[n],enumerable:!(o=A(e,n))||o.enumerable});return r};var M=(r,e,t)=>(t=r!=null?O(y(r)):{},U(e||!r||!r.__esModule?E(t,"default",{value:r,enumerable:!0}):t,r));const R=require("vue");function m(r){return r==null?[]:Array.isArray(r)?r.map(String).filter(e=>e!==""):String(r).split(",").map(e=>e.trim()).filter(e=>e!=="")}function j(r){return m(r).join(",")}class s extends Error{constructor(e){super(e),this.name="PlanLoadError"}}function P(r={}){const{baseUrl:e="",headers:t,credentials:o,timeoutMs:n=3e4}=r;return async({url:c,method:i,params:a})=>{const h=a&&Object.keys(a).length>0?`?${new URLSearchParams(a)}`:"",l=new AbortController,f=setTimeout(()=>l.abort(),n);let d;try{d=await fetch(`${e}${c}${h}`,{method:i.toUpperCase(),headers:{Accept:"application/json",...t},credentials:o,signal:l.signal})}catch(u){throw u instanceof DOMException&&u.name==="AbortError"?new s(`请求超时(${n}ms): ${c}`):new s(`请求失败(${c}): ${u instanceof Error?u.message:String(u)}`)}finally{clearTimeout(f)}if(!d.ok)throw new s(`HTTP ${d.status} ${c}`);return d.json()}}function p(r){const{request:e,baseUrl:t=""}=r;return async({tempIds:o,furnitureTempId:n,params:c})=>{if(o.length===0)throw new s("缺少报表模板 ID");const i={tempId:o.join(",")};n&&(i.furnitureTempId=n);for(const[l,f]of Object.entries(c||{}))l&&f!=null&&f!==""&&(i[l]=String(f));const a=await e({url:`${t}/report/codePrintReport/gridPlan`,method:"get",params:i});if(a&&a.code!=null&&a.code!==200)throw new s(String(a.message||"预览加载失败"));const h=a?.data?.pages;return{schemaVersion:"jh4j-compatible",pages:Array.isArray(h)?h:[]}}}function _(r={fontUrl:"/simhei.ttf"}){let e=null;return async t=>{e||(e=await import("@agile-team/mach-report/pdf"));const o=r.fontUrl?await e.loadFontWithCache(r.fontUrl):null,{bytes:n}=await e.renderPlanToPdf(t,o?{customFontBytes:o}:{});return n}}const T="mach-report/fetcher",g="mach-report/pdf-exporter",w="mach-report/config",$="mach-report/controller",C=R.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./ReportPreview-kNbuSmbL.cjs")).then(r=>r.ReportPreview$1)),H={install(r,e={}){const t=e.fetcher??p({request:e.request??P({baseUrl:e.baseUrl}),baseUrl:e.baseUrl});r.provide(T,t);const o=e.pdfFontUrl??e.config?.defaults?.pdfFontUrl??"/simhei.ttf";r.provide(g,e.pdfExporter??_({fontUrl:o})),r.provide(w,R.computed(()=>e.config??null)),e.globalComponent!==!1&&r.component("MachReportPreview",C)}};exports.MACH_REPORT_CONFIG_KEY=w;exports.MACH_REPORT_CONTROLLER_KEY=$;exports.MACH_REPORT_FETCHER_KEY=T;exports.MACH_REPORT_PDF_EXPORTER_KEY=g;exports.MachReportPreview=C;exports.PlanLoadError=s;exports.createDefaultPdfExporter=_;exports.createFetchRequest=P;exports.createJh4jGridPlanFetcher=p;exports.joinTempIds=j;exports.machReportPlugin=H;exports.normalizeTempIds=m;
@@ -24,6 +24,21 @@ export declare function planFontSizePx(style: {
24
24
  export interface CanvasRenderResult {
25
25
  canvases: HTMLCanvasElement[];
26
26
  }
27
+ export interface ImageRenderOptions extends CanvasRenderOptions {
28
+ /** 图片格式(默认 png;jpeg 体积更小但无透明) */
29
+ format?: "png" | "jpeg";
30
+ /** jpeg 质量 0-1(默认 0.92,仅 jpeg 生效) */
31
+ quality?: number;
32
+ }
33
+ export interface ImageRenderResult {
34
+ blobs: Blob[];
35
+ }
36
+ /**
37
+ * RenderPlan → 每页一张图片 Blob(浏览器环境):
38
+ * 复用位图渲染管线(区间/dpr/字体/测量器均可配),再 toBlob 编码。
39
+ * 大报表建议配合 start/end 分批导出,避免一次性占用过多内存。
40
+ */
41
+ export declare function renderPlanToImages(plan: RenderPlan, options?: ImageRenderOptions): Promise<ImageRenderResult>;
27
42
  /**
28
43
  * RenderPlan → Canvas 位图页(顶点原点坐标系,与 DOM/PDF 一致)。
29
44
  *
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- .mrp-toolbar[data-v-f50c26e8]{display:flex;align-items:center;gap:8px;padding:6px 12px;background:var(--mrp-toolbar-bg, #323639);border-bottom:1px solid var(--mrp-toolbar-border, #22252a);flex:none;flex-wrap:wrap}.mrp-title[data-v-f50c26e8]{font-size:13px;font-weight:600;margin-right:8px;color:var(--mrp-toolbar-fg, #e8e8e8)}.mrp-nav[data-v-f50c26e8]{background:transparent;color:var(--mrp-btn-fg, #cfcfcf);border:1px solid var(--mrp-btn-border, #4a4d52);border-radius:4px;padding:2px 8px;font-size:12px;cursor:pointer;white-space:nowrap}.mrp-nav[data-v-f50c26e8]:hover:not(:disabled){background:var(--mrp-btn-hover-bg, #414549);color:var(--mrp-btn-hover-fg, #fff)}.mrp-nav[data-v-f50c26e8]:disabled{opacity:.4;cursor:not-allowed}.mrp-active[data-v-f50c26e8]{background:var(--mrp-btn-active-bg, #2d5fb8);border-color:var(--mrp-btn-active-bg, #2d5fb8);color:#fff}.mrp-pageinfo[data-v-f50c26e8]{font-size:12px;min-width:56px;text-align:center;color:var(--mrp-toolbar-fg, #e8e8e8)}.mrp-spacer[data-v-f50c26e8]{flex:1}.mrp-search[data-v-f50c26e8]{display:flex;align-items:center;gap:4px}.mrp-search-input[data-v-f50c26e8]{background:#22252a;color:#e8e8e8;border:1px solid var(--mrp-btn-border, #4a4d52);border-radius:4px;padding:2px 8px;font-size:12px;width:150px;outline:none}.mrp-search-input[data-v-f50c26e8]:focus{border-color:var(--mrp-btn-active-bg, #2d5fb8)}.mrp-search-count[data-v-f50c26e8]{font-size:12px;color:var(--mrp-toolbar-fg, #e8e8e8);min-width:42px;text-align:center}.mrp-params[data-v-aafce92d]{display:flex;align-items:flex-end;gap:12px;padding:6px 12px;background:var(--mrp-toolbar-bg, #323639);border-bottom:1px solid var(--mrp-toolbar-border, #22252a);flex:none;flex-wrap:wrap}.mrp-params-title[data-v-aafce92d]{font-size:12px;font-weight:600;color:var(--mrp-toolbar-fg, #e8e8e8);padding-bottom:5px;white-space:nowrap}.mrp-params-grid[data-v-aafce92d]{display:flex;flex-wrap:wrap;gap:8px 12px;flex:1}.mrp-param[data-v-aafce92d]{display:flex;flex-direction:column;gap:2px}.mrp-param-label[data-v-aafce92d]{font-size:11px;color:var(--mrp-toolbar-fg, #e8e8e8);opacity:.85}.mrp-param-star[data-v-aafce92d]{color:#ff7b72;font-style:normal;margin-left:2px}.mrp-param-input[data-v-aafce92d]{background:#22252a;color:#e8e8e8;border:1px solid var(--mrp-btn-border, #4a4d52);border-radius:4px;padding:3px 8px;font-size:12px;min-width:130px;outline:none}.mrp-param-input[data-v-aafce92d]:focus{border-color:var(--mrp-btn-active-bg, #2d5fb8)}.mrp-param-missing .mrp-param-input[data-v-aafce92d]{border-color:#ff7b72}select.mrp-param-input option[data-v-aafce92d]{background:#22252a}.mrp-params-actions[data-v-aafce92d]{display:flex;gap:6px;padding-bottom:1px}.mrp-nav[data-v-aafce92d]{background:transparent;color:var(--mrp-btn-fg, #cfcfcf);border:1px solid var(--mrp-btn-border, #4a4d52);border-radius:4px;padding:4px 14px;font-size:12px;cursor:pointer;white-space:nowrap}.mrp-nav[data-v-aafce92d]:hover{background:var(--mrp-btn-hover-bg, #414549);color:var(--mrp-btn-hover-fg, #fff)}.mrp-param-query[data-v-aafce92d]{background:var(--mrp-btn-active-bg, #2d5fb8);border-color:var(--mrp-btn-active-bg, #2d5fb8);color:#fff}.mach-report-preview[data-v-d49e06b6]{--mrp-shell-bg: #525659;--mrp-shell-fg: #e8e8e8;--mrp-toolbar-bg: #323639;--mrp-toolbar-border: #22252a;--mrp-toolbar-fg: #e8e8e8;--mrp-btn-fg: #cfcfcf;--mrp-btn-border: #4a4d52;--mrp-btn-hover-bg: #414549;--mrp-btn-hover-fg: #ffffff;--mrp-btn-active-bg: #2d5fb8;position:relative;display:flex;flex-direction:column;background:var(--mrp-shell-bg);color:var(--mrp-shell-fg);overflow:hidden}.mrp-main[data-v-d49e06b6]{display:flex;flex:1;min-height:0}.mrp-body[data-v-d49e06b6]{flex:1;overflow:auto;padding:24px;outline:none}.mrp-scale[data-v-d49e06b6]{margin:0 auto}.mrp-scale-inner[data-v-d49e06b6]{display:flex;flex-direction:column;align-items:center}.mrp-page-holder[data-v-d49e06b6]{background:#fff;box-shadow:0 2px 8px #00000059;margin-bottom:var(--dce0aa90);flex:none}.mrp-state[data-v-d49e06b6]{padding:40px;text-align:center;color:#bfbfbf;font-size:13px}.mrp-error[data-v-d49e06b6]{color:#ff9d9d}.mrp-retry[data-v-d49e06b6]{margin-left:12px;background:transparent;color:#8fb7ff;border:1px solid #5a7fbf;border-radius:4px;padding:1px 10px;cursor:pointer}.mrp-overlay[data-v-d49e06b6]{position:absolute;inset:0;pointer-events:none}.mrp-page-holder[data-v-d49e06b6] mark.mrp-hit{background:#ffe066;color:#7a5c00;border-radius:2px;padding:0 1px}.mrp-thumbs[data-v-d49e06b6]{width:140px;flex:none;overflow-y:auto;border-left:1px solid var(--mrp-toolbar-border);background:var(--mrp-toolbar-bg);padding:8px;display:flex;flex-direction:column;gap:8px}.mrp-thumb[data-v-d49e06b6]{cursor:pointer;text-align:center}.mrp-thumb-box[data-v-d49e06b6]{width:116px;background:#fff;box-shadow:0 1px 4px #0006;overflow:hidden;border:2px solid transparent}.mrp-thumb-active .mrp-thumb-box[data-v-d49e06b6]{border-color:var(--mrp-btn-active-bg)}.mrp-thumb-no[data-v-d49e06b6]{font-size:11px;color:var(--mrp-toolbar-fg)}.mrp-debug[data-v-d49e06b6]{position:absolute;right:8px;bottom:8px;background:#000000c7;color:#7ee787;font:11px/1.6 ui-monospace,monospace;padding:6px 10px;border-radius:6px;pointer-events:none;white-space:pre}
1
+ .mrp-toolbar[data-v-f3aa8dfd]{display:flex;align-items:center;gap:8px;padding:6px 12px;background:var(--mrp-toolbar-bg, #323639);border-bottom:1px solid var(--mrp-toolbar-border, #22252a);flex:none;flex-wrap:wrap}.mrp-title[data-v-f3aa8dfd]{font-size:13px;font-weight:600;margin-right:8px;color:var(--mrp-toolbar-fg, #e8e8e8)}.mrp-nav[data-v-f3aa8dfd]{background:transparent;color:var(--mrp-btn-fg, #cfcfcf);border:1px solid var(--mrp-btn-border, #4a4d52);border-radius:4px;padding:2px 8px;font-size:12px;cursor:pointer;white-space:nowrap}.mrp-nav[data-v-f3aa8dfd]:hover:not(:disabled){background:var(--mrp-btn-hover-bg, #414549);color:var(--mrp-btn-hover-fg, #fff)}.mrp-nav[data-v-f3aa8dfd]:disabled{opacity:.4;cursor:not-allowed}.mrp-active[data-v-f3aa8dfd]{background:var(--mrp-btn-active-bg, #2d5fb8);border-color:var(--mrp-btn-active-bg, #2d5fb8);color:#fff}.mrp-pageinfo[data-v-f3aa8dfd]{font-size:12px;min-width:56px;text-align:center;color:var(--mrp-toolbar-fg, #e8e8e8)}.mrp-spacer[data-v-f3aa8dfd]{flex:1}.mrp-search[data-v-f3aa8dfd]{display:flex;align-items:center;gap:4px}.mrp-search-input[data-v-f3aa8dfd]{background:#22252a;color:#e8e8e8;border:1px solid var(--mrp-btn-border, #4a4d52);border-radius:4px;padding:2px 8px;font-size:12px;width:150px;outline:none}.mrp-search-input[data-v-f3aa8dfd]:focus{border-color:var(--mrp-btn-active-bg, #2d5fb8)}.mrp-search-count[data-v-f3aa8dfd]{font-size:12px;color:var(--mrp-toolbar-fg, #e8e8e8);min-width:42px;text-align:center}.mrp-params[data-v-aafce92d]{display:flex;align-items:flex-end;gap:12px;padding:6px 12px;background:var(--mrp-toolbar-bg, #323639);border-bottom:1px solid var(--mrp-toolbar-border, #22252a);flex:none;flex-wrap:wrap}.mrp-params-title[data-v-aafce92d]{font-size:12px;font-weight:600;color:var(--mrp-toolbar-fg, #e8e8e8);padding-bottom:5px;white-space:nowrap}.mrp-params-grid[data-v-aafce92d]{display:flex;flex-wrap:wrap;gap:8px 12px;flex:1}.mrp-param[data-v-aafce92d]{display:flex;flex-direction:column;gap:2px}.mrp-param-label[data-v-aafce92d]{font-size:11px;color:var(--mrp-toolbar-fg, #e8e8e8);opacity:.85}.mrp-param-star[data-v-aafce92d]{color:#ff7b72;font-style:normal;margin-left:2px}.mrp-param-input[data-v-aafce92d]{background:#22252a;color:#e8e8e8;border:1px solid var(--mrp-btn-border, #4a4d52);border-radius:4px;padding:3px 8px;font-size:12px;min-width:130px;outline:none}.mrp-param-input[data-v-aafce92d]:focus{border-color:var(--mrp-btn-active-bg, #2d5fb8)}.mrp-param-missing .mrp-param-input[data-v-aafce92d]{border-color:#ff7b72}select.mrp-param-input option[data-v-aafce92d]{background:#22252a}.mrp-params-actions[data-v-aafce92d]{display:flex;gap:6px;padding-bottom:1px}.mrp-nav[data-v-aafce92d]{background:transparent;color:var(--mrp-btn-fg, #cfcfcf);border:1px solid var(--mrp-btn-border, #4a4d52);border-radius:4px;padding:4px 14px;font-size:12px;cursor:pointer;white-space:nowrap}.mrp-nav[data-v-aafce92d]:hover{background:var(--mrp-btn-hover-bg, #414549);color:var(--mrp-btn-hover-fg, #fff)}.mrp-param-query[data-v-aafce92d]{background:var(--mrp-btn-active-bg, #2d5fb8);border-color:var(--mrp-btn-active-bg, #2d5fb8);color:#fff}.mach-report-preview[data-v-4648d204]{--mrp-shell-bg: #525659;--mrp-shell-fg: #e8e8e8;--mrp-toolbar-bg: #323639;--mrp-toolbar-border: #22252a;--mrp-toolbar-fg: #e8e8e8;--mrp-btn-fg: #cfcfcf;--mrp-btn-border: #4a4d52;--mrp-btn-hover-bg: #414549;--mrp-btn-hover-fg: #ffffff;--mrp-btn-active-bg: #2d5fb8;position:relative;display:flex;flex-direction:column;background:var(--mrp-shell-bg);color:var(--mrp-shell-fg);overflow:hidden}.mrp-main[data-v-4648d204]{display:flex;flex:1;min-height:0}.mrp-body[data-v-4648d204]{flex:1;overflow:auto;padding:24px;outline:none}.mrp-scale[data-v-4648d204]{margin:0 auto}.mrp-scale-inner[data-v-4648d204]{display:flex;flex-direction:column;align-items:center}.mrp-page-holder[data-v-4648d204]{background:#fff;box-shadow:0 2px 8px #00000059;margin-bottom:var(--db73374c);flex:none}.mrp-state[data-v-4648d204]{padding:40px;text-align:center;color:#bfbfbf;font-size:13px}.mrp-error[data-v-4648d204]{color:#ff9d9d}.mrp-retry[data-v-4648d204]{margin-left:12px;background:transparent;color:#8fb7ff;border:1px solid #5a7fbf;border-radius:4px;padding:1px 10px;cursor:pointer}.mrp-overlay[data-v-4648d204]{position:absolute;inset:0;pointer-events:none}.mrp-page-holder[data-v-4648d204] mark.mrp-hit{background:#ffe066;color:#7a5c00;border-radius:2px;padding:0 1px}.mrp-thumbs[data-v-4648d204]{width:140px;flex:none;overflow-y:auto;border-left:1px solid var(--mrp-toolbar-border);background:var(--mrp-toolbar-bg);padding:8px;display:flex;flex-direction:column;gap:8px}.mrp-thumb[data-v-4648d204]{cursor:pointer;text-align:center}.mrp-thumb-box[data-v-4648d204]{width:116px;background:#fff;box-shadow:0 1px 4px #0006;overflow:hidden;border:2px solid transparent}.mrp-thumb-active .mrp-thumb-box[data-v-4648d204]{border-color:var(--mrp-btn-active-bg)}.mrp-thumb-no[data-v-4648d204]{font-size:11px;color:var(--mrp-toolbar-fg)}.mrp-debug[data-v-4648d204]{position:absolute;right:8px;bottom:8px;background:#000000c7;color:#7ee787;font:11px/1.6 ui-monospace,monospace;padding:6px 10px;border-radius:6px;pointer-events:none;white-space:pre}
@@ -17,20 +17,20 @@ type __VLS_Props = {
17
17
  thumbsVisible: boolean;
18
18
  };
19
19
  declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
20
+ export: (format: "html" | "png" | "pdf" | "word") => any;
20
21
  zoom: (mode: number | "fit") => any;
21
22
  print: () => any;
22
23
  goto: (page: number) => any;
23
- export: (format: "html" | "pdf") => any;
24
24
  "pdf-window": () => any;
25
25
  "search-input": (query: string) => any;
26
26
  "search-nav": (dir: 1 | -1) => any;
27
27
  "search-toggle": () => any;
28
28
  "thumbs-toggle": () => any;
29
29
  }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
30
+ onExport?: ((format: "html" | "png" | "pdf" | "word") => any) | undefined;
30
31
  onZoom?: ((mode: number | "fit") => any) | undefined;
31
32
  onPrint?: (() => any) | undefined;
32
33
  onGoto?: ((page: number) => any) | undefined;
33
- onExport?: ((format: "html" | "pdf") => any) | undefined;
34
34
  "onPdf-window"?: (() => any) | undefined;
35
35
  "onSearch-input"?: ((query: string) => any) | undefined;
36
36
  "onSearch-nav"?: ((dir: 1 | -1) => any) | undefined;
@@ -15,12 +15,23 @@ export declare function printPlans(plans: RenderPlan[], options?: {
15
15
  onProgress?: (done: number, total: number) => void;
16
16
  onError?: (message: string) => void;
17
17
  }): Promise<void>;
18
+ /**
19
+ * Word 导出(Word 兼容 HTML,.doc MIME):
20
+ * 复用打印文档构建(同一样式与 named pages 分页规则),套 Word 命名空间头。
21
+ * Word 2003+ 可直接打开编辑——覆盖"导出可编辑单据"场景,零后端。
22
+ */
23
+ export declare function buildWordHtml(p: RenderPlan): {
24
+ html: string;
25
+ filename: string;
26
+ };
18
27
  export declare function usePrintExport(plan: Ref<RenderPlan | null>, hooks: {
19
28
  getPdfExporter: () => PdfExporter;
20
- onError: (message: string) => void;
29
+ onError: (message: string, code?: string) => void;
21
30
  }): {
22
31
  print: () => Promise<void>;
23
32
  exportAs: (format: string) => void;
33
+ exportImages: () => Promise<void>;
34
+ exportWord: () => void;
24
35
  openPdfWindow: () => void;
25
36
  releasePrintFrame: () => void;
26
37
  };
@@ -15,6 +15,8 @@ export interface MachReportMessages {
15
15
  fitWidth: string;
16
16
  exportHtml: string;
17
17
  exportPdf: string;
18
+ exportImage: string;
19
+ exportWord: string;
18
20
  print: string;
19
21
  pdfWindow: string;
20
22
  loading: string;
@@ -2,7 +2,7 @@
2
2
  * 结构化错误(code 分类,宿主可按码决定 UX:重试 / 提示 / 降级)。
3
3
  * error 事件契约保持 `(message: string)` 不变,新增第二参数 detail(可选)。
4
4
  */
5
- export type MachReportErrorCode = "param" | "fetch" | "validate" | "render" | "pdf" | "print" | "config";
5
+ export type MachReportErrorCode = "param" | "fetch" | "validate" | "render" | "pdf" | "print" | "export" | "config";
6
6
  export declare class MachReportError extends Error {
7
7
  readonly code: MachReportErrorCode;
8
8
  readonly cause?: unknown;
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n=require("vue"),i=require("./plugin-qyCLVA7E.cjs"),r=n.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./ReportPreview-B3auzZDn.cjs")).then(e=>e.ReportPreview$1));function c(){return Promise.resolve().then(()=>require("./ReportPreview-B3auzZDn.cjs")).then(e=>e.ReportPreview$1)}const t={install(e,o={}){i.machReportPlugin.install(e,o),e.component("MachReportPreview",r)}};exports.MachReportPreview=r;exports.default=t;exports.machReportAsyncPlugin=t;exports.preloadMachReport=c;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n=require("vue"),i=require("./plugin-DxneRya8.cjs"),r=n.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./ReportPreview-kNbuSmbL.cjs")).then(e=>e.ReportPreview$1));function c(){return Promise.resolve().then(()=>require("./ReportPreview-kNbuSmbL.cjs")).then(e=>e.ReportPreview$1)}const t={install(e,o={}){i.machReportPlugin.install(e,o),e.component("MachReportPreview",r)}};exports.MachReportPreview=r;exports.default=t;exports.machReportAsyncPlugin=t;exports.preloadMachReport=c;
package/dist/vue-async.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { defineAsyncComponent as e } from "vue";
2
- import { m as n } from "./plugin-D3QAPZ-7.js";
3
- const r = e(() => import("./ReportPreview-BZ0GyQHJ.js").then((t) => t.l));
4
- function m() {
5
- return import("./ReportPreview-BZ0GyQHJ.js").then((t) => t.l);
2
+ import { m as n } from "./plugin-CVYs7wAj.js";
3
+ const r = e(() => import("./ReportPreview-Do-x4E3Z.js").then((t) => t.m));
4
+ function c() {
5
+ return import("./ReportPreview-Do-x4E3Z.js").then((t) => t.m);
6
6
  }
7
7
  const p = {
8
8
  install(t, o = {}) {
@@ -13,5 +13,5 @@ export {
13
13
  r as MachReportPreview,
14
14
  p as default,
15
15
  p as machReportAsyncPlugin,
16
- m as preloadMachReport
16
+ c as preloadMachReport
17
17
  };
package/dist/vue.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./ReportPreview-B3auzZDn.cjs"),r=require("./plugin-qyCLVA7E.cjs"),c=require("@agile-team/mach-report"),s=require("vue");function P(R){return async({tempIds:t})=>{if(t.length===0)throw new r.PlanLoadError("缺少报表模板 ID");const a=[];for(const n of t){const o=R[n];if(!o)throw new r.PlanLoadError(`本地模板 ${n} 不存在`);const{plan:E,warnings:i}=c.paginateTemplate(o.template,o.datasets??{});i.length>0&&console.warn("[mach-report] 分页告警:",i),a.push(...E.pages)}return{schemaVersion:"mach-local",pages:a}}}function p(){return s.inject(r.MACH_REPORT_CONTROLLER_KEY,null)}exports.DEFAULT_MESSAGES=e.DEFAULT_MESSAGES;exports.DEFAULT_THEME=e.DEFAULT_THEME;exports.MachReportError=e.MachReportError;exports.ReportParamPanel=e.ReportParamPanel;exports.ReportPreview=e.ReportPreview;exports.ReportToolbar=e.ReportToolbar;exports.SILENT_LOGGER=e.SILENT_LOGGER;exports.buildPrintDocument=e.buildPrintDocument;exports.defineMachReportConfig=e.defineMachReportConfig;exports.defineMachReportPreset=e.defineMachReportPreset;exports.printPlans=e.printPlans;exports.provideMachReportConfig=e.provideMachReportConfig;exports.resolveConfig=e.resolveConfig;exports.themeToCssVars=e.themeToCssVars;exports.toErrorDetail=e.toErrorDetail;exports.useMachReportConfig=e.useMachReportConfig;exports.usePageWindow=e.usePageWindow;exports.usePrintExport=e.usePrintExport;exports.useZoom=e.useZoom;exports.MACH_REPORT_CONFIG_KEY=r.MACH_REPORT_CONFIG_KEY;exports.MACH_REPORT_CONTROLLER_KEY=r.MACH_REPORT_CONTROLLER_KEY;exports.MACH_REPORT_FETCHER_KEY=r.MACH_REPORT_FETCHER_KEY;exports.MACH_REPORT_PDF_EXPORTER_KEY=r.MACH_REPORT_PDF_EXPORTER_KEY;exports.MachReportPreview=r.MachReportPreview;exports.PlanLoadError=r.PlanLoadError;exports.createDefaultPdfExporter=r.createDefaultPdfExporter;exports.createFetchRequest=r.createFetchRequest;exports.createJh4jGridPlanFetcher=r.createJh4jGridPlanFetcher;exports.joinTempIds=r.joinTempIds;exports.machReportPlugin=r.machReportPlugin;exports.normalizeTempIds=r.normalizeTempIds;exports.createLocalFetcher=P;exports.useReportPreview=p;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./ReportPreview-kNbuSmbL.cjs"),r=require("./plugin-DxneRya8.cjs"),c=require("@agile-team/mach-report"),s=require("vue");function l(R){return async({tempIds:t})=>{if(t.length===0)throw new r.PlanLoadError("缺少报表模板 ID");const a=[];for(const n of t){const o=R[n];if(!o)throw new r.PlanLoadError(`本地模板 ${n} 不存在`);const{plan:E,warnings:i}=c.paginateTemplate(o.template,o.datasets??{});i.length>0&&console.warn("[mach-report] 分页告警:",i),a.push(...E.pages)}return{schemaVersion:"mach-local",pages:a}}}function P(){return s.inject(r.MACH_REPORT_CONTROLLER_KEY,null)}exports.DEFAULT_MESSAGES=e.DEFAULT_MESSAGES;exports.DEFAULT_THEME=e.DEFAULT_THEME;exports.MachReportError=e.MachReportError;exports.ReportParamPanel=e.ReportParamPanel;exports.ReportPreview=e.ReportPreview;exports.ReportToolbar=e.ReportToolbar;exports.SILENT_LOGGER=e.SILENT_LOGGER;exports.buildPrintDocument=e.buildPrintDocument;exports.buildWordHtml=e.buildWordHtml;exports.defineMachReportConfig=e.defineMachReportConfig;exports.defineMachReportPreset=e.defineMachReportPreset;exports.printPlans=e.printPlans;exports.provideMachReportConfig=e.provideMachReportConfig;exports.resolveConfig=e.resolveConfig;exports.themeToCssVars=e.themeToCssVars;exports.toErrorDetail=e.toErrorDetail;exports.useMachReportConfig=e.useMachReportConfig;exports.usePageWindow=e.usePageWindow;exports.usePrintExport=e.usePrintExport;exports.useZoom=e.useZoom;exports.MACH_REPORT_CONFIG_KEY=r.MACH_REPORT_CONFIG_KEY;exports.MACH_REPORT_CONTROLLER_KEY=r.MACH_REPORT_CONTROLLER_KEY;exports.MACH_REPORT_FETCHER_KEY=r.MACH_REPORT_FETCHER_KEY;exports.MACH_REPORT_PDF_EXPORTER_KEY=r.MACH_REPORT_PDF_EXPORTER_KEY;exports.MachReportPreview=r.MachReportPreview;exports.PlanLoadError=r.PlanLoadError;exports.createDefaultPdfExporter=r.createDefaultPdfExporter;exports.createFetchRequest=r.createFetchRequest;exports.createJh4jGridPlanFetcher=r.createJh4jGridPlanFetcher;exports.joinTempIds=r.joinTempIds;exports.machReportPlugin=r.machReportPlugin;exports.normalizeTempIds=r.normalizeTempIds;exports.createLocalFetcher=l;exports.useReportPreview=P;
package/dist/vue.js CHANGED
@@ -1,9 +1,9 @@
1
- import { D as T, a as _, M as g, R as M, b as d, c as C, S as w, d as O, e as D, f as F, p as L, g as A, r as H, t as j, h as v, u as x, i as G, j as S, k as b } from "./ReportPreview-BZ0GyQHJ.js";
2
- import { P as t, M as c } from "./plugin-D3QAPZ-7.js";
3
- import { a as K, b as Y, c as N, d as y, e as U, f as V, g as k, j as q, m as z, n as J } from "./plugin-D3QAPZ-7.js";
1
+ import { D as T, a as _, M as d, R as g, b as M, c as C, S as w, d as O, e as D, f as F, g as L, p as A, h as H, r as b, t as j, i as v, u as x, j as G, k as S, l as I } from "./ReportPreview-Do-x4E3Z.js";
2
+ import { P as t, M as c } from "./plugin-CVYs7wAj.js";
3
+ import { a as Y, b as N, c as y, d as U, e as V, f as W, g as k, j as q, m as z, n as J } from "./plugin-CVYs7wAj.js";
4
4
  import { paginateTemplate as p } from "@agile-team/mach-report";
5
- import { inject as R } from "vue";
6
- function P(n) {
5
+ import { inject as l } from "vue";
6
+ function m(n) {
7
7
  return async ({ tempIds: a }) => {
8
8
  if (a.length === 0) throw new t("缺少报表模板 ID");
9
9
  const r = [];
@@ -16,41 +16,42 @@ function P(n) {
16
16
  return { schemaVersion: "mach-local", pages: r };
17
17
  };
18
18
  }
19
- function h() {
20
- return R(c, null);
19
+ function P() {
20
+ return l(c, null);
21
21
  }
22
22
  export {
23
23
  T as DEFAULT_MESSAGES,
24
24
  _ as DEFAULT_THEME,
25
- K as MACH_REPORT_CONFIG_KEY,
25
+ Y as MACH_REPORT_CONFIG_KEY,
26
26
  c as MACH_REPORT_CONTROLLER_KEY,
27
- Y as MACH_REPORT_FETCHER_KEY,
28
- N as MACH_REPORT_PDF_EXPORTER_KEY,
29
- g as MachReportError,
30
- y as MachReportPreview,
27
+ N as MACH_REPORT_FETCHER_KEY,
28
+ y as MACH_REPORT_PDF_EXPORTER_KEY,
29
+ d as MachReportError,
30
+ U as MachReportPreview,
31
31
  t as PlanLoadError,
32
- M as ReportParamPanel,
33
- d as ReportPreview,
32
+ g as ReportParamPanel,
33
+ M as ReportPreview,
34
34
  C as ReportToolbar,
35
35
  w as SILENT_LOGGER,
36
36
  O as buildPrintDocument,
37
- U as createDefaultPdfExporter,
38
- V as createFetchRequest,
37
+ D as buildWordHtml,
38
+ V as createDefaultPdfExporter,
39
+ W as createFetchRequest,
39
40
  k as createJh4jGridPlanFetcher,
40
- P as createLocalFetcher,
41
- D as defineMachReportConfig,
42
- F as defineMachReportPreset,
41
+ m as createLocalFetcher,
42
+ F as defineMachReportConfig,
43
+ L as defineMachReportPreset,
43
44
  q as joinTempIds,
44
45
  z as machReportPlugin,
45
46
  J as normalizeTempIds,
46
- L as printPlans,
47
- A as provideMachReportConfig,
48
- H as resolveConfig,
47
+ A as printPlans,
48
+ H as provideMachReportConfig,
49
+ b as resolveConfig,
49
50
  j as themeToCssVars,
50
51
  v as toErrorDetail,
51
52
  x as useMachReportConfig,
52
53
  G as usePageWindow,
53
54
  S as usePrintExport,
54
- h as useReportPreview,
55
- b as useZoom
55
+ P as useReportPreview,
56
+ I as useZoom
56
57
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agile-team/mach-report",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "MachReport 报表引擎单包:RenderPlan 模型 + 分页 + DOM/Canvas/PDF 渲染 + 动态 SQL + 管理端 API + Vue 3 契约组件(零运行时依赖;./vue 为框架子路径,vue 为可选 peer)",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -1,6 +0,0 @@
1
- "use strict";const e=require("vue"),j=require("@agile-team/mach-report"),N=require("./plugin-qyCLVA7E.cjs");function ye(t,r,l={}){const n=l.pxPerMm??3.7795275590551185,a=l.gapPx??18,o=e.ref(0),i=e.ref(800),m=e.computed(()=>(t.value?.pages??[]).map(p=>p.pageHeightMm*n)),c=e.computed(()=>{const p=t.value?.pages??[];let g=0,v=0;for(const w of p)g+=w.pageHeightMm*n+a,v=Math.max(v,w.pageWidthMm*n);return{w:v,h:g}}),f=e.computed(()=>j.computePageWindow({pageHeightsPx:m.value,viewportHeightPx:i.value/r.value,scrollTopPx:o.value/r.value,overscan:1,gapPx:a})),d=e.computed(()=>{const p=t.value;if(!p)return[];const{start:g,end:v}=f.value;return v<g?[]:p.pages.slice(g,v+1).map((w,P)=>({page:w,index:g+P}))});function u(p,g){let v=0;return w=>{v||(v=requestAnimationFrame(()=>{if(v=0,o.value=w.scrollTop,i.value=w.clientHeight||800,g.value<=0)return;const P=w.querySelectorAll(".mrp-page-holder");if(!P.length)return;const R=w.getBoundingClientRect().top+56;let V=1;P.forEach(E=>{E.getBoundingClientRect().top<=R&&(V=Number(E.dataset.page??1))}),p.value=Math.max(1,Math.min(g.value,V))}))}}return{contentSize:c,windowRange:f,visiblePages:d,makeScrollHandler:u,refreshViewport(p){p&&(i.value=p.clientHeight||800)}}}function we(t){const r=e.ref(1),l=e.ref("fit");function n(){requestAnimationFrame(()=>{const o=t();!o||!o.viewport||(r.value=Math.min(1,Math.max(.3,(o.viewport.clientWidth-48)/Math.max(1,o.pageWidthPx))))})}function a(o){o==="fit"?(l.value="fit",n()):(l.value="raw",r.value=o/100)}return{zoom:r,zoomMode:l,applyFitZoom:n,setZoom:a}}const _=8;function ee(){return new Promise(t=>setTimeout(t,0))}function X(t){return`p${Math.round(t.pageWidthMm)}x${Math.round(t.pageHeightMm)}`}function K(t){const r=new Map;t.pages.forEach(i=>{r.has(X(i))||r.set(X(i),i)});const 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
- ${[...r.values()].map(i=>`@page ${X(i)}{size:${Math.round(i.pageWidthMm)}mm ${Math.round(i.pageHeightMm)}mm;margin:0;}`).join(`
5
- `)}
6
- body{margin:0;background:#fff;}`}</style></head><body>`,o=t.pages.map(i=>{const m=j.renderPage(i,96,{},document);return m.style.page=X(i),m.outerHTML});return{head:a,pageChunks:o}}async function Ye(t,r={}){const l={pages:t.flatMap(m=>m.pages)};if(l.pages.length===0)return;const{head:n,pageChunks:a}=K(l),o=document.createElement("iframe");o.style.cssText="position:fixed;right:0;bottom:0;width:0;height:0;border:0;visibility:hidden;",document.body.appendChild(o);let i=!1;try{const m=o.contentDocument;m.open(),m.write(n);for(let c=0;c<a.length;c++)m.write(a[c]),c%_===_-1&&(r.onProgress?.(c+1,a.length),await ee());m.write("</body></html>"),m.close(),await ee(),r.onProgress?.(a.length,a.length),i=!0,o.contentWindow?.focus(),o.contentWindow?.print()}catch(m){r.onError?.(m instanceof Error?`批量打印失败: ${m.message}`:"批量打印失败")}finally{i?setTimeout(()=>o.remove(),6e4):o.remove()}}function Ee(t,r){let l=null,n=!1,a=null;function o(){l?.remove(),l=null}function i(u,p){const g=URL.createObjectURL(u),v=document.createElement("a");v.href=g,v.download=p,v.click(),setTimeout(()=>URL.revokeObjectURL(g),1e4)}async function m(){if(n)return;const u=t.value;if(!u||u.pages.length===0)return;n=!0,o();const{head:p,pageChunks:g}=K(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 v=l;try{const w=v.contentDocument;w.open(),w.write(p);for(let P=0;P<g.length;P++)if(w.write(g[P]),P%_===_-1&&await ee(),v!==l)return;w.write("</body></html>"),w.close(),await ee(),v.contentWindow?.focus(),v.contentWindow?.print()}catch{r.onError("调用打印失败,请改用导出 PDF")}finally{n=!1}}async function c(){if(a)return a;const u=t.value;if(!(!u||u.pages.length===0))return a=(async()=>{try{const p=await r.getPdfExporter()(u);i(new Blob([p],{type:"application/pdf"}),"mach-report.pdf")}catch(p){r.onError(p instanceof Error?`PDF 导出失败: ${p.message}`:"PDF 导出失败")}finally{a=null}})(),a}function f(u){const p=t.value;if(!p||p.pages.length===0)return;if(u==="pdf"){c();return}const{head:g,pageChunks:v}=K(p),w=`${g}${v.join("")}</body></html>`;i(new Blob([w],{type:"text/html;charset=utf-8"}),`mach-report.${u==="html"?"html":u}`)}function d(){const u=t.value;if(!u||u.pages.length===0)return;const{head:p,pageChunks:g}=K(u),v=`${p}${g.join("")}</body></html>`,w=new Blob([v],{type:"text/html;charset=utf-8"}),P=URL.createObjectURL(w),R=window.open(P,"_blank");if(!R){r.onError("浏览器拦截了弹窗,请允许弹窗后重试"),URL.revokeObjectURL(P);return}setTimeout(()=>R.print(),400),setTimeout(()=>URL.revokeObjectURL(P),1e4)}return{print:m,exportAs:f,openPdfWindow:d,releasePrintFrame:o}}const Pe="mrp-hit";function Ze(t){t.querySelectorAll(`mark.${Pe}`).forEach(l=>{const n=l.parentNode;if(n){for(;l.firstChild;)n.insertBefore(l.firstChild,l);l.remove(),n.normalize()}})}function Je(t,r){const l=r.trim();if(!l)return 0;const n=l.toLowerCase(),a=document.createTreeWalker(t,NodeFilter.SHOW_TEXT,{acceptNode(m){const c=m.parentElement;return!c||c.closest("mark")||/^(SCRIPT|STYLE)$/.test(c.tagName)?NodeFilter.FILTER_REJECT:(m.nodeValue??"").toLowerCase().includes(n)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT}}),o=[];for(let m=a.nextNode();m;m=a.nextNode())o.push(m);let i=0;for(const m of o){const c=m.nodeValue??"",f=c.toLowerCase(),d=m.parentElement;if(!d)continue;const u=document.createDocumentFragment();let p=0,g=f.indexOf(n);for(;g>=0;){g>p&&u.appendChild(document.createTextNode(c.slice(p,g)));const v=document.createElement("mark");v.className=Pe,v.textContent=c.slice(g,g+l.length),u.appendChild(v),i++,p=g+l.length,g=f.indexOf(n,p)}p<c.length&&u.appendChild(document.createTextNode(c.slice(p))),d.replaceChild(u,m)}return i}function he(t,r){let l=0,n=t.toLowerCase().indexOf(r);for(;n>=0;)l++,n=t.toLowerCase().indexOf(r,n+r.length);return l}function Xe(t){const{plan:r,gotoPage:l,highlight:n,clearHighlights:a}=t,o=t.debounceMs??200,i=e.ref(!1),m=e.ref(""),c=e.ref(""),f=e.ref(0);let d=null;const u=e.computed(()=>{const E=m.value.trim().toLowerCase(),x=r.value;if(!E||!x)return[];const $=[];return x.pages.forEach((S,Y)=>{for(const D of S.components)if(D.grid){for(const I of D.grid.cells??[])for(const W of I??[])if(typeof W?.text=="string")for(let Z=0;Z<he(W.text,E);Z++)$.push(Y)}else if(D.kind==="text"&&typeof D.text=="string")for(let I=0;I<he(D.text,E);I++)$.push(Y)}),$}),p=e.computed(()=>u.value.length);function g(E){if(c.value=E,d&&clearTimeout(d),E.trim()===""){d=null,m.value="",f.value=0;return}d=setTimeout(()=>{d=null,m.value=c.value,f.value=0;const x=u.value[0];x!=null&&l(x+1)},o)}function v(E){const x=u.value.length;x!==0&&(f.value=(f.value+E+x)%x,l(u.value[f.value]+1))}function w(){i.value=!i.value}function P(E){const x=m.value.trim();x&&n(E,x)}function R(E){a(E)}function V(){c.value="",m.value="",f.value=0,d&&clearTimeout(d),d=null}return{visible:i,query:m,matchIndex:f,matchCount:p,toggle:w,onInput:g,onNav:v,apply:P,clear:R,reset:V}}function Qe(t,r){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}}),n=e.computed(()=>!l.value||!r.plan.value?0:Math.round(JSON.stringify(r.plan.value).length/1024)),a=e.computed(()=>!l.value||!r.plan.value?null:{pages:r.pageCount.value,window:`${r.windowRange.value.start}-${r.windowRange.value.end}`,zoom:`${Math.round(r.zoom.value*100)}%`,loadMs:`${r.loadMs.value}ms`,planKB:n.value});return{enabled:l,debugStats:a}}function _e(t,r){const{thumbsRoot:l,visible:n,renderThumbCanvas:a}=r;let o=null;function i(f,d){if(!t.value||f.childElementCount>0)return;const u=a(d);u&&(u.style.width="100%",u.style.height="100%",u.style.display="block",f.appendChild(u))}return{schedule:()=>{!n.value||!t.value||!l.value||typeof IntersectionObserver>"u"||(o?.disconnect(),o=new IntersectionObserver(f=>{for(const d of f){if(!d.isIntersecting)continue;const u=d.target;i(u,Number(u.dataset.thumb??1)-1),o?.unobserve(u)}},{root:l.value,rootMargin:"200px"}),l.value.querySelectorAll("[data-thumb]").forEach(f=>{o.observe(f)}))},destroy:()=>{o?.disconnect(),o=null}}}function et(){const t=e.shallowRef(0);return{loadMs:t,start(){return typeof performance<"u"?performance.now():0},end(r){t.value=r?Math.round(performance.now()-r):0}}}const tt={class:"mrp-toolbar"},ot={class:"mrp-title"},nt=["disabled"],rt={class:"mrp-pageinfo"},at=["disabled"],lt={key:1,class:"mrp-search"},st=["placeholder","value"],it={key:0,class:"mrp-search-count"},ut=["disabled"],ct=["disabled"],dt=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 r=t,l=e.ref(null);e.watch(()=>r.search.visible,a=>{a&&e.nextTick(()=>l.value?.focus())});function n(a,o,i){return a.replace("{cur}",String(o)).replace("{total}",String(i))}return(a,o)=>(e.openBlock(),e.createElementBlock("div",tt,[e.createElementVNode("span",ot,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=>a.$emit("goto",t.currentPage-1))},e.toDisplayString(t.messages.prevPage),9,nt),e.createElementVNode("span",rt,e.toDisplayString(n(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=>a.$emit("goto",t.currentPage+1))},e.toDisplayString(t.messages.nextPage),9,at)],64)):e.createCommentVNode("",!0),o[14]||(o[14]=e.createElementVNode("span",{class:"mrp-spacer"},null,-1)),t.search.visible?(e.openBlock(),e.createElementBlock("div",lt,[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=>a.$emit("search-input",i.target.value))},null,40,st),t.search.query?(e.openBlock(),e.createElementBlock("span",it,e.toDisplayString(n(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=>a.$emit("search-nav",-1))},e.toDisplayString(t.messages.prevMatch),9,ut),e.createElementVNode("button",{class:"mrp-nav",type:"button",disabled:t.search.matchCount===0,onClick:o[4]||(o[4]=i=>a.$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=>a.$emit("search-toggle"))}," 🔍 ",2),e.createElementVNode("button",{class:e.normalizeClass(["mrp-nav",{"mrp-active":t.thumbsVisible}]),type:"button",onClick:o[6]||(o[6]=i=>a.$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=>a.$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=>a.$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=>a.$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=>a.$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=>a.$emit("export","pdf"))},e.toDisplayString(t.messages.exportPdf),1)):e.createCommentVNode("",!0),t.showPrint?(e.openBlock(),e.createElementBlock("button",{key:4,class:"mrp-nav",type:"button",onClick:o[12]||(o[12]=i=>a.$emit("print"))},e.toDisplayString(t.messages.print),1)):e.createCommentVNode("",!0),t.showPdfWindow?(e.openBlock(),e.createElementBlock("button",{key:5,class:"mrp-nav",type:"button",onClick:o[13]||(o[13]=i=>a.$emit("pdf-window"))},e.toDisplayString(t.messages.pdfWindow),1)):e.createCommentVNode("",!0)]))}}),ce=(t,r)=>{const l=t.__vccOpts||t;for(const[n,a]of r)l[n]=a;return l},ke=ce(dt,[["__scopeId","data-v-f50c26e8"]]),mt={class:"mrp-params"},pt={class:"mrp-params-title"},ft={class:"mrp-params-grid"},gt={class:"mrp-param-label"},vt={key:0,class:"mrp-param-star"},ht=["value","onChange"],bt={value:"",disabled:"",hidden:""},yt=["value"],wt=["type","placeholder","value","onInput"],Et={class:"mrp-params-actions"},Pt=e.defineComponent({__name:"ReportParamPanel",props:{defs:{},modelValue:{},messages:{},attempted:{type:Boolean}},emits:["update:modelValue","query","reset"],setup(t,{emit:r}){const l=t,n=r,a=e.ref({...l.modelValue});e.watch(()=>l.modelValue,c=>{a.value={...c}});const o=e.computed(()=>l.defs.map(c=>({def:c,label:c.label??c.field,value:a.value[c.field]??""})));function i(c,f){a.value={...a.value,[c]:f},n("update:modelValue",{...a.value})}function m(c){const f=l.defs.find(d=>d.field===c);return l.attempted&&f?.required===!0&&!(a.value[c]??"").trim()}return(c,f)=>(e.openBlock(),e.createElementBlock("div",mt,[e.createElementVNode("span",pt,e.toDisplayString(t.messages.paramsTitle),1),e.createElementVNode("div",ft,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,d=>(e.openBlock(),e.createElementBlock("label",{key:d.def.field,class:e.normalizeClass(["mrp-param",{"mrp-param-missing":m(d.def.field)}])},[e.createElementVNode("span",gt,[e.createTextVNode(e.toDisplayString(d.label),1),d.def.required?(e.openBlock(),e.createElementBlock("i",vt,"*")):e.createCommentVNode("",!0)]),(d.def.type??"text")==="select"?(e.openBlock(),e.createElementBlock("select",{key:0,class:"mrp-param-input",value:d.value,onChange:u=>i(d.def.field,u.target.value),onKeydown:f[0]||(f[0]=e.withKeys(u=>c.$emit("query"),["enter"]))},[e.createElementVNode("option",bt,e.toDisplayString(d.def.placeholder??`请选择${d.label}`),1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.def.options??[],u=>(e.openBlock(),e.createElementBlock("option",{key:u.value,value:u.value},e.toDisplayString(u.label),9,yt))),128))],40,ht)):(e.openBlock(),e.createElementBlock("input",{key:1,class:"mrp-param-input",type:d.def.type==="number"?"number":d.def.type==="date"?"date":"text",placeholder:d.def.placeholder??`请输入${d.label}`,value:d.value,onInput:u=>i(d.def.field,u.target.value),onKeydown:f[1]||(f[1]=e.withKeys(u=>c.$emit("query"),["enter"]))},null,40,wt))],2))),128))]),e.createElementVNode("div",Et,[e.createElementVNode("button",{class:"mrp-nav mrp-param-query",type:"button",onClick:f[2]||(f[2]=d=>c.$emit("query"))},e.toDisplayString(t.messages.query),1),e.createElementVNode("button",{class:"mrp-nav",type:"button",onClick:f[3]||(f[3]=d=>c.$emit("reset"))},e.toDisplayString(t.messages.reset),1)])]))}}),Ce=ce(Pt,[["__scopeId","data-v-aafce92d"]]),xe={title:"报表预览",prevPage:"‹ 上一页",nextPage:"下一页 ›",pageInfo:"{cur} / {total}",fitWidth:"适宽",exportHtml:"导出 HTML",exportPdf:"导出 PDF",print:"打印",pdfWindow:"PDF 窗口",loading:"报表渲染中…",empty:"暂无预览数据",errorPrefix:"",retry:"重试",searchPlaceholder:"搜索报表内容",matchInfo:"{cur}/{total}",prevMatch:"‹",nextMatch:"›",thumbnails:"缩略图",paramsTitle:"查询条件",query:"查 询",reset:"重 置",paramRequired:"请填写{label}"},Be={shellBg:"#525659",shellFg:"#e8e8e8",toolbarBg:"#323639",toolbarBorder:"#22252a",toolbarFg:"#e8e8e8",btnFg:"#cfcfcf",btnBorder:"#4a4d52",btnHoverBg:"#414549",btnHoverFg:"#ffffff",btnActiveBg:"#2d5fb8"};function kt(t){return t}function Ct(t){return t}const z={showExport:!0,showPrint:!0,showPdfWindow:!0,showParams:!0,gapPx:18,pdfFontUrl:"/simhei.ttf",logger:console},xt={warn:()=>{},info:()=>{}};function $e(t,r){const l=r?t?.presets?.[r]:t?.defaultPreset?t?.presets?.[t.defaultPreset]:void 0,n={...t?.defaults,...l};return{showExport:n.showExport??z.showExport,showPrint:n.showPrint??z.showPrint,showPdfWindow:n.showPdfWindow??z.showPdfWindow,showParams:n.showParams??z.showParams,gapPx:n.gapPx??z.gapPx,pdfFontUrl:n.pdfFontUrl??z.pdfFontUrl,theme:{...Be,...n.theme},messages:{...xe,...n.messages},logger:n.logger??z.logger}}function Me(t){const r={};return t.shellBg!=null&&(r["--mrp-shell-bg"]=t.shellBg),t.shellFg!=null&&(r["--mrp-shell-fg"]=t.shellFg),t.toolbarBg!=null&&(r["--mrp-toolbar-bg"]=t.toolbarBg),t.toolbarBorder!=null&&(r["--mrp-toolbar-border"]=t.toolbarBorder),t.toolbarFg!=null&&(r["--mrp-toolbar-fg"]=t.toolbarFg),t.btnFg!=null&&(r["--mrp-btn-fg"]=t.btnFg),t.btnBorder!=null&&(r["--mrp-btn-border"]=t.btnBorder),t.btnHoverBg!=null&&(r["--mrp-btn-hover-bg"]=t.btnHoverBg),t.btnHoverFg!=null&&(r["--mrp-btn-hover-fg"]=t.btnHoverFg),t.btnActiveBg!=null&&(r["--mrp-btn-active-bg"]=t.btnActiveBg),r}function Bt(t){const r=e.inject(N.MACH_REPORT_CONFIG_KEY,null),l=e.computed(()=>{const n=r?.value??null,a="defaults"in t&&"presets"in t?t:{defaults:t,presets:{}};return n?{defaults:{...n.defaults,...a.defaults},presets:{...n.presets,...a.presets},defaultPreset:a.defaultPreset??n.defaultPreset}:a});e.provide(N.MACH_REPORT_CONFIG_KEY,l)}function Re(){return e.inject(N.MACH_REPORT_CONFIG_KEY,e.computed(()=>null))}class G extends Error{constructor(r,l,n){super(l),this.name="MachReportError",this.code=r,this.cause=n}}function Se(t){return t instanceof G?{code:t.code,cause:t.cause}:{code:"render",cause:t}}const $t={class:"mrp-main"},Mt={key:0,class:"mrp-state"},Rt={key:1,class:"mrp-state mrp-error"},St={key:2,class:"mrp-state"},Tt=["data-page"],Nt=["onClick"],Vt=["data-thumb"],Dt={class:"mrp-thumb-no"},Ft={class:"mrp-overlay"},zt={key:1,class:"mrp-debug","aria-hidden":"true"},Q=96/25.4,be="mach-report:ui",It=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"],setup(t,{expose:r,emit:l}){e.useCssVars(s=>({dce0aa90:v.value+"px"}));const n=t,a=l,o=e.shallowRef(null),i=e.ref(!1),m=e.ref(""),c=e.ref(1),f=e.ref(null),d=e.ref(null),u=e.ref(null),p=e.ref(!1),g=et(),v=e.computed(()=>Math.max(0,W.value)),w=e.inject(N.MACH_REPORT_FETCHER_KEY,null),R=e.inject(N.MACH_REPORT_PDF_EXPORTER_KEY,null)??N.createDefaultPdfExporter({fontUrl:"/simhei.ttf"}),V=e.computed(()=>N.normalizeTempIds(n.tempId)),E=e.computed(()=>o.value?.pages.length??0),x=Re(),$=e.computed(()=>$e(x.value,n.preset)),S=e.computed(()=>({...$.value.messages,...n.messages})),Y=e.computed(()=>n.showExport??$.value.showExport),D=e.computed(()=>n.showPrint??$.value.showPrint),I=e.computed(()=>n.showPdfWindow??$.value.showPdfWindow),W=e.computed(()=>n.gapPx??$.value.gapPx),Z=e.computed(()=>n.showParams??$.value.showParams),L=e.computed(()=>n.paramDefs??[]),F=e.ref({}),te=e.ref(!1);function oe(s){const h={};for(const b of s)h[b.field]=n.params[b.field]??b.defaultValue??"";F.value=h,te.value=!1}oe(L.value),e.watch(L,s=>oe(s));const Ne=e.computed(()=>({...n.params,...Object.fromEntries(Object.entries(F.value).filter(([,s])=>s!==""))}));function Ve(){return L.value.filter(s=>s.required===!0&&!(F.value[s.field]??"").trim())}function De(){te.value=!0;const s=Ve();if(s.length>0){const h=s[0].label??s[0].field,b=S.value.paramRequired.replace("{label}",h);m.value=b,a("error",b,{code:"param"});return}T()}function Fe(){oe(L.value)}const ze=e.computed(()=>({height:n.height,...Me($.value.theme)})),{zoom:B,zoomMode:O,applyFitZoom:de,setZoom:ne}=we(()=>({viewport:d.value,pageWidthPx:(o.value?.pages[0]?.pageWidthMm??210)*Q})),Ie=ye(o,B,{pxPerMm:Q,gapPx:W.value}),{contentSize:re,windowRange:A,visiblePages:Le,makeScrollHandler:Oe,refreshViewport:me}=Ie,He=Oe(c,E);function ae(s){O.value="raw",B.value=Math.min(3,Math.max(.3,s))}function le(){o.value=null,c.value=1,k.reset()}let J=0;async function T(){const s=++J,h=n.fetcher??w;if(V.value.length===0){m.value="缺少报表模板 ID",le(),a("error",m.value,{code:"param"});return}if(!h){m.value="未提供渲染数据源 fetcher",le(),a("error",m.value,{code:"config"});return}i.value=!0,m.value="",le();const b=g.start();try{const y=await h({tempIds:V.value,furnitureTempId:n.furnitureTempId||void 0,params:{...Ne.value}});if(s!==J)return;const C=j.validateRenderPlan(y);if(!C.ok){const q=C.errors.slice(0,3).map(U=>`${U.path}: ${U.message}`).join("; ");throw new G("validate",`渲染计划校验失败(${C.errors.length} 处): ${q}`)}C.warnings.length>0&&$.value.logger.warn("[mach-report] 渲染计划告警:",C.warnings),o.value=y,c.value=1,g.end(b),d.value&&(d.value.scrollTop=0),O.value==="fit"&&de(),a("loaded",y.pages.length)}catch(y){if(s!==J)return;const C=y instanceof G?y:new G("fetch",y instanceof Error?y.message:"预览加载失败",y);m.value=C.message,a("error",C.message,Se(C))}finally{s===J&&(i.value=!1)}}function M(s){if(E.value<=0)return;const h=Math.max(1,Math.min(E.value,s));c.value=h;const b=d.value;if(!b)return;let y=0;for(let C=0;C<h-1;C++)y+=(o.value?.pages[C]?.pageHeightMm??0)*Q+v.value;b.scrollTop=y*B.value}const{print:se,exportAs:ie,openPdfWindow:ue,releasePrintFrame:We}=Ee(o,{getPdfExporter:()=>R,onError:s=>a("error",s,{code:"print"})});function pe(s,h={}){F.value={...F.value,...s},h.reload!==!1&&T()}const Ae={reload:T,print:se,exportAs:ie,openPdfWindow:ue,gotoPage:M,setParams:pe};e.provide(N.MACH_REPORT_CONTROLLER_KEY,Ae);const k=Xe({plan:o,gotoPage:M,highlight:Je,clearHighlights:Ze});function qe(s){s.ctrlKey&&(s.preventDefault(),ae(B.value*(s.deltaY<0?1.1:1/1.1)))}function Ue(s){if((s.ctrlKey||s.metaKey)&&s.key.toLowerCase()==="f"){s.preventDefault(),k.visible.value||k.toggle();return}switch(s.key){case"PageDown":s.preventDefault(),M(c.value+1);break;case"PageUp":s.preventDefault(),M(c.value-1);break;case"Home":s.preventDefault(),M(1);break;case"End":s.preventDefault(),M(E.value);break;case"+":case"=":s.preventDefault(),ae(B.value*1.1);break;case"-":s.preventDefault(),ae(B.value/1.1);break}}function je(){try{localStorage.setItem(be,JSON.stringify({zoomMode:O.value==="fit"?"fit":Math.round(B.value*100)}))}catch{}}e.watch([O,B],je),e.watchEffect(()=>{const s=o.value;if(!s)return;const h=f.value;if(!h)return;h.querySelectorAll(".mrp-page-holder").forEach(y=>{const C=Number(y.dataset.page??0)-1,q=s.pages[C];if(!q||y.childElementCount>0){if(y.firstElementChild){const ve=y.firstElementChild;k.clear(ve),k.apply(ve)}return}y.style.width=`${q.pageWidthMm*Q}px`;const U=j.renderPage(q,96,{},document);k.apply(U),y.appendChild(U)})},{flush:"post"}),e.watch(()=>k.query.value,s=>{s||f.value?.querySelectorAll(".mrp-page-holder").forEach(h=>{k.clear(h)})});const fe=_e(o,{thumbsRoot:u,visible:p,renderThumbCanvas:s=>{try{const{canvases:h}=j.renderPlanToCanvas(o.value,{start:s,end:s,dpr:.2});return h[0]??null}catch{return null}}});e.watchEffect(()=>{fe.schedule()},{flush:"post"});const Ke=e.computed(()=>n.debug),{debugStats:H}=Qe(Ke,{plan:o,pageCount:E,windowRange:A,zoom:B,loadMs:g.loadMs});function ge(){me(d.value),O.value==="fit"&&de()}function Ge(){try{const s=JSON.parse(localStorage.getItem(be)??"{}");s.zoomMode==="fit"?ne("fit"):typeof s.zoomMode=="number"&&ne(s.zoomMode)}catch{}}return e.onMounted(()=>{window.addEventListener("resize",ge),me(d.value),Ge(),n.autoLoad&&T()}),e.onUnmounted(()=>{window.removeEventListener("resize",ge),fe.destroy(),k.reset(),We()}),e.watch(()=>[n.tempId,n.furnitureTempId,JSON.stringify(n.params)],()=>{n.autoLoad&&T()}),e.watch(()=>n.fetcher??w,()=>{n.autoLoad&&T()}),r({reload:T,print:se,exportAs:ie,openPdfWindow:ue,gotoPage:M,setParams:pe}),(s,h)=>(e.openBlock(),e.createElementBlock("div",{class:"mach-report-preview",style:e.normalizeStyle(ze.value)},[Z.value&&L.value.length>0?(e.openBlock(),e.createBlock(Ce,{key:0,defs:L.value,modelValue:F.value,"onUpdate:modelValue":h[0]||(h[0]=b=>F.value=b),messages:S.value,attempted:te.value,onQuery:De,onReset:Fe},null,8,["defs","modelValue","messages","attempted"])):e.createCommentVNode("",!0),e.createVNode(ke,{"page-count":E.value,"current-page":c.value,"zoom-mode":e.unref(O),zoom:e.unref(B),"show-export":Y.value,"show-print":D.value,"show-pdf-window":I.value,messages:S.value,search:{visible:e.unref(k).visible.value,query:e.unref(k).query.value,matchIndex:e.unref(k).matchIndex.value,matchCount:e.unref(k).matchCount.value},"thumbs-visible":p.value,onGoto:M,onZoom:e.unref(ne),onExport:h[1]||(h[1]=b=>e.unref(ie)(b)),onPrint:e.unref(se),onPdfWindow:e.unref(ue),onSearchInput:e.unref(k).onInput,onSearchNav:e.unref(k).onNav,onSearchToggle:e.unref(k).toggle,onThumbsToggle:h[2]||(h[2]=b=>p.value=!p.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"]),e.createElementVNode("div",$t,[e.createElementVNode("div",{ref_key:"viewportRef",ref:d,class:"mrp-body",tabindex:"0",onWheel:qe,onKeydown:Ue,onScrollPassive:h[3]||(h[3]=b=>e.unref(He)(b.target))},[i.value?(e.openBlock(),e.createElementBlock("div",Mt,e.toDisplayString(S.value.loading),1)):m.value?(e.openBlock(),e.createElementBlock("div",Rt,[e.createTextVNode(e.toDisplayString(m.value)+" ",1),e.createElementVNode("button",{class:"mrp-retry",type:"button",onClick:T},e.toDisplayString(S.value.retry),1)])):!o.value||E.value===0?(e.openBlock(),e.createElementBlock("div",St,e.toDisplayString(S.value.empty),1)):(e.openBlock(),e.createElementBlock("div",{key:3,class:"mrp-scale",style:e.normalizeStyle({width:`${e.unref(re).w*e.unref(B)}px`,height:`${e.unref(re).h*e.unref(B)}px`})},[e.createElementVNode("div",{ref_key:"containerRef",ref:f,class:"mrp-scale-inner",style:e.normalizeStyle({transform:`scale(${e.unref(B)})`,transformOrigin:"top left",width:`${e.unref(re).w}px`})},[e.unref(A).padTopPx>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mrp-spacer-top",style:e.normalizeStyle({height:`${e.unref(A).padTopPx}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(Le),b=>(e.openBlock(),e.createElementBlock("div",{key:b.index,class:"mrp-page-holder","data-page":b.index+1},null,8,Tt))),128)),e.unref(A).padBottomPx>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"mrp-spacer-bottom",style:e.normalizeStyle({height:`${e.unref(A).padBottomPx}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)],4)],4))],544),p.value&&E.value>0?(e.openBlock(),e.createElementBlock("aside",{key:0,ref_key:"thumbsRef",ref:u,class:"mrp-thumbs"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value?.pages??[],(b,y)=>(e.openBlock(),e.createElementBlock("div",{key:y,class:e.normalizeClass(["mrp-thumb",{"mrp-thumb-active":y+1===c.value}]),onClick:C=>M(y+1)},[e.createElementVNode("div",{class:"mrp-thumb-box","data-thumb":y+1,style:e.normalizeStyle({height:`${Math.round(b.pageHeightMm/b.pageWidthMm*116)}px`})},null,12,Vt),e.createElementVNode("span",Dt,e.toDisplayString(y+1),1)],10,Nt))),128))],512)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Ft,[e.renderSlot(s.$slots,"default",{},void 0,!0)]),e.unref(H)?(e.openBlock(),e.createElementBlock("div",zt,[h[4]||(h[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))}}),Te=ce(It,[["__scopeId","data-v-d49e06b6"]]),Lt=Object.freeze(Object.defineProperty({__proto__:null,default:Te},Symbol.toStringTag,{value:"Module"}));exports.DEFAULT_MESSAGES=xe;exports.DEFAULT_THEME=Be;exports.MachReportError=G;exports.ReportParamPanel=Ce;exports.ReportPreview=Te;exports.ReportPreview$1=Lt;exports.ReportToolbar=ke;exports.SILENT_LOGGER=xt;exports.buildPrintDocument=K;exports.defineMachReportConfig=kt;exports.defineMachReportPreset=Ct;exports.printPlans=Ye;exports.provideMachReportConfig=Bt;exports.resolveConfig=$e;exports.themeToCssVars=Me;exports.toErrorDetail=Se;exports.useMachReportConfig=Re;exports.usePageWindow=ye;exports.usePrintExport=Ee;exports.useZoom=we;