@agile-team/mach-report 2.9.1 → 2.11.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 (115) hide show
  1. package/README.md +11 -7
  2. package/dist/ExcelBindingWizard-CjIiVox-.cjs +1 -0
  3. package/dist/ExcelBindingWizard-Dxm-K5HL.js +1240 -0
  4. package/dist/ParamEditor-D-Hf5xfO.cjs +1 -0
  5. package/dist/ParamEditor-DRGxzxeO.js +381 -0
  6. package/dist/ReportBatchPanel-BYgg0EDB.cjs +1 -0
  7. package/dist/ReportBatchPanel-Bby5yLzU.js +287 -0
  8. package/dist/ReportPreview-DWXROHBP.cjs +6 -0
  9. package/dist/ReportPreview-DiNXhQI0.js +4138 -0
  10. package/dist/ReportTemplateLibrary-C6CO7YCT.cjs +1 -0
  11. package/dist/ReportTemplateLibrary-DfzDXRvr.js +260 -0
  12. package/dist/RuleEditor-C2QsOHOs.cjs +1 -0
  13. package/dist/RuleEditor-D9wQHrkf.js +2024 -0
  14. package/dist/TemplateReviewPanel-BKofGrV9.js +222 -0
  15. package/dist/TemplateReviewPanel-DwtOcLue.cjs +1 -0
  16. package/dist/analytics.cjs +1 -1
  17. package/dist/analytics.d.cts +4 -0
  18. package/dist/analytics.d.ts +4 -0
  19. package/dist/analytics.js +40 -39
  20. package/dist/{assets-ahTRUXRk.cjs → assets-Bu6UohJx.cjs} +1 -1
  21. package/dist/{assets-DDsfEi8R.js → assets-DegqDNqY.js} +1 -1
  22. package/dist/batch-Bt3Fd27Z.cjs +1 -0
  23. package/dist/batch-mRqhhhjt.js +364 -0
  24. package/dist/{capabilities-Cm9hZ3uV.js → capabilities-CK_7hizc.js} +16 -16
  25. package/dist/capabilities-CsZ-pNHR.cjs +1 -0
  26. package/dist/computed-Bvk0W15F.js +521 -0
  27. package/dist/computed-CGV2a809.cjs +1 -0
  28. package/dist/config-B612mw0x.js +525 -0
  29. package/dist/config-BRoLo2oj.cjs +1 -0
  30. package/dist/designer.cjs +2 -2
  31. package/dist/designer.d.cts +695 -50
  32. package/dist/designer.d.ts +695 -50
  33. package/dist/designer.js +2213 -1748
  34. package/dist/index.cjs +8 -8
  35. package/dist/index.d.cts +205 -6
  36. package/dist/index.d.ts +205 -6
  37. package/dist/index.js +808 -1033
  38. package/dist/injection-keys-Db_DyLkm.cjs +1 -0
  39. package/dist/injection-keys-e85udZCp.js +7 -0
  40. package/dist/list-cell-BuYn4tGF.cjs +1 -0
  41. package/dist/list-cell-ClFra1zS.js +173 -0
  42. package/dist/matrix-DVyWiYsd.cjs +1 -0
  43. package/dist/matrix-yZsGnldA.js +227 -0
  44. package/dist/param-validation-BlHHXs6u.js +153 -0
  45. package/dist/param-validation-DCK039V1.cjs +1 -0
  46. package/dist/pdf.cjs +49 -49
  47. package/dist/pdf.d.cts +31 -1
  48. package/dist/pdf.d.ts +31 -1
  49. package/dist/pdf.js +4797 -4650
  50. package/dist/plugin-BDTU4D94.cjs +1 -0
  51. package/dist/plugin-Cd5G2QQn.js +22 -0
  52. package/dist/region-binding-workflow-CXDmt9Bs.js +977 -0
  53. package/dist/region-binding-workflow-DhQvu1co.cjs +3 -0
  54. package/dist/{report-params-B_VCihAh.js → report-params-B44imUd4.js} +1 -1
  55. package/dist/{report-params-CjWrjPl6.cjs → report-params-SJfhKgaX.cjs} +1 -1
  56. package/dist/server/node.d.cts +48 -5
  57. package/dist/server/node.d.ts +48 -5
  58. package/dist/server-node.cjs +1 -1
  59. package/dist/server-node.js +503 -317
  60. package/dist/server.cjs +1 -1
  61. package/dist/server.d.cts +252 -4
  62. package/dist/server.d.ts +252 -4
  63. package/dist/server.js +567 -469
  64. package/dist/style.css +1 -1
  65. package/dist/template-registry-WNXdkiET.js +506 -0
  66. package/dist/template-registry-ukBGlm8N.cjs +1 -0
  67. package/dist/template-review-BXp2oyqg.cjs +1 -0
  68. package/dist/template-review-BdcXSYbx.js +1616 -0
  69. package/dist/tree-BX380Rr7.cjs +1 -0
  70. package/dist/tree-CqcQ99NM.js +172 -0
  71. package/dist/useLocalDraft-C07SYRnC.js +11 -0
  72. package/dist/useLocalDraft-Yiw1wFgI.cjs +1 -0
  73. package/dist/{validate-DWPF7icl.js → validate-7s0yn6ii.js} +26 -26
  74. package/dist/validate-DsRiNw8h.cjs +1 -0
  75. package/dist/vue/async.d.cts +118 -6
  76. package/dist/vue/async.d.ts +118 -6
  77. package/dist/vue/index.d.cts +177 -11
  78. package/dist/vue/index.d.ts +177 -11
  79. package/dist/vue-async.cjs +1 -1
  80. package/dist/vue-async.js +5 -5
  81. package/dist/vue.cjs +1 -1
  82. package/dist/vue.js +116 -113
  83. package/dist/{import-template-CNMLJSQw.js → workbook-session-BKOTwcoq.js} +4290 -4227
  84. package/dist/{import-template-CpxunKVp.cjs → workbook-session-CLYLhZWu.cjs} +17 -17
  85. package/dist/worker.cjs +1 -1
  86. package/dist/worker.d.cts +9 -2
  87. package/dist/worker.d.ts +9 -2
  88. package/dist/worker.js +1 -1
  89. package/dist/xlsx.cjs +4 -2
  90. package/dist/xlsx.d.cts +159 -3
  91. package/dist/xlsx.d.ts +159 -3
  92. package/dist/xlsx.js +354 -192
  93. package/package.json +1 -1
  94. package/dist/ExcelBindingWizard-DiaxvWpQ.cjs +0 -1
  95. package/dist/ExcelBindingWizard-RLJIXKKG.js +0 -816
  96. package/dist/ReportPreview-B5ZNEasW.js +0 -4439
  97. package/dist/ReportPreview-DRtVPUYo.cjs +0 -6
  98. package/dist/RuleEditor-CskN5Fr3.cjs +0 -1
  99. package/dist/RuleEditor-CtJFzKuY.js +0 -1578
  100. package/dist/TemplateReviewPanel-C_Lmzis6.cjs +0 -1
  101. package/dist/TemplateReviewPanel-Cn32OY4_.js +0 -173
  102. package/dist/binding-preview-B5834rml.cjs +0 -2
  103. package/dist/binding-preview-ChXjN5L5.js +0 -649
  104. package/dist/capabilities-DYzWL7KS.cjs +0 -1
  105. package/dist/matrix-CNPDJxED.js +0 -745
  106. package/dist/matrix-Div9Ilh3.cjs +0 -1
  107. package/dist/param-validation-BWNjLcN0.js +0 -116
  108. package/dist/param-validation-CiTxFeZ8.cjs +0 -1
  109. package/dist/plugin-BWwIgZXV.js +0 -25
  110. package/dist/plugin-Dg-J1Rbm.cjs +0 -1
  111. package/dist/template-registry-CHMYZ7SD.cjs +0 -1
  112. package/dist/template-registry-R61AMCr0.js +0 -433
  113. package/dist/template-review-hvWWQFsi.js +0 -1027
  114. package/dist/template-review-jEcOfmGr.cjs +0 -1
  115. package/dist/validate-BDiMqkJC.cjs +0 -1
@@ -290,11 +290,15 @@ declare interface GridCell {
290
290
  value?: string | number | boolean | null;
291
291
  /** Excel 数字格式(例如 #,##0.00 / 0.00%),不改变 text。 */
292
292
  numberFormat?: string;
293
+ /** Physical left inset for hierarchical labels; raw value stays unchanged. */
294
+ indentMm?: number;
293
295
  /** 编辑输入类型;省略时只按原始值推断,数字字符串不会被转换为数值。 */
294
296
  valueType?: "text" | "number" | "boolean";
295
297
  /** 单元格级编辑控制;预览仍需显式开启 editing。 */
296
298
  editable?: boolean;
297
299
  source?: ReportCellSource;
300
+ /** SDK 派生结果不映射业务来源,始终只读(包括覆盖同名源字段的计算)。 */
301
+ derived?: boolean;
298
302
  /** Excel 公式保留元数据;当前引擎不计算公式,公式格始终只读。 */
299
303
  formula?: string;
300
304
  children?: PlanComponent[];
@@ -309,11 +313,15 @@ declare interface GridCell_2 {
309
313
  value?: string | number | boolean | null;
310
314
  /** Excel 数字格式(例如 #,##0.00 / 0.00%),不改变 text。 */
311
315
  numberFormat?: string;
316
+ /** Physical left inset for hierarchical labels; raw value stays unchanged. */
317
+ indentMm?: number;
312
318
  /** 编辑输入类型;省略时只按原始值推断,数字字符串不会被转换为数值。 */
313
319
  valueType?: "text" | "number" | "boolean";
314
320
  /** 单元格级编辑控制;预览仍需显式开启 editing。 */
315
321
  editable?: boolean;
316
322
  source?: ReportCellSource_2;
323
+ /** SDK 派生结果不映射业务来源,始终只读(包括覆盖同名源字段的计算)。 */
324
+ derived?: boolean;
317
325
  /** Excel 公式保留元数据;当前引擎不计算公式,公式格始终只读。 */
318
326
  formula?: string;
319
327
  children?: PlanComponent_2[];
@@ -328,11 +336,15 @@ declare interface GridCell_3 {
328
336
  value?: string | number | boolean | null;
329
337
  /** Excel 数字格式(例如 #,##0.00 / 0.00%),不改变 text。 */
330
338
  numberFormat?: string;
339
+ /** Physical left inset for hierarchical labels; raw value stays unchanged. */
340
+ indentMm?: number;
331
341
  /** 编辑输入类型;省略时只按原始值推断,数字字符串不会被转换为数值。 */
332
342
  valueType?: "text" | "number" | "boolean";
333
343
  /** 单元格级编辑控制;预览仍需显式开启 editing。 */
334
344
  editable?: boolean;
335
345
  source?: ReportCellSource_3;
346
+ /** SDK 派生结果不映射业务来源,始终只读(包括覆盖同名源字段的计算)。 */
347
+ derived?: boolean;
336
348
  /** Excel 公式保留元数据;当前引擎不计算公式,公式格始终只读。 */
337
349
  formula?: string;
338
350
  children?: PlanComponent_3[];
@@ -397,6 +409,8 @@ declare interface ListColumn_2 {
397
409
  }
398
410
  declare interface ListComponent {
399
411
  kind: "list";
412
+ /** Opaque serializable layout annotations; interpreted only by explicit optional adapters. */
413
+ meta?: Record<string, unknown>;
400
414
  id?: string;
401
415
  /** 宽表标记用于连续 Excel;不改变低层列表的列宽和分页算法。 */
402
416
  layout?: "page" | "wide";
@@ -406,6 +420,10 @@ declare interface ListComponent {
406
420
  topMm: number;
407
421
  widthMm: number;
408
422
  dataset: string;
423
+ /** Headerless record/region bindings do not allocate a synthetic list header. */
424
+ header?: boolean;
425
+ /** A fixed record region rejects multiple rows instead of dropping source data. */
426
+ cardinality?: "record";
409
427
  /** 数据集中稳定业务主键的字段名;省略时编辑仅有计划内坐标。 */
410
428
  rowKey?: string;
411
429
  revisionField?: string;
@@ -432,6 +450,8 @@ declare interface ListComponent {
432
450
  computed?: ComputedField[];
433
451
  /** Dynamic pivot of the current source dataset, with read-only derived identities. */
434
452
  matrix?: MatrixTableOptions;
453
+ /** Full ordered hierarchy; source parent values and descendant-leaf rollups are explicit. */
454
+ tree?: TreeTableOptions;
435
455
  /** Explicit row visibility; hidden rows do not participate in summaries. */
436
456
  rowVisibleWhen?: StyleRule["when"];
437
457
  /** Master/detail relation is keyed by business identity, never by display row index. */
@@ -441,6 +461,8 @@ declare interface ListComponent {
441
461
  }
442
462
  declare interface ListComponent_2 {
443
463
  kind: "list";
464
+ /** Opaque serializable layout annotations; interpreted only by explicit optional adapters. */
465
+ meta?: Record<string, unknown>;
444
466
  id?: string;
445
467
  /** 宽表标记用于连续 Excel;不改变低层列表的列宽和分页算法。 */
446
468
  layout?: "page" | "wide";
@@ -450,6 +472,10 @@ declare interface ListComponent_2 {
450
472
  topMm: number;
451
473
  widthMm: number;
452
474
  dataset: string;
475
+ /** Headerless record/region bindings do not allocate a synthetic list header. */
476
+ header?: boolean;
477
+ /** A fixed record region rejects multiple rows instead of dropping source data. */
478
+ cardinality?: "record";
453
479
  /** 数据集中稳定业务主键的字段名;省略时编辑仅有计划内坐标。 */
454
480
  rowKey?: string;
455
481
  revisionField?: string;
@@ -476,6 +502,8 @@ declare interface ListComponent_2 {
476
502
  computed?: ComputedField_2[];
477
503
  /** Dynamic pivot of the current source dataset, with read-only derived identities. */
478
504
  matrix?: MatrixTableOptions_2;
505
+ /** Full ordered hierarchy; source parent values and descendant-leaf rollups are explicit. */
506
+ tree?: TreeTableOptions_2;
479
507
  /** Explicit row visibility; hidden rows do not participate in summaries. */
480
508
  rowVisibleWhen?: StyleRule_2["when"];
481
509
  /** Master/detail relation is keyed by business identity, never by display row index. */
@@ -488,6 +516,9 @@ declare interface ListDetail {
488
516
  parentKey: string;
489
517
  foreignKey: string;
490
518
  rowKey?: string;
519
+ /** 子表独立的并发契约;省略时不继承主表字段。 */
520
+ revisionField?: string;
521
+ sourceTokenField?: string;
491
522
  columns: ListColumn[];
492
523
  rowHeightMm?: number;
493
524
  header?: boolean;
@@ -500,6 +531,9 @@ declare interface ListDetail_2 {
500
531
  parentKey: string;
501
532
  foreignKey: string;
502
533
  rowKey?: string;
534
+ /** 子表独立的并发契约;省略时不继承主表字段。 */
535
+ revisionField?: string;
536
+ sourceTokenField?: string;
503
537
  columns: ListColumn_2[];
504
538
  rowHeightMm?: number;
505
539
  header?: boolean;
@@ -677,6 +711,8 @@ declare interface MachReportMessages extends Partial<ReportCalculationMessages>
677
711
  paramPromptDescription?: string;
678
712
  paramSelectPlaceholder?: string;
679
713
  paramTextPlaceholder?: string;
714
+ paramRangeStart?: string;
715
+ paramRangeEnd?: string;
680
716
  /** 可选搜索进度文案,旧完整 messages 对象无需新增字段。 */
681
717
  searching?: string;
682
718
  importExcel?: string;
@@ -728,6 +764,7 @@ declare interface MachReportMessages extends Partial<ReportCalculationMessages>
728
764
  conflicts?: string;
729
765
  editReadOnly?: string;
730
766
  editMissing?: string;
767
+ editRecalculationUnavailable?: string;
731
768
  editDuplicate?: string;
732
769
  clipboardInvalid?: string;
733
770
  editSaved?: string;
@@ -1073,6 +1110,7 @@ declare interface PlanGrid_3 {
1073
1110
  paddingMm?: number;
1074
1111
  }
1075
1112
  declare interface PlanPage {
1113
+ meta?: Record<string, unknown>;
1076
1114
  /** wide 表示完整自然列宽;页面仅为预览的垂直窗口分段。 */
1077
1115
  layout?: "page" | "wide";
1078
1116
  pageWidthMm: number;
@@ -1135,6 +1173,8 @@ declare interface PlanTableFragment_3 {
1135
1173
  export declare function preloadMachReport(): Promise<unknown>;
1136
1174
  declare interface RenderPlan {
1137
1175
  schemaVersion: string;
1176
+ /** 编辑需要模板重算上下文;跨 Worker/JSON 保留要求,但不声明本地会话可用。 */
1177
+ requiresRecalculation?: boolean;
1138
1178
  pages: PlanPage[];
1139
1179
  }
1140
1180
  /** Return false to keep the current report. Without a hook the preview asks inline. */
@@ -1249,7 +1289,7 @@ declare type ReportCellFieldOptions = ReportCellFieldBase & ({
1249
1289
  min?: string;
1250
1290
  max?: string;
1251
1291
  });
1252
- declare type ReportCellReadOnlyReason = "cell" | "formula" | "complex" | "structure";
1292
+ declare type ReportCellReadOnlyReason = "cell" | "formula" | "complex" | "structure" | "derived";
1253
1293
  declare interface ReportCellSelection {
1254
1294
  anchor: ReportCellAddress;
1255
1295
  focus: ReportCellAddress;
@@ -1420,6 +1460,20 @@ declare interface ReportFieldTarget {
1420
1460
  rowKey?: string | number;
1421
1461
  tableId?: string;
1422
1462
  }
1463
+ declare interface ReportFlowBand {
1464
+ /** Exact stable component IDs. Static components use nid, lists use id. */
1465
+ componentIds: string[];
1466
+ /** Source-template coordinates; following bands keep their original gap. */
1467
+ topMm: number;
1468
+ heightMm: number;
1469
+ }
1470
+ declare interface ReportFlowBand_2 {
1471
+ /** Exact stable component IDs. Static components use nid, lists use id. */
1472
+ componentIds: string[];
1473
+ /** Source-template coordinates; following bands keep their original gap. */
1474
+ topMm: number;
1475
+ heightMm: number;
1476
+ }
1423
1477
  declare interface ReportInteractionOptions {
1424
1478
  /** 只读选区计算,默认关闭;不写回业务值或执行导入的 Excel 公式。 */
1425
1479
  calculations?: boolean;
@@ -1440,13 +1494,19 @@ declare interface ReportOutputOptions {
1440
1494
  /** warn preserves supported output and shows diagnostics; strict rejects known fidelity loss. */
1441
1495
  fidelity?: "warn" | "strict";
1442
1496
  }
1497
+ declare interface ReportPageFlow {
1498
+ bands: ReportFlowBand[];
1499
+ }
1500
+ declare interface ReportPageFlow_2 {
1501
+ bands: ReportFlowBand_2[];
1502
+ }
1443
1503
  /** 报表参数定义(声明式,模板自描述参数面:渲染组件据此生成查询面板) */
1444
1504
  declare interface ReportParamDef {
1445
1505
  /** 参数名(传入 params,与数据集 SQL #{field} 绑定对应) */
1446
1506
  field: string;
1447
1507
  /** 显示名(缺省用 field) */
1448
1508
  label?: string;
1449
- type?: "text" | "number" | "date" | "select";
1509
+ type?: "text" | "number" | "date" | "month" | "year" | "dateRange" | "select";
1450
1510
  /** select 选项 */
1451
1511
  options?: Array<{
1452
1512
  label: string;
@@ -1455,7 +1515,7 @@ declare interface ReportParamDef {
1455
1515
  defaultValue?: string;
1456
1516
  required?: boolean;
1457
1517
  placeholder?: string;
1458
- /** 数字上下界;date 参数使用 YYYY-MM-DD 字符串(含边界)。 */
1518
+ /** 数字上下界;日期/月/年使用对应规范字符串;dateRange 对两端使用 YYYY-MM-DD 边界(含边界)。 */
1459
1519
  min?: number | string;
1460
1520
  max?: number | string;
1461
1521
  minLength?: number;
@@ -1467,7 +1527,7 @@ declare interface ReportParamDef_2 {
1467
1527
  field: string;
1468
1528
  /** 显示名(缺省用 field) */
1469
1529
  label?: string;
1470
- type?: "text" | "number" | "date" | "select";
1530
+ type?: "text" | "number" | "date" | "month" | "year" | "dateRange" | "select";
1471
1531
  /** select 选项 */
1472
1532
  options?: Array<{
1473
1533
  label: string;
@@ -1476,7 +1536,7 @@ declare interface ReportParamDef_2 {
1476
1536
  defaultValue?: string;
1477
1537
  required?: boolean;
1478
1538
  placeholder?: string;
1479
- /** 数字上下界;date 参数使用 YYYY-MM-DD 字符串(含边界)。 */
1539
+ /** 数字上下界;日期/月/年使用对应规范字符串;dateRange 对两端使用 YYYY-MM-DD 边界(含边界)。 */
1480
1540
  min?: number | string;
1481
1541
  max?: number | string;
1482
1542
  minLength?: number;
@@ -1688,6 +1748,9 @@ declare interface TemplatePage {
1688
1748
  marginLeftMm?: number;
1689
1749
  marginRightMm?: number;
1690
1750
  components: TemplateComponent[];
1751
+ /** Explicit vertical bands preserve source gaps as dynamic regions expand. */
1752
+ flow?: ReportPageFlow;
1753
+ meta?: Record<string, unknown>;
1691
1754
  }
1692
1755
  declare interface TemplatePage_2 {
1693
1756
  widthMm: number;
@@ -1699,6 +1762,9 @@ declare interface TemplatePage_2 {
1699
1762
  marginLeftMm?: number;
1700
1763
  marginRightMm?: number;
1701
1764
  components: TemplateComponent_2[];
1765
+ /** Explicit vertical bands preserve source gaps as dynamic regions expand. */
1766
+ flow?: ReportPageFlow_2;
1767
+ meta?: Record<string, unknown>;
1702
1768
  }
1703
1769
  /**
1704
1770
  * 文本测量与折行(分页/Canvas/PDF 共用的唯一折行真相源)。
@@ -1718,6 +1784,52 @@ declare interface TextMeasureOptions {
1718
1784
  declare interface TextMeasurer {
1719
1785
  measureMm(text: string, options: TextMeasureOptions): number;
1720
1786
  }
1787
+ /** A serialized tree contract. Sibling and root order follow input order. */
1788
+ declare interface TreeTableOptions {
1789
+ input: "flat" | "nested";
1790
+ idField: string;
1791
+ /** Flat roots have null/undefined parent values. */
1792
+ parentField?: string;
1793
+ /** Nested child arrays, defaults to children. Every node still needs an ID. */
1794
+ childrenField?: string;
1795
+ labelField: string;
1796
+ indentMm?: number;
1797
+ orphan?: "error" | "root";
1798
+ /** Source preserves parent values; leaf-aggregate derives only parents from descendant leaves. */
1799
+ parentValues?: "source" | "leaf-aggregate";
1800
+ aggregates?: AggregateDefinition[];
1801
+ maxRows?: number;
1802
+ maxDepth?: number;
1803
+ /** Bounded leaf-to-ancestor aggregate work; default one million. */
1804
+ maxAggregationVisits?: number;
1805
+ }
1806
+ /** A serialized tree contract. Sibling and root order follow input order. */
1807
+ declare interface TreeTableOptions_2 {
1808
+ input: "flat" | "nested";
1809
+ idField: string;
1810
+ /** Flat roots have null/undefined parent values. */
1811
+ parentField?: string;
1812
+ /** Nested child arrays, defaults to children. Every node still needs an ID. */
1813
+ childrenField?: string;
1814
+ labelField: string;
1815
+ indentMm?: number;
1816
+ orphan?: "error" | "root";
1817
+ /** Source preserves parent values; leaf-aggregate derives only parents from descendant leaves. */
1818
+ parentValues?: "source" | "leaf-aggregate";
1819
+ aggregates?: AggregateDefinition_2[];
1820
+ maxRows?: number;
1821
+ maxDepth?: number;
1822
+ /** Bounded leaf-to-ancestor aggregate work; default one million. */
1823
+ maxAggregationVisits?: number;
1824
+ }
1825
+ declare interface XlsxImageOptions {
1826
+ /** Decoded bytes per unique embedded image; default 16 MiB. */
1827
+ maxImageBytes?: number;
1828
+ /** Total decoded bytes of unique images in this workbook; default 32 MiB. */
1829
+ maxTotalImageBytes?: number;
1830
+ /** Unique embedded media limit, default 1000; repeated placements reuse the same media. */
1831
+ maxImages?: number;
1832
+ }
1721
1833
  /**
1722
1834
  * RenderPlan → xlsx 导出(B 端第二出口,对齐家族 @agile-team/mach-table-xlsx 路线):
1723
1835
  * - 网格组件 → 真表格:列宽(mm→Excel 宽度)、行高(mm→pt)、colSpan/rowSpan 合并、
@@ -1726,7 +1838,7 @@ declare interface TextMeasurer {
1726
1838
  * 目标是"财务能直接用的对账表"而非复刻版面)
1727
1839
  * - 未支持组件、富文本专有内容与单元格嵌套组件跳过并计入 warnings
1728
1840
  */
1729
- declare interface XlsxRenderOptions extends OutputDiagnosticOptions_2 {
1841
+ declare interface XlsxRenderOptions extends OutputDiagnosticOptions_2, XlsxImageOptions {
1730
1842
  /** 工作表命名(连续表默认使用标题,其余默认 "Sheet1" 起序)。 */
1731
1843
  sheetName?: (sheetIndex: number) => string;
1732
1844
  /** auto 默认将 wide 逻辑表合并为连续 Sheet;pages 保留逐页;continuous 要求明确的表来源。 */
@@ -290,11 +290,15 @@ declare interface GridCell {
290
290
  value?: string | number | boolean | null;
291
291
  /** Excel 数字格式(例如 #,##0.00 / 0.00%),不改变 text。 */
292
292
  numberFormat?: string;
293
+ /** Physical left inset for hierarchical labels; raw value stays unchanged. */
294
+ indentMm?: number;
293
295
  /** 编辑输入类型;省略时只按原始值推断,数字字符串不会被转换为数值。 */
294
296
  valueType?: "text" | "number" | "boolean";
295
297
  /** 单元格级编辑控制;预览仍需显式开启 editing。 */
296
298
  editable?: boolean;
297
299
  source?: ReportCellSource;
300
+ /** SDK 派生结果不映射业务来源,始终只读(包括覆盖同名源字段的计算)。 */
301
+ derived?: boolean;
298
302
  /** Excel 公式保留元数据;当前引擎不计算公式,公式格始终只读。 */
299
303
  formula?: string;
300
304
  children?: PlanComponent[];
@@ -309,11 +313,15 @@ declare interface GridCell_2 {
309
313
  value?: string | number | boolean | null;
310
314
  /** Excel 数字格式(例如 #,##0.00 / 0.00%),不改变 text。 */
311
315
  numberFormat?: string;
316
+ /** Physical left inset for hierarchical labels; raw value stays unchanged. */
317
+ indentMm?: number;
312
318
  /** 编辑输入类型;省略时只按原始值推断,数字字符串不会被转换为数值。 */
313
319
  valueType?: "text" | "number" | "boolean";
314
320
  /** 单元格级编辑控制;预览仍需显式开启 editing。 */
315
321
  editable?: boolean;
316
322
  source?: ReportCellSource_2;
323
+ /** SDK 派生结果不映射业务来源,始终只读(包括覆盖同名源字段的计算)。 */
324
+ derived?: boolean;
317
325
  /** Excel 公式保留元数据;当前引擎不计算公式,公式格始终只读。 */
318
326
  formula?: string;
319
327
  children?: PlanComponent_2[];
@@ -328,11 +336,15 @@ declare interface GridCell_3 {
328
336
  value?: string | number | boolean | null;
329
337
  /** Excel 数字格式(例如 #,##0.00 / 0.00%),不改变 text。 */
330
338
  numberFormat?: string;
339
+ /** Physical left inset for hierarchical labels; raw value stays unchanged. */
340
+ indentMm?: number;
331
341
  /** 编辑输入类型;省略时只按原始值推断,数字字符串不会被转换为数值。 */
332
342
  valueType?: "text" | "number" | "boolean";
333
343
  /** 单元格级编辑控制;预览仍需显式开启 editing。 */
334
344
  editable?: boolean;
335
345
  source?: ReportCellSource_3;
346
+ /** SDK 派生结果不映射业务来源,始终只读(包括覆盖同名源字段的计算)。 */
347
+ derived?: boolean;
336
348
  /** Excel 公式保留元数据;当前引擎不计算公式,公式格始终只读。 */
337
349
  formula?: string;
338
350
  children?: PlanComponent_3[];
@@ -397,6 +409,8 @@ declare interface ListColumn_2 {
397
409
  }
398
410
  declare interface ListComponent {
399
411
  kind: "list";
412
+ /** Opaque serializable layout annotations; interpreted only by explicit optional adapters. */
413
+ meta?: Record<string, unknown>;
400
414
  id?: string;
401
415
  /** 宽表标记用于连续 Excel;不改变低层列表的列宽和分页算法。 */
402
416
  layout?: "page" | "wide";
@@ -406,6 +420,10 @@ declare interface ListComponent {
406
420
  topMm: number;
407
421
  widthMm: number;
408
422
  dataset: string;
423
+ /** Headerless record/region bindings do not allocate a synthetic list header. */
424
+ header?: boolean;
425
+ /** A fixed record region rejects multiple rows instead of dropping source data. */
426
+ cardinality?: "record";
409
427
  /** 数据集中稳定业务主键的字段名;省略时编辑仅有计划内坐标。 */
410
428
  rowKey?: string;
411
429
  revisionField?: string;
@@ -432,6 +450,8 @@ declare interface ListComponent {
432
450
  computed?: ComputedField[];
433
451
  /** Dynamic pivot of the current source dataset, with read-only derived identities. */
434
452
  matrix?: MatrixTableOptions;
453
+ /** Full ordered hierarchy; source parent values and descendant-leaf rollups are explicit. */
454
+ tree?: TreeTableOptions;
435
455
  /** Explicit row visibility; hidden rows do not participate in summaries. */
436
456
  rowVisibleWhen?: StyleRule["when"];
437
457
  /** Master/detail relation is keyed by business identity, never by display row index. */
@@ -441,6 +461,8 @@ declare interface ListComponent {
441
461
  }
442
462
  declare interface ListComponent_2 {
443
463
  kind: "list";
464
+ /** Opaque serializable layout annotations; interpreted only by explicit optional adapters. */
465
+ meta?: Record<string, unknown>;
444
466
  id?: string;
445
467
  /** 宽表标记用于连续 Excel;不改变低层列表的列宽和分页算法。 */
446
468
  layout?: "page" | "wide";
@@ -450,6 +472,10 @@ declare interface ListComponent_2 {
450
472
  topMm: number;
451
473
  widthMm: number;
452
474
  dataset: string;
475
+ /** Headerless record/region bindings do not allocate a synthetic list header. */
476
+ header?: boolean;
477
+ /** A fixed record region rejects multiple rows instead of dropping source data. */
478
+ cardinality?: "record";
453
479
  /** 数据集中稳定业务主键的字段名;省略时编辑仅有计划内坐标。 */
454
480
  rowKey?: string;
455
481
  revisionField?: string;
@@ -476,6 +502,8 @@ declare interface ListComponent_2 {
476
502
  computed?: ComputedField_2[];
477
503
  /** Dynamic pivot of the current source dataset, with read-only derived identities. */
478
504
  matrix?: MatrixTableOptions_2;
505
+ /** Full ordered hierarchy; source parent values and descendant-leaf rollups are explicit. */
506
+ tree?: TreeTableOptions_2;
479
507
  /** Explicit row visibility; hidden rows do not participate in summaries. */
480
508
  rowVisibleWhen?: StyleRule_2["when"];
481
509
  /** Master/detail relation is keyed by business identity, never by display row index. */
@@ -488,6 +516,9 @@ declare interface ListDetail {
488
516
  parentKey: string;
489
517
  foreignKey: string;
490
518
  rowKey?: string;
519
+ /** 子表独立的并发契约;省略时不继承主表字段。 */
520
+ revisionField?: string;
521
+ sourceTokenField?: string;
491
522
  columns: ListColumn[];
492
523
  rowHeightMm?: number;
493
524
  header?: boolean;
@@ -500,6 +531,9 @@ declare interface ListDetail_2 {
500
531
  parentKey: string;
501
532
  foreignKey: string;
502
533
  rowKey?: string;
534
+ /** 子表独立的并发契约;省略时不继承主表字段。 */
535
+ revisionField?: string;
536
+ sourceTokenField?: string;
503
537
  columns: ListColumn_2[];
504
538
  rowHeightMm?: number;
505
539
  header?: boolean;
@@ -677,6 +711,8 @@ declare interface MachReportMessages extends Partial<ReportCalculationMessages>
677
711
  paramPromptDescription?: string;
678
712
  paramSelectPlaceholder?: string;
679
713
  paramTextPlaceholder?: string;
714
+ paramRangeStart?: string;
715
+ paramRangeEnd?: string;
680
716
  /** 可选搜索进度文案,旧完整 messages 对象无需新增字段。 */
681
717
  searching?: string;
682
718
  importExcel?: string;
@@ -728,6 +764,7 @@ declare interface MachReportMessages extends Partial<ReportCalculationMessages>
728
764
  conflicts?: string;
729
765
  editReadOnly?: string;
730
766
  editMissing?: string;
767
+ editRecalculationUnavailable?: string;
731
768
  editDuplicate?: string;
732
769
  clipboardInvalid?: string;
733
770
  editSaved?: string;
@@ -1073,6 +1110,7 @@ declare interface PlanGrid_3 {
1073
1110
  paddingMm?: number;
1074
1111
  }
1075
1112
  declare interface PlanPage {
1113
+ meta?: Record<string, unknown>;
1076
1114
  /** wide 表示完整自然列宽;页面仅为预览的垂直窗口分段。 */
1077
1115
  layout?: "page" | "wide";
1078
1116
  pageWidthMm: number;
@@ -1135,6 +1173,8 @@ declare interface PlanTableFragment_3 {
1135
1173
  export declare function preloadMachReport(): Promise<unknown>;
1136
1174
  declare interface RenderPlan {
1137
1175
  schemaVersion: string;
1176
+ /** 编辑需要模板重算上下文;跨 Worker/JSON 保留要求,但不声明本地会话可用。 */
1177
+ requiresRecalculation?: boolean;
1138
1178
  pages: PlanPage[];
1139
1179
  }
1140
1180
  /** Return false to keep the current report. Without a hook the preview asks inline. */
@@ -1249,7 +1289,7 @@ declare type ReportCellFieldOptions = ReportCellFieldBase & ({
1249
1289
  min?: string;
1250
1290
  max?: string;
1251
1291
  });
1252
- declare type ReportCellReadOnlyReason = "cell" | "formula" | "complex" | "structure";
1292
+ declare type ReportCellReadOnlyReason = "cell" | "formula" | "complex" | "structure" | "derived";
1253
1293
  declare interface ReportCellSelection {
1254
1294
  anchor: ReportCellAddress;
1255
1295
  focus: ReportCellAddress;
@@ -1420,6 +1460,20 @@ declare interface ReportFieldTarget {
1420
1460
  rowKey?: string | number;
1421
1461
  tableId?: string;
1422
1462
  }
1463
+ declare interface ReportFlowBand {
1464
+ /** Exact stable component IDs. Static components use nid, lists use id. */
1465
+ componentIds: string[];
1466
+ /** Source-template coordinates; following bands keep their original gap. */
1467
+ topMm: number;
1468
+ heightMm: number;
1469
+ }
1470
+ declare interface ReportFlowBand_2 {
1471
+ /** Exact stable component IDs. Static components use nid, lists use id. */
1472
+ componentIds: string[];
1473
+ /** Source-template coordinates; following bands keep their original gap. */
1474
+ topMm: number;
1475
+ heightMm: number;
1476
+ }
1423
1477
  declare interface ReportInteractionOptions {
1424
1478
  /** 只读选区计算,默认关闭;不写回业务值或执行导入的 Excel 公式。 */
1425
1479
  calculations?: boolean;
@@ -1440,13 +1494,19 @@ declare interface ReportOutputOptions {
1440
1494
  /** warn preserves supported output and shows diagnostics; strict rejects known fidelity loss. */
1441
1495
  fidelity?: "warn" | "strict";
1442
1496
  }
1497
+ declare interface ReportPageFlow {
1498
+ bands: ReportFlowBand[];
1499
+ }
1500
+ declare interface ReportPageFlow_2 {
1501
+ bands: ReportFlowBand_2[];
1502
+ }
1443
1503
  /** 报表参数定义(声明式,模板自描述参数面:渲染组件据此生成查询面板) */
1444
1504
  declare interface ReportParamDef {
1445
1505
  /** 参数名(传入 params,与数据集 SQL #{field} 绑定对应) */
1446
1506
  field: string;
1447
1507
  /** 显示名(缺省用 field) */
1448
1508
  label?: string;
1449
- type?: "text" | "number" | "date" | "select";
1509
+ type?: "text" | "number" | "date" | "month" | "year" | "dateRange" | "select";
1450
1510
  /** select 选项 */
1451
1511
  options?: Array<{
1452
1512
  label: string;
@@ -1455,7 +1515,7 @@ declare interface ReportParamDef {
1455
1515
  defaultValue?: string;
1456
1516
  required?: boolean;
1457
1517
  placeholder?: string;
1458
- /** 数字上下界;date 参数使用 YYYY-MM-DD 字符串(含边界)。 */
1518
+ /** 数字上下界;日期/月/年使用对应规范字符串;dateRange 对两端使用 YYYY-MM-DD 边界(含边界)。 */
1459
1519
  min?: number | string;
1460
1520
  max?: number | string;
1461
1521
  minLength?: number;
@@ -1467,7 +1527,7 @@ declare interface ReportParamDef_2 {
1467
1527
  field: string;
1468
1528
  /** 显示名(缺省用 field) */
1469
1529
  label?: string;
1470
- type?: "text" | "number" | "date" | "select";
1530
+ type?: "text" | "number" | "date" | "month" | "year" | "dateRange" | "select";
1471
1531
  /** select 选项 */
1472
1532
  options?: Array<{
1473
1533
  label: string;
@@ -1476,7 +1536,7 @@ declare interface ReportParamDef_2 {
1476
1536
  defaultValue?: string;
1477
1537
  required?: boolean;
1478
1538
  placeholder?: string;
1479
- /** 数字上下界;date 参数使用 YYYY-MM-DD 字符串(含边界)。 */
1539
+ /** 数字上下界;日期/月/年使用对应规范字符串;dateRange 对两端使用 YYYY-MM-DD 边界(含边界)。 */
1480
1540
  min?: number | string;
1481
1541
  max?: number | string;
1482
1542
  minLength?: number;
@@ -1688,6 +1748,9 @@ declare interface TemplatePage {
1688
1748
  marginLeftMm?: number;
1689
1749
  marginRightMm?: number;
1690
1750
  components: TemplateComponent[];
1751
+ /** Explicit vertical bands preserve source gaps as dynamic regions expand. */
1752
+ flow?: ReportPageFlow;
1753
+ meta?: Record<string, unknown>;
1691
1754
  }
1692
1755
  declare interface TemplatePage_2 {
1693
1756
  widthMm: number;
@@ -1699,6 +1762,9 @@ declare interface TemplatePage_2 {
1699
1762
  marginLeftMm?: number;
1700
1763
  marginRightMm?: number;
1701
1764
  components: TemplateComponent_2[];
1765
+ /** Explicit vertical bands preserve source gaps as dynamic regions expand. */
1766
+ flow?: ReportPageFlow_2;
1767
+ meta?: Record<string, unknown>;
1702
1768
  }
1703
1769
  /**
1704
1770
  * 文本测量与折行(分页/Canvas/PDF 共用的唯一折行真相源)。
@@ -1718,6 +1784,52 @@ declare interface TextMeasureOptions {
1718
1784
  declare interface TextMeasurer {
1719
1785
  measureMm(text: string, options: TextMeasureOptions): number;
1720
1786
  }
1787
+ /** A serialized tree contract. Sibling and root order follow input order. */
1788
+ declare interface TreeTableOptions {
1789
+ input: "flat" | "nested";
1790
+ idField: string;
1791
+ /** Flat roots have null/undefined parent values. */
1792
+ parentField?: string;
1793
+ /** Nested child arrays, defaults to children. Every node still needs an ID. */
1794
+ childrenField?: string;
1795
+ labelField: string;
1796
+ indentMm?: number;
1797
+ orphan?: "error" | "root";
1798
+ /** Source preserves parent values; leaf-aggregate derives only parents from descendant leaves. */
1799
+ parentValues?: "source" | "leaf-aggregate";
1800
+ aggregates?: AggregateDefinition[];
1801
+ maxRows?: number;
1802
+ maxDepth?: number;
1803
+ /** Bounded leaf-to-ancestor aggregate work; default one million. */
1804
+ maxAggregationVisits?: number;
1805
+ }
1806
+ /** A serialized tree contract. Sibling and root order follow input order. */
1807
+ declare interface TreeTableOptions_2 {
1808
+ input: "flat" | "nested";
1809
+ idField: string;
1810
+ /** Flat roots have null/undefined parent values. */
1811
+ parentField?: string;
1812
+ /** Nested child arrays, defaults to children. Every node still needs an ID. */
1813
+ childrenField?: string;
1814
+ labelField: string;
1815
+ indentMm?: number;
1816
+ orphan?: "error" | "root";
1817
+ /** Source preserves parent values; leaf-aggregate derives only parents from descendant leaves. */
1818
+ parentValues?: "source" | "leaf-aggregate";
1819
+ aggregates?: AggregateDefinition_2[];
1820
+ maxRows?: number;
1821
+ maxDepth?: number;
1822
+ /** Bounded leaf-to-ancestor aggregate work; default one million. */
1823
+ maxAggregationVisits?: number;
1824
+ }
1825
+ declare interface XlsxImageOptions {
1826
+ /** Decoded bytes per unique embedded image; default 16 MiB. */
1827
+ maxImageBytes?: number;
1828
+ /** Total decoded bytes of unique images in this workbook; default 32 MiB. */
1829
+ maxTotalImageBytes?: number;
1830
+ /** Unique embedded media limit, default 1000; repeated placements reuse the same media. */
1831
+ maxImages?: number;
1832
+ }
1721
1833
  /**
1722
1834
  * RenderPlan → xlsx 导出(B 端第二出口,对齐家族 @agile-team/mach-table-xlsx 路线):
1723
1835
  * - 网格组件 → 真表格:列宽(mm→Excel 宽度)、行高(mm→pt)、colSpan/rowSpan 合并、
@@ -1726,7 +1838,7 @@ declare interface TextMeasurer {
1726
1838
  * 目标是"财务能直接用的对账表"而非复刻版面)
1727
1839
  * - 未支持组件、富文本专有内容与单元格嵌套组件跳过并计入 warnings
1728
1840
  */
1729
- declare interface XlsxRenderOptions extends OutputDiagnosticOptions_2 {
1841
+ declare interface XlsxRenderOptions extends OutputDiagnosticOptions_2, XlsxImageOptions {
1730
1842
  /** 工作表命名(连续表默认使用标题,其余默认 "Sheet1" 起序)。 */
1731
1843
  sheetName?: (sheetIndex: number) => string;
1732
1844
  /** auto 默认将 wide 逻辑表合并为连续 Sheet;pages 保留逐页;continuous 要求明确的表来源。 */