@agile-team/mach-report 0.5.0 → 0.6.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 (71) hide show
  1. package/dist/ReportPreview-DWLjYi_p.js +527 -0
  2. package/dist/ReportPreview-rBtmbu3W.cjs +6 -0
  3. package/dist/_commonjsHelpers-DKOUU3wS.cjs +1 -0
  4. package/dist/_commonjsHelpers-DaMA6jEr.js +8 -0
  5. package/dist/builder/template-builder.d.ts +53 -0
  6. package/dist/compat/jh4j-template.d.ts +12 -0
  7. package/dist/defaults.d.ts +27 -0
  8. package/dist/index.cjs +6 -1663
  9. package/dist/index.d.cts +13 -344
  10. package/dist/index.d.ts +13 -344
  11. package/dist/index.js +727 -1419
  12. package/dist/layout/paginate.d.ts +51 -0
  13. package/dist/layout/textwrap.d.ts +36 -0
  14. package/dist/manager/api.d.ts +45 -0
  15. package/dist/manager/index.d.ts +2 -0
  16. package/dist/manager/types.d.ts +50 -0
  17. package/dist/manager.cjs +1 -122
  18. package/dist/manager.d.cts +5 -97
  19. package/dist/manager.d.ts +5 -97
  20. package/dist/manager.js +66 -81
  21. package/dist/pdf/font-loader.d.ts +5 -0
  22. package/dist/pdf/index.d.ts +2 -0
  23. package/dist/pdf/render-pdf.d.ts +25 -0
  24. package/dist/pdf.cjs +84 -52530
  25. package/dist/pdf.d.cts +4 -31
  26. package/dist/pdf.d.ts +4 -31
  27. package/dist/pdf.js +22843 -39218
  28. package/dist/plugin-BIJxGHZX.cjs +1 -0
  29. package/dist/plugin-DrV67_VW.js +89 -0
  30. package/dist/render/canvas.d.ts +61 -0
  31. package/dist/render/dom.d.ts +10 -0
  32. package/dist/render/grid-geometry.d.ts +41 -0
  33. package/dist/render/style.d.ts +33 -0
  34. package/dist/render/window.d.ts +23 -0
  35. package/dist/schema/render-plan.d.ts +96 -0
  36. package/dist/schema/validate.d.ts +15 -0
  37. package/dist/sql/ast-check.d.ts +14 -0
  38. package/dist/sql/compile.d.ts +31 -0
  39. package/dist/sql/expr.d.ts +21 -0
  40. package/dist/sql/index.d.ts +4 -0
  41. package/dist/sql/tokenizer.d.ts +25 -0
  42. package/dist/sql.cjs +68 -45207
  43. package/dist/sql.d.cts +3 -93
  44. package/dist/sql.d.ts +3 -93
  45. package/dist/sql.js +37213 -41613
  46. package/dist/style-B3vxGDZd.cjs +3 -0
  47. package/dist/style-B7Xfo5I-.js +255 -0
  48. package/dist/style.css +1 -0
  49. package/dist/units.d.ts +11 -0
  50. package/dist/vue/ReportPreview.d.ts +141 -0
  51. package/dist/vue/ReportToolbar.d.ts +25 -0
  52. package/dist/vue/adapters.d.ts +37 -0
  53. package/dist/vue/async.d.cts +146 -0
  54. package/dist/vue/async.d.ts +146 -0
  55. package/dist/vue/composables/usePageWindow.d.ts +28 -0
  56. package/dist/vue/composables/usePrintExport.d.ts +19 -0
  57. package/dist/vue/composables/useZoom.d.ts +15 -0
  58. package/dist/vue/config.d.ts +79 -0
  59. package/dist/vue/index.d.cts +11 -0
  60. package/dist/vue/index.d.ts +11 -0
  61. package/dist/vue/injection-keys.d.ts +12 -0
  62. package/dist/vue/local-adapter.d.ts +12 -0
  63. package/dist/vue/pdf-exporter.d.ts +13 -0
  64. package/dist/vue/plugin.d.ts +34 -0
  65. package/dist/vue-async.cjs +1 -0
  66. package/dist/vue-async.js +17 -0
  67. package/dist/vue.cjs +1 -0
  68. package/dist/vue.js +44 -0
  69. package/package.json +44 -6
  70. package/dist/textwrap-DWzM7pt1.d.cts +0 -135
  71. package/dist/textwrap-DWzM7pt1.d.ts +0 -135
package/dist/index.d.cts CHANGED
@@ -1,344 +1,13 @@
1
- import { P as PlanPage, a as PlanComponent, C as ComponentStyle, T as TextMeasurer, R as RenderPlan, G as GridCell, b as PlanGrid } from './textwrap-DWzM7pt1.js';
2
- export { c as ComponentKind, d as GridPlanResponse, e as RENDER_PLAN_SCHEMA_VERSION, f as RichParagraph, g as RichSegment, h as TextMeasureOptions, i as charWidthEm, j as createCanvasMeasurer, k as createHeuristicMeasurer, l as heuristicMeasurer, m as isImageBackedComponent, n as isRichText, o as measureTextMm, t as toRenderPlan, w as wrapText } from './textwrap-DWzM7pt1.js';
3
-
4
- /**
5
- * 全引擎共享默认值(唯一真相源)。
6
- *
7
- * 修改这里的任何常量前请注意消费方:
8
- * - LINE_HEIGHT:分页行高估算 / Canvas / PDF 三处换算必须一致
9
- * - DEFAULT_FONT_PT / DEFAULT_BORDER_PT:三后端默认字号与线宽
10
- * - SCHEMA_VERSION_*:RenderPlan 版本标识(adapter 产出侧使用)
11
- *
12
- * 历史:这些值曾散落在 paginate/canvas/pdf/dom 四个文件中各写一份,
13
- * 是三后端漂移的温床,收敛于此。
14
- */
15
- /** 默认行高倍数(基线距 = 字号 × 该系数,与 jh4j 打印口径一致) */
16
- declare const LINE_HEIGHT = 1.35;
17
- /** 默认字号(pt),对齐 jh4j 模板缺省值 */
18
- declare const DEFAULT_FONT_PT = 10.5;
19
- /** 默认边框线宽(pt) */
20
- declare const DEFAULT_BORDER_PT = 0.75;
21
- /** 默认描边色(#333 与 jh4j 网格线一致) */
22
- declare const DEFAULT_STROKE_COLOR = "#333333";
23
- /** 默认文本色 */
24
- declare const DEFAULT_TEXT_COLOR = "#000000";
25
- /** RenderPlan 正式 schema 版本(core 分页引擎产出) */
26
- declare const SCHEMA_VERSION_MACH = "1.0.0-mach";
27
- /** 本地渲染适配器产出版本标识(vue/createLocalFetcher) */
28
- declare const SCHEMA_VERSION_LOCAL = "mach-local";
29
- /** jh4j gridPlan 兼容数据标识(vue/createJh4jGridPlanFetcher) */
30
- declare const SCHEMA_VERSION_JH4J = "jh4j-compatible";
31
-
32
- declare const MM_PER_INCH = 25.4;
33
- declare const CSS_DPI = 96;
34
- declare function mmToPxFactor(dpi?: number): number;
35
- declare function mmToPx(value: number, dpi?: number): number;
36
- declare function pxToMm(value: number, dpi?: number): number;
37
- declare function ptToPx(pt: number, dpi?: number): number;
38
- declare function round(value: number, digits: number): number;
39
- declare const PAPER_SIZES: Record<string, {
40
- widthMm: number;
41
- heightMm: number;
42
- }>;
43
-
44
- interface ValidationError {
45
- path: string;
46
- message: string;
47
- }
48
- interface ValidationResult {
49
- ok: boolean;
50
- errors: ValidationError[];
51
- warnings: ValidationError[];
52
- }
53
- declare function validateComponent(comp: unknown, path: string, errors: ValidationError[], warnings?: ValidationError[]): void;
54
- declare function validatePage(page: unknown, path: string, errors: ValidationError[], warnings?: ValidationError[]): void;
55
- declare function validateRenderPlan(input: unknown): ValidationResult;
56
- declare function assertRenderPlan(input: unknown): PlanPage[];
57
-
58
- interface ListColumn {
59
- header: string;
60
- field: string;
61
- widthMm: number;
62
- style?: ComponentStyle;
63
- }
64
- interface ListComponent {
65
- kind: "list";
66
- id?: string;
67
- leftMm: number;
68
- topMm: number;
69
- widthMm: number;
70
- dataset: string;
71
- columns: ListColumn[];
72
- fontSizePt?: number;
73
- headerBold?: boolean;
74
- rowHeightMm?: number;
75
- paddingMm?: number;
76
- headerEveryPage?: boolean;
77
- headerBackgroundColor?: string;
78
- border?: boolean;
79
- }
80
- type TemplateComponent = PlanComponent | ListComponent;
81
- interface TemplatePage {
82
- widthMm: number;
83
- heightMm: number;
84
- marginTopMm?: number;
85
- marginBottomMm?: number;
86
- marginLeftMm?: number;
87
- marginRightMm?: number;
88
- components: TemplateComponent[];
89
- }
90
- interface ReportTemplate {
91
- schemaVersion?: string;
92
- pages: TemplatePage[];
93
- }
94
- type DatasetRows = Record<string, Record<string, unknown>[]>;
95
- interface PaginateOptions {
96
- /** 每行额外占高(mm),压测专用钩子 */
97
- mmPerRow?: number;
98
- /** 文本测量器(默认启发式;浏览器端可注入 canvas 测量校准) */
99
- measurer?: TextMeasurer;
100
- }
101
- interface PaginateResult {
102
- plan: RenderPlan;
103
- warnings: string[];
104
- }
105
- declare function paginateTemplate(template: ReportTemplate, datasets: DatasetRows, optionsOrMmPerRow?: number | PaginateOptions): PaginateResult;
106
-
107
- interface GridCellBox {
108
- ri: number;
109
- ci: number;
110
- cell: GridCell;
111
- /** 相对组件左上角(mm,顶点原点) */
112
- xMm: number;
113
- yMm: number;
114
- widthMm: number;
115
- heightMm: number;
116
- }
117
- /** 网格线段:kind="h" 为水平线(pos=y,from/to=x 区间);"v" 为垂直线(pos=x,from/to=y 区间) */
118
- interface GridEdge {
119
- kind: "h" | "v";
120
- pos: number;
121
- from: number;
122
- to: number;
123
- }
124
- interface GridLayout {
125
- columns: {
126
- pos: number;
127
- size: number;
128
- }[];
129
- rows: {
130
- pos: number;
131
- size: number;
132
- }[];
133
- cells: GridCellBox[];
134
- /** 内部网格线段(不含外框;已跳过被 colSpan/rowSpan 跨越的边界,相邻段已合并) */
135
- edges: GridEdge[];
136
- }
137
- /**
138
- * 网格几何统一解析(DOM/Canvas/PDF 三后端共用,单位真相源):
139
- * - 列宽:优先 colWidthsMm(等比缩放至组件宽),否则按列数均分
140
- * - 行高:优先 rowHeightsMm(等比缩放至组件高),否则按行数均分
141
- * - colSpan/rowSpan:占位矩阵展开,跨度取起止行列差;越界收敛到网格内
142
- * - 行内 null/undefined 单元格视为占 1 列的空单元格(与 DOM 表格行为一致)
143
- * - edges:内部网格线段,跳过被 span 跨越的边界(合并单元格中间无线)
144
- * 产出为组件左上角顶点原点的 mm 坐标,各后端自行换算 px/pt。
145
- */
146
- declare function resolveGridLayout(grid: PlanGrid, compWidthMm: number, compHeightMm: number): GridLayout;
147
-
148
- /**
149
- * 组件样式解析(三后端共享的唯一样式语义真相源)。
150
- *
151
- * DOM/Canvas/PDF 各自把 ComponentStyle 翻译成绘制语义时必须经过这里,
152
- * 禁止后端内联写 fontSize/颜色/线宽换算——历史上三处各写一份导致
153
- * Canvas 字号 2.13x、网格线口径不一致等漂移 bug。
154
- */
155
-
156
- /** 解析后的字号(px 值已按 dpi 换算;pt 值供 PDF 使用) */
157
- interface ResolvedFontSize {
158
- fontSizePt: number;
159
- fontSizePx: number;
160
- }
161
- /** 字号解析:fontSizePx 直通;否则 pt→px(与 units.ptToPx 同源) */
162
- declare function resolveFontSize(style: Pick<ComponentStyle, "fontSizePx" | "fontSize"> | undefined, dpi?: number, defaultPt?: number): ResolvedFontSize;
163
- /** 描边解析:颜色 + 线宽(pt) */
164
- declare function resolveStroke(style: Pick<ComponentStyle, "borderColor" | "lineColor" | "lineWidthPt"> | undefined, fallbackColor?: string): {
165
- color: string;
166
- widthPt: number;
167
- };
168
- /** 文本颜色解析 */
169
- declare function resolveTextColor(style: Pick<ComponentStyle, "color"> | undefined, fallback?: string): string;
170
- /** 行高解析(倍数,基线距 = 字号 × lineHeight) */
171
- declare function resolveLineHeight(style: Pick<ComponentStyle, "lineHeight"> | undefined): number;
172
- /** 盒子边框语义:四边开关 + 内部网格线(四边全关则内线不画) */
173
- interface BoxBorders {
174
- top: boolean;
175
- right: boolean;
176
- bottom: boolean;
177
- left: boolean;
178
- /** 网格内线(仅当任意外边开启) */
179
- inner: boolean;
180
- }
181
- /**
182
- * 边框开关解析:
183
- * - 未声明(undefined)→ 四边全开(与既有 rect 总有边框的行为兼容)
184
- * - 显式 false → 对应边关闭
185
- * - 四边全关(如 list border:false)→ 内线也不画
186
- */
187
- declare function resolveBoxBorders(style: Pick<ComponentStyle, "borderTop" | "borderRight" | "borderBottom" | "borderLeft"> | undefined): BoxBorders;
188
-
189
- interface RenderOptions {
190
- dpi?: number;
191
- classNames?: Partial<Record<ClassKey, string>>;
192
- }
193
- type ClassKey = "root" | "page" | "comp" | "text" | "lines" | "line" | "rich" | "paragraph" | "segment" | "image" | "shape" | "grid" | "row" | "cell" | "unknown";
194
- declare function classOf(key: ClassKey, options?: RenderOptions): string;
195
- declare function renderComponent(comp: PlanComponent, dpi: number, options: RenderOptions, doc: Document): HTMLElement;
196
- declare function renderPage(page: PlanPage, dpi: number, options: RenderOptions, doc: Document): HTMLElement;
197
- declare function renderPlan(plan: RenderPlan, doc: Document, options?: RenderOptions): HTMLElement;
198
-
199
- interface CanvasRenderOptions {
200
- /** 设备像素比,默认取运行环境 devicePixelRatio */
201
- dpr?: number;
202
- dpi?: number;
203
- /** 文本默认字体族 */
204
- fontFamily?: string;
205
- /** 文本测量器(默认启发式) */
206
- measurer?: TextMeasurer;
207
- /** 只渲染页区间(闭区间索引;缺省全渲染——仅小报表使用,大报表请用 createCanvasPager) */
208
- start?: number;
209
- end?: number;
210
- }
211
- declare function measurePageSizePx(page: Pick<PlanPage, "pageWidthMm" | "pageHeightMm">, dpi?: number): {
212
- widthPx: number;
213
- heightPx: number;
214
- };
215
- /** pt→px 换算(与 DOM 后端 units.ptToPx 同一真相源),供单测直接断言 */
216
- declare function planFontSizePx(style: {
217
- fontSizePx?: number;
218
- fontSize?: number;
219
- } | undefined, dpi?: number): number;
220
- interface CanvasRenderResult {
221
- canvases: HTMLCanvasElement[];
222
- }
223
- /**
224
- * RenderPlan → Canvas 位图页(顶点原点坐标系,与 DOM/PDF 一致)。
225
- *
226
- * ⚠️ 内存模型:A4 @dpr2 ≈ 14MB/页,全量渲染 100 页 ≈ 1.4GB。
227
- * 大报表必须使用 createCanvasPager(窗口化 + 画布池 + 分帧渲染),
228
- * 本函数适合页数少或已指定 start/end 区间的场景。
229
- */
230
- declare function renderPlanToCanvas(plan: RenderPlan, options?: CanvasRenderOptions): CanvasRenderResult;
231
- interface CanvasPagerOptions extends CanvasRenderOptions {
232
- /** 预渲染页数缓冲(窗口两侧各加 N 页),默认 1 */
233
- overscan?: number;
234
- /** 页间距 px,默认 18 */
235
- gapPx?: number;
236
- /** 每帧渲染页数上限(分帧,防长任务),默认 1 */
237
- pagesPerFrame?: number;
238
- }
239
- interface CanvasPager {
240
- /** 挂载到滚动容器(viewport,overflow:auto),接管其内容 */
241
- attach(viewport: HTMLElement): void;
242
- destroy(): void;
243
- /** 当前实际渲染的页区间 */
244
- window(): {
245
- start: number;
246
- end: number;
247
- };
248
- }
249
- /**
250
- * Canvas 虚拟化分页器(大报表专用):
251
- * - 视口窗口化:只绘制窗口内页(computePageWindow 与 DOM 后端共用)
252
- * - 画布池:固定数量 canvas 复用重绘,滚动零新增位图
253
- * - 分帧:每帧最多 pagesPerFrame 页,滚动期间不产生长任务
254
- *
255
- * 内存从 O(总页数) 降到 O(窗口+2×overscan)。
256
- */
257
- declare function createCanvasPager(plan: RenderPlan, options?: CanvasPagerOptions): CanvasPager;
258
-
259
- interface PageWindowInput {
260
- pageHeightsPx: number[];
261
- viewportHeightPx: number;
262
- scrollTopPx: number;
263
- overscan?: number;
264
- /** 页间距(px)。占位高度按“每页高度+间距”累计,与 margin-bottom 布局一致;默认 0 */
265
- gapPx?: number;
266
- }
267
- interface PageWindow {
268
- start: number;
269
- end: number;
270
- padTopPx: number;
271
- padBottomPx: number;
272
- }
273
- /**
274
- * 页级视口虚拟化:给定每页高度与滚动位置,返回需要真实渲染的页区间
275
- * 与上下占位高度。start/end 为闭区间索引。
276
- *
277
- * 布局模型:每页占据 height + gap(gap 为页间距,默认 0),
278
- * padTop/padBottom 同口径累计,保证 占位+渲染页+间距 还原总滚动高度。
279
- * 内部用前缀和 + 二分定位覆盖页与可见终点。
280
- */
281
- declare function computePageWindow(input: PageWindowInput): PageWindow;
282
-
283
- interface Jh4jImportResult {
284
- template: ReportTemplate;
285
- warnings: string[];
286
- }
287
- type Raw = Record<string, unknown>;
288
- /**
289
- * jh4j 模板 content(exportBackendPrintConfig 产物,见 docs/reverse-findings.md §6)
290
- * → MachReport ReportTemplate。单向转换,未知结构降级 + 告警,绝不抛错。
291
- */
292
- declare function importJh4jTemplateContent(content: string | Raw): Jh4jImportResult;
293
-
294
- type Geometry = Partial<Pick<PlanComponent, "leftMm" | "topMm" | "widthMm" | "heightMm">>;
295
- /** 纸张预设名(对齐 PAPER_SIZES 表) */
296
- type PaperName = keyof typeof PAPER_SIZES;
297
- interface PageOptions {
298
- /** 横向(宽高互换) */
299
- landscape?: boolean;
300
- margins?: Partial<Pick<TemplatePage, "marginTopMm" | "marginBottomMm" | "marginLeftMm" | "marginRightMm">>;
301
- }
302
- type PageMargins = Partial<Pick<TemplatePage, "marginTopMm" | "marginBottomMm" | "marginLeftMm" | "marginRightMm">>;
303
- /** 解析纸张参数:数字按宽高使用;字符串查 PAPER_SIZES 预设;缺省 A4 纵向 */
304
- declare function resolvePaper(paper: PaperName | {
305
- widthMm: number;
306
- heightMm: number;
307
- } | number, heightArg?: number, landscape?: boolean): {
308
- widthMm: number;
309
- heightMm: number;
310
- };
311
- declare class TemplateBuilder {
312
- readonly pages: TemplatePage[];
313
- private pending;
314
- /**
315
- * 新建页。纸张支持三种写法:
316
- * - 预设名:.page("a4", { landscape: true, margins: {...} })
317
- * - 数字:.page(210, 297)(第三参数兼容旧 margins 对象或新 options)
318
- * - 对象:.page({ widthMm: 210, heightMm: 297 })
319
- */
320
- page(paper?: PaperName | {
321
- widthMm: number;
322
- heightMm: number;
323
- } | number, optionsOrHeight?: number | PageOptions, maybeOptions?: PageOptions | PageMargins): PageBuilder;
324
- collect(): void;
325
- build(): ReportTemplate;
326
- }
327
- declare class PageBuilder {
328
- private readonly parent;
329
- private readonly page;
330
- private components;
331
- constructor(parent: TemplateBuilder, page: Omit<TemplatePage, "components">);
332
- text(content: string, geometry?: Geometry, style?: ComponentStyle): this;
333
- list(dataset: string, geometry: Partial<Pick<ListComponent, "leftMm" | "topMm" | "widthMm">>, columns: ListColumn[], options?: Partial<Omit<ListComponent, "kind" | "leftMm" | "topMm" | "widthMm" | "dataset" | "columns">>): this;
334
- rect(geometry: Required<Pick<PlanComponent, "leftMm" | "topMm" | "widthMm" | "heightMm">>, style?: ComponentStyle): this;
335
- line(leftMm: number, topMm: number, widthMm: number, style?: ComponentStyle): this;
336
- barcode(content: string, geometry: Required<Geometry>): this;
337
- qrcode(content: string, sizeMm: number, leftMm: number, topMm: number): this;
338
- buildPage(): TemplatePage;
339
- done(): TemplateBuilder;
340
- build(): ReportTemplate;
341
- }
342
- declare function createTemplate(): TemplateBuilder;
343
-
344
- export { type BoxBorders, CSS_DPI, type CanvasPager, type CanvasPagerOptions, type CanvasRenderOptions, type CanvasRenderResult, type ClassKey, ComponentStyle, DEFAULT_BORDER_PT, DEFAULT_FONT_PT, DEFAULT_STROKE_COLOR, DEFAULT_TEXT_COLOR, type DatasetRows, GridCell, type GridCellBox, type GridEdge, type GridLayout, type Jh4jImportResult, LINE_HEIGHT, type ListColumn, type ListComponent, MM_PER_INCH, PAPER_SIZES, PageBuilder, type PageOptions, type PageWindow, type PageWindowInput, type PaginateOptions, type PaginateResult, type PaperName, PlanComponent, PlanGrid, PlanPage, type RenderOptions, RenderPlan, type ReportTemplate, type ResolvedFontSize, SCHEMA_VERSION_JH4J, SCHEMA_VERSION_LOCAL, SCHEMA_VERSION_MACH, TemplateBuilder, type TemplateComponent, type TemplatePage, TextMeasurer, type ValidationError, type ValidationResult, assertRenderPlan, classOf, computePageWindow, createCanvasPager, createTemplate, importJh4jTemplateContent, measurePageSizePx, mmToPx, mmToPxFactor, paginateTemplate, planFontSizePx, ptToPx, pxToMm, renderComponent, renderPage, renderPlan, renderPlanToCanvas, resolveBoxBorders, resolveFontSize, resolveGridLayout, resolveLineHeight, resolvePaper, resolveStroke, resolveTextColor, round, validateComponent, validatePage, validateRenderPlan };
1
+ export * from './defaults';
2
+ export * from './units';
3
+ export * from './schema/render-plan';
4
+ export * from './schema/validate';
5
+ export * from './layout/textwrap';
6
+ export * from './layout/paginate';
7
+ export * from './render/grid-geometry';
8
+ export * from './render/style';
9
+ export * from './render/dom';
10
+ export * from './render/canvas';
11
+ export * from './render/window';
12
+ export * from './compat/jh4j-template';
13
+ export * from './builder/template-builder';