@agile-team/mach-report 2.8.3 → 2.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/README.md +28 -10
  2. package/dist/ExcelBindingWizard-DiaxvWpQ.cjs +1 -0
  3. package/dist/ExcelBindingWizard-RLJIXKKG.js +816 -0
  4. package/dist/{ReportPreview-DRBAUkxj.js → ReportPreview-B5ZNEasW.js} +23 -22
  5. package/dist/ReportPreview-DRtVPUYo.cjs +6 -0
  6. package/dist/RuleEditor-N4qnMZ-Z.cjs +1 -0
  7. package/dist/RuleEditor-ynnUEK0s.js +1575 -0
  8. package/dist/TemplateReviewPanel-C_Lmzis6.cjs +1 -0
  9. package/dist/TemplateReviewPanel-Cn32OY4_.js +173 -0
  10. package/dist/{_plugin-vue_export-helper-DPbiz14D.js → _plugin-vue_export-helper-8SL1F89S.js} +2 -2
  11. package/dist/analytics.cjs +1 -1
  12. package/dist/analytics.d.cts +188 -5
  13. package/dist/analytics.d.ts +188 -5
  14. package/dist/analytics.js +68 -202
  15. package/dist/{assets-B9qJku3V.js → assets-DDsfEi8R.js} +3 -3
  16. package/dist/{assets-RZan7EyL.cjs → assets-ahTRUXRk.cjs} +1 -1
  17. package/dist/binding-preview-B5834rml.cjs +2 -0
  18. package/dist/binding-preview-ChXjN5L5.js +649 -0
  19. package/dist/{capabilities-joSutDF8.js → capabilities-Cm9hZ3uV.js} +5 -5
  20. package/dist/{capabilities-xGTpnPjJ.cjs → capabilities-DYzWL7KS.cjs} +1 -1
  21. package/dist/dataset-BkRmwgeJ.cjs +1 -0
  22. package/dist/dataset-H5pFuQGU.js +121 -0
  23. package/dist/defaults-DXhiM1ZD.js +10 -0
  24. package/dist/defaults-xhmcLLrf.cjs +1 -0
  25. package/dist/designer.cjs +2 -1
  26. package/dist/designer.d.cts +1391 -6
  27. package/dist/designer.d.ts +1391 -6
  28. package/dist/designer.js +2636 -673
  29. package/dist/grid-geometry-BNptEcMm.js +65 -0
  30. package/dist/grid-geometry-CZ_cYB6O.cjs +1 -0
  31. package/dist/import-template-CNMLJSQw.js +23030 -0
  32. package/dist/import-template-CpxunKVp.cjs +29 -0
  33. package/dist/index.cjs +7 -7
  34. package/dist/index.d.cts +202 -3
  35. package/dist/index.d.ts +202 -3
  36. package/dist/index.js +554 -535
  37. package/dist/matrix-CNPDJxED.js +745 -0
  38. package/dist/matrix-Div9Ilh3.cjs +1 -0
  39. package/dist/pdf.cjs +46 -46
  40. package/dist/pdf.d.cts +2 -0
  41. package/dist/pdf.d.ts +2 -0
  42. package/dist/pdf.js +17 -16
  43. package/dist/{plugin-BurDDMcd.js → plugin-BWwIgZXV.js} +1 -1
  44. package/dist/{plugin-DSFu51Ua.cjs → plugin-Dg-J1Rbm.cjs} +1 -1
  45. package/dist/progress-7OSZbFok.js +39 -0
  46. package/dist/progress-BnLiS5eH.cjs +1 -0
  47. package/dist/render-plan-7xpGrCEl.cjs +1 -0
  48. package/dist/render-plan-Ck6koX9L.js +13 -0
  49. package/dist/server/node.d.cts +62 -0
  50. package/dist/server/node.d.ts +62 -0
  51. package/dist/server-node.cjs +1 -1
  52. package/dist/server-node.js +373 -145
  53. package/dist/server.cjs +1 -1
  54. package/dist/server.d.cts +311 -0
  55. package/dist/server.d.ts +311 -0
  56. package/dist/server.js +590 -186
  57. package/dist/{style-Dv5o_x6b.js → style-CQ1PK8ZB.js} +5 -5
  58. package/dist/style-UgIJSA1F.cjs +1 -0
  59. package/dist/style.css +1 -1
  60. package/dist/template-registry-CHMYZ7SD.cjs +1 -0
  61. package/dist/template-registry-R61AMCr0.js +433 -0
  62. package/dist/template-review-hvWWQFsi.js +1027 -0
  63. package/dist/template-review-jEcOfmGr.cjs +1 -0
  64. package/dist/textwrap-CWHyzkBH.cjs +4 -0
  65. package/dist/{textwrap-DOl04hCQ.js → textwrap-DE1kgcJB.js} +1 -1
  66. package/dist/{validate-DfHPD8wX.cjs → validate-BDiMqkJC.cjs} +1 -1
  67. package/dist/{validate-S6CgIm5d.js → validate-DWPF7icl.js} +13 -13
  68. package/dist/vue/async.d.cts +186 -0
  69. package/dist/vue/async.d.ts +186 -0
  70. package/dist/vue/index.d.cts +271 -3
  71. package/dist/vue/index.d.ts +271 -3
  72. package/dist/vue-async.cjs +1 -1
  73. package/dist/vue-async.js +3 -3
  74. package/dist/vue.cjs +1 -1
  75. package/dist/vue.js +4 -4
  76. package/dist/worker.cjs +1 -1
  77. package/dist/worker.d.cts +2 -0
  78. package/dist/worker.d.ts +2 -0
  79. package/dist/worker.js +1 -1
  80. package/dist/xlsx.cjs +2 -30
  81. package/dist/xlsx.d.cts +268 -0
  82. package/dist/xlsx.d.ts +268 -0
  83. package/dist/xlsx.js +220 -23440
  84. package/package.json +1 -1
  85. package/dist/ReportPreview-DjGeWHY-.cjs +0 -6
  86. package/dist/progress-DD964VAB.js +0 -102
  87. package/dist/progress-KvhwXZ1Q.cjs +0 -1
  88. package/dist/render-plan-CckPEQyf.cjs +0 -1
  89. package/dist/render-plan-uzZYYSy1.js +0 -19
  90. package/dist/report-source-BXHNy_AD.js +0 -755
  91. package/dist/report-source-CCAvFE3t.cjs +0 -1
  92. package/dist/style-CpwiOPyB.cjs +0 -1
  93. package/dist/template-registry-DWExx0gU.cjs +0 -1
  94. package/dist/template-registry-NpOakidD.js +0 -354
  95. package/dist/textwrap-CnGsEum6.cjs +0 -4
@@ -1,5 +1,35 @@
1
1
  import { ComponentOptionsMixin } from 'vue';
2
2
  import { DefineComponent } from 'vue';
3
+ declare interface AggregateDefinition {
4
+ /** Output column; valueField defaults to this field. */
5
+ field: string;
6
+ op: AggregateOperation;
7
+ valueField?: string;
8
+ weightField?: string;
9
+ numeric?: "number" | "decimal";
10
+ digits?: number;
11
+ }
12
+ declare interface AggregateDefinition_2 {
13
+ /** Output column; valueField defaults to this field. */
14
+ field: string;
15
+ op: AggregateOperation_2;
16
+ valueField?: string;
17
+ weightField?: string;
18
+ numeric?: "number" | "decimal";
19
+ digits?: number;
20
+ }
21
+ declare interface AggregateDefinition_3 {
22
+ /** Output column; valueField defaults to this field. */
23
+ field: string;
24
+ op: AggregateOperation_3;
25
+ valueField?: string;
26
+ weightField?: string;
27
+ numeric?: "number" | "decimal";
28
+ digits?: number;
29
+ }
30
+ declare type AggregateOperation = "sum" | "count" | "avg" | "min" | "max" | "weightedAvg";
31
+ declare type AggregateOperation_2 = "sum" | "count" | "avg" | "min" | "max" | "weightedAvg";
32
+ declare type AggregateOperation_3 = "sum" | "count" | "avg" | "min" | "max" | "weightedAvg";
3
33
  declare interface AssetRenderBudget {
4
34
  /** Maximum newly rendered assets, default 1000. Existing imageData is kept unchanged. */
5
35
  maxAssets?: number;
@@ -74,6 +104,50 @@ declare type ColumnFormat = {
74
104
  kind: "date";
75
105
  pattern?: string;
76
106
  };
107
+ /**
108
+ * 列值格式化(声明式、JSON 可序列化)。
109
+ * 在 paginate 的 cellText 出口统一消费:格式化发生在进 RenderPlan 之前,
110
+ * 三后端(DOM/Canvas/PDF)零改动。
111
+ *
112
+ * 语义约定(v0.9 固化):
113
+ * - number.digits 显式给出 → 精确保留(12.5 + digits:2 → "12.50")
114
+ * - number.thousands 默认 false(千分位显式开启)
115
+ * - date 字符串按"本地时区的日历日"解析(YYYY-MM-DD / YYYY/MM/DD 直取年月日,
116
+ * 不经 Date 字符串构造——后者按 UTC 零点,负时区环境会少一天)
117
+ */
118
+ declare type ColumnFormat_2 = {
119
+ kind: "number";
120
+ thousands?: boolean;
121
+ digits?: number;
122
+ } | {
123
+ kind: "percent";
124
+ digits?: number;
125
+ } | {
126
+ kind: "date";
127
+ pattern?: string;
128
+ };
129
+ /**
130
+ * 列值格式化(声明式、JSON 可序列化)。
131
+ * 在 paginate 的 cellText 出口统一消费:格式化发生在进 RenderPlan 之前,
132
+ * 三后端(DOM/Canvas/PDF)零改动。
133
+ *
134
+ * 语义约定(v0.9 固化):
135
+ * - number.digits 显式给出 → 精确保留(12.5 + digits:2 → "12.50")
136
+ * - number.thousands 默认 false(千分位显式开启)
137
+ * - date 字符串按"本地时区的日历日"解析(YYYY-MM-DD / YYYY/MM/DD 直取年月日,
138
+ * 不经 Date 字符串构造——后者按 UTC 零点,负时区环境会少一天)
139
+ */
140
+ declare type ColumnFormat_3 = {
141
+ kind: "number";
142
+ thousands?: boolean;
143
+ digits?: number;
144
+ } | {
145
+ kind: "percent";
146
+ digits?: number;
147
+ } | {
148
+ kind: "date";
149
+ pattern?: string;
150
+ };
77
151
  declare interface ComponentImageContext {
78
152
  readonly component: Readonly<PlanComponent>;
79
153
  readonly pageIndex: number;
@@ -83,6 +157,8 @@ declare interface ComponentImageContext {
83
157
  }
84
158
  declare type ComponentImageRenderer = (context: ComponentImageContext) => string | Promise<string>;
85
159
  declare type ComponentKind = "text" | "image" | "barcode" | "qrcode" | "chart" | "line" | "rect" | "ellipse";
160
+ declare type ComponentKind_2 = "text" | "image" | "barcode" | "qrcode" | "chart" | "line" | "rect" | "ellipse";
161
+ declare type ComponentKind_3 = "text" | "image" | "barcode" | "qrcode" | "chart" | "line" | "rect" | "ellipse";
86
162
  declare interface ComponentStyle {
87
163
  fontSizePx?: number;
88
164
  fontSize?: number;
@@ -106,7 +182,245 @@ declare interface ComponentStyle {
106
182
  opacity?: number;
107
183
  rotateDeg?: number;
108
184
  }
185
+ declare interface ComponentStyle_2 {
186
+ fontSizePx?: number;
187
+ fontSize?: number;
188
+ fontFamily?: string;
189
+ bold?: boolean;
190
+ italic?: boolean;
191
+ underline?: boolean;
192
+ color?: string;
193
+ backgroundColor?: string;
194
+ align?: "left" | "center" | "right" | "justify";
195
+ verticalAlign?: "top" | "middle" | "bottom";
196
+ lineColor?: string;
197
+ borderColor?: string;
198
+ lineWidthPt?: number;
199
+ borderTop?: boolean;
200
+ borderRight?: boolean;
201
+ borderBottom?: boolean;
202
+ borderLeft?: boolean;
203
+ lineHeight?: number;
204
+ letterSpacing?: number;
205
+ opacity?: number;
206
+ rotateDeg?: number;
207
+ }
208
+ declare interface ComponentStyle_3 {
209
+ fontSizePx?: number;
210
+ fontSize?: number;
211
+ fontFamily?: string;
212
+ bold?: boolean;
213
+ italic?: boolean;
214
+ underline?: boolean;
215
+ color?: string;
216
+ backgroundColor?: string;
217
+ align?: "left" | "center" | "right" | "justify";
218
+ verticalAlign?: "top" | "middle" | "bottom";
219
+ lineColor?: string;
220
+ borderColor?: string;
221
+ lineWidthPt?: number;
222
+ borderTop?: boolean;
223
+ borderRight?: boolean;
224
+ borderBottom?: boolean;
225
+ borderLeft?: boolean;
226
+ lineHeight?: number;
227
+ letterSpacing?: number;
228
+ opacity?: number;
229
+ rotateDeg?: number;
230
+ }
231
+ declare interface ComputedField extends ExpressionOptions {
232
+ field: string;
233
+ expression: ReportExpression | string;
234
+ /** Scope controls aggregate inputs; row expressions may reference the current row in any scope. */
235
+ scope?: "row" | "group" | "dataset";
236
+ groupBy?: readonly string[];
237
+ /** String adapter expressions cannot be inspected; declare dependencies explicitly. */
238
+ dependsOn?: readonly string[];
239
+ }
240
+ declare interface ComputedField_2 extends ExpressionOptions_2 {
241
+ field: string;
242
+ expression: ReportExpression_2 | string;
243
+ /** Scope controls aggregate inputs; row expressions may reference the current row in any scope. */
244
+ scope?: "row" | "group" | "dataset";
245
+ groupBy?: readonly string[];
246
+ /** String adapter expressions cannot be inspected; declare dependencies explicitly. */
247
+ dependsOn?: readonly string[];
248
+ }
249
+ declare interface ComputedField_3 extends ExpressionOptions_3 {
250
+ field: string;
251
+ expression: ReportExpression_3 | string;
252
+ /** Scope controls aggregate inputs; row expressions may reference the current row in any scope. */
253
+ scope?: "row" | "group" | "dataset";
254
+ groupBy?: readonly string[];
255
+ /** String adapter expressions cannot be inspected; declare dependencies explicitly. */
256
+ dependsOn?: readonly string[];
257
+ }
258
+ declare interface DatasetContract {
259
+ fields: readonly ReportFieldContract[];
260
+ rowKey?: string;
261
+ }
262
+ declare interface DatasetContract_2 {
263
+ fields: readonly ReportFieldContract_3[];
264
+ rowKey?: string;
265
+ }
266
+ declare interface DatasetContract_3 {
267
+ fields: readonly ReportFieldContract_2[];
268
+ rowKey?: string;
269
+ }
109
270
  declare type DatasetRows = Record<string, Record<string, unknown>[]>;
271
+ declare type DatasetRows_2 = Record<string, Record<string, unknown>[]>;
272
+ declare type DatasetRows_3 = Record<string, Record<string, unknown>[]>;
273
+ /** Optional wizard labels remain independent of the general designer configuration. */
274
+ export declare const EXCEL_BINDING_MESSAGES: {
275
+ title: string;
276
+ intro: string;
277
+ upload: string;
278
+ replace: string;
279
+ loading: string;
280
+ cancel: string;
281
+ source: string;
282
+ sourceHint: string;
283
+ sourceOnly: string;
284
+ sheet: string;
285
+ dataset: string;
286
+ chooseDataset: string;
287
+ rowKey: string;
288
+ chooseRowKey: string;
289
+ titleRegion: string;
290
+ headerRegion: string;
291
+ detailRegion: string;
292
+ footerRegion: string;
293
+ optional: string;
294
+ selectRegion: string;
295
+ clear: string;
296
+ mapping: string;
297
+ coverage: string;
298
+ physical: string;
299
+ business: string;
300
+ chooseField: string;
301
+ selected: string;
302
+ previousRows: string;
303
+ nextRows: string;
304
+ previousColumns: string;
305
+ nextColumns: string;
306
+ rowStart: string;
307
+ columnStart: string;
308
+ apply: string;
309
+ check: string;
310
+ identity: string;
311
+ templateId: string;
312
+ templateName: string;
313
+ issues: string;
314
+ ready: string;
315
+ noSource: string;
316
+ noContract: string;
317
+ fieldType: string;
318
+ precision: string;
319
+ sample: string;
320
+ unnamed: string;
321
+ applied: string;
322
+ readonly: string;
323
+ invalidFile: string;
324
+ emptySelection: string;
325
+ footerHint: string;
326
+ inspectWarning: string;
327
+ session: string;
328
+ decimals: string;
329
+ selectionLabel: string;
330
+ regionLegend: string;
331
+ summary: string;
332
+ stepSource: string;
333
+ stepRegions: string;
334
+ stepFields: string;
335
+ stepValidate: string;
336
+ errors: string;
337
+ sourceError: string;
338
+ dimensions: string;
339
+ mappedTo: string;
340
+ sampleOnly: string;
341
+ schemaOnly: string;
342
+ };
343
+ declare interface ExcelBindingDataset {
344
+ id: string;
345
+ label?: string;
346
+ fields: readonly ExcelBindingField[];
347
+ rowKey?: string;
348
+ /** Optional representative API rows, used only for contract validation, never as live results. */
349
+ samples?: readonly Record<string, unknown>[];
350
+ }
351
+ declare interface ExcelBindingDocumentResult {
352
+ document: ReportTemplateDocument_2;
353
+ recipe: ExcelBindingRecipe;
354
+ warnings: string[];
355
+ }
356
+ declare interface ExcelBindingField extends ReportFieldContract_2 {
357
+ /** Display precision is explicit business metadata; decimal text is never coerced to number. */
358
+ digits?: number;
359
+ sample?: string | number | boolean | null;
360
+ }
361
+ export declare type ExcelBindingMessages = typeof EXCEL_BINDING_MESSAGES;
362
+ /** Explicit coordinates and mappings, independently persistable alongside the source asset. */
363
+ declare interface ExcelBindingRecipe {
364
+ version: "1.0";
365
+ sheet: string;
366
+ dataset: string;
367
+ regions: {
368
+ title?: string;
369
+ header: string;
370
+ detail: string;
371
+ footer?: string;
372
+ };
373
+ /** One mapping for every physical Excel column. Empty strings remain invalid until confirmed. */
374
+ fields: string[];
375
+ rowKey: string;
376
+ }
377
+ declare interface ExcelBindingSession {
378
+ version: "1.0";
379
+ /** Design source only. The compiled document never retains the sample detail rows. */
380
+ source: ExcelImportResult;
381
+ recipe: ExcelBindingRecipe;
382
+ identity: {
383
+ id: string;
384
+ name: string;
385
+ };
386
+ }
387
+ export declare const ExcelBindingWizard: DefineComponent<ExcelBindingWizardOptions, {
388
+ importFile: (file: File) => Promise<void>;
389
+ apply: () => void;
390
+ cancel: () => void;
391
+ }, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & {
392
+ apply: (result: ExcelBindingWizardApply) => any;
393
+ }, string, MachReportVuePublicProps, Readonly<ExcelBindingWizardOptions> & Readonly<{
394
+ onApply?: ((result: ExcelBindingWizardApply) => any) | undefined;
395
+ }>, {}>;
396
+ export declare interface ExcelBindingWizardApply extends ExcelBindingDocumentResult {
397
+ session: ExcelBindingSession;
398
+ }
399
+ export declare interface ExcelBindingWizardOptions {
400
+ datasets: readonly ExcelBindingDataset[];
401
+ /** Source + exact coordinates + mappings. No File, functions, network credentials, or live result rows. */
402
+ session?: ExcelBindingSession;
403
+ identity?: {
404
+ id: string;
405
+ name: string;
406
+ };
407
+ /** Editor replacement keeps the current persistent ID; standalone creation remains editable. */
408
+ lockId?: boolean;
409
+ readonly?: boolean;
410
+ importOptions?: Pick<ExcelImportOptions_2, "layout" | "landscape" | "limits">;
411
+ messages?: Partial<ExcelBindingMessages>;
412
+ }
413
+ declare interface ExcelImportedSheet {
414
+ name: string;
415
+ /** Original, one-based workbook position. */
416
+ index: number;
417
+ range: string;
418
+ rowCount: number;
419
+ columnCount: number;
420
+ /** Zero-based index into template.pages. */
421
+ pageStart: number;
422
+ pageCount: number;
423
+ }
110
424
  /** Limits apply to the selected rectangular ranges, including their empty cells. */
111
425
  declare interface ExcelImportLimits {
112
426
  /** Compressed input, default 20 MiB. */
@@ -122,6 +436,21 @@ declare interface ExcelImportLimits {
122
436
  /** Workbook sheets, default 32. */
123
437
  maxSheets?: number;
124
438
  }
439
+ /** Limits apply to the selected rectangular ranges, including their empty cells. */
440
+ declare interface ExcelImportLimits_2 {
441
+ /** Compressed input, default 20 MiB. */
442
+ maxFileBytes?: number;
443
+ /** Declared ZIP uncompressed total, default 64 MiB. */
444
+ maxUncompressedBytes?: number;
445
+ /** Total selected cells across sheets, default 250,000; hard ceiling 1,000,000. */
446
+ maxCells?: number;
447
+ /** Rows per selected sheet, default 100,000; hard ceiling 1,048,576. */
448
+ maxRows?: number;
449
+ /** Columns per selected sheet, default 2,048; hard ceiling 16,384. */
450
+ maxColumns?: number;
451
+ /** Workbook sheets, default 32. */
452
+ maxSheets?: number;
453
+ }
125
454
  declare interface ExcelImportOptions extends OutputTaskOptions {
126
455
  /** Sheet names or one-based workbook positions. Default: all visible sheets. */
127
456
  sheets?: Array<string | number>;
@@ -136,6 +465,43 @@ declare interface ExcelImportOptions extends OutputTaskOptions {
136
465
  /** Optional resource limits; hard ceilings prevent unbounded allocations. */
137
466
  limits?: ExcelImportLimits;
138
467
  }
468
+ declare interface ExcelImportOptions_2 extends OutputTaskOptions_2 {
469
+ /** Sheet names or one-based workbook positions. Default: all visible sheets. */
470
+ sheets?: Array<string | number>;
471
+ /** A1 range for every sheet, or ranges keyed by exact sheet name. */
472
+ range?: string | Record<string, string>;
473
+ /** Wide preserves natural column widths. A3/A4 scale the complete width to paper. */
474
+ layout?: "wide" | "a3" | "a4";
475
+ /** Only applies to A3/A4; default landscape. */
476
+ landscape?: boolean;
477
+ /** Vertical preview segment limit, default 80, maximum 200. Merges remain intact. */
478
+ maxRowsPerPage?: number;
479
+ /** Optional resource limits; hard ceilings prevent unbounded allocations. */
480
+ limits?: ExcelImportLimits_2;
481
+ }
482
+ declare interface ExcelImportResult {
483
+ template: ReportTemplate_2;
484
+ warnings: string[];
485
+ sheets: ExcelImportedSheet[];
486
+ }
487
+ declare interface ExpressionOptions {
488
+ numeric?: "number" | "decimal";
489
+ digits?: number;
490
+ nulls?: "propagate" | "error";
491
+ divisionByZero?: "null" | "error";
492
+ }
493
+ declare interface ExpressionOptions_2 {
494
+ numeric?: "number" | "decimal";
495
+ digits?: number;
496
+ nulls?: "propagate" | "error";
497
+ divisionByZero?: "null" | "error";
498
+ }
499
+ declare interface ExpressionOptions_3 {
500
+ numeric?: "number" | "decimal";
501
+ digits?: number;
502
+ nulls?: "propagate" | "error";
503
+ divisionByZero?: "null" | "error";
504
+ }
139
505
  declare interface GridCell {
140
506
  text?: string;
141
507
  rawText?: string;
@@ -155,9 +521,51 @@ declare interface GridCell {
155
521
  rowSpan?: number;
156
522
  style?: ComponentStyle;
157
523
  }
524
+ declare interface GridCell_2 {
525
+ text?: string;
526
+ rawText?: string;
527
+ /** 原始值,仅供 Excel raw 模式消费;不参与预览、分页与 PDF 绘制。 */
528
+ value?: string | number | boolean | null;
529
+ /** Excel 数字格式(例如 #,##0.00 / 0.00%),不改变 text。 */
530
+ numberFormat?: string;
531
+ /** 编辑输入类型;省略时只按原始值推断,数字字符串不会被转换为数值。 */
532
+ valueType?: "text" | "number" | "boolean";
533
+ /** 单元格级编辑控制;预览仍需显式开启 editing。 */
534
+ editable?: boolean;
535
+ source?: ReportCellSource_2;
536
+ /** Excel 公式保留元数据;当前引擎不计算公式,公式格始终只读。 */
537
+ formula?: string;
538
+ children?: PlanComponent_2[];
539
+ colSpan?: number;
540
+ rowSpan?: number;
541
+ style?: ComponentStyle_2;
542
+ }
543
+ declare interface GridCell_3 {
544
+ text?: string;
545
+ rawText?: string;
546
+ /** 原始值,仅供 Excel raw 模式消费;不参与预览、分页与 PDF 绘制。 */
547
+ value?: string | number | boolean | null;
548
+ /** Excel 数字格式(例如 #,##0.00 / 0.00%),不改变 text。 */
549
+ numberFormat?: string;
550
+ /** 编辑输入类型;省略时只按原始值推断,数字字符串不会被转换为数值。 */
551
+ valueType?: "text" | "number" | "boolean";
552
+ /** 单元格级编辑控制;预览仍需显式开启 editing。 */
553
+ editable?: boolean;
554
+ source?: ReportCellSource_3;
555
+ /** Excel 公式保留元数据;当前引擎不计算公式,公式格始终只读。 */
556
+ formula?: string;
557
+ children?: PlanComponent_3[];
558
+ colSpan?: number;
559
+ rowSpan?: number;
560
+ style?: ComponentStyle_3;
561
+ }
158
562
  declare type ImageComponentKind = "image" | "chart" | "barcode" | "qrcode";
159
563
  /** auto:真实数字/显式数值格式居右,日期与布尔居中,其他内容居左。 */
160
564
  declare type ListAlignment = NonNullable<ComponentStyle["align"]> | "auto";
565
+ /** auto:真实数字/显式数值格式居右,日期与布尔居中,其他内容居左。 */
566
+ declare type ListAlignment_2 = NonNullable<ComponentStyle_2["align"]> | "auto";
567
+ /** auto:真实数字/显式数值格式居右,日期与布尔居中,其他内容居左。 */
568
+ declare type ListAlignment_3 = NonNullable<ComponentStyle_3["align"]> | "auto";
161
569
  declare interface ListColumn {
162
570
  header: string;
163
571
  field: string;
@@ -179,6 +587,59 @@ declare interface ListColumn {
179
587
  valueType?: GridCell["valueType"];
180
588
  /** 字段语义用于 auto 对齐;明确声明编号,避免把数字编号当成度量。 */
181
589
  semanticRole?: "identifier" | "dimension" | "measure" | "date" | "text";
590
+ hidden?: boolean;
591
+ /** Condition hides cell content, preserving its physical layout in preview and exports. */
592
+ visibleWhen?: StyleRule["when"];
593
+ }
594
+ declare interface ListColumn_2 {
595
+ header: string;
596
+ field: string;
597
+ widthMm: number;
598
+ style?: ComponentStyle_2;
599
+ /** 内容对齐,优先于 style.align;数值字符串不会自动判为数字。 */
600
+ align?: ListAlignment_2;
601
+ /** 独立的表头对齐,不改变内容对齐。 */
602
+ headerAlign?: ComponentStyle_2["align"];
603
+ /** 独立的表头样式,优先于列表级表头样式。 */
604
+ headerStyle?: ComponentStyle_2;
605
+ /** 值格式化(声明式):千分位/小数位、百分比、日期 pattern */
606
+ format?: ColumnFormat_2;
607
+ /** 条件格式规则(声明式,命中合并进单元格样式;如负数红字) */
608
+ rules?: StyleRule_2[];
609
+ /** 内容列编辑控制;仍需由预览显式开启 editing,不影响表头/小计只读规则。 */
610
+ editable?: boolean;
611
+ /** 空值列或特殊数据类型可显式声明编辑输入类型。 */
612
+ valueType?: GridCell_2["valueType"];
613
+ /** 字段语义用于 auto 对齐;明确声明编号,避免把数字编号当成度量。 */
614
+ semanticRole?: "identifier" | "dimension" | "measure" | "date" | "text";
615
+ hidden?: boolean;
616
+ /** Condition hides cell content, preserving its physical layout in preview and exports. */
617
+ visibleWhen?: StyleRule_2["when"];
618
+ }
619
+ declare interface ListColumn_3 {
620
+ header: string;
621
+ field: string;
622
+ widthMm: number;
623
+ style?: ComponentStyle_3;
624
+ /** 内容对齐,优先于 style.align;数值字符串不会自动判为数字。 */
625
+ align?: ListAlignment_3;
626
+ /** 独立的表头对齐,不改变内容对齐。 */
627
+ headerAlign?: ComponentStyle_3["align"];
628
+ /** 独立的表头样式,优先于列表级表头样式。 */
629
+ headerStyle?: ComponentStyle_3;
630
+ /** 值格式化(声明式):千分位/小数位、百分比、日期 pattern */
631
+ format?: ColumnFormat_3;
632
+ /** 条件格式规则(声明式,命中合并进单元格样式;如负数红字) */
633
+ rules?: StyleRule_3[];
634
+ /** 内容列编辑控制;仍需由预览显式开启 editing,不影响表头/小计只读规则。 */
635
+ editable?: boolean;
636
+ /** 空值列或特殊数据类型可显式声明编辑输入类型。 */
637
+ valueType?: GridCell_3["valueType"];
638
+ /** 字段语义用于 auto 对齐;明确声明编号,避免把数字编号当成度量。 */
639
+ semanticRole?: "identifier" | "dimension" | "measure" | "date" | "text";
640
+ hidden?: boolean;
641
+ /** Condition hides cell content, preserving its physical layout in preview and exports. */
642
+ visibleWhen?: StyleRule_3["when"];
182
643
  }
183
644
  declare interface ListComponent {
184
645
  kind: "list";
@@ -212,14 +673,162 @@ declare interface ListComponent {
212
673
  border?: boolean;
213
674
  /** 分组小计(组头/组尾小计/组头防孤行) */
214
675
  groupBy?: ListGroupBy;
676
+ /** Ordered outer-to-inner grouping; groupBy remains the single-level shorthand. */
677
+ groups?: ListGroupBy[];
678
+ computed?: ComputedField[];
679
+ /** Dynamic pivot of the current source dataset, with read-only derived identities. */
680
+ matrix?: MatrixTableOptions;
681
+ /** Explicit row visibility; hidden rows do not participate in summaries. */
682
+ rowVisibleWhen?: StyleRule["when"];
683
+ /** Master/detail relation is keyed by business identity, never by display row index. */
684
+ detail?: ListDetail;
215
685
  /** 末尾总合计行(依赖 groupBy.subtotal 或显式 fields) */
216
686
  grandTotal?: ListGrandTotal;
217
687
  }
688
+ declare interface ListComponent_2 {
689
+ kind: "list";
690
+ id?: string;
691
+ /** 宽表标记用于连续 Excel;不改变低层列表的列宽和分页算法。 */
692
+ layout?: "page" | "wide";
693
+ /** 逻辑表名称,供 Excel Sheet 命名;不额外生成标题组件。 */
694
+ title?: string;
695
+ leftMm: number;
696
+ topMm: number;
697
+ widthMm: number;
698
+ dataset: string;
699
+ /** 数据集中稳定业务主键的字段名;省略时编辑仅有计划内坐标。 */
700
+ rowKey?: string;
701
+ revisionField?: string;
702
+ sourceTokenField?: string;
703
+ columns: ListColumn_2[];
704
+ fontSizePt?: number;
705
+ headerBold?: boolean;
706
+ rowHeightMm?: number;
707
+ paddingMm?: number;
708
+ headerEveryPage?: boolean;
709
+ headerBackgroundColor?: string;
710
+ /** 内容默认对齐,列配置可覆盖;低层模板缺省仍为 left。 */
711
+ align?: ListAlignment_2;
712
+ /** 表头默认对齐,列配置可覆盖。 */
713
+ headerAlign?: ComponentStyle_2["align"];
714
+ headerStyle?: ComponentStyle_2;
715
+ /** 可选多行合并表头;列宽按列表物理列对齐,供 Excel 业务模板复用。 */
716
+ headerGrid?: PlanGrid_2;
717
+ border?: boolean;
718
+ /** 分组小计(组头/组尾小计/组头防孤行) */
719
+ groupBy?: ListGroupBy_2;
720
+ /** Ordered outer-to-inner grouping; groupBy remains the single-level shorthand. */
721
+ groups?: ListGroupBy_2[];
722
+ computed?: ComputedField_2[];
723
+ /** Dynamic pivot of the current source dataset, with read-only derived identities. */
724
+ matrix?: MatrixTableOptions_2;
725
+ /** Explicit row visibility; hidden rows do not participate in summaries. */
726
+ rowVisibleWhen?: StyleRule_2["when"];
727
+ /** Master/detail relation is keyed by business identity, never by display row index. */
728
+ detail?: ListDetail_2;
729
+ /** 末尾总合计行(依赖 groupBy.subtotal 或显式 fields) */
730
+ grandTotal?: ListGrandTotal_2;
731
+ }
732
+ declare interface ListComponent_3 {
733
+ kind: "list";
734
+ id?: string;
735
+ /** 宽表标记用于连续 Excel;不改变低层列表的列宽和分页算法。 */
736
+ layout?: "page" | "wide";
737
+ /** 逻辑表名称,供 Excel Sheet 命名;不额外生成标题组件。 */
738
+ title?: string;
739
+ leftMm: number;
740
+ topMm: number;
741
+ widthMm: number;
742
+ dataset: string;
743
+ /** 数据集中稳定业务主键的字段名;省略时编辑仅有计划内坐标。 */
744
+ rowKey?: string;
745
+ revisionField?: string;
746
+ sourceTokenField?: string;
747
+ columns: ListColumn_3[];
748
+ fontSizePt?: number;
749
+ headerBold?: boolean;
750
+ rowHeightMm?: number;
751
+ paddingMm?: number;
752
+ headerEveryPage?: boolean;
753
+ headerBackgroundColor?: string;
754
+ /** 内容默认对齐,列配置可覆盖;低层模板缺省仍为 left。 */
755
+ align?: ListAlignment_3;
756
+ /** 表头默认对齐,列配置可覆盖。 */
757
+ headerAlign?: ComponentStyle_3["align"];
758
+ headerStyle?: ComponentStyle_3;
759
+ /** 可选多行合并表头;列宽按列表物理列对齐,供 Excel 业务模板复用。 */
760
+ headerGrid?: PlanGrid_3;
761
+ border?: boolean;
762
+ /** 分组小计(组头/组尾小计/组头防孤行) */
763
+ groupBy?: ListGroupBy_3;
764
+ /** Ordered outer-to-inner grouping; groupBy remains the single-level shorthand. */
765
+ groups?: ListGroupBy_3[];
766
+ computed?: ComputedField_3[];
767
+ /** Dynamic pivot of the current source dataset, with read-only derived identities. */
768
+ matrix?: MatrixTableOptions_3;
769
+ /** Explicit row visibility; hidden rows do not participate in summaries. */
770
+ rowVisibleWhen?: StyleRule_3["when"];
771
+ /** Master/detail relation is keyed by business identity, never by display row index. */
772
+ detail?: ListDetail_3;
773
+ /** 末尾总合计行(依赖 groupBy.subtotal 或显式 fields) */
774
+ grandTotal?: ListGrandTotal_3;
775
+ }
776
+ declare interface ListDetail {
777
+ dataset: string;
778
+ parentKey: string;
779
+ foreignKey: string;
780
+ rowKey?: string;
781
+ columns: ListColumn[];
782
+ rowHeightMm?: number;
783
+ header?: boolean;
784
+ label?: string;
785
+ /** Unmatched children fail by default; opt-in ignore is explicit. */
786
+ unmatched?: "error" | "ignore";
787
+ }
788
+ declare interface ListDetail_2 {
789
+ dataset: string;
790
+ parentKey: string;
791
+ foreignKey: string;
792
+ rowKey?: string;
793
+ columns: ListColumn_2[];
794
+ rowHeightMm?: number;
795
+ header?: boolean;
796
+ label?: string;
797
+ /** Unmatched children fail by default; opt-in ignore is explicit. */
798
+ unmatched?: "error" | "ignore";
799
+ }
800
+ declare interface ListDetail_3 {
801
+ dataset: string;
802
+ parentKey: string;
803
+ foreignKey: string;
804
+ rowKey?: string;
805
+ columns: ListColumn_3[];
806
+ rowHeightMm?: number;
807
+ header?: boolean;
808
+ label?: string;
809
+ /** Unmatched children fail by default; opt-in ignore is explicit. */
810
+ unmatched?: "error" | "ignore";
811
+ }
218
812
  declare type ListGrandTotal = boolean | {
219
813
  label?: string;
220
814
  style?: ComponentStyle;
221
815
  /** 合计列(缺省沿用 groupBy.subtotal) */
222
816
  fields?: string[];
817
+ aggregates?: AggregateDefinition[];
818
+ };
819
+ declare type ListGrandTotal_2 = boolean | {
820
+ label?: string;
821
+ style?: ComponentStyle_2;
822
+ /** 合计列(缺省沿用 groupBy.subtotal) */
823
+ fields?: string[];
824
+ aggregates?: AggregateDefinition_2[];
825
+ };
826
+ declare type ListGrandTotal_3 = boolean | {
827
+ label?: string;
828
+ style?: ComponentStyle_3;
829
+ /** 合计列(缺省沿用 groupBy.subtotal) */
830
+ fields?: string[];
831
+ aggregates?: AggregateDefinition_3[];
223
832
  };
224
833
  /** 分组小计配置(声明式,见 ListComponent.groupBy) */
225
834
  declare interface ListGroupBy {
@@ -234,6 +843,43 @@ declare interface ListGroupBy {
234
843
  subtotalLabel?: string;
235
844
  /** 组头防孤行(默认 true:页尾放不下"组头+首行"时整体换页) */
236
845
  keepWithNext?: boolean;
846
+ aggregates?: AggregateDefinition[];
847
+ /** Repeat this group heading after page breaks within the group. */
848
+ repeatHeader?: boolean;
849
+ }
850
+ /** 分组小计配置(声明式,见 ListComponent.groupBy) */
851
+ declare interface ListGroupBy_2 {
852
+ /** 分组字段(值变化即切组) */
853
+ field: string;
854
+ /** 组头文案模板,{value} 占位(默认 "{value}") */
855
+ headerTemplate?: string;
856
+ headerStyle?: ComponentStyle_2;
857
+ /** 需要小计的列字段(组尾输出合计行;数值列求和,其余输出首值/留空) */
858
+ subtotal?: string[];
859
+ subtotalStyle?: ComponentStyle_2;
860
+ subtotalLabel?: string;
861
+ /** 组头防孤行(默认 true:页尾放不下"组头+首行"时整体换页) */
862
+ keepWithNext?: boolean;
863
+ aggregates?: AggregateDefinition_2[];
864
+ /** Repeat this group heading after page breaks within the group. */
865
+ repeatHeader?: boolean;
866
+ }
867
+ /** 分组小计配置(声明式,见 ListComponent.groupBy) */
868
+ declare interface ListGroupBy_3 {
869
+ /** 分组字段(值变化即切组) */
870
+ field: string;
871
+ /** 组头文案模板,{value} 占位(默认 "{value}") */
872
+ headerTemplate?: string;
873
+ headerStyle?: ComponentStyle_3;
874
+ /** 需要小计的列字段(组尾输出合计行;数值列求和,其余输出首值/留空) */
875
+ subtotal?: string[];
876
+ subtotalStyle?: ComponentStyle_3;
877
+ subtotalLabel?: string;
878
+ /** 组头防孤行(默认 true:页尾放不下"组头+首行"时整体换页) */
879
+ keepWithNext?: boolean;
880
+ aggregates?: AggregateDefinition_3[];
881
+ /** Repeat this group heading after page breaks within the group. */
882
+ repeatHeader?: boolean;
237
883
  }
238
884
  /** defaults 层可配置项(全部可选,均有内置缺省) */
239
885
  declare interface MachReportDefaults {
@@ -465,6 +1111,51 @@ declare interface MachReportToolbarOptions {
465
1111
  /** 未传时显示全部已有出口;空数组表示不提供导出工具。 */
466
1112
  exportFormats?: ReportExportFormat[];
467
1113
  }
1114
+ declare interface MatrixTableOptions {
1115
+ rowFields: readonly string[];
1116
+ columnFields: readonly string[];
1117
+ measures: readonly (AggregateDefinition & {
1118
+ label?: string;
1119
+ })[];
1120
+ totals?: boolean;
1121
+ rowHeader?: string;
1122
+ columnWidthMm?: number;
1123
+ rowWidthMm?: number;
1124
+ maxRows?: number;
1125
+ maxColumns?: number;
1126
+ maxInputRows?: number;
1127
+ maxCells?: number;
1128
+ }
1129
+ declare interface MatrixTableOptions_2 {
1130
+ rowFields: readonly string[];
1131
+ columnFields: readonly string[];
1132
+ measures: readonly (AggregateDefinition_2 & {
1133
+ label?: string;
1134
+ })[];
1135
+ totals?: boolean;
1136
+ rowHeader?: string;
1137
+ columnWidthMm?: number;
1138
+ rowWidthMm?: number;
1139
+ maxRows?: number;
1140
+ maxColumns?: number;
1141
+ maxInputRows?: number;
1142
+ maxCells?: number;
1143
+ }
1144
+ declare interface MatrixTableOptions_3 {
1145
+ rowFields: readonly string[];
1146
+ columnFields: readonly string[];
1147
+ measures: readonly (AggregateDefinition_3 & {
1148
+ label?: string;
1149
+ })[];
1150
+ totals?: boolean;
1151
+ rowHeader?: string;
1152
+ columnWidthMm?: number;
1153
+ rowWidthMm?: number;
1154
+ maxRows?: number;
1155
+ maxColumns?: number;
1156
+ maxInputRows?: number;
1157
+ maxCells?: number;
1158
+ }
468
1159
  declare interface OutputDiagnostic {
469
1160
  code: "missing-image" | "unsupported-component" | "unsupported-image-format" | "unsupported-style" | "rich-text-flattened" | "nested-components-omitted" | "async-image-required" | "image-decode-failed" | "asset-render-failed" | "asset-budget-exceeded";
470
1161
  severity: "warning";
@@ -484,13 +1175,69 @@ declare interface OutputDiagnosticOptions extends OutputTaskOptions {
484
1175
  fidelity?: "warn" | "strict";
485
1176
  }
486
1177
  declare type OutputFormat = "dom" | "canvas" | "pdf" | "xlsx";
1178
+ declare type OutputFormat_2 = "dom" | "canvas" | "pdf" | "xlsx";
487
1179
  /** Stage counts are exact completed units; encoding libraries may remain indeterminate. */
488
1180
  declare interface OutputTaskOptions {
489
1181
  signal?: AbortSignal;
490
1182
  onProgress?: (completed: number, total: number) => void;
491
1183
  }
492
- declare interface PlanComponent {
493
- kind: ComponentKind;
1184
+ /** Stage counts are exact completed units; encoding libraries may remain indeterminate. */
1185
+ declare interface OutputTaskOptions_2 {
1186
+ signal?: AbortSignal;
1187
+ onProgress?: (completed: number, total: number) => void;
1188
+ }
1189
+ declare interface PlanComponent {
1190
+ /** Template page furniture repeats per page and reserves its vertical band. */
1191
+ pageAnchor?: "header" | "footer";
1192
+ kind: ComponentKind;
1193
+ leftMm: number;
1194
+ topMm: number;
1195
+ widthMm: number;
1196
+ heightMm: number;
1197
+ nid?: string;
1198
+ rkey?: string;
1199
+ text?: string;
1200
+ rawText?: string;
1201
+ lines?: string[];
1202
+ richParagraphs?: RichParagraph[];
1203
+ imageData?: string;
1204
+ /** 明确指定线段方向;省略保持历史水平线行为。 */
1205
+ lineDirection?: "down" | "up";
1206
+ grid?: PlanGrid;
1207
+ table?: PlanTableFragment;
1208
+ style?: ComponentStyle;
1209
+ meta?: Record<string, unknown>;
1210
+ /** MachReport 扩展字段:未知 kind 的兜底渲染标记 */
1211
+ fallbackText?: string;
1212
+ }
1213
+ declare interface PlanComponent_2 {
1214
+ /** Template page furniture repeats per page and reserves its vertical band. */
1215
+ pageAnchor?: "header" | "footer";
1216
+ kind: ComponentKind_2;
1217
+ leftMm: number;
1218
+ topMm: number;
1219
+ widthMm: number;
1220
+ heightMm: number;
1221
+ nid?: string;
1222
+ rkey?: string;
1223
+ text?: string;
1224
+ rawText?: string;
1225
+ lines?: string[];
1226
+ richParagraphs?: RichParagraph_2[];
1227
+ imageData?: string;
1228
+ /** 明确指定线段方向;省略保持历史水平线行为。 */
1229
+ lineDirection?: "down" | "up";
1230
+ grid?: PlanGrid_2;
1231
+ table?: PlanTableFragment_2;
1232
+ style?: ComponentStyle_2;
1233
+ meta?: Record<string, unknown>;
1234
+ /** MachReport 扩展字段:未知 kind 的兜底渲染标记 */
1235
+ fallbackText?: string;
1236
+ }
1237
+ declare interface PlanComponent_3 {
1238
+ /** Template page furniture repeats per page and reserves its vertical band. */
1239
+ pageAnchor?: "header" | "footer";
1240
+ kind: ComponentKind_3;
494
1241
  leftMm: number;
495
1242
  topMm: number;
496
1243
  widthMm: number;
@@ -500,13 +1247,13 @@ declare interface PlanComponent {
500
1247
  text?: string;
501
1248
  rawText?: string;
502
1249
  lines?: string[];
503
- richParagraphs?: RichParagraph[];
1250
+ richParagraphs?: RichParagraph_3[];
504
1251
  imageData?: string;
505
1252
  /** 明确指定线段方向;省略保持历史水平线行为。 */
506
1253
  lineDirection?: "down" | "up";
507
- grid?: PlanGrid;
508
- table?: PlanTableFragment;
509
- style?: ComponentStyle;
1254
+ grid?: PlanGrid_3;
1255
+ table?: PlanTableFragment_3;
1256
+ style?: ComponentStyle_3;
510
1257
  meta?: Record<string, unknown>;
511
1258
  /** MachReport 扩展字段:未知 kind 的兜底渲染标记 */
512
1259
  fallbackText?: string;
@@ -520,6 +1267,24 @@ declare interface PlanGrid {
520
1267
  /** 单元格四边内距;旧静态网格默认 0.5mm,分页列表使用其真实测量内距。 */
521
1268
  paddingMm?: number;
522
1269
  }
1270
+ declare interface PlanGrid_2 {
1271
+ /** 行内允许 null 空位;渲染器按空单元格处理 */
1272
+ cells: (GridCell_2 | null)[][];
1273
+ colWidthsMm?: number[];
1274
+ rowHeightsMm?: number[];
1275
+ gapMm?: number;
1276
+ /** 单元格四边内距;旧静态网格默认 0.5mm,分页列表使用其真实测量内距。 */
1277
+ paddingMm?: number;
1278
+ }
1279
+ declare interface PlanGrid_3 {
1280
+ /** 行内允许 null 空位;渲染器按空单元格处理 */
1281
+ cells: (GridCell_3 | null)[][];
1282
+ colWidthsMm?: number[];
1283
+ rowHeightsMm?: number[];
1284
+ gapMm?: number;
1285
+ /** 单元格四边内距;旧静态网格默认 0.5mm,分页列表使用其真实测量内距。 */
1286
+ paddingMm?: number;
1287
+ }
523
1288
  /** 列表的逻辑行来源;用于连续 Excel 重组,避免按文本猜测重复表头。 */
524
1289
  declare interface PlanTableFragment {
525
1290
  /** 在整个计划中唯一的逻辑表身份;同一表的分页片段共享身份。 */
@@ -536,7 +1301,97 @@ declare interface PlanTableFragment {
536
1301
  rowKey?: string | number;
537
1302
  };
538
1303
  }
1304
+ /** 列表的逻辑行来源;用于连续 Excel 重组,避免按文本猜测重复表头。 */
1305
+ declare interface PlanTableFragment_2 {
1306
+ /** 在整个计划中唯一的逻辑表身份;同一表的分页片段共享身份。 */
1307
+ id: string;
1308
+ /** 表头固定 -1;其余行(包括组头/小计/总计)从 0 连续递增。 */
1309
+ rowIndex: number;
1310
+ role: "header" | "body" | "group-header" | "subtotal" | "grand-total";
1311
+ /** 按物理列顺序保存字段身份;不以表头显示文本判断列结构。 */
1312
+ columnKeys: string[];
1313
+ layout?: "page" | "wide";
1314
+ title?: string;
1315
+ /** 只有宿主声明稳定 rowKey 时生成,不能用显示顺序替代业务主键。 */
1316
+ source?: Omit<ReportCellSource_2, "field" | "rowKey"> & {
1317
+ rowKey?: string | number;
1318
+ };
1319
+ }
1320
+ /** 列表的逻辑行来源;用于连续 Excel 重组,避免按文本猜测重复表头。 */
1321
+ declare interface PlanTableFragment_3 {
1322
+ /** 在整个计划中唯一的逻辑表身份;同一表的分页片段共享身份。 */
1323
+ id: string;
1324
+ /** 表头固定 -1;其余行(包括组头/小计/总计)从 0 连续递增。 */
1325
+ rowIndex: number;
1326
+ role: "header" | "body" | "group-header" | "subtotal" | "grand-total";
1327
+ /** 按物理列顺序保存字段身份;不以表头显示文本判断列结构。 */
1328
+ columnKeys: string[];
1329
+ layout?: "page" | "wide";
1330
+ title?: string;
1331
+ /** 只有宿主声明稳定 rowKey 时生成,不能用显示顺序替代业务主键。 */
1332
+ source?: Omit<ReportCellSource_3, "field" | "rowKey"> & {
1333
+ rowKey?: string | number;
1334
+ };
1335
+ }
539
1336
  declare const PRODUCT_TEMPLATE_EDITOR_MESSAGES: {
1337
+ repeatPage: string;
1338
+ repeatNone: string;
1339
+ repeatHeader: string;
1340
+ repeatFooter: string;
1341
+ textFormat: string;
1342
+ fontSize: string;
1343
+ fontBold: string;
1344
+ textColor: string;
1345
+ backgroundColor: string;
1346
+ canvasGridLimited: string;
1347
+ design: string;
1348
+ preview: string;
1349
+ componentSection: string;
1350
+ toolsSection: string;
1351
+ component: string;
1352
+ components: string;
1353
+ canvasHint: string;
1354
+ zoom: string;
1355
+ sampleRows: string;
1356
+ resizeComponent: string;
1357
+ resizeColumn: string;
1358
+ insertComponent: string;
1359
+ insertText: string;
1360
+ insertList: string;
1361
+ insertImage: string;
1362
+ insertRect: string;
1363
+ removeComponent: string;
1364
+ duplicateComponent: string;
1365
+ forward: string;
1366
+ backward: string;
1367
+ positionGroup: string;
1368
+ componentContent: string;
1369
+ componentText: string;
1370
+ imageSource: string;
1371
+ imageUpload: string;
1372
+ imageBudget: string;
1373
+ leftPosition: string;
1374
+ topPosition: string;
1375
+ componentWidth: string;
1376
+ componentHeight: string;
1377
+ noComponent: string;
1378
+ listDataset: string;
1379
+ columnOrder: string;
1380
+ moveColumnLeft: string;
1381
+ moveColumnRight: string;
1382
+ columnVisible: string;
1383
+ headerStructure: string;
1384
+ addHeaderRow: string;
1385
+ mergeHeader: string;
1386
+ splitHeader: string;
1387
+ headerRow: string;
1388
+ headerFirst: string;
1389
+ headerLast: string;
1390
+ excelTool: string;
1391
+ rulesTool: string;
1392
+ reviewTool: string;
1393
+ toolsDescription: string;
1394
+ rulesNeedList: string;
540
1395
  undo: string;
541
1396
  redo: string;
542
1397
  columnsSearch: string;
@@ -569,6 +1424,15 @@ declare const PRODUCT_TEMPLATE_EDITOR_MESSAGES: {
569
1424
  readonly: string;
570
1425
  ready: string;
571
1426
  previewTitle: string;
1427
+ contentGroup: string;
1428
+ formatGroup: string;
1429
+ autoShort: string;
1430
+ previousColumn: string;
1431
+ nextColumn: string;
1432
+ closeDirectory: string;
1433
+ technicalDetails: string;
1434
+ fieldPosition: string;
1435
+ previewFieldDirectory: string;
572
1436
  };
573
1437
  /** Return false to keep the current report. Without a hook the preview asks inline. */
574
1438
  declare type ReportBeforeDiscard = (context: Readonly<ReportBeforeDiscardContext>) => boolean | Promise<boolean>;
@@ -675,6 +1539,22 @@ declare interface ReportCellSource {
675
1539
  revision?: string | number;
676
1540
  sourceToken?: string;
677
1541
  }
1542
+ /** 可持久化的业务身份与计划坐标独立;权限及并发校验仍由业务服务器执行。 */
1543
+ declare interface ReportCellSource_2 {
1544
+ datasetId: string;
1545
+ rowKey: string | number;
1546
+ field: string;
1547
+ revision?: string | number;
1548
+ sourceToken?: string;
1549
+ }
1550
+ /** 可持久化的业务身份与计划坐标独立;权限及并发校验仍由业务服务器执行。 */
1551
+ declare interface ReportCellSource_3 {
1552
+ datasetId: string;
1553
+ rowKey: string | number;
1554
+ field: string;
1555
+ revision?: string | number;
1556
+ sourceToken?: string;
1557
+ }
678
1558
  declare interface ReportCellTableIdentity {
679
1559
  id: string;
680
1560
  /** 逻辑表行索引;跨分页的同一行保持不变。 */
@@ -726,6 +1606,84 @@ declare interface ReportEditResult {
726
1606
  }
727
1607
  /** 输出能力仍由宿主授权;工具偏好只决定当前预览实例的可见与启用状态。 */
728
1608
  declare type ReportExportFormat = "html" | "pdf" | "xlsx" | "png" | "word";
1609
+ declare type ReportExpression = {
1610
+ field: string;
1611
+ } | {
1612
+ value: string | number | boolean | null;
1613
+ } | {
1614
+ aggregate: AggregateOperation;
1615
+ field?: string;
1616
+ weightField?: string;
1617
+ } | {
1618
+ op: "add" | "subtract" | "multiply" | "divide" | "coalesce";
1619
+ args: readonly ReportExpression[];
1620
+ };
1621
+ declare type ReportExpression_2 = {
1622
+ field: string;
1623
+ } | {
1624
+ value: string | number | boolean | null;
1625
+ } | {
1626
+ aggregate: AggregateOperation_2;
1627
+ field?: string;
1628
+ weightField?: string;
1629
+ } | {
1630
+ op: "add" | "subtract" | "multiply" | "divide" | "coalesce";
1631
+ args: readonly ReportExpression_2[];
1632
+ };
1633
+ declare type ReportExpression_3 = {
1634
+ field: string;
1635
+ } | {
1636
+ value: string | number | boolean | null;
1637
+ } | {
1638
+ aggregate: AggregateOperation_3;
1639
+ field?: string;
1640
+ weightField?: string;
1641
+ } | {
1642
+ op: "add" | "subtract" | "multiply" | "divide" | "coalesce";
1643
+ args: readonly ReportExpression_3[];
1644
+ };
1645
+ declare interface ReportFieldContract {
1646
+ field: string;
1647
+ label?: string;
1648
+ type: "text" | "number" | "boolean" | "date" | "decimal";
1649
+ required?: boolean;
1650
+ nullable?: boolean;
1651
+ enum?: readonly (string | number | boolean)[];
1652
+ min?: number;
1653
+ max?: number;
1654
+ minLength?: number;
1655
+ maxLength?: number;
1656
+ semanticRole?: "identifier" | "dimension" | "measure" | "date" | "text";
1657
+ unit?: string;
1658
+ }
1659
+ declare interface ReportFieldContract_2 {
1660
+ field: string;
1661
+ label?: string;
1662
+ type: "text" | "number" | "boolean" | "date" | "decimal";
1663
+ required?: boolean;
1664
+ nullable?: boolean;
1665
+ enum?: readonly (string | number | boolean)[];
1666
+ min?: number;
1667
+ max?: number;
1668
+ minLength?: number;
1669
+ maxLength?: number;
1670
+ semanticRole?: "identifier" | "dimension" | "measure" | "date" | "text";
1671
+ unit?: string;
1672
+ }
1673
+ declare interface ReportFieldContract_3 {
1674
+ field: string;
1675
+ label?: string;
1676
+ type: "text" | "number" | "boolean" | "date" | "decimal";
1677
+ required?: boolean;
1678
+ nullable?: boolean;
1679
+ enum?: readonly (string | number | boolean)[];
1680
+ min?: number;
1681
+ max?: number;
1682
+ minLength?: number;
1683
+ maxLength?: number;
1684
+ semanticRole?: "identifier" | "dimension" | "measure" | "date" | "text";
1685
+ unit?: string;
1686
+ }
729
1687
  declare interface ReportInteractionOptions {
730
1688
  /** 只读选区计算,默认关闭;不写回业务值或执行导入的 Excel 公式。 */
731
1689
  calculations?: boolean;
@@ -761,6 +1719,48 @@ declare interface ReportParamDef {
761
1719
  minLength?: number;
762
1720
  maxLength?: number;
763
1721
  }
1722
+ /** 报表参数定义(声明式,模板自描述参数面:渲染组件据此生成查询面板) */
1723
+ declare interface ReportParamDef_2 {
1724
+ /** 参数名(传入 params,与数据集 SQL #{field} 绑定对应) */
1725
+ field: string;
1726
+ /** 显示名(缺省用 field) */
1727
+ label?: string;
1728
+ type?: "text" | "number" | "date" | "select";
1729
+ /** select 选项 */
1730
+ options?: Array<{
1731
+ label: string;
1732
+ value: string;
1733
+ }>;
1734
+ defaultValue?: string;
1735
+ required?: boolean;
1736
+ placeholder?: string;
1737
+ /** 数字上下界;date 参数使用 YYYY-MM-DD 字符串(含边界)。 */
1738
+ min?: number | string;
1739
+ max?: number | string;
1740
+ minLength?: number;
1741
+ maxLength?: number;
1742
+ }
1743
+ /** 报表参数定义(声明式,模板自描述参数面:渲染组件据此生成查询面板) */
1744
+ declare interface ReportParamDef_3 {
1745
+ /** 参数名(传入 params,与数据集 SQL #{field} 绑定对应) */
1746
+ field: string;
1747
+ /** 显示名(缺省用 field) */
1748
+ label?: string;
1749
+ type?: "text" | "number" | "date" | "select";
1750
+ /** select 选项 */
1751
+ options?: Array<{
1752
+ label: string;
1753
+ value: string;
1754
+ }>;
1755
+ defaultValue?: string;
1756
+ required?: boolean;
1757
+ placeholder?: string;
1758
+ /** 数字上下界;date 参数使用 YYYY-MM-DD 字符串(含边界)。 */
1759
+ min?: number | string;
1760
+ max?: number | string;
1761
+ minLength?: number;
1762
+ maxLength?: number;
1763
+ }
764
1764
  declare interface ReportPreferencesAdapter {
765
1765
  load(key: string): Partial<ReportPreviewPreferences> | null | Promise<Partial<ReportPreviewPreferences> | null>;
766
1766
  save(key: string, value: Readonly<Partial<ReportPreviewPreferences>>): void | Promise<void>;
@@ -779,6 +1779,18 @@ declare interface ReportTemplate {
779
1779
  params?: ReportParamDef[];
780
1780
  pages: TemplatePage[];
781
1781
  }
1782
+ declare interface ReportTemplate_2 {
1783
+ schemaVersion?: string;
1784
+ /** 参数定义(可选;宿主也可经 ReportPreview 的 paramDefs prop 提供,prop 优先) */
1785
+ params?: ReportParamDef_2[];
1786
+ pages: TemplatePage_2[];
1787
+ }
1788
+ declare interface ReportTemplate_3 {
1789
+ schemaVersion?: string;
1790
+ /** 参数定义(可选;宿主也可经 ReportPreview 的 paramDefs prop 提供,prop 优先) */
1791
+ params?: ReportParamDef_3[];
1792
+ pages: TemplatePage_3[];
1793
+ }
782
1794
  /** 可存入数据库/文件的纯 JSON 模板;数据、接口与鉴权仍由宿主提供。 */
783
1795
  declare interface ReportTemplateDocument {
784
1796
  schemaVersion: "1.0";
@@ -789,6 +1801,26 @@ declare interface ReportTemplateDocument {
789
1801
  description?: string;
790
1802
  template: ReportTemplate;
791
1803
  }
1804
+ /** 可存入数据库/文件的纯 JSON 模板;数据、接口与鉴权仍由宿主提供。 */
1805
+ declare interface ReportTemplateDocument_2 {
1806
+ schemaVersion: "1.0";
1807
+ id: string;
1808
+ name: string;
1809
+ /** 宿主的发布版本/乐观锁标识,不由引擎自动递增。 */
1810
+ revision?: string;
1811
+ description?: string;
1812
+ template: ReportTemplate_2;
1813
+ }
1814
+ /** 可存入数据库/文件的纯 JSON 模板;数据、接口与鉴权仍由宿主提供。 */
1815
+ declare interface ReportTemplateDocument_3 {
1816
+ schemaVersion: "1.0";
1817
+ id: string;
1818
+ name: string;
1819
+ /** 宿主的发布版本/乐观锁标识,不由引擎自动递增。 */
1820
+ revision?: string;
1821
+ description?: string;
1822
+ template: ReportTemplate_3;
1823
+ }
792
1824
  export declare const ReportTemplateEditor: DefineComponent<TemplateEditorOptions, {
793
1825
  pendingLocalChanges: boolean;
794
1826
  saving: boolean;
@@ -799,10 +1831,22 @@ export declare const ReportTemplateEditor: DefineComponent<TemplateEditorOptions
799
1831
  }, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & {
800
1832
  "update:modelValue": (document: ReportTemplateDocument) => any;
801
1833
  saved: (document: ReportTemplateDocument) => any;
1834
+ "excel-bound": (result: ExcelBindingWizardApply) => any;
802
1835
  }, string, MachReportVuePublicProps, Readonly<TemplateEditorOptions> & Readonly<{
803
1836
  "onUpdate:modelValue"?: ((document: ReportTemplateDocument) => any) | undefined;
804
1837
  onSaved?: ((document: ReportTemplateDocument) => any) | undefined;
1838
+ "onExcel-bound"?: ((result: ExcelBindingWizardApply) => any) | undefined;
805
1839
  }>, {}>;
1840
+ declare interface ReportTemplateReviewIssue {
1841
+ code: "template" | "compatibility" | "dataset" | "field" | "sample" | "layout" | "output";
1842
+ severity: "error" | "warning";
1843
+ path: string;
1844
+ message: string;
1845
+ fixture?: string;
1846
+ pageIndex?: number;
1847
+ componentIndex?: number;
1848
+ field?: string;
1849
+ }
806
1850
  declare interface RichParagraph {
807
1851
  segments: RichSegment[];
808
1852
  align?: ComponentStyle["align"];
@@ -811,23 +1855,266 @@ declare interface RichParagraph {
811
1855
  spaceAfterMm?: number;
812
1856
  indentMm?: number;
813
1857
  }
1858
+ declare interface RichParagraph_2 {
1859
+ segments: RichSegment_2[];
1860
+ align?: ComponentStyle_2["align"];
1861
+ lineHeight?: number;
1862
+ spaceBeforeMm?: number;
1863
+ spaceAfterMm?: number;
1864
+ indentMm?: number;
1865
+ }
1866
+ declare interface RichParagraph_3 {
1867
+ segments: RichSegment_3[];
1868
+ align?: ComponentStyle_3["align"];
1869
+ lineHeight?: number;
1870
+ spaceBeforeMm?: number;
1871
+ spaceAfterMm?: number;
1872
+ indentMm?: number;
1873
+ }
814
1874
  declare interface RichSegment {
815
1875
  kind?: "text" | "field";
816
1876
  text?: string;
817
1877
  field?: string;
818
1878
  style?: ComponentStyle;
819
1879
  }
1880
+ declare interface RichSegment_2 {
1881
+ kind?: "text" | "field";
1882
+ text?: string;
1883
+ field?: string;
1884
+ style?: ComponentStyle_2;
1885
+ }
1886
+ declare interface RichSegment_3 {
1887
+ kind?: "text" | "field";
1888
+ text?: string;
1889
+ field?: string;
1890
+ style?: ComponentStyle_3;
1891
+ }
1892
+ /** Optional rule-editor copy; hosts can override without changing core/report messages. */
1893
+ export declare const RULE_EDITOR_MESSAGES: {
1894
+ detail: string;
1895
+ matrix: string;
1896
+ measureLabel: string;
1897
+ childDataset: string;
1898
+ parentKey: string;
1899
+ foreignKey: string;
1900
+ rowKey: string;
1901
+ noRowKey: string;
1902
+ childColumns: string;
1903
+ title: string;
1904
+ unmatched: string;
1905
+ ignore: string;
1906
+ childHeader: string;
1907
+ rowFields: string;
1908
+ columnFields: string;
1909
+ totals: string;
1910
+ widthSettings: string;
1911
+ dimensionWidth: string;
1912
+ measureWidth: string;
1913
+ detailHint: string;
1914
+ matrixHint: string;
1915
+ computations: string;
1916
+ groups: string;
1917
+ conditions: string;
1918
+ target: string;
1919
+ newField: string;
1920
+ select: string;
1921
+ row: string;
1922
+ group: string;
1923
+ dataset: string;
1924
+ scope: string;
1925
+ numeric: string;
1926
+ number: string;
1927
+ decimal: string;
1928
+ digits: string;
1929
+ groupFields: string;
1930
+ field: string;
1931
+ constant: string;
1932
+ operation: string;
1933
+ aggregate: string;
1934
+ text: string;
1935
+ boolean: string;
1936
+ null: string;
1937
+ true: string;
1938
+ false: string;
1939
+ add: string;
1940
+ subtract: string;
1941
+ multiply: string;
1942
+ divide: string;
1943
+ coalesce: string;
1944
+ sum: string;
1945
+ count: string;
1946
+ avg: string;
1947
+ min: string;
1948
+ max: string;
1949
+ weightedAvg: string;
1950
+ subtotalLabel: string;
1951
+ weight: string;
1952
+ argument: string;
1953
+ addArgument: string;
1954
+ remove: string;
1955
+ apply: string;
1956
+ check: string;
1957
+ addGroup: string;
1958
+ noGroups: string;
1959
+ header: string;
1960
+ footer: string;
1961
+ repeat: string;
1962
+ orphan: string;
1963
+ outer: string;
1964
+ inner: string;
1965
+ addAggregate: string;
1966
+ measure: string;
1967
+ output: string;
1968
+ condition: string;
1969
+ comparison: string;
1970
+ threshold: string;
1971
+ effect: string;
1972
+ style: string;
1973
+ cell: string;
1974
+ rowVisibility: string;
1975
+ color: string;
1976
+ background: string;
1977
+ bold: string;
1978
+ column: string;
1979
+ newCondition: string;
1980
+ removeCondition: string;
1981
+ advanced: string;
1982
+ nulls: string;
1983
+ propagate: string;
1984
+ error: string;
1985
+ division: string;
1986
+ dependencies: string;
1987
+ noData: string;
1988
+ sample: string;
1989
+ preview: string;
1990
+ existing: string;
1991
+ ready: string;
1992
+ allRows: string;
1993
+ noFields: string;
1994
+ resultType: string;
1995
+ settings: string;
1996
+ moveUp: string;
1997
+ moveDown: string;
1998
+ missingTarget: string;
1999
+ noSelection: string;
2000
+ countHint: string;
2001
+ decimalHint: string;
2002
+ readonly: string;
2003
+ formatMode: string;
2004
+ rule: string;
2005
+ sampleError: string;
2006
+ new: string;
2007
+ enabled: string;
2008
+ };
2009
+ export declare const RuleEditor: DefineComponent<RuleEditorOptions, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & {
2010
+ change: (value: ListComponent_3) => any;
2011
+ }, string, MachReportVuePublicProps, Readonly<RuleEditorOptions> & Readonly<{
2012
+ onChange?: ((value: ListComponent_3) => any) | undefined;
2013
+ }>, {}>;
2014
+ export declare type RuleEditorMessages = typeof RULE_EDITOR_MESSAGES;
2015
+ export declare interface RuleEditorOptions {
2016
+ list: ListComponent_2;
2017
+ datasets?: DatasetRows_3;
2018
+ datasetSchema?: DatasetContract_3;
2019
+ datasetSchemas?: Record<string, DatasetContract_3>;
2020
+ readonly?: boolean;
2021
+ messages?: Partial<RuleEditorMessages>;
2022
+ }
820
2023
  /** 条件格式规则求值(声明式,见 ListColumn.rules) */
821
2024
  declare interface StyleRule {
822
2025
  when: {
823
2026
  field: string;
824
2027
  op: ">" | ">=" | "<" | "<=" | "==" | "!=";
825
2028
  value: number | string;
2029
+ /** Explicit decimal comparisons retain decimal thresholds as text. */
2030
+ numeric?: "number" | "decimal";
2031
+ };
2032
+ /** 命中时合并进单元格样式(color/bold/backgroundColor 等) */
2033
+ style: Record<string, unknown>;
2034
+ }
2035
+ /** 条件格式规则求值(声明式,见 ListColumn.rules) */
2036
+ declare interface StyleRule_2 {
2037
+ when: {
2038
+ field: string;
2039
+ op: ">" | ">=" | "<" | "<=" | "==" | "!=";
2040
+ value: number | string;
2041
+ /** Explicit decimal comparisons retain decimal thresholds as text. */
2042
+ numeric?: "number" | "decimal";
2043
+ };
2044
+ /** 命中时合并进单元格样式(color/bold/backgroundColor 等) */
2045
+ style: Record<string, unknown>;
2046
+ }
2047
+ /** 条件格式规则求值(声明式,见 ListColumn.rules) */
2048
+ declare interface StyleRule_3 {
2049
+ when: {
2050
+ field: string;
2051
+ op: ">" | ">=" | "<" | "<=" | "==" | "!=";
2052
+ value: number | string;
2053
+ /** Explicit decimal comparisons retain decimal thresholds as text. */
2054
+ numeric?: "number" | "decimal";
826
2055
  };
827
2056
  /** 命中时合并进单元格样式(color/bold/backgroundColor 等) */
828
2057
  style: Record<string, unknown>;
829
2058
  }
830
2059
  export declare const TEMPLATE_EDITOR_MESSAGES: {
2060
+ repeatPage: string;
2061
+ repeatNone: string;
2062
+ repeatHeader: string;
2063
+ repeatFooter: string;
2064
+ textFormat: string;
2065
+ fontSize: string;
2066
+ fontBold: string;
2067
+ textColor: string;
2068
+ backgroundColor: string;
2069
+ canvasGridLimited: string;
2070
+ design: string;
2071
+ preview: string;
2072
+ componentSection: string;
2073
+ toolsSection: string;
2074
+ component: string;
2075
+ components: string;
2076
+ canvasHint: string;
2077
+ zoom: string;
2078
+ sampleRows: string;
2079
+ resizeComponent: string;
2080
+ resizeColumn: string;
2081
+ insertComponent: string;
2082
+ insertText: string;
2083
+ insertList: string;
2084
+ insertImage: string;
2085
+ insertRect: string;
2086
+ removeComponent: string;
2087
+ duplicateComponent: string;
2088
+ forward: string;
2089
+ backward: string;
2090
+ positionGroup: string;
2091
+ componentContent: string;
2092
+ componentText: string;
2093
+ imageSource: string;
2094
+ imageUpload: string;
2095
+ imageBudget: string;
2096
+ leftPosition: string;
2097
+ topPosition: string;
2098
+ componentWidth: string;
2099
+ componentHeight: string;
2100
+ noComponent: string;
2101
+ listDataset: string;
2102
+ columnOrder: string;
2103
+ moveColumnLeft: string;
2104
+ moveColumnRight: string;
2105
+ columnVisible: string;
2106
+ headerStructure: string;
2107
+ addHeaderRow: string;
2108
+ mergeHeader: string;
2109
+ splitHeader: string;
2110
+ headerRow: string;
2111
+ headerFirst: string;
2112
+ headerLast: string;
2113
+ excelTool: string;
2114
+ rulesTool: string;
2115
+ reviewTool: string;
2116
+ toolsDescription: string;
2117
+ rulesNeedList: string;
831
2118
  undo: string;
832
2119
  redo: string;
833
2120
  columnsSearch: string;
@@ -860,6 +2147,15 @@ export declare const TEMPLATE_EDITOR_MESSAGES: {
860
2147
  readonly: string;
861
2148
  ready: string;
862
2149
  previewTitle: string;
2150
+ contentGroup: string;
2151
+ formatGroup: string;
2152
+ autoShort: string;
2153
+ previousColumn: string;
2154
+ nextColumn: string;
2155
+ closeDirectory: string;
2156
+ technicalDetails: string;
2157
+ fieldPosition: string;
2158
+ previewFieldDirectory: string;
863
2159
  title: string;
864
2160
  heading: string;
865
2161
  unpublished: string;
@@ -893,7 +2189,50 @@ export declare const TEMPLATE_EDITOR_MESSAGES: {
893
2189
  note: string;
894
2190
  invalid: string;
895
2191
  };
2192
+ export declare const TEMPLATE_REVIEW_MESSAGES: {
2193
+ title: string;
2194
+ run: string;
2195
+ running: string;
2196
+ samples: string;
2197
+ none: string;
2198
+ first20: string;
2199
+ first100: string;
2200
+ all: string;
2201
+ changes: string;
2202
+ issues: string;
2203
+ results: string;
2204
+ noChanges: string;
2205
+ noIssues: string;
2206
+ empty: string;
2207
+ baseline: string;
2208
+ errors: string;
2209
+ warnings: string;
2210
+ locate: string;
2211
+ before: string;
2212
+ after: string;
2213
+ breaking: string;
2214
+ acknowledge: string;
2215
+ truncated: string;
2216
+ pages: string;
2217
+ rows: string;
2218
+ checked: string;
2219
+ categories: {
2220
+ metadata: string;
2221
+ structure: string;
2222
+ binding: string;
2223
+ calculation: string;
2224
+ format: string;
2225
+ };
2226
+ kinds: {
2227
+ added: string;
2228
+ removed: string;
2229
+ modified: string;
2230
+ moved: string;
2231
+ };
2232
+ };
896
2233
  declare type TemplateComponent = PlanComponent | ListComponent;
2234
+ declare type TemplateComponent_2 = PlanComponent_2 | ListComponent_2;
2235
+ declare type TemplateComponent_3 = PlanComponent_3 | ListComponent_3;
897
2236
  export declare type TemplateEditorBeforeDiscard = (context: TemplateEditorBeforeDiscardContext) => boolean | Promise<boolean>;
898
2237
  export declare interface TemplateEditorBeforeDiscardContext {
899
2238
  reason: "reset" | "replace";
@@ -915,6 +2254,10 @@ export declare type TemplateEditorMessages = typeof BASE_TEMPLATE_EDITOR_MESSAGE
915
2254
  export declare interface TemplateEditorOptions {
916
2255
  modelValue: ReportTemplateDocument;
917
2256
  datasets?: DatasetRows;
2257
+ dataSchemas?: Record<string, DatasetContract>;
2258
+ bindingDatasets?: ExcelBindingDataset[];
2259
+ /** Optional independently persisted Excel source and binding recipe. */
2260
+ bindingSession?: ExcelBindingSession;
918
2261
  readonly?: boolean;
919
2262
  messages?: Partial<TemplateEditorMessages>;
920
2263
  preview?: Pick<MachReportDefaults, "showExport" | "showPrint" | "showPdfWindow" | "theme" | "assets" | "pdfFontUrl" | "toolbar">;
@@ -936,6 +2279,48 @@ declare interface TemplatePage {
936
2279
  marginRightMm?: number;
937
2280
  components: TemplateComponent[];
938
2281
  }
2282
+ declare interface TemplatePage_2 {
2283
+ widthMm: number;
2284
+ heightMm: number;
2285
+ /** 宽表保持全列自然宽度,页高只控制内部纵向分段。 */
2286
+ layout?: "page" | "wide";
2287
+ marginTopMm?: number;
2288
+ marginBottomMm?: number;
2289
+ marginLeftMm?: number;
2290
+ marginRightMm?: number;
2291
+ components: TemplateComponent_2[];
2292
+ }
2293
+ declare interface TemplatePage_3 {
2294
+ widthMm: number;
2295
+ heightMm: number;
2296
+ /** 宽表保持全列自然宽度,页高只控制内部纵向分段。 */
2297
+ layout?: "page" | "wide";
2298
+ marginTopMm?: number;
2299
+ marginBottomMm?: number;
2300
+ marginLeftMm?: number;
2301
+ marginRightMm?: number;
2302
+ components: TemplateComponent_3[];
2303
+ }
2304
+ export declare type TemplateReviewMessages = typeof TEMPLATE_REVIEW_MESSAGES;
2305
+ export declare const TemplateReviewPanel: DefineComponent<{
2306
+ document: ReportTemplateDocument_3;
2307
+ previous?: ReportTemplateDocument_3;
2308
+ datasets?: DatasetRows_2;
2309
+ dataSchemas?: Readonly<Record<string, DatasetContract_2>>;
2310
+ formats?: readonly OutputFormat_2[];
2311
+ messages?: Partial<TemplateReviewMessages>;
2312
+ }, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & {
2313
+ locate: (value: Pick<ReportTemplateReviewIssue, "field" | "path" | "pageIndex" | "componentIndex">) => any;
2314
+ }, string, MachReportVuePublicProps, Readonly<{
2315
+ document: ReportTemplateDocument_3;
2316
+ previous?: ReportTemplateDocument_3;
2317
+ datasets?: DatasetRows_2;
2318
+ dataSchemas?: Readonly<Record<string, DatasetContract_2>>;
2319
+ formats?: readonly OutputFormat_2[];
2320
+ messages?: Partial<TemplateReviewMessages>;
2321
+ }> & Readonly<{
2322
+ onLocate?: ((value: Pick<ReportTemplateReviewIssue, "field" | "path" | "pageIndex" | "componentIndex">) => any) | undefined;
2323
+ }>, {}>;
939
2324
  /**
940
2325
  * RenderPlan → xlsx 导出(B 端第二出口,对齐家族 @agile-team/mach-table-xlsx 路线):
941
2326
  * - 网格组件 → 真表格:列宽(mm→Excel 宽度)、行高(mm→pt)、colSpan/rowSpan 合并、