@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
@@ -387,6 +387,10 @@ declare type __VLS_Props_3 = {
387
387
  /** 触发过查询后才开始必填提示(避免首屏一片红) */
388
388
  attempted: boolean;
389
389
  issues?: readonly ReportParamIssue[];
390
+ /** Embedded batch forms reuse the same typed inputs without per-row query buttons. */
391
+ showActions?: boolean;
392
+ showTitle?: boolean;
393
+ disabled?: boolean;
390
394
  };
391
395
  declare function __VLS_template(): {
392
396
  slots: {
@@ -821,11 +825,15 @@ declare interface GridCell {
821
825
  value?: string | number | boolean | null;
822
826
  /** Excel 数字格式(例如 #,##0.00 / 0.00%),不改变 text。 */
823
827
  numberFormat?: string;
828
+ /** Physical left inset for hierarchical labels; raw value stays unchanged. */
829
+ indentMm?: number;
824
830
  /** 编辑输入类型;省略时只按原始值推断,数字字符串不会被转换为数值。 */
825
831
  valueType?: "text" | "number" | "boolean";
826
832
  /** 单元格级编辑控制;预览仍需显式开启 editing。 */
827
833
  editable?: boolean;
828
834
  source?: ReportCellSource;
835
+ /** SDK 派生结果不映射业务来源,始终只读(包括覆盖同名源字段的计算)。 */
836
+ derived?: boolean;
829
837
  /** Excel 公式保留元数据;当前引擎不计算公式,公式格始终只读。 */
830
838
  formula?: string;
831
839
  children?: PlanComponent[];
@@ -840,11 +848,15 @@ declare interface GridCell_2 {
840
848
  value?: string | number | boolean | null;
841
849
  /** Excel 数字格式(例如 #,##0.00 / 0.00%),不改变 text。 */
842
850
  numberFormat?: string;
851
+ /** Physical left inset for hierarchical labels; raw value stays unchanged. */
852
+ indentMm?: number;
843
853
  /** 编辑输入类型;省略时只按原始值推断,数字字符串不会被转换为数值。 */
844
854
  valueType?: "text" | "number" | "boolean";
845
855
  /** 单元格级编辑控制;预览仍需显式开启 editing。 */
846
856
  editable?: boolean;
847
857
  source?: ReportCellSource_2;
858
+ /** SDK 派生结果不映射业务来源,始终只读(包括覆盖同名源字段的计算)。 */
859
+ derived?: boolean;
848
860
  /** Excel 公式保留元数据;当前引擎不计算公式,公式格始终只读。 */
849
861
  formula?: string;
850
862
  children?: PlanComponent_2[];
@@ -859,11 +871,15 @@ declare interface GridCell_3 {
859
871
  value?: string | number | boolean | null;
860
872
  /** Excel 数字格式(例如 #,##0.00 / 0.00%),不改变 text。 */
861
873
  numberFormat?: string;
874
+ /** Physical left inset for hierarchical labels; raw value stays unchanged. */
875
+ indentMm?: number;
862
876
  /** 编辑输入类型;省略时只按原始值推断,数字字符串不会被转换为数值。 */
863
877
  valueType?: "text" | "number" | "boolean";
864
878
  /** 单元格级编辑控制;预览仍需显式开启 editing。 */
865
879
  editable?: boolean;
866
880
  source?: ReportCellSource_3;
881
+ /** SDK 派生结果不映射业务来源,始终只读(包括覆盖同名源字段的计算)。 */
882
+ derived?: boolean;
867
883
  /** Excel 公式保留元数据;当前引擎不计算公式,公式格始终只读。 */
868
884
  formula?: string;
869
885
  children?: PlanComponent_3[];
@@ -964,6 +980,8 @@ declare interface ListColumn_3 {
964
980
  }
965
981
  declare interface ListComponent {
966
982
  kind: "list";
983
+ /** Opaque serializable layout annotations; interpreted only by explicit optional adapters. */
984
+ meta?: Record<string, unknown>;
967
985
  id?: string;
968
986
  /** 宽表标记用于连续 Excel;不改变低层列表的列宽和分页算法。 */
969
987
  layout?: "page" | "wide";
@@ -973,6 +991,10 @@ declare interface ListComponent {
973
991
  topMm: number;
974
992
  widthMm: number;
975
993
  dataset: string;
994
+ /** Headerless record/region bindings do not allocate a synthetic list header. */
995
+ header?: boolean;
996
+ /** A fixed record region rejects multiple rows instead of dropping source data. */
997
+ cardinality?: "record";
976
998
  /** 数据集中稳定业务主键的字段名;省略时编辑仅有计划内坐标。 */
977
999
  rowKey?: string;
978
1000
  revisionField?: string;
@@ -999,6 +1021,8 @@ declare interface ListComponent {
999
1021
  computed?: ComputedField[];
1000
1022
  /** Dynamic pivot of the current source dataset, with read-only derived identities. */
1001
1023
  matrix?: MatrixTableOptions;
1024
+ /** Full ordered hierarchy; source parent values and descendant-leaf rollups are explicit. */
1025
+ tree?: TreeTableOptions;
1002
1026
  /** Explicit row visibility; hidden rows do not participate in summaries. */
1003
1027
  rowVisibleWhen?: StyleRule["when"];
1004
1028
  /** Master/detail relation is keyed by business identity, never by display row index. */
@@ -1008,6 +1032,8 @@ declare interface ListComponent {
1008
1032
  }
1009
1033
  declare interface ListComponent_2 {
1010
1034
  kind: "list";
1035
+ /** Opaque serializable layout annotations; interpreted only by explicit optional adapters. */
1036
+ meta?: Record<string, unknown>;
1011
1037
  id?: string;
1012
1038
  /** 宽表标记用于连续 Excel;不改变低层列表的列宽和分页算法。 */
1013
1039
  layout?: "page" | "wide";
@@ -1017,6 +1043,10 @@ declare interface ListComponent_2 {
1017
1043
  topMm: number;
1018
1044
  widthMm: number;
1019
1045
  dataset: string;
1046
+ /** Headerless record/region bindings do not allocate a synthetic list header. */
1047
+ header?: boolean;
1048
+ /** A fixed record region rejects multiple rows instead of dropping source data. */
1049
+ cardinality?: "record";
1020
1050
  /** 数据集中稳定业务主键的字段名;省略时编辑仅有计划内坐标。 */
1021
1051
  rowKey?: string;
1022
1052
  revisionField?: string;
@@ -1043,6 +1073,8 @@ declare interface ListComponent_2 {
1043
1073
  computed?: ComputedField_2[];
1044
1074
  /** Dynamic pivot of the current source dataset, with read-only derived identities. */
1045
1075
  matrix?: MatrixTableOptions_2;
1076
+ /** Full ordered hierarchy; source parent values and descendant-leaf rollups are explicit. */
1077
+ tree?: TreeTableOptions_2;
1046
1078
  /** Explicit row visibility; hidden rows do not participate in summaries. */
1047
1079
  rowVisibleWhen?: StyleRule_2["when"];
1048
1080
  /** Master/detail relation is keyed by business identity, never by display row index. */
@@ -1052,6 +1084,8 @@ declare interface ListComponent_2 {
1052
1084
  }
1053
1085
  declare interface ListComponent_3 {
1054
1086
  kind: "list";
1087
+ /** Opaque serializable layout annotations; interpreted only by explicit optional adapters. */
1088
+ meta?: Record<string, unknown>;
1055
1089
  id?: string;
1056
1090
  /** 宽表标记用于连续 Excel;不改变低层列表的列宽和分页算法。 */
1057
1091
  layout?: "page" | "wide";
@@ -1061,6 +1095,10 @@ declare interface ListComponent_3 {
1061
1095
  topMm: number;
1062
1096
  widthMm: number;
1063
1097
  dataset: string;
1098
+ /** Headerless record/region bindings do not allocate a synthetic list header. */
1099
+ header?: boolean;
1100
+ /** A fixed record region rejects multiple rows instead of dropping source data. */
1101
+ cardinality?: "record";
1064
1102
  /** 数据集中稳定业务主键的字段名;省略时编辑仅有计划内坐标。 */
1065
1103
  rowKey?: string;
1066
1104
  revisionField?: string;
@@ -1087,6 +1125,8 @@ declare interface ListComponent_3 {
1087
1125
  computed?: ComputedField_3[];
1088
1126
  /** Dynamic pivot of the current source dataset, with read-only derived identities. */
1089
1127
  matrix?: MatrixTableOptions_3;
1128
+ /** Full ordered hierarchy; source parent values and descendant-leaf rollups are explicit. */
1129
+ tree?: TreeTableOptions_3;
1090
1130
  /** Explicit row visibility; hidden rows do not participate in summaries. */
1091
1131
  rowVisibleWhen?: StyleRule_3["when"];
1092
1132
  /** Master/detail relation is keyed by business identity, never by display row index. */
@@ -1099,6 +1139,9 @@ declare interface ListDetail {
1099
1139
  parentKey: string;
1100
1140
  foreignKey: string;
1101
1141
  rowKey?: string;
1142
+ /** 子表独立的并发契约;省略时不继承主表字段。 */
1143
+ revisionField?: string;
1144
+ sourceTokenField?: string;
1102
1145
  columns: ListColumn[];
1103
1146
  rowHeightMm?: number;
1104
1147
  header?: boolean;
@@ -1111,6 +1154,9 @@ declare interface ListDetail_2 {
1111
1154
  parentKey: string;
1112
1155
  foreignKey: string;
1113
1156
  rowKey?: string;
1157
+ /** 子表独立的并发契约;省略时不继承主表字段。 */
1158
+ revisionField?: string;
1159
+ sourceTokenField?: string;
1114
1160
  columns: ListColumn_2[];
1115
1161
  rowHeightMm?: number;
1116
1162
  header?: boolean;
@@ -1123,6 +1169,9 @@ declare interface ListDetail_3 {
1123
1169
  parentKey: string;
1124
1170
  foreignKey: string;
1125
1171
  rowKey?: string;
1172
+ /** 子表独立的并发契约;省略时不继承主表字段。 */
1173
+ revisionField?: string;
1174
+ sourceTokenField?: string;
1126
1175
  columns: ListColumn_3[];
1127
1176
  rowHeightMm?: number;
1128
1177
  header?: boolean;
@@ -1406,6 +1455,8 @@ export declare interface MachReportMessages extends Partial<ReportCalculationMes
1406
1455
  paramPromptDescription?: string;
1407
1456
  paramSelectPlaceholder?: string;
1408
1457
  paramTextPlaceholder?: string;
1458
+ paramRangeStart?: string;
1459
+ paramRangeEnd?: string;
1409
1460
  /** 可选搜索进度文案,旧完整 messages 对象无需新增字段。 */
1410
1461
  searching?: string;
1411
1462
  importExcel?: string;
@@ -1457,6 +1508,7 @@ export declare interface MachReportMessages extends Partial<ReportCalculationMes
1457
1508
  conflicts?: string;
1458
1509
  editReadOnly?: string;
1459
1510
  editMissing?: string;
1511
+ editRecalculationUnavailable?: string;
1460
1512
  editDuplicate?: string;
1461
1513
  clipboardInvalid?: string;
1462
1514
  editSaved?: string;
@@ -1842,6 +1894,7 @@ export declare class PlanLoadError extends Error {
1842
1894
  constructor(message: string);
1843
1895
  }
1844
1896
  declare interface PlanPage {
1897
+ meta?: Record<string, unknown>;
1845
1898
  /** wide 表示完整自然列宽;页面仅为预览的垂直窗口分段。 */
1846
1899
  layout?: "page" | "wide";
1847
1900
  pageWidthMm: number;
@@ -1929,6 +1982,8 @@ export declare interface ProviderEditingOptions extends Pick<ReportEditingOption
1929
1982
  }
1930
1983
  declare interface RenderPlan {
1931
1984
  schemaVersion: string;
1985
+ /** 编辑需要模板重算上下文;跨 Worker/JSON 保留要求,但不声明本地会话可用。 */
1986
+ requiresRecalculation?: boolean;
1932
1987
  pages: PlanPage[];
1933
1988
  }
1934
1989
  export declare const REPORT_EXPORT_FORMATS: readonly ReportExportFormat[];
@@ -2054,7 +2109,7 @@ declare type ReportCellFieldOptions = ReportCellFieldBase & ({
2054
2109
  min?: string;
2055
2110
  max?: string;
2056
2111
  });
2057
- declare type ReportCellReadOnlyReason = "cell" | "formula" | "complex" | "structure";
2112
+ declare type ReportCellReadOnlyReason = "cell" | "formula" | "complex" | "structure" | "derived";
2058
2113
  export declare interface ReportCellSelection {
2059
2114
  anchor: ReportCellAddress_2;
2060
2115
  focus: ReportCellAddress_2;
@@ -2237,6 +2292,27 @@ export declare interface ReportFieldTarget {
2237
2292
  rowKey?: string | number;
2238
2293
  tableId?: string;
2239
2294
  }
2295
+ declare interface ReportFlowBand {
2296
+ /** Exact stable component IDs. Static components use nid, lists use id. */
2297
+ componentIds: string[];
2298
+ /** Source-template coordinates; following bands keep their original gap. */
2299
+ topMm: number;
2300
+ heightMm: number;
2301
+ }
2302
+ declare interface ReportFlowBand_2 {
2303
+ /** Exact stable component IDs. Static components use nid, lists use id. */
2304
+ componentIds: string[];
2305
+ /** Source-template coordinates; following bands keep their original gap. */
2306
+ topMm: number;
2307
+ heightMm: number;
2308
+ }
2309
+ declare interface ReportFlowBand_3 {
2310
+ /** Exact stable component IDs. Static components use nid, lists use id. */
2311
+ componentIds: string[];
2312
+ /** Source-template coordinates; following bands keep their original gap. */
2313
+ topMm: number;
2314
+ heightMm: number;
2315
+ }
2240
2316
  export declare type ReportIdInput = string | string[] | null | undefined;
2241
2317
  export declare interface ReportInteractionOptions {
2242
2318
  /** 只读选区计算,默认关闭;不写回业务值或执行导入的 Excel 公式。 */
@@ -2258,6 +2334,15 @@ export declare interface ReportOutputOptions {
2258
2334
  /** warn preserves supported output and shows diagnostics; strict rejects known fidelity loss. */
2259
2335
  fidelity?: "warn" | "strict";
2260
2336
  }
2337
+ declare interface ReportPageFlow {
2338
+ bands: ReportFlowBand[];
2339
+ }
2340
+ declare interface ReportPageFlow_2 {
2341
+ bands: ReportFlowBand_2[];
2342
+ }
2343
+ declare interface ReportPageFlow_3 {
2344
+ bands: ReportFlowBand_3[];
2345
+ }
2261
2346
  export declare const ReportPagination: DefineComponent<__VLS_Props_2, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & {
2262
2347
  goto: (page: number) => any;
2263
2348
  }, string, MachReportVuePublicProps, Readonly<__VLS_Props_2> & Readonly<{
@@ -2269,7 +2354,7 @@ declare interface ReportParamDef {
2269
2354
  field: string;
2270
2355
  /** 显示名(缺省用 field) */
2271
2356
  label?: string;
2272
- type?: "text" | "number" | "date" | "select";
2357
+ type?: "text" | "number" | "date" | "month" | "year" | "dateRange" | "select";
2273
2358
  /** select 选项 */
2274
2359
  options?: Array<{
2275
2360
  label: string;
@@ -2278,7 +2363,7 @@ declare interface ReportParamDef {
2278
2363
  defaultValue?: string;
2279
2364
  required?: boolean;
2280
2365
  placeholder?: string;
2281
- /** 数字上下界;date 参数使用 YYYY-MM-DD 字符串(含边界)。 */
2366
+ /** 数字上下界;日期/月/年使用对应规范字符串;dateRange 对两端使用 YYYY-MM-DD 边界(含边界)。 */
2282
2367
  min?: number | string;
2283
2368
  max?: number | string;
2284
2369
  minLength?: number;
@@ -2290,7 +2375,7 @@ declare interface ReportParamDef_2 {
2290
2375
  field: string;
2291
2376
  /** 显示名(缺省用 field) */
2292
2377
  label?: string;
2293
- type?: "text" | "number" | "date" | "select";
2378
+ type?: "text" | "number" | "date" | "month" | "year" | "dateRange" | "select";
2294
2379
  /** select 选项 */
2295
2380
  options?: Array<{
2296
2381
  label: string;
@@ -2299,7 +2384,7 @@ declare interface ReportParamDef_2 {
2299
2384
  defaultValue?: string;
2300
2385
  required?: boolean;
2301
2386
  placeholder?: string;
2302
- /** 数字上下界;date 参数使用 YYYY-MM-DD 字符串(含边界)。 */
2387
+ /** 数字上下界;日期/月/年使用对应规范字符串;dateRange 对两端使用 YYYY-MM-DD 边界(含边界)。 */
2303
2388
  min?: number | string;
2304
2389
  max?: number | string;
2305
2390
  minLength?: number;
@@ -2311,7 +2396,7 @@ declare interface ReportParamDef_3 {
2311
2396
  field: string;
2312
2397
  /** 显示名(缺省用 field) */
2313
2398
  label?: string;
2314
- type?: "text" | "number" | "date" | "select";
2399
+ type?: "text" | "number" | "date" | "month" | "year" | "dateRange" | "select";
2315
2400
  /** select 选项 */
2316
2401
  options?: Array<{
2317
2402
  label: string;
@@ -2320,7 +2405,7 @@ declare interface ReportParamDef_3 {
2320
2405
  defaultValue?: string;
2321
2406
  required?: boolean;
2322
2407
  placeholder?: string;
2323
- /** 数字上下界;date 参数使用 YYYY-MM-DD 字符串(含边界)。 */
2408
+ /** 数字上下界;日期/月/年使用对应规范字符串;dateRange 对两端使用 YYYY-MM-DD 边界(含边界)。 */
2324
2409
  min?: number | string;
2325
2410
  max?: number | string;
2326
2411
  minLength?: number;
@@ -2343,7 +2428,12 @@ export declare const ReportParamPanel: DefineComponent<__VLS_Props_3, {
2343
2428
  onReset?: (() => any) | undefined;
2344
2429
  onQuery?: (() => any) | undefined;
2345
2430
  "onUpdate:modelValue"?: ((value: Record<string, string>) => any) | undefined;
2346
- }>, {}>;
2431
+ }>, {
2432
+ disabled: boolean;
2433
+ issues: readonly ReportParamIssue[];
2434
+ showActions: boolean;
2435
+ showTitle: boolean;
2436
+ }>;
2347
2437
  export declare interface ReportPreferencesAdapter {
2348
2438
  load(key: string): Partial<ReportPreviewPreferences> | null | Promise<Partial<ReportPreviewPreferences> | null>;
2349
2439
  save(key: string, value: Readonly<Partial<ReportPreviewPreferences>>): void | Promise<void>;
@@ -2589,6 +2679,9 @@ declare interface TemplatePage {
2589
2679
  marginLeftMm?: number;
2590
2680
  marginRightMm?: number;
2591
2681
  components: TemplateComponent[];
2682
+ /** Explicit vertical bands preserve source gaps as dynamic regions expand. */
2683
+ flow?: ReportPageFlow;
2684
+ meta?: Record<string, unknown>;
2592
2685
  }
2593
2686
  declare interface TemplatePage_2 {
2594
2687
  widthMm: number;
@@ -2600,6 +2693,9 @@ declare interface TemplatePage_2 {
2600
2693
  marginLeftMm?: number;
2601
2694
  marginRightMm?: number;
2602
2695
  components: TemplateComponent_2[];
2696
+ /** Explicit vertical bands preserve source gaps as dynamic regions expand. */
2697
+ flow?: ReportPageFlow_2;
2698
+ meta?: Record<string, unknown>;
2603
2699
  }
2604
2700
  declare interface TemplatePage_3 {
2605
2701
  widthMm: number;
@@ -2611,6 +2707,9 @@ declare interface TemplatePage_3 {
2611
2707
  marginLeftMm?: number;
2612
2708
  marginRightMm?: number;
2613
2709
  components: TemplateComponent_3[];
2710
+ /** Explicit vertical bands preserve source gaps as dynamic regions expand. */
2711
+ flow?: ReportPageFlow_3;
2712
+ meta?: Record<string, unknown>;
2614
2713
  }
2615
2714
  /**
2616
2715
  * 文本测量与折行(分页/Canvas/PDF 共用的唯一折行真相源)。
@@ -2633,6 +2732,63 @@ declare interface TextMeasurer {
2633
2732
  /** theme 对象 → CSS 自定义属性 style 对象(注入组件外壳) */
2634
2733
  export declare function themeToCssVars(theme: Partial<MachReportTheme>): CSSProperties;
2635
2734
  export declare function toErrorDetail(error: unknown): MachReportErrorDetail;
2735
+ /** A serialized tree contract. Sibling and root order follow input order. */
2736
+ declare interface TreeTableOptions {
2737
+ input: "flat" | "nested";
2738
+ idField: string;
2739
+ /** Flat roots have null/undefined parent values. */
2740
+ parentField?: string;
2741
+ /** Nested child arrays, defaults to children. Every node still needs an ID. */
2742
+ childrenField?: string;
2743
+ labelField: string;
2744
+ indentMm?: number;
2745
+ orphan?: "error" | "root";
2746
+ /** Source preserves parent values; leaf-aggregate derives only parents from descendant leaves. */
2747
+ parentValues?: "source" | "leaf-aggregate";
2748
+ aggregates?: AggregateDefinition[];
2749
+ maxRows?: number;
2750
+ maxDepth?: number;
2751
+ /** Bounded leaf-to-ancestor aggregate work; default one million. */
2752
+ maxAggregationVisits?: number;
2753
+ }
2754
+ /** A serialized tree contract. Sibling and root order follow input order. */
2755
+ declare interface TreeTableOptions_2 {
2756
+ input: "flat" | "nested";
2757
+ idField: string;
2758
+ /** Flat roots have null/undefined parent values. */
2759
+ parentField?: string;
2760
+ /** Nested child arrays, defaults to children. Every node still needs an ID. */
2761
+ childrenField?: string;
2762
+ labelField: string;
2763
+ indentMm?: number;
2764
+ orphan?: "error" | "root";
2765
+ /** Source preserves parent values; leaf-aggregate derives only parents from descendant leaves. */
2766
+ parentValues?: "source" | "leaf-aggregate";
2767
+ aggregates?: AggregateDefinition_2[];
2768
+ maxRows?: number;
2769
+ maxDepth?: number;
2770
+ /** Bounded leaf-to-ancestor aggregate work; default one million. */
2771
+ maxAggregationVisits?: number;
2772
+ }
2773
+ /** A serialized tree contract. Sibling and root order follow input order. */
2774
+ declare interface TreeTableOptions_3 {
2775
+ input: "flat" | "nested";
2776
+ idField: string;
2777
+ /** Flat roots have null/undefined parent values. */
2778
+ parentField?: string;
2779
+ /** Nested child arrays, defaults to children. Every node still needs an ID. */
2780
+ childrenField?: string;
2781
+ labelField: string;
2782
+ indentMm?: number;
2783
+ orphan?: "error" | "root";
2784
+ /** Source preserves parent values; leaf-aggregate derives only parents from descendant leaves. */
2785
+ parentValues?: "source" | "leaf-aggregate";
2786
+ aggregates?: AggregateDefinition_3[];
2787
+ maxRows?: number;
2788
+ maxDepth?: number;
2789
+ /** Bounded leaf-to-ancestor aggregate work; default one million. */
2790
+ maxAggregationVisits?: number;
2791
+ }
2636
2792
  /**
2637
2793
  * 父组件统一入口,无需手写组件实例类型或可选链:
2638
2794
  * `const report = useMachReport()` → `<MachReportPreview :ref="report.ref" />`。
@@ -2664,6 +2820,8 @@ export declare function usePageWindow(plan: Ref<RenderPlan | null>, zoom: Ref<nu
2664
2820
  export declare function usePrintExport(plan: Ref<RenderPlan | null>, hooks: {
2665
2821
  /** 按导出开始时的配置快照处理,避免输出过程中跟随路由配置变化。 */
2666
2822
  getXlsxOptions?: () => XlsxRenderOptions;
2823
+ /** Flush the active editor and await source-backed calculation/persistence before capturing the output plan. */
2824
+ beforeOutput?: () => boolean | Promise<boolean>;
2667
2825
  getPdfExporter: () => PdfExporter;
2668
2826
  onError: (message: string, code?: string) => void;
2669
2827
  onWarning?: (message: string) => void;
@@ -2677,8 +2835,8 @@ export declare function usePrintExport(plan: Ref<RenderPlan | null>, hooks: {
2677
2835
  exportImages: () => Promise<void>;
2678
2836
  exportWord: () => Promise<void>;
2679
2837
  openPdfWindow: () => void;
2680
- invalidatePending: () => void;
2681
- cancel: () => void;
2838
+ invalidatePending: (cancelPreparation?: boolean) => void;
2839
+ cancel: (cancelPreparation?: boolean) => void;
2682
2840
  releasePrintFrame: () => void;
2683
2841
  dispose: () => void;
2684
2842
  };
@@ -2710,6 +2868,14 @@ export declare function useZoom(getFitInputs: () => {
2710
2868
  applyFitZoom: () => void;
2711
2869
  setZoom: (mode: "fit" | number) => void;
2712
2870
  };
2871
+ declare interface XlsxImageOptions {
2872
+ /** Decoded bytes per unique embedded image; default 16 MiB. */
2873
+ maxImageBytes?: number;
2874
+ /** Total decoded bytes of unique images in this workbook; default 32 MiB. */
2875
+ maxTotalImageBytes?: number;
2876
+ /** Unique embedded media limit, default 1000; repeated placements reuse the same media. */
2877
+ maxImages?: number;
2878
+ }
2713
2879
  /**
2714
2880
  * RenderPlan → xlsx 导出(B 端第二出口,对齐家族 @agile-team/mach-table-xlsx 路线):
2715
2881
  * - 网格组件 → 真表格:列宽(mm→Excel 宽度)、行高(mm→pt)、colSpan/rowSpan 合并、
@@ -2718,7 +2884,7 @@ export declare function useZoom(getFitInputs: () => {
2718
2884
  * 目标是"财务能直接用的对账表"而非复刻版面)
2719
2885
  * - 未支持组件、富文本专有内容与单元格嵌套组件跳过并计入 warnings
2720
2886
  */
2721
- declare interface XlsxRenderOptions extends OutputDiagnosticOptions_2 {
2887
+ declare interface XlsxRenderOptions extends OutputDiagnosticOptions_2, XlsxImageOptions {
2722
2888
  /** 工作表命名(连续表默认使用标题,其余默认 "Sheet1" 起序)。 */
2723
2889
  sheetName?: (sheetIndex: number) => string;
2724
2890
  /** auto 默认将 wide 逻辑表合并为连续 Sheet;pages 保留逐页;continuous 要求明确的表来源。 */
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("./plugin-Dg-J1Rbm.cjs");function i(){return Promise.resolve().then(()=>require("./ReportPreview-DRtVPUYo.cjs")).then(e=>e.ReportPreview$1)}const t={install(e,o={}){r.machReportPlugin.install(e,o)}};exports.MachReportPreview=r.MachReportPreview;exports.default=t;exports.machReportAsyncPlugin=t;exports.preloadMachReport=i;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("./plugin-BDTU4D94.cjs");function i(){return Promise.resolve().then(()=>require("./ReportPreview-DWXROHBP.cjs")).then(e=>e.ReportPreview$1)}const t={install(e,o={}){r.machReportPlugin.install(e,o)}};exports.MachReportPreview=r.MachReportPreview;exports.default=t;exports.machReportAsyncPlugin=t;exports.preloadMachReport=i;
package/dist/vue-async.js CHANGED
@@ -1,11 +1,11 @@
1
- import { m as o } from "./plugin-BWwIgZXV.js";
2
- import { M as l } from "./plugin-BWwIgZXV.js";
1
+ import { m as r } from "./plugin-Cd5G2QQn.js";
2
+ import { M as l } from "./plugin-Cd5G2QQn.js";
3
3
  function a() {
4
- return import("./ReportPreview-B5ZNEasW.js").then((t) => t.C);
4
+ return import("./ReportPreview-DiNXhQI0.js").then((t) => t.o);
5
5
  }
6
6
  const n = {
7
- install(t, r = {}) {
8
- o.install(t, r);
7
+ install(t, o = {}) {
8
+ r.install(t, o);
9
9
  }
10
10
  };
11
11
  export {
package/dist/vue.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("@agile-team/mach-report"),t=require("./ReportPreview-DRtVPUYo.cjs"),l=require("./plugin-Dg-J1Rbm.cjs"),P=require("vue");function C(r){const e=p.createReportSource(r),i=async o=>{if(o.reportIds.length===0)throw new t.PlanLoadError("缺少报表 ID");for(const n of o.reportIds)if(!Object.prototype.hasOwnProperty.call(r,n)||!r[n])throw new t.PlanLoadError(`本地模板 ${n} 不存在`);return e(o)};return i.getParamDefs=e.getParamDefs,i}const M=Object.freeze({loading:!1,hasPlan:!1,pageCount:0,currentPage:1,exporting:null,printing:!1,canExport:!1,canPrint:!1,error:null,pdfFont:Object.freeze({status:"unchecked",fontUrl:""})});function S(){const r=P.shallowRef(null),e=()=>r.value?.state??M,i=Object.freeze({get loading(){return e().loading},get hasPlan(){return e().hasPlan},get pageCount(){return e().pageCount},get currentPage(){return e().currentPage},get exporting(){return e().exporting},get printing(){return e().printing},get canExport(){return e().canExport},get canPrint(){return e().canPrint},get error(){return e().error},get pdfFont(){return e().pdfFont},get editing(){return e().editing??!1},get saving(){return e().saving??!1},get importing(){return e().importing??!1},get dirty(){return e().dirty??!1},get pendingLocalChanges(){return e().pendingLocalChanges??!1},get task(){return e().task??null},get diagnostics(){return e().diagnostics??[]},get reportIds(){return e().reportIds??[]},get params(){return e().params??{}},get canUndo(){return e().canUndo??!1},get canRedo(){return e().canRedo??!1},get changeCount(){return e().changeCount??0},get selection(){return e().selection??null}});function o(){if(!r.value)throw new t.MachReportError("config","报表预览尚未挂载,请在 ready 后调用控制器");return r.value}return{ref(n){const a=n;r.value=a&&typeof a.reload=="function"&&typeof a.print=="function"&&typeof a.exportAs=="function"&&typeof a.openPdfWindow=="function"&&typeof a.gotoPage=="function"&&typeof a.setParams=="function"?a:null},ready:P.computed(()=>r.value!==null),state:i,async checkPdfFont(){const n=o();return n.checkPdfFont?n.checkPdfFont():{status:"unverified",fontUrl:"",message:"旧自定义控制器未提供字体检查,请由宿主确认字体配置"}},cancelTask(){o().cancelTask?.()},async confirmDiscard(n){return await o().confirmDiscard?.(n)??!0},getOutputDiagnostics(n){return o().getOutputDiagnostics?.(n)??[]},async reload(){await o().reload()},async print(){await o().print()},async exportAs(n){await o().exportAs(n)},openPdfWindow(){o().openPdfWindow()},gotoPage(n){o().gotoPage(n)},async setParams(n,a){await o().setParams(n,a)},async importExcel(n,a){const f=o();if(!f.importExcel)throw new t.MachReportError("config","旧自定义控制器未提供 Excel 导入");return f.importExcel(n,a)},getPlan(){return o().getPlan?.()??null},getChanges(){return o().getChanges?.()??[]},getDifferences:()=>o().getDifferences?.()??[],undo:async()=>await o().undo?.()??!1,redo:async()=>await o().redo?.()??!1,restoreChanges:async()=>await o().restoreChanges?.()??!1,getSelection:()=>o().getSelection?.()??null,focusCell:async(n,a)=>await o().focusCell?.(n,a)??!1,focusField:async n=>await o().focusField?.(n)??!1,copySelection:()=>o().copySelection?.()??"",pasteSelection:async n=>await o().pasteSelection?.(n)??!1}}function v(){return P.inject(l.MACH_REPORT_CONTROLLER_KEY,null)}function h(r){return!!r&&typeof r=="object"&&!Array.isArray(r)}function A(r){return Array.isArray(r)&&r.every(e=>h(e)&&typeof e.code=="string"&&typeof e.message=="string"&&["info","warning","error"].includes(e.severity)&&(e.path===void 0||typeof e.path=="string"))}function I(r,e){return Array.isArray(r)&&r.every(i=>h(i)&&Number.isSafeInteger(i.editIndex)&&i.editIndex>=0&&i.editIndex<e&&typeof i.code=="string"&&typeof i.message=="string")}function L(r,e){let i;if(!h(r)||typeof r.revision!="string"||!r.revision.trim()?i="非空 revision(请先在适配器解包业务响应)":r.sourceToken!==void 0&&typeof r.sourceToken!="string"?i="字符串 sourceToken":r.diagnostics!==void 0&&!A(r.diagnostics)?i="结构化 diagnostics":r.conflicts!==void 0&&!I(r.conflicts,e)&&(i="有效 editIndex/code/message conflicts"),i)throw new t.MachReportError("edit",`ReportProvider.save 必须返回${i};服务器可能已提交,请重新查询确认后再编辑`)}function y(r){return typeof r=="function"?r():r}function D(r,e){const i=new Set(r.flatMap(o=>o.source?.[e]===void 0?[]:[String(o.source[e])]));return i.size===1?[...i][0]:void 0}function w(r,e,i,o){return typeof r=="function"?r():D(e,i)??o??r}function x(r){return r.requestId??globalThis.crypto?.randomUUID?.()??`mr-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}function F(r,e){if(!r.save)throw new t.MachReportError("config","ReportProvider.save 未配置,无法启用业务保存");let i="",o,n,a=0;function f(s,c,g){s.conflicts?.length||c!==i||g!==a||(o=s.revision,n=s.sourceToken)}async function T(s,c){if(c.signal.aborted)throw c.signal.reason??new DOMException("Aborted","AbortError");const g=y(e.reportId),m={...y(e.params??{})},E=JSON.stringify([g,m]),O=++a;if(E!==i&&(i=E,o=void 0,n=void 0),e.requireSource!==!1&&s.edits.some(u=>!u.source))throw new p.ReportCellEditError("missing");const d=await r.save({reportId:g,params:m,signal:c.signal,requestId:s.requestId,action:c.action,edits:t.cloneReportSnapshot(s.edits),expectedRevision:w(e.expectedRevision,s.edits,"revision",o),sourceToken:w(e.sourceToken,s.edits,"sourceToken",n)});if(c.signal.aborted)throw c.signal.reason??new DOMException("Aborted","AbortError");L(d,s.edits.length),d.diagnostics?.forEach(u=>e.onDiagnostic?.(u));const R=d.diagnostics?.filter(u=>u.severity==="error");if(R?.length)throw new t.MachReportError("edit",R.map(u=>u.message).join(";"),{diagnostics:R});const _=d.conflicts?.map(u=>({source:s.edits[u.editIndex]?.source,address:s.edits[u.editIndex]?.address,message:u.message}));return f(d,E,O),{revision:d.revision,sourceToken:d.sourceToken,conflicts:_}}return{requireSource:e.requireSource??!0,canEdit:e.canEdit,validate:e.validate,saveBatch:T,save:(s,c)=>T({requestId:x(c),edits:[t.cloneReportSnapshot(s)]},c)}}exports.DEFAULT_CALCULATION_MESSAGES=t.DEFAULT_CALCULATION_MESSAGES;exports.DEFAULT_MESSAGES=t.DEFAULT_MESSAGES;exports.DEFAULT_THEME=t.DEFAULT_THEME;exports.MachReportError=t.MachReportError;exports.PlanLoadError=t.PlanLoadError;exports.REPORT_EXPORT_FORMATS=t.REPORT_EXPORT_FORMATS;exports.REPORT_PREVIEW_TOOLS=t.REPORT_PREVIEW_TOOLS;exports.ReportPagination=t.ReportPagination;exports.ReportParamPanel=t.ReportParamPanel;exports.ReportPreview=t.ReportPreview;exports.ReportToolbar=t.ReportToolbar;exports.SILENT_LOGGER=t.SILENT_LOGGER;exports.buildPrintDocument=t.buildPrintDocument;exports.buildWordHtml=t.buildWordHtml;exports.createDefaultPdfExporter=t.createDefaultPdfExporter;exports.createFetchRequest=t.createFetchRequest;exports.createReportStoragePreferences=t.createReportStoragePreferences;exports.defineMachReportConfig=t.defineMachReportConfig;exports.defineMachReportPreset=t.defineMachReportPreset;exports.joinReportIds=t.joinReportIds;exports.normalizeReportIds=t.normalizeReportIds;exports.normalizeReportLoadError=t.normalizeReportLoadError;exports.printPlans=t.printPlans;exports.provideMachReportConfig=t.provideMachReportConfig;exports.resolveCalculationMessages=t.resolveCalculationMessages;exports.resolveConfig=t.resolveConfig;exports.themeToCssVars=t.themeToCssVars;exports.toErrorDetail=t.toErrorDetail;exports.useMachReportConfig=t.useMachReportConfig;exports.usePageWindow=t.usePageWindow;exports.usePrintExport=t.usePrintExport;exports.useZoom=t.useZoom;exports.MACH_REPORT_CONFIG_KEY=l.MACH_REPORT_CONFIG_KEY;exports.MACH_REPORT_CONTROLLER_KEY=l.MACH_REPORT_CONTROLLER_KEY;exports.MACH_REPORT_FETCHER_KEY=l.MACH_REPORT_FETCHER_KEY;exports.MACH_REPORT_PDF_EXPORTER_KEY=l.MACH_REPORT_PDF_EXPORTER_KEY;exports.MachReportPreview=l.MachReportPreview;exports.machReportPlugin=l.machReportPlugin;exports.createLocalFetcher=C;exports.createProviderEditing=F;exports.useMachReport=S;exports.useReportPreview=v;Object.keys(p).forEach(r=>{r!=="default"&&!Object.prototype.hasOwnProperty.call(exports,r)&&Object.defineProperty(exports,r,{enumerable:!0,get:()=>p[r]})});
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const E=require("@agile-team/mach-report"),i=require("./ReportPreview-DWXROHBP.cjs"),a=require("./config-BRoLo2oj.cjs"),f=require("./injection-keys-Db_DyLkm.cjs"),_=require("./plugin-BDTU4D94.cjs"),h=require("vue");function S(r){const e=E.createReportSource(r),n=async t=>{if(t.reportIds.length===0)throw new i.PlanLoadError("缺少报表 ID");for(const o of t.reportIds)if(!Object.prototype.hasOwnProperty.call(r,o)||!r[o])throw new i.PlanLoadError(`本地模板 ${o} 不存在`);return e(t)};return n.getParamDefs=e.getParamDefs,n}const v=Object.freeze({loading:!1,hasPlan:!1,pageCount:0,currentPage:1,exporting:null,printing:!1,canExport:!1,canPrint:!1,error:null,pdfFont:Object.freeze({status:"unchecked",fontUrl:""})});function A(){const r=h.shallowRef(null),e=()=>r.value?.state??v,n=Object.freeze({get loading(){return e().loading},get hasPlan(){return e().hasPlan},get pageCount(){return e().pageCount},get currentPage(){return e().currentPage},get exporting(){return e().exporting},get printing(){return e().printing},get canExport(){return e().canExport},get canPrint(){return e().canPrint},get error(){return e().error},get pdfFont(){return e().pdfFont},get editing(){return e().editing??!1},get saving(){return e().saving??!1},get importing(){return e().importing??!1},get dirty(){return e().dirty??!1},get pendingLocalChanges(){return e().pendingLocalChanges??!1},get task(){return e().task??null},get diagnostics(){return e().diagnostics??[]},get reportIds(){return e().reportIds??[]},get params(){return e().params??{}},get canUndo(){return e().canUndo??!1},get canRedo(){return e().canRedo??!1},get changeCount(){return e().changeCount??0},get selection(){return e().selection??null}});function t(){if(!r.value)throw new a.MachReportError("config","报表预览尚未挂载,请在 ready 后调用控制器");return r.value}return{ref(o){const s=o;r.value=s&&typeof s.reload=="function"&&typeof s.print=="function"&&typeof s.exportAs=="function"&&typeof s.openPdfWindow=="function"&&typeof s.gotoPage=="function"&&typeof s.setParams=="function"?s:null},ready:h.computed(()=>r.value!==null),state:n,async checkPdfFont(){const o=t();return o.checkPdfFont?o.checkPdfFont():{status:"unverified",fontUrl:"",message:"旧自定义控制器未提供字体检查,请由宿主确认字体配置"}},cancelTask(){t().cancelTask?.()},async confirmDiscard(o){return await t().confirmDiscard?.(o)??!0},getOutputDiagnostics(o){return t().getOutputDiagnostics?.(o)??[]},async reload(){await t().reload()},async print(){await t().print()},async exportAs(o){await t().exportAs(o)},openPdfWindow(){t().openPdfWindow()},gotoPage(o){t().gotoPage(o)},async setParams(o,s){await t().setParams(o,s)},async importExcel(o,s){const g=t();if(!g.importExcel)throw new a.MachReportError("config","旧自定义控制器未提供 Excel 导入");return g.importExcel(o,s)},getPlan(){return t().getPlan?.()??null},getChanges(){return t().getChanges?.()??[]},getDifferences:()=>t().getDifferences?.()??[],undo:async()=>await t().undo?.()??!1,redo:async()=>await t().redo?.()??!1,restoreChanges:async()=>await t().restoreChanges?.()??!1,getSelection:()=>t().getSelection?.()??null,focusCell:async(o,s)=>await t().focusCell?.(o,s)??!1,focusField:async o=>await t().focusField?.(o)??!1,copySelection:()=>t().copySelection?.()??"",pasteSelection:async o=>await t().pasteSelection?.(o)??!1}}function I(){return h.inject(f.MACH_REPORT_CONTROLLER_KEY,null)}function T(r){return!!r&&typeof r=="object"&&!Array.isArray(r)}function L(r){return Array.isArray(r)&&r.every(e=>T(e)&&typeof e.code=="string"&&typeof e.message=="string"&&["info","warning","error"].includes(e.severity)&&(e.path===void 0||typeof e.path=="string"))}function D(r,e){return Array.isArray(r)&&r.every(n=>T(n)&&Number.isSafeInteger(n.editIndex)&&n.editIndex>=0&&n.editIndex<e&&typeof n.code=="string"&&typeof n.message=="string")}function x(r,e){let n;if(!T(r)||typeof r.revision!="string"||!r.revision.trim()?n="非空 revision(请先在适配器解包业务响应)":r.sourceToken!==void 0&&typeof r.sourceToken!="string"?n="字符串 sourceToken":r.diagnostics!==void 0&&!L(r.diagnostics)?n="结构化 diagnostics":r.conflicts!==void 0&&!D(r.conflicts,e)&&(n="有效 editIndex/code/message conflicts"),n)throw new a.MachReportError("edit",`ReportProvider.save 必须返回${n};服务器可能已提交,请重新查询确认后再编辑`)}function w(r){return typeof r=="function"?r():r}function F(r,e){const n=new Set(r.flatMap(t=>t.source?.[e]===void 0?[]:[String(t.source[e])]));return n.size===1?[...n][0]:void 0}function O(r,e,n,t){return typeof r=="function"?r():F(e,n)??t??r}function b(r){return r.requestId??globalThis.crypto?.randomUUID?.()??`mr-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}function q(r,e){if(!r.save)throw new a.MachReportError("config","ReportProvider.save 未配置,无法启用业务保存");let n="",t,o,s=0;function g(c,u,p){c.conflicts?.length||u!==n||p!==s||(t=c.revision,o=c.sourceToken)}async function m(c,u){if(u.signal.aborted)throw u.signal.reason??new DOMException("Aborted","AbortError");const p=w(e.reportId),y={...w(e.params??{})},R=JSON.stringify([p,y]),C=++s;if(R!==n&&(n=R,t=void 0,o=void 0),e.requireSource!==!1&&c.edits.some(d=>!d.source))throw new E.ReportCellEditError("missing");const l=await r.save({reportId:p,params:y,signal:u.signal,requestId:c.requestId,action:u.action,edits:i.cloneReportSnapshot(c.edits),expectedRevision:O(e.expectedRevision,c.edits,"revision",t),sourceToken:O(e.sourceToken,c.edits,"sourceToken",o)});if(u.signal.aborted)throw u.signal.reason??new DOMException("Aborted","AbortError");x(l,c.edits.length),l.diagnostics?.forEach(d=>e.onDiagnostic?.(d));const P=l.diagnostics?.filter(d=>d.severity==="error");if(P?.length)throw new a.MachReportError("edit",P.map(d=>d.message).join(";"),{diagnostics:P});const M=l.conflicts?.map(d=>({source:c.edits[d.editIndex]?.source,address:c.edits[d.editIndex]?.address,message:d.message}));return g(l,R,C),{revision:l.revision,sourceToken:l.sourceToken,conflicts:M}}return{requireSource:e.requireSource??!0,canEdit:e.canEdit,validate:e.validate,saveBatch:m,save:(c,u)=>m({requestId:b(u),edits:[i.cloneReportSnapshot(c)]},u)}}exports.PlanLoadError=i.PlanLoadError;exports.REPORT_EXPORT_FORMATS=i.REPORT_EXPORT_FORMATS;exports.REPORT_PREVIEW_TOOLS=i.REPORT_PREVIEW_TOOLS;exports.ReportPagination=i.ReportPagination;exports.ReportPreview=i.ReportPreview;exports.ReportToolbar=i.ReportToolbar;exports.buildPrintDocument=i.buildPrintDocument;exports.buildWordHtml=i.buildWordHtml;exports.createDefaultPdfExporter=i.createDefaultPdfExporter;exports.createFetchRequest=i.createFetchRequest;exports.createReportStoragePreferences=i.createReportStoragePreferences;exports.joinReportIds=i.joinReportIds;exports.normalizeReportIds=i.normalizeReportIds;exports.printPlans=i.printPlans;exports.usePageWindow=i.usePageWindow;exports.usePrintExport=i.usePrintExport;exports.useZoom=i.useZoom;exports.DEFAULT_CALCULATION_MESSAGES=a.DEFAULT_CALCULATION_MESSAGES;exports.DEFAULT_MESSAGES=a.DEFAULT_MESSAGES;exports.DEFAULT_THEME=a.DEFAULT_THEME;exports.MachReportError=a.MachReportError;exports.ReportParamPanel=a.ReportParamPanel;exports.SILENT_LOGGER=a.SILENT_LOGGER;exports.defineMachReportConfig=a.defineMachReportConfig;exports.defineMachReportPreset=a.defineMachReportPreset;exports.normalizeReportLoadError=a.normalizeReportLoadError;exports.provideMachReportConfig=a.provideMachReportConfig;exports.resolveCalculationMessages=a.resolveCalculationMessages;exports.resolveConfig=a.resolveConfig;exports.themeToCssVars=a.themeToCssVars;exports.toErrorDetail=a.toErrorDetail;exports.useMachReportConfig=a.useMachReportConfig;exports.MACH_REPORT_CONFIG_KEY=f.MACH_REPORT_CONFIG_KEY;exports.MACH_REPORT_CONTROLLER_KEY=f.MACH_REPORT_CONTROLLER_KEY;exports.MACH_REPORT_FETCHER_KEY=f.MACH_REPORT_FETCHER_KEY;exports.MACH_REPORT_PDF_EXPORTER_KEY=f.MACH_REPORT_PDF_EXPORTER_KEY;exports.MachReportPreview=_.MachReportPreview;exports.machReportPlugin=_.machReportPlugin;exports.createLocalFetcher=S;exports.createProviderEditing=q;exports.useMachReport=A;exports.useReportPreview=I;Object.keys(E).forEach(r=>{r!=="default"&&!Object.prototype.hasOwnProperty.call(exports,r)&&Object.defineProperty(exports,r,{enumerable:!0,get:()=>E[r]})});