@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
@@ -17,8 +17,39 @@ declare interface AggregateDefinition_2 {
17
17
  numeric?: "number" | "decimal";
18
18
  digits?: number;
19
19
  }
20
+ declare interface AggregateDefinition_3 {
21
+ /** Output column; valueField defaults to this field. */
22
+ field: string;
23
+ op: AggregateOperation_3;
24
+ valueField?: string;
25
+ weightField?: string;
26
+ numeric?: "number" | "decimal";
27
+ digits?: number;
28
+ }
20
29
  declare type AggregateOperation = "sum" | "count" | "avg" | "min" | "max" | "weightedAvg";
21
30
  declare type AggregateOperation_2 = "sum" | "count" | "avg" | "min" | "max" | "weightedAvg";
31
+ declare type AggregateOperation_3 = "sum" | "count" | "avg" | "min" | "max" | "weightedAvg";
32
+ declare interface AggregateRequest {
33
+ op: AggregateOperation;
34
+ field?: string;
35
+ weightField?: string;
36
+ numeric?: "number" | "decimal";
37
+ digits?: number;
38
+ }
39
+ declare interface AggregateRequest_2 {
40
+ op: AggregateOperation_2;
41
+ field?: string;
42
+ weightField?: string;
43
+ numeric?: "number" | "decimal";
44
+ digits?: number;
45
+ }
46
+ declare interface AggregateRequest_3 {
47
+ op: AggregateOperation_3;
48
+ field?: string;
49
+ weightField?: string;
50
+ numeric?: "number" | "decimal";
51
+ digits?: number;
52
+ }
22
53
  declare interface AssetRenderBudget {
23
54
  /** Maximum newly rendered assets, default 1000. Existing imageData is kept unchanged. */
24
55
  maxAssets?: number;
@@ -29,13 +60,34 @@ declare interface AssetRenderBudget {
29
60
  /** Wall-clock budget, including adapters that ignore AbortSignal. Default 30 seconds. */
30
61
  maxDurationMs?: number;
31
62
  }
63
+ declare interface AssetRenderBudget_2 {
64
+ /** Maximum newly rendered assets, default 1000. Existing imageData is kept unchanged. */
65
+ maxAssets?: number;
66
+ /** Maximum image payload bytes per new asset, default 32 MiB. */
67
+ maxImageBytes?: number;
68
+ /** Maximum total image payload bytes for new assets, default 128 MiB. */
69
+ maxTotalImageBytes?: number;
70
+ /** Wall-clock budget, including adapters that ignore AbortSignal. Default 30 seconds. */
71
+ maxDurationMs?: number;
72
+ }
32
73
  declare interface AssetRenderOptions extends OutputDiagnosticOptions, ImageMediaOptions {
33
74
  assetRenderers?: Partial<Record<ImageComponentKind, ComponentImageRenderer>>;
75
+ /** Explicit id/version registry; unbound components continue using assetRenderers by kind. */
76
+ assetRegistry?: ComponentAssetRegistry;
34
77
  assetBudget?: AssetRenderBudget;
35
78
  /** Default throw prevents an incomplete export; placeholder retains the component and emits diagnostics. */
36
79
  assetFailure?: "throw" | "placeholder";
37
80
  signal?: AbortSignal;
38
81
  }
82
+ declare interface AssetRenderOptions_2 extends OutputDiagnosticOptions_2, ImageMediaOptions_2 {
83
+ assetRenderers?: Partial<Record<ImageComponentKind_2, ComponentImageRenderer_2>>;
84
+ /** Explicit id/version registry; unbound components continue using assetRenderers by kind. */
85
+ assetRegistry?: ComponentAssetRegistry_2;
86
+ assetBudget?: AssetRenderBudget_2;
87
+ /** Default throw prevents an incomplete export; placeholder retains the component and emits diagnostics. */
88
+ assetFailure?: "throw" | "placeholder";
89
+ signal?: AbortSignal;
90
+ }
39
91
  declare interface BrowserReportWorker {
40
92
  postMessage(value: unknown, transfer?: Transferable[]): void;
41
93
  terminate(): void;
@@ -143,6 +195,46 @@ declare type ColumnFormat_3 = {
143
195
  kind: "date";
144
196
  pattern?: string;
145
197
  };
198
+ declare type ColumnVisual = {
199
+ /** Defaults to the column field; never changes the cell's raw value or business identity. */
200
+ field?: string;
201
+ /** Numeric text requires explicit opt-in; formatting an identifier does not turn it into a measure. */
202
+ numeric?: "number" | "decimal";
203
+ min?: number;
204
+ max?: number;
205
+ } & ({
206
+ kind: "colorScale";
207
+ lowColor?: string;
208
+ highColor?: string;
209
+ } | {
210
+ kind: "dataBar";
211
+ color?: string;
212
+ negativeColor?: string;
213
+ });
214
+ declare type ColumnVisual_2 = {
215
+ /** Defaults to the column field; never changes the cell's raw value or business identity. */
216
+ field?: string;
217
+ /** Numeric text requires explicit opt-in; formatting an identifier does not turn it into a measure. */
218
+ numeric?: "number" | "decimal";
219
+ min?: number;
220
+ max?: number;
221
+ } & ({
222
+ kind: "colorScale";
223
+ lowColor?: string;
224
+ highColor?: string;
225
+ } | {
226
+ kind: "dataBar";
227
+ color?: string;
228
+ negativeColor?: string;
229
+ });
230
+ declare interface ComponentAssetRegistry {
231
+ rendererFor(component: Readonly<PlanComponent>): ComponentImageRenderer | undefined;
232
+ hasExtension(id: string, version: string, kind: string): boolean;
233
+ }
234
+ declare interface ComponentAssetRegistry_2 {
235
+ rendererFor(component: Readonly<PlanComponent_2>): ComponentImageRenderer_2 | undefined;
236
+ hasExtension(id: string, version: string, kind: string): boolean;
237
+ }
146
238
  /** A literal own field of the current label record; expressions and paths are not evaluated. */
147
239
  declare interface ComponentBinding {
148
240
  field: string;
@@ -174,7 +266,15 @@ declare interface ComponentImageContext {
174
266
  readonly componentPath: readonly number[];
175
267
  readonly signal: AbortSignal;
176
268
  }
269
+ declare interface ComponentImageContext_2 {
270
+ readonly component: Readonly<PlanComponent_2>;
271
+ readonly pageIndex: number;
272
+ readonly componentIndex: number;
273
+ readonly componentPath: readonly number[];
274
+ readonly signal: AbortSignal;
275
+ }
177
276
  declare type ComponentImageRenderer = (context: ComponentImageContext) => string | Promise<string>;
277
+ declare type ComponentImageRenderer_2 = (context: ComponentImageContext_2) => string | Promise<string>;
178
278
  declare type ComponentKind = "text" | "image" | "barcode" | "qrcode" | "chart" | "line" | "rect" | "ellipse";
179
279
  declare type ComponentKind_2 = "text" | "image" | "barcode" | "qrcode" | "chart" | "line" | "rect" | "ellipse";
180
280
  declare type ComponentKind_3 = "text" | "image" | "barcode" | "qrcode" | "chart" | "line" | "rect" | "ellipse";
@@ -265,6 +365,15 @@ declare interface ComputedField_2 extends ExpressionOptions_2 {
265
365
  /** String adapter expressions cannot be inspected; declare dependencies explicitly. */
266
366
  dependsOn?: readonly string[];
267
367
  }
368
+ declare interface ComputedField_3 extends ExpressionOptions_3 {
369
+ field: string;
370
+ expression: ReportExpression_3 | string;
371
+ /** Scope controls aggregate inputs; row expressions may reference the current row in any scope. */
372
+ scope?: "row" | "group" | "dataset";
373
+ groupBy?: readonly string[];
374
+ /** String adapter expressions cannot be inspected; declare dependencies explicitly. */
375
+ dependsOn?: readonly string[];
376
+ }
268
377
  declare interface DatasetContract {
269
378
  fields: readonly ReportFieldContract[];
270
379
  rowKey?: string;
@@ -362,6 +471,12 @@ declare interface ExpressionOptions_2 {
362
471
  nulls?: "propagate" | "error";
363
472
  divisionByZero?: "null" | "error";
364
473
  }
474
+ declare interface ExpressionOptions_3 {
475
+ numeric?: "number" | "decimal";
476
+ digits?: number;
477
+ nulls?: "propagate" | "error";
478
+ divisionByZero?: "null" | "error";
479
+ }
365
480
  declare interface FormulaAdapter {
366
481
  /** Explicit trusted engine; core never evaluates source code/macros/external workbook references. */
367
482
  evaluate(expression: string, context: {
@@ -370,7 +485,21 @@ declare interface FormulaAdapter {
370
485
  rows: readonly Record<string, unknown>[];
371
486
  }): unknown;
372
487
  }
488
+ declare interface FormulaAdapter_2 {
489
+ /** Explicit trusted engine; core never evaluates source code/macros/external workbook references. */
490
+ evaluate(expression: string, context: {
491
+ row: Readonly<Record<string, unknown>>;
492
+ rowIndex: number;
493
+ rows: readonly Record<string, unknown>[];
494
+ }): unknown;
495
+ }
373
496
  declare interface GridCell {
497
+ /** Resolved visual only. Original value, text, editability and source are unchanged. */
498
+ dataBar?: {
499
+ start: number;
500
+ end: number;
501
+ color: string;
502
+ };
374
503
  /** Styled cell content; text remains a plain-text fallback. Imported rich cells are read-only. */
375
504
  richParagraphs?: RichParagraph[];
376
505
  text?: string;
@@ -396,6 +525,12 @@ declare interface GridCell {
396
525
  style?: ComponentStyle;
397
526
  }
398
527
  declare interface GridCell_2 {
528
+ /** Resolved visual only. Original value, text, editability and source are unchanged. */
529
+ dataBar?: {
530
+ start: number;
531
+ end: number;
532
+ color: string;
533
+ };
399
534
  /** Styled cell content; text remains a plain-text fallback. Imported rich cells are read-only. */
400
535
  richParagraphs?: RichParagraph_2[];
401
536
  text?: string;
@@ -421,6 +556,12 @@ declare interface GridCell_2 {
421
556
  style?: ComponentStyle_2;
422
557
  }
423
558
  declare interface GridCell_3 {
559
+ /** Resolved visual only. Original value, text, editability and source are unchanged. */
560
+ dataBar?: {
561
+ start: number;
562
+ end: number;
563
+ color: string;
564
+ };
424
565
  /** Styled cell content; text remains a plain-text fallback. Imported rich cells are read-only. */
425
566
  richParagraphs?: RichParagraph_3[];
426
567
  text?: string;
@@ -446,6 +587,7 @@ declare interface GridCell_3 {
446
587
  style?: ComponentStyle_3;
447
588
  }
448
589
  declare type ImageComponentKind = "image" | "chart" | "barcode" | "qrcode";
590
+ declare type ImageComponentKind_2 = "image" | "chart" | "barcode" | "qrcode";
449
591
  /** Bounded binary image inspection shared by PDF, Excel and template import. No decoder is loaded. */
450
592
  declare interface ImageMediaOptions {
451
593
  maxImageBytes?: number;
@@ -489,6 +631,8 @@ declare interface ListColumn {
489
631
  format?: ColumnFormat;
490
632
  /** 条件格式规则(声明式,命中合并进单元格样式;如负数红字) */
491
633
  rules?: StyleRule[];
634
+ /** Optional resolved color scale or value-preserving data bar. */
635
+ visual?: ColumnVisual;
492
636
  /** 内容列编辑控制;仍需由预览显式开启 editing,不影响表头/小计只读规则。 */
493
637
  editable?: boolean;
494
638
  /** 空值列或特殊数据类型可显式声明编辑输入类型。 */
@@ -514,6 +658,8 @@ declare interface ListColumn_2 {
514
658
  format?: ColumnFormat_3;
515
659
  /** 条件格式规则(声明式,命中合并进单元格样式;如负数红字) */
516
660
  rules?: StyleRule_2[];
661
+ /** Optional resolved color scale or value-preserving data bar. */
662
+ visual?: ColumnVisual_2;
517
663
  /** 内容列编辑控制;仍需由预览显式开启 editing,不影响表头/小计只读规则。 */
518
664
  editable?: boolean;
519
665
  /** 空值列或特殊数据类型可显式声明编辑输入类型。 */
@@ -616,11 +762,11 @@ declare interface ListComponent_2 {
616
762
  groupBy?: ListGroupBy_2;
617
763
  /** Ordered outer-to-inner grouping; groupBy remains the single-level shorthand. */
618
764
  groups?: ListGroupBy_2[];
619
- computed?: ComputedField_2[];
765
+ computed?: ComputedField_3[];
620
766
  /** Dynamic pivot of the current source dataset, with read-only derived identities. */
621
767
  matrix?: MatrixTableOptions_2;
622
768
  /** Full ordered hierarchy; source parent values and descendant-leaf rollups are explicit. */
623
- tree?: TreeTableOptions_2;
769
+ tree?: TreeTableOptions_3;
624
770
  /** Explicit row visibility; hidden rows do not participate in summaries. */
625
771
  rowVisibleWhen?: StyleRule_2["when"];
626
772
  /** Master/detail relation is keyed by business identity, never by display row index. */
@@ -670,7 +816,7 @@ declare type ListGrandTotal_2 = boolean | {
670
816
  style?: ComponentStyle_3;
671
817
  /** 合计列(缺省沿用 groupBy.subtotal) */
672
818
  fields?: string[];
673
- aggregates?: AggregateDefinition_2[];
819
+ aggregates?: AggregateDefinition_3[];
674
820
  };
675
821
  /** 分组小计配置(声明式,见 ListComponent.groupBy) */
676
822
  declare interface ListGroupBy {
@@ -702,7 +848,7 @@ declare interface ListGroupBy_2 {
702
848
  subtotalLabel?: string;
703
849
  /** 组头防孤行(默认 true:页尾放不下"组头+首行"时整体换页) */
704
850
  keepWithNext?: boolean;
705
- aggregates?: AggregateDefinition_2[];
851
+ aggregates?: AggregateDefinition_3[];
706
852
  /** Repeat this group heading after page breaks within the group. */
707
853
  repeatHeader?: boolean;
708
854
  }
@@ -753,6 +899,10 @@ declare interface MachReportDefaults {
753
899
  xlsx?: XlsxRenderOptions;
754
900
  /** 默认关闭;true 为本地草稿,对象可提供权限、校验和保存回调。 */
755
901
  editable?: boolean | ReportEditingOptions;
902
+ /** Optional reference-data loader; review and atomic editing are maintained inside the package. */
903
+ prefill?: ReportPrefillReviewOptions | false;
904
+ /** Compare a reference with the same query result rendered in the report. */
905
+ dataComparison?: ReportDataComparisonReviewOptions | false;
756
906
  /** 默认关闭;启用后提供导入按钮。ExcelJS 仅在导入时加载。 */
757
907
  excelImport?: boolean | ExcelImportOptions;
758
908
  }
@@ -770,7 +920,14 @@ declare type MachReportLogger = Pick<Console, "warn" | "info">;
770
920
  * - 优先级:组件 props > 路由级叠加 > preset > defaults(props 永远最高)
771
921
  */
772
922
  /** 工具栏与状态文案(默认简体中文;出海场景覆写) */
773
- declare interface MachReportMessages extends Partial<ReportCalculationMessages>, ReportPrintMessages, ReportParamOptionsMessages {
923
+ declare interface MachReportMessages extends Partial<ReportCalculationMessages>, Partial<ReportDataReviewMessages>, ReportPrintMessages, ReportParamOptionsMessages {
924
+ reviewTools?: string;
925
+ validationTitle?: string;
926
+ validationError?: string;
927
+ validationWarning?: string;
928
+ validationDataset?: string;
929
+ validationRow?: string;
930
+ validationMore?: string;
774
931
  drillActions?: string;
775
932
  drillOpening?: string;
776
933
  drillMissingValue?: string;
@@ -1028,6 +1185,40 @@ declare interface MachReportToolbarOptions {
1028
1185
  /** 未传时显示全部已有出口;空数组表示不提供导出工具。 */
1029
1186
  exportFormats?: ReportExportFormat[];
1030
1187
  }
1188
+ declare interface MatrixAxisOptions {
1189
+ /** Display names in the same outer-to-inner order as the dimension fields. */
1190
+ labels?: readonly string[];
1191
+ /** Per-level sibling order; omitted levels retain first-seen order. */
1192
+ sort?: readonly MatrixDimensionOrder[];
1193
+ /** One-based prefix depths. Leaf depths are not subtotals. */
1194
+ subtotals?: readonly number[];
1195
+ }
1196
+ declare interface MatrixAxisOptions_2 {
1197
+ /** Display names in the same outer-to-inner order as the dimension fields. */
1198
+ labels?: readonly string[];
1199
+ /** Per-level sibling order; omitted levels retain first-seen order. */
1200
+ sort?: readonly MatrixDimensionOrder_2[];
1201
+ /** One-based prefix depths. Leaf depths are not subtotals. */
1202
+ subtotals?: readonly number[];
1203
+ }
1204
+ declare type MatrixDimensionOrder = "source" | "asc" | "desc";
1205
+ declare type MatrixDimensionOrder_2 = "source" | "asc" | "desc";
1206
+ declare interface MatrixHierarchyOptions {
1207
+ row?: MatrixAxisOptions;
1208
+ column?: MatrixAxisOptions;
1209
+ /** Only null/missing values use this label; empty strings and zero stay distinct. */
1210
+ emptyLabel?: string;
1211
+ subtotalLabel?: string;
1212
+ totalLabel?: string;
1213
+ }
1214
+ declare interface MatrixHierarchyOptions_2 {
1215
+ row?: MatrixAxisOptions_2;
1216
+ column?: MatrixAxisOptions_2;
1217
+ /** Only null/missing values use this label; empty strings and zero stay distinct. */
1218
+ emptyLabel?: string;
1219
+ subtotalLabel?: string;
1220
+ totalLabel?: string;
1221
+ }
1031
1222
  declare interface MatrixTableOptions {
1032
1223
  rowFields: readonly string[];
1033
1224
  columnFields: readonly string[];
@@ -1042,11 +1233,15 @@ declare interface MatrixTableOptions {
1042
1233
  maxColumns?: number;
1043
1234
  maxInputRows?: number;
1044
1235
  maxCells?: number;
1236
+ /** Opt-in hierarchical dimensions, physical merged headers and prefix subtotals. */
1237
+ hierarchy?: MatrixHierarchyOptions;
1238
+ /** Hierarchical aggregate work, checked before measure reads; default 10 million updates. */
1239
+ maxAggregateUpdates?: number;
1045
1240
  }
1046
1241
  declare interface MatrixTableOptions_2 {
1047
1242
  rowFields: readonly string[];
1048
1243
  columnFields: readonly string[];
1049
- measures: readonly (AggregateDefinition_2 & {
1244
+ measures: readonly (AggregateDefinition_3 & {
1050
1245
  label?: string;
1051
1246
  })[];
1052
1247
  totals?: boolean;
@@ -1057,6 +1252,10 @@ declare interface MatrixTableOptions_2 {
1057
1252
  maxColumns?: number;
1058
1253
  maxInputRows?: number;
1059
1254
  maxCells?: number;
1255
+ /** Opt-in hierarchical dimensions, physical merged headers and prefix subtotals. */
1256
+ hierarchy?: MatrixHierarchyOptions_2;
1257
+ /** Hierarchical aggregate work, checked before measure reads; default 10 million updates. */
1258
+ maxAggregateUpdates?: number;
1060
1259
  }
1061
1260
  declare interface OutputDiagnostic {
1062
1261
  code: "invalid-image-data" | "image-budget-exceeded" | "component-render-failed" | "unsupported-text" | "output-degraded" | "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";
@@ -1068,6 +1267,11 @@ declare interface OutputDiagnostic {
1068
1267
  componentPath?: readonly number[];
1069
1268
  kind: string;
1070
1269
  nid?: string;
1270
+ /** Declarative extension identity only; no property values or business binding data enter diagnostics. */
1271
+ extension?: {
1272
+ id: string;
1273
+ version: string;
1274
+ };
1071
1275
  message: string;
1072
1276
  }
1073
1277
  declare interface OutputDiagnostic_2 {
@@ -1080,6 +1284,11 @@ declare interface OutputDiagnostic_2 {
1080
1284
  componentPath?: readonly number[];
1081
1285
  kind: string;
1082
1286
  nid?: string;
1287
+ /** Declarative extension identity only; no property values or business binding data enter diagnostics. */
1288
+ extension?: {
1289
+ id: string;
1290
+ version: string;
1291
+ };
1083
1292
  message: string;
1084
1293
  }
1085
1294
  declare interface OutputDiagnosticOptions extends OutputTaskOptions {
@@ -1120,6 +1329,8 @@ declare interface PaginateOptions {
1120
1329
  maxPages?: number;
1121
1330
  /** Actual grid cells, including repeated furniture and nested children; checked before each page is appended. */
1122
1331
  maxCells?: number;
1332
+ /** Shared bound-chart primitive budget, checked before expansion; default 50000, range 1..1000000. */
1333
+ maxChartComponents?: number;
1123
1334
  signal?: AbortSignal;
1124
1335
  /** Streaming total-page anchors can skip the bounded counting pass when known. */
1125
1336
  knownTotalPages?: number;
@@ -1146,6 +1357,8 @@ declare interface PdfFontCheckResult {
1146
1357
  /** available 仅表示字体资源可达;实际导出仍会校验文字能否编码。 */
1147
1358
  declare type PdfFontStatus = "unchecked" | "checking" | "available" | "disabled" | "unverified" | "error";
1148
1359
  declare interface PlanComponent {
1360
+ /** Template-only aggregate binding, expanded into shared primitives during layout. */
1361
+ chartBinding?: ReportChartBinding;
1149
1362
  /** Optional QR/barcode encoding configuration; no encoder is loaded by the core. */
1150
1363
  code?: CodeOptions;
1151
1364
  /** Template-only binding; resolved and removed before constructing the output plan. */
@@ -1174,6 +1387,8 @@ declare interface PlanComponent {
1174
1387
  fallbackText?: string;
1175
1388
  }
1176
1389
  declare interface PlanComponent_2 {
1390
+ /** Template-only aggregate binding, expanded into shared primitives during layout. */
1391
+ chartBinding?: ReportChartBinding_2;
1177
1392
  /** Optional QR/barcode encoding configuration; no encoder is loaded by the core. */
1178
1393
  code?: CodeOptions_2;
1179
1394
  /** Template-only binding; resolved and removed before constructing the output plan. */
@@ -1202,6 +1417,8 @@ declare interface PlanComponent_2 {
1202
1417
  fallbackText?: string;
1203
1418
  }
1204
1419
  declare interface PlanComponent_3 {
1420
+ /** Template-only aggregate binding, expanded into shared primitives during layout. */
1421
+ chartBinding?: ReportChartBinding_3;
1205
1422
  /** Optional QR/barcode encoding configuration; no encoder is loaded by the core. */
1206
1423
  code?: CodeOptions_3;
1207
1424
  /** Template-only binding; resolved and removed before constructing the output plan. */
@@ -1272,6 +1489,18 @@ declare interface PlanPage {
1272
1489
  marginRightMm?: number;
1273
1490
  components: PlanComponent[];
1274
1491
  }
1492
+ declare interface PlanPage_2 {
1493
+ meta?: Record<string, unknown>;
1494
+ /** wide 表示完整自然列宽;页面仅为预览的垂直窗口分段。 */
1495
+ layout?: "page" | "wide";
1496
+ pageWidthMm: number;
1497
+ pageHeightMm: number;
1498
+ marginTopMm?: number;
1499
+ marginBottomMm?: number;
1500
+ marginLeftMm?: number;
1501
+ marginRightMm?: number;
1502
+ components: PlanComponent_2[];
1503
+ }
1275
1504
  /** 列表的逻辑行来源;用于连续 Excel 重组,避免按文本猜测重复表头。 */
1276
1505
  declare interface PlanTableFragment {
1277
1506
  /** 在整个计划中唯一的逻辑表身份;同一表的分页片段共享身份。 */
@@ -1328,6 +1557,12 @@ declare interface RenderPlan {
1328
1557
  requiresRecalculation?: boolean;
1329
1558
  pages: PlanPage[];
1330
1559
  }
1560
+ declare interface RenderPlan_2 {
1561
+ schemaVersion: string;
1562
+ /** 编辑需要模板重算上下文;跨 Worker/JSON 保留要求,但不声明本地会话可用。 */
1563
+ requiresRecalculation?: boolean;
1564
+ pages: PlanPage_2[];
1565
+ }
1331
1566
  /** Return false to keep the current report. Without a hook the preview asks inline. */
1332
1567
  declare type ReportBeforeDiscard = (context: Readonly<ReportBeforeDiscardContext>) => boolean | Promise<boolean>;
1333
1568
  declare interface ReportBeforeDiscardContext {
@@ -1365,6 +1600,10 @@ declare interface ReportCalculationMessages {
1365
1600
  calculationErrorOverflow: string;
1366
1601
  calculationErrorPrecision: string;
1367
1602
  }
1603
+ declare interface ReportCandidateValidationOptions extends Pick<ReportDatasetValidationOptions, "rules" | "maxChecks" | "maxIssues"> {
1604
+ /** Warnings are visible and allowed by default; block explicitly when required by business policy. */
1605
+ warningPolicy?: "allow" | "block";
1606
+ }
1368
1607
  /** 预览中的物理坐标;合并单元格使用左上角坐标。 */
1369
1608
  declare interface ReportCellAddress {
1370
1609
  pageIndex: number;
@@ -1492,6 +1731,229 @@ declare interface ReportCellTableIdentity_2 {
1492
1731
  declare type ReportCellValue = string | number | boolean | null;
1493
1732
  declare type ReportCellValue_2 = string | number | boolean | null;
1494
1733
  declare type ReportCellValueType = NonNullable<GridCell_2["valueType"]>;
1734
+ /** Serializable binding; data and authorization continue to come from the existing report source. */
1735
+ declare interface ReportChartBinding {
1736
+ dataset: string;
1737
+ categoryField: string;
1738
+ measures: readonly ReportChartMeasure[];
1739
+ type: ReportChartOptions["type"];
1740
+ sort?: "asc" | "desc";
1741
+ title?: string;
1742
+ showValues?: boolean;
1743
+ maxRows?: number;
1744
+ maxCategories?: number;
1745
+ }
1746
+ /** Serializable binding; data and authorization continue to come from the existing report source. */
1747
+ declare interface ReportChartBinding_2 {
1748
+ dataset: string;
1749
+ categoryField: string;
1750
+ measures: readonly ReportChartMeasure_2[];
1751
+ type: ReportChartOptions_2["type"];
1752
+ sort?: "asc" | "desc";
1753
+ title?: string;
1754
+ showValues?: boolean;
1755
+ maxRows?: number;
1756
+ maxCategories?: number;
1757
+ }
1758
+ /** Serializable binding; data and authorization continue to come from the existing report source. */
1759
+ declare interface ReportChartBinding_3 {
1760
+ dataset: string;
1761
+ categoryField: string;
1762
+ measures: readonly ReportChartMeasure_3[];
1763
+ type: ReportChartOptions_3["type"];
1764
+ sort?: "asc" | "desc";
1765
+ title?: string;
1766
+ showValues?: boolean;
1767
+ maxRows?: number;
1768
+ maxCategories?: number;
1769
+ }
1770
+ declare interface ReportChartMeasure extends AggregateRequest {
1771
+ label?: string;
1772
+ color?: string;
1773
+ }
1774
+ declare interface ReportChartMeasure_2 extends AggregateRequest_2 {
1775
+ label?: string;
1776
+ color?: string;
1777
+ }
1778
+ declare interface ReportChartMeasure_3 extends AggregateRequest_3 {
1779
+ label?: string;
1780
+ color?: string;
1781
+ }
1782
+ declare interface ReportChartOptions {
1783
+ type: "bar" | "line" | "stackedBar" | "percentBar";
1784
+ categories: readonly string[];
1785
+ series: readonly ReportChartSeries[];
1786
+ leftMm: number;
1787
+ topMm: number;
1788
+ widthMm: number;
1789
+ heightMm: number;
1790
+ title?: string;
1791
+ showValues?: boolean;
1792
+ }
1793
+ declare interface ReportChartOptions_2 {
1794
+ type: "bar" | "line" | "stackedBar" | "percentBar";
1795
+ categories: readonly string[];
1796
+ series: readonly ReportChartSeries_2[];
1797
+ leftMm: number;
1798
+ topMm: number;
1799
+ widthMm: number;
1800
+ heightMm: number;
1801
+ title?: string;
1802
+ showValues?: boolean;
1803
+ }
1804
+ declare interface ReportChartOptions_3 {
1805
+ type: "bar" | "line" | "stackedBar" | "percentBar";
1806
+ categories: readonly string[];
1807
+ series: readonly ReportChartSeries_3[];
1808
+ leftMm: number;
1809
+ topMm: number;
1810
+ widthMm: number;
1811
+ heightMm: number;
1812
+ title?: string;
1813
+ showValues?: boolean;
1814
+ }
1815
+ declare interface ReportChartSeries {
1816
+ name: string;
1817
+ values: readonly (number | null)[];
1818
+ color?: string;
1819
+ }
1820
+ declare interface ReportChartSeries_2 {
1821
+ name: string;
1822
+ values: readonly (number | null)[];
1823
+ color?: string;
1824
+ }
1825
+ declare interface ReportChartSeries_3 {
1826
+ name: string;
1827
+ values: readonly (number | null)[];
1828
+ color?: string;
1829
+ }
1830
+ declare interface ReportComparison {
1831
+ field: string;
1832
+ op: ">" | ">=" | "<" | "<=" | "==" | "!=" | "between" | "contains" | "isNull" | "isNotNull";
1833
+ /** Legacy scalar thresholds remain supported. Use right for field-to-field comparisons. */
1834
+ value?: ReportPredicateScalar;
1835
+ right?: ReportPredicateOperand;
1836
+ values?: readonly [
1837
+ ReportPredicateScalar,
1838
+ ReportPredicateScalar
1839
+ ];
1840
+ numeric?: "number" | "decimal";
1841
+ valueType?: "number" | "decimal" | "text" | "date" | "boolean";
1842
+ }
1843
+ declare interface ReportComparison_2 {
1844
+ field: string;
1845
+ op: ">" | ">=" | "<" | "<=" | "==" | "!=" | "between" | "contains" | "isNull" | "isNotNull";
1846
+ /** Legacy scalar thresholds remain supported. Use right for field-to-field comparisons. */
1847
+ value?: ReportPredicateScalar_2;
1848
+ right?: ReportPredicateOperand_2;
1849
+ values?: readonly [
1850
+ ReportPredicateScalar_2,
1851
+ ReportPredicateScalar_2
1852
+ ];
1853
+ numeric?: "number" | "decimal";
1854
+ valueType?: "number" | "decimal" | "text" | "date" | "boolean";
1855
+ }
1856
+ declare interface ReportComparison_3 {
1857
+ field: string;
1858
+ op: ">" | ">=" | "<" | "<=" | "==" | "!=" | "between" | "contains" | "isNull" | "isNotNull";
1859
+ /** Legacy scalar thresholds remain supported. Use right for field-to-field comparisons. */
1860
+ value?: ReportPredicateScalar_3;
1861
+ right?: ReportPredicateOperand_3;
1862
+ values?: readonly [
1863
+ ReportPredicateScalar_3,
1864
+ ReportPredicateScalar_3
1865
+ ];
1866
+ numeric?: "number" | "decimal";
1867
+ valueType?: "number" | "decimal" | "text" | "date" | "boolean";
1868
+ }
1869
+ declare interface ReportDataComparisonField {
1870
+ field: string;
1871
+ label?: string;
1872
+ /** Numeric comparison is explicit; identifiers containing digits stay text. */
1873
+ type?: "value" | "decimal";
1874
+ /** Absolute decimal tolerance, inclusive. No binary floating-point subtraction. */
1875
+ tolerance?: string;
1876
+ /** Fractional ratio digits. changeRatio is (after - before) / before, not a percent. */
1877
+ ratioDigits?: number;
1878
+ zeroDenominator?: "omit" | "zero-if-equal";
1879
+ missing?: "distinct" | "empty-equivalent" | "zero";
1880
+ }
1881
+ declare interface ReportDataComparisonReviewOptions extends ReportDataReviewSource {
1882
+ fields: readonly ReportDataComparisonField[];
1883
+ maxDifferences?: number;
1884
+ }
1885
+ declare interface ReportDataLimits {
1886
+ maxRows?: number;
1887
+ maxFields?: number;
1888
+ maxCells?: number;
1889
+ }
1890
+ /** A business record, never a physical report row index. */
1891
+ declare interface ReportDataRecord {
1892
+ rowKey: string | number;
1893
+ values: Readonly<Record<string, ReportCellValue_2>>;
1894
+ }
1895
+ declare interface ReportDataReviewMessages {
1896
+ prefillTitle: string;
1897
+ prefillHint: string;
1898
+ prefillCurrent: string;
1899
+ prefillReference: string;
1900
+ prefillLoad: string;
1901
+ prefillApply: string;
1902
+ prefillMatched: string;
1903
+ prefillChanged: string;
1904
+ prefillSkipped: string;
1905
+ prefillConflict: string;
1906
+ prefillUnchanged: string;
1907
+ prefillReadonly: string;
1908
+ prefillOccupied: string;
1909
+ prefillMissingSource: string;
1910
+ prefillMissingTarget: string;
1911
+ prefillAmbiguous: string;
1912
+ prefillInvalid: string;
1913
+ comparisonTitle: string;
1914
+ comparisonHint: string;
1915
+ comparisonLoad: string;
1916
+ comparisonAdded: string;
1917
+ comparisonRemoved: string;
1918
+ comparisonChanged: string;
1919
+ comparisonUnchanged: string;
1920
+ reviewCancel: string;
1921
+ reviewClose: string;
1922
+ reviewBefore: string;
1923
+ reviewAfter: string;
1924
+ reviewField: string;
1925
+ reviewKey: string;
1926
+ reviewDelta: string;
1927
+ reviewRatio: string;
1928
+ reviewLocate: string;
1929
+ reviewEmpty: string;
1930
+ reviewPrevious: string;
1931
+ reviewNext: string;
1932
+ reviewPage: string;
1933
+ }
1934
+ declare interface ReportDataReviewSource extends ReportDataLimits {
1935
+ sourceScope?: string;
1936
+ datasetId: string;
1937
+ label?: string;
1938
+ /** The host chooses history/instances; this package never guesses an endpoint or period. */
1939
+ load(operation: {
1940
+ signal: AbortSignal;
1941
+ }): readonly ReportDataRecord[] | Promise<readonly ReportDataRecord[]>;
1942
+ /** Cancel loaders that do not finish; default 15 seconds, bounded at 120 seconds. */
1943
+ timeoutMs?: number;
1944
+ }
1945
+ declare interface ReportDatasetValidationOptions {
1946
+ rules: readonly ReportValidationRule[];
1947
+ rowKey?: string;
1948
+ computed?: readonly ComputedField_2[];
1949
+ /** Explicit trusted engine, shared with pagination; never read from a serialized template. */
1950
+ formula?: FormulaAdapter_2;
1951
+ /** Uses the same bounded tree preparation and descendant-leaf summaries as pagination. */
1952
+ tree?: TreeTableOptions_2;
1953
+ maxChecks?: number;
1954
+ maxIssues?: number;
1955
+ signal?: AbortSignal;
1956
+ }
1495
1957
  declare interface ReportDataTarget {
1496
1958
  datasetId: string;
1497
1959
  field: string;
@@ -1599,6 +2061,10 @@ declare interface ReportEditingOptions {
1599
2061
  canEdit?(context: ReportCellContext): boolean;
1600
2062
  /** Return an error message or throw to reject the edit. */
1601
2063
  validate?(edit: Readonly<ReportCellEdit_2>, operation: ReportEditOperation): void | string | Promise<void | string>;
2064
+ /** Same declarative rules can be run in Node via validateReportDataset. Requires a source-backed session. */
2065
+ validation?: ReportCandidateValidationOptions;
2066
+ /** Optional host batch validation sees the fully recalculated candidate plan. */
2067
+ validateBatch?(batch: Readonly<ReportEditBatch>, candidate: RenderPlan_2, operation: ReportEditOperation): void | readonly ReportValidationIssue[] | Promise<void | readonly ReportValidationIssue[]>;
1602
2068
  /** Called before applying the change. A rejection leaves the current report untouched. */
1603
2069
  save?(edit: Readonly<ReportCellEdit_2>, operation: ReportEditOperation): void | ReportEditResult | Promise<void | ReportEditResult>;
1604
2070
  /** Must commit all edits in one server transaction. Required for multi-cell persisted edits. */
@@ -1663,7 +2129,9 @@ declare type ReportExpression = {
1663
2129
  field?: string;
1664
2130
  weightField?: string;
1665
2131
  } | {
1666
- op: "add" | "subtract" | "multiply" | "divide" | "coalesce";
2132
+ op: ReportExpressionOperation;
2133
+ /** Required for if; args are [then, else], and only the selected branch is evaluated. */
2134
+ condition?: ReportPredicate;
1667
2135
  args: readonly ReportExpression[];
1668
2136
  };
1669
2137
  declare type ReportExpression_2 = {
@@ -1675,9 +2143,28 @@ declare type ReportExpression_2 = {
1675
2143
  field?: string;
1676
2144
  weightField?: string;
1677
2145
  } | {
1678
- op: "add" | "subtract" | "multiply" | "divide" | "coalesce";
2146
+ op: ReportExpressionOperation_2;
2147
+ /** Required for if; args are [then, else], and only the selected branch is evaluated. */
2148
+ condition?: ReportPredicate_2;
1679
2149
  args: readonly ReportExpression_2[];
1680
2150
  };
2151
+ declare type ReportExpression_3 = {
2152
+ field: string;
2153
+ } | {
2154
+ value: string | number | boolean | null;
2155
+ } | {
2156
+ aggregate: AggregateOperation_3;
2157
+ field?: string;
2158
+ weightField?: string;
2159
+ } | {
2160
+ op: ReportExpressionOperation_3;
2161
+ /** Required for if; args are [then, else], and only the selected branch is evaluated. */
2162
+ condition?: ReportPredicate_3;
2163
+ args: readonly ReportExpression_3[];
2164
+ };
2165
+ declare type ReportExpressionOperation = "add" | "subtract" | "multiply" | "divide" | "coalesce" | "if" | "round" | "abs" | "concat" | "trim" | "upper" | "lower" | "dateYear" | "dateMonth" | "dateDay";
2166
+ declare type ReportExpressionOperation_2 = "add" | "subtract" | "multiply" | "divide" | "coalesce" | "if" | "round" | "abs" | "concat" | "trim" | "upper" | "lower" | "dateYear" | "dateMonth" | "dateDay";
2167
+ declare type ReportExpressionOperation_3 = "add" | "subtract" | "multiply" | "divide" | "coalesce" | "if" | "round" | "abs" | "concat" | "trim" | "upper" | "lower" | "dateYear" | "dateMonth" | "dateDay";
1681
2168
  /** 保持 Promise<RenderPlan> 契约;元数据为可选,旧业务 fetcher 无需改造。 */
1682
2169
  declare interface ReportFetcher {
1683
2170
  (input: ReportFetchInput): Promise<RenderPlan>;
@@ -1692,7 +2179,13 @@ declare interface ReportFetchInput extends ReportTaskMonitoring {
1692
2179
  /** Index scopes diagnostics when reports share datasets or a report ID is repeated. */
1693
2180
  onQueryResult?: (reportId: string, result: ReportQueryResult, reportIndex?: number) => void;
1694
2181
  }
1695
- declare interface ReportFieldContract {
2182
+ declare type ReportFieldAggregation = "sum" | "avg" | "min" | "max" | "count" | "none";
2183
+ declare interface ReportFieldCalculation {
2184
+ /** Business-owned explanation, never executable JavaScript or an inferred business formula. */
2185
+ description: string;
2186
+ dependsOn: readonly string[];
2187
+ }
2188
+ declare interface ReportFieldContract extends ReportFieldSemantics {
1696
2189
  field: string;
1697
2190
  label?: string;
1698
2191
  type: "text" | "number" | "boolean" | "date" | "decimal";
@@ -1706,6 +2199,16 @@ declare interface ReportFieldContract {
1706
2199
  semanticRole?: "identifier" | "dimension" | "measure" | "date" | "text";
1707
2200
  unit?: string;
1708
2201
  }
2202
+ declare interface ReportFieldSemantics {
2203
+ description?: string;
2204
+ /** Explicit meaning of null/missing; does not convert blanks into zero. */
2205
+ missingMeaning?: string;
2206
+ /** Recommended aggregation; none marks non-additive measures such as ratios. No aggregation runs implicitly. */
2207
+ aggregation?: ReportFieldAggregation;
2208
+ /** Shared presentation only; raw values and calculation precision remain unchanged. */
2209
+ format?: ColumnFormat;
2210
+ calculation?: ReportFieldCalculation;
2211
+ }
1709
2212
  declare interface ReportFieldTarget {
1710
2213
  field: string;
1711
2214
  datasetId?: string;
@@ -1759,12 +2262,9 @@ declare interface ReportParamDef {
1759
2262
  field: string;
1760
2263
  /** 显示名(缺省用 field) */
1761
2264
  label?: string;
1762
- type?: "text" | "number" | "date" | "month" | "year" | "dateRange" | "select";
2265
+ type?: "text" | "number" | "date" | "month" | "year" | "dateRange" | "select" | "multiSelect" | "cascader" | "numberRange";
1763
2266
  /** select 选项 */
1764
- options?: Array<{
1765
- label: string;
1766
- value: string;
1767
- }>;
2267
+ options?: ReportParamTreeOption[];
1768
2268
  /** Opaque host-resolved source key. No URL, credentials or executable code is stored. */
1769
2269
  optionsSource?: string;
1770
2270
  /** Select dependencies must be declared parameters; changing a parent clears descendants. */
@@ -1777,6 +2277,9 @@ declare interface ReportParamDef {
1777
2277
  max?: number | string;
1778
2278
  minLength?: number;
1779
2279
  maxLength?: number;
2280
+ /** multiSelect item count (maximum 100). Cascader paths are bounded to 16 levels. */
2281
+ minItems?: number;
2282
+ maxItems?: number;
1780
2283
  }
1781
2284
  /** 报表参数定义(声明式,模板自描述参数面:渲染组件据此生成查询面板) */
1782
2285
  declare interface ReportParamDef_2 {
@@ -1784,12 +2287,9 @@ declare interface ReportParamDef_2 {
1784
2287
  field: string;
1785
2288
  /** 显示名(缺省用 field) */
1786
2289
  label?: string;
1787
- type?: "text" | "number" | "date" | "month" | "year" | "dateRange" | "select";
2290
+ type?: "text" | "number" | "date" | "month" | "year" | "dateRange" | "select" | "multiSelect" | "cascader" | "numberRange";
1788
2291
  /** select 选项 */
1789
- options?: Array<{
1790
- label: string;
1791
- value: string;
1792
- }>;
2292
+ options?: ReportParamTreeOption_2[];
1793
2293
  /** Opaque host-resolved source key. No URL, credentials or executable code is stored. */
1794
2294
  optionsSource?: string;
1795
2295
  /** Select dependencies must be declared parameters; changing a parent clears descendants. */
@@ -1802,6 +2302,9 @@ declare interface ReportParamDef_2 {
1802
2302
  max?: number | string;
1803
2303
  minLength?: number;
1804
2304
  maxLength?: number;
2305
+ /** multiSelect item count (maximum 100). Cascader paths are bounded to 16 levels. */
2306
+ minItems?: number;
2307
+ maxItems?: number;
1805
2308
  }
1806
2309
  declare interface ReportParamIssue {
1807
2310
  code: ReportParamIssueCode;
@@ -1809,10 +2312,11 @@ declare interface ReportParamIssue {
1809
2312
  field: string;
1810
2313
  message: string;
1811
2314
  }
1812
- declare type ReportParamIssueCode = "definition" | "required" | "type" | "option" | "dependency" | "minimum" | "maximum" | "minLength" | "maxLength";
2315
+ declare type ReportParamIssueCode = "definition" | "required" | "type" | "option" | "dependency" | "minimum" | "maximum" | "minLength" | "maxLength" | "minItems" | "maxItems";
1813
2316
  declare interface ReportParamOption {
1814
2317
  readonly label: string;
1815
2318
  readonly value: string;
2319
+ readonly children?: readonly ReportParamOption[];
1816
2320
  }
1817
2321
  declare interface ReportParamOptionsInput {
1818
2322
  readonly source: string;
@@ -1832,6 +2336,20 @@ declare interface ReportParamOptionsMessages {
1832
2336
  paramOptionsMissingLoader?: string;
1833
2337
  paramOptionsDependencies?: string;
1834
2338
  paramOptionsClear?: string;
2339
+ paramNumberRangeStart?: string;
2340
+ paramNumberRangeEnd?: string;
2341
+ }
2342
+ /** Cascader values are unique within each sibling list. */
2343
+ declare interface ReportParamTreeOption {
2344
+ label: string;
2345
+ value: string;
2346
+ children?: ReportParamTreeOption[];
2347
+ }
2348
+ /** Cascader values are unique within each sibling list. */
2349
+ declare interface ReportParamTreeOption_2 {
2350
+ label: string;
2351
+ value: string;
2352
+ children?: ReportParamTreeOption_2[];
1835
2353
  }
1836
2354
  /** Licensed local font bytes; never downloaded implicitly by the runtime. */
1837
2355
  declare interface ReportPdfFontOptions {
@@ -1844,6 +2362,45 @@ declare interface ReportPdfFontOptions {
1844
2362
  boldItalic?: Uint8Array | ArrayBuffer;
1845
2363
  };
1846
2364
  }
2365
+ declare type ReportPredicate = ReportComparison | {
2366
+ all: readonly ReportPredicate[];
2367
+ } | {
2368
+ any: readonly ReportPredicate[];
2369
+ } | {
2370
+ not: ReportPredicate;
2371
+ };
2372
+ declare type ReportPredicate_2 = ReportComparison_2 | {
2373
+ all: readonly ReportPredicate_2[];
2374
+ } | {
2375
+ any: readonly ReportPredicate_2[];
2376
+ } | {
2377
+ not: ReportPredicate_2;
2378
+ };
2379
+ declare type ReportPredicate_3 = ReportComparison_3 | {
2380
+ all: readonly ReportPredicate_3[];
2381
+ } | {
2382
+ any: readonly ReportPredicate_3[];
2383
+ } | {
2384
+ not: ReportPredicate_3;
2385
+ };
2386
+ declare type ReportPredicateOperand = {
2387
+ field: string;
2388
+ } | {
2389
+ value: ReportPredicateScalar;
2390
+ };
2391
+ declare type ReportPredicateOperand_2 = {
2392
+ field: string;
2393
+ } | {
2394
+ value: ReportPredicateScalar_2;
2395
+ };
2396
+ declare type ReportPredicateOperand_3 = {
2397
+ field: string;
2398
+ } | {
2399
+ value: ReportPredicateScalar_3;
2400
+ };
2401
+ declare type ReportPredicateScalar = string | number | boolean | null;
2402
+ declare type ReportPredicateScalar_2 = string | number | boolean | null;
2403
+ declare type ReportPredicateScalar_3 = string | number | boolean | null;
1847
2404
  declare interface ReportPreferencesAdapter {
1848
2405
  load(key: string): Partial<ReportPreviewPreferences> | null | Promise<Partial<ReportPreviewPreferences> | null>;
1849
2406
  save(key: string, value: Readonly<Partial<ReportPreviewPreferences>>): void | Promise<void>;
@@ -1854,6 +2411,16 @@ declare interface ReportPreferencesOptions {
1854
2411
  key: string;
1855
2412
  adapter: ReportPreferencesAdapter;
1856
2413
  }
2414
+ declare interface ReportPrefillField {
2415
+ field: string;
2416
+ sourceField?: string;
2417
+ label?: string;
2418
+ }
2419
+ declare interface ReportPrefillReviewOptions extends ReportDataReviewSource {
2420
+ fields: readonly ReportPrefillField[];
2421
+ mode?: "empty" | "replace";
2422
+ maxChanges?: number;
2423
+ }
1857
2424
  declare interface ReportPreviewDataTarget extends ReportDataTarget_2 {
1858
2425
  /** Added by the query adapter; isolates identical dataset/row/field identities across reports. */
1859
2426
  reportScope?: string;
@@ -1939,6 +2506,8 @@ declare interface ReportRuntimeBudget {
1939
2506
  maxRows?: number;
1940
2507
  maxPages?: number;
1941
2508
  maxCells?: number;
2509
+ /** Aggregate bound-chart primitives per prepare, before expansion; default 50000, hard maximum 1000000. */
2510
+ maxChartComponents?: number;
1942
2511
  maxOutputBytes?: number;
1943
2512
  /** Bound the plain JSON snapshot accepted by exportPrepared (default 64 MB). */
1944
2513
  maxPreparedBytes?: number;
@@ -2031,6 +2600,29 @@ declare interface ReportTemplateRepeat_2 {
2031
2600
  };
2032
2601
  }
2033
2602
  declare type ReportTemplateSummary = Omit<ReportTemplateDocument, "template">;
2603
+ declare interface ReportValidationIssue {
2604
+ ruleId: string;
2605
+ rowKey?: string | number;
2606
+ rowIndex?: number;
2607
+ field?: string;
2608
+ dataset?: string;
2609
+ sourceScope?: string;
2610
+ severity: "error" | "warning";
2611
+ message: string;
2612
+ }
2613
+ declare interface ReportValidationRule {
2614
+ id: string;
2615
+ /** Optional target; omitted applies to each candidate dataset. */
2616
+ dataset?: string;
2617
+ assert: ReportPredicate_2;
2618
+ when?: ReportPredicate_2;
2619
+ field?: string;
2620
+ severity?: "error" | "warning";
2621
+ message: string;
2622
+ scope?: "row" | "dataset";
2623
+ /** Dataset-scope assertions read this explicit summary row, never an arbitrary detail row. */
2624
+ aggregates?: readonly AggregateDefinition_2[];
2625
+ }
2034
2626
  /** Optional business explanations never replace raw data or schema validation. */
2035
2627
  declare type ReportValueState = "missing-source" | "not-applicable" | "not-calculable";
2036
2628
  /** Optional business explanations never replace raw data or schema validation. */
@@ -2079,25 +2671,13 @@ declare interface RichSegment_3 {
2079
2671
  }
2080
2672
  /** 条件格式规则求值(声明式,见 ListColumn.rules) */
2081
2673
  declare interface StyleRule {
2082
- when: {
2083
- field: string;
2084
- op: ">" | ">=" | "<" | "<=" | "==" | "!=";
2085
- value: number | string;
2086
- /** Explicit decimal comparisons retain decimal thresholds as text. */
2087
- numeric?: "number" | "decimal";
2088
- };
2674
+ when: ReportPredicate;
2089
2675
  /** 命中时合并进单元格样式(color/bold/backgroundColor 等) */
2090
2676
  style: Record<string, unknown>;
2091
2677
  }
2092
2678
  /** 条件格式规则求值(声明式,见 ListColumn.rules) */
2093
2679
  declare interface StyleRule_2 {
2094
- when: {
2095
- field: string;
2096
- op: ">" | ">=" | "<" | "<=" | "==" | "!=";
2097
- value: number | string;
2098
- /** Explicit decimal comparisons retain decimal thresholds as text. */
2099
- numeric?: "number" | "decimal";
2100
- };
2680
+ when: ReportPredicate_3;
2101
2681
  /** 命中时合并进单元格样式(color/bold/backgroundColor 等) */
2102
2682
  style: Record<string, unknown>;
2103
2683
  }
@@ -2187,6 +2767,25 @@ declare interface TreeTableOptions_2 {
2187
2767
  /** Bounded leaf-to-ancestor aggregate work; default one million. */
2188
2768
  maxAggregationVisits?: number;
2189
2769
  }
2770
+ /** A serialized tree contract. Sibling and root order follow input order. */
2771
+ declare interface TreeTableOptions_3 {
2772
+ input: "flat" | "nested";
2773
+ idField: string;
2774
+ /** Flat roots have null/undefined parent values. */
2775
+ parentField?: string;
2776
+ /** Nested child arrays, defaults to children. Every node still needs an ID. */
2777
+ childrenField?: string;
2778
+ labelField: string;
2779
+ indentMm?: number;
2780
+ orphan?: "error" | "root";
2781
+ /** Source preserves parent values; leaf-aggregate derives only parents from descendant leaves. */
2782
+ parentValues?: "source" | "leaf-aggregate";
2783
+ aggregates?: AggregateDefinition_3[];
2784
+ maxRows?: number;
2785
+ maxDepth?: number;
2786
+ /** Bounded leaf-to-ancestor aggregate work; default one million. */
2787
+ maxAggregationVisits?: number;
2788
+ }
2190
2789
  /** The same declarative formatting used by list columns, before any output backend. */
2191
2790
  declare type ValueFormat = ColumnFormat;
2192
2791
  /** The same declarative formatting used by list columns, before any output backend. */
@@ -2202,13 +2801,15 @@ declare type XlsxImageOptions = ImageMediaOptions_2;
2202
2801
  * 目标是"财务能直接用的对账表"而非复刻版面)
2203
2802
  * - 原生 richText 保留基础字形;未支持组件、段落专有排版与单元格嵌套组件计入 diagnostics / warnings
2204
2803
  */
2205
- declare interface XlsxRenderOptions extends OutputDiagnosticOptions_2, XlsxImageOptions {
2804
+ declare interface XlsxRenderOptions extends AssetRenderOptions_2, XlsxImageOptions {
2206
2805
  /** 工作表命名(连续表默认使用标题,其余默认 "Sheet1" 起序)。 */
2207
2806
  sheetName?: (sheetIndex: number) => string;
2208
2807
  /** auto 默认将 wide 逻辑表合并为连续 Sheet;pages 保留逐页;continuous 要求明确的表来源。 */
2209
2808
  sheetMode?: "auto" | "pages" | "continuous";
2210
2809
  /** 宽表或连续表默认 raw,其余默认 text;显式配置可覆盖默认值。 */
2211
2810
  valueMode?: "text" | "raw";
2811
+ /** Static data-bar drawing budget; fail explicitly rather than omitting bars. Default 10,000. */
2812
+ maxDataBars?: number;
2212
2813
  /** 连续表默认不限制打印纸型;显式 A3/A4/A5 仅设置打印适配,不改变 Excel 列宽。 */
2213
2814
  paperSize?: "auto" | "a3" | "a4" | "a5";
2214
2815
  }