@agile-team/mach-report 2.8.4 → 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 (94) hide show
  1. package/README.md +27 -9
  2. package/dist/ExcelBindingWizard-DiaxvWpQ.cjs +1 -0
  3. package/dist/ExcelBindingWizard-RLJIXKKG.js +816 -0
  4. package/dist/{ReportPreview-DTWiCH5a.js → ReportPreview-B5ZNEasW.js} +22 -21
  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/analytics.cjs +1 -1
  11. package/dist/analytics.d.cts +188 -5
  12. package/dist/analytics.d.ts +188 -5
  13. package/dist/analytics.js +68 -202
  14. package/dist/{assets-B9qJku3V.js → assets-DDsfEi8R.js} +3 -3
  15. package/dist/{assets-RZan7EyL.cjs → assets-ahTRUXRk.cjs} +1 -1
  16. package/dist/binding-preview-B5834rml.cjs +2 -0
  17. package/dist/binding-preview-ChXjN5L5.js +649 -0
  18. package/dist/{capabilities-joSutDF8.js → capabilities-Cm9hZ3uV.js} +5 -5
  19. package/dist/{capabilities-xGTpnPjJ.cjs → capabilities-DYzWL7KS.cjs} +1 -1
  20. package/dist/dataset-BkRmwgeJ.cjs +1 -0
  21. package/dist/dataset-H5pFuQGU.js +121 -0
  22. package/dist/defaults-DXhiM1ZD.js +10 -0
  23. package/dist/defaults-xhmcLLrf.cjs +1 -0
  24. package/dist/designer.cjs +2 -1
  25. package/dist/designer.d.cts +1373 -6
  26. package/dist/designer.d.ts +1373 -6
  27. package/dist/designer.js +2495 -767
  28. package/dist/grid-geometry-BNptEcMm.js +65 -0
  29. package/dist/grid-geometry-CZ_cYB6O.cjs +1 -0
  30. package/dist/import-template-CNMLJSQw.js +23030 -0
  31. package/dist/import-template-CpxunKVp.cjs +29 -0
  32. package/dist/index.cjs +7 -7
  33. package/dist/index.d.cts +202 -3
  34. package/dist/index.d.ts +202 -3
  35. package/dist/index.js +554 -535
  36. package/dist/matrix-CNPDJxED.js +745 -0
  37. package/dist/matrix-Div9Ilh3.cjs +1 -0
  38. package/dist/pdf.cjs +46 -46
  39. package/dist/pdf.d.cts +2 -0
  40. package/dist/pdf.d.ts +2 -0
  41. package/dist/pdf.js +17 -16
  42. package/dist/{plugin-CQmJXNcA.js → plugin-BWwIgZXV.js} +1 -1
  43. package/dist/{plugin-DSFu51Ua.cjs → plugin-Dg-J1Rbm.cjs} +1 -1
  44. package/dist/progress-7OSZbFok.js +39 -0
  45. package/dist/progress-BnLiS5eH.cjs +1 -0
  46. package/dist/render-plan-7xpGrCEl.cjs +1 -0
  47. package/dist/render-plan-Ck6koX9L.js +13 -0
  48. package/dist/server/node.d.cts +62 -0
  49. package/dist/server/node.d.ts +62 -0
  50. package/dist/server-node.cjs +1 -1
  51. package/dist/server-node.js +373 -145
  52. package/dist/server.cjs +1 -1
  53. package/dist/server.d.cts +311 -0
  54. package/dist/server.d.ts +311 -0
  55. package/dist/server.js +590 -186
  56. package/dist/{style-Dv5o_x6b.js → style-CQ1PK8ZB.js} +5 -5
  57. package/dist/style-UgIJSA1F.cjs +1 -0
  58. package/dist/style.css +1 -1
  59. package/dist/template-registry-CHMYZ7SD.cjs +1 -0
  60. package/dist/template-registry-R61AMCr0.js +433 -0
  61. package/dist/template-review-hvWWQFsi.js +1027 -0
  62. package/dist/template-review-jEcOfmGr.cjs +1 -0
  63. package/dist/textwrap-CWHyzkBH.cjs +4 -0
  64. package/dist/{textwrap-DOl04hCQ.js → textwrap-DE1kgcJB.js} +1 -1
  65. package/dist/{validate-DfHPD8wX.cjs → validate-BDiMqkJC.cjs} +1 -1
  66. package/dist/{validate-S6CgIm5d.js → validate-DWPF7icl.js} +13 -13
  67. package/dist/vue/async.d.cts +186 -0
  68. package/dist/vue/async.d.ts +186 -0
  69. package/dist/vue/index.d.cts +271 -3
  70. package/dist/vue/index.d.ts +271 -3
  71. package/dist/vue-async.cjs +1 -1
  72. package/dist/vue-async.js +3 -3
  73. package/dist/vue.cjs +1 -1
  74. package/dist/vue.js +4 -4
  75. package/dist/worker.cjs +1 -1
  76. package/dist/worker.d.cts +2 -0
  77. package/dist/worker.d.ts +2 -0
  78. package/dist/worker.js +1 -1
  79. package/dist/xlsx.cjs +2 -30
  80. package/dist/xlsx.d.cts +268 -0
  81. package/dist/xlsx.d.ts +268 -0
  82. package/dist/xlsx.js +220 -23440
  83. package/package.json +1 -1
  84. package/dist/ReportPreview-DjGeWHY-.cjs +0 -6
  85. package/dist/progress-DD964VAB.js +0 -102
  86. package/dist/progress-KvhwXZ1Q.cjs +0 -1
  87. package/dist/render-plan-CckPEQyf.cjs +0 -1
  88. package/dist/render-plan-uzZYYSy1.js +0 -19
  89. package/dist/report-source-BXHNy_AD.js +0 -755
  90. package/dist/report-source-CCAvFE3t.cjs +0 -1
  91. package/dist/style-CpwiOPyB.cjs +0 -1
  92. package/dist/template-registry-DWExx0gU.cjs +0 -1
  93. package/dist/template-registry-NpOakidD.js +0 -354
  94. package/dist/textwrap-CnGsEum6.cjs +0 -4
@@ -1,4 +1,24 @@
1
1
  import { App } from 'vue';
2
+ declare interface AggregateDefinition {
3
+ /** Output column; valueField defaults to this field. */
4
+ field: string;
5
+ op: AggregateOperation;
6
+ valueField?: string;
7
+ weightField?: string;
8
+ numeric?: "number" | "decimal";
9
+ digits?: number;
10
+ }
11
+ declare interface AggregateDefinition_2 {
12
+ /** Output column; valueField defaults to this field. */
13
+ field: string;
14
+ op: AggregateOperation_2;
15
+ valueField?: string;
16
+ weightField?: string;
17
+ numeric?: "number" | "decimal";
18
+ digits?: number;
19
+ }
20
+ declare type AggregateOperation = "sum" | "count" | "avg" | "min" | "max" | "weightedAvg";
21
+ declare type AggregateOperation_2 = "sum" | "count" | "avg" | "min" | "max" | "weightedAvg";
2
22
  declare interface AssetRenderBudget {
3
23
  /** Maximum newly rendered assets, default 1000. Existing imageData is kept unchanged. */
4
24
  maxAssets?: number;
@@ -140,6 +160,24 @@ declare interface ComponentStyle_3 {
140
160
  opacity?: number;
141
161
  rotateDeg?: number;
142
162
  }
163
+ declare interface ComputedField extends ExpressionOptions {
164
+ field: string;
165
+ expression: ReportExpression | string;
166
+ /** Scope controls aggregate inputs; row expressions may reference the current row in any scope. */
167
+ scope?: "row" | "group" | "dataset";
168
+ groupBy?: readonly string[];
169
+ /** String adapter expressions cannot be inspected; declare dependencies explicitly. */
170
+ dependsOn?: readonly string[];
171
+ }
172
+ declare interface ComputedField_2 extends ExpressionOptions_2 {
173
+ field: string;
174
+ expression: ReportExpression_2 | string;
175
+ /** Scope controls aggregate inputs; row expressions may reference the current row in any scope. */
176
+ scope?: "row" | "group" | "dataset";
177
+ groupBy?: readonly string[];
178
+ /** String adapter expressions cannot be inspected; declare dependencies explicitly. */
179
+ dependsOn?: readonly string[];
180
+ }
143
181
  declare interface DatasetContract {
144
182
  fields: readonly ReportFieldContract[];
145
183
  rowKey?: string;
@@ -225,6 +263,26 @@ declare interface ExcelImportResult {
225
263
  warnings: string[];
226
264
  sheets: ExcelImportedSheet[];
227
265
  }
266
+ declare interface ExpressionOptions {
267
+ numeric?: "number" | "decimal";
268
+ digits?: number;
269
+ nulls?: "propagate" | "error";
270
+ divisionByZero?: "null" | "error";
271
+ }
272
+ declare interface ExpressionOptions_2 {
273
+ numeric?: "number" | "decimal";
274
+ digits?: number;
275
+ nulls?: "propagate" | "error";
276
+ divisionByZero?: "null" | "error";
277
+ }
278
+ declare interface FormulaAdapter {
279
+ /** Explicit trusted engine; core never evaluates source code/macros/external workbook references. */
280
+ evaluate(expression: string, context: {
281
+ row: Readonly<Record<string, unknown>>;
282
+ rowIndex: number;
283
+ rows: readonly Record<string, unknown>[];
284
+ }): unknown;
285
+ }
228
286
  declare interface GridCell {
229
287
  text?: string;
230
288
  rawText?: string;
@@ -308,6 +366,9 @@ declare interface ListColumn {
308
366
  valueType?: GridCell["valueType"];
309
367
  /** 字段语义用于 auto 对齐;明确声明编号,避免把数字编号当成度量。 */
310
368
  semanticRole?: "identifier" | "dimension" | "measure" | "date" | "text";
369
+ hidden?: boolean;
370
+ /** Condition hides cell content, preserving its physical layout in preview and exports. */
371
+ visibleWhen?: StyleRule["when"];
311
372
  }
312
373
  declare interface ListColumn_2 {
313
374
  header: string;
@@ -330,6 +391,9 @@ declare interface ListColumn_2 {
330
391
  valueType?: GridCell_3["valueType"];
331
392
  /** 字段语义用于 auto 对齐;明确声明编号,避免把数字编号当成度量。 */
332
393
  semanticRole?: "identifier" | "dimension" | "measure" | "date" | "text";
394
+ hidden?: boolean;
395
+ /** Condition hides cell content, preserving its physical layout in preview and exports. */
396
+ visibleWhen?: StyleRule_2["when"];
333
397
  }
334
398
  declare interface ListComponent {
335
399
  kind: "list";
@@ -363,6 +427,15 @@ declare interface ListComponent {
363
427
  border?: boolean;
364
428
  /** 分组小计(组头/组尾小计/组头防孤行) */
365
429
  groupBy?: ListGroupBy;
430
+ /** Ordered outer-to-inner grouping; groupBy remains the single-level shorthand. */
431
+ groups?: ListGroupBy[];
432
+ computed?: ComputedField[];
433
+ /** Dynamic pivot of the current source dataset, with read-only derived identities. */
434
+ matrix?: MatrixTableOptions;
435
+ /** Explicit row visibility; hidden rows do not participate in summaries. */
436
+ rowVisibleWhen?: StyleRule["when"];
437
+ /** Master/detail relation is keyed by business identity, never by display row index. */
438
+ detail?: ListDetail;
366
439
  /** 末尾总合计行(依赖 groupBy.subtotal 或显式 fields) */
367
440
  grandTotal?: ListGrandTotal;
368
441
  }
@@ -398,20 +471,55 @@ declare interface ListComponent_2 {
398
471
  border?: boolean;
399
472
  /** 分组小计(组头/组尾小计/组头防孤行) */
400
473
  groupBy?: ListGroupBy_2;
474
+ /** Ordered outer-to-inner grouping; groupBy remains the single-level shorthand. */
475
+ groups?: ListGroupBy_2[];
476
+ computed?: ComputedField_2[];
477
+ /** Dynamic pivot of the current source dataset, with read-only derived identities. */
478
+ matrix?: MatrixTableOptions_2;
479
+ /** Explicit row visibility; hidden rows do not participate in summaries. */
480
+ rowVisibleWhen?: StyleRule_2["when"];
481
+ /** Master/detail relation is keyed by business identity, never by display row index. */
482
+ detail?: ListDetail_2;
401
483
  /** 末尾总合计行(依赖 groupBy.subtotal 或显式 fields) */
402
484
  grandTotal?: ListGrandTotal_2;
403
485
  }
486
+ declare interface ListDetail {
487
+ dataset: string;
488
+ parentKey: string;
489
+ foreignKey: string;
490
+ rowKey?: string;
491
+ columns: ListColumn[];
492
+ rowHeightMm?: number;
493
+ header?: boolean;
494
+ label?: string;
495
+ /** Unmatched children fail by default; opt-in ignore is explicit. */
496
+ unmatched?: "error" | "ignore";
497
+ }
498
+ declare interface ListDetail_2 {
499
+ dataset: string;
500
+ parentKey: string;
501
+ foreignKey: string;
502
+ rowKey?: string;
503
+ columns: ListColumn_2[];
504
+ rowHeightMm?: number;
505
+ header?: boolean;
506
+ label?: string;
507
+ /** Unmatched children fail by default; opt-in ignore is explicit. */
508
+ unmatched?: "error" | "ignore";
509
+ }
404
510
  declare type ListGrandTotal = boolean | {
405
511
  label?: string;
406
512
  style?: ComponentStyle;
407
513
  /** 合计列(缺省沿用 groupBy.subtotal) */
408
514
  fields?: string[];
515
+ aggregates?: AggregateDefinition[];
409
516
  };
410
517
  declare type ListGrandTotal_2 = boolean | {
411
518
  label?: string;
412
519
  style?: ComponentStyle_3;
413
520
  /** 合计列(缺省沿用 groupBy.subtotal) */
414
521
  fields?: string[];
522
+ aggregates?: AggregateDefinition_2[];
415
523
  };
416
524
  /** 分组小计配置(声明式,见 ListComponent.groupBy) */
417
525
  declare interface ListGroupBy {
@@ -426,6 +534,9 @@ declare interface ListGroupBy {
426
534
  subtotalLabel?: string;
427
535
  /** 组头防孤行(默认 true:页尾放不下"组头+首行"时整体换页) */
428
536
  keepWithNext?: boolean;
537
+ aggregates?: AggregateDefinition[];
538
+ /** Repeat this group heading after page breaks within the group. */
539
+ repeatHeader?: boolean;
429
540
  }
430
541
  /** 分组小计配置(声明式,见 ListComponent.groupBy) */
431
542
  declare interface ListGroupBy_2 {
@@ -440,6 +551,9 @@ declare interface ListGroupBy_2 {
440
551
  subtotalLabel?: string;
441
552
  /** 组头防孤行(默认 true:页尾放不下"组头+首行"时整体换页) */
442
553
  keepWithNext?: boolean;
554
+ aggregates?: AggregateDefinition_2[];
555
+ /** Repeat this group heading after page breaks within the group. */
556
+ repeatHeader?: boolean;
443
557
  }
444
558
  declare const machReportAsyncPlugin: {
445
559
  install(app: App, options?: MachReportPluginOptions): void;
@@ -740,6 +854,36 @@ declare interface MachReportToolbarOptions {
740
854
  /** 未传时显示全部已有出口;空数组表示不提供导出工具。 */
741
855
  exportFormats?: ReportExportFormat[];
742
856
  }
857
+ declare interface MatrixTableOptions {
858
+ rowFields: readonly string[];
859
+ columnFields: readonly string[];
860
+ measures: readonly (AggregateDefinition & {
861
+ label?: string;
862
+ })[];
863
+ totals?: boolean;
864
+ rowHeader?: string;
865
+ columnWidthMm?: number;
866
+ rowWidthMm?: number;
867
+ maxRows?: number;
868
+ maxColumns?: number;
869
+ maxInputRows?: number;
870
+ maxCells?: number;
871
+ }
872
+ declare interface MatrixTableOptions_2 {
873
+ rowFields: readonly string[];
874
+ columnFields: readonly string[];
875
+ measures: readonly (AggregateDefinition_2 & {
876
+ label?: string;
877
+ })[];
878
+ totals?: boolean;
879
+ rowHeader?: string;
880
+ columnWidthMm?: number;
881
+ rowWidthMm?: number;
882
+ maxRows?: number;
883
+ maxColumns?: number;
884
+ maxInputRows?: number;
885
+ maxCells?: number;
886
+ }
743
887
  declare interface OutputDiagnostic {
744
888
  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";
745
889
  severity: "warning";
@@ -800,6 +944,14 @@ declare interface PaginateOptions {
800
944
  measurer?: TextMeasurer;
801
945
  /** 可选页数上限;在追加超限页前终止,避免先分配全部页面再检查。 */
802
946
  maxPages?: number;
947
+ /** Actual grid cells, including repeated furniture and nested children; checked before each page is appended. */
948
+ maxCells?: number;
949
+ signal?: AbortSignal;
950
+ /** Streaming total-page anchors can skip the bounded counting pass when known. */
951
+ knownTotalPages?: number;
952
+ onWarning?: (warning: string) => void;
953
+ /** Trusted formula adapter is passed at execution time; it is never serialized in templates. */
954
+ formula?: FormulaAdapter;
803
955
  }
804
956
  /** PDF 导出器:RenderPlan → PDF 字节;第二参数可上报非致命保真告警。 */
805
957
  declare interface PdfExporter {
@@ -818,6 +970,8 @@ declare interface PdfFontCheckResult {
818
970
  /** available 仅表示字体资源可达;实际导出仍会校验文字能否编码。 */
819
971
  declare type PdfFontStatus = "unchecked" | "checking" | "available" | "disabled" | "unverified" | "error";
820
972
  declare interface PlanComponent {
973
+ /** Template page furniture repeats per page and reserves its vertical band. */
974
+ pageAnchor?: "header" | "footer";
821
975
  kind: ComponentKind;
822
976
  leftMm: number;
823
977
  topMm: number;
@@ -840,6 +994,8 @@ declare interface PlanComponent {
840
994
  fallbackText?: string;
841
995
  }
842
996
  declare interface PlanComponent_2 {
997
+ /** Template page furniture repeats per page and reserves its vertical band. */
998
+ pageAnchor?: "header" | "footer";
843
999
  kind: ComponentKind_2;
844
1000
  leftMm: number;
845
1001
  topMm: number;
@@ -862,6 +1018,8 @@ declare interface PlanComponent_2 {
862
1018
  fallbackText?: string;
863
1019
  }
864
1020
  declare interface PlanComponent_3 {
1021
+ /** Template page furniture repeats per page and reserves its vertical band. */
1022
+ pageAnchor?: "header" | "footer";
865
1023
  kind: ComponentKind_3;
866
1024
  leftMm: number;
867
1025
  topMm: number;
@@ -1205,6 +1363,30 @@ declare interface ReportEmptyState {
1205
1363
  }
1206
1364
  /** 输出能力仍由宿主授权;工具偏好只决定当前预览实例的可见与启用状态。 */
1207
1365
  declare type ReportExportFormat = "html" | "pdf" | "xlsx" | "png" | "word";
1366
+ declare type ReportExpression = {
1367
+ field: string;
1368
+ } | {
1369
+ value: string | number | boolean | null;
1370
+ } | {
1371
+ aggregate: AggregateOperation;
1372
+ field?: string;
1373
+ weightField?: string;
1374
+ } | {
1375
+ op: "add" | "subtract" | "multiply" | "divide" | "coalesce";
1376
+ args: readonly ReportExpression[];
1377
+ };
1378
+ declare type ReportExpression_2 = {
1379
+ field: string;
1380
+ } | {
1381
+ value: string | number | boolean | null;
1382
+ } | {
1383
+ aggregate: AggregateOperation_2;
1384
+ field?: string;
1385
+ weightField?: string;
1386
+ } | {
1387
+ op: "add" | "subtract" | "multiply" | "divide" | "coalesce";
1388
+ args: readonly ReportExpression_2[];
1389
+ };
1208
1390
  /** 保持 Promise<RenderPlan> 契约;元数据为可选,旧业务 fetcher 无需改造。 */
1209
1391
  declare interface ReportFetcher {
1210
1392
  (input: ReportFetchInput): Promise<RenderPlan>;
@@ -1476,6 +1658,8 @@ declare interface StyleRule {
1476
1658
  field: string;
1477
1659
  op: ">" | ">=" | "<" | "<=" | "==" | "!=";
1478
1660
  value: number | string;
1661
+ /** Explicit decimal comparisons retain decimal thresholds as text. */
1662
+ numeric?: "number" | "decimal";
1479
1663
  };
1480
1664
  /** 命中时合并进单元格样式(color/bold/backgroundColor 等) */
1481
1665
  style: Record<string, unknown>;
@@ -1486,6 +1670,8 @@ declare interface StyleRule_2 {
1486
1670
  field: string;
1487
1671
  op: ">" | ">=" | "<" | "<=" | "==" | "!=";
1488
1672
  value: number | string;
1673
+ /** Explicit decimal comparisons retain decimal thresholds as text. */
1674
+ numeric?: "number" | "decimal";
1489
1675
  };
1490
1676
  /** 命中时合并进单元格样式(color/bold/backgroundColor 等) */
1491
1677
  style: Record<string, unknown>;