@agile-team/mach-report 2.16.0 → 2.18.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 (177) hide show
  1. package/README.md +25 -12
  2. package/dist/{ExcelBindingWizard-CP6h2x1f.cjs → ExcelBindingWizard-Czn3C2yE.cjs} +1 -1
  3. package/dist/{ExcelBindingWizard-HhB3hAJE.js → ExcelBindingWizard-DMGZj6I6.js} +3 -3
  4. package/dist/ParamEditor-KzDQvbHY.js +732 -0
  5. package/dist/ParamEditor-oDfD8LgE.cjs +1 -0
  6. package/dist/{ReportBatchPanel-ruxcbfY6.js → ReportBatchPanel-BJK7PvZ4.js} +39 -39
  7. package/dist/ReportBatchPanel-DnmNRssu.cjs +1 -0
  8. package/dist/ReportParamPanel-mQkeN70Q.js +1020 -0
  9. package/dist/ReportParamPanel-sOANVRz-.cjs +1 -0
  10. package/dist/ReportPreview-BxWWTUL5.js +5583 -0
  11. package/dist/ReportPreview-Yf99omi3.cjs +6 -0
  12. package/dist/{ReportTemplateLibrary-DcwrH-63.js → ReportTemplateLibrary-BFjB08Wu.js} +1 -1
  13. package/dist/{ReportTemplateLibrary-BDlNT8JN.cjs → ReportTemplateLibrary-BO42QnWd.cjs} +1 -1
  14. package/dist/RuleEditor-CqxT1a-W.js +2337 -0
  15. package/dist/RuleEditor-D7YWigD9.cjs +1 -0
  16. package/dist/{TemplateOutlinePanel-CGrT5DFN.cjs → TemplateOutlinePanel-B0XX350V.cjs} +1 -1
  17. package/dist/{TemplateOutlinePanel-SXCjaPKR.js → TemplateOutlinePanel-zG0DrsIB.js} +2 -2
  18. package/dist/{TemplateReusePanel-6Z3wRFz8.cjs → TemplateReusePanel-BD0HSKp_.cjs} +1 -1
  19. package/dist/{TemplateReusePanel-lHLOS9Wn.js → TemplateReusePanel-Czwe5GbC.js} +2 -2
  20. package/dist/{TemplateReviewPanel-Dpk7sLcF.cjs → TemplateReviewPanel-CA5sdffM.cjs} +1 -1
  21. package/dist/{TemplateReviewPanel-CJ9PLc48.js → TemplateReviewPanel-NhmQI65C.js} +2 -2
  22. package/dist/analytics.cjs +1 -1
  23. package/dist/analytics.d.cts +163 -42
  24. package/dist/analytics.d.ts +163 -42
  25. package/dist/analytics.js +76 -141
  26. package/dist/artifact-integrity.json +110 -108
  27. package/dist/assets-2eC3mOcV.js +232 -0
  28. package/dist/assets-B0Hxn4l6.cjs +1 -0
  29. package/dist/{auto-uVBjX1j5.cjs → auto-B0EZFIK1.cjs} +1 -1
  30. package/dist/{auto-YR7a4BtF.js → auto-BlchZ1b8.js} +10 -10
  31. package/dist/{batch-WzDIXJAt.js → batch-DGCt44XM.js} +1 -1
  32. package/dist/{batch-z6Aw5GEY.cjs → batch-DYcokH4v.cjs} +1 -1
  33. package/dist/charts-Dlv8j2AG.js +141 -0
  34. package/dist/charts-aCtoswXq.cjs +1 -0
  35. package/dist/codes.cjs +9 -9
  36. package/dist/codes.d.cts +54 -0
  37. package/dist/codes.d.ts +54 -0
  38. package/dist/codes.js +12097 -13668
  39. package/dist/column-visual-BpgQVWwT.js +238 -0
  40. package/dist/column-visual-CtYxnBCP.cjs +1 -0
  41. package/dist/component-tree-6TV7W6Yj.cjs +1 -0
  42. package/dist/component-tree-CvW4lzpv.js +67 -0
  43. package/dist/computed-4TnxzgIh.cjs +1 -0
  44. package/dist/computed-C8NRZQss.js +739 -0
  45. package/dist/data-bar-Ce38juRZ.cjs +1 -0
  46. package/dist/data-bar-PtjXhMgN.js +9 -0
  47. package/dist/dataset-DL83majE.js +161 -0
  48. package/dist/dataset-IrlXbUvh.cjs +1 -0
  49. package/dist/designer--TKECSEc.cjs +2 -0
  50. package/dist/designer-d6hJS41w.js +5683 -0
  51. package/dist/designer.cjs +1 -1
  52. package/dist/designer.d.cts +835 -45
  53. package/dist/designer.d.ts +835 -45
  54. package/dist/designer.js +23 -20
  55. package/dist/{encoding-BYF9ZTl9.cjs → encoding-B--eZpp1.cjs} +1 -1
  56. package/dist/{encoding-BOGq4qYL.js → encoding-mctOLocI.js} +2 -2
  57. package/dist/{font-loader-EKLzOJxf.cjs → font-loader-DBBJ5KE9.cjs} +1 -1
  58. package/dist/{font-loader-CzI1GuBc.js → font-loader-DW8tIaNp.js} +1 -1
  59. package/dist/index-CPh6tqge.js +1575 -0
  60. package/dist/index-CUNw7dL9.cjs +1 -0
  61. package/dist/index.cjs +8 -8
  62. package/dist/index.d.cts +534 -16
  63. package/dist/index.d.ts +534 -16
  64. package/dist/index.js +1393 -955
  65. package/dist/json-snapshot-By4ZVVUt.js +1967 -0
  66. package/dist/json-snapshot-jiXff4lc.cjs +2 -0
  67. package/dist/matrix-0hywp0-F.cjs +1 -0
  68. package/dist/matrix-Dy-tyY7E.js +381 -0
  69. package/dist/param-validation-C-8sRJLq.cjs +1 -0
  70. package/dist/param-validation-CnDEd2l-.js +333 -0
  71. package/dist/{pdf-DJ5S6ukC.js → pdf-CKROKygt.js} +1845 -1845
  72. package/dist/{pdf-ByVCb1i6.cjs → pdf-DqyxJ96U.cjs} +47 -47
  73. package/dist/pdf.cjs +1 -1
  74. package/dist/pdf.d.cts +66 -0
  75. package/dist/pdf.d.ts +66 -0
  76. package/dist/pdf.js +2 -2
  77. package/dist/{plugin-C2j5_mhx.js → plugin-ByjF2kiV.js} +5 -5
  78. package/dist/{plugin-Dr39GBRG.cjs → plugin-DM1M2wlI.cjs} +1 -1
  79. package/dist/prefill-B8H9qwE4.js +371 -0
  80. package/dist/prefill-D7EswyTI.cjs +1 -0
  81. package/dist/{prepared-DqtpvRTn.js → prepared-BE-4jfX5.js} +2 -2
  82. package/dist/{prepared-DdrjLC7L.cjs → prepared-CGVphji3.cjs} +1 -1
  83. package/dist/{protocol-BzwMP4Vw.cjs → protocol-ByRVzzQG.cjs} +1 -1
  84. package/dist/{protocol-kt4Iy6-3.js → protocol-Cr81vFSQ.js} +3 -3
  85. package/dist/{record-bindings-CZWBJ1fU.js → record-bindings-DEJtmo3p.js} +67 -107
  86. package/dist/record-bindings-ehjnCDHt.cjs +1 -0
  87. package/dist/{region-binding-workflow-CWNvIjkV.js → region-binding-workflow-CBg0l_tj.js} +2 -2
  88. package/dist/{region-binding-workflow-CqSMxQ4p.cjs → region-binding-workflow-D05tOYn3.cjs} +1 -1
  89. package/dist/report-encoding-worker.cjs +1 -1
  90. package/dist/report-encoding-worker.js +1 -1
  91. package/dist/{report-params-B1RzkhJj.js → report-params-D9tBuM9B.js} +1 -1
  92. package/dist/{report-params-WDGrA4oP.cjs → report-params-VTg8MoCp.cjs} +1 -1
  93. package/dist/runtime-CDA6d263.cjs +1 -0
  94. package/dist/runtime-CEMvybO7.js +170 -0
  95. package/dist/sbom.cdx.json +1 -1
  96. package/dist/server/node.d.cts +121 -7
  97. package/dist/server/node.d.ts +121 -7
  98. package/dist/server-node.cjs +4 -4
  99. package/dist/server-node.js +3446 -2115
  100. package/dist/server.cjs +1 -1
  101. package/dist/server.d.cts +417 -29
  102. package/dist/server.d.ts +417 -29
  103. package/dist/server.js +787 -544
  104. package/dist/sha256-BDQ1Qk7A.js +158 -0
  105. package/dist/sha256-DgZAKXqI.cjs +1 -0
  106. package/dist/style.css +1 -1
  107. package/dist/template-bindings-Cg5oBLFT.cjs +1 -0
  108. package/dist/template-bindings-TKnXM7ll.js +62 -0
  109. package/dist/{template-catalog-BtR2JmCL.js → template-catalog-CmbWOJqy.js} +16 -16
  110. package/dist/template-catalog-Utu4GP09.cjs +1 -0
  111. package/dist/{template-fragments-BVsbxs4a.cjs → template-fragments-C_zSHJAa.cjs} +1 -1
  112. package/dist/{template-fragments-By0aZC1D.js → template-fragments-DWgo9tlZ.js} +2 -2
  113. package/dist/{template-outline-BwRV_eRo.cjs → template-outline-DWkzZXVC.cjs} +1 -1
  114. package/dist/{template-outline-cnWfT_LK.js → template-outline-DiADphlq.js} +1 -1
  115. package/dist/{template-registry-Cw3vRTX2.js → template-registry-BIhIHOab.js} +319 -314
  116. package/dist/template-registry-DzWswQI5.cjs +1 -0
  117. package/dist/vue/async.d.cts +636 -35
  118. package/dist/vue/async.d.ts +636 -35
  119. package/dist/vue/index.d.cts +746 -67
  120. package/dist/vue/index.d.ts +746 -67
  121. package/dist/vue-async.cjs +1 -1
  122. package/dist/vue-async.js +3 -3
  123. package/dist/vue.cjs +1 -1
  124. package/dist/vue.js +94 -89
  125. package/dist/{workbook-session-Cbts-22R.cjs → workbook-session-B94EwVa_.cjs} +1 -1
  126. package/dist/{workbook-session-BeSO8PFB.js → workbook-session-BoScoOg-.js} +2 -2
  127. package/dist/worker.cjs +1 -1
  128. package/dist/worker.d.cts +75 -7
  129. package/dist/worker.d.ts +75 -7
  130. package/dist/worker.js +4 -4
  131. package/dist/xlsx.cjs +4 -4
  132. package/dist/xlsx.d.cts +208 -15
  133. package/dist/xlsx.d.ts +208 -15
  134. package/dist/xlsx.js +288 -252
  135. package/package.json +1 -1
  136. package/dist/ParamEditor-CUQLgoxa.cjs +0 -1
  137. package/dist/ParamEditor-OKesP_nO.js +0 -594
  138. package/dist/ReportBatchPanel-cZCAMAwH.cjs +0 -1
  139. package/dist/ReportPreview-BcDKCLiK.js +0 -4834
  140. package/dist/ReportPreview-Bk9nLfO9.cjs +0 -6
  141. package/dist/RuleEditor-BX5S8RSF.cjs +0 -1
  142. package/dist/RuleEditor-CGl9XY2s.js +0 -2037
  143. package/dist/assets-CqIbfbTr.js +0 -126
  144. package/dist/assets-e4YSke8n.cjs +0 -1
  145. package/dist/capabilities-DDwXr_cA.js +0 -103
  146. package/dist/capabilities-DNLyZdNw.cjs +0 -1
  147. package/dist/component-tree-Ca6YYfHq.js +0 -61
  148. package/dist/component-tree-DkGLEfZC.cjs +0 -1
  149. package/dist/computed-C-4C2S5h.js +0 -521
  150. package/dist/computed-CGV2a809.cjs +0 -1
  151. package/dist/config-Dg_o8e7m.cjs +0 -1
  152. package/dist/config-XQ4qrQ7Q.js +0 -844
  153. package/dist/dataset-BkRmwgeJ.cjs +0 -1
  154. package/dist/dataset-H5pFuQGU.js +0 -121
  155. package/dist/designer-BfQSahxq.js +0 -5163
  156. package/dist/designer-CPPdeM5_.cjs +0 -2
  157. package/dist/diagnostic-notification-B9K9We3h.cjs +0 -1
  158. package/dist/diagnostic-notification-qGAYZdkB.js +0 -7
  159. package/dist/drill-CsdjgkRM.cjs +0 -1
  160. package/dist/drill-DIGsZfyB.js +0 -145
  161. package/dist/json-snapshot-D6ioHth9.js +0 -1702
  162. package/dist/json-snapshot-DknkjvxP.cjs +0 -2
  163. package/dist/matrix-CGRGkn5s.js +0 -112
  164. package/dist/matrix-gEO7ZM_u.cjs +0 -1
  165. package/dist/param-validation-C3HlcLLO.cjs +0 -1
  166. package/dist/param-validation-Do7Eg8Zv.js +0 -181
  167. package/dist/record-bindings-DUX1VMlR.cjs +0 -1
  168. package/dist/runtime-BjKBI530.js +0 -168
  169. package/dist/runtime-CBFEPKEs.cjs +0 -1
  170. package/dist/sha256-BshdOkCC.cjs +0 -1
  171. package/dist/sha256-DTG-Gq8i.js +0 -157
  172. package/dist/template-bindings-C2SpvsMU.js +0 -58
  173. package/dist/template-bindings-CEtWyiLX.cjs +0 -1
  174. package/dist/template-catalog-C2NLdrwB.cjs +0 -1
  175. package/dist/template-registry-C62vpv4a.cjs +0 -1
  176. package/dist/tree-BX380Rr7.cjs +0 -1
  177. package/dist/tree-CjVZLRw7.js +0 -172
package/dist/xlsx.d.ts CHANGED
@@ -35,6 +35,14 @@ declare interface AggregateDefinition {
35
35
 
36
36
  declare type AggregateOperation = "sum" | "count" | "avg" | "min" | "max" | "weightedAvg";
37
37
 
38
+ declare interface AggregateRequest {
39
+ op: AggregateOperation;
40
+ field?: string;
41
+ weightField?: string;
42
+ numeric?: "number" | "decimal";
43
+ digits?: number;
44
+ }
45
+
38
46
  declare interface Alignment {
39
47
  horizontal: 'left' | 'center' | 'right' | 'fill' | 'justify' | 'centerContinuous' | 'distributed';
40
48
  vertical: 'top' | 'middle' | 'bottom' | 'distributed' | 'justify';
@@ -64,6 +72,27 @@ export declare type AnyExcelBindingDocumentResult = ExcelBindingDocumentResult |
64
72
 
65
73
  export declare type AnyExcelBindingSession = ExcelBindingSession | ExcelRegionBindingSession;
66
74
 
75
+ declare interface AssetRenderBudget {
76
+ /** Maximum newly rendered assets, default 1000. Existing imageData is kept unchanged. */
77
+ maxAssets?: number;
78
+ /** Maximum image payload bytes per new asset, default 32 MiB. */
79
+ maxImageBytes?: number;
80
+ /** Maximum total image payload bytes for new assets, default 128 MiB. */
81
+ maxTotalImageBytes?: number;
82
+ /** Wall-clock budget, including adapters that ignore AbortSignal. Default 30 seconds. */
83
+ maxDurationMs?: number;
84
+ }
85
+
86
+ declare interface AssetRenderOptions extends OutputDiagnosticOptions, ImageMediaOptions {
87
+ assetRenderers?: Partial<Record<ImageComponentKind, ComponentImageRenderer>>;
88
+ /** Explicit id/version registry; unbound components continue using assetRenderers by kind. */
89
+ assetRegistry?: ComponentAssetRegistry;
90
+ assetBudget?: AssetRenderBudget;
91
+ /** Default throw prevents an incomplete export; placeholder retains the component and emits diagnostics. */
92
+ assetFailure?: "throw" | "placeholder";
93
+ signal?: AbortSignal;
94
+ }
95
+
67
96
  declare type AutoFilter = string | {
68
97
  from: string | { row: number; column: number };
69
98
  to: string | { row: number; column: number };
@@ -395,6 +424,23 @@ declare type ColumnFormat = {
395
424
  pattern?: string;
396
425
  };
397
426
 
427
+ declare type ColumnVisual = {
428
+ /** Defaults to the column field; never changes the cell's raw value or business identity. */
429
+ field?: string;
430
+ /** Numeric text requires explicit opt-in; formatting an identifier does not turn it into a measure. */
431
+ numeric?: "number" | "decimal";
432
+ min?: number;
433
+ max?: number;
434
+ } & ({
435
+ kind: "colorScale";
436
+ lowColor?: string;
437
+ highColor?: string;
438
+ } | {
439
+ kind: "dataBar";
440
+ color?: string;
441
+ negativeColor?: string;
442
+ });
443
+
398
444
  declare interface Comment_2 {
399
445
  texts?: RichText[];
400
446
  margins?: Partial<CommentMargins>;
@@ -414,6 +460,11 @@ declare interface CommentProtection {
414
460
  lockText: 'True' | 'False';
415
461
  }
416
462
 
463
+ declare interface ComponentAssetRegistry {
464
+ rendererFor(component: Readonly<PlanComponent>): ComponentImageRenderer | undefined;
465
+ hasExtension(id: string, version: string, kind: string): boolean;
466
+ }
467
+
417
468
  /** A literal own field of the current label record; expressions and paths are not evaluated. */
418
469
  declare interface ComponentBinding {
419
470
  field: string;
@@ -423,6 +474,16 @@ declare interface ComponentBinding {
423
474
  emptyText?: string;
424
475
  }
425
476
 
477
+ declare interface ComponentImageContext {
478
+ readonly component: Readonly<PlanComponent>;
479
+ readonly pageIndex: number;
480
+ readonly componentIndex: number;
481
+ readonly componentPath: readonly number[];
482
+ readonly signal: AbortSignal;
483
+ }
484
+
485
+ declare type ComponentImageRenderer = (context: ComponentImageContext) => string | Promise<string>;
486
+
426
487
  declare type ComponentKind = "text" | "image" | "barcode" | "qrcode" | "chart" | "line" | "rect" | "ellipse";
427
488
 
428
489
  declare interface ComponentStyle {
@@ -1152,6 +1213,12 @@ declare interface GradientStop {
1152
1213
  }
1153
1214
 
1154
1215
  declare interface GridCell {
1216
+ /** Resolved visual only. Original value, text, editability and source are unchanged. */
1217
+ dataBar?: {
1218
+ start: number;
1219
+ end: number;
1220
+ color: string;
1221
+ };
1155
1222
  /** Styled cell content; text remains a plain-text fallback. Imported rich cells are read-only. */
1156
1223
  richParagraphs?: RichParagraph[];
1157
1224
  text?: string;
@@ -1245,6 +1312,8 @@ declare interface Image_2 {
1245
1312
  buffer?: Buffer_2;
1246
1313
  }
1247
1314
 
1315
+ declare type ImageComponentKind = "image" | "chart" | "barcode" | "qrcode";
1316
+
1248
1317
  declare interface ImageHyperlinkValue {
1249
1318
  hyperlink: string;
1250
1319
  tooltip?: string;
@@ -1313,6 +1382,8 @@ declare interface ListColumn {
1313
1382
  format?: ColumnFormat;
1314
1383
  /** 条件格式规则(声明式,命中合并进单元格样式;如负数红字) */
1315
1384
  rules?: StyleRule[];
1385
+ /** Optional resolved color scale or value-preserving data bar. */
1386
+ visual?: ColumnVisual;
1316
1387
  /** 内容列编辑控制;仍需由预览显式开启 editing,不影响表头/小计只读规则。 */
1317
1388
  editable?: boolean;
1318
1389
  /** 空值列或特殊数据类型可显式声明编辑输入类型。 */
@@ -1435,6 +1506,26 @@ declare interface Margins {
1435
1506
  footer: number;
1436
1507
  }
1437
1508
 
1509
+ declare interface MatrixAxisOptions {
1510
+ /** Display names in the same outer-to-inner order as the dimension fields. */
1511
+ labels?: readonly string[];
1512
+ /** Per-level sibling order; omitted levels retain first-seen order. */
1513
+ sort?: readonly MatrixDimensionOrder[];
1514
+ /** One-based prefix depths. Leaf depths are not subtotals. */
1515
+ subtotals?: readonly number[];
1516
+ }
1517
+
1518
+ declare type MatrixDimensionOrder = "source" | "asc" | "desc";
1519
+
1520
+ declare interface MatrixHierarchyOptions {
1521
+ row?: MatrixAxisOptions;
1522
+ column?: MatrixAxisOptions;
1523
+ /** Only null/missing values use this label; empty strings and zero stay distinct. */
1524
+ emptyLabel?: string;
1525
+ subtotalLabel?: string;
1526
+ totalLabel?: string;
1527
+ }
1528
+
1438
1529
  declare interface MatrixTableOptions {
1439
1530
  rowFields: readonly string[];
1440
1531
  columnFields: readonly string[];
@@ -1449,6 +1540,10 @@ declare interface MatrixTableOptions {
1449
1540
  maxColumns?: number;
1450
1541
  maxInputRows?: number;
1451
1542
  maxCells?: number;
1543
+ /** Opt-in hierarchical dimensions, physical merged headers and prefix subtotals. */
1544
+ hierarchy?: MatrixHierarchyOptions;
1545
+ /** Hierarchical aggregate work, checked before measure reads; default 10 million updates. */
1546
+ maxAggregateUpdates?: number;
1452
1547
  }
1453
1548
 
1454
1549
  declare interface Media {
@@ -1471,6 +1566,11 @@ declare interface OutputDiagnostic {
1471
1566
  componentPath?: readonly number[];
1472
1567
  kind: string;
1473
1568
  nid?: string;
1569
+ /** Declarative extension identity only; no property values or business binding data enter diagnostics. */
1570
+ extension?: {
1571
+ id: string;
1572
+ version: string;
1573
+ };
1474
1574
  message: string;
1475
1575
  }
1476
1576
 
@@ -1658,6 +1758,8 @@ export declare function parseExcelBindingSession(input: unknown): ExcelBindingSe
1658
1758
  export declare function parseExcelRegionBindingSession(input: unknown): ExcelRegionBindingSession;
1659
1759
 
1660
1760
  declare interface PlanComponent {
1761
+ /** Template-only aggregate binding, expanded into shared primitives during layout. */
1762
+ chartBinding?: ReportChartBinding;
1661
1763
  /** Optional QR/barcode encoding configuration; no encoder is loaded by the core. */
1662
1764
  code?: CodeOptions;
1663
1765
  /** Template-only binding; resolved and removed before constructing the output plan. */
@@ -1820,6 +1922,53 @@ declare interface ReportCellSource {
1820
1922
  sourceToken?: string;
1821
1923
  }
1822
1924
 
1925
+ /** Serializable binding; data and authorization continue to come from the existing report source. */
1926
+ declare interface ReportChartBinding {
1927
+ dataset: string;
1928
+ categoryField: string;
1929
+ measures: readonly ReportChartMeasure[];
1930
+ type: ReportChartOptions["type"];
1931
+ sort?: "asc" | "desc";
1932
+ title?: string;
1933
+ showValues?: boolean;
1934
+ maxRows?: number;
1935
+ maxCategories?: number;
1936
+ }
1937
+
1938
+ declare interface ReportChartMeasure extends AggregateRequest {
1939
+ label?: string;
1940
+ color?: string;
1941
+ }
1942
+
1943
+ declare interface ReportChartOptions {
1944
+ type: "bar" | "line" | "stackedBar" | "percentBar";
1945
+ categories: readonly string[];
1946
+ series: readonly ReportChartSeries[];
1947
+ leftMm: number;
1948
+ topMm: number;
1949
+ widthMm: number;
1950
+ heightMm: number;
1951
+ title?: string;
1952
+ showValues?: boolean;
1953
+ }
1954
+
1955
+ declare interface ReportChartSeries {
1956
+ name: string;
1957
+ values: readonly (number | null)[];
1958
+ color?: string;
1959
+ }
1960
+
1961
+ declare interface ReportComparison {
1962
+ field: string;
1963
+ op: ">" | ">=" | "<" | "<=" | "==" | "!=" | "between" | "contains" | "isNull" | "isNotNull";
1964
+ /** Legacy scalar thresholds remain supported. Use right for field-to-field comparisons. */
1965
+ value?: ReportPredicateScalar;
1966
+ right?: ReportPredicateOperand;
1967
+ values?: readonly [ReportPredicateScalar, ReportPredicateScalar];
1968
+ numeric?: "number" | "decimal";
1969
+ valueType?: "number" | "decimal" | "text" | "date" | "boolean";
1970
+ }
1971
+
1823
1972
  declare type ReportExpression = {
1824
1973
  field: string;
1825
1974
  } | {
@@ -1829,11 +1978,23 @@ declare type ReportExpression = {
1829
1978
  field?: string;
1830
1979
  weightField?: string;
1831
1980
  } | {
1832
- op: "add" | "subtract" | "multiply" | "divide" | "coalesce";
1981
+ op: ReportExpressionOperation;
1982
+ /** Required for if; args are [then, else], and only the selected branch is evaluated. */
1983
+ condition?: ReportPredicate;
1833
1984
  args: readonly ReportExpression[];
1834
1985
  };
1835
1986
 
1836
- declare interface ReportFieldContract {
1987
+ declare type ReportExpressionOperation = "add" | "subtract" | "multiply" | "divide" | "coalesce" | "if" | "round" | "abs" | "concat" | "trim" | "upper" | "lower" | "dateYear" | "dateMonth" | "dateDay";
1988
+
1989
+ declare type ReportFieldAggregation = "sum" | "avg" | "min" | "max" | "count" | "none";
1990
+
1991
+ declare interface ReportFieldCalculation {
1992
+ /** Business-owned explanation, never executable JavaScript or an inferred business formula. */
1993
+ description: string;
1994
+ dependsOn: readonly string[];
1995
+ }
1996
+
1997
+ declare interface ReportFieldContract extends ReportFieldSemantics {
1837
1998
  field: string;
1838
1999
  label?: string;
1839
2000
  type: "text" | "number" | "boolean" | "date" | "decimal";
@@ -1848,6 +2009,17 @@ declare interface ReportFieldContract {
1848
2009
  unit?: string;
1849
2010
  }
1850
2011
 
2012
+ declare interface ReportFieldSemantics {
2013
+ description?: string;
2014
+ /** Explicit meaning of null/missing; does not convert blanks into zero. */
2015
+ missingMeaning?: string;
2016
+ /** Recommended aggregation; none marks non-additive measures such as ratios. No aggregation runs implicitly. */
2017
+ aggregation?: ReportFieldAggregation;
2018
+ /** Shared presentation only; raw values and calculation precision remain unchanged. */
2019
+ format?: ColumnFormat;
2020
+ calculation?: ReportFieldCalculation;
2021
+ }
2022
+
1851
2023
  declare interface ReportFlowBand {
1852
2024
  /** Exact stable component IDs. Static components use nid, lists use id. */
1853
2025
  componentIds: string[];
@@ -1866,12 +2038,9 @@ declare interface ReportParamDef {
1866
2038
  field: string;
1867
2039
  /** 显示名(缺省用 field) */
1868
2040
  label?: string;
1869
- type?: "text" | "number" | "date" | "month" | "year" | "dateRange" | "select";
2041
+ type?: "text" | "number" | "date" | "month" | "year" | "dateRange" | "select" | "multiSelect" | "cascader" | "numberRange";
1870
2042
  /** select 选项 */
1871
- options?: Array<{
1872
- label: string;
1873
- value: string;
1874
- }>;
2043
+ options?: ReportParamTreeOption[];
1875
2044
  /** Opaque host-resolved source key. No URL, credentials or executable code is stored. */
1876
2045
  optionsSource?: string;
1877
2046
  /** Select dependencies must be declared parameters; changing a parent clears descendants. */
@@ -1884,8 +2053,34 @@ declare interface ReportParamDef {
1884
2053
  max?: number | string;
1885
2054
  minLength?: number;
1886
2055
  maxLength?: number;
2056
+ /** multiSelect item count (maximum 100). Cascader paths are bounded to 16 levels. */
2057
+ minItems?: number;
2058
+ maxItems?: number;
1887
2059
  }
1888
2060
 
2061
+ /** Cascader values are unique within each sibling list. */
2062
+ declare interface ReportParamTreeOption {
2063
+ label: string;
2064
+ value: string;
2065
+ children?: ReportParamTreeOption[];
2066
+ }
2067
+
2068
+ declare type ReportPredicate = ReportComparison | {
2069
+ all: readonly ReportPredicate[];
2070
+ } | {
2071
+ any: readonly ReportPredicate[];
2072
+ } | {
2073
+ not: ReportPredicate;
2074
+ };
2075
+
2076
+ declare type ReportPredicateOperand = {
2077
+ field: string;
2078
+ } | {
2079
+ value: ReportPredicateScalar;
2080
+ };
2081
+
2082
+ declare type ReportPredicateScalar = string | number | boolean | null;
2083
+
1889
2084
  declare interface ReportTemplate {
1890
2085
  schemaVersion?: string;
1891
2086
  /** 参数定义(可选;宿主也可经 ReportPreview 的 paramDefs prop 提供,prop 优先) */
@@ -2193,13 +2388,7 @@ declare interface Style {
2193
2388
 
2194
2389
  /** 条件格式规则求值(声明式,见 ListColumn.rules) */
2195
2390
  declare interface StyleRule {
2196
- when: {
2197
- field: string;
2198
- op: ">" | ">=" | "<" | "<=" | "==" | "!=";
2199
- value: number | string;
2200
- /** Explicit decimal comparisons retain decimal thresholds as text. */
2201
- numeric?: "number" | "decimal";
2202
- };
2391
+ when: ReportPredicate;
2203
2392
  /** 命中时合并进单元格样式(color/bold/backgroundColor 等) */
2204
2393
  style: Record<string, unknown>;
2205
2394
  }
@@ -3064,13 +3253,15 @@ declare interface XlsxReadOptions {
3064
3253
  * 目标是"财务能直接用的对账表"而非复刻版面)
3065
3254
  * - 原生 richText 保留基础字形;未支持组件、段落专有排版与单元格嵌套组件计入 diagnostics / warnings
3066
3255
  */
3067
- export declare interface XlsxRenderOptions extends OutputDiagnosticOptions, XlsxImageOptions {
3256
+ export declare interface XlsxRenderOptions extends AssetRenderOptions, XlsxImageOptions {
3068
3257
  /** 工作表命名(连续表默认使用标题,其余默认 "Sheet1" 起序)。 */
3069
3258
  sheetName?: (sheetIndex: number) => string;
3070
3259
  /** auto 默认将 wide 逻辑表合并为连续 Sheet;pages 保留逐页;continuous 要求明确的表来源。 */
3071
3260
  sheetMode?: "auto" | "pages" | "continuous";
3072
3261
  /** 宽表或连续表默认 raw,其余默认 text;显式配置可覆盖默认值。 */
3073
3262
  valueMode?: "text" | "raw";
3263
+ /** Static data-bar drawing budget; fail explicitly rather than omitting bars. Default 10,000. */
3264
+ maxDataBars?: number;
3074
3265
  /** 连续表默认不限制打印纸型;显式 A3/A4/A5 仅设置打印适配,不改变 Excel 列宽。 */
3075
3266
  paperSize?: "auto" | "a3" | "a4" | "a5";
3076
3267
  }
@@ -3080,6 +3271,8 @@ export declare interface XlsxRenderResult {
3080
3271
  buffer: ExcelJS.Buffer;
3081
3272
  warnings: string[];
3082
3273
  diagnostics?: OutputDiagnostic[];
3274
+ /** Informational output semantics; these do not indicate missing content. */
3275
+ notes?: string[];
3083
3276
  }
3084
3277
 
3085
3278
  declare interface XlsxWriteOptions extends stream.xlsx.WorkbookWriterOptions {