@agile-team/mach-report 2.4.1 → 2.5.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.
@@ -48,6 +48,19 @@ showPdfWindow: {
48
48
  type: BooleanConstructor;
49
49
  default: undefined;
50
50
  };
51
+ showSettings: {
52
+ type: BooleanConstructor;
53
+ default: undefined;
54
+ };
55
+ toolbar: {
56
+ type: PropType<MachReportToolbarOptions>;
57
+ default: undefined;
58
+ };
59
+ /** 保留表头的零行业务结果;不改变计划和导出内容。 */
60
+ emptyState: {
61
+ type: PropType<boolean | ReportEmptyState>;
62
+ default: boolean;
63
+ };
51
64
  /** 页间距(px);不传走配置中心 */
52
65
  gapPx: {
53
66
  type: NumberConstructor;
@@ -111,6 +124,7 @@ loaded: (pageCount: number) => any;
111
124
  warning: (message: string) => any;
112
125
  "cell-edit": (edit: ReportCellEdit_2) => any;
113
126
  "template-import": (result: ExcelImportResult) => any;
127
+ "preferences-change": (preferences: Readonly<ReportPreviewPreferences>) => any;
114
128
  }, string, PublicProps, Readonly<ExtractPropTypes< {
115
129
  reportId: {
116
130
  type: PropType<string | string[] | null>;
@@ -141,6 +155,19 @@ showPdfWindow: {
141
155
  type: BooleanConstructor;
142
156
  default: undefined;
143
157
  };
158
+ showSettings: {
159
+ type: BooleanConstructor;
160
+ default: undefined;
161
+ };
162
+ toolbar: {
163
+ type: PropType<MachReportToolbarOptions>;
164
+ default: undefined;
165
+ };
166
+ /** 保留表头的零行业务结果;不改变计划和导出内容。 */
167
+ emptyState: {
168
+ type: PropType<boolean | ReportEmptyState>;
169
+ default: boolean;
170
+ };
144
171
  /** 页间距(px);不传走配置中心 */
145
172
  gapPx: {
146
173
  type: NumberConstructor;
@@ -192,6 +219,7 @@ onLoaded?: ((pageCount: number) => any) | undefined;
192
219
  onWarning?: ((message: string) => any) | undefined;
193
220
  "onCell-edit"?: ((edit: ReportCellEdit_2) => any) | undefined;
194
221
  "onTemplate-import"?: ((result: ExcelImportResult) => any) | undefined;
222
+ "onPreferences-change"?: ((preferences: Readonly<ReportPreviewPreferences>) => any) | undefined;
195
223
  }>, {
196
224
  editable: boolean | ReportEditingOptions;
197
225
  height: string;
@@ -202,10 +230,13 @@ debug: boolean;
202
230
  showExport: boolean;
203
231
  showPrint: boolean;
204
232
  showPdfWindow: boolean;
233
+ showSettings: boolean;
205
234
  showParams: boolean;
235
+ toolbar: MachReportToolbarOptions;
206
236
  messages: Partial<MachReportMessages>;
207
237
  excelImport: boolean | ExcelImportOptions;
208
238
  autoLoad: boolean;
239
+ emptyState: boolean | ReportEmptyState;
209
240
  preset: string;
210
241
  paramDefs: ReportParamDef[] | undefined;
211
242
  fetcher: PlanFetcher | null;
@@ -234,6 +265,12 @@ declare type __VLS_Props = {
234
265
  };
235
266
  thumbsVisible: boolean;
236
267
  showImport?: boolean;
268
+ showSearch?: boolean;
269
+ showThumbnails?: boolean;
270
+ showZoom?: boolean;
271
+ exportFormats?: readonly ReportExportFormat[];
272
+ showSettings?: boolean;
273
+ settingsOpen?: boolean;
237
274
  busy?: boolean;
238
275
  };
239
276
 
@@ -248,6 +285,7 @@ declare type __VLS_Props_2 = {
248
285
  declare function __VLS_template(): {
249
286
  attrs: Partial<{}>;
250
287
  slots: {
288
+ settings?(_: {}): any;
251
289
  default?(_: {}): any;
252
290
  };
253
291
  refs: {
@@ -944,6 +982,9 @@ export declare interface MachReportDefaults {
944
982
  showExport?: boolean;
945
983
  showPrint?: boolean;
946
984
  showPdfWindow?: boolean;
985
+ /** 设置入口默认显示;可在其中按需启用阅读及输出工具。 */
986
+ showSettings?: boolean;
987
+ toolbar?: MachReportToolbarOptions;
947
988
  /** 参数面板显隐(有参数定义且未显式关闭时显示;缺省 true) */
948
989
  showParams?: boolean;
949
990
  /** 页间距 px */
@@ -1054,6 +1095,20 @@ export declare interface MachReportMessages {
1054
1095
  editInvalidNumber?: string;
1055
1096
  editInvalidBoolean?: string;
1056
1097
  editConflict?: string;
1098
+ settings?: string;
1099
+ settingsDisplay?: string;
1100
+ settingsExport?: string;
1101
+ settingsData?: string;
1102
+ settingsUnavailable?: string;
1103
+ settingsReset?: string;
1104
+ settingsClose?: string;
1105
+ search?: string;
1106
+ zoom?: string;
1107
+ settingsLocal?: string;
1108
+ editingLocal?: string;
1109
+ editingSaved?: string;
1110
+ importLocal?: string;
1111
+ emptyDescription?: string;
1057
1112
  }
1058
1113
 
1059
1114
  /**
@@ -1121,6 +1176,18 @@ export declare const MachReportPreview: {
1121
1176
  type: BooleanConstructor;
1122
1177
  default: undefined;
1123
1178
  };
1179
+ showSettings: {
1180
+ type: BooleanConstructor;
1181
+ default: undefined;
1182
+ };
1183
+ toolbar: {
1184
+ type: PropType<MachReportToolbarOptions>;
1185
+ default: undefined;
1186
+ };
1187
+ emptyState: {
1188
+ type: PropType<boolean | ReportEmptyState>;
1189
+ default: boolean;
1190
+ };
1124
1191
  gapPx: {
1125
1192
  type: NumberConstructor;
1126
1193
  default: undefined;
@@ -1166,6 +1233,7 @@ export declare const MachReportPreview: {
1166
1233
  onWarning?: ((message: string) => any) | undefined;
1167
1234
  "onCell-edit"?: ((edit: ReportCellEdit_2) => any) | undefined;
1168
1235
  "onTemplate-import"?: ((result: ExcelImportResult_2) => any) | undefined;
1236
+ "onPreferences-change"?: ((preferences: Readonly<ReportPreviewPreferences>) => any) | undefined;
1169
1237
  }>, {
1170
1238
  reload: () => Promise<void>;
1171
1239
  print: () => Promise<void>;
@@ -1189,6 +1257,7 @@ export declare const MachReportPreview: {
1189
1257
  warning: (message: string) => any;
1190
1258
  "cell-edit": (edit: ReportCellEdit_2) => any;
1191
1259
  "template-import": (result: ExcelImportResult_2) => any;
1260
+ "preferences-change": (preferences: Readonly<ReportPreviewPreferences>) => any;
1192
1261
  }, PublicProps, {
1193
1262
  editable: boolean | ReportEditingOptions;
1194
1263
  height: string;
@@ -1199,10 +1268,13 @@ export declare const MachReportPreview: {
1199
1268
  showExport: boolean;
1200
1269
  showPrint: boolean;
1201
1270
  showPdfWindow: boolean;
1271
+ showSettings: boolean;
1202
1272
  showParams: boolean;
1273
+ toolbar: MachReportToolbarOptions;
1203
1274
  messages: Partial<MachReportMessages>;
1204
1275
  excelImport: boolean | ExcelImportOptions_2;
1205
1276
  autoLoad: boolean;
1277
+ emptyState: boolean | ReportEmptyState;
1206
1278
  preset: string;
1207
1279
  paramDefs: ReportParamDef[] | undefined;
1208
1280
  fetcher: PlanFetcher | null;
@@ -1247,6 +1319,18 @@ export declare const MachReportPreview: {
1247
1319
  type: BooleanConstructor;
1248
1320
  default: undefined;
1249
1321
  };
1322
+ showSettings: {
1323
+ type: BooleanConstructor;
1324
+ default: undefined;
1325
+ };
1326
+ toolbar: {
1327
+ type: PropType<MachReportToolbarOptions>;
1328
+ default: undefined;
1329
+ };
1330
+ emptyState: {
1331
+ type: PropType<boolean | ReportEmptyState>;
1332
+ default: boolean;
1333
+ };
1250
1334
  gapPx: {
1251
1335
  type: NumberConstructor;
1252
1336
  default: undefined;
@@ -1292,6 +1376,7 @@ export declare const MachReportPreview: {
1292
1376
  onWarning?: ((message: string) => any) | undefined;
1293
1377
  "onCell-edit"?: ((edit: ReportCellEdit_2) => any) | undefined;
1294
1378
  "onTemplate-import"?: ((result: ExcelImportResult_2) => any) | undefined;
1379
+ "onPreferences-change"?: ((preferences: Readonly<ReportPreviewPreferences>) => any) | undefined;
1295
1380
  }>, {
1296
1381
  reload: () => Promise<void>;
1297
1382
  print: () => Promise<void>;
@@ -1316,10 +1401,13 @@ export declare const MachReportPreview: {
1316
1401
  showExport: boolean;
1317
1402
  showPrint: boolean;
1318
1403
  showPdfWindow: boolean;
1404
+ showSettings: boolean;
1319
1405
  showParams: boolean;
1406
+ toolbar: MachReportToolbarOptions;
1320
1407
  messages: Partial<MachReportMessages>;
1321
1408
  excelImport: boolean | ExcelImportOptions_2;
1322
1409
  autoLoad: boolean;
1410
+ emptyState: boolean | ReportEmptyState;
1323
1411
  preset: string;
1324
1412
  paramDefs: ReportParamDef[] | undefined;
1325
1413
  fetcher: PlanFetcher | null;
@@ -1356,6 +1444,18 @@ showPdfWindow: {
1356
1444
  type: BooleanConstructor;
1357
1445
  default: undefined;
1358
1446
  };
1447
+ showSettings: {
1448
+ type: BooleanConstructor;
1449
+ default: undefined;
1450
+ };
1451
+ toolbar: {
1452
+ type: PropType<MachReportToolbarOptions>;
1453
+ default: undefined;
1454
+ };
1455
+ emptyState: {
1456
+ type: PropType<boolean | ReportEmptyState>;
1457
+ default: boolean;
1458
+ };
1359
1459
  gapPx: {
1360
1460
  type: NumberConstructor;
1361
1461
  default: undefined;
@@ -1401,6 +1501,7 @@ onLoaded?: ((pageCount: number) => any) | undefined;
1401
1501
  onWarning?: ((message: string) => any) | undefined;
1402
1502
  "onCell-edit"?: ((edit: ReportCellEdit_2) => any) | undefined;
1403
1503
  "onTemplate-import"?: ((result: ExcelImportResult_2) => any) | undefined;
1504
+ "onPreferences-change"?: ((preferences: Readonly<ReportPreviewPreferences>) => any) | undefined;
1404
1505
  }>, {
1405
1506
  reload: () => Promise<void>;
1406
1507
  print: () => Promise<void>;
@@ -1424,6 +1525,7 @@ loaded: (pageCount: number) => any;
1424
1525
  warning: (message: string) => any;
1425
1526
  "cell-edit": (edit: ReportCellEdit_2) => any;
1426
1527
  "template-import": (result: ExcelImportResult_2) => any;
1528
+ "preferences-change": (preferences: Readonly<ReportPreviewPreferences>) => any;
1427
1529
  }, string, {
1428
1530
  editable: boolean | ReportEditingOptions;
1429
1531
  height: string;
@@ -1434,15 +1536,19 @@ debug: boolean;
1434
1536
  showExport: boolean;
1435
1537
  showPrint: boolean;
1436
1538
  showPdfWindow: boolean;
1539
+ showSettings: boolean;
1437
1540
  showParams: boolean;
1541
+ toolbar: MachReportToolbarOptions;
1438
1542
  messages: Partial<MachReportMessages>;
1439
1543
  excelImport: boolean | ExcelImportOptions_2;
1440
1544
  autoLoad: boolean;
1545
+ emptyState: boolean | ReportEmptyState;
1441
1546
  preset: string;
1442
1547
  paramDefs: ReportParamDef[] | undefined;
1443
1548
  fetcher: PlanFetcher | null;
1444
1549
  }, {}, string, {}, { [K in keyof GlobalComponents]: GlobalComponents[K] }, { [K in keyof GlobalDirectives]: GlobalDirectives[K] }, string, ComponentProvideOptions> & VNodeProps & AllowedComponentProps & ComponentCustomProps & (new () => {
1445
1550
  $slots: {
1551
+ settings?(_: {}): any;
1446
1552
  default?(_: {}): any;
1447
1553
  };
1448
1554
  });
@@ -1494,6 +1600,18 @@ export declare interface MachReportTheme {
1494
1600
  btnActiveBg: string;
1495
1601
  }
1496
1602
 
1603
+ export declare interface MachReportToolbarOptions {
1604
+ search?: boolean;
1605
+ thumbnails?: boolean;
1606
+ zoom?: boolean;
1607
+ /** 编辑能力由 editable 授权;此项仅设置初始交互偏好,默认 true(兼容旧行为)。 */
1608
+ editing?: boolean;
1609
+ /** 导入能力由 excelImport 授权;此项仅设置初始交互偏好,默认 true。 */
1610
+ excelImport?: boolean;
1611
+ /** 未传时显示全部已有出口;空数组表示不提供导出工具。 */
1612
+ exportFormats?: ReportExportFormat[];
1613
+ }
1614
+
1497
1615
  export declare function normalizeReportIds(reportId: ReportIdInput): string[];
1498
1616
 
1499
1617
  declare function openPdfWindow(): void;
@@ -1712,6 +1830,10 @@ declare interface RenderPlan {
1712
1830
  pages: PlanPage[];
1713
1831
  }
1714
1832
 
1833
+ export declare const REPORT_EXPORT_FORMATS: readonly ReportExportFormat[];
1834
+
1835
+ export declare const REPORT_PREVIEW_TOOLS: readonly ["search", "thumbnails", "zoom", ...ReportExportFormat[], "print", "pdfWindow", "editing", "import"];
1836
+
1715
1837
  /** 预览中的物理坐标;合并单元格使用左上角坐标。 */
1716
1838
  declare interface ReportCellAddress {
1717
1839
  pageIndex: number;
@@ -1806,6 +1928,15 @@ export declare interface ReportEditOperation {
1806
1928
  signal: AbortSignal;
1807
1929
  }
1808
1930
 
1931
+ /** 报表含表头但业务行为空时,由接入方明确声明;组件不推测业务数据。 */
1932
+ export declare interface ReportEmptyState {
1933
+ title?: string;
1934
+ description?: string;
1935
+ }
1936
+
1937
+ /** 输出能力仍由宿主授权;工具偏好只决定当前预览实例的可见与启用状态。 */
1938
+ export declare type ReportExportFormat = "html" | "pdf" | "xlsx" | "png" | "word";
1939
+
1809
1940
  /** 保持 Promise<RenderPlan> 契约;元数据为可选,旧业务 fetcher 无需改造。 */
1810
1941
  declare interface ReportFetcher {
1811
1942
  (input: ReportFetchInput): Promise<RenderPlan>;
@@ -1889,6 +2020,10 @@ onQuery?: (() => any) | undefined;
1889
2020
 
1890
2021
  export declare const ReportPreview: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
1891
2022
 
2023
+ export declare type ReportPreviewPreferences = Record<ReportPreviewTool, boolean>;
2024
+
2025
+ export declare type ReportPreviewTool = typeof REPORT_PREVIEW_TOOLS[number];
2026
+
1892
2027
  declare type ReportRegistry = Record<string, ReportDefinition>;
1893
2028
 
1894
2029
  declare interface ReportTemplate {
@@ -1925,6 +2060,7 @@ goto: (page: number) => any;
1925
2060
  "search-toggle": () => any;
1926
2061
  "thumbs-toggle": () => any;
1927
2062
  "import-excel": () => any;
2063
+ "settings-toggle": () => any;
1928
2064
  }, string, PublicProps, Readonly<__VLS_Props> & Readonly<{
1929
2065
  onPrint?: (() => any) | undefined;
1930
2066
  onExport?: ((format: "html" | "png" | "pdf" | "xlsx" | "word") => any) | undefined;
@@ -1936,13 +2072,14 @@ onGoto?: ((page: number) => any) | undefined;
1936
2072
  "onSearch-toggle"?: (() => any) | undefined;
1937
2073
  "onThumbs-toggle"?: (() => any) | undefined;
1938
2074
  "onImport-excel"?: (() => any) | undefined;
2075
+ "onSettings-toggle"?: (() => any) | undefined;
1939
2076
  }>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {
1940
2077
  searchInputRef: HTMLInputElement;
1941
2078
  }, HTMLDivElement>;
1942
2079
 
1943
2080
  export declare function resolveConfig(config: MachReportConfig | null | undefined, presetName?: string): ResolvedConfig;
1944
2081
 
1945
- export declare type ResolvedConfig = Required<Pick<MachReportDefaults, "showExport" | "showPrint" | "showPdfWindow" | "showParams" | "gapPx">> & {
2082
+ export declare type ResolvedConfig = Required<Pick<MachReportDefaults, "showExport" | "showPrint" | "showPdfWindow" | "showSettings" | "showParams" | "gapPx">> & {
1946
2083
  pdfFontUrl: string;
1947
2084
  theme: MachReportTheme;
1948
2085
  messages: MachReportMessages;
@@ -1951,6 +2088,7 @@ export declare type ResolvedConfig = Required<Pick<MachReportDefaults, "showExpo
1951
2088
  xlsx: XlsxRenderOptions;
1952
2089
  editable: boolean | ReportEditingOptions;
1953
2090
  excelImport: boolean | ExcelImportOptions;
2091
+ toolbar: MachReportToolbarOptions;
1954
2092
  };
1955
2093
 
1956
2094
  declare interface RichParagraph {
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("./plugin-DwKr8oF6.cjs");function i(){return Promise.resolve().then(()=>require("./ReportPreview-BVTpw9Tb.cjs")).then(e=>e.ReportPreview$1)}const t={install(e,o={}){r.machReportPlugin.install(e,o)}};exports.MachReportPreview=r.MachReportPreview;exports.default=t;exports.machReportAsyncPlugin=t;exports.preloadMachReport=i;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("./plugin-DMPLDpBY.cjs");function i(){return Promise.resolve().then(()=>require("./ReportPreview-ClM8h0pM.cjs")).then(e=>e.ReportPreview$1)}const t={install(e,o={}){r.machReportPlugin.install(e,o)}};exports.MachReportPreview=r.MachReportPreview;exports.default=t;exports.machReportAsyncPlugin=t;exports.preloadMachReport=i;
package/dist/vue-async.js CHANGED
@@ -1,7 +1,7 @@
1
- import { m as o } from "./plugin-CKnSVuVe.js";
2
- import { M as l } from "./plugin-CKnSVuVe.js";
1
+ import { m as o } from "./plugin-DDLcFWlk.js";
2
+ import { M as l } from "./plugin-DDLcFWlk.js";
3
3
  function a() {
4
- return import("./ReportPreview-XF8iSUG1.js").then((t) => t.s);
4
+ return import("./ReportPreview-CBKLI--k.js").then((t) => t.w);
5
5
  }
6
6
  const n = {
7
7
  install(t, r = {}) {
package/dist/vue.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("@agile-team/mach-report"),e=require("./ReportPreview-BVTpw9Tb.cjs"),c=require("./plugin-DwKr8oF6.cjs"),u=require("vue");function p(o){const r=s.createReportSource(o),i=async n=>{if(n.reportIds.length===0)throw new e.PlanLoadError("缺少报表 ID");for(const t of n.reportIds)if(!Object.prototype.hasOwnProperty.call(o,t)||!o[t])throw new e.PlanLoadError(`本地模板 ${t} 不存在`);return r(n)};return i.getParamDefs=r.getParamDefs,i}const f=Object.freeze({loading:!1,hasPlan:!1,pageCount:0,currentPage:1,exporting:null,printing:!1,canExport:!1,canPrint:!1,error:null,pdfFont:Object.freeze({status:"unchecked",fontUrl:""})});function P(){const o=u.shallowRef(null),r=()=>o.value?.state??f,i=Object.freeze({get loading(){return r().loading},get hasPlan(){return r().hasPlan},get pageCount(){return r().pageCount},get currentPage(){return r().currentPage},get exporting(){return r().exporting},get printing(){return r().printing},get canExport(){return r().canExport},get canPrint(){return r().canPrint},get error(){return r().error},get pdfFont(){return r().pdfFont},get editing(){return r().editing??!1},get saving(){return r().saving??!1},get importing(){return r().importing??!1},get dirty(){return r().dirty??!1}});function n(){if(!o.value)throw new e.MachReportError("config","报表预览尚未挂载,请在 ready 后调用控制器");return o.value}return{ref(t){const a=t;o.value=a&&typeof a.reload=="function"&&typeof a.print=="function"&&typeof a.exportAs=="function"&&typeof a.openPdfWindow=="function"&&typeof a.gotoPage=="function"&&typeof a.setParams=="function"?a:null},ready:u.computed(()=>o.value!==null),state:i,async checkPdfFont(){const t=n();return t.checkPdfFont?t.checkPdfFont():{status:"unverified",fontUrl:"",message:"旧自定义控制器未提供字体检查,请由宿主确认字体配置"}},async reload(){await n().reload()},async print(){await n().print()},async exportAs(t){await n().exportAs(t)},openPdfWindow(){n().openPdfWindow()},gotoPage(t){n().gotoPage(t)},async setParams(t,a){await n().setParams(t,a)},async importExcel(t,a){const l=n();if(!l.importExcel)throw new e.MachReportError("config","旧自定义控制器未提供 Excel 导入");return l.importExcel(t,a)},getPlan(){return n().getPlan?.()??null},getChanges(){return n().getChanges?.()??[]}}}function g(){return u.inject(c.MACH_REPORT_CONTROLLER_KEY,null)}exports.DEFAULT_MESSAGES=e.DEFAULT_MESSAGES;exports.DEFAULT_THEME=e.DEFAULT_THEME;exports.MachReportError=e.MachReportError;exports.PlanLoadError=e.PlanLoadError;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.createDefaultPdfExporter=e.createDefaultPdfExporter;exports.createFetchRequest=e.createFetchRequest;exports.defineMachReportConfig=e.defineMachReportConfig;exports.defineMachReportPreset=e.defineMachReportPreset;exports.joinReportIds=e.joinReportIds;exports.normalizeReportIds=e.normalizeReportIds;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=c.MACH_REPORT_CONFIG_KEY;exports.MACH_REPORT_CONTROLLER_KEY=c.MACH_REPORT_CONTROLLER_KEY;exports.MACH_REPORT_FETCHER_KEY=c.MACH_REPORT_FETCHER_KEY;exports.MACH_REPORT_PDF_EXPORTER_KEY=c.MACH_REPORT_PDF_EXPORTER_KEY;exports.MachReportPreview=c.MachReportPreview;exports.machReportPlugin=c.machReportPlugin;exports.createLocalFetcher=p;exports.useMachReport=P;exports.useReportPreview=g;Object.keys(s).forEach(o=>{o!=="default"&&!Object.prototype.hasOwnProperty.call(exports,o)&&Object.defineProperty(exports,o,{enumerable:!0,get:()=>s[o]})});
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("@agile-team/mach-report"),e=require("./ReportPreview-ClM8h0pM.cjs"),c=require("./plugin-DMPLDpBY.cjs"),u=require("vue");function p(o){const r=s.createReportSource(o),i=async n=>{if(n.reportIds.length===0)throw new e.PlanLoadError("缺少报表 ID");for(const t of n.reportIds)if(!Object.prototype.hasOwnProperty.call(o,t)||!o[t])throw new e.PlanLoadError(`本地模板 ${t} 不存在`);return r(n)};return i.getParamDefs=r.getParamDefs,i}const R=Object.freeze({loading:!1,hasPlan:!1,pageCount:0,currentPage:1,exporting:null,printing:!1,canExport:!1,canPrint:!1,error:null,pdfFont:Object.freeze({status:"unchecked",fontUrl:""})});function P(){const o=u.shallowRef(null),r=()=>o.value?.state??R,i=Object.freeze({get loading(){return r().loading},get hasPlan(){return r().hasPlan},get pageCount(){return r().pageCount},get currentPage(){return r().currentPage},get exporting(){return r().exporting},get printing(){return r().printing},get canExport(){return r().canExport},get canPrint(){return r().canPrint},get error(){return r().error},get pdfFont(){return r().pdfFont},get editing(){return r().editing??!1},get saving(){return r().saving??!1},get importing(){return r().importing??!1},get dirty(){return r().dirty??!1}});function n(){if(!o.value)throw new e.MachReportError("config","报表预览尚未挂载,请在 ready 后调用控制器");return o.value}return{ref(t){const a=t;o.value=a&&typeof a.reload=="function"&&typeof a.print=="function"&&typeof a.exportAs=="function"&&typeof a.openPdfWindow=="function"&&typeof a.gotoPage=="function"&&typeof a.setParams=="function"?a:null},ready:u.computed(()=>o.value!==null),state:i,async checkPdfFont(){const t=n();return t.checkPdfFont?t.checkPdfFont():{status:"unverified",fontUrl:"",message:"旧自定义控制器未提供字体检查,请由宿主确认字体配置"}},async reload(){await n().reload()},async print(){await n().print()},async exportAs(t){await n().exportAs(t)},openPdfWindow(){n().openPdfWindow()},gotoPage(t){n().gotoPage(t)},async setParams(t,a){await n().setParams(t,a)},async importExcel(t,a){const l=n();if(!l.importExcel)throw new e.MachReportError("config","旧自定义控制器未提供 Excel 导入");return l.importExcel(t,a)},getPlan(){return n().getPlan?.()??null},getChanges(){return n().getChanges?.()??[]}}}function E(){return u.inject(c.MACH_REPORT_CONTROLLER_KEY,null)}exports.DEFAULT_MESSAGES=e.DEFAULT_MESSAGES;exports.DEFAULT_THEME=e.DEFAULT_THEME;exports.MachReportError=e.MachReportError;exports.PlanLoadError=e.PlanLoadError;exports.REPORT_EXPORT_FORMATS=e.REPORT_EXPORT_FORMATS;exports.REPORT_PREVIEW_TOOLS=e.REPORT_PREVIEW_TOOLS;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.createDefaultPdfExporter=e.createDefaultPdfExporter;exports.createFetchRequest=e.createFetchRequest;exports.defineMachReportConfig=e.defineMachReportConfig;exports.defineMachReportPreset=e.defineMachReportPreset;exports.joinReportIds=e.joinReportIds;exports.normalizeReportIds=e.normalizeReportIds;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=c.MACH_REPORT_CONFIG_KEY;exports.MACH_REPORT_CONTROLLER_KEY=c.MACH_REPORT_CONTROLLER_KEY;exports.MACH_REPORT_FETCHER_KEY=c.MACH_REPORT_FETCHER_KEY;exports.MACH_REPORT_PDF_EXPORTER_KEY=c.MACH_REPORT_PDF_EXPORTER_KEY;exports.MachReportPreview=c.MachReportPreview;exports.machReportPlugin=c.machReportPlugin;exports.createLocalFetcher=p;exports.useMachReport=P;exports.useReportPreview=E;Object.keys(s).forEach(o=>{o!=="default"&&!Object.prototype.hasOwnProperty.call(exports,o)&&Object.defineProperty(exports,o,{enumerable:!0,get:()=>s[o]})});
package/dist/vue.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import { createReportSource as u } from "@agile-team/mach-report";
2
2
  export * from "@agile-team/mach-report";
3
- import { P as i, M as c } from "./ReportPreview-XF8iSUG1.js";
4
- import { D as M, a as T, R as O, b as v, c as F, S as A, d as D, e as b, f as L, g as S, h as j, i as H, j as I, n as k, p as W, k as Y, r as z, t as G, l as K, u as U, m as N, o as q, q as V } from "./ReportPreview-XF8iSUG1.js";
5
- import { a as f } from "./plugin-CKnSVuVe.js";
6
- import { b as Z, c as $, d as B, M as J, m as Q } from "./plugin-CKnSVuVe.js";
3
+ import { P as i, M as c } from "./ReportPreview-CBKLI--k.js";
4
+ import { D as y, a as C, R as M, b as v, c as F, d as A, e as D, S, f as b, g as L, h as I, i as j, j as H, k as W, l as k, n as Y, p as z, m as G, r as K, t as U, o as N, u as q, q as V, s as X, v as Z } from "./ReportPreview-CBKLI--k.js";
5
+ import { a as f } from "./plugin-DDLcFWlk.js";
6
+ import { b as B, c as J, d as Q, M as ee, m as te } from "./plugin-DDLcFWlk.js";
7
7
  import { shallowRef as l, computed as p, inject as g } from "vue";
8
8
  function h(o) {
9
9
  const e = u(o), a = async (r) => {
@@ -119,42 +119,44 @@ function w() {
119
119
  }
120
120
  };
121
121
  }
122
- function x() {
122
+ function T() {
123
123
  return g(f, null);
124
124
  }
125
125
  export {
126
- M as DEFAULT_MESSAGES,
127
- T as DEFAULT_THEME,
128
- Z as MACH_REPORT_CONFIG_KEY,
126
+ y as DEFAULT_MESSAGES,
127
+ C as DEFAULT_THEME,
128
+ B as MACH_REPORT_CONFIG_KEY,
129
129
  f as MACH_REPORT_CONTROLLER_KEY,
130
- $ as MACH_REPORT_FETCHER_KEY,
131
- B as MACH_REPORT_PDF_EXPORTER_KEY,
130
+ J as MACH_REPORT_FETCHER_KEY,
131
+ Q as MACH_REPORT_PDF_EXPORTER_KEY,
132
132
  c as MachReportError,
133
- J as MachReportPreview,
133
+ ee as MachReportPreview,
134
134
  i as PlanLoadError,
135
- O as ReportParamPanel,
136
- v as ReportPreview,
137
- F as ReportToolbar,
138
- A as SILENT_LOGGER,
139
- D as buildPrintDocument,
140
- b as buildWordHtml,
141
- L as createDefaultPdfExporter,
142
- S as createFetchRequest,
135
+ M as REPORT_EXPORT_FORMATS,
136
+ v as REPORT_PREVIEW_TOOLS,
137
+ F as ReportParamPanel,
138
+ A as ReportPreview,
139
+ D as ReportToolbar,
140
+ S as SILENT_LOGGER,
141
+ b as buildPrintDocument,
142
+ L as buildWordHtml,
143
+ I as createDefaultPdfExporter,
144
+ j as createFetchRequest,
143
145
  h as createLocalFetcher,
144
- j as defineMachReportConfig,
145
- H as defineMachReportPreset,
146
- I as joinReportIds,
147
- Q as machReportPlugin,
148
- k as normalizeReportIds,
149
- W as printPlans,
150
- Y as provideMachReportConfig,
151
- z as resolveConfig,
152
- G as themeToCssVars,
153
- K as toErrorDetail,
146
+ H as defineMachReportConfig,
147
+ W as defineMachReportPreset,
148
+ k as joinReportIds,
149
+ te as machReportPlugin,
150
+ Y as normalizeReportIds,
151
+ z as printPlans,
152
+ G as provideMachReportConfig,
153
+ K as resolveConfig,
154
+ U as themeToCssVars,
155
+ N as toErrorDetail,
154
156
  w as useMachReport,
155
- U as useMachReportConfig,
156
- N as usePageWindow,
157
- q as usePrintExport,
158
- x as useReportPreview,
159
- V as useZoom
157
+ q as useMachReportConfig,
158
+ V as usePageWindow,
159
+ X as usePrintExport,
160
+ T as useReportPreview,
161
+ Z as useZoom
160
162
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agile-team/mach-report",
3
- "version": "2.4.1",
3
+ "version": "2.5.0",
4
4
  "description": "独立的 TypeScript 报表引擎:模板分页、DOM/Canvas/PDF/Excel 输出与 Vue 3 预览组件",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -1,6 +0,0 @@
1
- "use strict";var Zt=Object.create;var pt=Object.defineProperty;var Xt=Object.getOwnPropertyDescriptor;var Qt=Object.getOwnPropertyNames;var _t=Object.getPrototypeOf,en=Object.prototype.hasOwnProperty;var tn=(t,n,l,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of Qt(n))!en.call(t,r)&&r!==l&&pt(t,r,{get:()=>n[r],enumerable:!(o=Xt(n,r))||o.enumerable});return t};var Ge=(t,n,l)=>(l=t!=null?Zt(_t(t)):{},tn(n||!t||!t.__esModule?pt(l,"default",{value:t,enumerable:!0}):l,t));const e=require("vue"),j=require("@agile-team/mach-report"),gt=require("./page-window-index-DEjnM6IB.cjs"),ht=require("./render-plan-CCTL4F9v.cjs"),fe=require("./plugin-DwKr8oF6.cjs");function Xe(t){return t==null?[]:Array.isArray(t)?t.map(String).filter(n=>n!==""):String(t).split(",").map(n=>n.trim()).filter(n=>n!=="")}function nn(t){return Xe(t).join(",")}class Be extends Error{constructor(n){super(n),this.name="PlanLoadError"}}function rn(t={}){const{baseUrl:n="",headers:l,credentials:o,timeoutMs:r=3e4}=t,a=n.replace(/\/+$/,"");return async({url:s,method:d,params:v,signal:y})=>{let p=`${a}${s}`;if(v&&Object.keys(v).length>0){const w=p.indexOf("#"),B=w>=0?p.slice(w):"",P=w>=0?p.slice(0,w):p,R=P.indexOf("?"),C=R>=0?P.slice(0,R):P,S=new URLSearchParams(R>=0?P.slice(R+1):"");for(const[N,L]of Object.entries(v))S.set(N,L);p=`${C}?${S}${B}`}const m=(w,B)=>{const P=new Be(w);return Object.defineProperty(P,"cause",{value:B,configurable:!0,writable:!0}),P};if(y?.aborted)throw m(`请求已取消: ${s}`,y.reason);const b=new AbortController;let u;const E=()=>{b.signal.aborted||(u="external",b.abort(y?.reason))};y?.addEventListener("abort",E,{once:!0});const k=setTimeout(()=>{b.signal.aborted||(u="timeout",b.abort())},r);try{const w=await fetch(p,{method:d.toUpperCase(),headers:{Accept:"application/json",...l},credentials:o,signal:b.signal});if(!w.ok)throw new Be(`HTTP ${w.status} ${s}`);return await w.json()}catch(w){throw u==="timeout"?m(`请求超时(${r}ms): ${s}`,w):u==="external"?m(`请求已取消: ${s}`,w):w instanceof Be?w:m(`请求失败(${s}): ${w instanceof Error?w.message:String(w)}`,w)}finally{clearTimeout(k),y?.removeEventListener("abort",E)}}}function bt(t,n,l={}){const o=l.pxPerMm??3.7795275590551185,r=e.computed(()=>Math.max(0,e.unref(l.gapPx)??18)),a=e.ref(0),s=e.ref(800),d=e.computed(()=>{const w=t.value?.pages??[];return gt.createPageWindowIndex(w.map(B=>B.pageHeightMm*o),r.value)}),v=e.computed(()=>{let w=0;for(const B of t.value?.pages??[])w=Math.max(w,B.pageWidthMm*o);return{w,h:d.value.totalHeightPx}}),y=e.computed(()=>d.value.window(s.value/n.value,a.value/n.value,e.unref(l.overscan)??1)),p=e.computed(()=>{const w=t.value;if(!w)return[];const{start:B,end:P}=y.value;return w.pages.slice(B,P+1).map((R,C)=>({page:R,index:B+C}))});let m=0,b=!1;function u(w){w&&(a.value=w.scrollTop,s.value=w.clientHeight||800)}function E(w,B){return P=>{m||b||(m=requestAnimationFrame(()=>{if(m=0,b||(u(P),B.value<=0))return;const R=Math.max(0,P.scrollTop+32)/n.value;w.value=Math.min(B.value,d.value.pageAt(R)+1)}))}}function k(){b=!0,m&&cancelAnimationFrame(m),m=0}return e.onScopeDispose(k),{contentSize:v,windowRange:y,visiblePages:p,makeScrollHandler:E,refreshViewport:u,pageOffsetPx:w=>d.value.offsetAt(w),destroy:k}}function yt(t){const n=e.ref(1),l=e.ref("fit");let o=0;function r(){o&&cancelAnimationFrame(o),o=0}function a(){r(),o=requestAnimationFrame(()=>{if(o=0,l.value!=="fit")return;const d=t();!d?.viewport||d.viewport.clientWidth<=48||!Number.isFinite(d.pageWidthPx)||(n.value=Math.min(1,(d.viewport.clientWidth-48)/Math.max(1,d.pageWidthPx)))})}function s(d){if(d==="fit")l.value="fit",a();else{if(!Number.isFinite(d))return;r(),l.value="raw",n.value=Math.min(3,Math.max(.3,d/100))}}return e.getCurrentScope()&&e.onScopeDispose(r),{zoom:n,zoomMode:l,applyFitZoom:a,setZoom:s}}const Me=8;function Fe(){return new Promise(t=>setTimeout(t,0))}function Se(t){return`p${t.pageWidthMm}x${t.pageHeightMm}`.replace(/[.+]/g,"_")}function Qe(t){const n=new Map;return t.pages.forEach(r=>{n.has(Se(r))||n.set(Se(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 ${Se(r)}{size:${r.pageWidthMm}mm ${r.pageHeightMm}mm;margin:0;}`).join(`
5
- `)}
6
- body{margin:0;background:#fff;}`}</style></head><body>`}function _e(t){const n=j.renderPage(t,96,{},document);return n.style.page=Se(t),n.outerHTML}function et(t){return{head:Qe(t),pageChunks:t.pages.map(_e)}}async function on(t,n={}){const l={schemaVersion:"mach-report-batch-print",pages:t.flatMap(s=>s.pages)};if(l.pages.length===0)return;const o=Qe(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 a=!1;try{const s=r.contentDocument;s.open(),s.write(o);for(let d=0;d<l.pages.length;d++)s.write(_e(l.pages[d])),d%Me===Me-1&&(n.onProgress?.(d+1,l.pages.length),await Fe());s.write("</body></html>"),s.close(),await Fe(),n.onProgress?.(l.pages.length,l.pages.length),a=!0,r.contentWindow?.focus(),r.contentWindow?.print()}catch(s){n.onError?.(s instanceof Error?`批量打印失败: ${s.message}`:"批量打印失败")}finally{a?setTimeout(()=>r.remove(),6e4):r.remove()}}function wt(t){const{head:n,pageChunks:l}=et(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 xt(t,n){let l=null,o=!1,r=!1,a=0;const s=new Map,d=new Map;let v=null,y=null,p=null,m=null,b=null;function u(c,f){return!r&&t.value===c&&a===f}function E(){if(r)return;const c=[...s.values()].reverse().find(f=>u(f.plan,f.epoch))?.format??null;c!==v&&(v=c,n.onBusy?.(c))}function k(c,f,x){const $={};return s.set($,{plan:c,epoch:f,format:x}),E(),$}function w(c){s.delete(c),E()}function B(){for(const[c,f]of d)u(f.plan,f.epoch)||(c.close(),d.delete(c))}function P(){a++,C(),E(),B()}const R=e.watch(t,P,{flush:"sync"});function C(){l?.remove(),l=null}function S(){r=!0,a++,R(),C(),B(),s.clear(),n.onPrinting?.(!1)}function N(c,f){const x=URL.createObjectURL(c);setTimeout(()=>URL.revokeObjectURL(x),1e4);const $=document.createElement("a");$.href=x,$.download=f,$.click()}async function L(){if(o)return;const c=t.value;if(r||!c||c.pages.length===0)return;const f=a;o=!0,n.onPrinting?.(!0),C();const x=Qe(c);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 $=l;try{const M=$.contentDocument;M.open(),M.write(x);for(let z=0;z<c.pages.length;z++)if(M.write(_e(c.pages[z])),z%Me===Me-1&&await Fe(),$!==l)return;if(M.write("</body></html>"),M.close(),await Fe(),!u(c,f)||$!==l)return;$.contentWindow?.focus(),$.contentWindow?.print()}catch{$===l&&C(),u(c,f)&&n.onError("调用打印失败,请改用导出 PDF","print")}finally{o=!1,r||n.onPrinting?.(!1)}}function U(c,f){if(y?.plan===c&&y.epoch===f)return y.promise;const x=Promise.resolve().then(()=>{if(!u(c,f))throw new Error("报表已切换或卸载");return n.getPdfExporter()(c,$=>{u(c,f)&&n.onWarning?.($)})}).finally(()=>{y?.promise===x&&(y=null)});return y={plan:c,epoch:f,promise:x},x}async function K(){const c=t.value;if(r||!c||c.pages.length===0)return;const f=a;if(p?.plan===c&&p.epoch===f)return p.promise;const x=k(c,f,"PDF"),$=(async()=>{try{const M=await U(c,f);if(!u(c,f))return;N(new Blob([M],{type:"application/pdf"}),"mach-report.pdf")}catch(M){u(c,f)&&n.onError(M instanceof Error?`PDF 导出失败: ${M.message}`:"PDF 导出失败","pdf")}finally{w(x),p?.token===x&&(p=null)}})();return p={plan:c,epoch:f,promise:$,token:x},$}async function W(){const c=t.value;if(r||!c||c.pages.length===0)return;const f=a;if(m?.plan===c&&m.epoch===f)return m.promise;const x={...n.getXlsxOptions?.()},$=k(c,f,"Excel"),M=(async()=>{try{const{renderPlanToXlsx:z}=await import("@agile-team/mach-report/xlsx");if(!u(c,f))return;const{buffer:G,warnings:Q}=await z(c,x);if(!u(c,f)||(Q.length>0&&n.onWarning?.(`Excel 导出有 ${Q.length} 条提示:${Q.slice(0,2).join(";")}`),!u(c,f)))return;N(new Blob([G],{type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}),"mach-report.xlsx")}catch(z){u(c,f)&&n.onError(z instanceof Error?`Excel 导出失败: ${z.message}`:"Excel 导出失败","export")}finally{w($),m?.token===$&&(m=null)}})();return m={plan:c,epoch:f,promise:M,token:$},M}async function ee(){const c=t.value;if(r||!c||c.pages.length===0)return;const f=a;if(b?.plan===c&&b.epoch===f)return b.promise;const x=k(c,f,"图片"),$=(async()=>{try{const{blobs:M}=await j.renderPlanToImages(c,{dpr:Math.min(2,typeof devicePixelRatio=="number"?devicePixelRatio:1)});if(!u(c,f))return;M.forEach((z,G)=>{N(z,M.length>1?`mach-report-page-${G+1}.png`:"mach-report.png")})}catch(M){u(c,f)&&n.onError(M instanceof Error?`图片导出失败: ${M.message}`:"图片导出失败","export")}finally{w(x),b?.token===x&&(b=null)}})();return b={plan:c,epoch:f,promise:$,token:x},$}function O(){const c=t.value;if(!(r||!c||c.pages.length===0))try{const{html:f,filename:x}=wt(c);N(new Blob([f],{type:"application/msword;charset=utf-8"}),x)}catch(f){n.onError(f instanceof Error?`Word 导出失败: ${f.message}`:"Word 导出失败","export")}}async function ae(c){const f=t.value;if(!(r||!f||f.pages.length===0)){if(c==="pdf"){await K();return}if(c==="xlsx"||c==="excel"){await W();return}if(c==="png"||c==="image"){await ee();return}if(c==="word"||c==="doc"){O();return}if(c!=="html"){n.onError(`不支持的导出格式:${c}`,"export");return}try{const{head:x,pageChunks:$}=et(f),M=`${x}${$.join("")}</body></html>`;N(new Blob([M],{type:"text/html;charset=utf-8"}),"mach-report.html")}catch(x){n.onError(x instanceof Error?`HTML 导出失败: ${x.message}`:"HTML 导出失败","export")}}}function H(){const c=t.value;if(r||!c||c.pages.length===0)return;const f=a,x=window.open("","_blank");if(!x){n.onError("浏览器拦截了弹窗,请允许弹窗后重试","pdf");return}d.set(x,{plan:c,epoch:f});const $=k(c,f,"PDF");U(c,f).then(M=>{if(!u(c,f)||x.closed){d.delete(x)&&x.close();return}const z=URL.createObjectURL(new Blob([M],{type:"application/pdf"}));setTimeout(()=>URL.revokeObjectURL(z),6e4);const G=x.document;G.title="PDF 预览",G.documentElement.style.height="100%",G.body.style.cssText="margin:0;height:100%;";const Q=G.createElement("iframe");Q.title="PDF 预览",Q.style.cssText="display:block;width:100%;height:100%;border:0;",Q.src=z,G.body.replaceChildren(Q),d.delete(x)}).catch(M=>{x.close(),d.delete(x),u(c,f)&&n.onError(M instanceof Error?`PDF 预览失败: ${M.message}`:"PDF 预览失败","pdf")}).finally(()=>w($))}return{print:L,exportAs:ae,exportImages:ee,exportWord:O,openPdfWindow:H,invalidatePending:P,releasePrintFrame:C,dispose:S}}const Et="mrp-hit";function an(t){t.querySelectorAll(`mark.${Et}`).forEach(l=>{const o=l.parentNode;if(o){for(;l.firstChild;)o.insertBefore(l.firstChild,l);l.remove(),o.normalize()}})}function ln(t,n){const l=n.trim();if(!l)return 0;const o=l.toLowerCase(),r=document.createTreeWalker(t,NodeFilter.SHOW_TEXT,{acceptNode(d){const v=d.parentElement;return!v||v.closest("mark")||/^(SCRIPT|STYLE)$/.test(v.tagName)?NodeFilter.FILTER_REJECT:(d.nodeValue??"").toLowerCase().includes(o)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT}}),a=[];for(let d=r.nextNode();d;d=r.nextNode())a.push(d);let s=0;for(const d of a){const v=d.nodeValue??"",y=v.toLowerCase(),p=d.parentElement;if(!p)continue;const m=document.createDocumentFragment();let b=0,u=y.indexOf(o);for(;u>=0;){u>b&&m.appendChild(document.createTextNode(v.slice(b,u)));const E=document.createElement("mark");E.className=Et,E.textContent=v.slice(u,u+l.length),m.appendChild(E),s++,b=u+l.length,u=y.indexOf(o,b)}b<v.length&&m.appendChild(document.createTextNode(v.slice(b))),p.replaceChild(m,d)}return s}const sn=new Set(["line","rect","ellipse","chart"]);function*un(t){for(const n of t.cells??[])for(const l of n??[])yield l?.text??"",yield*l?.children??[]}function*cn(t){if(ht.isRichText(t))for(const n of t.richParagraphs)for(const l of n.segments??[])yield(l.kind==="field"?l.field:l.text)??"";else t.lines?.length?yield*t.lines:yield t.text??""}function*dn(t){const n=[t.values()];for(;n.length>0;){const l=n[n.length-1].next();if(l.done){n.pop();continue}const o=l.value;if(typeof o=="string"){yield o;continue}yield"",!ht.isImageBackedComponent(o)&&(o.kind==="text"?n.push(cn(o)):o.grid?n.push(un(o.grid)):sn.has(o.kind)||(yield o.fallbackText??""))}}function*fn(t){for(let n=0;n<t.pages.length;n++){for(const l of dn(t.pages[n].components))yield{text:l,pageIndex:n};yield{text:"",pageIndex:n}}}function pn(t,n){const l=t.toLowerCase();let o=0;for(let r=l.indexOf(n);r>=0;r=l.indexOf(n,r+n.length))o++;return o}function mn(t){const{plan:n,gotoPage:l,highlight:o,clearHighlights:r}=t,a=e.ref(!1),s=e.ref(""),d=e.ref(0),v=e.ref(0),y=e.ref(!1);let p=[];const m=e.computed(()=>{if(v.value===0)return null;const C=d.value;let S=0,N=p.length-1;for(;S<N;){const U=S+N>>>1;p[U].cumulative<=C?S=U+1:N=U}const L=p[S];return L?{pageIndex:L.pageIndex,occurrence:C-(p[S-1]?.cumulative??0)}:null});let b=null,u=null,E=0;function k(){E++,b&&clearTimeout(b),u&&clearTimeout(u),b=u=null,y.value=!1}function w(C){s.value=C,d.value=0,v.value=0,p=[],y.value=!1;const S=C.trim().toLowerCase(),N=n.value;if(!S||!N)return;y.value=!0;const L=E,U=fn(N),K=[];let W=0;function ee(){if(u=null,L!==E||N!==n.value)return;const O=performance.now();let ae=0;for(;ae<5e3&&performance.now()-O<4;){const H=U.next();if(H.done){p=K,v.value=W,y.value=!1,p[0]&&l(p[0].pageIndex+1);return}const c=pn(H.value.text,S);if(c>0){W+=c;const f=K[K.length-1];f?.pageIndex===H.value.pageIndex?f.cumulative=W:K.push({pageIndex:H.value.pageIndex,cumulative:W})}ae++}u=setTimeout(ee,0)}ee()}function B(C){if(k(),s.value=C,d.value=v.value=0,p=[],!C.trim()){w("");return}y.value=!0,b=setTimeout(()=>{b=null,w(C)},Math.max(0,e.unref(t.debounceMs)??200))}function P(C){const S=v.value;if(S===0||y.value)return;d.value=(d.value+C+S)%S;const N=m.value;N&&l(N.pageIndex+1)}function R(){k(),s.value="",d.value=v.value=0,p=[]}return e.watch(n,R,{flush:"sync"}),e.onScopeDispose(R),{visible:a,query:s,matchIndex:d,matchCount:v,activeMatch:m,searching:y,toggle:()=>{a.value=!a.value},onInput:B,onNav:P,apply:C=>{s.value.trim()&&o(C,s.value.trim())},clear:C=>{r(C)},reset:R}}function vn(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}}),o=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:o.value});return{enabled:l,debugStats:r}}function gn(t,n){const{thumbsRoot:l,visible:o,renderThumbCanvas:r}=n,a=e.ref(0),s=e.ref(800),d=e.computed(()=>(t.value?.pages??[]).map(P=>Math.round(P.pageHeightMm/P.pageWidthMm*116))),v=e.computed(()=>gt.createPageWindowIndex(d.value.map(P=>P+20),8)),y=e.computed(()=>v.value.window(s.value,a.value,1)),p=e.computed(()=>{if(!o.value)return[];const{start:P,end:R}=y.value;return d.value.slice(P,R+1).map((C,S)=>({index:P+S,height:C}))});let m=0,b=0,u=!1;function E(){const P=l.value;P&&(a.value=P.scrollTop,s.value=P.clientHeight||800)}function k(){u||b||(b=requestAnimationFrame(()=>{b=0,E()}))}function w(){if(p.value,m&&cancelAnimationFrame(m),m=0,u||!o.value||!t.value||!l.value)return;E();const P=p.value,R=t.value,C=l.value;let S=0;function N(){if(m=0,!(u||!o.value||t.value!==R||l.value!==C)){for(let L=0;S<P.length&&L<2;L++,S++){const U=P[S].index,K=C.querySelector(`[data-thumb="${U+1}"]`);if(!K||K.childElementCount>0)continue;const W=r(U);W&&(W.style.width="100%",W.style.height="100%",W.style.display="block",K.appendChild(W))}S<P.length&&(m=requestAnimationFrame(N))}}m=requestAnimationFrame(N)}function B(){u=!0,m&&cancelAnimationFrame(m),b&&cancelAnimationFrame(b),m=b=0}return e.onScopeDispose(B),{schedule:w,destroy:B,onScroll:k,windowRange:y,visibleThumbs:p}}function hn(){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 bn={class:"mrp-toolbar"},yn={class:"mrp-title"},wn=["disabled"],xn={class:"mrp-pageinfo"},En=["disabled"],Pn=["disabled"],kn={key:2,class:"mrp-search"},Cn=["placeholder","value"],$n={key:0,class:"mrp-search-count",role:"status"},Bn=["disabled"],Sn=["disabled"],Rn=["disabled"],Mn=["disabled"],Fn=["disabled"],Dn=["disabled"],Tn=["disabled"],Nn=["disabled"],In=["disabled"],Vn=e.defineComponent({__name:"ReportToolbar",props:{pageCount:{},currentPage:{},zoomMode:{},zoom:{},showExport:{type:Boolean},showPrint:{type:Boolean},showPdfWindow:{type:Boolean},messages:{},search:{},thumbsVisible:{type:Boolean},showImport:{type:Boolean},busy:{type:Boolean}},emits:["goto","zoom","export","print","pdf-window","search-input","search-nav","search-toggle","thumbs-toggle","import-excel"],setup(t){const n=t,l=e.ref(null);e.watch(()=>n.search.visible,r=>{r&&e.nextTick(()=>l.value?.focus())});function o(r,a,s){return r.replace("{cur}",String(a)).replace("{total}",String(s))}return(r,a)=>(e.openBlock(),e.createElementBlock("div",bn,[e.createElementVNode("span",yn,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:a[0]||(a[0]=s=>r.$emit("goto",t.currentPage-1))},e.toDisplayString(t.messages.prevPage),9,wn),e.createElementVNode("span",xn,e.toDisplayString(o(t.messages.pageInfo,t.currentPage,t.pageCount)),1),e.createElementVNode("button",{class:"mrp-nav",type:"button",disabled:t.currentPage>=t.pageCount,onClick:a[1]||(a[1]=s=>r.$emit("goto",t.currentPage+1))},e.toDisplayString(t.messages.nextPage),9,En)],64)):e.createCommentVNode("",!0),a[18]||(a[18]=e.createElementVNode("span",{class:"mrp-spacer"},null,-1)),t.showImport?(e.openBlock(),e.createElementBlock("button",{key:1,class:"mrp-nav mrp-import-excel",type:"button",disabled:t.busy,onClick:a[2]||(a[2]=s=>r.$emit("import-excel"))},e.toDisplayString(t.messages.importExcel??"导入 Excel 模板"),9,Pn)):e.createCommentVNode("",!0),t.search.visible?(e.openBlock(),e.createElementBlock("div",kn,[e.createElementVNode("input",{ref_key:"searchInputRef",ref:l,class:"mrp-search-input",type:"text",placeholder:t.messages.searchPlaceholder,value:t.search.query,onInput:a[3]||(a[3]=s=>r.$emit("search-input",s.target.value))},null,40,Cn),t.search.query?(e.openBlock(),e.createElementBlock("span",$n,e.toDisplayString(t.search.searching?t.messages.searching??"搜索中…":o(t.messages.matchInfo,t.search.matchCount>0?t.search.matchIndex+1:0,t.search.matchCount)),1)):e.createCommentVNode("",!0),e.createElementVNode("button",{class:"mrp-nav",type:"button",disabled:t.search.matchCount===0,onClick:a[4]||(a[4]=s=>r.$emit("search-nav",-1))},e.toDisplayString(t.messages.prevMatch),9,Bn),e.createElementVNode("button",{class:"mrp-nav",type:"button",disabled:t.search.matchCount===0,onClick:a[5]||(a[5]=s=>r.$emit("search-nav",1))},e.toDisplayString(t.messages.nextMatch),9,Sn)])):e.createCommentVNode("",!0),e.createElementVNode("button",{class:e.normalizeClass(["mrp-nav",{"mrp-active":t.search.visible}]),type:"button",title:"Ctrl+F",onClick:a[6]||(a[6]=s=>r.$emit("search-toggle"))}," 🔍 ",2),e.createElementVNode("button",{class:e.normalizeClass(["mrp-nav",{"mrp-active":t.thumbsVisible}]),type:"button",onClick:a[7]||(a[7]=s=>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:a[8]||(a[8]=s=>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:a[9]||(a[9]=s=>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:a[10]||(a[10]=s=>r.$emit("zoom",150))}," 150% ",2),t.showExport?(e.openBlock(),e.createElementBlock("button",{key:3,class:"mrp-nav",type:"button",disabled:t.busy,onClick:a[11]||(a[11]=s=>r.$emit("export","html"))},e.toDisplayString(t.messages.exportHtml),9,Rn)):e.createCommentVNode("",!0),t.showExport?(e.openBlock(),e.createElementBlock("button",{key:4,class:"mrp-nav",type:"button",disabled:t.busy,onClick:a[12]||(a[12]=s=>r.$emit("export","pdf"))},e.toDisplayString(t.messages.exportPdf),9,Mn)):e.createCommentVNode("",!0),t.showExport?(e.openBlock(),e.createElementBlock("button",{key:5,class:"mrp-nav",type:"button",disabled:t.busy,onClick:a[13]||(a[13]=s=>r.$emit("export","xlsx"))},e.toDisplayString(t.messages.exportExcel),9,Fn)):e.createCommentVNode("",!0),t.showExport?(e.openBlock(),e.createElementBlock("button",{key:6,class:"mrp-nav",type:"button",disabled:t.busy,onClick:a[14]||(a[14]=s=>r.$emit("export","png"))},e.toDisplayString(t.messages.exportImage),9,Dn)):e.createCommentVNode("",!0),t.showExport?(e.openBlock(),e.createElementBlock("button",{key:7,class:"mrp-nav",type:"button",disabled:t.busy,onClick:a[15]||(a[15]=s=>r.$emit("export","word"))},e.toDisplayString(t.messages.exportWord),9,Tn)):e.createCommentVNode("",!0),t.showPrint?(e.openBlock(),e.createElementBlock("button",{key:8,class:"mrp-nav",type:"button",disabled:t.busy,onClick:a[16]||(a[16]=s=>r.$emit("print"))},e.toDisplayString(t.messages.print),9,Nn)):e.createCommentVNode("",!0),t.showPdfWindow?(e.openBlock(),e.createElementBlock("button",{key:9,class:"mrp-nav",type:"button",disabled:t.busy,onClick:a[17]||(a[17]=s=>r.$emit("pdf-window"))},e.toDisplayString(t.messages.pdfWindow),9,In)):e.createCommentVNode("",!0)]))}}),tt=(t,n)=>{const l=t.__vccOpts||t;for(const[o,r]of n)l[o]=r;return l},Pt=tt(Vn,[["__scopeId","data-v-1c2568a7"]]),On={class:"mrp-params"},zn={class:"mrp-params-title"},Ln={class:"mrp-params-grid"},Wn={class:"mrp-param-label"},An={key:0,class:"mrp-param-star"},Hn=["value","onChange"],qn={value:"",disabled:"",hidden:""},jn=["value"],Un=["type","placeholder","value","onInput"],Kn={class:"mrp-params-actions"},Gn=e.defineComponent({__name:"ReportParamPanel",props:{defs:{},modelValue:{},messages:{},attempted:{type:Boolean}},emits:["update:modelValue","query","reset"],setup(t,{emit:n}){const l=t,o=n,r=e.ref({...l.modelValue});e.watch(()=>l.modelValue,v=>{r.value={...v}});const a=e.computed(()=>l.defs.map(v=>({def:v,label:v.label??v.field,value:r.value[v.field]??""})));function s(v,y){r.value={...r.value,[v]:y},o("update:modelValue",{...r.value})}function d(v){const y=l.defs.find(p=>p.field===v);return l.attempted&&y?.required===!0&&!(r.value[v]??"").trim()}return(v,y)=>(e.openBlock(),e.createElementBlock("div",On,[e.createElementVNode("span",zn,e.toDisplayString(t.messages.paramsTitle),1),e.createElementVNode("div",Ln,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,p=>(e.openBlock(),e.createElementBlock("label",{key:p.def.field,class:e.normalizeClass(["mrp-param",{"mrp-param-missing":d(p.def.field)}])},[e.createElementVNode("span",Wn,[e.createTextVNode(e.toDisplayString(p.label),1),p.def.required?(e.openBlock(),e.createElementBlock("i",An,"*")):e.createCommentVNode("",!0)]),(p.def.type??"text")==="select"?(e.openBlock(),e.createElementBlock("select",{key:0,class:"mrp-param-input",value:p.value,onChange:m=>s(p.def.field,m.target.value),onKeydown:y[0]||(y[0]=e.withKeys(m=>v.$emit("query"),["enter"]))},[e.createElementVNode("option",qn,e.toDisplayString(p.def.placeholder??`请选择${p.label}`),1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.def.options??[],m=>(e.openBlock(),e.createElementBlock("option",{key:m.value,value:m.value},e.toDisplayString(m.label),9,jn))),128))],40,Hn)):(e.openBlock(),e.createElementBlock("input",{key:1,class:"mrp-param-input",type:p.def.type==="number"?"number":p.def.type==="date"?"date":"text",placeholder:p.def.placeholder??`请输入${p.label}`,value:p.value,onInput:m=>s(p.def.field,m.target.value),onKeydown:y[1]||(y[1]=e.withKeys(m=>v.$emit("query"),["enter"]))},null,40,Un))],2))),128))]),e.createElementVNode("div",Kn,[e.createElementVNode("button",{class:"mrp-nav mrp-param-query",type:"button",onClick:y[2]||(y[2]=p=>v.$emit("query"))},e.toDisplayString(t.messages.query),1),e.createElementVNode("button",{class:"mrp-nav",type:"button",onClick:y[3]||(y[3]=p=>v.$emit("reset"))},e.toDisplayString(t.messages.reset),1)])]))}}),kt=tt(Gn,[["__scopeId","data-v-aafce92d"]]),Ct={title:"报表预览",prevPage:"‹ 上一页",nextPage:"下一页 ›",pageInfo:"{cur} / {total}",fitWidth:"适宽",exportHtml:"导出 HTML",exportPdf:"导出 PDF",exportExcel:"导出 Excel",exportImage:"导出图片",exportWord:"导出 Word",exporting:"正在生成 {format}…",print:"打印",pdfWindow:"PDF 窗口",loading:"报表渲染中…",empty:"暂无预览数据",errorPrefix:"",retry:"重试",pdfFontUnavailable:"PDF 字体尚未就绪,请联系管理员检查字体配置;预览及其它导出仍可使用。",searchPlaceholder:"搜索报表内容",matchInfo:"{cur}/{total}",prevMatch:"‹",nextMatch:"›",thumbnails:"缩略图",paramsTitle:"查询条件",query:"查 询",reset:"重 置",paramRequired:"请填写{label}",searching:"搜索中…",importExcel:"导入 Excel 模板",importing:"正在导入 Excel…",editCell:"编辑单元格",editingHint:"双击单元格编辑 · Enter 确认 · Esc 取消",saving:"正在保存修改…",editInvalidNumber:"请输入有效数字;清空表示无值",editInvalidBoolean:"请输入 true / false、是 / 否或 1 / 0",editConflict:"该单元格已变化,请重新打开编辑"},$t={shellBg:"#525659",shellFg:"#e8e8e8",toolbarBg:"#323639",toolbarBorder:"#22252a",toolbarFg:"#e8e8e8",btnFg:"#cfcfcf",btnBorder:"#4a4d52",btnHoverBg:"#414549",btnHoverFg:"#ffffff",btnActiveBg:"#2d5fb8"};function Bt(t={}){return{...t,defaults:t.defaults??{},presets:t.presets??{}}}function Yn(t){return t}const ie={showExport:!0,showPrint:!0,showPdfWindow:!0,showParams:!0,gapPx:18,pdfFontUrl:"/simhei.ttf",logger:console},Jn={warn:()=>{},info:()=>{}};function Re(t,n){return{...t,...n,theme:{...t?.theme,...n?.theme},messages:{...t?.messages,...n?.messages},preview:{...t?.preview,...n?.preview},xlsx:{...t?.xlsx,...n?.xlsx}}}function St(t,n){const l=n?t?.presets?.[n]:t?.defaultPreset?t?.presets?.[t.defaultPreset]:void 0,o=Re(t?.defaults,l);return{showExport:o.showExport??ie.showExport,showPrint:o.showPrint??ie.showPrint,showPdfWindow:o.showPdfWindow??ie.showPdfWindow,showParams:o.showParams??ie.showParams,gapPx:o.gapPx??ie.gapPx,pdfFontUrl:o.pdfFontUrl??ie.pdfFontUrl,theme:{...$t,...o.theme},messages:{...Ct,...o.messages},logger:o.logger??ie.logger,preview:{overscanPages:mt(o.preview?.overscanPages,1,10,!0),searchDebounceMs:mt(o.preview?.searchDebounceMs,200,2e3)},xlsx:{...o.xlsx},editable:o.editable??!1,excelImport:o.excelImport??!1}}function mt(t,n,l,o=!1){if(t==null||!Number.isFinite(t))return n;const r=Math.max(0,Math.min(l,t));return o?Math.floor(r):r}function Rt(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 Zn(t){const n=e.inject(fe.MACH_REPORT_CONFIG_KEY,null),l=e.computed(()=>{const o=n?.value??null,r="defaults"in t||"presets"in t||"defaultPreset"in t?Bt(t):{defaults:t,presets:{}};if(!o)return r;const a={...o.presets,...r.presets};for(const s of Object.keys(a))a[s]=Re(Re(o.presets[s],r.defaults),r.presets[s]);return{defaults:Re(o.defaults,r.defaults),presets:a,defaultPreset:r.defaultPreset??o.defaultPreset}});e.provide(fe.MACH_REPORT_CONFIG_KEY,l)}function Mt(){return e.inject(fe.MACH_REPORT_CONFIG_KEY,e.computed(()=>null))}const vt=new Map,ce=new Map,Xn=15e3;function Ze(t,n){return Object.assign(new Error(t),{cause:n})}function ye(t,n){return`PDF 字体 ${JSON.stringify(t)}:${n}。请部署支持报表文字的字体文件,并将 pdfFontUrl 配置为可访问的字体 URL;西文报表可设为空串`}function De(t){if(t?.reason instanceof Error&&t.reason.name==="AbortError")return t.reason;const n=Ze("PDF 字体检查已取消",t?.reason);return n.name="AbortError",n}async function Qn(t,n){let l=!1;const o=setTimeout(()=>{l=!0,n.abort()},Xn);try{const r=await fetch(t,{method:"HEAD",signal:n.signal});if(n.signal.aborted)throw De(n.signal);if(r.status===405||r.status===501||r.type==="opaque")return{status:"unverified",fontUrl:t,message:`PDF 字体 ${JSON.stringify(t)} 无法通过 HEAD 检查验证;仍可尝试导出,届时会加载并校验字体`};if(!r.ok){const s=new Error(`字体请求返回 HTTP ${r.status}`);return{status:"error",fontUrl:t,message:ye(t,s.message),cause:s}}const a=r.headers.get("content-type")??"";if(/text\/html|application\/xhtml\+xml/i.test(a)){const s=new Error("字体 URL 返回 HTML 页面(可能是 SPA 路由回退),不是字体文件");return{status:"error",fontUrl:t,message:ye(t,s.message),cause:s}}if(/^text\//i.test(a)||/(?:\/|\+)json(?:\s*;|$)/i.test(a)){const s=new Error(`字体 URL 返回 ${a} 文本响应,不是字体文件`);return{status:"error",fontUrl:t,message:ye(t,s.message),cause:s}}return{status:"available",fontUrl:t,message:"PDF 字体资源可达;文字覆盖范围将在实际导出时校验"}}catch(r){if(n.signal.aborted&&!l)throw De(n.signal);return{status:"error",fontUrl:t,message:ye(t,l?"字体检查超时,请检查网络或字体服务":"字体检查失败,请检查网络、字体服务或跨域访问配置"),cause:r}}finally{clearTimeout(o)}}function _n(t,n){if(n?.aborted)return Promise.reject(De(n));if(!t)return Promise.resolve({status:"disabled",fontUrl:t,message:"已停用自定义 PDF 字体;内置字体用于西文,其他文字会在导出时校验"});const l=vt.get(t);if(l)return Promise.resolve(l);let o=ce.get(t);if(!o){const a=new AbortController;o={controller:a,promise:Qn(t,a),subscribers:0};const s=o;ce.set(t,s),s.promise=s.promise.then(d=>(!a.signal.aborted&&d.status==="available"&&vt.set(t,d),d)).finally(()=>{ce.get(t)===s&&ce.delete(t)})}const r=o;return r.subscribers++,new Promise((a,s)=>{let d=!1;const v=()=>d?!1:(d=!0,r.subscribers--,n?.removeEventListener("abort",y),!0),y=()=>{v()&&(r.subscribers===0&&(ce.get(t)===r&&ce.delete(t),r.controller.abort()),s(De(n)))};n?.addEventListener("abort",y,{once:!0}),r.promise.then(p=>{v()&&a(p)},p=>{v()&&s(p)}),n?.aborted&&y()})}function Ft(t={fontUrl:"/simhei.ttf"}){let n=null;const l=async(o,r)=>{n||(n=await import("@agile-team/mach-report/pdf"));let a=null;if(t.fontUrl)try{if(a=await n.loadFontWithCache(t.fontUrl,{strict:!0}),!a?.byteLength)throw new Error("字体文件为空或加载失败")}catch(m){const b=m instanceof Error?m.message:String(m);throw Ze(ye(t.fontUrl,b),m)}let s;try{s=await n.renderPlanToPdf(o,a?{customFontBytes:a}:{})}catch(m){if(!a)throw m;const b=m instanceof Error?m.message:String(m);throw Ze(`PDF 生成失败:${b}。当前字体 URL 为 ${JSON.stringify(t.fontUrl)};请确认该文件是有效字体,或重新配置 pdfFontUrl`,m)}const{bytes:d,unsupportedTextCount:v,pageErrors:y,fidelityWarnings:p}=s;if(v>0)throw new Error(`PDF 中有 ${v} 行文字无法编码;请部署支持所用文字的字体并配置 pdfFontUrl`);if(y.length>0)throw new Error(`PDF 有 ${y.length} 页渲染失败:${y[0]}`);return p.length>0&&r?.(`PDF 有 ${p.length} 处版式降级:${p.slice(0,2).join(";")}`),d};return l.checkFont=o=>_n(t.fontUrl,o),l}class re extends Error{constructor(n,l,o){super(l),this.name="MachReportError",this.code=n,this.cause=o}}function Dt(t){return t instanceof re?{code:t.code,cause:t.cause}:{code:"render",cause:t}}function de(t){return JSON.parse(JSON.stringify(t))}function er(t){const n=t.closest(".mrp-page-holder"),l=t.closest("[data-mr-component-index]");if(!n||!l)return null;const o={pageIndex:Number(n.dataset.page)-1,componentIndex:Number(l.dataset.mrComponentIndex),rowIndex:Number(t.dataset.mrRowIndex),columnIndex:Number(t.dataset.mrColumnIndex)};return Object.values(o).every(r=>Number.isInteger(r)&&r>=0)?o:null}function tr(t,n,l){const o=t.ownerDocument.createElement("textarea");return o.className="mrp-cell-editor",o.setAttribute("aria-label",n),o.value=l==null?"":String(l),o.style.cssText="position:absolute;inset:0;width:100%;height:100%;min-height:20px;box-sizing:border-box;z-index:10;resize:none;margin:0;padding:2px 4px;border:2px solid #2563eb;outline:none;background:#fff;color:#111;font:inherit;line-height:1.25;white-space:pre-wrap;",t.appendChild(o),o}function nr(t){const n=e.shallowRef(null),l=e.ref(!1),o=e.shallowRef([]);let r=null;function a(){const u=n.value;n.value=null,l.value=!1,r=null,u?.controller.abort(),u?.input.remove()}function s(){a(),o.value=[]}function d(u){return n.value===u&&!u.controller.signal.aborted&&t.plan.value===u.plan}function v(u){const E=t.options.value,k=j.getReportCellContext(u.plan,u.address);if(!(typeof E=="object"?E===u.options:E===!0)||!k?.editable||u.options.canEdit?.(k)===!1)throw new j.ReportCellEditError("readonly")}async function y(u){try{v(u);const E=j.createReportCellEdit(u.plan,u.address,u.input.value);if(Object.is(E.value,E.previousValue))return a(),!0;const k={signal:u.controller.signal},w=await u.options.validate?.(de(E),k);if(!d(u))return!1;if(w)throw new Error(w);if(v(u),await u.options.save?.(de(E),k),!d(u))return!1;v(u);const B=j.applyReportCellEdit(u.plan,E);return a(),o.value=[...o.value,E],t.plan.value=B,t.onChange(de(E)),!0}catch(E){return d(u)&&(t.onError(t.errorMessage?.(E)??(E instanceof Error?E.message:"单元格保存失败"),E),u.input.disabled=!1,u.input.setAttribute("aria-invalid","true"),u.input.focus()),!1}finally{n.value===u&&(l.value=!1)}}async function p(){if(r)return r;const u=n.value;if(!u)return!0;if(!d(u))return a(),!1;l.value=!0,u.input.disabled=!0;const E=y(u);r=E;const k=await E;return r===E&&(r=null),k}function m(u){u.stopPropagation(),!u.isComposing&&(u.key==="Escape"&&(u.preventDefault(),a()),u.key==="Enter"&&!u.shiftKey&&(u.preventDefault(),p()))}async function b(u){if(!t.options.value||t.blocked())return;const E=u.target;if(!(E instanceof Element)||E.closest(".mrp-cell-editor"))return;const k=E.closest("td[data-mr-row-index]");if(!k||!await p()||!k.isConnected)return;const w=t.plan.value,B=er(k);if(!w||!B||!t.options.value||t.blocked())return;const P=typeof t.options.value=="object"?t.options.value:{};try{const R=j.getReportCellContext(w,B);if(!R?.editable||P.canEdit?.(R)===!1)return;const C=tr(k,t.label(),R.value);n.value={plan:w,address:B,input:C,controller:new AbortController,options:P},C.addEventListener("keydown",m),C.addEventListener("blur",()=>{l.value||p()}),C.focus(),C.select()}catch(R){t.onError(R instanceof Error?R.message:"无法编辑单元格",R)}}return e.watch(t.options,(u,E)=>{(!u||u!==E)&&a()},{flush:"sync"}),e.watch(t.plan,()=>{n.value&&t.plan.value!==n.value.plan&&a()},{flush:"sync"}),e.onScopeDispose(s),{active:n,saving:l,changes:o,cancel:a,reset:s,commit:p,onDoubleClick:b,getChanges:()=>de(o.value)}}const rr={key:2,class:"mrp-edit-hint",role:"status"},or={key:4,class:"mrp-export-notice mrp-export-warning",role:"status"},ar={class:"mrp-main"},lr={key:0,class:"mrp-state"},sr={key:1,class:"mrp-state mrp-error"},ir={key:2,class:"mrp-state"},ur=["data-page"],cr=["onClick"],dr=["data-thumb"],fr={class:"mrp-thumb-no"},pr={class:"mrp-overlay"},mr={key:5,class:"mrp-debug","aria-hidden":"true"},$e=96/25.4,Ye="mach-report:ui",Je="mach-report:ui:wide",vr=e.defineComponent({__name:"ReportPreview",props:{reportId:{type:[String,Array],default:null},params:{type:Object,default:()=>({})},height:{type:String,default:"100vh"},autoLoad:{type:Boolean,default:!0},showExport:{type:Boolean,default:void 0},showPrint:{type:Boolean,default:void 0},showPdfWindow:{type:Boolean,default:void 0},gapPx:{type:Number,default:void 0},messages:{type:Object,default:void 0},preset:{type:String,default:void 0},debug:{type:Boolean,default:!1},paramDefs:{type:Array,default:void 0},showParams:{type:Boolean,default:void 0},editable:{type:[Boolean,Object],default:void 0},excelImport:{type:[Boolean,Object],default:void 0},fetcher:{type:Function,default:null}},emits:["loaded","error","warning","cell-edit","template-import"],setup(t,{expose:n,emit:l}){e.useCssVars(i=>({a2d6c888:N.value+"px"}));const o=t,r=l,a=e.shallowRef(null),s=e.ref(!1),d=e.ref(""),v=e.shallowRef(null),y=e.ref(null),p=e.ref(!1),m=e.shallowRef(Object.freeze({status:"unchecked",fontUrl:""})),b=e.ref(null),u=e.ref(1),E=e.ref(null),k=e.ref(null),w=e.ref(null),B=e.ref(!1),P=e.ref(!1),R=e.ref(null),C=hn(),S=e.computed(()=>!!a.value?.pages.length&&a.value.pages.every(i=>i.layout==="wide")),N=e.computed(()=>Math.max(0,G.value));let L=Ye;const U=e.inject(fe.MACH_REPORT_FETCHER_KEY,null),K=e.inject(fe.MACH_REPORT_PDF_EXPORTER_KEY,null),W=e.computed(()=>Xe(o.reportId)),ee=e.computed(()=>o.fetcher??U),O=e.computed(()=>a.value?.pages.length??0),ae=e.computed(()=>Object.freeze({loading:s.value,hasPlan:O.value>0,pageCount:O.value,currentPage:u.value,exporting:y.value,printing:p.value,canExport:!s.value&&!P.value&&!V.saving.value&&O.value>0&&y.value===null,canPrint:!s.value&&!P.value&&!V.saving.value&&O.value>0&&!p.value,error:v.value,pdfFont:m.value,editing:V.active.value!==null,saving:V.saving.value,importing:P.value,dirty:V.changes.value.length>0}));function H(i,g,h){v.value=Object.freeze({message:i,code:g,cause:h}),r("error",i,{code:g,cause:h})}const c=Mt(),f=e.computed(()=>St(c.value,o.preset)),x=e.computed(()=>({...f.value.messages,...o.messages})),$=e.computed(()=>o.showExport??f.value.showExport),M=e.computed(()=>o.showPrint??f.value.showPrint),z=e.computed(()=>o.showPdfWindow??f.value.showPdfWindow),G=e.computed(()=>o.gapPx??(S.value?0:f.value.gapPx)),Q=e.computed(()=>o.showParams??f.value.showParams),nt=e.computed(()=>o.editable??f.value.editable),we=e.computed(()=>o.excelImport??f.value.excelImport);function Nt(i){return i instanceof j.ReportCellEditError?{number:x.value.editInvalidNumber,boolean:x.value.editInvalidBoolean,conflict:x.value.editConflict}[i.code]??i.message:i instanceof Error?i.message:"单元格保存失败"}const V=nr({plan:a,options:nt,blocked:()=>s.value||P.value||y.value!==null||p.value,label:()=>x.value.editCell??"编辑单元格",errorMessage:Nt,onChange:i=>{v.value=null,b.value=null,r("cell-edit",i)},onError:(i,g)=>{b.value={kind:"error",message:i},H(i,"edit",g)}});let rt=null,Te=null;function ot(){if(K)return K;const i=f.value.pdfFontUrl;return(!Te||rt!==i)&&(rt=i,Te=Ft({fontUrl:i})),Te}let xe=0,pe=null,Ee=null,te=!1;function Ne(){xe++,pe?.abort(),pe=null}async function Pe(){if(te)throw new re("config","报表预览已卸载");Ne();const i=xe,g=new AbortController;pe=g;const h=f.value.pdfFontUrl;m.value=Object.freeze({status:"checking",fontUrl:h});try{const T=ot(),D=T.checkFont?await T.checkFont(g.signal):{status:"unverified",fontUrl:"",message:"自定义 PDF 导出器未提供字体预检查;字体由宿主确认"};return!te&&i===xe&&!g.signal.aborted&&(m.value=Object.freeze({...D})),D}catch(T){if(g.signal.aborted)throw T;const D={status:"error",fontUrl:h,message:T instanceof Error?T.message:"PDF 字体检查失败",cause:T};return!te&&i===xe&&(m.value=Object.freeze(D)),D}finally{pe===g&&(pe=null)}}function It(){Pe().catch(()=>{})}e.watch([a,()=>f.value.pdfFontUrl,$,z],()=>{const i=m.value.fontUrl===f.value.pdfFontUrl;i&&m.value.status==="available"||(Ne(),(!i||m.value.status==="checking")&&(m.value=Object.freeze({status:"unchecked",fontUrl:f.value.pdfFontUrl})),!te&&O.value>0&&($.value||z.value)&&Pe().catch(()=>{}))},{immediate:!0});const oe=e.computed(()=>o.paramDefs??ee.value?.getParamDefs?.(W.value)??[]),le=e.ref({}),Ie=e.ref(!1);function me(i){const g={};for(const h of i)g[h.field]=o.params[h.field]??h.defaultValue??"";le.value=g,Ie.value=!1}me(oe.value),e.watch(oe,i=>me(i)),e.watch(W,()=>me(oe.value)),e.watch(()=>JSON.stringify(o.params),()=>me(oe.value));const Vt=e.computed(()=>{const i={...o.params};for(const[g,h]of Object.entries(le.value))h===""?delete i[g]:i[g]=h;return i});function Ot(){return oe.value.filter(i=>i.required===!0&&!(le.value[i.field]??"").trim())}function zt(){Ie.value=!0;const i=Ot();if(i.length>0){const g=i[0].label??i[0].field,h=x.value.paramRequired.replace("{label}",g);d.value=h,H(h,"param");return}se()}function Lt(){me(oe.value)}const Wt=e.computed(()=>({height:o.height,...Rt(f.value.theme)})),{zoom:Y,zoomMode:ve,applyFitZoom:at,setZoom:ge}=yt(()=>({viewport:k.value,pageWidthPx:Ve.contentSize.value.w||210*$e})),Ve=bt(a,Y,{pxPerMm:$e,gapPx:G,overscan:e.computed(()=>f.value.preview.overscanPages)}),{contentSize:Oe,windowRange:he,visiblePages:lt,makeScrollHandler:At,refreshViewport:ze}=Ve,Ht=At(u,O);function Le(i){ge(i*100)}function ke(){P.value=!1,V.reset(),st(),a.value=null,u.value=1,I.reset()}let A=0,Z=null;async function se(){if(te)return;const i=++A;P.value=!1,Z?.abort(),Z=null;const g=ee.value;if(s.value=!1,v.value=null,W.value.length===0){d.value="缺少报表 ID",ke(),H(d.value,"param");return}if(!g){d.value="未提供渲染数据源 fetcher",ke(),H(d.value,"config");return}s.value=!0,d.value="",b.value=null,ke();const h=C.start(),T=new AbortController;Z=T;const D=new Set;function X(F){i!==A||T.signal.aborted||D.has(F)||(D.add(F),f.value.logger.warn("[mach-report] 报表告警:",F),r("warning",F))}try{const F=await g({reportIds:W.value,params:{...Vt.value},signal:T.signal,onWarning:X});if(i!==A)return;const q=j.validateRenderPlan(F);if(!q.ok){const Ce=q.errors.slice(0,3).map(ft=>`${ft.path}: ${ft.message}`).join("; ");throw new re("validate",`渲染计划校验失败(${q.errors.length} 处): ${Ce}`)}if(q.warnings.forEach(Ce=>X(`${Ce.path}: ${Ce.message}`)),i!==A||T.signal.aborted)return;a.value=F,u.value=1,C.end(h),k.value&&(k.value.scrollTop=0,k.value.scrollLeft=0);const J=S.value?Je:Ye;J!==L&&(L=J,Ke()),ve.value==="fit"&&at(),r("loaded",F.pages.length)}catch(F){if(i!==A)return;const q=F instanceof re?F:F instanceof j.ReportSourceError?new re(F.code,F.message,F.cause):new re("fetch",F instanceof Error?F.message:"预览加载失败",F);d.value=q.message;const J=Dt(q);H(q.message,J.code,J.cause)}finally{i===A&&(s.value=!1),Z===T&&(Z=null)}}function ne(i){if(te||O.value<=0)return;const g=Math.max(1,Math.min(O.value,i));u.value=g;const h=k.value;h&&(h.scrollTop=Ve.pageOffsetPx(g-1)*Y.value,ze(h))}const be=xt(a,{getPdfExporter:ot,getXlsxOptions:()=>f.value.xlsx,onError:(i,g)=>{b.value={kind:"error",message:i},H(i,g??"print")},onWarning:i=>{b.value={kind:"warning",message:i},r("warning",i)},onBusy:i=>{y.value=i,i?b.value={kind:"progress",message:x.value.exporting.replace("{format}",i)}:b.value?.kind==="progress"&&(b.value=null)},onPrinting:i=>{p.value=i}}),{releasePrintFrame:st,dispose:qt}=be;async function We(){s.value||P.value||V.active.value&&!await V.commit()||(v.value=null,await be.print())}async function Ae(i){s.value||P.value||V.active.value&&!await V.commit()||(v.value=null,await be.exportAs(i))}function He(){if(s.value||P.value||V.active.value){b.value={kind:"warning",message:x.value.editingHint??"请先确认单元格修改"};return}v.value=null,be.openPdfWindow()}async function it(i,g={}){te||(le.value={...le.value,...i},g.reload!==!1&&await se())}const jt={reload:se,print:We,exportAs:Ae,openPdfWindow:He,gotoPage:ne,setParams:it,checkPdfFont:Pe,importExcel:qe,getPlan:ut,getChanges:V.getChanges,get state(){return ae.value}};e.provide(fe.MACH_REPORT_CONTROLLER_KEY,jt);function ut(){return a.value?de(a.value):null}async function qe(i,g){if(te)throw new re("config","报表预览已卸载");const h=++A;Z?.abort(),Z=null,s.value=!1,V.cancel(),be.invalidatePending(),P.value=!0,v.value=null,b.value={kind:"progress",message:x.value.importing??"正在导入 Excel…"};try{const{importExcelTemplate:T}=await import("@agile-team/mach-report/xlsx");if(h!==A)return null;const D=typeof we.value=="object"?we.value:{},X=await T(i,{...D,...g,limits:{...D.limits,...g?.limits}});if(h!==A)return null;const F=j.paginateTemplate(de(X.template),{}).plan,q=j.validateRenderPlan(F);if(!q.ok)throw new Error(q.errors.map(J=>J.message).slice(0,3).join("; "));for(const J of X.warnings){if(h!==A)return null;r("warning",J)}return h!==A?null:(V.reset(),st(),I.reset(),a.value=F,u.value=1,d.value="",b.value=X.warnings.length?{kind:"warning",message:X.warnings.join(";")}:null,k.value&&(k.value.scrollTop=0,k.value.scrollLeft=0),L=S.value?Je:Ye,Ke(),r("template-import",X),h===A&&r("loaded",F.pages.length),X)}catch(T){if(h!==A)return null;const D=new re("import",T instanceof Error?T.message:"Excel 模板导入失败",T);throw b.value={kind:"error",message:D.message},H(D.message,"import",T),D}finally{h===A&&(P.value=!1)}}function Ut(i){const g=i.target,h=g.files?.[0];g.value="",h&&qe(h).catch(()=>{})}const I=mn({plan:a,gotoPage:ne,debounceMs:e.computed(()=>f.value.preview.searchDebounceMs),highlight:ln,clearHighlights:an});function Kt(i){i.ctrlKey&&(i.preventDefault(),Le(Y.value*(i.deltaY<0?1.1:1/1.1)))}function Gt(i){if(!(i.target instanceof Element&&i.target.closest("input,textarea,select,[contenteditable='true']"))){if((i.ctrlKey||i.metaKey)&&i.key.toLowerCase()==="f"){i.preventDefault(),I.visible.value||I.toggle();return}switch(i.key){case"PageDown":i.preventDefault(),ne(u.value+1);break;case"PageUp":i.preventDefault(),ne(u.value-1);break;case"Home":i.preventDefault(),ne(1);break;case"End":i.preventDefault(),ne(O.value);break;case"+":case"=":i.preventDefault(),Le(Y.value*1.1);break;case"-":i.preventDefault(),Le(Y.value/1.1);break}}}function Yt(){try{localStorage.setItem(L,JSON.stringify({zoomMode:ve.value==="fit"?"fit":Math.round(Y.value*100)}))}catch{}}e.watch([ve,Y],Yt);let je="";const ct=new WeakMap;function dt(i=!1){const g=I.activeMatch.value;if(!S.value||!g)return;const h=`${I.query.value}:${I.matchIndex.value}:${g.pageIndex}`;if(!i&&h===je)return;const D=E.value?.querySelector(`[data-page="${g.pageIndex+1}"]`)?.querySelectorAll("mark.mrp-hit")[g.occurrence];D&&(D.scrollIntoView?.({block:"nearest",inline:"nearest"}),je=h)}e.watchEffect(()=>{const i=a.value;if(!i)return;const g=I.activeMatch.value;I.matchIndex.value,g||(je=""),lt.value;const h=E.value;if(!h)return;h.querySelectorAll(".mrp-page-holder").forEach(D=>{const X=Number(D.dataset.page??0)-1,F=i.pages[X];if(!F||D.childElementCount>0&&ct.get(D)===F){if(D.firstElementChild){const J=D.firstElementChild;I.clear(J),I.apply(J)}return}D.style.width=`${F.pageWidthMm*$e}px`;const q=j.renderPage(F,96,{},document);I.apply(q),D.replaceChildren(q),ct.set(D,F)}),dt()},{flush:"post"}),e.watch(()=>I.query.value,i=>{i||E.value?.querySelectorAll(".mrp-page-holder").forEach(g=>{I.clear(g)})});const _=gn(a,{thumbsRoot:w,visible:B,renderThumbCanvas:i=>{try{const g=a.value.pages[i],h=Math.min(.2,116/Math.max(1,g.pageWidthMm*$e)),{canvases:T}=j.renderPlanToCanvas(a.value,{start:i,end:i,dpr:h});return T[0]??null}catch{return null}}});e.watchEffect(()=>{_.schedule()},{flush:"post"});const Jt=e.computed(()=>o.debug),{debugStats:ue}=vn(Jt,{plan:a,pageCount:O,windowRange:he,zoom:Y,loadMs:C.loadMs});function Ue(){ze(k.value),_.schedule(),ve.value==="fit"&&at(),dt(!0)}function Ke(){ge(L===Je?100:"fit");try{const i=JSON.parse(localStorage.getItem(L)??"{}");i.zoomMode==="fit"?ge("fit"):typeof i.zoomMode=="number"&&ge(i.zoomMode)}catch{}}return e.onMounted(()=>{window.addEventListener("resize",Ue),typeof ResizeObserver<"u"&&k.value&&(Ee=new ResizeObserver(Ue),Ee.observe(k.value)),ze(k.value),Ke(),o.autoLoad&&se()}),e.onUnmounted(()=>{te=!0,V.reset(),P.value=!1,Ne(),A++,Z?.abort(),Z=null,window.removeEventListener("resize",Ue),Ee?.disconnect(),Ee=null,_.destroy(),I.reset(),qt()}),e.watch(()=>[JSON.stringify(W.value),JSON.stringify(o.params),ee.value],()=>{if(o.autoLoad){se();return}A++,Z?.abort(),Z=null,s.value=!1,d.value="",v.value=null,b.value=null,ke()}),n({reload:se,print:We,exportAs:Ae,openPdfWindow:He,gotoPage:ne,setParams:it,checkPdfFont:Pe,importExcel:qe,getPlan:ut,getChanges:V.getChanges,state:ae}),(i,g)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["mach-report-preview",{"mrp-wide-report":S.value}]),style:e.normalizeStyle(Wt.value)},[Q.value&&oe.value.length>0?(e.openBlock(),e.createBlock(kt,{key:0,defs:oe.value,modelValue:le.value,"onUpdate:modelValue":g[0]||(g[0]=h=>le.value=h),messages:x.value,attempted:Ie.value,onQuery:zt,onReset:Lt},null,8,["defs","modelValue","messages","attempted"])):e.createCommentVNode("",!0),e.createVNode(Pt,{"page-count":O.value,"current-page":u.value,"zoom-mode":e.unref(ve),zoom:e.unref(Y),"show-export":$.value,"show-print":M.value,"show-pdf-window":z.value,messages:x.value,search:{visible:e.unref(I).visible.value,query:e.unref(I).query.value,matchIndex:e.unref(I).matchIndex.value,matchCount:e.unref(I).matchCount.value,searching:e.unref(I).searching.value},"thumbs-visible":B.value,"show-import":!!we.value,busy:s.value||P.value||e.unref(V).saving.value,onGoto:ne,onZoom:e.unref(ge),onExport:g[1]||(g[1]=h=>Ae(h)),onPrint:We,onPdfWindow:He,onSearchInput:e.unref(I).onInput,onSearchNav:e.unref(I).onNav,onSearchToggle:e.unref(I).toggle,onThumbsToggle:g[2]||(g[2]=h=>B.value=!B.value),onImportExcel:g[3]||(g[3]=h=>R.value?.click())},null,8,["page-count","current-page","zoom-mode","zoom","show-export","show-print","show-pdf-window","messages","search","thumbs-visible","show-import","busy","onZoom","onSearchInput","onSearchNav","onSearchToggle"]),we.value?(e.openBlock(),e.createElementBlock("input",{key:1,ref_key:"importInputRef",ref:R,class:"mrp-import-input",type:"file",accept:".xlsx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",hidden:"",onChange:Ut},null,544)):e.createCommentVNode("",!0),nt.value&&O.value>0?(e.openBlock(),e.createElementBlock("div",rr,e.toDisplayString(e.unref(V).saving.value?x.value.saving:x.value.editingHint),1)):e.createCommentVNode("",!0),b.value?(e.openBlock(),e.createElementBlock("div",{key:3,class:e.normalizeClass(["mrp-export-notice",`mrp-export-${b.value.kind}`]),role:"alert"},e.toDisplayString(b.value.message),3)):e.createCommentVNode("",!0),m.value.status==="error"&&($.value||z.value)?(e.openBlock(),e.createElementBlock("div",or,[e.createTextVNode(e.toDisplayString(x.value.pdfFontUnavailable)+" ",1),e.createElementVNode("button",{type:"button",onClick:It},e.toDisplayString(x.value.retry),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",ar,[e.createElementVNode("div",{ref_key:"viewportRef",ref:k,class:"mrp-body",tabindex:"0",onWheel:Kt,onKeydown:Gt,onDblclick:g[4]||(g[4]=(...h)=>e.unref(V).onDoubleClick&&e.unref(V).onDoubleClick(...h)),onScrollPassive:g[5]||(g[5]=h=>e.unref(Ht)(h.target))},[s.value?(e.openBlock(),e.createElementBlock("div",lr,e.toDisplayString(x.value.loading),1)):d.value?(e.openBlock(),e.createElementBlock("div",sr,[e.createTextVNode(e.toDisplayString(d.value)+" ",1),e.createElementVNode("button",{class:"mrp-retry",type:"button",onClick:se},e.toDisplayString(x.value.retry),1)])):!a.value||O.value===0?(e.openBlock(),e.createElementBlock("div",ir,e.toDisplayString(x.value.empty),1)):(e.openBlock(),e.createElementBlock("div",{key:3,class:"mrp-scale",style:e.normalizeStyle({width:`${e.unref(Oe).w*e.unref(Y)}px`,height:`${e.unref(Oe).h*e.unref(Y)}px`})},[e.createElementVNode("div",{ref_key:"containerRef",ref:E,class:"mrp-scale-inner",style:e.normalizeStyle({transform:`scale(${e.unref(Y)})`,transformOrigin:"top left",width:`${e.unref(Oe).w}px`})},[e.unref(he).padTopPx>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mrp-spacer-top",style:e.normalizeStyle({height:`${e.unref(he).padTopPx}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(lt),h=>(e.openBlock(),e.createElementBlock("div",{key:h.index,class:"mrp-page-holder","data-page":h.index+1},null,8,ur))),128)),e.unref(he).padBottomPx>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"mrp-spacer-bottom",style:e.normalizeStyle({height:`${e.unref(he).padBottomPx}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)],4)],4))],544),B.value&&O.value>0?(e.openBlock(),e.createElementBlock("aside",{key:0,ref_key:"thumbsRef",ref:w,class:"mrp-thumbs",onScrollPassive:g[6]||(g[6]=(...h)=>e.unref(_).onScroll&&e.unref(_).onScroll(...h))},[e.unref(_).windowRange.value.padTopPx>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mrp-thumb-spacer",style:e.normalizeStyle({height:`${e.unref(_).windowRange.value.padTopPx}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(_).visibleThumbs.value,h=>(e.openBlock(),e.createElementBlock("div",{key:h.index,class:e.normalizeClass(["mrp-thumb",{"mrp-thumb-active":h.index+1===u.value}]),style:e.normalizeStyle({height:`${h.height+20}px`}),onClick:T=>ne(h.index+1)},[e.createElementVNode("div",{class:"mrp-thumb-box","data-thumb":h.index+1,style:e.normalizeStyle({height:`${h.height}px`})},null,12,dr),e.createElementVNode("span",fr,e.toDisplayString(h.index+1),1)],14,cr))),128)),e.unref(_).windowRange.value.padBottomPx>0?(e.openBlock(),e.createElementBlock("div",{key:1,class:"mrp-thumb-spacer",style:e.normalizeStyle({height:`${e.unref(_).windowRange.value.padBottomPx}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0)],544)):e.createCommentVNode("",!0)]),e.createElementVNode("div",pr,[e.renderSlot(i.$slots,"default",{},void 0,!0)]),e.unref(ue)?(e.openBlock(),e.createElementBlock("div",mr,[g[7]||(g[7]=e.createElementVNode("div",null,"mach-report debug",-1)),e.createElementVNode("div",null,"pages: "+e.toDisplayString(e.unref(ue).pages)+" | window: ["+e.toDisplayString(e.unref(ue).window)+"]",1),e.createElementVNode("div",null,"zoom: "+e.toDisplayString(e.unref(ue).zoom)+" | load: "+e.toDisplayString(e.unref(ue).loadMs),1),e.createElementVNode("div",null,"plan: "+e.toDisplayString(e.unref(ue).planKB)+"KB",1)])):e.createCommentVNode("",!0)],6))}}),Tt=tt(vr,[["__scopeId","data-v-fa6fd3bb"]]),gr=Object.freeze(Object.defineProperty({__proto__:null,default:Tt},Symbol.toStringTag,{value:"Module"}));exports.DEFAULT_MESSAGES=Ct;exports.DEFAULT_THEME=$t;exports.MachReportError=re;exports.PlanLoadError=Be;exports.ReportParamPanel=kt;exports.ReportPreview=Tt;exports.ReportPreview$1=gr;exports.ReportToolbar=Pt;exports.SILENT_LOGGER=Jn;exports.buildPrintDocument=et;exports.buildWordHtml=wt;exports.createDefaultPdfExporter=Ft;exports.createFetchRequest=rn;exports.defineMachReportConfig=Bt;exports.defineMachReportPreset=Yn;exports.joinReportIds=nn;exports.normalizeReportIds=Xe;exports.printPlans=on;exports.provideMachReportConfig=Zn;exports.resolveConfig=St;exports.themeToCssVars=Rt;exports.toErrorDetail=Dt;exports.useMachReportConfig=Mt;exports.usePageWindow=bt;exports.usePrintExport=xt;exports.useZoom=yt;